00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef THEPEG_QuarksToHadronsDecayer_H
00010 #define THEPEG_QuarksToHadronsDecayer_H
00011
00012
00013 #include "ThePEG/PDT/Decayer.h"
00014 #include "ThePEG/Handlers/FlavourGenerator.h"
00015
00016 namespace ThePEG {
00017
00018 ThePEG_DECLARE_CLASS_POINTERS(FlavourGenerator, FlavGenPtr);
00019
00035 class QuarksToHadronsDecayer: public Decayer {
00036
00037 public:
00038
00044 QuarksToHadronsDecayer()
00045 : theFixedN(0), theMinN(2), theC1(4.5), theC2(0.7*GeV), theC3(0.0) {}
00046
00050 virtual ~QuarksToHadronsDecayer();
00052
00053 public:
00054
00064 virtual bool accept(const DecayMode & dm) const;
00065
00072 virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const;
00074
00080 virtual int getN(Energy m0, Energy summq, int Nq) const;
00081
00086 virtual PVector getHadrons(int Nh, tcPDVector quarks) const;
00087
00093 virtual void distribute(const Particle & parent, PVector & children) const;
00094
00100 virtual double reweight(const Particle & parent,
00101 const PVector & children) const;
00102
00103 public:
00104
00110 int fixedN() const { return theFixedN; }
00111
00115 int minN() const { return theMinN; }
00116
00121 double c1() const { return theC1; }
00122
00127 Energy c2() const { return theC2; }
00128
00133 double c3() const { return theC3; }
00134
00138 tcFlavGenPtr flavourGenerator() const { return theFlavourGenerator; }
00139
00140 public:
00141
00142
00149 void persistentOutput(PersistentOStream & os) const;
00150
00156 void persistentInput(PersistentIStream & is, int version);
00158
00162 static void Init();
00163
00164 protected:
00165
00166
00167 protected:
00168
00175 virtual IBPtr clone() const;
00176
00181 virtual IBPtr fullclone() const;
00183
00184 private:
00185
00190 int theFixedN;
00191
00195 int theMinN;
00196
00200 double theC1;
00204 Energy theC2;
00205
00209 double theC3;
00210
00215 FlavGenPtr theFlavourGenerator;
00216
00217 private:
00218
00222 static ClassDescription<QuarksToHadronsDecayer> initQuarksToHadronsDecayer;
00223
00227 QuarksToHadronsDecayer & operator=(const QuarksToHadronsDecayer &);
00228
00229 };
00230
00231 }
00232
00233
00234 namespace ThePEG {
00235
00240 template <>
00241 struct BaseClassTrait<QuarksToHadronsDecayer,1>: public ClassTraitsType {
00243 typedef Decayer NthBase;
00244 };
00245
00249 template <>
00250 struct ClassTraits<QuarksToHadronsDecayer>
00251 : public ClassTraitsBase<QuarksToHadronsDecayer> {
00253 static string className() { return "ThePEG::QuarksToHadronsDecayer"; }
00257 static string library() { return "QuarksToHadronsDecayer.so"; }
00258 };
00259
00262 }
00263
00264 #endif