11 #ifndef Pythia8_FragmentationFlavZpT_H
12 #define Pythia8_FragmentationFlavZpT_H
14 #include "Pythia8/Basics.h"
15 #include "Pythia8/ParticleData.h"
16 #include "Pythia8/PythiaStdlib.h"
17 #include "Pythia8/Settings.h"
36 FlavContainer(
int idIn = 0,
int rankIn = 0,
int nPopIn = 0,
37 int idPopIn = 0,
int idVtxIn = 0) : id(idIn), rank(rankIn),
38 nPop(nPopIn), idPop(idPopIn), idVtx(idVtxIn) {}
41 FlavContainer& operator=(
const FlavContainer& flav) {
if (
this != &flav) {
42 id = flav.id; rank = flav.rank; nPop = flav.nPop; idPop = flav.idPop;
43 idVtx = flav.idVtx; }
return *
this; }
46 FlavContainer& anti() {
id = -id;
return *
this;}
49 FlavContainer& copy(
const FlavContainer& flav) {
if (
this != &flav) {
50 id = flav.id; rank = flav.rank; nPop = flav.nPop; idPop = flav.idPop;
51 idVtx = flav.idVtx; }
return *
this; }
52 FlavContainer& anti(
const FlavContainer& flav) {
if (
this != &flav) {
53 id = -flav.id; rank = flav.rank; nPop = flav.nPop; idPop = flav.idPop;
54 idVtx = flav.idVtx; }
return *
this; }
57 bool isDiquark() {
int idAbs = abs(
id);
58 return (idAbs > 1000 && idAbs < 10000 && (idAbs/10)%10 == 0);}
61 int id, rank, nPop, idPop, idVtx;
77 virtual ~StringFlav() {}
80 virtual void init(Settings& settings, Rndm* rndmPtrIn);
83 int pickLightQ() {
double rndmFlav = probQandS * rndmPtr->flat();
84 if (rndmFlav < 1.)
return 1;
if (rndmFlav < 2.)
return 2;
return 3; }
87 virtual FlavContainer pick(FlavContainer& flavOld);
90 virtual int combine(FlavContainer& flav1, FlavContainer& flav2);
93 void assignPopQ(FlavContainer& flav);
96 int makeDiquark(
int id1,
int id2,
int idHad = 0);
106 static const int mesonMultipletCode[6];
107 static const double baryonCGOct[6], baryonCGDec[6];
110 bool suppressLeadingB;
111 double probQQtoQ, probStoUD, probSQtoQQ, probQQ1toQQ0, probQandQQ,
112 probQandS, probQandSinQQ, probQQ1corr, probQQ1corrInv, probQQ1norm,
113 probQQ1join[4], mesonRate[4][6], mesonRateSum[4], mesonMix1[2][6],
114 mesonMix2[2][6], etaSup, etaPrimeSup, decupletSup, baryonCGSum[6],
115 baryonCGMax[6], popcornRate, popcornSpair, popcornSmeson, scbBM[3],
116 popFrac, popS[3], dWT[3][7], lightLeadingBSup, heavyLeadingBSup;
132 virtual ~StringZ() {}
135 virtual void init(Settings& settings, ParticleData& particleData,
139 virtual double zFrag(
int idOld,
int idNew = 0,
double mT2 = 1.);
142 virtual double stopMass() {
return stopM;}
143 virtual double stopNewFlav() {
return stopNF;}
144 virtual double stopSmear() {
return stopS;}
147 virtual double bAreaLund() {
return bLund;}
152 static const double CFROMUNITY, AFROMZERO, AFROMC, EXPMAX;
155 bool useNonStandC, useNonStandB, useNonStandH,
156 usePetersonC, usePetersonB, usePetersonH;
157 double mc2, mb2, aLund, bLund, aExtraSQuark, aExtraDiquark, rFactC,
158 rFactB, rFactH, aNonC, aNonB, aNonH, bNonC, bNonB, bNonH,
159 epsilonC, epsilonB, epsilonH, stopM, stopNF, stopS;
162 double zLund(
double a,
double b,
double c = 1.);
163 double zPeterson(
double epsilon);
182 virtual ~StringPT() {}
185 virtual void init(Settings& settings, ParticleData& particleData,
189 pair<double, double> pxy();
192 double suppressPT2(
double pT2) {
return exp( -pT2 / sigma2Had); }
197 static const double SIGMAMIN;
200 double sigmaQ, enhancedFraction, enhancedWidth, sigma2Had;
211 #endif // Pythia8_FragmentationFlavZpT_H