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"
44 DireTimesEnd() : iRadiator(-1), iRecoiler(-1), pTmax(0.), colType(0),
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.;
83 : iRadiator(dip.iRadiator), iRecoiler(dip.iRecoiler), pTmax(dip.pTmax),
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),
91 flavour(dip.flavour), iAunt(dip.iAunt),
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),
98 idEmtAft(dip.idEmtAft), iSpectator(dip.iSpectator),
99 allowedEmissions(dip.allowedEmissions), iSiblings(dip.iSiblings) {}
102 { iRadiator = t.iRadiator; iRecoiler = t.iRecoiler; pTmax = t.pTmax;
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;
110 flavour = t.flavour; iAunt = t.iAunt;
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;
117 idEmtAft = t.idEmtAft; iSpectator = t.iSpectator;
118 allowedEmissions = t.allowedEmissions; iSiblings = t.iSiblings;}
122 int iRadiator, iRecoiler;
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,
138 double sa1, xa, phia1;
143 int idRadAft, idEmtAft;
146 vector<int> iSpectator;
149 void appendAllowedEmt(
int id) {
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) {
164 mRad = state[iRadiator].m();
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;
225 usePDFalphas =
false;
228 suppressLargeMECs =
false;
239 if (splittingsPtr) splits = splittingsPtr->getSplittings();
240 return (splits.size() > 0);
245 void reinitPtr(
Info* infoPtrIn, MergingHooksPtr mergingHooksPtrIn,
248 settingsPtr = infoPtr->settingsPtr;
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.,
271 virtual double enhancePTmax() {
return pTmaxFudge;}
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,
324 bool getHasWeaklyRadiated() {
return false;}
326 int system()
const {
return iSysSel;};
329 virtual Event clustered(
const Event& state,
int iRad,
int iEmt,
int iRec,
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);
401 virtual bool isTimelike(
const Event& state,
int iRad,
int,
int,
string)
402 {
return state[iRad].isFinal(); }
407 virtual vector<string> getSplittingName(
const Event& state,
int iRad,
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);
448 bool validEvent(
const Event& state,
bool isProcess =
false,
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; }
472 double m2Max (
int iDip,
const Event& state) {
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,
611 if (!hasPDF(
id))
return 1.0;
615 if (beamAPtr != NULL || beamBPtr != NULL) {
616 b = (beamAPtr != NULL && particleDataPtr->isHadron(beamAPtr->id()))
618 : (beamBPtr != NULL && particleDataPtr->isHadron(beamBPtr->id()))
621 if (b == NULL && beamAPtr != 0)
beam = beamAPtr;
622 if (b == NULL && beamBPtr != 0)
beam = 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 != NULL || beamBPtr != NULL) {
732 beam = (beamAPtr != NULL && particleDataPtr->isHadron(beamAPtr->id()))
734 : (beamBPtr != NULL && particleDataPtr->isHadron(beamBPtr->id()))
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 != NULL)
745 mRet = beam->mQuarkPDF(
id);
746 if (strategy == 2 && (!usePDFmass || beam == NULL))
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;
823 #endif // end Pythia8_DireTimes_H