ATLAS Offline Software
Loading...
Searching...
No Matches
ResonanceExcitedCI.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
5// The ResonanceExcited class handles excited-fermion resonances.
6// This is a copy of existing pythia ResonanceExcited class
7// with extention to include decays going via contact interactions (4-fermion vertexes)
8//
9// author Olya Igonkina, modified by James Monk for Pythia8_i
10
12
13namespace Pythia8{
15}
16
18
19namespace Pythia8{
20
21 class ResonanceExcitedCI : public ResonanceWidths {
22
23 public:
24
25 // Constructor.
26 ResonanceExcitedCI(int idResIn):
27 m_lambda(0.), m_coupF(0.), m_coupFprime(0.), m_coupFcol(0.),
28 m_sin2tW(0.), m_cos2tW(0.){
29 initBasic(idResIn); std::cout << " ResonanceExcitedCI constructor\n";
30 }
31
32 private:
33
35
36 // Locally stored properties and couplings.
37 m_lambda = settingsPtr->parm("ExcitedFermion:Lambda");
38 m_coupF = settingsPtr->parm("ExcitedFermion:coupF");
39 m_coupFprime = settingsPtr->parm("ExcitedFermion:coupFprime");
40 m_coupFcol = settingsPtr->parm("ExcitedFermion:coupFcol");
41#ifdef PYTHIA_VERSION_INTEGER
42 #if PYTHIA_VERSION_INTEGER > 8300
43 CoupSM* couplingsPtr = infoPtr->coupSMPtr;
44 #endif
45#endif
46 m_sin2tW = couplingsPtr->sin2thetaW();
47 m_cos2tW = 1. - m_sin2tW;
48
49 return;
50 }
51
52 //--------------------------------------------------------------------------
53
54 // Calculate various common prefactors for the current mass.
55
56 void calcPreFac(bool) {
57 // Common coupling factors.
58#ifdef PYTHIA_VERSION_INTEGER
59 #if PYTHIA_VERSION_INTEGER > 8300
60 CoupSM* couplingsPtr = infoPtr->coupSMPtr;
61 #endif
62#endif
63 alpEM = couplingsPtr->alphaEM(mHat * mHat);
64 alpS = couplingsPtr->alphaS(mHat * mHat);
65 preFac = pow3(mHat) / pow2(m_lambda);
66
67 return;
68 }
69
70 //--------------------------------------------------------------------------
71
72 // Calculate width for currently considered channel.
73
74 void calcWidth(bool) {
75
76 // Check that above threshold.
77 if (ps == 0.) return;
78
79 // f^* -> f g.
80 if (id1Abs == 21) widNow = preFac * alpS * pow2(m_coupFcol) / 3.;
81
82 // f^* -> f gamma.
83 else if (id1Abs == 22) {
84 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
85 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
86 double chg = chgI3 * m_coupF + chgY * m_coupFprime;
87 widNow = preFac * alpEM * pow2(chg) / 4.;
88 }
89 // f^* -> f Z^0.
90 else if (id1Abs == 23) {
91 double chgI3 = (id2Abs%2 == 0) ? 0.5 : -0.5;
92 double chgY = (id2Abs < 9) ? 1. / 6. : -0.5;
93 double chg = chgI3 * m_cos2tW * m_coupF - chgY * m_sin2tW * m_coupFprime;
94 widNow = preFac * (alpEM * pow2(chg) / (8. * m_sin2tW * m_cos2tW))
95 * ps*ps * (2. + mr1);
96 }
97
98 // f^* -> f' W^+-.
99 else if (id1Abs == 24) widNow = preFac * (alpEM * pow2(m_coupF)
100 / (16. * m_sin2tW)) * ps*ps * (2. + mr1);
101 // idxAbs are sorted according to their abs value ; use idRes
102
103 // f^* -> f f' \bar{f'}
104 else {
105 //std::cout << " hei! in ResonanceExcitedCI processing F* -> f f'f'bar decays "<< id1Abs <<" "<<id2Abs<<" "<<id3Abs<< "\n";
106
107 if( id1Abs < 17 && id2Abs < 17 && id3Abs>0 && id3Abs < 17 ){ // f* -> f f'\bar(f'} decay
108 widNow = preFac * pow2(mHat) / pow2(m_lambda) / 96. / M_PI ;
109 if( id3Abs < 10 ) widNow *= 3.; // quarks in final state. id1 is highest pdgId of f, f'
110 if( id1Abs == id2Abs && id1Abs == id3Abs ){
111 if( std::abs(idRes)-4000000 < 10 ) widNow *= 4./3.;
112 else widNow *= 2.;
113 }
114 }
115 }
116
117 return;
118 }
119
120 // Locally stored properties and couplings.
122
123 };
124}
#define M_PI
Pythia8_UserResonance::UserResonanceFactory::Creator< Pythia8::ResonanceExcitedCI > resonanceExcitedCreator("ExcitedCI")
static const std::map< unsigned int, unsigned int > pow2
Author: James Monk (jmonk@cern.ch)