11 #ifndef Pythia8_FragmentationFlavZpT_H 12 #define Pythia8_FragmentationFlavZpT_H 14 #include "Pythia8/Basics.h" 15 #include "Pythia8/MathTools.h" 16 #include "Pythia8/ParticleData.h" 17 #include "Pythia8/PhysicsBase.h" 18 #include "Pythia8/PythiaStdlib.h" 19 #include "Pythia8/Settings.h" 39 int idPopIn = 0,
int idVtxIn = 0) :
id(idIn), rank(rankIn),
40 nPop(nPopIn), idPop(idPopIn), idVtx(idVtxIn) {}
44 id = flav.
id; rank = flav.rank; nPop = flav.nPop; idPop = flav.idPop;
49 id = flav.
id; rank = flav.rank; nPop = flav.nPop; idPop = flav.idPop;
50 idVtx = flav.idVtx; }
return *
this; }
57 id = flav.
id; rank = flav.rank; nPop = flav.nPop; idPop = flav.idPop;
58 idVtx = flav.idVtx; }
return *
this; }
60 id = -flav.
id; rank = flav.rank; nPop = flav.nPop; idPop = flav.idPop;
61 idVtx = flav.idVtx; }
return *
this; }
65 return (idAbs > 1000 && idAbs < 10000 && (idAbs/10)%10 == 0);}
68 int id, rank, nPop, idPop, idVtx;
81 StringFlav() : suppressLeadingB(), probQQtoQ(), probStoUD(), probSQtoQQ(),
82 probQQ1toQQ0(), probQandQQ(), probQandS(), probQandSinQQ(), probQQ1corr(),
83 probQQ1corrInv(), probQQ1norm(), probQQ1join(), mesonRate(),
84 mesonRateSum(), mesonMix1(), mesonMix2(), etaSup(), etaPrimeSup(),
85 decupletSup(), baryonCGSum(), baryonCGMax(), popcornRate(), popcornSpair(),
86 popcornSmeson(), barCGMax(), scbBM(), popFrac(), popS(), dWT(),
87 lightLeadingBSup(), heavyLeadingBSup(), probStoUDSav(), probQQtoQSav(),
88 probSQtoQQSav(), probQQ1toQQ0Sav(), alphaQQSav(), closePacking(),
89 doEnhanceDiquark(), enhanceStrange(), enhancePT(), enhanceDiquark(),
90 exponentMPI(), exponentNSP() {}
99 virtual void init(
double kappaModifier,
double strangeJunc,
103 int pickLightQ() {
double rndmFlav = probQandS * rndmPtr->flat();
104 if (rndmFlav < 1.)
return 1;
105 if (rndmFlav < 2.)
return 2;
111 double = -1.,
double = -1.,
bool allowPop =
true);
117 virtual int combineId(
int id1,
int id2,
bool keepTrying =
true) {
119 for (
int i = 0; i < 100; ++i) {
int idNew = combine( flag1, flag2);
120 if (idNew != 0 || !keepTrying)
return idNew;}
return 0;}
123 virtual pair<int,int> combineDiquarkJunction(
int id1,
int id2,
int id3);
126 virtual int combineToLightest(
int id1,
int id2);
134 double = -1.0,
double = -1.0,
bool =
false) {
135 return combine(flav1, flav2); }
139 return particleDataPtr->mSel(idHad); }
145 int makeDiquark(
int id1,
int id2,
int idHad = 0);
149 int qID,
int diqID,
int hadronID) {
151 for (
int iCombi = 0; iCombi < int(quarkCombis.size()); iCombi++)
152 if ( (qID == quarkCombis[iCombi].first ) &&
153 (diqID == quarkCombis[iCombi].second) ) allowed =
false;
154 if (allowed) quarkCombis.push_back( (hadronID > 0) ?
155 make_pair( qID, diqID) : make_pair(-qID, -diqID) ); }
159 int j = (hadronID % 10);
160 if (hadronID < 1000)
return ((j==1) ? 0 : ( (j==3) ? 1 : 5 ));
161 if (hadronID < 20000)
return ((j==1) ? 3 : 2);
162 if (hadronID > 20000)
return 4;
171 return (i < 3 && j < 7) ? dWT[i][j] : -1.0;}
176 virtual void initDerived();
179 static const int mesonMultipletCode[6];
180 static const double baryonCGOct[6], baryonCGDec[6];
184 double probQQtoQ, probStoUD, probSQtoQQ, probQQ1toQQ0, probQandQQ,
185 probQandS, probQandSinQQ, probQQ1corr, probQQ1corrInv, probQQ1norm,
186 probQQ1join[4], mesonRate[4][6], mesonRateSum[4], mesonMix1[2][6],
187 mesonMix2[2][6], etaSup, etaPrimeSup, decupletSup, baryonCGSum[6],
188 baryonCGMax[6], popcornRate, popcornSpair, popcornSmeson, barCGMax[8],
189 scbBM[3], popFrac, popS[3], dWT[3][7], lightLeadingBSup,
192 double probStoUDSav, probQQtoQSav, probSQtoQQSav, probQQ1toQQ0Sav,
197 double enhanceStrange, enhancePT, enhanceDiquark, exponentMPI, exponentNSP;
209 double LundFFRaw(
double z,
double a,
double b,
double c,
double mT2);
211 double LundFFAvg(
double a,
double b,
double mT2,
double tol);
213 double LundFFRms(
double a,
double b,
double mT2,
double tol);
224 StringZ() : useNonStandC(), useNonStandB(), useNonStandH(), usePetersonC(),
225 usePetersonB(), usePetersonH(), useOldAExtra(), mc2(), mb2(),
226 aLund(), bLund(), aExtraSQuark(), aExtraDiquark(), rFactC(),
227 rFactB(), rFactH(), aNonC(), aNonB(), aNonH(), bNonC(), bNonB(),
228 bNonH(), epsilonC(), epsilonB(), epsilonH(), stopM(), stopNF(),
238 virtual double zFrag(
int idOld,
int idNew = 0,
double mT2 = 1.);
241 virtual double zLund(
double a,
double b,
double c = 1.,
242 double head = 1.,
double bNow = 0.,
int idFrag = 0,
243 bool isOldSQuark =
false,
bool isNewSQuark =
false,
244 bool isOldDiquark =
false,
bool isNewDiquark =
false);
245 virtual double zPeterson(
double epsilon);
246 virtual double zLundMax(
double a,
double b,
double c = 1.);
250 virtual double stopNewFlav() {
return stopNF;}
251 virtual double stopSmear() {
return stopS;}
255 virtual double bAreaLund() {
return bLund;}
258 bool deriveABLund(
bool derivaA =
false,
bool deriveAExtraDiquark =
false,
259 bool deriveAExtraSQuark =
false);
261 double deriveBLund(
double avgZ,
double a,
double mT2ref);
266 static const double CFROMUNITY, AFROMZERO, AFROMC,
EXPMAX;
270 usePetersonC, usePetersonB, usePetersonH, useOldAExtra;
271 double mc2, mb2, aLund, bLund, aExtraSQuark, aExtraDiquark, rFactC,
272 rFactB, rFactH, aNonC, aNonB, aNonH, bNonC, bNonB, bNonH,
273 epsilonC, epsilonB, epsilonH, stopM, stopNF, stopS;
289 StringPT() : sigmaQ(), enhancedFraction(), enhancedWidth(), sigma2Had(),
290 closePacking(), enhancePT(), exponentMPI(), exponentNSP() {}
299 virtual pair<double, double> pxy(
int idIn = 0,
double kappaModifier = -1.0);
302 virtual double suppressPT2(
double pT2) {
return exp(-pT2/sigma2Had); }
310 double sigmaQ, enhancedFraction, enhancedWidth, sigma2Had;
312 bool useWidthPre{
false};
313 double widthPreStrange{1.}, widthPreQQ0{1.}, widthPreQQ1{1.};
316 double enhancePT, exponentMPI, exponentNSP;
virtual int getHadronID(FlavContainer &flav1, FlavContainer &flav2, double=-1.0, double=-1.0, bool=false)
Definition: FragmentationFlavZpT.h:133
double LundFFRms(double a, double b, double mT2, double tol)
Definition: FragmentationFlavZpT.cc:738
FlavContainer & operator=(const FlavContainer &flav)
Overloaded equal operator.
Definition: FragmentationFlavZpT.h:48
virtual double aAreaLund()
a and b fragmentation parameters needed in some operations.
Definition: FragmentationFlavZpT.h:254
Definition: PhysicsBase.h:26
virtual double getHadronMassWin(int idHad)
Return hadron mass.
Definition: FragmentationFlavZpT.h:138
int getMesonSpinCounter(int hadronID)
Get spin counter for mesons.
Definition: FragmentationFlavZpT.h:158
static const double SIGMAMIN
Constants: could only be changed in the code itself.
Definition: FragmentationFlavZpT.h:307
The StringPT class is used to select select transverse momenta.
Definition: FragmentationFlavZpT.h:284
virtual ~StringPT()
Destructor.
Definition: FragmentationFlavZpT.h:293
double LundFFAvg(double a, double b, double mT2, double tol)
Definition: FragmentationFlavZpT.cc:704
bool isDiquark()
Check whether is diquark.
Definition: FragmentationFlavZpT.h:64
Wave4 epsilon(Wave4 w1, Wave4 w2, Wave4 w3)
Permutation operator.
Definition: HelicityBasics.cc:56
virtual ~StringZ()
Destructor.
Definition: FragmentationFlavZpT.h:232
virtual ~StringFlav()
Destructor.
Definition: FragmentationFlavZpT.h:93
void addQuarkDiquark(vector< pair< int, int > > &quarkCombis, int qID, int diqID, int hadronID)
Check if quark-diquark combination should be added. If so add.
Definition: FragmentationFlavZpT.h:148
virtual double suppressPT2(double pT2)
Gaussian suppression of given pT2; used in MiniStringFragmentation.
Definition: FragmentationFlavZpT.h:302
The StringZ class is used to sample the fragmentation function f(z).
Definition: FragmentationFlavZpT.h:219
FlavContainer & anti()
Invert flavour.
Definition: FragmentationFlavZpT.h:53
FlavContainer(int idIn=0, int rankIn=0, int nPopIn=0, int idPopIn=0, int idVtxIn=0)
Constructor.
Definition: FragmentationFlavZpT.h:38
int id
Stored properties.
Definition: FragmentationFlavZpT.h:68
double getFlavourSpinRatios(int i, int j)
Definition: FragmentationFlavZpT.h:170
double sigmaQ
Initialization data, to be read from Settings.
Definition: FragmentationFlavZpT.h:310
bool suppressLeadingB
Settings for default Gaussian model.
Definition: FragmentationFlavZpT.h:183
virtual int combineId(int id1, int id2, bool keepTrying=true)
Ditto, simplified input argument for simple configurations.
Definition: FragmentationFlavZpT.h:117
FlavContainer & copy(const FlavContainer &flav)
Read in a container into another, without/with id sign flip.
Definition: FragmentationFlavZpT.h:56
virtual int idLightestNeutralMeson()
Lightest flavour-neutral meson.
Definition: FragmentationFlavZpT.h:129
FlavContainer(const FlavContainer &flav)
Copy constructor.
Definition: FragmentationFlavZpT.h:43
double LundFFRaw(double z, double a, double b, double c, double mT2)
Functions for the Lund symmetric FF: unnormalised, average, and RMSD.
Definition: FragmentationFlavZpT.cc:689
StringZ()
Constructor.
Definition: FragmentationFlavZpT.h:224
virtual double stopMass()
Parameters for stopping in the middle; overloaded for Hidden Valley.
Definition: FragmentationFlavZpT.h:249
Definition: FragmentationFlavZpT.h:33
Definition: Weights.h:354
static const double EXPMAX
Do not take exponent of too large or small number.
Definition: FragmentationFlavZpT.h:266
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
bool closePacking
Special for closepacking.
Definition: FragmentationFlavZpT.h:315
The StringFlav class is used to select quark and hadron flavours.
Definition: FragmentationFlavZpT.h:76
bool closePacking
Settings for closepacking.
Definition: FragmentationFlavZpT.h:196
bool useNonStandC
Initialization data, to be read from Settings.
Definition: FragmentationFlavZpT.h:269
int pickLightQ()
Pick a light d, u or s quark according to fixed ratios.
Definition: FragmentationFlavZpT.h:103
StringPT()
Constructor.
Definition: FragmentationFlavZpT.h:289
StringFlav()
Constructor.
Definition: FragmentationFlavZpT.h:81