StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TGenAcceptance.cxx
1 
2 #include "TGenAcceptance.h"
3 #include "TLorentzVector.h"
4 
5 ClassImp(TGenAcceptance);
6 
8 
9 TGenAcceptance::TGenAcceptance(const char *name, const char *title)
10  :TGenerator(name, title)
11 {
12  //
13  // Standard Constructor
14  //
15 
16  // Reset Bits
17 
18  ResetBit(kPtRange);
19  ResetBit(kEtaRange);
20  ResetBit(kYRange);
21  ResetBit(kPRange);
22  ResetBit(kThetaRange);
23  ResetBit(kPhiRange);
24 }
25 
27 Bool_t TGenAcceptance::CheckPtYPhi(Float_t p[3]) const
28 {
29  //
30  //
31  //
32 
33  return CheckPtYPhi(p[0], p[1], p[2]);
34 }
35 
37 
38 Bool_t TGenAcceptance::CheckPtYPhi(Float_t pt, Float_t y, Float_t phi) const
39 {
40  //
41  // Check bounds of Pt, Rapidity and Azimuthal Angle of a track
42  //
43 
44  if ( TestBit(kPtRange) && ( pt < fPtCutMin || pt > fPtCutMax )) return kFALSE;
45  if ( TestBit(kPhiRange) && ( phi < fPhiCutMin || phi > fPhiCutMax )) return kFALSE;
46  if ( TestBit(kYRange) && ( y < fYCutMin || y > fYCutMax )) return kFALSE;
47 
48  return kTRUE;
49 }
50 
52 
53 Bool_t TGenAcceptance::CheckPXYZ(Float_t p[3]) const
54 {
55  //
56  //
57  //
58 
59  return CheckPXYZ(p[0], p[1], p[2]);
60 }
61 
63 
64 Bool_t TGenAcceptance::CheckPXYZ(Float_t px, Float_t py, Float_t pz) const
65 {
66  //
67  // Check bounds of a total momentum, pseudo-rapidity and theta of a track
68  //
69 
70 
71  //if ( TestBit(kThetaRange) ) {
72  //
73  // theta = TMath::ATan2( TMath::Sqrt(px*px + py*py), pz);
74  // if ( theta < fThetaCutMin || theta > fThetaCutMax ) return kFALSE;
75  //}
76 
77  if ( TestBit(kEtaRange)) {
78 
79  Float_t theta = TMath::ATan2( TMath::Sqrt(px*px + py*py), pz);
80  Double_t eta = - TMath::Log(TMath::Tan(theta/2));
81  if ( eta < fEtaCutMin || eta > fEtaCutMax) return kFALSE;
82  }
83 
84  if ( TestBit(kPRange) ) {
85 
86  Double_t p2 = px*px + py*py + pz*pz;
87  if ( p2 < fPCutMin*fPCutMin || p2 > fPCutMax*fPCutMax) return kFALSE;
88  }
89 
90  return kTRUE;
91 }
92 
94 
95 Bool_t TGenAcceptance::CheckCuts(TLorentzVector *v) const
96 {
97  //
98  //
99  //
100 
101  if (TestBit(kPtRange) && ( v->Pt() < fPtCutMin || v->Pt() > fPtCutMax )) return kFALSE;
102  if (TestBit(kEtaRange) && (v->Eta() < fEtaCutMin || v->Eta() > fEtaCutMax)) return kFALSE;
103  if (TestBit(kYRange) && (v->Rapidity() < fYCutMin || v->Rapidity() > fYCutMax)) return kFALSE;
104  if (TestBit(kPRange) && (v->P() < fPCutMin || v->P() > fPCutMax)) return kFALSE;
105  //if (TestBit(kThetaRange) && (v->Theta() < fThetaCutMin || v->Theta() > fThetaCutMax)) return kFALSE;
106  if (TestBit(kPhiRange) && (v->Phi() < fPhiCutMin || v->Phi() > fPhiCutMax)) return kFALSE;
107 
108  return kTRUE;
109 }
110 
112 
113 void TGenAcceptance::SetPtRange(Float_t lowPt, Float_t highPt)
114 {
115  //
116  //
117 
118  const char *fName = "SetPtRange";
119  const char *msg[2] = {
120  "%s transverse momentum [%f GeV/c] negative",
121  "Minimum transverse momentum greater than Maximum"
122  };
123 
124  if (lowPt < 0) Error(fName, msg[0], "Minimum", lowPt);
125  if (highPt < 0) Error(fName, msg[0], "Maximum", highPt);
126  if (lowPt >= highPt) Error(fName, msg[1]);
127 
128  SetBit(kPtRange);
129  fPtCutMin = lowPt;
130  fPtCutMax = highPt;
131 }
132 
134 
135 void TGenAcceptance::SetEtaRange(Float_t lowEta, Float_t highEta)
136 {
137  //
138  //
139 
140  const char *fName = "SetEtaRange";
141  const char *msg = "Minimum Eta greater than Maximum";
142 
143  if (lowEta >= highEta) Error(fName, msg);
144 
145  SetBit(kEtaRange);
146  fEtaCutMin = lowEta;
147  fEtaCutMax = highEta;
148 }
149 
151 
152 void TGenAcceptance::SetYRange(Float_t lowY, Float_t highY)
153 {
154  //
155  //
156 
157  const char *fName = "SetYRange";
158  const char *msg = "Minumum Rapidity greater that Maximum";
159 
160  if (lowY >= highY) Error(fName, msg);
161 
162  SetBit(kYRange);
163  fYCutMin = lowY;
164  fYCutMax = highY;
165 }
166 
168 
169 void TGenAcceptance::SetThetaRange(Float_t lowTheta, Float_t highTheta)
170 {
171  //
172  //
173 
174  const char *fName = "SetThetaRange";
175  const char *msg[2] = {
176  "%s Theta [ %f deg] out of scope 0-180 deg.",
177  "Minumum Theta greater than Maximum Theta"
178  };
179 
180  if (lowTheta < 0 || lowTheta > 180) Error(fName, msg[0], "Minimum", lowTheta);
181  if (highTheta < 0 || highTheta > 180) Error(fName, msg[0], "Maximum", lowTheta);
182  if (lowTheta >= highTheta) Error(fName,msg[1]);
183 
184  Float_t lowEta = - TMath::Log(TMath::Tan(lowTheta/2));
185  Float_t highEta = - TMath::Log(TMath::Tan(highTheta/2));
186 
187  SetEtaRange(lowEta, highEta);
188 
189  //SetBit(kThetaRange);
190  //fThetaCutMin = lowTheta * TMath::Pi() / 180;
191  //fThetaCutMax = highTheta * TMath::Pi() / 180;
192 }
193 
195 
196 void TGenAcceptance::SetPhiRange(Float_t lowPhi, Float_t highPhi)
197 {
198  //
199  //
200 
201  SetBit(kPhiRange);
202  fPhiCutMin = lowPhi * TMath::Pi() / 180;
203  fPhiCutMax = highPhi * TMath::Pi() / 180;
204 }
205 
207 void TGenAcceptance::SetMomentumRange(Float_t lowP, Float_t highP)
208 {
209  //
210  //
211  //
212 
213  const char *fName = "SetMomentumRange";
214  const char *msg = "Minimum momentum greater that Maximum";
215 
216  if (lowP > highP) Error(fName, msg);
217 
218  SetBit(kPRange);
219  fPCutMin = lowP;
220  fPCutMax = highP;
221 }
222 
223 
Definition: FJcore.h:367