9 #ifndef Pythia8_SplittingsOnia_H 10 #define Pythia8_SplittingsOnia_H 12 #include "Pythia8/Basics.h" 13 #include "Pythia8/PythiaStdlib.h" 14 #include "Pythia8/SigmaOnia.h" 15 #include "Pythia8/SimpleTimeShower.h" 36 void setup(vector<SplitOniaPtr> &splits, set<double> &thresholds,
46 bool onia1S0{
true}, valid1S0{
true};
53 vector<int> states1S0, spins1S0;
54 vector<string> meNames1S0;
55 vector< vector<double> > mes1S0;
56 vector<string> splitNames1S0, splitNames3S1, splitNames3PJ;
57 vector< vector<bool> > splits1S0, splits3S1, splits3PJ;
87 SplitOnia(
int idAIn,
int idBIn,
int idCIn,
double ldmeIn,
Info* infoPtrIn,
89 idA(idAIn), idB(idBIn), idC(idCIn),
90 mA(infoPtrIn->particleDataPtr->m0(idAIn)),
91 mB(infoPtrIn->particleDataPtr->m0(idBIn)),
92 mC(infoPtrIn->particleDataPtr->m0(idCIn)),
93 m2A(
pow2(mA)), m2B(
pow2(mB)), m2C(
pow2(mC)), ldme(ldmeIn),
94 alphaMode(infoPtrIn->settingsPtr->mode(
"OniaShower:alphaScale")),
95 loggerPtr(infoPtrIn->loggerPtr), alphaSPtr(alphaSPtrIn),
96 rndmPtr(infoPtrIn->rndmPtr) {}
102 virtual double overestimate(
const TimeDipoleEnd &dip,
double pT2Min,
112 zGen = zMin + rndmPtr->flat()*(zMax - zMin);
return zGen;}
117 if (idA == 99 && dip.oniumType == 2) {
118 idB = id; mA = mB =
m; m2A = m2B =
pow2(mA);}
119 return ldme > 0 && (abs(
id) == idA || (idA == 99 && dip.oniumType == 2))
120 && dip.mDip > dip.mRec + mB + mC;}
129 void setEnhance(
const unordered_map<string, double> &enhanceFSRs) {
131 auto enhanceFSR = enhanceFSRs.find(enhanceName());
132 if ( enhanceFSR != enhanceFSRs.end() && enhanceFSR->second > enhance )
133 enhance = enhanceFSR->second;}
143 vector<TimeDipoleEnd> &) {
return {};}
147 dip.z = zGen; dip.
flavour = idC; dip.mFlavour = mC;
148 dip.m2A = m2A; dip.m2B = m2B; dip.m2C = m2C;
149 dip.m2 = dip.m2Rad + dip.pT2 / (dip.z * (1. - dip.z));
154 int &idRadIn,
int &idEmtIn,
int &colRadIn,
int &acolRadIn,
int &colEmtIn,
155 int &acolEmtIn,
int &appendEmtIn,
double &pTorigIn,
double &pTcorrIn,
156 double &pzRadPlusEmtIn,
double &pzRadIn,
double &pzEmtIn,
157 double &mRadIn,
double &m2RadIn,
double &mEmtIn);
178 double mA, mB, mC, m2A, m2B, m2C;
181 double enhance{1}, ldme{-1};
184 double cFac{0}, oFac{0};
187 double zMin{0}, zMax{1}, zGen{0};
190 int idRad{0}, idEmt{0}, colRad{0}, acolRad{0}, colEmt{0}, acolEmt{0},
194 double pTorig{0}, pTcorr{0}, pzRadPlusEmt{0}, pzRad{0}, pzEmt{0}, mRad{0},
202 if (alphaMode == 0)
return alphaSPtr->alphaS(m2);
203 else if (alphaMode == 2)
return alphaSPtr->alphaS(s);
204 else return alphaSPtr->alphaS(pT2);
230 flavourIn, stateIn, ldmeIn, infoPtrIn, alphaSPtrIn) {}
241 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
268 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
284 flavourIn, stateIn, ldmeIn, infoPtrIn, alphaSPtrIn) {}
295 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
311 infoPtrIn, alphaSPtrIn) {}
315 double u(rndmPtr->flat());
316 zGen = u < 0.5 ? zMin*pow(zMax/zMin, 2*u):
317 1 - (1 - zMax)*pow((1 - zMin)/(1 - zMax), 2*u - 1);
318 ygg = pow(rndmPtr->flat(), 1.0/(1.0 - pg))*zGen;
333 vector<int> addEmitted(
Event &,
int,
int,
int,
int,
334 vector<TimeDipoleEnd> &)
override;
342 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
345 double integrateZ()
const override {
346 return log(zMax/zMin) + log((1 - zMin)/(1 - zMax));}
349 double ygg{0}, pg{0.5};
365 flavourIn, stateIn, ldmeIn, infoPtrIn, alphaSPtrIn) {}
376 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
379 double r{0.5}, b{0.5};
396 flavourIn, stateIn, ldmeIn, infoPtrIn, alphaSPtrIn), spin(spinIn) {}
407 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
413 double r{0.5}, b{0.5};
429 SplitOnia(21, 21, stateIn, ldmeIn, infoPtrIn, alphaSPtrIn), spin(spinIn) {
430 thresholds.insert({0.26*m2C, 3*m2C});
442 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
462 flavourIn, flavourIn, stateIn, ldmeIn, infoPtrIn, alphaSPtrIn),
463 spin(spinIn) {setOctetID(0, mSplitIn, infoPtrIn);}
474 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
480 double r{0.5}, b{0.5};
495 SplitOnia(21, stateIn, 0, ldmeIn, infoPtrIn, alphaSPtrIn), spin(spinIn) {
496 setOctetID(0, mSplitIn, infoPtrIn);
497 if (ldme > 0) thresholds.insert({m2B, m2B*(1.0 + delta)});}
505 return (dip.pT2 > m2B*(1.0 + delta) || dip.pT2 < m2B) ? 0 : 1;}
509 dip.z = zGen; dip.
flavour = idB; dip.mFlavour = mB;}
541 zGen = 1 - (1 - zMax)*pow((1 - zMin)/(1 - zMax), rndmPtr->flat());
553 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
559 double integrateZ()
const override {
560 return log((1 - zMin)/(1 - zMax));}
580 double u = rndmPtr->flat();
581 zGen = u < 0.5 ? zMin*pow(zMax/zMin, 2*u) :
582 1 - (1 - zMax)*pow((1 - zMin)/(1 - zMax), 2*u - 1);
594 void overestimate(
const TimeDipoleEnd &dip,
double pT2Min)
override;
597 double integrateZ()
const override {
598 return log(zMax/zMin) + log((1 - zMin)/(1 - zMax));}
Definition: SplittingsOnia.h:250
void setup(vector< SplitOniaPtr > &splits, set< double > &thresholds, bool oniaIn=false)
Initialise the splittings.
Definition: SplittingsOnia.cc:69
constexpr double pow2(const double &x)
Powers of small integers - for balance speed/code clarity.
Definition: PythiaStdlib.h:182
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:263
Definition: SplittingsOnia.h:82
void setEnhance(const unordered_map< string, double > &enhanceFSRs)
Set the enhancement factor.
Definition: SplittingsOnia.h:129
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:437
Definition: StandardModel.h:23
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:512
Split2Q2QQbar3PJ1Q(int flavourIn, int stateIn, double ldmeIn, int spinIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:394
The Event class holds all info on the generated event.
Definition: Event.h:453
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:337
Definition: SplittingsOnia.h:223
double mSplit
Stored parameters.
Definition: SigmaOnia.h:55
void updateDipole(TimeDipoleEnd &dip) override
Update the internal branching variables.
Definition: SplittingsOnia.h:508
int flavour
Properties specific to current trial emission.
Definition: SimpleTimeShower.h:68
Definition: SplittingsOnia.h:358
Definition: SplittingsOnia.h:422
virtual void overestimate(const TimeDipoleEnd &, double)
Set the z limits and return the difference.
Definition: SplittingsOnia.h:165
Split2g2QQbar3PJ1g(int stateIn, double ldmeIn, int spinIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn, set< double > &thresholds)
Constructor.
Definition: SplittingsOnia.h:427
double generateZ(const TimeDipoleEnd &) override
Generate a 1/(z(1-z)) distribution.
Definition: SplittingsOnia.h:314
virtual void updateDipole(TimeDipoleEnd &dip)
Update the dipole end with the generated values.
Definition: SplittingsOnia.h:146
Definition: SplittingsOnia.h:530
Definition: SplittingsOnia.h:277
Definition: SigmaOnia.h:21
Definition: SplittingsOnia.h:389
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:589
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:548
bool isActive(const TimeDipoleEnd &dip, int id, double m)
Definition: SplittingsOnia.h:116
Split2Q2QQbar3S11Q(int flavourIn, int stateIn, double ldmeIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:282
Split2QQbarXg82QQbarX8g(double colFacIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:574
double alphaScale(double m2, double pT2, double s) const
Return alpha_s at the requested scale.
Definition: SplittingsOnia.h:201
Info * infoPtr
Stored pointers.
Definition: SigmaOnia.h:38
int idA
Definition: SplittingsOnia.h:177
Split2Q2QQbar1S01Q(int flavourIn, int stateIn, double ldmeIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:228
bool isEnhanced()
Check if the emission is enhanced.
Definition: SplittingsOnia.h:126
Split2g2QQbarX8(int stateIn, double ldmeIn, int spinIn, double mSplitIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn, set< double > &thresholds)
Constructor.
Definition: SplittingsOnia.h:493
double weight(const TimeDipoleEnd &dip) const override
Return the splitting weight.
Definition: SplittingsOnia.h:504
string enhanceName() const override
Return ehancement names.
Definition: SplittingsOnia.h:236
Definition: SplittingsOnia.h:455
Definition: SplittingsOnia.h:304
string enhanceName() const override
Return enhancement names.
Definition: SplittingsOnia.h:290
void updateDipole(TimeDipoleEnd &dip) override
Update the dipole end with the generated values.
Definition: SplittingsOnia.h:326
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:402
Data on radiating dipole ends; only used inside SimpleTimeShower class.
Definition: SimpleTimeShower.h:25
Definition: SplittingsOnia.h:28
bool isOctet()
Check if the emission is a colour octet state.
Definition: SplittingsOnia.h:123
SplitOniaSetup(Info *infoPtrIn, AlphaStrong *alphaSPtrIn, int flavourIn)
Constructor.
Definition: SplittingsOnia.cc:23
Split2Q2QQbar1P11Q(int flavourIn, int stateIn, double ldmeIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:363
virtual vector< int > addEmitted(Event &, int, int, int, int, vector< TimeDipoleEnd > &)
Possibility to add more than one emitted particle.
Definition: SplittingsOnia.h:142
double enhanceWeight()
Return the enhancement weight.
Definition: SplittingsOnia.h:136
double m2(const Vec4 &v1)
The squared invariant mass of one or more four-vectors.
Definition: Basics.cc:605
double generateZ(const TimeDipoleEnd &) override
Generate a 1/(z*(1 - z)) distribution.
Definition: SplittingsOnia.h:579
double generateZ(const TimeDipoleEnd &) override
Generate a 1/(1 - z) distribution.
Definition: SplittingsOnia.h:540
virtual double integrateZ() const
Definition: SplittingsOnia.h:169
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
double m(const Vec4 &v1)
Invariant mass and its square.
Definition: Basics.cc:595
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:469
Split2Q2QQbar3PJ8Q(int flavourIn, int stateIn, double ldmeIn, int spinIn, double mSplitIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:460
virtual string enhanceName() const
Return the name to be used if this emission is enhanced.
Definition: SplittingsOnia.h:139
string enhanceName() const override
Return the enhancement names.
Definition: SplittingsOnia.h:371
Splitting class for g -> QQbar[X(8)] (Q = c or b).
Definition: SplittingsOnia.h:488
bool onlyOctet
Flag if only octet -> X splittings enabled.
Definition: SplittingsOnia.h:40
Split2QQbarXq82QQbarX8g(double colFacIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:535
Split2g2QQbar3S11gg(int stateIn, double ldmeIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:309
Split2g2QQbar1S01g(int stateIn, double ldmeIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor.
Definition: SplittingsOnia.h:255
virtual double generateZ(const TimeDipoleEnd &)
Definition: SplittingsOnia.h:111
SplitOnia(int idAIn, int idBIn, int idCIn, double ldmeIn, Info *infoPtrIn, AlphaStrong *alphaSPtrIn)
Constructor that needs to be called by the subclass.
Definition: SplittingsOnia.h:87
Definition: SplittingsOnia.h:569