ATLAS Offline Software
Loading...
Searching...
No Matches
Sigma2qqbar2lStarlStarBar.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5// Double excited lepton production
6
8
9#include <iostream>
10#include <vector>
11
12namespace Pythia8 {
20}
21
22// This one line registers this process with the factory
23// An instance of this process can be created with
24// UserProcessFactory::create("qqbar2lStarlStarBar")
31
32namespace Pythia8 {
33
34 //**************************************************************************
35
36 // Sigma2qqbar2lStarlStarBar class.
37 // Cross section for q qbar -> lStar lStarBar
38
39 // A derived class for q qbar -> lStar lStarBar
40
41 class Sigma2qqbar2lStarlStarBar: public Sigma2Process {
42
43 public:
44 //Constructor.
45 Sigma2qqbar2lStarlStarBar(int idlIn) : idl(idlIn),
46 idRes(0), codeSave(0),
47 Lambda(0.), preFac(0.), openFracPos(0.), openFracNeg(0.), sigma(0.),
48 m2ResTimes4(0.){};
49
50 // Initialize process.
51
52 void initProc() {
53
54 // Set up process properties from the chosen lepton flavour.
55 idRes = 4000000 + idl;
56 codeSave = 4040 + idl;
57 if (idl == 11) nameSave = "q qbar -> e^*+- e^*-+";
58 else if (idl == 12) nameSave = "q qbar -> nu_e^* nu_e^*bar";
59 else if (idl == 13) nameSave = "q qbar -> mu^*+- mu^*-+";
60 else if (idl == 14) nameSave = "q qbar -> nu_mu^* nu_mu^*bar";
61 else if (idl == 15) nameSave = "q qbar -> tau^*+- tau^*-+";
62 else nameSave = "q qbar -> nu_tau^* nu_tau^*bar";
63
64 // Secondary open width fractions.
65 openFracPos = particleDataPtr->resOpenFrac( idRes);
66 openFracNeg = particleDataPtr->resOpenFrac(-idRes);
67
68 // Locally stored properties and couplings.
69 Lambda = settingsPtr->parm("ExcitedFermion:Lambda");
70 preFac = (M_PI / pow4(Lambda)) * (openFracPos + openFracNeg) / 9.;
71
72 double mRes = particleDataPtr->m0(idRes);
73 m2ResTimes4 = mRes*mRes*4.;
74 }
75
76 //*********
77
78 // Evaluate sigmaHat(sHat).
79 virtual double sigmaHat() {return sigma;}
80
81 // Evaluate sigmaHat(sHat), part independent of incoming flavour.
82
83 void sigmaKin() {
84
85 // use assumption that sigma is multiplied later with sH*(1-s3/sH)
86
87 //sigma = preFac * sqrtpos( 1.- m2ResTimes4/sH );
88 sigma = preFac * sqrtpos( 1.- 4.*s3/sH );
89
90 }
91
92 //*********
93
94 // Select identity, colour and anticolour.
95
96 void setIdColAcol() {
97
98 // Flavours: both lepton and antilepton are excited.
99 setId( id1, id2, idRes, -idRes);
100 //if (id1 < 0) swapTU = true; // OI how is this used?
101
102 // Colour flow trivial.
103 if (id1 > 0) setColAcol( 1, 0, 0, 1, 0, 0, 0, 0);
104 else setColAcol( 0, 1, 1, 0, 0, 0, 0, 0);
105
106 }
107
108 //**************************************************************************
109
110 double weightDecay( Event& process, int iResBeg,
111 int iResEnd) {
112
113 // l* should sit in entry 5. and 6 Sequential Z/W decay assumed isotropic.
114 if (iResBeg != 5 && iResEnd != 5 && iResBeg != 6 && iResEnd != 6 ) return 1.;
115
116 // Phase space factors.
117 double mr1 = pow2(process[7].m() / process[5].m());
118 double mr2 = pow2(process[8].m() / process[5].m());
119
120 // Reconstruct decay angle in l* CoM frame.
121 int idAbs3 = process[7].idAbs();
122 Vec4 pLStarCom = (idAbs3 < 20) ? process[8].p() : process[7].p();
123 pLStarCom.bstback(process[5].p());
124 double cosThe = costheta(pLStarCom, process[5].p());
125 double wt = 1.;
126
127 // Decay, l* -> l + gamma/Z^0/W^+-).
128 int idBoson = (idAbs3 < 20) ? process[8].idAbs() : process[7].idAbs();
129 if (idBoson == 22) {
130 wt = 0.5 * (1. + cosThe);
131 } else if (idBoson == 23 || idBoson == 24) {
132 double mrB = (idAbs3 < 20) ? mr2 : mr1;
133 double kTrm = 0.5 * (mrB * (1. - cosThe));
134 wt = (1. + cosThe + kTrm) / (2 + mrB);
135 }
136
137 // Done.
138 return wt;
139 }
140
141 // Info on the subprocess.
142 virtual std::string name() const {return nameSave;}
143 virtual int code() const {return codeSave;}
144 virtual std::string inFlux() const {return "qqbarSame";}
145 virtual int id3Mass() const {return std::abs(idRes);}
146 virtual int id4Mass() const {return std::abs(idRes);}
147
148 virtual bool convertM2() const {return false;} //true is only suitable for resonance production pp->A->ll
149 virtual bool convert2mb() const {return true;}
150
151 // Parameters set at initialization or for current kinematics.
153 std::string nameSave;
156 };
157
158
159 //**************************************************************************
180
185
186}
#define M_PI
HWIdentifier id2
Pythia8_UserProcess::UserProcessFactory::Creator< Pythia8::Sigma2qqbar2nutauStarnutauStarBar > qqbar2nutauStarlnutautarBarCreator("qqbar2nutauStarnutauStarBar")
Pythia8_UserProcess::UserProcessFactory::Creator< Pythia8::Sigma2qqbar2muStarmuStarBar > qqbar2muStarlmutarBarCreator("qqbar2muStarmuStarBar")
Pythia8_UserProcess::UserProcessFactory::Creator< Pythia8::Sigma2qqbar2eStareStarBar > qqbar2eStarletarBarCreator("qqbar2eStareStarBar")
Pythia8_UserProcess::UserProcessFactory::Creator< Pythia8::Sigma2qqbar2tauStartauStarBar > qqbar2tauStarltautarBarCreator("qqbar2tauStartauStarBar")
Pythia8_UserProcess::UserProcessFactory::Creator< Pythia8::Sigma2qqbar2numuStarnumuStarBar > qqbar2numuStarlnumutarBarCreator("qqbar2numuStarnumuStarBar")
Pythia8_UserProcess::UserProcessFactory::Creator< Pythia8::Sigma2qqbar2nueStarnueStarBar > qqbar2nueStarlnuetarBarCreator("qqbar2nueStarnueStarBar")
static const std::map< unsigned int, unsigned int > pow2
double weightDecay(Event &process, int iResBeg, int iResEnd)
const std::string process
Author: James Monk (jmonk@cern.ch)