Pluto v6.3.0
Loading...
Searching...
No Matches
PData.h
Go to the documentation of this file.
1// Author: M.A. Kagarlis
2// Written: 31.01.99
3// Revised: 23.7.2007 IF
4// PData Class Header
5
6#ifndef _PDATA_H_
7#define _PDATA_H_
8
9#include "TROOT.h"
10#include "TMath.h"
11#include <iostream>
12#include "PStaticData.h"
13
14using namespace std;
15
16class PData : public TObject {
17
18 public:
19
20 static void SetWeightVersion(Int_t i) {
21 //PData::WeightVersion = i;
22 *(makeStaticData()->GetBatchValue("_system_weight_version"))
23 = (Double_t) i;
24 }
25
26 void SetUnstableWidth(Double_t m) {
27 *(makeStaticData()->GetBatchValue("_system_unstable_width")) = m;
28 };
29
30
31
32 static double LMass(const int &id) {
33 // lower mass limit, by particle pid
34
35 Double_t *mass;
36
37 if (makeDataBase()->GetParamDouble ((char*)"pid", id, (char*)"lmass", &mass)) {
38 return *mass;
39 }
40
41 if ( makeStaticData()->GetParticleTotalWidth(id) < 1.e-3 ) {
42 // (quasi)stable
43 return 0.999*makeStaticData()->GetParticleMass(id);
44 }
45// else if ( id==41 ) return 2.*PMass[8]; // rho0
46 else if (id == 41) // rho0
47 return 2.*makeStaticData()->GetParticleMass(2);
48 else if (id == 42 || id == 43) // rho+,rho-
51 else if (id == 52) // omega
52 return 2.*makeStaticData()->GetParticleMass(2);
53 else if (id == 55) // phi
54 return 3.*makeStaticData()->GetParticleMass(2);
55 else if (makeStaticData()->GetParticleBaryon(id)) // resonance
56 return makeStaticData()->GetParticleMass(14);
57 else if (makeStaticData()->GetParticleTotalWidth(id) > 0.01)
58 return TMath::Max(0., 0.999*(makeStaticData()->GetParticleMass(id)-
59 5.*makeStaticData()->GetParticleTotalWidth(id)));
60 else
61 return TMath::Max(0., 0.999*(makeStaticData()->GetParticleMass(id)-
62 15.*makeStaticData()->GetParticleTotalWidth(id)));
63 }
64
65 static double LMass(const char *id) {
66 // lower mass limit, by name
67 return LMass(makeStaticData()->IsParticleValid(id));
68 }
69
70 static double UMass(const int &id) {
71 // upper mass limit, by particle pid
72
73 Double_t *mass;
74 if (makeDataBase()->GetParamDouble ((char*)"pid", id, (char*)"umass", &mass)) return *mass;
75
76 if (id==50 || makeStaticData()->IsParticle(id,"dilepton")) // dilepton
77 return 1.e10;
78 else if (makeStaticData()->GetParticleTotalWidth(id) < 1.e-3) // (quasi)stable
79 return 1.001*makeStaticData()->GetParticleMass(id);
80 // else return makeStaticData()->GetParticleMass(id)+1.; // just go 1 GeV above pole
81 else return makeStaticData()->GetParticleMass(id)
82 +10.*makeStaticData()->GetParticleTotalWidth(id); //better in units of sigma
83 }
84
85
86 static double UMass(const char * id) {
87 // upper mass limit, by name
88 return UMass(makeStaticData()->IsParticleValid(id));
89 }
90
91
92
93public:
94
95
96 static int IsDelta(const int &id) {
97 // check if id corresponds to a Delta
98 return (id == makeStaticData()->GetParticleID("D++")||
99 id == makeStaticData()->GetParticleID("D+") ||
100 id == makeStaticData()->GetParticleID("D0") ||
101 id == makeStaticData()->GetParticleID("D-"));
102 }
103
104 static int IsN1535(const int &id) {
105 // check if id corresponds to a S11(1535) resonance
106 return (id == makeStaticData()->GetParticleID("NS11+")||
107 id == makeStaticData()->GetParticleID("NS110"));
108 }
109
110 static int IsPi(const int &id) {
111 // check if id corresponds to a pion
112 return (id == makeStaticData()->GetParticleID("pi0")||
113 id == makeStaticData()->GetParticleID("pi+")||
114 id == makeStaticData()->GetParticleID("pi-"));
115 }
116
117 static int IsN(const int &id) {
118 // check if id corresponds to a nucleon
119 return (id == makeStaticData()->GetParticleID("p")||
120 id == makeStaticData()->GetParticleID("n")); }
121
122 static int IsRho(const int &id) {
123 // check if id corresponds to a rho meson
124 return (id == makeStaticData()->GetParticleID("rho0")||
125 id == makeStaticData()->GetParticleID("rho+")||
126 id == makeStaticData()->GetParticleID("rho-"));
127 }
128
129 static int IsNPiPi(const int &i1, const int &i2, const int &i3) {
130 // checks if i1+i2+i3 are N+pi+pi
131 return ((IsN(i1) && IsPi(i2) && IsPi(i3))||
132 (IsN(i2) && IsPi(i1) && IsPi(i3))||
133 (IsN(i3) && IsPi(i1) && IsPi(i2)));
134 }
135
136 static int IsDalitz(const int &id, const int &i1, const int &i2) {
137 // checks if the decay id->i1+i2 is a known Dalitz decay
138 int eeg =
139 (makeStaticData()->IsParticle(i1,"dilepton") &&
140 makeStaticData()->IsParticle(i2,"g")) ||
141 (makeStaticData()->IsParticle(i1,"g") &&
142 makeStaticData()->IsParticle(i2,"dilepton")); // e+e-gamma?
143 int mumug =
144 (makeStaticData()->IsParticle(i1,"dimuon") &&
145 makeStaticData()->IsParticle(i2,"g")) ||
146 (makeStaticData()->IsParticle(i1,"g") &&
147 makeStaticData()->IsParticle(i2,"dimuon")); // mu+mu-gamma?
148 int eepi =
149 (makeStaticData()->IsParticle(i1,"dilepton") &&
150 makeStaticData()->IsParticle(i2,"pi0")) ||
151 (makeStaticData()->IsParticle(i1,"pi0") &&
152 makeStaticData()->IsParticle(i2,"dilepton")); // e+e-pi0?
153 int mumupi =
154 (makeStaticData()->IsParticle(i1,"dimuon") &&
155 makeStaticData()->IsParticle(i2,"pi0")) ||
156 (makeStaticData()->IsParticle(i1,"pi0") &&
157 makeStaticData()->IsParticle(i2,"dimuon")); // mu+mu-pi0?
158// int eeeta = (Is(i1,"dilepton")&&Is(i2,"eta")) || (Is(i1,"eta")&&Is(i2,"dilepton")); // e+e-eta?
159
160 int pseudo =
161 (makeStaticData()->IsParticle(id,"eta") ||
162 makeStaticData()->IsParticle(id,"eta'") ||
163 makeStaticData()->IsParticle(id,"pi0")); // pseudo-scalar meson?
164 int vector =
165 (makeStaticData()->IsParticle(id,"w") ||
166 makeStaticData()->IsParticle(id,"phi") ||
167 makeStaticData()->IsParticle(id,"J/Psi")); // vector meson?
168
169 int d = makeStaticData()->GetParticleBaryon(id) && // Baryon Dalitz decay in general?
170 ((makeStaticData()->IsParticle(i1,"dilepton") &&
173 makeStaticData()->IsParticle(i2,"dilepton")));
174
175#if 1
176 int D0 =
177 makeStaticData()->IsParticle(id,"D0") && // Delta0 Dalitz decay?
178 ((makeStaticData()->IsParticle(i1,"dilepton") &&
179 makeStaticData()->IsParticle(i2,"n")) ||
180 (makeStaticData()->IsParticle(i1,"n") &&
181 makeStaticData()->IsParticle(i2,"dilepton")));
182 int Dp =
183 makeStaticData()->IsParticle(id,"D+") && // Delta+ Dalitz decay?
184 ((makeStaticData()->IsParticle(i1,"dilepton") &&
185 makeStaticData()->IsParticle(i2,"p")) ||
186 (makeStaticData()->IsParticle(i1,"p") &&
187 makeStaticData()->IsParticle(i2,"dilepton")));
188 int D0m =
189 makeStaticData()->IsParticle(id,"D0") && // Delta0 Dalitz decay?
190 ((makeStaticData()->IsParticle(i1,"dimuon") &&
191 makeStaticData()->IsParticle(i2,"n")) ||
192 (makeStaticData()->IsParticle(i1,"n") &&
193 makeStaticData()->IsParticle(i2,"dimuon")));
194 int Dpm =
195 makeStaticData()->IsParticle(id,"D+") && // Delta+ Dalitz decay?
196 ((makeStaticData()->IsParticle(i1,"dimuon") &&
197 makeStaticData()->IsParticle(i2,"p")) ||
198 (makeStaticData()->IsParticle(i1,"p") &&
199 makeStaticData()->IsParticle(i2,"dimuon")));
200 int pn =
201 makeStaticData()->IsParticle(id,"pn") && // pn bremsstrahlung?
202 ((makeStaticData()->IsParticle(i1,"dilepton") &&
203 makeStaticData()->IsParticle(i2,"p")) ||
204 (makeStaticData()->IsParticle(i1,"p") &&
205 makeStaticData()->IsParticle(i2,"dilepton")));
206 int NS0 =
207 makeStaticData()->IsParticle(id,"NS110") && // N(1535)0 Dalitz decay?
208 ((makeStaticData()->IsParticle(i1,"dilepton") &&
209 makeStaticData()->IsParticle(i2,"n")) ||
210 (makeStaticData()->IsParticle(i1,"n") &&
211 makeStaticData()->IsParticle(i2,"dilepton")));
212 int NSp =
213 makeStaticData()->IsParticle(id,"NS11+") && // N(1535)+ Dalitz decay?
214 ((makeStaticData()->IsParticle(i1,"dilepton") &&
215 makeStaticData()->IsParticle(i2,"p")) ||
216 (makeStaticData()->IsParticle(i1,"p") &&
217 makeStaticData()->IsParticle(i2,"dilepton")));
218#endif
219
220 return (pseudo&&eeg) || (pseudo&&mumug) ||
221 (vector&&eepi) || (vector&&mumupi)
222 || D0m || Dpm || D0 || Dp || pn || NS0 || NSp || d;
223 }
224
225 static int IsDalitz(int * i) {
226 // as above, for pid array
227
228 if (!i) return 0;
229 return IsDalitz(i[0],i[1],i[2]);
230 }
231
232 static int IsDalitz(const int &idx) {
233 // checks if idx is the index of a Dalitz decay mode
234
235 int i[10];
236
237 i[0] = 2; //max 2 particles
239 if (*i != 2) return 0; // other than two products in this decay mode
240 return IsDalitz(makeStaticData()->GetDecayParent(idx), i[1], i[2]);
241 }
242
243 static int IsPseudoscalarDalitz(const int &id, const int &i1, const int &i2) {
244 // checks if the decay id->i1+i2 is a known pseudoscalar Dalitz decay
245
246 int eeg =
247 (makeStaticData()->IsParticle(i1,"dilepton") &&
248 makeStaticData()->IsParticle(i2,"g")) ||
249 (makeStaticData()->IsParticle(i1,"g") &&
250 makeStaticData()->IsParticle(i2,"dilepton")); // e+e-gamma?
251 int mumug =
252 (makeStaticData()->IsParticle(i1,"dimuon") &&
253 makeStaticData()->IsParticle(i2,"g")) ||
254 (makeStaticData()->IsParticle(i1,"g") &&
255 makeStaticData()->IsParticle(i2,"dimuon")); // mu+mu-gamma?
256
257 int pseudo =
258 (makeStaticData()->IsParticle(id,"eta") ||
259 makeStaticData()->IsParticle(id,"eta'") ||
260 makeStaticData()->IsParticle(id,"pi0")); // pseudo-scalar meson?
261
262 return (pseudo&&eeg) || (pseudo&&mumug);
263 }
264
265 static int IsPseudoscalarDalitz(int *i) {
266 // as above, for pid array
267
268 if (!i) return 0;
269 return IsPseudoscalarDalitz(i[0], i[1], i[2]);
270 }
271
272 static int IsPseudoscalarDalitz(const int &idx) {
273 // checks if idx is the index of a Dalitz decay mode
274 int i[10];
275
276 i[0]=2; //max 2 particles
277 makeStaticData()->GetDecayMode(idx, i);
278 if (*i != 2)
279 return 0; // other than two products in this decay mode
280 return
281 IsPseudoscalarDalitz(makeStaticData()->GetDecayParent(idx), i[1], i[2]);
282 }
283
284 static int IsDirectEE(const int &id, const int &i1, const int &i2) {
285 // checks if the decay id->i1+i2 is a direct vector-meson ee decay
286
287 return
288 (makeStaticData()->IsParticleMeson(id) &&
289 ((makeStaticData()->IsParticle(i1,"e+") &&
290 makeStaticData()->IsParticle(i2,"e-"))||
291 (makeStaticData()->IsParticle(i1,"e-") &&
292 makeStaticData()->IsParticle(i2,"e+"))));
293 }
294
295 static int IsDirectEE(const int &idx) {
296 // checks if idx is the index of a direct vector-meson ee decay
297 int i[10];
298 i[0] = 2; //max 2 particles
299 makeStaticData()->GetDecayMode(idx, i);
300 if (*i != 2)
301 return 0; // other than two products in this decay mode
302 return
303 IsDirectEE(makeStaticData()->GetDecayParent(idx), i[1], i[2]);
304 }
305
306 static int IsDirectMuMu(const int &id, const int &i1, const int &i2) {
307 // checks if the decay id->i1+i2 is a direct vector-meson mumu decay
308
309 return
310 (makeStaticData()->IsParticleMeson(id) &&
311 ((makeStaticData()->IsParticle(i1,"mu+") &&
312 makeStaticData()->IsParticle(i2,"mu-"))||
313 (makeStaticData()->IsParticle(i1,"mu-") &&
314 makeStaticData()->IsParticle(i2,"mu+"))));
315 }
316
317 static int IsDirectMuMu(const int &idx) {
318 // checks if idx is the index of a direct vector-meson mumu decay
319 int i[10];
320
321 i[0] = 2; //max 2 particles
322 makeStaticData()->GetDecayMode(idx, i);
323 if (*i != 2) return 0; // other than two products in this decay mode
324 return IsDirectMuMu(makeStaticData()->GetDecayParent(idx), i[1], i[2]);
325 }
326
327 // static int isWide(const int &);
328 // returns total width index
329
330 static int LPW(const int &, const int &, const int &);
331 // lowest allowed transition partial wave, for parent id --> pid = i1 & i2
332
333 static int IsMDalitz(const int &);
334 // checks if decay mode with index idx is a mesonic Dalitz decay
335
336
337 static Float_t mtIntegral(Double_t m, Float_t T) { // integral of thermal
338 // mt distribution
339 if (m<=0. || T<=0.) return 0.;
340 return T*exp(-m/T)*sqrt(m)*(1.5*T+m)
341 + 1.329340*pow((double)T,(double)2.5)*(1.-TMath::Erf(sqrt(m/T)));
342 }
343
344 ClassDef(PData, 1) //Pluto Particle Data Tool Class
345};
346
347
348class PSplash;
349R__EXTERN PSplash *gSplash;
350
351class PSplash : public TObject {
352
353 public:
354
356
357 protected:
358 ClassDef(PSplash, 0) //Pluto welcome message
359
360};
361
362#endif // _PDATA_H_
363
364
365
366
367
368
369
Float_t T
Definition NiNi_2AGeV.C:7
PDataBase * makeDataBase()
R__EXTERN PSplash * gSplash
Definition PData.h:349
PStaticData * makeStaticData()
PParticle * d
Definition PData.h:16
static int IsDalitz(int *i)
Definition PData.h:225
static int IsDirectEE(const int &idx)
Definition PData.h:295
static Float_t mtIntegral(Double_t m, Float_t T)
Definition PData.h:337
static int IsMDalitz(const int &)
static int IsPseudoscalarDalitz(const int &idx)
Definition PData.h:272
static int IsDirectEE(const int &id, const int &i1, const int &i2)
Definition PData.h:284
static int IsDalitz(const int &idx)
Definition PData.h:232
static int LPW(const int &, const int &, const int &)
void SetUnstableWidth(Double_t m)
Definition PData.h:26
static int IsDelta(const int &id)
Definition PData.h:96
static int IsPi(const int &id)
Definition PData.h:110
static int IsN(const int &id)
Definition PData.h:117
static double LMass(const char *id)
Definition PData.h:65
static void SetWeightVersion(Int_t i)
Definition PData.h:20
static double LMass(const int &id)
Definition PData.h:32
static int IsRho(const int &id)
Definition PData.h:122
static double UMass(const int &id)
Definition PData.h:70
static int IsPseudoscalarDalitz(int *i)
Definition PData.h:265
static int IsPseudoscalarDalitz(const int &id, const int &i1, const int &i2)
Definition PData.h:243
static int IsN1535(const int &id)
Definition PData.h:104
static double UMass(const char *id)
Definition PData.h:86
static int IsDirectMuMu(const int &idx)
Definition PData.h:317
static int IsDirectMuMu(const int &id, const int &i1, const int &i2)
Definition PData.h:306
static int IsDalitz(const int &id, const int &i1, const int &i2)
Definition PData.h:136
static int IsNPiPi(const int &i1, const int &i2, const int &i3)
Definition PData.h:129
int IsParticle(const int &id, const char *name)
double GetParticleMass(const int &id)
double GetParticleTotalWidth(const int &id)
Double_t * GetBatchValue(const char *name, Int_t make_val=1)
int GetParticleBaryon(const int &id)
void GetDecayMode(const int, int *n)
Double_t mass