24 #ifndef Pythia8_SigmaProcess_H 25 #define Pythia8_SigmaProcess_H 27 #include "Pythia8/Basics.h" 28 #include "Pythia8/BeamParticle.h" 29 #include "Pythia8/Event.h" 30 #include "Pythia8/Info.h" 31 #include "Pythia8/SigmaLowEnergy.h" 32 #include "Pythia8/LesHouches.h" 33 #include "Pythia8/ParticleData.h" 34 #include "Pythia8/PartonDistributions.h" 35 #include "Pythia8/PhysicsBase.h" 36 #include "Pythia8/PythiaComplex.h" 37 #include "Pythia8/PythiaStdlib.h" 38 #include "Pythia8/ResonanceWidths.h" 39 #include "Pythia8/Settings.h" 40 #include "Pythia8/SigmaTotal.h" 41 #include "Pythia8/StandardModel.h" 42 #include "Pythia8/SLHAinterface.h" 43 #include "Pythia8/SusyLesHouches.h" 73 InPair(
int idAIn = 0,
int idBIn = 0) : idA(idAIn), idB(idBIn),
74 pdfA(0.), pdfB(0.), pdfSigma(0.) {}
78 double pdfA, pdfB, pdfSigma;
98 void setLHAPtr( LHAupPtr lhaUpPtrIn) {lhaUpPtr = lhaUpPtrIn;}
102 mA = beamAPtr->m(); mB = beamBPtr->m();}
108 virtual bool initFlux();
112 virtual void set1Kin(
double ,
double ,
double ) {}
116 virtual void set2Kin(
double ,
double ,
double ,
double ,
double ,
117 double,
double,
double ) {}
123 double ,
double ,
double ,
bool ,
double ,
double ) {}
129 double ,
double ,
double ,
double ,
double ,
double ) {}
143 id1 = id1in; id2 = id2in;
144 return ( convert2mb() ? CONVERT2MB * sigmaHat() : sigmaHat() ); }
149 virtual double sigmaPDF(
bool initPS =
false,
bool samexGamma =
false,
150 bool useNewXvalues =
false,
double x1New = 0.,
double x2New = 0.);
153 void pickInState(
int id1in = 0,
int id2in = 0);
160 double = 0.,
double = 0.) {
return true;}
167 virtual double weightDecayFlav(
Event&) {
return 1.;}
178 virtual string name()
const {
return "unnamed process";}
179 virtual int code()
const {
return 0;}
180 virtual int nFinal()
const {
return 2;}
183 virtual string inFlux()
const {
return "unknown";}
192 virtual bool isLHA()
const {
return false;}
196 virtual bool isResolved()
const {
return true;}
197 virtual bool isDiffA()
const {
return false;}
198 virtual bool isDiffB()
const {
return false;}
199 virtual bool isDiffC()
const {
return false;}
202 virtual bool isSUSY()
const {
return false;}
208 virtual bool hasNLO()
const {
return false;}
214 virtual int id4Mass()
const {
return 0;}
215 virtual int id5Mass()
const {
return 0;}
219 virtual int resonanceB()
const {
return 0;}
232 virtual int idTchan2()
const {
return 0;}
233 virtual double tChanFracPow1()
const {
return 0.3;}
234 virtual double tChanFracPow2()
const {
return 0.3;}
235 virtual bool useMirrorWeight()
const {
return false;}
244 int id(
int i)
const {
return idSave[i];}
245 int col(
int i)
const {
return colSave[i];}
246 int acol(
int i)
const {
return acolSave[i];}
247 double m(
int i)
const {
return mSave[i];}
248 Particle getParton(
int i)
const {
return parton[i];}
252 double Q2Ren()
const {
return Q2RenSave;}
253 double alphaEMRen()
const {
return alpEM;}
254 double alphaSRen()
const {
return alpS;}
255 double Q2Fac()
const {
return Q2FacSave;}
256 double pdf1()
const {
return pdf1Save;}
257 double pdf2()
const {
return pdf2Save;}
260 double thetaMPI()
const {
return atan2( sinTheta, cosTheta);}
261 double phiMPI()
const {
return phi;}
262 double sHBetaMPI()
const {
return sHBeta;}
263 double pT2MPI()
const {
return pT2Mass;}
264 double pTMPIFin()
const {
return pTFin;}
268 for (
int i = 0; i < 12; i++) { partonT[i] = parton[i];
269 mSaveT[i] = mSave[i]; }
270 pTFinT = pTFin; phiT =
phi; cosThetaT = cosTheta; sinThetaT = sinTheta; }
272 for (
int i = 0; i < 12; i++) { parton[i] = partonT[i];
273 mSave[i] = mSaveT[i]; }
274 pTFin = pTFinT; cosTheta = cosThetaT; sinTheta = sinThetaT;
phi = phiT;
277 for (
int i = 0; i < 12; i++) { swap(parton[i], partonT[i]);
278 swap(mSave[i], mSaveT[i]); }
279 swap(pTFin, pTFinT); swap(cosTheta, cosThetaT);
280 swap(sinTheta, sinThetaT); swap(
phi, phiT); }
289 renormScale1(), renormScale2(), renormScale3(), renormScale3VV(),
290 factorScale1(), factorScale2(), factorScale3(), factorScale3VV(),
291 Kfactor(), mcME(), mbME(), mmuME(), mtauME(), renormMultFac(),
292 renormFixScale(), factorMultFac(), factorFixScale(), higgsH1parity(),
293 higgsH2parity(), higgsA3parity(), higgsH1eta(), higgsH2eta(), higgsA3eta(),
294 higgsH1phi(), higgsH2phi(), higgsA3phi(), idA(), idB(), mA(), mB(),
295 isLeptonA(), isLeptonB(), hasLeptonBeams(), beamA2gamma(), beamB2gamma(),
296 hasGamma(), mH(), sH(), sH2(), x1Save(), x2Save(), sigmaSumSave(),
297 id1(), id2(), id3(), id4(), id5(), idSave(), colSave(), acolSave(),
298 mSave(), cosTheta(), sinTheta(),
phi(), sHMass(), sHBeta(), pT2Mass(),
299 pTFin(), mSaveT(), pTFinT(), cosThetaT(), sinThetaT(), phiT(), mME(),
301 for (
int i = 0; i < 12; ++i) mSave[i] = 0.;
302 Q2RenSave = alpEM = alpS = Q2FacSave = pdf1Save = pdf2Save = 0.; }
306 static const int NCOMPSTEP;
316 int nQuarkIn, renormScale1, renormScale2, renormScale3, renormScale3VV,
317 factorScale1, factorScale2, factorScale3, factorScale3VV;
318 double Kfactor, mcME, mbME, mmuME, mtauME, renormMultFac, renormFixScale,
319 factorMultFac, factorFixScale;
323 double higgsH1eta, higgsH2eta, higgsA3eta, higgsH1phi, higgsH2phi,
329 bool isLeptonA, isLeptonB, hasLeptonBeams, beamA2gamma, beamB2gamma,
334 vector<InBeam> inBeamB;
335 void addBeamA(
int idIn) {inBeamA.push_back(
InBeam(idIn));}
336 void addBeamB(
int idIn) {inBeamB.push_back(
InBeam(idIn));}
337 int sizeBeamA()
const {
return inBeamA.size();}
338 int sizeBeamB()
const {
return inBeamB.size();}
342 void addPair(
int idAIn,
int idBIn) {
343 inPair.push_back(
InPair(idAIn, idBIn));}
344 int sizePair()
const {
return inPair.size();}
350 double Q2RenSave, alpEM, alpS, Q2FacSave, x1Save, x2Save, pdf1Save,
351 pdf2Save, sigmaSumSave;
354 int id1, id2, id3, id4, id5;
355 int idSave[12], colSave[12], acolSave[12];
356 double mSave[12], cosTheta, sinTheta,
phi, sHMass, sHBeta, pT2Mass, pTFin;
362 double mSaveT[12], pTFinT, cosThetaT, sinThetaT, phiT;
375 void setId(
int id1in = 0,
int id2in = 0,
int id3in = 0,
int id4in = 0,
376 int id5in = 0) {idSave[1] = id1in; idSave[2] = id2in; idSave[3] = id3in;
377 idSave[4] = id4in; idSave[5] = id5in;}
378 void setColAcol(
int col1 = 0,
int acol1 = 0,
379 int col2 = 0,
int acol2 = 0,
int col3 = 0,
int acol3 = 0,
380 int col4 = 0,
int acol4 = 0,
int col5 = 0,
int acol5 = 0) {
381 colSave[1] = col1; acolSave[1] = acol1; colSave[2] = col2;
382 acolSave[2] = acol2; colSave[3] = col3; acolSave[3] = acol3;
383 colSave[4] = col4; acolSave[4] = acol4; colSave[5] = col5;
384 acolSave[5] = acol5; }
385 void swapColAcol() { swap(colSave[1], acolSave[1]);
386 swap(colSave[2], acolSave[2]); swap(colSave[3], acolSave[3]);
387 swap(colSave[4], acolSave[4]); swap(colSave[5], acolSave[5]);}
388 void swapCol1234() { swap(colSave[1], colSave[2]);
389 swap(colSave[3], colSave[4]); swap(acolSave[1], acolSave[2]);
390 swap(acolSave[3], acolSave[4]);}
391 void swapCol12() { swap(colSave[1], colSave[2]);
392 swap(acolSave[1], acolSave[2]);}
393 void swapCol34() { swap(colSave[3], colSave[4]);
394 swap(acolSave[3], acolSave[4]);}
397 double weightTopDecay(
Event& process,
int iResBeg,
int iResEnd);
398 double weightHiggsDecay(
Event& process,
int iResBeg,
int iResEnd);
424 virtual double sigmaPDF(
bool,
bool,
bool,
double,
double )
431 virtual void setIdInDiff(
int idAin,
int idBin) { idA = idAin; idB = idBin; }
456 virtual void set1Kin(
double x1in,
double x2in,
double sHin) {
457 store1Kin( x1in, x2in, sHin); sigmaKin();}
465 virtual double sigmaHatWrap(
int id1in = 0,
int id2in = 0);
473 virtual void store1Kin(
double x1in,
double x2in,
double sHin);
476 virtual bool setupForME();
496 virtual void set2Kin(
double x1in,
double x2in,
double sHin,
497 double tHin,
double m3in,
double m4in,
double runBW3in,
498 double runBW4in) { store2Kin( x1in, x2in, sHin, tHin, m3in, m4in,
499 runBW3in, runBW4in); sigmaKin();}
502 virtual void set2KinMPI(
double x1in,
double x2in,
double sHin,
503 double tHin,
double uHin,
double alpSin,
double alpEMin,
504 bool needMasses,
double m3in,
double m4in) {
505 store2KinMPI( x1in, x2in, sHin, tHin, uHin, alpSin, alpEMin,
506 needMasses, m3in, m4in); sigmaKin();}
515 id1 = id1in; id2 = id2in;
double sigmaTmp = sigmaHat();
516 if (convertM2()) sigmaTmp /= 16. * M_PI * sH2;
517 if (convert2mb()) sigmaTmp *= CONVERT2MB;
521 virtual bool final2KinMPI(
int i1Res = 0,
int i2Res = 0,
Vec4 p1Res = 0.,
522 Vec4 p2Res = 0.,
double m1Res = 0.,
double m2Res = 0.);
528 m4(0.), s4(0.), pT2(0.), runBW3(0.), runBW4(0.) {}
531 virtual void store2Kin(
double x1in,
double x2in,
double sHin,
532 double tHin,
double m3in,
double m4in,
double runBW3in,
534 virtual void store2KinMPI(
double x1in,
double x2in,
double sHin,
535 double tHin,
double uHin,
double alpSin,
double alpEMin,
536 bool needMasses,
double m3in,
double m4in);
539 virtual bool setupForME();
542 double tH, uH, tH2, uH2, m3, s3, m4, s4, pT2, runBW3, runBW4;
562 virtual void set3Kin(
double x1in,
double x2in,
double sHin,
563 Vec4 p3cmIn,
Vec4 p4cmIn,
Vec4 p5cmIn,
double m3in,
double m4in,
564 double m5in,
double runBW3in,
double runBW4in,
double runBW5in) {
565 store3Kin( x1in, x2in, sHin, p3cmIn, p4cmIn, p5cmIn, m3in, m4in, m5in,
566 runBW3in, runBW4in, runBW5in); sigmaKin();}
575 runBW4(), runBW5() {}
578 virtual void store3Kin(
double x1in,
double x2in,
double sHin,
579 Vec4 p3cmIn,
Vec4 p4cmIn,
Vec4 p5cmIn,
double m3in,
double m4in,
580 double m5in,
double runBW3in,
double runBW4in,
double runBW5in);
583 virtual bool setupForME();
586 double m3, s3, m4, s4, m5, s5, runBW3, runBW4, runBW5;
587 Vec4 p3cm, p4cm, p5cm;
610 virtual double sigmaPDF(
bool,
bool,
bool,
double,
double ) {
return 1.;}
613 virtual double weightDecay(
Event& process,
int iResBeg,
int iResEnd);
616 virtual void setScale();
619 virtual string name()
const {
return "Les Houches User Process(es)";}
620 virtual int code()
const {
return 9999;}
623 virtual int nFinal()
const;
629 virtual bool isLHA()
const {
return true;}
633 return (lhaUpPtr->strategy() < 0);}
virtual bool isSChannel() const
2 -> 2 and 2 -> 3 processes only through s-channel exchange.
Definition: SigmaProcess.h:222
InPair(int idAIn=0, int idBIn=0)
Constructor.
Definition: SigmaProcess.h:73
Sigma3Process()
Constructor.
Definition: SigmaProcess.h:574
int id(int i) const
Give back particle properties: flavours, colours, masses, or all.
Definition: SigmaProcess.h:244
virtual int resonanceA() const
Special treatment needed if process contains an s-channel resonance.
Definition: SigmaProcess.h:218
double m3
Store subprocess kinematics quantities.
Definition: SigmaProcess.h:586
virtual void sigmaKin()
Calculate flavour-independent parts of cross section.
Definition: SigmaProcess.h:132
virtual bool final2KinMPI(int=0, int=0, Vec4=0., Vec4=0., double=0., double=0.)
Perform kinematics for a Multiparton Interaction, in its rest frame.
Definition: SigmaProcess.h:159
bool swapTU
Store whether tHat and uHat are swapped (= same as swap 3 and 4).
Definition: SigmaProcess.h:372
virtual bool hasNLO() const
Whether this process has an inclusive NLO correction implemented.
Definition: SigmaProcess.h:208
virtual double sigmaHat()
Evaluate sigmaHat(sHat) for resolved 2 -> 1 processes.
Definition: SigmaProcess.h:460
Sigma1Process()
Constructor.
Definition: SigmaProcess.h:470
virtual bool convertM2() const
For 2 -> 2 process optional conversion from |M|^2 to d(sigmaHat)/d(tHat).
Definition: SigmaProcess.h:189
Definition: PhysicsBase.h:26
Definition: SigmaProcess.h:445
The Event class holds all info on the generated event.
Definition: Event.h:408
int id
Values.
Definition: SigmaProcess.h:59
Definition: BeamParticle.h:133
virtual void set2KinMPI(double, double, double, double, double, double, double, bool, double, double)
Definition: SigmaProcess.h:122
virtual bool convert2mb() const
Need to know whether to convert cross section answer from GeV^-2 to mb.
Definition: SigmaProcess.h:186
virtual double sigmaHat()
Definition: SigmaProcess.h:137
double mH
Store common subprocess kinematics quantities.
Definition: SigmaProcess.h:347
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat) for resolved 2 -> 3 processes.
Definition: SigmaProcess.h:569
SigmaProcess is the base class for cross section calculations.
Definition: SigmaProcess.h:86
virtual bool isQCD3body() const
QCD 2 -> 3 processes need special phase space selection machinery.
Definition: SigmaProcess.h:228
virtual double weightDecay(Event &, int, int)
Definition: SigmaProcess.h:172
double Q2Ren() const
Definition: SigmaProcess.h:252
Definition: SLHAinterface.h:27
virtual void set3Kin(double x1in, double x2in, double sHin, Vec4 p3cmIn, Vec4 p4cmIn, Vec4 p5cmIn, double m3in, double m4in, double m5in, double runBW3in, double runBW4in, double runBW5in)
Input and complement kinematics for resolved 2 -> 3 process.
Definition: SigmaProcess.h:562
Sigma0Process()
Constructor.
Definition: SigmaProcess.h:436
SigmaLHAProcess()
Constructor.
Definition: SigmaProcess.h:601
virtual string inFlux() const
Need to know which incoming partons to set up interaction for.
Definition: SigmaProcess.h:183
LHAupPtr lhaUpPtr
Pointer to LHAup for generating external events.
Definition: SigmaProcess.h:312
virtual bool isLHA() const
Special treatment needed for Les Houches processes.
Definition: SigmaProcess.h:192
virtual int idTchan1() const
Special treatment in 2 -> 3 with two massive propagators.
Definition: SigmaProcess.h:231
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaProcess.h:453
virtual int idSChannel() const
NOAM: Insert an intermediate resonance in 2 -> 1 -> 2 (or 3) listings.
Definition: SigmaProcess.h:225
virtual bool isSUSY() const
Special treatment needed for SUSY processes.
Definition: SigmaProcess.h:202
SusyLesHouches * slhaPtr
Pointer to an SLHA object.
Definition: SigmaProcess.h:309
virtual bool initFlux()
No partonic flux to be set up.
Definition: SigmaProcess.h:418
InBeam(int idIn=0)
Constructor.
Definition: SigmaProcess.h:56
virtual double sigmaHatWrap(int id1in=0, int id2in=0)
Definition: SigmaProcess.h:142
double thetaMPI() const
Give back angles; relevant only for multipe-interactions processes.
Definition: SigmaProcess.h:260
virtual bool isLHA() const
Ensure special treatment of Les Houches processes.
Definition: SigmaProcess.h:629
virtual bool allowNegativeSigma() const
Special treatment needed if negative cross sections allowed.
Definition: SigmaProcess.h:632
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaProcess.h:559
void saveKin()
Save and load kinematics for trial interactions.
Definition: SigmaProcess.h:267
int higgsH1parity
CP violation parameters for Higgs sector, normally only set once.
Definition: SigmaProcess.h:322
virtual void set3Kin(double, double, double, Vec4, Vec4, Vec4, double, double, double, double, double, double)
Definition: SigmaProcess.h:128
vector< InPair > inPair
Allowed colliding parton pairs, with pdf's.
Definition: SigmaProcess.h:341
virtual void set1Kin(double, double, double)
Definition: SigmaProcess.h:112
virtual ~Sigma0Process()
Destructor.
Definition: SigmaProcess.h:412
double Q2RenSave
Store Q2 renormalization and factorization scales, and related values.
Definition: SigmaProcess.h:350
virtual ~Sigma1Process()
Destructor.
Definition: SigmaProcess.h:450
Definition: SigmaProcess.h:551
InBeam is a simple helper class for partons and their flux in a beam.
Definition: SigmaProcess.h:51
Definition: SigmaProcess.h:407
virtual bool isNonDiff() const
Special treatment needed for elastic and diffractive processes.
Definition: SigmaProcess.h:195
virtual void setIdColAcol()
Select flavour, colour and anticolour.
Definition: SigmaProcess.h:156
virtual void set2Kin(double x1in, double x2in, double sHin, double tHin, double m3in, double m4in, double runBW3in, double runBW4in)
Input and complement kinematics for resolved 2 -> 2 process.
Definition: SigmaProcess.h:496
Definition: SusyLesHouches.h:393
Definition: SigmaProcess.h:485
virtual double sigmaHatWrap(int id1in=0, int id2in=0)
Definition: SigmaProcess.h:514
vector< InBeam > inBeamA
Partons in beams, with PDF's.
Definition: SigmaProcess.h:333
virtual int gmZmode() const
Special process-specific gamma*/Z0 choice if >=0 (e.g. f fbar -> H0 Z0).
Definition: SigmaProcess.h:238
virtual double sigmaHat()
Evaluate sigma for unresolved processes.
Definition: SigmaProcess.h:421
virtual double sigmaPDF(bool, bool, bool, double, double)
Dummy function: action is put in PhaseSpaceLHA.
Definition: SigmaProcess.h:610
virtual bool convert2mb() const
Answer for these processes already in mb, so do not convert.
Definition: SigmaProcess.h:428
virtual ~SigmaLHAProcess()
Destructor.
Definition: SigmaProcess.h:604
void updateBeamIDs()
Switch to new beam particle identities; for similar hadrons only.
Definition: SigmaProcess.h:101
virtual void set1Kin(double x1in, double x2in, double sHin)
Input and complement kinematics for resolved 2 -> 1 process.
Definition: SigmaProcess.h:456
virtual int id3Mass() const
Definition: SigmaProcess.h:213
static const double MASSMARGIN
The sum of outgoing masses must not be too close to the cm energy.
Definition: SigmaProcess.h:305
virtual void set2KinMPI(double x1in, double x2in, double sHin, double tHin, double uHin, double alpSin, double alpEMin, bool needMasses, double m3in, double m4in)
Ditto, but for Multiparton Interactions applications, so different input.
Definition: SigmaProcess.h:502
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaProcess.h:493
virtual void setIdInDiff(int, int)
Set the incoming ids for diffraction.
Definition: SigmaProcess.h:283
virtual bool setupForME()
Definition: SigmaProcess.h:366
virtual string name() const
Process name and code, and the number of final-state particles.
Definition: SigmaProcess.h:178
virtual ~SigmaProcess()
Destructor.
Definition: SigmaProcess.h:91
Sigma2Process()
Constructor.
Definition: SigmaProcess.h:527
virtual double sigmaPDF(bool, bool, bool, double, double)
Since no PDF's there is no difference from above.
Definition: SigmaProcess.h:424
virtual ~Sigma3Process()
Destructor.
Definition: SigmaProcess.h:556
double phi(const Vec4 &v1, const Vec4 &v2)
phi is azimuthal angle between v1 and v2 around z axis.
Definition: Basics.cc:708
virtual void set2Kin(double, double, double, double, double, double, double, double)
Definition: SigmaProcess.h:116
virtual ~Sigma2Process()
Destructor.
Definition: SigmaProcess.h:490
virtual bool convert2mb() const
Answer for these processes not in GeV^-2, so do not do this conversion.
Definition: SigmaProcess.h:626
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:587
Definition: SigmaProcess.h:596
double tH
Store subprocess kinematics quantities.
Definition: SigmaProcess.h:542
virtual void setIdInDiff(int idAin, int idBin)
Set the incoming ids for diffraction.
Definition: SigmaProcess.h:431
virtual int nFinal() const
Number of final-state particles.
Definition: SigmaProcess.h:415
virtual void setScale()
Set scale, when that is missing for an external LHA process.
Definition: SigmaProcess.h:175
InPair is a simple helper class for colliding parton pairs and their flux.
Definition: SigmaProcess.h:68
int id1
Store flavour, colour, anticolour, mass, angles and the whole particle.
Definition: SigmaProcess.h:354
virtual string name() const
Info on the subprocess.
Definition: SigmaProcess.h:619
int idA
Values.
Definition: SigmaProcess.h:77
bool swappedTU() const
Tell whether tHat and uHat are swapped (= same as swap 3 and 4).
Definition: SigmaProcess.h:241
virtual double sigmaHat()
Evaluate d(sigmaHat)/d(tHat) for resolved 2 -> 2 processes.
Definition: SigmaProcess.h:509
bool doVarE
Initialization data, normally only set once.
Definition: SigmaProcess.h:315
virtual bool initFlux()
No partonic flux to be set up.
Definition: SigmaProcess.h:607
virtual bool allowNegativeSigma() const
Special treatment needed if negative cross sections allowed.
Definition: SigmaProcess.h:205
SigmaProcess()
Constructor.
Definition: SigmaProcess.h:288
virtual void initProc()
Initialize process. Only used for some processes.
Definition: SigmaProcess.h:105
virtual double weightNLO()
Evaluate inclusive NLO weight.
Definition: SigmaProcess.h:163
int idA
Information on incoming beams.
Definition: SigmaProcess.h:327
void setId(int id1in=0, int id2in=0, int id3in=0, int id4in=0, int id5in=0)
Set flavour, colour and anticolour.
Definition: SigmaProcess.h:375
void setLHAPtr(LHAupPtr lhaUpPtrIn)
Store or replace Les Houches pointer.
Definition: SigmaProcess.h:98