Update to pythi8.170
[u/mrichter/AliRoot.git] / PYTHIA8 / pythia8170 / include / SusyResonanceWidths.h
1 // SusyResonanceWidths.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2012 Torbjorn Sjostrand
3 // Main author of this file: N. Desai
4 // PYTHIA is licenced under the GNU GPL version 2, see COPYING for details.
5 // Please respect the MCnet Guidelines, see GUIDELINES for details.
6
7 // Header file for resonance properties: dynamical widths etc. 
8 // SusyResonanceWidths: base class for all SUSY resonances.
9
10 #ifndef Pythia8_SusyResonanceWidths_H
11 #define Pythia8_SusyResonanceWidths_H
12
13 #include "ResonanceWidths.h"
14 #include "SusyCouplings.h"
15
16 namespace Pythia8 {
17
18 class ParticleData;
19
20 //==========================================================================
21
22 class WidthFunction {
23
24 public:
25
26   // Constructor and destructor.
27   WidthFunction() { };
28   virtual ~WidthFunction() { };
29
30   void init( ParticleData* particleDataPtrIn, CoupSUSY* coupSUSYPtrIn);
31
32   virtual void setInternal(int idResIn, int id1In, int id2In, int id3In, 
33     int idIntIn, int) {setInternal2(idResIn, id1In, id2In, id3In, idIntIn);}
34
35   virtual double function(double m12);
36   virtual double function(double m12, double m23);
37   
38 protected:
39
40   void setInternal2(int idResIn, int id1In, int id2In, int id3In, int idIntIn);
41
42   ParticleData* particleDataPtr;
43   CoupSUSY* coupSUSYPtr;
44   int id1,id2,id3;
45
46   // Variables for 3-body decays
47   double mRes, mInt, gammaInt, m1,m2,m3;
48   int idRes, idInt,iSq,iQ,iX;
49   bool isSqDown;
50
51 };
52
53 //==========================================================================
54
55 class Psi: public WidthFunction {
56
57 public:
58
59   // Destructor.
60   virtual ~Psi() { };
61
62   virtual void setInternal(int idResIn, int id1In, int id2In, int id3In, 
63     int idIntIn, int);
64   virtual double function(double m12);
65
66 };
67
68 //==========================================================================
69
70 class Upsilon: public WidthFunction {
71
72 public:
73
74   // Destructor.
75   virtual ~Upsilon() { };
76
77   virtual void setInternal(int idResIn, int id1In, int id2In, int id3In, 
78     int idIntIn, int idInt2);
79   virtual double function(double m12);
80
81 protected:
82
83   int iSq2, idInt2;
84   double mInt2, gammaInt2;
85
86 };
87
88 //==========================================================================
89
90 class Phi: public WidthFunction {
91
92 public:
93
94   // Destructor.
95   virtual ~Phi() { };
96
97   virtual void setInternal(int idResIn, int id1In, int id2In, int id3In, 
98     int idIntIn, int idInt2);
99   virtual double function(double m12sqIn);
100
101 protected:
102
103   int iSq2, idInt2;
104   double mInt2, gammaInt2, m12sq;
105
106 private:
107
108   double function2(double m23sq);
109   double integrateGauss(double m23min, double m23max, double tol);
110
111 };
112
113 //==========================================================================
114
115 class SUSYResonanceWidths : public ResonanceWidths{
116
117 public:
118
119   SUSYResonanceWidths() {}
120
121   // Return particle type
122   int typeNeut(int idPDG);
123   int typeChar(int idPDG); 
124
125 protected:
126
127   virtual bool init(Info* infoPtrIn, Settings* settingsPtrIn,
128             ParticleData* particleDataPtrIn, Couplings* couplingsPtrIn);
129
130   // Gaussian integrator
131   double integrateGauss( WidthFunction* widthFn, double, double, double);
132   
133   // SUSY couplings
134   CoupSUSY* coupSUSYPtr;
135   
136   static const bool DEBUG;
137
138 };
139
140 //==========================================================================
141
142 // The ResonanceSquark class handles the Squark resonances.
143
144 class ResonanceSquark : public SUSYResonanceWidths {
145
146 public:
147
148   // Constructor. 
149   ResonanceSquark(int idResIn) {initBasic(idResIn);} 
150
151 private: 
152
153   // Locally stored properties and couplings.
154
155   // Initialize constants.
156   virtual void initConstants(); 
157  
158   // Calculate various common prefactors for the current mass.
159   virtual void calcPreFac(bool = false);
160
161   // Caclulate width for currently considered channel.
162   virtual void calcWidth(bool calledFromInit = false);
163
164   double s2W;
165
166 };
167   
168 //==========================================================================
169
170 // The ResonanceGluino class handles the Gluino resonances.
171
172 class ResonanceGluino : public SUSYResonanceWidths {
173
174 public:
175
176   // Constructor. 
177   ResonanceGluino(int idResIn) {initBasic(idResIn);} 
178
179 private: 
180
181   // Locally stored properties and couplings.
182  
183   // Initialize constants.
184   virtual void initConstants(); 
185  
186   // Calculate various common prefactors for the current mass.
187   virtual void calcPreFac(bool = false);
188
189   // Caclulate width for currently considered channel.
190   virtual void calcWidth(bool calledFromInit = false);
191   
192 };
193   
194 //==========================================================================
195
196 // The ResonanceNeut class handles the Neutralino resonances.
197
198 class ResonanceNeut : public SUSYResonanceWidths {
199
200 public:
201
202   // Constructor. 
203   ResonanceNeut(int idResIn) {initBasic(idResIn);} 
204
205 private: 
206
207   // Locally stored properties and couplings.
208   double kinFac2;
209
210   // Initialize constants.
211   virtual void initConstants(); 
212  
213   // Calculate various common prefactors for the current mass.
214   virtual void calcPreFac(bool = false);
215
216   // Caclulate width for currently considered channel.
217   virtual void calcWidth(bool calledFromInit = false);
218
219   double s2W;
220
221   // Functions for 3-body decays
222   Psi psi;
223   Phi phi;
224   Upsilon upsil;
225
226 };
227   
228 //==========================================================================
229
230 // The ResonanceChar class handles the Chargino resonances.
231
232 class ResonanceChar : public SUSYResonanceWidths {
233
234 public:
235
236   // Constructor. 
237   ResonanceChar(int idResIn) {initBasic(idResIn);} 
238
239 private: 
240
241   // Locally stored properties and couplings.
242   double kinFac2;
243
244   // Initialize constants.
245   virtual void initConstants(); 
246  
247   // Calculate various common prefactors for the current mass.
248   virtual void calcPreFac(bool = false);
249
250   // Caclulate width for currently considered channel.
251   virtual void calcWidth(bool calledFromInit = false);
252
253   double s2W;
254
255   //Functions for 3-body decays
256   Psi psi;
257   Phi phi;
258   Upsilon upsil;
259
260 };
261   
262 //==========================================================================
263
264 // The ResonanceSlepton class handles the Slepton/Sneutrino resonances.
265
266 class ResonanceSlepton : public SUSYResonanceWidths {
267
268 public:
269
270   // Constructor. 
271   ResonanceSlepton(int idResIn) {initBasic(idResIn);} 
272
273 private: 
274
275   // Locally stored properties and couplings.
276
277   // Initialize constants.
278   virtual void initConstants(); 
279  
280   // Calculate various common prefactors for the current mass.
281   virtual void calcPreFac(bool = false);
282
283   // Calculate width for currently considered channel.
284   virtual void calcWidth(bool calledFromInit = false);
285
286   double s2W;
287
288 };
289   
290 //==========================================================================
291
292 } // end namespace Pythia8
293
294 #endif // end Pythia8_SusyResonanceWidths_H