File indexing completed on 2025-01-18 10:06:31
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef Pythia8_SimpleTimeShower_H
0011 #define Pythia8_SimpleTimeShower_H
0012
0013 #include "Pythia8/TimeShower.h"
0014 #include "Pythia8/SimpleWeakShowerMEs.h"
0015
0016 namespace Pythia8 {
0017
0018
0019 class SplitOnia;
0020
0021
0022
0023
0024
0025 class TimeDipoleEnd {
0026
0027 public:
0028
0029
0030 TimeDipoleEnd() : iRadiator(-1), iRecoiler(-1), pTmax(0.), colType(0),
0031 chgType(0), gamType(0), weakType(0), isrType(0), system(0), systemRec(0),
0032 MEtype(0), iMEpartner(-1), weakPol(0), oniumType(0), isHiddenValley(false),
0033 colvType(0), MEmix(0.), MEorder(true), MEsplit(true), MEgluinoRec(false),
0034 isFlexible(false), hasJunction(false), flavour(), iAunt(),
0035 mRad(), m2Rad(), mRec(), m2Rec(), mDip(), m2Dip(), m2DipCorr(), pT2(),
0036 m2(), z(), mFlavour(), asymPol(), flexFactor(), pAccept() {}
0037 TimeDipoleEnd(int iRadiatorIn, int iRecoilerIn, double pTmaxIn = 0.,
0038 int colIn = 0, int chgIn = 0, int gamIn = 0, int weakTypeIn = 0,
0039 int isrIn = 0, int systemIn = 0, int MEtypeIn = 0, int iMEpartnerIn = -1,
0040 int weakPolIn = 0, int oniumTypeIn = 0,
0041 bool isHiddenValleyIn = false, int colvTypeIn = 0, double MEmixIn = 0.,
0042 bool MEorderIn = true, bool MEsplitIn = true, bool MEgluinoRecIn = false,
0043 bool isFlexibleIn = false, bool hasJunctionIn = false) :
0044 iRadiator(iRadiatorIn), iRecoiler(iRecoilerIn), pTmax(pTmaxIn),
0045 colType(colIn), chgType(chgIn), gamType(gamIn), weakType(weakTypeIn),
0046 isrType(isrIn), system(systemIn), systemRec(systemIn), MEtype(MEtypeIn),
0047 iMEpartner(iMEpartnerIn), weakPol(weakPolIn), oniumType(oniumTypeIn),
0048 isHiddenValley(isHiddenValleyIn), colvType(colvTypeIn), MEmix(MEmixIn),
0049 MEorder (MEorderIn), MEsplit(MEsplitIn), MEgluinoRec(MEgluinoRecIn),
0050 isFlexible(isFlexibleIn), hasJunction(hasJunctionIn),
0051 flavour(), iAunt(), mRad(), m2Rad(), mRec(), m2Rec(), mDip(), m2Dip(),
0052 m2DipCorr(), pT2(), m2(), z(), mFlavour(), asymPol(), flexFactor(),
0053 pAccept() {}
0054
0055
0056 int iRadiator, iRecoiler;
0057 double pTmax;
0058 int colType, chgType, gamType, weakType, isrType, system, systemRec,
0059 MEtype, iMEpartner, weakPol, oniumType;
0060 bool isHiddenValley;
0061 int colvType;
0062 double MEmix;
0063 bool MEorder, MEsplit, MEgluinoRec, isFlexible;
0064 bool hasJunction;
0065
0066
0067
0068 int flavour, iAunt;
0069 double mRad, m2Rad, mRec, m2Rec, mDip, m2Dip, m2DipCorr,
0070 pT2, m2, z, mFlavour, asymPol, flexFactor, pAccept;
0071 double m2A{0}, m2B{0}, m2C{0}, m2gg{-1};
0072
0073
0074 shared_ptr<SplitOnia> emissionPtr{};
0075
0076 };
0077
0078
0079
0080
0081
0082 class SimpleTimeShower : public TimeShower {
0083
0084 public:
0085
0086
0087 SimpleTimeShower() : hasWeaklyRadiated(), iSysSel(), pTmaxFudge(),
0088 pTLastBranch(), doQCDshower(), doQEDshowerByQ(), doQEDshowerByL(),
0089 doQEDshowerByOther(), doQEDshowerByGamma(), doWeakShower(),
0090 doMEcorrections(), doMEextended(), doMEafterFirst(), doPhiPolAsym(),
0091 doPhiPolAsymHard(), doInterleave(), doInterleaveResDec(),
0092 allowBeamRecoil(), dampenBeamRecoil(), useFixedFacScale(),
0093 allowRescatter(), canVetoEmission(), doHVshower(), brokenHVsym(),
0094 setLambdaHV(), globalRecoil(), useLocalRecoilNow(), doSecondHard(),
0095 hasUserHooks(), singleWeakEmission(), alphaSuseCMW(), vetoWeakJets(),
0096 allowMPIdipole(), weakExternal(), recoilDeadCone(), doDipoleRecoil(),
0097 doPartonVertex(), pTmaxMatch(), pTdampMatch(), alphaSorder(),
0098 alphaSnfmax(), nGluonToQuark(), weightGluonToQuark(), recoilStrategyRF(),
0099 alphaEMorder(), nGammaToQuark(), nGammaToLepton(), nCHV(), nFlavHV(),
0100 idHV(), alphaHVorder(), nMaxGlobalRecoil(), weakMode(), pTdampFudge(),
0101 mc(), mb(), m2c(), m2b(), renormMultFac(), factorMultFac(),
0102 fixedFacScale2(), alphaSvalue(), alphaS2pi(), Lambda3flav(),
0103 Lambda4flav(), Lambda5flav(), Lambda3flav2(), Lambda4flav2(),
0104 Lambda5flav2(), scaleGluonToQuark(), extraGluonToQuark(), pTcolCutMin(),
0105 pTcolCut(), pT2colCut(), pTchgQCut(), pT2chgQCut(), pTchgLCut(),
0106 pT2chgLCut(), pTweakCut(), pT2weakCut(), mMaxGamma(), m2MaxGamma(),
0107 mZ(), gammaZ(), thetaWRat(),
0108 mW(), gammaW(), CFHV(), alphaHVfix(), alphaHVref(), LambdaHV(),
0109 pThvCut(), pT2hvCut(), mHV(), pTmaxFudgeMPI(), weakEnhancement(),
0110 vetoWeakDeltaR2(), twoHard(), dopTlimit1(), dopTlimit2(), dopTdamp(),
0111 pT2damp(), kRad(), kEmt(), pdfScale2(), doTrialNow(), canEnhanceEmission(),
0112 canEnhanceTrial(), canEnhanceET(), doUncertaintiesNow(), dipSel(),
0113 iDipSel(), nHard(), nFinalBorn(), nMaxGlobalBranch(), nGlobal(),
0114 globalRecoilMode(), limitMUQ(), weakHardSize() { beamOffset = 0;
0115 pdfMode = 0; useSystems = true; }
0116
0117
0118 virtual ~SimpleTimeShower() override {}
0119
0120
0121 virtual void init( BeamParticle* beamAPtrIn = 0,
0122 BeamParticle* beamBPtrIn = 0) override;
0123
0124
0125 virtual bool limitPTmax( Event& event, double Q2Fac = 0.,
0126 double Q2Ren = 0.) override;
0127
0128
0129 virtual int shower( int iBeg, int iEnd, Event& event, double pTmax,
0130 int nBranchMax = 0) override;
0131
0132
0133 virtual int showerQED( int i1, int i2, Event& event, double pTmax) override;
0134
0135
0136
0137
0138 virtual void prepareProcess( Event& process, Event&, vector<int>&) override;
0139
0140
0141 virtual void prepareGlobal( Event& event) override;
0142
0143
0144 virtual void prepare( int iSys, Event& event, bool limitPTmaxIn = true)
0145 override;
0146
0147
0148 virtual void rescatterUpdate( int iSys, Event& event) override;
0149
0150
0151 virtual void update( int iSys, Event& event, bool hasWeakRad = false)
0152 override;
0153
0154
0155 virtual double pTnext( Event& event, double pTbegAll, double pTendAll,
0156 bool isFirstTrial = false, bool doTrialIn = false) override;
0157
0158
0159 virtual double pTnextResDec() override;
0160
0161
0162 virtual bool branch( Event& event, bool isInterleaved = false) override;
0163
0164
0165
0166
0167
0168
0169 virtual bool resonanceShower(Event& process, Event& event,
0170 vector<int>& iPos, double qRestart) override;
0171
0172
0173 virtual void list() const override;
0174
0175
0176 virtual bool initUncertainties() override;
0177
0178
0179 virtual bool initEnhancements() override;
0180
0181
0182 virtual bool getHasWeaklyRadiated() override {return hasWeaklyRadiated;}
0183
0184
0185 virtual int system() const override {return iSysSel;}
0186
0187
0188 virtual double enhancePTmax() override {return pTmaxFudge;}
0189
0190
0191 virtual double pTLastInShower() override {return pTLastBranch;}
0192
0193
0194
0195
0196 double noEmissionProbability( double pTbegAll, double pTendAll, double m2dip,
0197 int id, int type, double s = -1., double x = -1.) override;
0198 double pTnext( vector<TimeDipoleEnd> dipEnds, Event event, double pTbegAll,
0199 double pTendAll, double m2dip, int id, int type, double s = -1.,
0200 double x = -1.);
0201 int pdfMode;
0202 bool useSystems;
0203
0204 private:
0205
0206
0207 static const double MCMIN, MBMIN, SIMPLIFYROOT, XMARGIN, XMARGINCOMB,
0208 WTRATIOMAX,TINYPDF, LARGEM2, THRESHM2, LAMBDA3MARGIN1ORD,
0209 LAMBDA3MARGIN2ORD,WEAKPSWEIGHT, WG2QEXTRA, REJECTFACTOR,
0210 PROBLIMIT;
0211 static const int NLOOPMAX;
0212
0213 static const bool FIXRESCATTER, VETONEGENERGY;
0214 static const double MAXVIRTUALITYFRACTION, MAXNEGENERGYFRACTION;
0215
0216
0217 bool hasWeaklyRadiated;
0218 int iSysSel;
0219 double pTmaxFudge, pTLastBranch;
0220
0221
0222 bool doQCDshower, doQEDshowerByQ, doQEDshowerByL, doQEDshowerByOther,
0223 doQEDshowerByGamma, doWeakShower, doMEcorrections, doMEextended,
0224 doMEafterFirst, doPhiPolAsym, doPhiPolAsymHard, doInterleave,
0225 doInterleaveResDec, allowBeamRecoil, dampenBeamRecoil,
0226 useFixedFacScale, allowRescatter, canVetoEmission, doHVshower,
0227 brokenHVsym, setLambdaHV, globalRecoil, useLocalRecoilNow,
0228 doSecondHard, hasUserHooks, singleWeakEmission, alphaSuseCMW,
0229 vetoWeakJets, allowMPIdipole, weakExternal, recoilDeadCone,
0230 doDipoleRecoil, doPartonVertex;
0231 int pdfModeSave;
0232 int pTmaxMatch, pTdampMatch, alphaSorder, alphaSnfmax, nGluonToQuark,
0233 weightGluonToQuark, recoilStrategyRF, alphaEMorder, nGammaToQuark,
0234 nGammaToLepton, nCHV, nFlavHV, idHV, alphaHVorder, nMaxGlobalRecoil,
0235 weakMode;
0236 double pTdampFudge, mc, mb, m2c, m2b, renormMultFac, factorMultFac,
0237 fixedFacScale2, alphaSvalue, alphaS2pi, Lambda3flav, Lambda4flav,
0238 Lambda5flav, Lambda3flav2, Lambda4flav2, Lambda5flav2,
0239 scaleGluonToQuark, extraGluonToQuark, pTcolCutMin, pTcolCut,
0240 pT2colCut, pTchgQCut, pT2chgQCut, pTchgLCut, pT2chgLCut,
0241 pTweakCut, pT2weakCut, mMaxGamma, m2MaxGamma,
0242 mZ, gammaZ, thetaWRat, mW, gammaW, CFHV,
0243 alphaHVfix, alphaHVref, LambdaHV, pThvCut, pT2hvCut, mHV,
0244 pTmaxFudgeMPI, weakEnhancement, vetoWeakDeltaR2;
0245
0246
0247 AlphaStrong alphaS;
0248 AlphaEM alphaEM;
0249 AlphaSUN alphaHV;
0250
0251
0252 SimpleWeakShowerMEs simpleWeakShowerMEs;
0253
0254
0255 bool twoHard, dopTlimit1, dopTlimit2, dopTdamp;
0256 double pT2damp, kRad, kEmt, pdfScale2;
0257
0258
0259 bool doTrialNow, canEnhanceEmission, canEnhanceTrial, canEnhanceET,
0260 doUncertaintiesNow;
0261 string splittingNameNow, splittingNameSel;
0262 map< double, pair<string,double> > enhanceFactors;
0263 void storeEnhanceFactor(double pT2, string name, double enhanceFactorIn)
0264 { enhanceFactors.insert(make_pair(pT2,make_pair(name,enhanceFactorIn)));}
0265
0266
0267 vector<TimeDipoleEnd> dipEnd;
0268 TimeDipoleEnd* dipSel;
0269 int iDipSel;
0270
0271
0272 void setupQCDdip( int iSys, int i, int colTag, int colSign, Event& event,
0273 bool isOctetOnium = false, bool limitPTmaxIn = true);
0274 void setupQEDdip( int iSys, int i, int chgType, int gamType, Event& event,
0275 bool limitPTmaxIn = true);
0276 void setupWeakdip( int iSys, int i,int weakType, Event& event,
0277 bool limitPTmaxIn = true);
0278
0279 void setupWeakdipExternal(Event& event, bool limitPTmaxIn = true);
0280 void setupHVdip( int iSys, int i, int colvType, Event& event,
0281 bool limitPTmaxIn = true);
0282
0283
0284 bool applyMECorrections(const Event& event, TimeDipoleEnd* dipBranch,
0285 int iSysBranch);
0286
0287
0288 void regenerateOniumDipoles(Event & event);
0289
0290
0291 void pT2nextQCD( double pT2begDip, double pT2sel, TimeDipoleEnd& dip,
0292 Event& event);
0293
0294
0295 void pT2nextQED( double pT2begDip, double pT2sel, TimeDipoleEnd& dip,
0296 Event& event);
0297
0298
0299 void pT2nextWeak( double pT2begDip, double pT2sel, TimeDipoleEnd& dip,
0300 Event& event);
0301
0302
0303 void pT2nextHV( double pT2begDip, double pT2sel, TimeDipoleEnd& dip,
0304 Event& );
0305
0306
0307 void pT2nextOnium( double pT2begDip, double pT2sel, TimeDipoleEnd& dip,
0308 Event& );
0309
0310
0311 void findMEtype( Event& event, TimeDipoleEnd& dip);
0312
0313
0314 int findMEparticle( int id, bool isHiddenColour = false);
0315
0316
0317 double gammaZmix( Event& event, int iRes, int iDau1, int iDau2);
0318
0319
0320 double findMEcorr(TimeDipoleEnd* dip, Particle& rad, Particle& partner,
0321 Particle& emt, bool cutEdge = true);
0322
0323
0324 double findMEcorrWeak(TimeDipoleEnd* dip, Vec4 rad, Vec4 rec,
0325 Vec4 emt, Vec4 p3, Vec4 p4, Vec4 radBef, Vec4 recBef);
0326
0327
0328 double calcMEcorr( int kind, int combiIn, double mixIn, double x1,
0329 double x2, double r1, double r2, double r3 = 0., bool cutEdge = true);
0330
0331
0332 void findAsymPol( Event& event, TimeDipoleEnd* dip);
0333
0334
0335 double calcPTresDec(Particle& res);
0336
0337
0338 bool rescatterPropagateRecoil( Event& event, Vec4& pNew);
0339
0340
0341
0342 vector<int> hardPartons;
0343
0344
0345
0346 int nHard, nFinalBorn, nMaxGlobalBranch;
0347
0348 map<int,int> nProposed;
0349
0350 int nGlobal, globalRecoilMode;
0351
0352 bool limitMUQ;
0353
0354
0355 void calcUncertainties( bool accept, double pAccept,
0356 double enhance, TimeDipoleEnd* dip, Particle* radPtr,
0357 Particle* emtPtr, Particle* recPtr );
0358
0359
0360 vector<Vec4> weakMomenta;
0361 vector<int> weak2to2lines;
0362 int weakHardSize;
0363
0364
0365 bool doFSRinResonances{};
0366 int resDecScaleChoice{-1}, iHardResDecSav{}, nRecurseResDec{};
0367 vector<int> idResDecSav;
0368 vector<double> pTresDecSav;
0369
0370
0371 bool skipFirstMECinHardProc;
0372 vector<int> skipFirstMECinResDecIDs{};
0373
0374
0375 bool doOniumShower{false};
0376 vector<SplitOniaPtr> oniumEmissions;
0377 set<double> oniumThresholds;
0378
0379 };
0380
0381
0382
0383 }
0384
0385 #endif