File indexing completed on 2026-05-23 08:19:22
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef Pythia8_SigmaQCD_H
0010 #define Pythia8_SigmaQCD_H
0011
0012 #include "Pythia8/SigmaProcess.h"
0013
0014 namespace Pythia8 {
0015
0016
0017
0018
0019
0020 class Sigma0nonDiffractive : public Sigma0Process {
0021
0022 public:
0023
0024
0025 Sigma0nonDiffractive() {}
0026
0027
0028 virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaND();
0029 return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 1);}
0030
0031
0032 virtual void setIdColAcol() {}
0033
0034
0035 virtual string name() const {return "non-diffractive";}
0036 virtual int code() const {return 101;}
0037 virtual bool isNonDiff() const {return true;}
0038
0039 private:
0040
0041 };
0042
0043
0044
0045
0046
0047 class Sigma0AB2AB : public Sigma0Process {
0048
0049 public:
0050
0051
0052 Sigma0AB2AB() {}
0053
0054
0055 virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaEl();
0056 return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 2);}
0057
0058
0059 virtual void setIdColAcol();
0060
0061
0062 virtual string name() const {return "A B -> A B elastic";}
0063 virtual int code() const {return 102;}
0064 virtual bool isResolved() const {return false;}
0065
0066 private:
0067
0068 };
0069
0070
0071
0072
0073
0074 class Sigma0AB2XB : public Sigma0Process {
0075
0076 public:
0077
0078
0079 Sigma0AB2XB() {}
0080
0081
0082 virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaXB();
0083 return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 3);}
0084
0085
0086 virtual void setIdColAcol();
0087
0088
0089 virtual string name() const {return "A B -> X B single diffractive";}
0090 virtual int code() const {return 103;}
0091 virtual bool isResolved() const {return false;}
0092 virtual bool isDiffA() const {return true;};
0093
0094 private:
0095
0096 };
0097
0098
0099
0100
0101
0102 class Sigma0AB2AX : public Sigma0Process {
0103
0104 public:
0105
0106
0107 Sigma0AB2AX() {}
0108
0109
0110 virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaAX();
0111 return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 4);}
0112
0113
0114 virtual void setIdColAcol();
0115
0116
0117 virtual string name() const {return "A B -> A X single diffractive";}
0118 virtual int code() const {return 104;}
0119 virtual bool isResolved() const {return false;}
0120 virtual bool isDiffB() const {return true;};
0121
0122 private:
0123
0124 };
0125
0126
0127
0128
0129
0130 class Sigma0AB2XX : public Sigma0Process {
0131
0132 public:
0133
0134
0135 Sigma0AB2XX() {}
0136
0137
0138 virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaXX();
0139 return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 5);}
0140
0141
0142 virtual void setIdColAcol();
0143
0144
0145 virtual string name() const {return "A B -> X X double diffractive";}
0146 virtual int code() const {return 105;}
0147 virtual bool isResolved() const {return false;}
0148 virtual bool isDiffA() const {return true;};
0149 virtual bool isDiffB() const {return true;};
0150
0151 private:
0152
0153 };
0154
0155
0156
0157
0158
0159 class Sigma0AB2AXB : public Sigma0Process {
0160
0161 public:
0162
0163
0164 Sigma0AB2AXB() {}
0165
0166
0167 virtual double sigmaHat() {if (!doVarE) return sigmaTotPtr->sigmaAXB();
0168 return sigmaCmbPtr->sigmaPartial(idA, idB, infoPtr->eCM(), mA, mB, 6);}
0169
0170
0171 virtual void setIdColAcol();
0172
0173
0174 virtual string name() const {return "A B -> A X B central diffractive";}
0175 virtual int code() const {return 106;}
0176 virtual int nFinal() const {return 3;}
0177 virtual bool isResolved() const {return false;}
0178 virtual bool isDiffC() const {return true;};
0179
0180 private:
0181
0182 };
0183
0184
0185
0186
0187
0188 class Sigma2gg2gg : public Sigma2Process {
0189
0190 public:
0191
0192
0193 Sigma2gg2gg() : sigTS(), sigUS(), sigTU(), sigSum(), sigma() {}
0194
0195
0196 virtual void sigmaKin();
0197
0198
0199 virtual double sigmaHat() {return sigma;}
0200
0201
0202 virtual void setIdColAcol();
0203
0204
0205 virtual string name() const {return "g g -> g g";}
0206 virtual int code() const {return 111;}
0207 virtual string inFlux() const {return "gg";}
0208
0209 private:
0210
0211
0212 double sigTS, sigUS, sigTU, sigSum, sigma;
0213
0214 };
0215
0216
0217
0218
0219
0220 class Sigma2gg2qqbar : public Sigma2Process {
0221
0222 public:
0223
0224
0225 Sigma2gg2qqbar() : nQuarkNew(), idNew(), mNew(), m2New(), sigTS(), sigUS(),
0226 sigSum(), sigma() {}
0227
0228
0229 virtual void initProc();
0230
0231
0232 virtual void sigmaKin();
0233
0234
0235 virtual double sigmaHat() {return sigma;}
0236
0237
0238 virtual void setIdColAcol();
0239
0240
0241 virtual string name() const {return "g g -> q qbar (uds)";}
0242 virtual int code() const {return 112;}
0243 virtual string inFlux() const {return "gg";}
0244
0245 private:
0246
0247
0248 int nQuarkNew;
0249
0250
0251 int idNew;
0252 double mNew, m2New, sigTS, sigUS, sigSum, sigma;
0253
0254 };
0255
0256
0257
0258
0259
0260
0261 class Sigma2qg2qg : public Sigma2Process {
0262
0263 public:
0264
0265
0266 Sigma2qg2qg() : sigTS(), sigTU(), sigSum(), sigma() {}
0267
0268
0269 virtual void sigmaKin();
0270
0271
0272 virtual double sigmaHat() {return sigma;}
0273
0274
0275 virtual void setIdColAcol();
0276
0277
0278 virtual string name() const {return "q g -> q g";}
0279 virtual int code() const {return 113;}
0280 virtual string inFlux() const {return "qg";}
0281
0282 private:
0283
0284
0285 double sigTS, sigTU, sigSum, sigma;
0286
0287 };
0288
0289
0290
0291
0292
0293
0294 class Sigma2qq2qq : public Sigma2Process {
0295
0296 public:
0297
0298
0299 Sigma2qq2qq() : sigT(), sigU(), sigTU(), sigST(), sigSum() {}
0300
0301
0302 virtual void sigmaKin();
0303
0304
0305 virtual double sigmaHat();
0306
0307
0308 virtual void setIdColAcol();
0309
0310
0311 virtual string name() const {return "q q(bar)' -> q q(bar)'";}
0312 virtual int code() const {return 114;}
0313 virtual string inFlux() const {return "qq";}
0314
0315 private:
0316
0317
0318 double sigT, sigU, sigTU, sigST, sigSum;
0319
0320 };
0321
0322
0323
0324
0325
0326 class Sigma2qqbar2gg : public Sigma2Process {
0327
0328 public:
0329
0330
0331 Sigma2qqbar2gg() : sigTS(), sigUS(), sigSum(), sigma() {}
0332
0333
0334 virtual void sigmaKin();
0335
0336
0337 virtual double sigmaHat() {return sigma;}
0338
0339
0340 virtual void setIdColAcol();
0341
0342
0343 virtual string name() const {return "q qbar -> g g";}
0344 virtual int code() const {return 115;}
0345 virtual string inFlux() const {return "qqbarSame";}
0346
0347 private:
0348
0349
0350 double sigTS, sigUS, sigSum, sigma;
0351
0352 };
0353
0354
0355
0356
0357
0358 class Sigma2qqbar2qqbarNew : public Sigma2Process {
0359
0360 public:
0361
0362
0363 Sigma2qqbar2qqbarNew() : nQuarkNew(), idNew(), mNew(), m2New(), sigS(),
0364 sigma() {}
0365
0366
0367 virtual void initProc();
0368
0369
0370 virtual void sigmaKin();
0371
0372
0373 virtual double sigmaHat() {return sigma;}
0374
0375
0376 virtual void setIdColAcol();
0377
0378
0379 virtual string name() const {return "q qbar -> q' qbar' (uds)";}
0380 virtual int code() const {return 116;}
0381 virtual string inFlux() const {return "qqbarSame";}
0382
0383 private:
0384
0385
0386 int nQuarkNew;
0387
0388
0389 int idNew;
0390 double mNew, m2New, sigS, sigma;
0391
0392 };
0393
0394
0395
0396
0397
0398
0399 class TopThreshold {
0400
0401 public:
0402
0403
0404 TopThreshold() {}
0405 ~TopThreshold() {}
0406
0407
0408 void setup( int topModelIn, double mtIn, double gammatIn,
0409 double thresholdWidthIn, double singletFracIn,
0410 int alphasOrder, double alphasValue);
0411
0412
0413 double multiplySigmaBy( bool inInit, double mHat, double m3, double m4,
0414 double eThr);
0415
0416
0417 double imGreenSin(double eNow, double mtNow);
0418
0419
0420 double imGreenOct(double eNow, double mtNow);
0421
0422 private:
0423
0424
0425 int topModel;
0426 double mt, gammat, thrWidth, singletFrac, alps;
0427
0428
0429 AlphaStrong alphas;
0430
0431 };
0432
0433
0434
0435
0436
0437 class Sigma2gg2QQbar : public Sigma2Process {
0438
0439 public:
0440
0441
0442 Sigma2gg2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn),
0443 sigTS(), sigUS(), sigSum(), sigma(), openFracPair() {}
0444
0445
0446 virtual void initProc();
0447
0448
0449 virtual void sigmaKin();
0450
0451
0452 virtual double sigmaHat() {return sigma;}
0453
0454
0455 virtual void setIdColAcol();
0456
0457
0458 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
0459
0460
0461 virtual string name() const {return nameSave;}
0462 virtual int code() const {return codeSave;}
0463 virtual string inFlux() const {return "gg";}
0464 virtual int id3Mass() const {return idNew;}
0465 virtual int id4Mass() const {return idNew;}
0466
0467 private:
0468
0469
0470 int idNew, codeSave, topModel;
0471 string nameSave;
0472 double sigTS, sigUS, sigSum, sigma, openFracPair, ggSingletFrac;
0473
0474
0475 TopThreshold topThreshold;
0476
0477 };
0478
0479
0480
0481
0482
0483 class Sigma2qqbar2QQbar : public Sigma2Process {
0484
0485 public:
0486
0487
0488 Sigma2qqbar2QQbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn),
0489 sigma(), openFracPair() {}
0490
0491
0492 virtual void initProc();
0493
0494
0495 virtual void sigmaKin();
0496
0497
0498 virtual double sigmaHat() {return sigma;}
0499
0500
0501 virtual void setIdColAcol();
0502
0503
0504 virtual double weightDecay( Event& process, int iResBeg, int iResEnd);
0505
0506
0507 virtual string name() const {return nameSave;}
0508 virtual int code() const {return codeSave;}
0509 virtual string inFlux() const {return "qqbarSame";}
0510 virtual int id3Mass() const {return idNew;}
0511 virtual int id4Mass() const {return idNew;}
0512
0513 private:
0514
0515
0516 int idNew, codeSave, topModel;
0517 string nameSave;
0518 double sigma, openFracPair, qqSingletFrac;
0519
0520
0521 TopThreshold topThreshold;
0522
0523 };
0524
0525
0526
0527
0528
0529 class Sigma3gg2ggg : public Sigma3Process {
0530
0531 public:
0532
0533
0534 Sigma3gg2ggg() : sigma(), pp() {}
0535
0536
0537 virtual void sigmaKin();
0538
0539
0540 virtual double sigmaHat() {return sigma;}
0541
0542
0543 virtual void setIdColAcol();
0544
0545
0546 virtual string name() const {return "g g -> g g g";}
0547 virtual int code() const {return 131;}
0548 virtual int nFinal() const {return 3;}
0549 virtual string inFlux() const {return "gg";}
0550 virtual bool isQCD3body() const {return true;}
0551
0552 private:
0553
0554
0555 double sigma;
0556
0557
0558 double pp[6][6];
0559 double cycle(int i1, int i2, int i3, int i4, int i5) {return
0560 pp[i1][i2] * pp[i2][i3] * pp[i3][i4] * pp[i4][i5] * pp[i5][i1];}
0561
0562 };
0563
0564
0565
0566
0567
0568 class Sigma3qqbar2ggg : public Sigma3Process {
0569
0570 public:
0571
0572
0573 Sigma3qqbar2ggg() : config(), a(), b(), pp(), ab(), sigma() {}
0574
0575
0576 virtual void sigmaKin();
0577
0578
0579 virtual double sigmaHat() {return sigma;}
0580
0581
0582 virtual void setIdColAcol();
0583
0584
0585 virtual string name() const {return "q qbar -> g g g";}
0586 virtual int code() const {return 132;}
0587 virtual int nFinal() const {return 3;}
0588 virtual string inFlux() const {return "qqbarSame";}
0589 virtual bool isQCD3body() const {return true;}
0590
0591 protected:
0592
0593
0594 int config;
0595 inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
0596 inline void mapFinal();
0597
0598
0599 inline double m2Calc();
0600
0601
0602 Vec4 pCM[5];
0603
0604
0605 double a[3], b[3], pp[3][3], ab[3][3];
0606
0607
0608 double sigma;
0609
0610 };
0611
0612
0613
0614
0615
0616
0617 class Sigma3qg2qgg : public Sigma3qqbar2ggg {
0618
0619 public:
0620
0621
0622 Sigma3qg2qgg() : sigma() {}
0623
0624
0625 virtual void sigmaKin();
0626
0627
0628 virtual double sigmaHat();
0629
0630
0631 virtual void setIdColAcol();
0632
0633
0634 virtual string name() const {return "q g -> q g g";}
0635 virtual int code() const {return 133;}
0636 virtual int nFinal() const {return 3;}
0637 virtual string inFlux() const {return "qg";}
0638 virtual bool isQCD3body() const {return true;}
0639
0640 private:
0641
0642
0643 double sigma[2];
0644
0645 };
0646
0647
0648
0649
0650
0651
0652 class Sigma3gg2qqbarg : public Sigma3qqbar2ggg {
0653
0654 public:
0655
0656
0657 Sigma3gg2qqbarg() : nQuarkNew() {}
0658
0659
0660 virtual void initProc();
0661
0662
0663 virtual void sigmaKin();
0664
0665
0666 virtual void setIdColAcol();
0667
0668
0669 virtual string name() const {return "g g -> q qbar g";}
0670 virtual int code() const {return 138;}
0671 virtual int nFinal() const {return 3;}
0672 virtual string inFlux() const {return "gg";}
0673 virtual bool isQCD3body() const {return true;}
0674
0675 private:
0676
0677
0678 int nQuarkNew;
0679
0680 };
0681
0682
0683
0684
0685
0686 class Sigma3qq2qqgDiff : public Sigma3Process {
0687
0688 public:
0689
0690
0691 Sigma3qq2qqgDiff() : config(), s(), t(), u(), sp(), tp(), up(), sigma() {}
0692
0693
0694 virtual void sigmaKin();
0695
0696
0697 virtual double sigmaHat();
0698
0699
0700 virtual void setIdColAcol();
0701
0702
0703 virtual string name() const
0704 {return "q(bar) q(bar)' -> q(bar) q(bar)' g";}
0705 virtual int code() const {return 134;}
0706 virtual int nFinal() const {return 3;}
0707 virtual string inFlux() const {return "qq";}
0708 virtual bool isQCD3body() const {return true;}
0709
0710 protected:
0711
0712
0713 int config;
0714 inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
0715 inline void mapFinal();
0716
0717
0718 inline double m2Calc();
0719
0720
0721 Vec4 pCM[5];
0722
0723
0724 double s, t, u, sp, tp, up;
0725
0726
0727 double sigma;
0728
0729 };
0730
0731
0732
0733
0734
0735
0736 class Sigma3qqbar2qqbargDiff : public Sigma3qq2qqgDiff {
0737
0738 public:
0739
0740
0741 Sigma3qqbar2qqbargDiff() : nQuarkNew() {}
0742
0743
0744 virtual void initProc();
0745
0746
0747 virtual void sigmaKin();
0748
0749
0750 virtual double sigmaHat() {return sigma;}
0751
0752
0753 virtual void setIdColAcol();
0754
0755
0756 virtual string name() const {return "q qbar -> q' qbar' g";}
0757 virtual int code() const {return 136;}
0758 virtual int nFinal() const {return 3;}
0759 virtual string inFlux() const {return "qqbarSame";}
0760 virtual bool isQCD3body() const {return true;}
0761
0762 private:
0763
0764
0765 int nQuarkNew;
0766
0767 };
0768
0769
0770
0771
0772
0773
0774 class Sigma3qg2qqqbarDiff : public Sigma3qq2qqgDiff {
0775
0776 public:
0777
0778
0779 Sigma3qg2qqqbarDiff() : nQuarkNew(), sigma() {}
0780
0781
0782 virtual void initProc();
0783
0784
0785 virtual void sigmaKin();
0786
0787
0788 virtual double sigmaHat();
0789
0790
0791 virtual void setIdColAcol();
0792
0793
0794 virtual string name() const {return "q g -> q q' qbar'";}
0795 virtual int code() const {return 139;}
0796 virtual int nFinal() const {return 3;}
0797 virtual string inFlux() const {return "qg";}
0798 virtual bool isQCD3body() const {return true;}
0799
0800 private:
0801
0802
0803 int nQuarkNew;
0804
0805
0806 double sigma[2];
0807
0808 };
0809
0810
0811
0812
0813
0814 class Sigma3qq2qqgSame : public Sigma3Process {
0815
0816 public:
0817
0818
0819 Sigma3qq2qqgSame() : config(), s(), t(), u(), sp(), tp(), up(), ssp(),
0820 ttp(), uup(), s_sp(), t_tp(), u_up(), sigma() {}
0821
0822
0823 virtual void sigmaKin();
0824
0825
0826 virtual double sigmaHat();
0827
0828
0829 virtual void setIdColAcol();
0830
0831
0832 virtual string name() const
0833 {return "q(bar) q(bar) -> q(bar) q(bar) g";}
0834 virtual int code() const {return 135;}
0835 virtual int nFinal() const {return 3;}
0836 virtual string inFlux() const {return "qq";}
0837 virtual bool isQCD3body() const {return true;}
0838
0839 protected:
0840
0841
0842 int config;
0843 inline void pickFinal() { config = int( 6 * rndmPtr->flat() ); }
0844 inline void mapFinal();
0845
0846
0847 inline double m2Calc();
0848
0849
0850 Vec4 pCM[5];
0851
0852
0853 double s, t, u, sp, tp, up;
0854 double ssp, ttp, uup, s_sp, t_tp, u_up;
0855
0856
0857 double sigma;
0858
0859 };
0860
0861
0862
0863
0864
0865
0866 class Sigma3qqbar2qqbargSame : public Sigma3qq2qqgSame {
0867
0868 public:
0869
0870
0871 Sigma3qqbar2qqbargSame() {}
0872
0873
0874 virtual void sigmaKin();
0875
0876
0877 virtual double sigmaHat() {return sigma;}
0878
0879
0880 virtual void setIdColAcol();
0881
0882
0883 virtual string name() const {return "q qbar -> q qbar g";}
0884 virtual int code() const {return 137;}
0885 virtual int nFinal() const {return 3;}
0886 virtual string inFlux() const {return "qqbarSame";}
0887 virtual bool isQCD3body() const {return true;}
0888
0889 private:
0890
0891 };
0892
0893
0894
0895
0896
0897
0898 class Sigma3qg2qqqbarSame : public Sigma3qq2qqgSame {
0899
0900 public:
0901
0902
0903 Sigma3qg2qqqbarSame() : sigma() {}
0904
0905
0906 virtual void sigmaKin();
0907
0908
0909 virtual double sigmaHat();
0910
0911
0912 virtual void setIdColAcol();
0913
0914
0915 virtual string name() const {return "q g -> q q qbar";}
0916 virtual int code() const {return 140;}
0917 virtual int nFinal() const {return 3;}
0918 virtual string inFlux() const {return "qg";}
0919 virtual bool isQCD3body() const {return true;}
0920
0921 private:
0922
0923
0924 double sigma[2];
0925
0926 };
0927
0928
0929
0930 }
0931
0932 #endif