source: HiSusy/trunk/Pythia8/pythia8170/include/SigmaEW.h @ 1

Last change on this file since 1 was 1, checked in by zerwas, 11 years ago

first import of structure, PYTHIA8 and DELPHES

File size: 26.3 KB
Line 
1// SigmaEW.h is a part of the PYTHIA event generator.
2// Copyright (C) 2012 Torbjorn Sjostrand.
3// PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
4// Please respect the MCnet Guidelines, see GUIDELINES for details.
5
6// Header file for electroweak process differential cross sections.
7// Contains classes derived from SigmaProcess via Sigma(1/2)Process.
8
9#ifndef Pythia8_SigmaEW_H
10#define Pythia8_SigmaEW_H
11
12#include "PythiaComplex.h"
13#include "SigmaProcess.h"
14
15namespace Pythia8 {
16
17 
18//==========================================================================
19
20// A derived class for q g -> q gamma (q = u, d, s, c, b).
21// Use massless approximation also for Q since no alternative.
22
23class Sigma2qg2qgamma : public Sigma2Process {
24
25public:
26
27  // Constructor.
28  Sigma2qg2qgamma() {}
29
30  // Calculate flavour-independent parts of cross section.
31  virtual void sigmaKin();
32
33  // Evaluate d(sigmaHat)/d(tHat).
34  virtual double sigmaHat();
35
36  // Select flavour, colour and anticolour.
37  virtual void setIdColAcol();
38
39  // Info on the subprocess.
40  virtual string name()   const {return "q g -> q gamma (udscb)";}
41  virtual int    code()   const {return 201;}
42  virtual string inFlux() const {return "qg";}
43
44private:
45
46  // Values stored for later use.
47  double mNew, m2New, sigUS, sigma0;
48
49};
50 
51//==========================================================================
52
53// A derived class for q qbar -> g gamma.
54
55class Sigma2qqbar2ggamma : public Sigma2Process {
56
57public:
58
59  // Constructor.
60  Sigma2qqbar2ggamma() {}
61
62  // Calculate flavour-independent parts of cross section.
63  virtual void sigmaKin();
64
65  // Evaluate d(sigmaHat)/d(tHat).
66  virtual double sigmaHat();
67
68  // Select flavour, colour and anticolour.
69  virtual void setIdColAcol();
70
71  // Info on the subprocess.
72  virtual string name()   const {return "q qbar -> g gamma";}
73  virtual int    code()   const {return 202;}
74  virtual string inFlux() const {return "qqbarSame";}
75
76private:
77
78  // Values stored for later use.
79  double sigma0;
80
81};
82 
83//==========================================================================
84
85// A derived class for g g -> g gamma.
86
87class Sigma2gg2ggamma : public Sigma2Process {
88
89public:
90
91  // Constructor.
92  Sigma2gg2ggamma() {}
93
94  // Initialize process.
95  virtual void initProc(); 
96
97  // Calculate flavour-independent parts of cross section.
98  virtual void sigmaKin();
99
100  // Evaluate d(sigmaHat)/d(tHat).
101  virtual double sigmaHat() {return sigma;}
102
103  // Select flavour, colour and anticolour.
104  virtual void setIdColAcol();
105
106  // Info on the subprocess.
107  virtual string name()   const {return "g g -> g gamma";}
108  virtual int    code()   const {return 203;}
109  virtual string inFlux() const {return "gg";}
110
111private:
112
113  // Values stored for later use. 
114  double chargeSum, sigma;
115
116};
117 
118//==========================================================================
119
120// A derived class for f fbar -> gamma gamma.
121
122class Sigma2ffbar2gammagamma : public Sigma2Process {
123
124public:
125
126  // Constructor.
127  Sigma2ffbar2gammagamma() {}
128
129  // Calculate flavour-independent parts of cross section.
130  virtual void sigmaKin();
131
132  // Evaluate d(sigmaHat)/d(tHat).
133  virtual double sigmaHat();
134
135  // Select flavour, colour and anticolour.
136  virtual void setIdColAcol();
137
138  // Info on the subprocess.
139  virtual string name()   const {return "f fbar -> gamma gamma";}
140  virtual int    code()   const {return 204;}
141  virtual string inFlux() const {return "ffbarSame";}
142
143private:
144
145  // Values stored for later use.
146  double sigTU, sigma0;
147
148};
149 
150//==========================================================================
151
152// A derived class for g g -> gamma gamma.
153
154class Sigma2gg2gammagamma : public Sigma2Process {
155
156public:
157
158  // Constructor.
159  Sigma2gg2gammagamma() {}
160
161  // Initialize process.
162  virtual void initProc(); 
163
164  // Calculate flavour-independent parts of cross section.
165  virtual void sigmaKin();
166
167  // Evaluate d(sigmaHat)/d(tHat).
168  virtual double sigmaHat() {return sigma;}
169
170  // Select flavour, colour and anticolour.
171  virtual void setIdColAcol();
172
173  // Info on the subprocess.
174  virtual string name()   const {return "g g -> gamma gamma";}
175  virtual int    code()   const {return 205;}
176  virtual string inFlux() const {return "gg";}
177
178private:
179 
180  double charge2Sum, sigma;
181
182};
183 
184//==========================================================================
185
186// A derived class for f f' -> f f' via t-channel gamma*/Z0 exchange.
187
188class Sigma2ff2fftgmZ : public Sigma2Process {
189
190public:
191
192  // Constructor.
193  Sigma2ff2fftgmZ() {}
194
195  // Initialize process.
196  virtual void initProc(); 
197
198  // Calculate flavour-independent parts of cross section.
199  virtual void sigmaKin();
200
201  // Evaluate sigmaHat(sHat).
202  virtual double sigmaHat();
203
204  // Select flavour, colour and anticolour.
205  virtual void setIdColAcol();
206
207  // Info on the subprocess.
208  virtual string name()   const {return "f f' -> f f' (t-channel gamma*/Z0)";}
209  virtual int    code()   const {return 211;}
210  virtual string inFlux() const {return "ff";}
211
212private:
213
214  //  Z parameters for propagator.
215  int    gmZmode;
216  double mZ, mZS, thetaWRat, sigmagmgm, sigmagmZ, sigmaZZ;
217
218};
219 
220//==========================================================================
221
222// A derived class for f_1 f_2 -> f_3 f_4 via t-channel W+- exchange.
223
224class Sigma2ff2fftW : public Sigma2Process {
225
226public:
227
228  // Constructor.
229  Sigma2ff2fftW() {}
230
231  // Initialize process.
232  virtual void initProc(); 
233
234  // Calculate flavour-independent parts of cross section.
235  virtual void sigmaKin();
236
237  // Evaluate sigmaHat(sHat).
238  virtual double sigmaHat();
239
240  // Select flavour, colour and anticolour.
241  virtual void setIdColAcol();
242
243  // Info on the subprocess.
244  virtual string name()   const {return "f_1 f_2 -> f_3 f_4 (t-channel W+-)";}
245  virtual int    code()   const {return 212;}
246  virtual string inFlux() const {return "ff";}
247
248private:
249
250  //  W parameters for propagator.
251  double mW, mWS, thetaWRat, sigma0;
252
253};
254 
255//==========================================================================
256
257// A derived class for q q' -> Q q" via t-channel W+- exchange.
258// Related to Sigma2ff2fftW class, but with massive matrix elements.
259
260class Sigma2qq2QqtW : public Sigma2Process {
261
262public:
263
264  // Constructor.
265  Sigma2qq2QqtW(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn) {}
266
267  // Initialize process.
268  virtual void initProc(); 
269
270  // Calculate flavour-independent parts of cross section.
271  virtual void sigmaKin();
272
273  // Evaluate sigmaHat(sHat).
274  virtual double sigmaHat();
275
276  // Select flavour, colour and anticolour.
277  virtual void setIdColAcol();
278
279  // Evaluate weight for W decay angles in top decay (else inactive).
280  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
281
282  // Info on the subprocess.
283  virtual string name()    const {return nameSave;}
284  virtual int    code()    const {return codeSave;}
285  virtual string inFlux()  const {return "ff";}
286  virtual int    id3Mass() const {return idNew;}
287
288private:
289
290  // Values stored for process type. W parameters for propagator.
291  int    idNew, codeSave;
292  string nameSave;
293  double mW, mWS, thetaWRat, sigma0, openFracPos, openFracNeg;
294
295};
296 
297//==========================================================================
298
299// A derived class for f fbar -> gamma*/Z0.
300
301class Sigma1ffbar2gmZ : public Sigma1Process {
302
303public:
304
305  // Constructor.
306  Sigma1ffbar2gmZ() {}
307
308  // Initialize process.
309  virtual void initProc(); 
310
311  // Calculate flavour-independent parts of cross section.
312  virtual void sigmaKin();
313
314  // Evaluate sigmaHat(sHat).
315  virtual double sigmaHat();
316
317  // Select flavour, colour and anticolour.
318  virtual void setIdColAcol();
319
320  // Evaluate weight for Z decay angle.
321  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
322
323  // Info on the subprocess.
324  virtual string name()       const {return "f fbar -> gamma*/Z0";}
325  virtual int    code()       const {return 221;}
326  virtual string inFlux()     const {return "ffbarSame";}
327  virtual int    resonanceA() const {return 23;}
328
329private:
330
331  // Parameters set at initialization or for each new event.
332  int    gmZmode;
333  double mRes, GammaRes, m2Res, GamMRat, thetaWRat, 
334         gamSum, intSum, resSum, gamProp, intProp, resProp;
335
336  // Pointer to properties of the particle species, to access decay channels.
337  ParticleDataEntry* particlePtr;
338
339};
340 
341//==========================================================================
342
343// A derived class for f fbar' -> W+-.
344
345class Sigma1ffbar2W : public Sigma1Process {
346
347public:
348
349  // Constructor.
350  Sigma1ffbar2W() {}
351
352  // Initialize process.
353  virtual void initProc(); 
354
355  // Calculate flavour-independent parts of cross section.
356  virtual void sigmaKin();
357
358  // Evaluate sigmaHat(sHat).
359  virtual double sigmaHat();
360
361  // Select flavour, colour and anticolour.
362  virtual void setIdColAcol();
363
364  // Evaluate weight for W decay angle.
365  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
366
367  // Info on the subprocess.
368  virtual string name()       const {return "f fbar' -> W+-";}
369  virtual int    code()       const {return 222;}
370  virtual string inFlux()     const {return "ffbarChg";}
371  virtual int    resonanceA() const {return 24;}
372
373private:
374
375  // Parameters set at initialization.
376  double mRes, GammaRes, m2Res, GamMRat, thetaWRat, sigma0Pos, sigma0Neg;
377
378  // Pointer to properties of the particle species, to access decay channels.
379  ParticleDataEntry* particlePtr;
380
381};
382
383//==========================================================================
384
385// A derived class for f fbar -> gamma* -> f' fbar', summed over light f'.
386// Allows pT-ordered evolution for multiparton interactions.
387
388class Sigma2ffbar2ffbarsgm : public Sigma2Process {
389
390public:
391
392  // Constructor.
393  Sigma2ffbar2ffbarsgm() {}
394
395  // Calculate flavour-independent parts of cross section.
396  virtual void sigmaKin();
397
398  // Evaluate sigmaHat(sHat).
399  virtual double sigmaHat();
400
401  // Select flavour, colour and anticolour.
402  virtual void setIdColAcol();
403
404  // Info on the subprocess.
405  virtual string name()       const {
406    return "f fbar -> f' fbar' (s-channel gamma*)";}
407  virtual int    code()       const {return 223;}
408  virtual string inFlux()     const {return "ffbarSame";}
409  virtual bool   isSChannel() const {return true;}
410
411private:
412
413  // Values stored for later use.
414  int    idNew;
415  double sigma0;
416
417};
418
419//==========================================================================
420
421// A derived class for f fbar -> gamma*/Z0 -> F Fbar, for one heavy F.
422// Allows pT cuts as for other 2 -> 2 processes.
423
424class Sigma2ffbar2FFbarsgmZ : public Sigma2Process {
425
426public:
427
428  // Constructor.
429  Sigma2ffbar2FFbarsgmZ(int idIn, int codeIn) : idNew(idIn), 
430    codeSave(codeIn) {}
431
432  // Initialize process.
433  virtual void initProc(); 
434
435  // Calculate flavour-independent parts of cross section.
436  virtual void sigmaKin();
437
438  // Evaluate sigmaHat(sHat).
439  virtual double sigmaHat();
440
441  // Select flavour, colour and anticolour.
442  virtual void setIdColAcol();
443
444  // Evaluate weight for W decay angles in top decay (else inactive).
445  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
446
447  // Info on the subprocess.
448  virtual string name()       const {return nameSave;}
449  virtual int    code()       const {return codeSave;}
450  virtual string inFlux()     const {return "ffbarSame";}
451  virtual bool   isSChannel() const {return true;}
452  virtual int    id3Mass()    const {return idNew;}
453  virtual int    id4Mass()    const {return idNew;}
454  virtual int    resonanceA() const {return 23;}
455
456private:
457
458  // Values stored for process type. Z parameters for propagator.
459  int    idNew, codeSave, gmZmode;
460  string nameSave;
461  bool   isPhysical;
462  double ef, vf, af, mRes, GammaRes, m2Res, GamMRat, thetaWRat,
463         mr, betaf, cosThe, gamProp, intProp, resProp, openFracPair; 
464
465};
466
467//==========================================================================
468
469// A derived class for f fbar' -> W+- -> F fbar", for one or two heavy F.
470// Allows pT cuts as for other 2 -> 2 processes.
471
472class Sigma2ffbar2FfbarsW : public Sigma2Process {
473
474public:
475
476  // Constructor.
477  Sigma2ffbar2FfbarsW(int idIn, int idIn2, int codeIn) : idNew(idIn), 
478    idNew2(idIn2), codeSave(codeIn) {}
479
480  // Initialize process.
481  virtual void initProc(); 
482
483  // Calculate flavour-independent parts of cross section.
484  virtual void sigmaKin();
485
486  // Evaluate sigmaHat(sHat).
487  virtual double sigmaHat();
488
489  // Select flavour, colour and anticolour.
490  virtual void setIdColAcol();
491
492  // Evaluate weight for W decay angles in top decay (else inactive).
493  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
494
495  // Info on the subprocess.
496  virtual string name()       const {return nameSave;}
497  virtual int    code()       const {return codeSave;}
498  virtual string inFlux()     const {return "ffbarChg";}
499  virtual bool   isSChannel() const {return true;}
500  virtual int    id3Mass()    const {return idNew;}
501  virtual int    id4Mass()    const {return idPartner;}
502  virtual int    resonanceA() const {return 24;}
503
504private:
505
506  // Values stored for process type. W parameters for propagator.
507  int    idNew, idNew2, codeSave, idPartner;
508  string nameSave;
509  bool   isPhysical;
510  double V2New, mRes, GammaRes, m2Res, GamMRat, thetaWRat, sigma0,
511         openFracPos, openFracNeg; 
512
513};
514 
515//==========================================================================
516
517// An intermediate class for f fbar -> gamma*/Z0/W+- gamma*/Z0/W-+.
518
519class Sigma2ffbargmZWgmZW : public Sigma2Process {
520
521public:
522
523  // Constructor.
524  Sigma2ffbargmZWgmZW() {}
525
526protected:
527
528  // Internal products.
529  Vec4    pRot[7];
530  complex hA[7][7];
531  complex hC[7][7];
532
533  // Calculate and store internal products.
534  void setupProd( Event& process, int i1, int i2, int i3, int i4, 
535    int i5, int i6);   
536
537  // Evaluate the F function of Gunion and Kunszt.
538  complex fGK(int i1, int i2, int i3, int i4, int i5, int i6); 
539
540  // Evaluate the Xi function of Gunion and Kunszt.
541  double xiGK( double tHnow, double uHnow);
542
543  // Evaluate the Xj function of Gunion and Kunszt.
544  double xjGK( double tHnow, double uHnow);
545
546private:
547
548};
549 
550//==========================================================================
551
552// A derived class for f fbar -> gamma*/Z0 gamma*/Z0.
553
554class Sigma2ffbar2gmZgmZ : public Sigma2ffbargmZWgmZW {
555
556public:
557
558  // Constructor.
559  Sigma2ffbar2gmZgmZ() {}
560
561  // Initialize process.
562  virtual void initProc(); 
563
564  // Calculate flavour-independent parts of cross section.
565  virtual void sigmaKin();
566
567  // Evaluate d(sigmaHat)/d(tHat).
568  virtual double sigmaHat();
569
570  // Select flavour, colour and anticolour.
571  virtual void setIdColAcol();
572
573  // Evaluate weight for simultaneous flavour choices.
574  virtual double weightDecayFlav( Event& process); 
575
576  // Evaluate weight for decay angles of the two gamma*/Z0.
577  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
578
579  // Info on the subprocess.
580  virtual string name()    const {return "f fbar -> gamma*/Z0 gamma*/Z0";}
581  virtual int    code()    const {return 231;}
582  virtual string inFlux()  const {return "ffbarSame";}
583  virtual int    id3Mass() const {return 23;}
584  virtual int    id4Mass() const {return 23;}
585
586private:
587
588  // Parameters set at initialization or for each new event.
589  int    gmZmode, i1, i2, i3, i4, i5, i6;
590  double mRes, GammaRes, m2Res, GamMRat, thetaWRat, sigma0, 
591         gamSum3, intSum3, resSum3, gamProp3, intProp3, resProp3,
592         gamSum4, intSum4, resSum4, gamProp4, intProp4, resProp4,
593         c3LL, c3LR, c3RL, c3RR, c4LL, c4LR, c4RL, c4RR, flavWt;
594
595  // Pointer to properties of the particle species, to access decay channels.
596  ParticleDataEntry* particlePtr;
597
598};
599 
600//==========================================================================
601
602// A derived class for f fbar' -> Z0 W+-. (Here pure Z0, unfortunately.)
603
604class Sigma2ffbar2ZW : public Sigma2ffbargmZWgmZW {
605
606public:
607
608  // Constructor.
609  Sigma2ffbar2ZW() {}
610
611  // Initialize process.
612  virtual void initProc(); 
613
614  // Calculate flavour-independent parts of cross section.
615  virtual void sigmaKin();
616
617  // Evaluate d(sigmaHat)/d(tHat).
618  virtual double sigmaHat();
619
620  // Select flavour, colour and anticolour.
621  virtual void setIdColAcol();
622
623  // Evaluate weight for Z0 and W+- decay angles.
624  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
625
626  // Info on the subprocess.
627  virtual string name()       const {return "f fbar' -> Z0 W+- (no gamma*!)";}
628  virtual int    code()       const {return 232;}
629  virtual string inFlux()     const {return "ffbarChg";}
630  virtual int    id3Mass()    const {return 23;}
631  virtual int    id4Mass()    const {return 24;}
632  virtual int    resonanceA() const {return 24;}
633
634private:
635
636  // Store W+- mass and width, and couplings.
637  double mW, widW, mWS, mwWS, sin2thetaW, cos2thetaW, thetaWRat, cotT,
638         thetaWpt, thetaWmm, lun, lde, sigma0, openFracPos, openFracNeg;
639
640};
641 
642//==========================================================================
643
644// A derived class for f fbar -> W+ W-.
645
646class Sigma2ffbar2WW : public Sigma2ffbargmZWgmZW {
647
648public:
649
650  // Constructor.
651  Sigma2ffbar2WW() {}
652
653  // Initialize process.
654  virtual void initProc(); 
655
656  // Calculate flavour-independent parts of cross section.
657  virtual void sigmaKin();
658
659  // Evaluate d(sigmaHat)/d(tHat).
660  virtual double sigmaHat();
661
662  // Select flavour, colour and anticolour.
663  virtual void setIdColAcol();
664
665  // Evaluate weight for W+ and W- decay angles.
666  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
667
668  // Info on the subprocess.
669  virtual string name()       const {return "f fbar -> W+ W-";}
670  virtual int    code()       const {return 233;}
671  virtual string inFlux()     const {return "ffbarSame";}
672  virtual int    id3Mass()    const {return 24;}
673  virtual int    id4Mass()    const {return -24;}
674  virtual int    resonanceA() const {return 23;}
675
676private:
677
678  // Store Z0 mass and width.
679  double mZ, widZ, mZS, mwZS, thetaWRat, sigma0, cgg, cgZ, cZZ, cfg, 
680    cfZ, cff, gSS, gTT, gST, gUU, gSU, openFracPair;
681
682};
683 
684//==========================================================================
685
686// An intermediate class for f fbar -> gamma*/Z0 g/gamma and permutations.
687
688class Sigma2ffbargmZggm : public Sigma2Process {
689
690public:
691
692  // Constructor.
693  Sigma2ffbargmZggm() {}
694
695  // Initialize process.
696  virtual void initProc(); 
697
698  // Evaluate weight for gamma&/Z0 decay angle.
699  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
700
701protected:
702
703  // Parameters set at initialization or for each new event.
704  int    gmZmode;
705  double mRes, GammaRes, m2Res, GamMRat, thetaWRat, 
706         gamSum, intSum, resSum, gamProp, intProp, resProp;
707
708  // Evaluate current sum of flavour couplings times phase space.
709  void flavSum(); 
710
711  // Evaluate current propagator terms of cross section.
712  void propTerm(); 
713
714private:
715
716  // Pointer to properties of the particle species, to access decay channels.
717  ParticleDataEntry* particlePtr;
718
719};
720 
721//==========================================================================
722
723// A derived class for q qbar -> gamma*/Z0 g.
724
725class Sigma2qqbar2gmZg : public Sigma2ffbargmZggm {
726
727public:
728
729  // Constructor.
730  Sigma2qqbar2gmZg() {}
731
732  // Calculate flavour-independent parts of cross section.
733  virtual void sigmaKin();
734
735  // Evaluate d(sigmaHat)/d(tHat).
736  virtual double sigmaHat();
737
738  // Select flavour, colour and anticolour.
739  virtual void setIdColAcol();
740
741  // Info on the subprocess.
742  virtual string name()    const {return "q qbar -> gamma*/Z0 g";}
743  virtual int    code()    const {return 241;}
744  virtual string inFlux()  const {return "qqbarSame";}
745  virtual int    id3Mass() const {return 23;}
746
747private:
748
749  // Values stored for later use.
750  double sigma0;
751
752};
753 
754//==========================================================================
755
756// A derived class for q g -> gamma*/Z0 q.
757
758class Sigma2qg2gmZq : public Sigma2ffbargmZggm {
759
760public:
761
762  // Constructor.
763  Sigma2qg2gmZq() {}
764
765  // Calculate flavour-independent parts of cross section.
766  virtual void sigmaKin();
767
768  // Evaluate d(sigmaHat)/d(tHat).
769  virtual double sigmaHat();
770
771  // Select flavour, colour and anticolour.
772  virtual void setIdColAcol();
773
774  // Info on the subprocess.
775  virtual string name()    const {return "q g-> gamma*/Z0 q";}
776  virtual int    code()    const {return 242;}
777  virtual string inFlux()  const {return "qg";}
778  virtual int    id3Mass() const {return 23;}
779
780private:
781
782  // Values stored for later use.
783  double sigma0;
784
785};
786 
787//==========================================================================
788
789// A derived class for f fbar' -> gamma*/Z0 gamma.
790
791class Sigma2ffbar2gmZgm : public Sigma2ffbargmZggm {
792
793public:
794
795  // Constructor.
796  Sigma2ffbar2gmZgm() {}
797
798  // Calculate flavour-independent parts of cross section.
799  virtual void sigmaKin();
800
801  // Evaluate d(sigmaHat)/d(tHat).
802  virtual double sigmaHat();
803
804  // Select flavour, colour and anticolour.
805  virtual void setIdColAcol();
806
807  // Info on the subprocess.
808  virtual string name()    const {return "f fbar -> gamma*/Z0 gamma";}
809  virtual int    code()    const {return 243;}
810  virtual string inFlux()  const {return "ffbarSame";}
811  virtual int    id3Mass() const {return 23;}
812
813private:
814
815  // Values stored for later use.
816  double sigma0;
817
818};
819 
820//==========================================================================
821
822// A derived class for f gamma -> gamma*/Z0 f.
823
824class Sigma2fgm2gmZf : public Sigma2ffbargmZggm {
825
826public:
827
828  // Constructor.
829  Sigma2fgm2gmZf() {}
830
831  // Calculate flavour-independent parts of cross section.
832  virtual void sigmaKin();
833
834  // Evaluate d(sigmaHat)/d(tHat).
835  virtual double sigmaHat();
836
837  // Select flavour, colour and anticolour.
838  virtual void setIdColAcol();
839
840  // Info on the subprocess.
841  virtual string name()    const {return "f gamma -> gamma*/Z0 f";}
842  virtual int    code()    const {return 244;}
843  virtual string inFlux()  const {return "fgm";}
844  virtual int    id3Mass() const {return 23;}
845
846private:
847
848  // Values stored for later use.
849  double sigma0;
850
851};
852 
853//==========================================================================
854
855// An intermediate class for f fbar -> W+- g/gamma and permutations.
856
857class Sigma2ffbarWggm : public Sigma2Process {
858
859public:
860
861  // Constructor.
862  Sigma2ffbarWggm() {}
863
864  // Evaluate weight for gamma&/Z0 decay angle.
865  virtual double weightDecay( Event& process, int iResBeg, int iResEnd); 
866
867private:
868
869};
870 
871//==========================================================================
872
873// A derived class for q qbar' -> W+- g.
874
875class Sigma2qqbar2Wg : public Sigma2ffbarWggm {
876
877public:
878
879  // Constructor.
880  Sigma2qqbar2Wg() {}
881
882  // Initialize process.
883  virtual void initProc(); 
884
885  // Calculate flavour-independent parts of cross section.
886  virtual void sigmaKin();
887
888  // Evaluate d(sigmaHat)/d(tHat).
889  virtual double sigmaHat();
890
891  // Select flavour, colour and anticolour.
892  virtual void setIdColAcol();
893
894  // Info on the subprocess.
895  virtual string name()    const {return "q qbar' -> W+- g";}
896  virtual int    code()    const {return 251;}
897  virtual string inFlux()  const {return "ffbarChg";}
898  virtual int    id3Mass() const {return 24;}
899
900private:
901
902  // Values stored for later use.
903  double sigma0, openFracPos, openFracNeg;
904
905};
906 
907//==========================================================================
908
909// A derived class for q g -> W+- q'.
910
911class Sigma2qg2Wq : public Sigma2ffbarWggm {
912
913public:
914
915  // Constructor.
916  Sigma2qg2Wq() {}
917
918  // Initialize process.
919  virtual void initProc(); 
920
921  // Calculate flavour-independent parts of cross section.
922  virtual void sigmaKin();
923
924  // Evaluate d(sigmaHat)/d(tHat).
925  virtual double sigmaHat();
926
927  // Select flavour, colour and anticolour.
928  virtual void setIdColAcol();
929
930  // Info on the subprocess.
931  virtual string name()    const {return "q g-> W+- q'";}
932  virtual int    code()    const {return 252;}
933  virtual string inFlux()  const {return "qg";}
934  virtual int    id3Mass() const {return 24;}
935
936private:
937
938  // Values stored for later use.
939  double sigma0, openFracPos, openFracNeg;
940
941};
942 
943//==========================================================================
944
945// A derived class for f fbar' -> W+- gamma.
946
947class Sigma2ffbar2Wgm : public Sigma2ffbarWggm {
948
949public:
950
951  // Constructor.
952  Sigma2ffbar2Wgm() {}
953
954  // Initialize process.
955  virtual void initProc(); 
956
957  // Calculate flavour-independent parts of cross section.
958  virtual void sigmaKin();
959
960  // Evaluate d(sigmaHat)/d(tHat).
961  virtual double sigmaHat();
962
963  // Select flavour, colour and anticolour.
964  virtual void setIdColAcol();
965
966  // Info on the subprocess.
967  virtual string name()    const {return "f fbar' -> W+- gamma";}
968  virtual int    code()    const {return 253;}
969  virtual string inFlux()  const {return "ffbarChg";}
970  virtual int    id3Mass() const {return 24;}
971
972private:
973
974  // Values stored for later use.
975  double sigma0, openFracPos, openFracNeg;
976
977};
978 
979//==========================================================================
980
981// A derived class for f gamma -> W+- f'.
982
983class Sigma2fgm2Wf : public Sigma2ffbarWggm {
984
985public:
986
987  // Constructor.
988  Sigma2fgm2Wf() {}
989
990  // Initialize process.
991  virtual void initProc(); 
992
993  // Calculate flavour-independent parts of cross section.
994  virtual void sigmaKin();
995
996  // Evaluate d(sigmaHat)/d(tHat).
997  virtual double sigmaHat();
998
999  // Select flavour, colour and anticolour.
1000  virtual void setIdColAcol();
1001
1002  // Info on the subprocess.
1003  virtual string name()    const {return "f gamma -> W+- f'";}
1004  virtual int    code()    const {return 254;}
1005  virtual string inFlux()  const {return "fgm";}
1006  virtual int    id3Mass() const {return 24;}
1007
1008private:
1009
1010  // Values stored for later use.
1011  double sigma0, openFracPos, openFracNeg;
1012
1013};
1014//==========================================================================
1015
1016// A derived class for gamma gamma -> f fbar.
1017
1018class Sigma2gmgm2ffbar : public Sigma2Process {
1019
1020public:
1021
1022  // Constructor.
1023  Sigma2gmgm2ffbar(int idIn, int codeIn) : idNew(idIn), codeSave(codeIn) {}
1024
1025  // Initialize process.
1026  virtual void initProc();
1027
1028  // Calculate flavour-independent parts of cross section.
1029  virtual void sigmaKin();
1030
1031  // Evaluate d(sigmaHat)/d(tHat).
1032  virtual double sigmaHat() {return sigma;}
1033
1034  // Select flavour, colour and anticolour.
1035  virtual void setIdColAcol();
1036
1037  // Info on the subprocess.
1038  virtual string name()    const {return nameSave;}
1039  virtual int    code()    const {return codeSave;}
1040  virtual string inFlux()  const {return "gmgm";}
1041  virtual int    id3Mass() const {return idMass;}
1042  virtual int    id4Mass() const {return idMass;}
1043
1044private:
1045
1046  // Member variables.
1047  int    idNew, codeSave, idMass, idNow;
1048  string nameSave;
1049  double ef4, s34Avg, sigTU, sigma, openFracPair;
1050
1051};
1052 
1053//==========================================================================
1054
1055} // end namespace Pythia8
1056
1057#endif // Pythia8_SigmaEW_H
Note: See TracBrowser for help on using the repository browser.