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;
83 mT2suppression(), useWidthPre(), probQQtoQ(), probStoUD(), probSQtoQQ(),
84 probQQ1toQQ0(), probQandQQ(), probQandS(), probQandSinQQ(), probQQ1corr(),
85 probQQ1corrInv(), probQQ1norm(), probQQ1join(), mesonRate(),
86 mesonRateSum(), mesonMix1(), mesonMix2(), etaSup(), etaPrimeSup(),
87 decupletSup(), baryonCGSum(), baryonCGMax(), popcornRate(), popcornSpair(),
88 popcornSmeson(), barCGMax(), scbBM(), popFrac(), popS(), dWT(),
89 lightLeadingBSup(), heavyLeadingBSup(), probStoUDSav(), probQQtoQSav(),
90 probSQtoQQSav(), probQQ1toQQ0Sav(), alphaQQSav(), sigmaHad(),
91 widthPreStrange(), widthPreDiquark(), thermalModel(), mesonNonetL1(),
92 temperature(), tempPreFactor(), nNewQuark(), mesMixRate1(), mesMixRate2(),
93 mesMixRate3(), baryonOctWeight(), baryonDecWeight(), closePacking(),
94 doEnhanceDiquark(), enhanceStrange(), enhancePT(), enhanceDiquark(),
95 exponentMPI(), exponentNSP(), hadronIDwin(0), idNewWin(0),
96 hadronMassWin(-1.0) {}
105 virtual void init(
double kappaModifier,
double strangeJunc,
109 int pickLightQ() {
double rndmFlav = probQandS * rndmPtr->flat();
110 if (rndmFlav < 1.)
return 1;
111 if (rndmFlav < 2.)
return 2;
117 double kappaModifier = -1.0,
bool allowPop =
true) {
118 hadronIDwin = 0; idNewWin = 0; hadronMassWin = -1.0;
119 if ( (thermalModel || mT2suppression) && (pT >= 0.0) )
120 return pickThermal(flavOld, pT, kappaModifier);
121 return pickGauss(flavOld, allowPop); }
123 bool allowPop =
true);
125 double pT,
double kappaModifier);
131 virtual int combineId(
int id1,
int id2,
bool keepTrying =
true) {
133 for (
int i = 0; i < 100; ++i) {
int idNew = combine( flag1, flag2);
134 if (idNew != 0 || !keepTrying)
return idNew;}
return 0;}
137 virtual pair<int,int> combineDiquarkJunction(
int id1,
int id2,
int id3);
140 virtual int combineToLightest(
int id1,
int id2);
151 double pT,
double kappaModifier);
156 double pT = -1.0,
double kappaModifier = -1.0,
bool finalTwo =
false) {
157 if (finalTwo)
return ((thermalModel || mT2suppression) ?
158 combineLastThermal(flav1, flav2, pT, kappaModifier)
159 : combine(flav1, flav2));
160 if ((thermalModel || mT2suppression)&& (hadronIDwin != 0)
161 && (idNewWin != 0))
return getHadronIDwin();
162 return combine(flav1, flav2); }
166 ((hadronMassWin < 0.0) ? particleDataPtr->mSel(idHad) : hadronMassWin); }
172 int makeDiquark(
int id1,
int id2,
int idHad = 0);
176 int qID,
int diqID,
int hadronID) {
178 for (
int iCombi = 0; iCombi < int(quarkCombis.size()); iCombi++)
179 if ( (qID == quarkCombis[iCombi].first ) &&
180 (diqID == quarkCombis[iCombi].second) ) allowed =
false;
181 if (allowed) quarkCombis.push_back( (hadronID > 0) ?
182 make_pair( qID, diqID) : make_pair(-qID, -diqID) ); }
186 int j = (hadronID % 10);
187 if (hadronID < 1000)
return ((j==1) ? 0 : ( (j==3) ? 1 : 5 ));
188 if (hadronID < 20000)
return ((j==1) ? 3 : 2);
189 if (hadronID > 20000)
return 4;
198 return (i < 3 && j < 7) ? dWT[i][j] : -1.0;}
203 virtual void initDerived();
206 static const int mesonMultipletCode[6];
207 static const double baryonCGOct[6], baryonCGDec[6];
211 double probQQtoQ, probStoUD, probSQtoQQ, probQQ1toQQ0, probQandQQ,
212 probQandS, probQandSinQQ, probQQ1corr, probQQ1corrInv, probQQ1norm,
213 probQQ1join[4], mesonRate[4][6], mesonRateSum[4], mesonMix1[2][6],
214 mesonMix2[2][6], etaSup, etaPrimeSup, decupletSup, baryonCGSum[6],
215 baryonCGMax[6], popcornRate, popcornSpair, popcornSmeson, barCGMax[8],
216 scbBM[3], popFrac, popS[3], dWT[3][7], lightLeadingBSup,
219 double probStoUDSav, probQQtoQSav, probSQtoQQSav, probQQ1toQQ0Sav,
220 alphaQQSav, sigmaHad, widthPreStrange, widthPreDiquark;
224 double temperature, tempPreFactor;
226 double mesMixRate1[2][6], mesMixRate2[2][6], mesMixRate3[2][6];
227 double baryonOctWeight[6][6][6][2], baryonDecWeight[6][6][6][2];
231 double enhanceStrange, enhancePT, enhanceDiquark, exponentMPI, exponentNSP;
242 map< pair<int,int>, vector<double> > possibleRatePrefacsLast;
246 double hadronMassWin;
258 double LundFFRaw(
double z,
double a,
double b,
double c,
double mT2);
260 double LundFFAvg(
double a,
double b,
double mT2,
double tol);
262 double LundFFRms(
double a,
double b,
double mT2,
double tol);
273 StringZ() : useNonStandC(), useNonStandB(), useNonStandH(), usePetersonC(),
274 usePetersonB(), usePetersonH(), useOldAExtra(), mc2(), mb2(),
275 aLund(), bLund(), aExtraSQuark(), aExtraDiquark(), rFactC(),
276 rFactB(), rFactH(), aNonC(), aNonB(), aNonH(), bNonC(), bNonB(),
277 bNonH(), epsilonC(), epsilonB(), epsilonH(), stopM(), stopNF(),
287 virtual double zFrag(
int idOld,
int idNew = 0,
double mT2 = 1.);
290 virtual double zLund(
double a,
double b,
double c = 1.,
291 double head = 1.,
double bNow = 0.,
int idFrag = 0,
292 bool isOldSQuark =
false,
bool isNewSQuark =
false,
293 bool isOldDiquark =
false,
bool isNewDiquark =
false);
294 virtual double zPeterson(
double epsilon);
295 virtual double zLundMax(
double a,
double b,
double c = 1.);
299 virtual double stopNewFlav() {
return stopNF;}
300 virtual double stopSmear() {
return stopS;}
304 virtual double bAreaLund() {
return bLund;}
307 bool deriveABLund(
bool derivaA =
false,
bool deriveAExtraDiquark =
false,
308 bool deriveAExtraSQuark =
false);
310 double deriveBLund(
double avgZ,
double a,
double mT2ref);
315 static const double CFROMUNITY, AFROMZERO, AFROMC,
EXPMAX;
319 usePetersonC, usePetersonB, usePetersonH, useOldAExtra;
320 double mc2, mb2, aLund, bLund, aExtraSQuark, aExtraDiquark, rFactC,
321 rFactB, rFactH, aNonC, aNonB, aNonH, bNonC, bNonB, bNonH,
322 epsilonC, epsilonB, epsilonH, stopM, stopNF, stopS;
338 StringPT() : useWidthPre(), sigmaQ(), enhancedFraction(), enhancedWidth(),
339 sigma2Had(), widthPreStrange(), widthPreDiquark(),
340 thermalModel(), temperature(), tempPreFactor(), fracSmallX(),
341 closePacking(), enhancePT(), exponentMPI(), exponentNSP() {}
351 pair<double, double>
pxy(
int idIn,
double kappaModifier = -1.0) {
352 return (thermalModel ? pxyThermal(idIn, kappaModifier) :
353 pxyGauss(idIn, kappaModifier)); }
354 pair<double, double> pxyGauss(
int idIn = 0,
double kappaModifier = -1.0);
355 pair<double, double> pxyThermal(
int idIn,
double kappaModifier = -1.0);
359 exp(-sqrt(pT2)/temperature) : exp(-pT2/sigma2Had)); }
369 double sigmaQ, enhancedFraction, enhancedWidth, sigma2Had,
370 widthPreStrange, widthPreDiquark;
373 double temperature, tempPreFactor, fracSmallX;
376 double enhancePT, exponentMPI, exponentNSP;
381 double BesselK14(
double x);
int hadronIDwin
Selection in thermal model.
Definition: FragmentationFlavZpT.h:245
pair< double, double > pxy(int idIn, double kappaModifier=-1.0)
Definition: FragmentationFlavZpT.h:351
double LundFFRms(double a, double b, double mT2, double tol)
Definition: FragmentationFlavZpT.cc:1491
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:303
Definition: PhysicsBase.h:23
virtual double getHadronMassWin(int idHad)
Return hadron mass. Used one if present, pick otherwise.
Definition: FragmentationFlavZpT.h:165
int getMesonSpinCounter(int hadronID)
Get spin counter for mesons.
Definition: FragmentationFlavZpT.h:185
map< int, vector< pair< int, int > > > possibleHadrons
Definition: FragmentationFlavZpT.h:237
static const double SIGMAMIN
Constants: could only be changed in the code itself.
Definition: FragmentationFlavZpT.h:364
bool thermalModel
Settings for thermal model.
Definition: FragmentationFlavZpT.h:223
The StringPT class is used to select select transverse momenta.
Definition: FragmentationFlavZpT.h:333
virtual ~StringPT()
Destructor.
Definition: FragmentationFlavZpT.h:344
double LundFFAvg(double a, double b, double mT2, double tol)
Definition: FragmentationFlavZpT.cc:1457
bool thermalModel
Thermal model.
Definition: FragmentationFlavZpT.h:372
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:281
virtual ~StringFlav()
Destructor.
Definition: FragmentationFlavZpT.h:99
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:175
virtual int getHadronID(FlavContainer &flav1, FlavContainer &flav2, double pT=-1.0, double kappaModifier=-1.0, bool finalTwo=false)
Definition: FragmentationFlavZpT.h:155
The StringZ class is used to sample the fragmentation function f(z).
Definition: FragmentationFlavZpT.h:268
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:197
bool suppressLeadingB
Settings for Gaussian model.
Definition: FragmentationFlavZpT.h:210
bool useWidthPre
Definition: FragmentationFlavZpT.h:368
virtual int combineId(int id1, int id2, bool keepTrying=true)
Ditto, simplified input argument for simple configurations.
Definition: FragmentationFlavZpT.h:131
double suppressPT2(double pT2)
Gaussian suppression of given pT2; used in MiniStringFragmentation.
Definition: FragmentationFlavZpT.h:358
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:143
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:1442
StringZ()
Constructor.
Definition: FragmentationFlavZpT.h:273
map< int, vector< pair< int, int > > > hadronConstIDs
Key = hadron id, value = list of constituent ids.
Definition: FragmentationFlavZpT.h:234
virtual double stopMass()
Parameters for stopping in the middle; overloaded for Hidden Valley.
Definition: FragmentationFlavZpT.h:298
Definition: FragmentationFlavZpT.h:33
Definition: Weights.h:354
map< pair< int, int >, vector< pair< int, int > > > possibleHadronsLast
Similar, but for combining the last two (di)quarks. Key = (di)quark pair.
Definition: FragmentationFlavZpT.h:241
static const double EXPMAX
Do not take exponent of too large or small number.
Definition: FragmentationFlavZpT.h:315
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
bool closePacking
Both.
Definition: FragmentationFlavZpT.h:375
The StringFlav class is used to select quark and hadron flavours.
Definition: FragmentationFlavZpT.h:76
virtual FlavContainer pick(FlavContainer &flavOld, double pT=-1.0, double kappaModifier=-1.0, bool allowPop=true)
Definition: FragmentationFlavZpT.h:116
bool closePacking
Settings used by both models.
Definition: FragmentationFlavZpT.h:230
bool useNonStandC
Initialization data, to be read from Settings.
Definition: FragmentationFlavZpT.h:318
int pickLightQ()
Pick a light d, u or s quark according to fixed ratios.
Definition: FragmentationFlavZpT.h:109
StringPT()
Constructor.
Definition: FragmentationFlavZpT.h:338
StringFlav()
Constructor.
Definition: FragmentationFlavZpT.h:81
map< int, vector< double > > possibleRatePrefacs
Key = initial (di)quark id, value = prefactor to multiply rate.
Definition: FragmentationFlavZpT.h:239
virtual int getHadronIDwin()
Return chosen hadron in case of thermal model.
Definition: FragmentationFlavZpT.h:146