10 #ifndef Pythia8_DireTimes_H 11 #define Pythia8_DireTimes_H 13 #define DIRE_TIMES_VERSION "2.002" 15 #include "Pythia8/Basics.h" 16 #include "Pythia8/TimeShower.h" 17 #include "Pythia8/BeamParticle.h" 18 #include "Pythia8/ProcessLevel.h" 19 #include "Pythia8/Event.h" 20 #include "Pythia8/Info.h" 21 #include "Pythia8/ParticleData.h" 22 #include "Pythia8/PartonSystems.h" 23 #include "Pythia8/PythiaStdlib.h" 24 #include "Pythia8/Settings.h" 25 #include "Pythia8/StandardModel.h" 26 #include "Pythia8/UserHooks.h" 27 #include "Pythia8/MergingHooks.h" 29 #include "Pythia8/DireBasics.h" 30 #include "Pythia8/DireSplittingLibrary.h" 31 #include "Pythia8/DireWeightContainer.h" 45 chgType(0), gamType(0), weakType(0), isrType(0), system(0), systemRec(0),
46 MEtype(0), iMEpartner(-1), weakPol(0), isOctetOnium(false),
47 isHiddenValley(false), colvType(0), MEmix(0.), MEorder(true),
48 MEsplit(true), MEgluinoRec(false), isFlexible(false),
flavour(0), iAunt(0),
49 idRadAft(0), idEmtAft(0) {
50 mRad = m2Rad = mRec = m2Rec = mDip = m2Dip = m2DipCorr = pT2 = m2 = z
51 = mFlavour = asymPol = flexFactor = phi = 0.;
52 sa1 = xa = phia1 = pT2start = pT2stop = pT2Old = 0.;
55 DireTimesEnd(
int iRadiatorIn,
int iRecoilerIn,
double pTmaxIn = 0.,
56 int colIn = 0,
int chgIn = 0,
int gamIn = 0,
int weakTypeIn = 0,
57 int isrIn = 0,
int systemIn = 0,
int MEtypeIn = 0,
int iMEpartnerIn = -1,
58 int weakPolIn = 0,
bool isOctetOniumIn =
false,
60 bool isHiddenValleyIn =
false,
61 int colvTypeIn = 0,
double MEmixIn = 0.,
62 bool MEorderIn =
true,
bool MEsplitIn =
true,
bool MEgluinoRecIn =
false,
63 bool isFlexibleIn =
false,
int idRadAftIn = 0,
int idEmtAftIn = 0,
64 vector<int> iSpectatorIn = vector<int>(),
65 vector<double> massIn = vector<double>(),
66 vector<int> allowedIn = vector<int>() ) :
67 iRadiator(iRadiatorIn), iRecoiler(iRecoilerIn), pTmax(pTmaxIn),
68 colType(colIn), chgType(chgIn), gamType(gamIn), weakType(weakTypeIn),
69 isrType(isrIn), system(systemIn), systemRec(systemIn), MEtype(MEtypeIn),
70 iMEpartner(iMEpartnerIn), weakPol(weakPolIn), isOctetOnium(isOctetOniumIn),
71 isHiddenValley(isHiddenValleyIn), colvType(colvTypeIn), MEmix(MEmixIn),
72 MEorder (MEorderIn), MEsplit(MEsplitIn), MEgluinoRec(MEgluinoRecIn),
73 isFlexible(isFlexibleIn),
flavour(0), iAunt(0),
mass(massIn),
74 idRadAft(idRadAftIn), idEmtAft(idEmtAftIn),
iSpectator(iSpectatorIn),
75 allowedEmissions(allowedIn), iSiblings(iSiblingsIn) {
76 mRad = m2Rad = mRec = m2Rec = mDip = m2Dip = m2DipCorr = pT2 = m2 = z
77 = mFlavour = asymPol = flexFactor = phi = 0.;
78 sa1 = xa = phia1 = 0.;
79 pT2start = pT2stop = pT2Old = 0.;
84 colType(dip.colType), chgType(dip.chgType), gamType(dip.gamType),
85 weakType(dip.weakType), isrType(dip.isrType), system(dip.system),
86 systemRec(dip.systemRec), MEtype(dip.MEtype), iMEpartner(dip.iMEpartner),
87 weakPol(dip.weakPol), isOctetOnium(dip.isOctetOnium),
88 isHiddenValley(dip.isHiddenValley), colvType(dip.colvType),
89 MEmix(dip.MEmix), MEorder(dip.MEorder), MEsplit(dip.MEsplit),
90 MEgluinoRec(dip.MEgluinoRec), isFlexible(dip.isFlexible),
92 mRad(dip.mRad), m2Rad(dip.m2Rad), mRec(dip.mRec), m2Rec(dip.m2Rec),
93 mDip(dip.mDip), m2Dip(dip.m2Dip), m2DipCorr(dip.m2DipCorr), pT2(dip.pT2),
94 m2(dip.m2), z(dip.z), mFlavour(dip.mFlavour), asymPol(dip.asymPol),
95 flexFactor(dip.flexFactor), phi(dip.phi), pT2start(dip.pT2start),
96 pT2stop(dip.pT2stop), pT2Old(dip.pT2Old),
sa1(dip.
sa1), xa(dip.xa),
97 phia1(dip.phia1),
mass(dip.
mass), idRadAft(dip.idRadAft),
99 allowedEmissions(dip.allowedEmissions), iSiblings(dip.iSiblings) {}
103 colType = t.colType; chgType = t.chgType; gamType = t.gamType;
104 weakType = t.weakType; isrType = t.isrType; system = t.system;
105 systemRec = t.systemRec; MEtype = t.MEtype; iMEpartner = t.iMEpartner;
106 weakPol = t.weakPol; isOctetOnium = t.isOctetOnium;
107 isHiddenValley = t.isHiddenValley; colvType = t.colvType;
108 MEmix = t.MEmix; MEorder = t.MEorder; MEsplit = t.MEsplit;
109 MEgluinoRec = t.MEgluinoRec; isFlexible = t.isFlexible;
111 mRad = t.mRad; m2Rad = t.m2Rad; mRec = t.mRec; m2Rec = t.m2Rec;
112 mDip = t.mDip; m2Dip = t.m2Dip; m2DipCorr = t.m2DipCorr; pT2 = t.pT2;
113 m2 = t.m2; z = t.z; mFlavour = t.mFlavour; asymPol = t.asymPol;
114 flexFactor = t.flexFactor; phi = t.phi; pT2start = t.pT2start;
115 pT2stop = t.pT2stop; pT2Old = t.pT2Old;
sa1 = t.
sa1; xa = t.xa;
116 phia1 = t.phia1;
mass = t.
mass; idRadAft = t.idRadAft;
118 allowedEmissions = t.allowedEmissions; iSiblings = t.iSiblings;}
124 int colType, chgType, gamType, weakType, isrType, system, systemRec,
125 MEtype, iMEpartner, weakPol;
126 bool isOctetOnium, isHiddenValley;
129 bool MEorder, MEsplit, MEgluinoRec, isFlexible;
133 double mRad, m2Rad, mRec, m2Rec, mDip, m2Dip, m2DipCorr,
134 pT2, m2, z, mFlavour, asymPol, flexFactor, phi, pT2start, pT2stop,
143 int idRadAft, idEmtAft;
150 if ( find(allowedEmissions.begin(), allowedEmissions.end(), id)
151 == allowedEmissions.end() ) allowedEmissions.push_back(
id);
153 void removeAllowedEmt(
int id) {
154 if ( find(allowedEmissions.begin(), allowedEmissions.end(), id)
155 != allowedEmissions.end() ) allowedEmissions.erase (
156 remove(allowedEmissions.begin(), allowedEmissions.end(), id),
157 allowedEmissions.end());
159 void clearAllowedEmt() { allowedEmissions.resize(0); }
160 vector<int> allowedEmissions;
161 bool canEmit() {
return int(allowedEmissions.size() > 0); }
163 void init(
const Event& state) {
165 mRec = state[iRecoiler].m();
166 mDip = sqrt( abs(2. * state[iRadiator].p() * state[iRecoiler].p()));
174 cout <<
"\n -------- Begin DireTimesEnd Listing ----------------" 175 <<
"------------------------------------------------------- \n \n " 176 <<
" rad rec pTmax col parent1 parent2 isr" 177 <<
" sys sysR type MErec pol m2 allowedIds\n" 178 << fixed << setprecision(3);
179 cout << scientific << setprecision(4)
180 << setw(7) << iRadiator
181 << setw(7) << iRecoiler
183 << setw(5) << colType
184 << setw(5) << isrType
185 << setw(5) << system << setw(5) << systemRec
186 << setw(5) << MEtype << setw(7) << iMEpartner
187 << setw(5) << weakPol
188 << setw(12) << m2Dip;
189 for (
int j = 0; j < int(allowedEmissions.size()); ++j)
190 cout << setw(5) << allowedEmissions[j] <<
" ";
193 cout <<
"\n -------- End DireTimesEnd Listing ------------" 194 <<
"-------------------------------------------------------" << endl;
199 void clearSiblings() { iSiblings.clear(); }
216 DireTimes( MergingHooksPtr mergingHooksPtrIn, PartonVertexPtr ) {
217 mergingHooksPtr = mergingHooksPtrIn;
219 userHooksPtr =
nullptr;
220 splittingsPtr =
nullptr;
222 direInfoPtr =
nullptr;
225 usePDFalphas =
false;
228 suppressLargeMECs =
false;
239 if (splittingsPtr) splits = splittingsPtr->getSplittings();
240 return (splits.size() > 0);
249 particleDataPtr = infoPtr->particleDataPtr;
250 rndmPtr = infoPtr->rndmPtr;
251 partonSystemsPtr = infoPtr->partonSystemsPtr;
252 userHooksPtr = infoPtr->userHooksPtr;
253 mergingHooksPtr = mergingHooksPtrIn;
254 splittingsPtr = splittingsPtrIn;
255 direInfoPtr = direInfoPtrIn;
258 void initVariations();
264 weights = weightsIn;}
267 virtual bool limitPTmax(
Event& event,
double Q2Fac = 0.,
274 virtual int shower(
int iBeg,
int iEnd,
Event& event,
double pTmax,
278 virtual int showerQED(
int i1,
int i2,
Event& event,
double pTmax);
281 virtual void prepareGlobal(
Event&);
284 virtual void prepare(
int iSys,
Event& event,
bool limitPTmaxIn =
true);
287 void finalize(
Event& event);
290 virtual void rescatterUpdate(
int iSys,
Event& event);
293 virtual void update(
int iSys,
Event& event,
bool =
false);
296 void updateAfterFF(
int iSysSelNow,
int iSysSelRec,
297 Event& event,
int iRadBef,
int iRecBef,
int iRad,
int iEmt,
int iRec,
298 int flavour,
int colType,
double pTsel);
301 void updateAfterFI(
int iSysSelNow,
int iSysSelRec,
302 Event& event,
int iRadBef,
int iRecBef,
int iRad,
int iEmt,
int iRec,
303 int flavour,
int colType,
double pTsel,
double xNew);
307 virtual double pTnext(
Event& event,
double pTbegAll,
double pTendAll,
308 bool =
false,
bool =
false);
309 double newPoint(
const Event& event);
311 virtual bool branch(
Event& event,
bool =
false);
312 bool branch_FF(
Event& event,
bool =
false,
314 bool branch_FI(
Event& event,
bool =
false,
317 pair < Vec4, Vec4 > decayWithOnshellRec(
double zCS,
double yCS,
double phi,
318 double m2Rec,
double m2RadAft,
double m2EmtAft,
320 pair < Vec4, Vec4 > decayWithOffshellRec(
double zCS,
double yCS,
double phi,
321 double m2RadBef,
double m2RadAft,
double m2EmtAft,
331 pair <Event, pair<int,int> > reclus
332 = clustered_internal(state, iRad, iEmt, iRec, name);
333 if (reclus.first.size() > 0)
334 reclus.first[0].mothers(reclus.second.first,reclus.second.second);
337 pair <Event, pair<int,int> > clustered_internal(
const Event& state,
338 int iRad,
int iEmt,
int iRec,
string name);
339 bool cluster_FF(
const Event& state,
int iRad,
341 bool cluster_FI(
const Event& state,
int iRad,
347 if (rec.isFinal())
return pT2_FF(rad,emt,rec);
348 return pT2_FI(rad,emt,rec);
359 if (rec.isFinal())
return z_FF(rad,emt,rec);
360 return z_FI(rad,emt,rec);
367 double z_FF_fromVec (
const Vec4& rad,
const Vec4& emt,
const Vec4& rec);
371 if (rec.isFinal())
return m2dip_FF(rad,emt,rec);
372 return m2dip_FI(rad,emt,rec);
394 virtual map<string, double> getStateVariables (
const Event& state,
395 int rad,
int emt,
int rec,
string name);
402 {
return state[iRad].isFinal(); }
409 {
return splittingsPtr->getSplittingName(state,iRad,iEmt); }
414 virtual double getSplittingProb(
const Event& state,
int iRad,
415 int iEmt,
int iRec,
string name);
417 virtual bool allowedSplitting(
const Event& state,
int iRad,
int iEmt);
419 virtual vector<int> getRecoilers(
const Event& state,
int iRad,
int iEmt,
422 virtual double getCoupling(
double mu2Ren,
string name) {
423 if (splits.find(name) != splits.end())
424 return splits[name]->coupling(-1.,mu2Ren, 0., 1.);
429 if (splits.find(name) != splits.end())
430 return splits[name]->isSymmetric(rad,emt);
436 int FindParticle(
const Particle& particle,
const Event& event,
437 bool checkStatus =
true );
440 virtual void list()
const;
442 Event makeHardEvent(
int iSys,
const Event& state,
bool isProcess =
false );
445 bool validMomentum(
const Vec4& p,
int id,
int status);
449 int iSysCheck = -1 );
452 bool validMotherDaughter(
const Event& state );
455 int FindCol(
int col, vector<int> iExclude,
const Event& event,
int type,
464 double alphasNow(
double pT2,
double renormMultFacNow = 1.,
int iSys = 0 );
467 double alphaemNow(
double pT2,
double renormMultFacNow = 1.,
int iSys = 0 );
469 bool isInit() {
return isInitSave; }
473 if ( state[dipEnd[iDip].iRecoiler].isFinal()
474 && state[dipEnd[iDip].
iRadiator].isFinal())
475 return dipEnd[iDip].m2Dip;
476 int iSys = dipEnd[iDip].system;
477 int inA = partonSystemsPtr->getInA(iSys);
478 int inB = partonSystemsPtr->getInB(iSys);
480 int iRad(dipEnd[iDip].
iRadiator), iRec(dipEnd[iDip].iRecoiler);
481 if (hasPDF(state[iRad].
id()) && iRad == inA)
482 x *= state[inA].pPos() / state[0].m();
483 if (hasPDF(state[iRad].
id()) && iRad == inB)
484 x *= state[inB].pNeg() / state[0].m();
485 if (hasPDF(state[iRec].
id()) && iRec == inA)
486 x *= state[inA].pPos() / state[0].m();
487 if (hasPDF(state[iRec].
id()) && iRec == inB)
488 x *= state[inB].pNeg() / state[0].m();
489 return dipEnd[iDip].m2Dip/x;
500 static const int TIMESTOPRINT;
503 static const double CONVERTMB2PB;
507 static const double LEPTONZMAX;
508 double CA, CF, TR, NC;
511 int idASave, idBSave;
517 double pTmaxFudge, pTLastBranch;
522 static const int MAXLOOPTINYPDF;
523 static const double MCMIN, MBMIN, SIMPLIFYROOT, XMARGIN, XMARGINCOMB,
524 TINYPDF, LARGEM2, THRESHM2, LAMBDA3MARGIN, TINYMASS, TINYOVERESTIMATE,
525 PT2MIN_PDF_IN_OVERESTIMATE, PT2_INCREASE_OVERESTIMATE,
529 bool isInitSave, doQCDshower, doQEDshowerByQ, doQEDshowerByL,
530 doMEcorrections, doMEafterFirst, doPhiPolAsym,
531 doInterleave, allowBeamRecoil, dampenBeamRecoil, recoilToColoured,
532 useFixedFacScale, allowRescatter, canVetoEmission, hasUserHooks,
533 doSecondHard, alphaSuseCMW, printBanner, doTrialNow;
534 int pTmaxMatch, pTdampMatch, alphaSorder, alphaSnfmax, alphaEMorder,
535 nGluonToQuark, nGammaToQuark, nGammaToLepton, nFinalMax,
536 nFinalMaxMECs,kernelOrder, kernelOrderMPI, nMPI, asScheme;
537 double pTdampFudge, mc, mb, m2c, m2b, renormMultFac, factorMultFac,
538 fixedFacScale2, alphaSvalue, alphaS2pi, Lambda3flav, Lambda4flav,
539 Lambda5flav, Lambda3flav2, Lambda4flav2, Lambda5flav2,
540 pTcolCutMin, pTcolCut,
541 pT2colCut, m2colCut, mTolErr, mZ, gammaZ, thetaW, mW, gammaW,
542 pTmaxFudgeMPI, sumCharge2L, sumCharge2Q, sumCharge2Tot,
543 pT2minVariations, pT2minEnhance, pT2minMECs, Q2minMECs, pT2recombine,
545 double alphaS2piOverestimate;
546 bool usePDFalphas, usePDFmasses, useSummedPDF, usePDF, useSystems,
547 useMassiveBeams, suppressLargeMECs;
549 double pTchgQCut, pT2chgQCut, pTchgLCut, pT2chgLCut;
551 unordered_map<int,double> pT2cutSave;
552 double pT2cut(
int id) {
553 if (pT2cutSave.find(
id) != pT2cutSave.end())
return pT2cutSave[
id];
556 for ( unordered_map<int,double>::iterator it = pT2cutSave.begin();
557 it != pT2cutSave.end(); ++it ) ret = max(ret, it->second);
562 for (
int i=0; i < int(dip->allowedEmissions.size()); ++i)
563 ret = max( ret, pT2cut(dip->allowedEmissions[i]));
568 for (
int i=0; i < int(dip->allowedEmissions.size()); ++i)
569 ret = min( ret, pT2cut(dip->allowedEmissions[i]));
573 bool doDecaysAsShower;
580 bool dopTlimit1, dopTlimit2, dopTdamp;
581 double pT2damp, kRad, kEmt, pdfScale2;
584 vector<DireTimesEnd> dipEnd;
589 unordered_map<string,double> kernelSel, kernelNow;
590 double auxSel, overSel, boostSel, auxNow, overNow, boostNow;
592 double tinypdf(
double x) {
594 return TINYPDF*log(1-x)/log(1-xref);
598 bool hasPDF (
int id) {
599 if ( !usePDF )
return false;
600 if ( particleDataPtr->colType(
id) != 0)
return true;
601 if ( particleDataPtr->isLepton(
id)
602 && settingsPtr->flag(
"PDF:lepton"))
return true;
607 double getXPDF(
int id,
double x,
double t,
int iSys = 0,
608 BeamParticle* beam =
nullptr,
bool finalRec =
true,
double z = 0.,
611 if (!hasPDF(
id))
return 1.0;
615 if (beamAPtr !=
nullptr || beamBPtr !=
nullptr) {
616 b = (beamAPtr !=
nullptr && particleDataPtr->isHadron(beamAPtr->id()))
618 : (beamBPtr !=
nullptr && particleDataPtr->isHadron(beamBPtr->id()))
619 ? beamBPtr :
nullptr;
621 if (b ==
nullptr && beamAPtr != 0) b = beamAPtr;
622 if (b ==
nullptr && beamBPtr != 0) b = beamBPtr;
626 if (asScheme == 2 && z != 0. && finalRec) {
628 double xcs = m2dip * zcs * (1.-zcs) / (t + m2dip * zcs * (1.-zcs));
629 scale2 = (1-zcs)*(1-xcs)/xcs/zcs*m2dip;
632 double ret = (useSummedPDF) ? b->
xf(
id, x, scale2)
633 : b->xfISR(iSys,
id, x, scale2);
640 void setupQCDdip(
int iSys,
int i,
int colTag,
int colSign,
Event& event,
641 bool isOctetOnium =
false,
bool limitPTmaxIn =
true);
642 void getGenDip(
int iSys,
int i,
int iRad,
const Event& event,
643 bool limitPTmaxIn, vector<DireTimesEnd>& dipEnds );
644 void getQCDdip(
int iRad,
int colTag,
int colSign,
const Event& event,
645 vector<DireTimesEnd>& dipEnds );
646 void setupDecayDip(
int iSys,
int iRad,
const Event& event,
647 vector<DireTimesEnd>& dipEnds);
650 bool appendDipole(
const Event& state,
int iRad,
int iRec,
double pTmax,
651 int colType,
int chgType,
int gamType,
int weakType,
int isrType,
int iSys,
652 int MEtype,
int iMEpartner,
int weakPol,
bool isOctetOnium,
653 vector<DireTimesEnd>& dipEnds);
658 void updateDipoles(
const Event& state,
int iSys = -1);
659 void checkDipoles(
const Event& state);
660 void saveSiblings(
const Event& state,
int iSys = -1);
665 void pT2nextQCD(
double pT2begDip,
double pT2sel,
DireTimesEnd& dip,
666 Event& event,
double pT2endForce = -1.,
double pT2freeze = 0.,
667 bool forceBranching =
false);
668 bool pT2nextQCD_FF(
double pT2begDip,
double pT2sel,
DireTimesEnd& dip,
669 const Event& event,
double pT2endForce = -1.,
double pT2freeze = 0.,
670 bool forceBranching =
false);
671 bool pT2nextQCD_FI(
double pT2begDip,
double pT2sel,
DireTimesEnd& dip,
672 const Event& event,
double pT2endForce = -1.,
double pT2freeze = 0.,
673 bool forceBranching =
false);
676 double tOld,
double tMin,
double tFreeze=0.,
int algoType = 0);
677 bool zCollNextQCD(
DireTimesEnd* dip,
double zMin,
double zMax,
678 double tMin = 0.,
double tMax = 0.);
679 bool virtNextQCD(
DireTimesEnd* dip,
double tMin,
double tMax,
680 double zMin =-1.,
double zMax =-1.);
684 double evalpdfstep(
int idRad,
double pT2,
double m2cp = -1.,
687 if (m2cp < 0.) m2cp = particleDataPtr->m0(4);
688 if (m2bp < 0.) m2bp = particleDataPtr->m0(5);
690 if ( abs(idRad) == 4 && pT2 < 1.2*m2cp && pT2 > m2cp) ret = 1.0;
691 if ( abs(idRad) == 5 && pT2 < 1.2*m2bp && pT2 > m2bp) ret = 1.0;
698 unordered_map<int,int> nProposedPT;
703 double enhanceOverestimateFurther(
string,
int,
double );
708 double,
double, multimap<double,string>&);
711 void addNewOverestimates( multimap<double,string>,
double&);
714 void alphasReweight(
double t,
double talpha,
int iSys,
bool forceFixedAs,
715 double& weight,
double& fullWeight,
double& overWeight,
716 double renormMultFacNow);
720 double,
double,
int,
string,
bool,
int&,
int&,
double&,
double&,
721 unordered_map<string,double>&,
double&);
723 pair<bool, pair<double,double> > getMEC (
const Event& state,
726 vector<Event> auxEvent = vector<Event>() );
729 double getMass(
int id,
int strategy,
double mass = 0.) {
731 if (beamAPtr !=
nullptr || beamBPtr !=
nullptr) {
732 beam = (beamAPtr !=
nullptr && particleDataPtr->isHadron(beamAPtr->id()))
734 : (beamBPtr !=
nullptr && particleDataPtr->isHadron(beamBPtr->id()))
735 ? beamBPtr :
nullptr;
737 bool usePDFmass = usePDFmasses
738 && (
toLower(settingsPtr->word(
"PDF:pSet")).find(
"lhapdf")
742 if ( particleDataPtr->colType(
id) != 0) {
743 if (strategy == 1) mRet = particleDataPtr->m0(
id);
744 if (strategy == 2 && usePDFmass && beam !=
nullptr)
746 if (strategy == 2 && (!usePDFmass || beam ==
nullptr))
747 mRet = particleDataPtr->m0(
id);
748 if (strategy == 3) mRet =
mass;
749 if (mRet < TINYMASS) mRet = 0.;
752 mRet = particleDataPtr->m0(
id);
753 if (strategy == 3) mRet =
mass;
754 if (mRet < TINYMASS) mRet = 0.;
756 return pow2(max(0.,mRet));
760 bool inAllowedPhasespace(
int kinType,
double z,
double pT2,
double m2dip,
761 double q2,
double xOld,
int splitType = 0,
double m2RadBef = 0.,
762 double m2r = 0.,
double m2s = 0.,
double m2e = 0.,
763 vector<double> aux = vector<double>());
766 double getNF(
double pT2);
769 double beta0 (
double NF)
770 {
return 11./6.*CA - 2./3.*NF*TR; }
771 double beta1 (
double NF)
772 {
return 17./6.*
pow2(CA) - (5./3.*CA+CF)*NF*TR; }
773 double beta2 (
double NF)
774 {
return 2857./432.*pow(CA,3)
775 + (-1415./216.*
pow2(CA) - 205./72.*CA*CF +
pow2(CF)/4.) *TR*NF
776 + ( 79.*CA + 66.*CF)/108.*
pow2(TR*NF); }
779 string splittingNowName, splittingSelName;
782 unordered_map<string, map<double,double> > acceptProbability;
783 unordered_map<string, multimap<double,double> > rejectProbability;
790 unordered_map<string, DireSplitting* > splits;
791 vector<int> bornColors;
799 unordered_map<string, double > overhead;
800 void scaleOverheadFactor(
string name,
double scale) {
801 overhead[name] *= scale;
804 void resetOverheadFactors() {
805 for ( unordered_map<string,double>::iterator it = overhead.begin();
806 it != overhead.end(); ++it )
811 double octetOniumColFac;
812 bool useLocalRecoilNow;
815 unordered_map<string,bool> bool_settings;
DireTimes()
Constructor.
Definition: DireTimes.h:214
int system() const
Tell which system was the last processed one.
Definition: DireTimes.h:326
DireTimesEnd()
Constructors.
Definition: DireTimes.h:44
constexpr double pow2(const double &x)
Powers of small integers - for balance speed/code clarity.
Definition: PythiaStdlib.h:182
Definition: StandardModel.h:23
double m2Max(int iDip, const Event &state)
Function to calculate the absolute phase-sace boundary for emissions.
Definition: DireTimes.h:472
virtual double enhancePTmax()
Potential enhancement factor of pTmax scale for hardest emission.
Definition: DireTimes.h:271
The Event class holds all info on the generated event.
Definition: Event.h:453
The TimeShower class does timelike showers.
Definition: TimeShower.h:33
Definition: BeamParticle.h:133
Data on radiating dipole ends; only used inside DireTimes class.
Definition: DireTimes.h:39
int iRadiator
Basic properties related to dipole and matrix element corrections.
Definition: DireTimes.h:122
Definition: ProcessLevel.h:36
Definition: DireBasics.h:374
virtual vector< string > getSplittingName(const Event &state, int iRad, int iEmt, int)
Definition: DireTimes.h:407
string toLower(const string &name, bool trim=true)
Definition: PythiaStdlib.cc:17
The DireSpace class does spacelike showers.
Definition: DireSpace.h:183
Definition: StandardModel.h:106
double pT2Times(const Particle &rad, const Particle &emt, const Particle &rec)
From Pythia version 8.215 onwards no longer virtual.
Definition: DireTimes.h:345
friend bool operator==(const DireTimesEnd &dip1, const DireTimesEnd &dip2)
The DireTimesEnd class.
Definition: DireTimes.cc:19
virtual bool isTimelike(const Event &state, int iRad, int, int, string)
Definition: DireTimes.h:401
vector< double > mass
Stored masses.
Definition: DireTimes.h:141
int iSysSel
Store properties to be returned by methods.
Definition: DireTimes.h:516
void appendAllowedEmt(int id)
Definition: DireTimes.h:149
Definition: DireSplittings.h:53
void list() const
Definition: DireTimes.h:172
Definition of color chains.
Definition: DireSplitInfo.h:28
int flavour
Properties specific to current trial emission.
Definition: DireTimes.h:132
vector< int > iSpectator
Extended list of recoilers.
Definition: DireTimes.h:146
double xf(int idIn, double x, double Q2)
Standard parton distributions.
Definition: BeamParticle.h:240
double zTimes(const Particle &rad, const Particle &emt, const Particle &rec)
From Pythia version 8.215 onwards no longer virtual.
Definition: DireTimes.h:357
double mQuarkPDF(int idIn)
Return quark masses used in the PDF fit (LHAPDF6 only).
Definition: BeamParticle.h:270
Container for all shower weights, including handling.
Definition: DireWeightContainer.h:82
virtual Event clustered(const Event &state, int iRad, int iEmt, int iRec, string name)
Setup clustering kinematics.
Definition: DireTimes.h:329
double phi(const Vec4 &v1, const Vec4 &v2)
phi is azimuthal angle between v1 and v2 around z axis.
Definition: Basics.cc:693
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
double sa1
Properties of 1->3 splitting.
Definition: DireTimes.h:138
Definition: DireSplitInfo.h:212
Definition: DireSplittingLibrary.h:35
const double CA
Colour factors in Vincia normalization.
Definition: VinciaCommon.h:40
bool validEvent(const Event &event)
The Merging class.
Definition: DireMerging.cc:24
void reinitPtr(Info *infoPtrIn, MergingHooksPtr mergingHooksPtrIn, DireSplittingLibrary *splittingsPtrIn, DireInfo *direInfoPtrIn)
Definition: DireTimes.h:245
The DireTimes class does timelike showers.
Definition: DireTimes.h:209
Settings * settingsPtr
Pointer to the settings database.
Definition: Info.h:80
bool getHasWeaklyRadiated()
Tell whether FSR has done a weak emission.
Definition: DireTimes.h:324
BeamParticle * getBeamA()
Pointers to the two incoming beams.
Definition: DireTimes.h:459
virtual ~DireTimes()
Destructor.
Definition: DireTimes.h:232