]>
Commit | Line | Data |
---|---|---|
d92b41ad | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | /* $Id: AliFidutialCut.cxx 21839 2007-10-29 13:49:42Z gustavo $ */ | |
16 | ||
d92b41ad | 17 | //_________________________________________________________________________ |
18 | // Class for track/cluster acceptance selection | |
19 | // Selection in Central barrel, EMCAL and PHOS | |
20 | // | |
21 | //*-- Author: Gustavo Conesa (LNF-INFN) | |
22 | ////////////////////////////////////////////////////////////////////////////// | |
23 | ||
24 | ||
25 | // --- ROOT system --- | |
26 | #include <TMath.h> | |
27 | #include <TLorentzVector.h> | |
28 | #include <TString.h> | |
29 | //#include <TArrayF.h> | |
30 | ||
31 | //---- ANALYSIS system ---- | |
32 | #include "AliLog.h" | |
33 | #include "AliFidutialCut.h" | |
34 | ||
35 | ClassImp(AliFidutialCut) | |
36 | ||
37 | ||
38 | //____________________________________________________________________________ | |
39 | AliFidutialCut::AliFidutialCut() : | |
40 | TObject(), | |
41 | fEMCALFidutialCut(0), fPHOSFidutialCut(0), fCTSFidutialCut(0), | |
42 | fCTSFidCutMinEta(0x0),fCTSFidCutMinPhi(0x0),fCTSFidCutMaxEta(0x0), fCTSFidCutMaxPhi(0x0), | |
43 | fEMCALFidCutMinEta(0x0),fEMCALFidCutMinPhi(0x0),fEMCALFidCutMaxEta(0x0), fEMCALFidCutMaxPhi(0x0), | |
44 | fPHOSFidCutMinEta(0x0),fPHOSFidCutMinPhi(0x0),fPHOSFidCutMaxEta(0x0), fPHOSFidCutMaxPhi(0x0) | |
45 | ||
46 | { | |
47 | //Ctor | |
48 | ||
49 | //Initialize parameters | |
50 | InitParameters(); | |
51 | } | |
52 | ||
53 | //____________________________________________________________________________ | |
54 | AliFidutialCut::AliFidutialCut(const AliFidutialCut & g) : | |
55 | TObject(g), | |
56 | fEMCALFidutialCut(g.fEMCALFidutialCut), fPHOSFidutialCut(g.fPHOSFidutialCut), fCTSFidutialCut(g. fCTSFidutialCut), | |
57 | fCTSFidCutMinEta(g.fCTSFidCutMinEta?new TArrayF(*g.fCTSFidCutMinEta):0x0), | |
58 | fCTSFidCutMinPhi(g.fCTSFidCutMinPhi?new TArrayF(*g.fCTSFidCutMinPhi):0x0), | |
59 | fCTSFidCutMaxEta(g.fCTSFidCutMaxEta?new TArrayF(*g.fCTSFidCutMaxEta):0x0), | |
60 | fCTSFidCutMaxPhi(g.fCTSFidCutMaxPhi?new TArrayF(*g.fCTSFidCutMaxPhi):0x0), | |
61 | fEMCALFidCutMinEta(g.fEMCALFidCutMinEta?new TArrayF(*g.fEMCALFidCutMinEta):0x0), | |
62 | fEMCALFidCutMinPhi(g.fEMCALFidCutMinPhi?new TArrayF(*g.fEMCALFidCutMinPhi):0x0), | |
63 | fEMCALFidCutMaxEta(g.fEMCALFidCutMaxEta?new TArrayF(*g.fEMCALFidCutMaxEta):0x0), | |
64 | fEMCALFidCutMaxPhi(g.fEMCALFidCutMaxPhi?new TArrayF(*g.fEMCALFidCutMaxPhi):0x0), | |
65 | fPHOSFidCutMinEta(g.fPHOSFidCutMinEta?new TArrayF(*g.fPHOSFidCutMinEta):0x0), | |
66 | fPHOSFidCutMinPhi(g.fPHOSFidCutMinPhi?new TArrayF(*g.fPHOSFidCutMinPhi):0x0), | |
67 | fPHOSFidCutMaxEta(g.fPHOSFidCutMaxEta?new TArrayF(*g.fPHOSFidCutMaxEta):0x0), | |
68 | fPHOSFidCutMaxPhi(g.fPHOSFidCutMaxPhi?new TArrayF(*g.fPHOSFidCutMaxPhi):0x0) | |
69 | ||
70 | { | |
71 | // cpy ctor | |
72 | ||
73 | } | |
74 | ||
75 | //_________________________________________________________________________ | |
76 | AliFidutialCut & AliFidutialCut::operator = (const AliFidutialCut & source) | |
77 | { | |
78 | // assignment operator | |
79 | ||
80 | if(&source == this) return *this; | |
81 | ||
82 | fEMCALFidutialCut = source.fEMCALFidutialCut; | |
83 | fPHOSFidutialCut = source.fPHOSFidutialCut; | |
84 | fCTSFidutialCut = source.fCTSFidutialCut; | |
85 | ||
86 | fCTSFidCutMinEta = source.fCTSFidCutMinEta?new TArrayF(*source.fCTSFidCutMinEta):0x0; | |
87 | fCTSFidCutMinPhi = source.fCTSFidCutMinPhi?new TArrayF(*source.fCTSFidCutMinPhi):0x0; | |
88 | fCTSFidCutMaxEta = source.fCTSFidCutMaxEta?new TArrayF(*source.fCTSFidCutMaxEta):0x0; | |
89 | fCTSFidCutMaxPhi = source.fCTSFidCutMaxPhi?new TArrayF(*source.fCTSFidCutMaxPhi):0x0; | |
90 | fEMCALFidCutMinEta = source.fEMCALFidCutMinEta?new TArrayF(*source.fEMCALFidCutMinEta):0x0; | |
91 | fEMCALFidCutMinPhi = source.fEMCALFidCutMinPhi?new TArrayF(*source.fEMCALFidCutMinPhi):0x0; | |
92 | fEMCALFidCutMaxEta = source.fEMCALFidCutMaxEta?new TArrayF(*source.fEMCALFidCutMaxEta):0x0; | |
93 | fEMCALFidCutMaxPhi = source.fEMCALFidCutMaxPhi?new TArrayF(*source.fEMCALFidCutMaxPhi):0x0; | |
94 | fPHOSFidCutMinEta = source.fPHOSFidCutMinEta?new TArrayF(*source.fPHOSFidCutMinEta):0x0; | |
95 | fPHOSFidCutMinPhi = source.fPHOSFidCutMinPhi?new TArrayF(*source.fPHOSFidCutMinPhi):0x0; | |
96 | fPHOSFidCutMaxEta = source.fPHOSFidCutMaxEta?new TArrayF(*source.fPHOSFidCutMaxEta):0x0; | |
97 | fPHOSFidCutMaxPhi = source.fPHOSFidCutMaxPhi?new TArrayF(*source.fPHOSFidCutMaxPhi):0x0; | |
98 | ||
99 | return *this; | |
100 | ||
101 | } | |
102 | ||
103 | //_________________________________ | |
104 | AliFidutialCut::~AliFidutialCut() { | |
105 | //Dtor | |
106 | ||
107 | delete fCTSFidCutMinEta ; | |
108 | delete fCTSFidCutMinPhi ; | |
109 | delete fCTSFidCutMaxEta ; | |
110 | delete fCTSFidCutMaxPhi ; | |
111 | ||
112 | delete fEMCALFidCutMinEta ; | |
113 | delete fEMCALFidCutMinPhi ; | |
114 | delete fEMCALFidCutMaxEta ; | |
115 | delete fEMCALFidCutMaxPhi ; | |
116 | ||
117 | delete fPHOSFidCutMinEta ; | |
118 | delete fPHOSFidCutMinPhi ; | |
119 | delete fPHOSFidCutMaxEta ; | |
120 | delete fPHOSFidCutMaxPhi ; | |
121 | ||
122 | } | |
123 | ||
124 | ||
125 | //_______________________________________________________________ | |
126 | Bool_t AliFidutialCut::IsInFidutialCut(TLorentzVector momentum, TString det) const | |
127 | { | |
128 | //Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions | |
129 | ||
130 | Double_t phi = momentum.Phi(); | |
131 | if(phi<0) phi+=TMath::TwoPi() ; | |
132 | Double_t eta = momentum.Eta(); | |
133 | //printf("IsInFidutialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta); | |
134 | ||
135 | Float_t * maxeta = new Float_t; | |
136 | Float_t * maxphi = new Float_t; | |
137 | Float_t * mineta = new Float_t; | |
138 | Float_t * minphi = new Float_t; | |
139 | Int_t nphiregions = 0; | |
140 | Int_t netaregions = 0; | |
141 | Bool_t selection = kFALSE; | |
142 | ||
143 | if(det == "CTS"){ | |
144 | netaregions = fCTSFidCutMaxEta->GetSize(); | |
145 | nphiregions = fCTSFidCutMaxPhi->GetSize(); | |
146 | if(netaregions != fCTSFidCutMinEta->GetSize() || nphiregions != fCTSFidCutMinPhi->GetSize()) | |
147 | AliFatal(Form("Wrong number of CTS fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d", | |
148 | netaregions, fCTSFidCutMinEta->GetSize(), nphiregions, fCTSFidCutMinPhi->GetSize())); | |
149 | ||
150 | maxeta = fCTSFidCutMaxEta->GetArray(); | |
151 | maxphi = fCTSFidCutMaxPhi->GetArray(); | |
152 | mineta = fCTSFidCutMinEta->GetArray(); | |
153 | minphi = fCTSFidCutMinPhi->GetArray(); | |
154 | selection = fCTSFidutialCut ; | |
155 | } | |
156 | else if(det == "EMCAL"){ | |
157 | netaregions = fEMCALFidCutMaxEta->GetSize(); | |
158 | nphiregions = fEMCALFidCutMaxPhi->GetSize(); | |
159 | if(netaregions != fEMCALFidCutMinEta->GetSize() || nphiregions != fEMCALFidCutMinPhi->GetSize()) | |
160 | AliFatal(Form("Wrong number of EMCAL fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d", | |
161 | netaregions, fEMCALFidCutMinEta->GetSize(), nphiregions, fEMCALFidCutMinPhi->GetSize())); | |
162 | ||
163 | maxeta = fEMCALFidCutMaxEta->GetArray(); | |
164 | maxphi = fEMCALFidCutMaxPhi->GetArray(); | |
165 | mineta = fEMCALFidCutMinEta->GetArray(); | |
166 | minphi = fEMCALFidCutMinPhi->GetArray(); | |
167 | selection = fEMCALFidutialCut ; | |
168 | } | |
169 | else if(det == "PHOS"){ | |
170 | netaregions = fPHOSFidCutMaxEta->GetSize(); | |
171 | nphiregions = fPHOSFidCutMaxPhi->GetSize(); | |
172 | if(netaregions != fPHOSFidCutMinEta->GetSize() || nphiregions != fPHOSFidCutMinPhi->GetSize()) | |
173 | AliFatal(Form("Wrong number of PHOS fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d", | |
174 | netaregions, fPHOSFidCutMinEta->GetSize(), nphiregions, fPHOSFidCutMinPhi->GetSize())); | |
175 | ||
176 | maxeta = fPHOSFidCutMaxEta->GetArray(); | |
177 | maxphi = fPHOSFidCutMaxPhi->GetArray(); | |
178 | mineta = fPHOSFidCutMinEta->GetArray(); | |
179 | minphi = fPHOSFidCutMinPhi->GetArray(); | |
180 | selection = fPHOSFidutialCut ; | |
181 | } | |
182 | else | |
183 | AliFatal(Form("Wrong detector name = %s", det.Data())); | |
184 | ||
185 | //printf("IsInFidutialCut::nphiregions = %d, netaregions = %d\n",nphiregions, netaregions); | |
186 | ||
187 | if(!selection) return kTRUE; //No cuts applied, all tracks/clusters used | |
188 | ||
189 | //Eta fidutial cut | |
190 | Bool_t bInEtaFidCut = kFALSE; | |
191 | for(Int_t ieta = 0; ieta < netaregions; ieta++) | |
192 | if(eta > mineta[ieta] && eta < maxeta[ieta]) bInEtaFidCut = kTRUE; | |
193 | ||
194 | if(bInEtaFidCut){ | |
195 | //printf("Eta cut passed\n"); | |
196 | //Phi fidutial cut | |
197 | Bool_t bInPhiFidCut = kFALSE; | |
198 | for(Int_t iphi = 0; iphi < nphiregions; iphi++) | |
199 | if(phi > minphi[iphi] *TMath::DegToRad()&& phi < maxphi[iphi]*TMath::DegToRad()) bInPhiFidCut = kTRUE ; | |
200 | ||
201 | if(bInPhiFidCut) { | |
202 | //printf("IsInFidutialCut:: %s cluster/track accepted\n",det.Data()); | |
203 | return kTRUE; | |
204 | } | |
205 | else return kFALSE; | |
206 | ||
207 | }//In eta fid cut | |
208 | else | |
209 | return kFALSE; | |
210 | ||
211 | } | |
212 | ||
213 | ||
214 | //_______________________________________________________________ | |
215 | void AliFidutialCut::InitParameters() | |
216 | { | |
217 | ||
218 | //Initialize the parameters of the analysis. | |
219 | ||
220 | fEMCALFidutialCut = kTRUE ; | |
221 | fPHOSFidutialCut = kTRUE ; | |
222 | fCTSFidutialCut = kTRUE ; | |
223 | ||
224 | fCTSFidCutMinEta = new TArrayF(1); | |
225 | fCTSFidCutMinEta->SetAt(-0.9,0); | |
226 | fCTSFidCutMaxEta = new TArrayF(1); | |
227 | fCTSFidCutMaxEta->SetAt(0.9,0); | |
228 | ||
229 | fCTSFidCutMinPhi = new TArrayF(1); | |
230 | fCTSFidCutMinPhi->SetAt(0,0); | |
231 | fCTSFidCutMaxPhi = new TArrayF(1); | |
232 | fCTSFidCutMaxPhi->SetAt(360.,0); | |
233 | ||
234 | fEMCALFidCutMinEta = new TArrayF(1); | |
235 | fEMCALFidCutMinEta->SetAt(-0.7,0); | |
236 | fEMCALFidCutMaxEta = new TArrayF(1); | |
237 | fEMCALFidCutMaxEta->SetAt(0.7,0); | |
238 | ||
239 | fEMCALFidCutMinPhi = new TArrayF(1); | |
240 | fEMCALFidCutMinPhi->SetAt(80.,0); | |
241 | fEMCALFidCutMaxPhi = new TArrayF(1); | |
242 | fEMCALFidCutMaxPhi->SetAt(190.,0); | |
243 | ||
244 | fPHOSFidCutMinEta = new TArrayF(1); | |
245 | fPHOSFidCutMinEta->SetAt(-0.13,0); | |
246 | fPHOSFidCutMaxEta = new TArrayF(1); | |
247 | fPHOSFidCutMaxEta->SetAt(0.13,0); | |
248 | ||
249 | fPHOSFidCutMinPhi = new TArrayF(1); | |
250 | fPHOSFidCutMinPhi->SetAt(220.,0); | |
251 | fPHOSFidCutMaxPhi = new TArrayF(1); | |
252 | fPHOSFidCutMaxPhi->SetAt(320.,0); | |
253 | ||
254 | } | |
255 | ||
256 | ||
257 | //________________________________________________________________ | |
258 | void AliFidutialCut::Print(const Option_t * opt) const | |
259 | { | |
260 | ||
261 | //Print some relevant parameters set for the analysis | |
262 | if(! opt) | |
263 | return; | |
264 | ||
265 | printf("***** Print: %s %s ******\n", GetName(), GetTitle() ) ; | |
266 | ||
267 | if(fCTSFidutialCut){ | |
268 | Int_t netaregions = fCTSFidCutMaxEta->GetSize(); | |
269 | Int_t nphiregions = fCTSFidCutMaxPhi->GetSize(); | |
270 | printf(">> CTS Fidutial regions : phi %d eta %d\n", netaregions, nphiregions) ; | |
271 | for(Int_t ieta = 0; ieta < netaregions; ieta++) | |
272 | printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fCTSFidCutMinEta->GetAt(ieta), fCTSFidCutMaxEta->GetAt(ieta)) ; | |
273 | for(Int_t iphi = 0; iphi < nphiregions; iphi++) | |
274 | printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fCTSFidCutMinPhi->GetAt(iphi), fCTSFidCutMaxPhi->GetAt(iphi)) ; | |
275 | } | |
276 | else printf(">>No fidutial cuts in CTS\n"); | |
277 | ||
278 | if(fEMCALFidutialCut){ | |
279 | Int_t netaregions = fEMCALFidCutMaxEta->GetSize(); | |
280 | Int_t nphiregions = fEMCALFidCutMaxPhi->GetSize(); | |
281 | printf(">>EMCAL Fidutial regions : phi %d eta %d\n", netaregions, nphiregions) ; | |
282 | for(Int_t ieta = 0; ieta < netaregions; ieta++) | |
283 | printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fEMCALFidCutMinEta->GetAt(ieta), fEMCALFidCutMaxEta->GetAt(ieta)) ; | |
284 | for(Int_t iphi = 0; iphi < nphiregions; iphi++) | |
285 | printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fEMCALFidCutMinPhi->GetAt(iphi), fEMCALFidCutMaxPhi->GetAt(iphi)) ; | |
286 | } | |
287 | else printf(">>No fidutial cuts in EMCAL\n"); | |
288 | ||
289 | if(fPHOSFidutialCut){ | |
290 | Int_t netaregions = fPHOSFidCutMaxEta->GetSize(); | |
291 | Int_t nphiregions = fPHOSFidCutMaxPhi->GetSize(); | |
292 | printf(">>PHOS Fidutial regions : phi %d eta %d\n", netaregions, nphiregions) ; | |
293 | for(Int_t ieta = 0; ieta < netaregions; ieta++) | |
294 | printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fPHOSFidCutMinEta->GetAt(ieta), fPHOSFidCutMaxEta->GetAt(ieta)) ; | |
295 | for(Int_t iphi = 0; iphi < nphiregions; iphi++) | |
296 | printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fPHOSFidCutMinPhi->GetAt(iphi), fPHOSFidCutMaxPhi->GetAt(iphi)) ; | |
297 | } | |
298 | else printf(">>No fidutial cuts in PHOS\n"); | |
299 | printf(" \n") ; | |
300 | } | |
301 | ||
302 | ||
303 | //_______________________________________________________________ | |
304 | void AliFidutialCut::SetSimpleCTSFidutialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){ | |
305 | ||
306 | //Method to set simple acceptance cut to CTS | |
307 | fCTSFidCutMinEta->Set(1); | |
308 | fCTSFidCutMaxEta->Set(1); | |
309 | fCTSFidCutMinPhi->Set(1); | |
310 | fCTSFidCutMaxPhi->Set(1); | |
311 | ||
312 | fCTSFidCutMinEta->SetAt(-eta,0); | |
313 | fCTSFidCutMaxEta->SetAt(eta,0); | |
314 | fCTSFidCutMinPhi->SetAt(minphi,0); | |
315 | fCTSFidCutMaxPhi->SetAt(maxphi,0); | |
316 | ||
317 | ||
318 | } | |
319 | ||
320 | ||
321 | //_______________________________________________________________ | |
322 | void AliFidutialCut::SetSimpleEMCALFidutialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){ | |
323 | //Method to set simple acceptance cut to EMCAL | |
324 | ||
325 | fEMCALFidCutMinEta->Set(1); | |
326 | fEMCALFidCutMaxEta->Set(1); | |
327 | fEMCALFidCutMinPhi->Set(1); | |
328 | fEMCALFidCutMaxPhi->Set(1); | |
329 | ||
330 | fEMCALFidCutMinEta->SetAt(-eta,0); | |
331 | fEMCALFidCutMaxEta->SetAt(eta,0); | |
332 | fEMCALFidCutMinPhi->SetAt(minphi,0); | |
333 | fEMCALFidCutMaxPhi->SetAt(maxphi,0); | |
334 | ||
335 | ||
336 | } | |
337 | ||
338 | //_______________________________________________________________ | |
339 | void AliFidutialCut::SetSimplePHOSFidutialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){ | |
340 | ||
341 | //Method to set simple acceptance cut to PHOS | |
342 | fPHOSFidCutMinEta->Set(1); | |
343 | fPHOSFidCutMaxEta->Set(1); | |
344 | fPHOSFidCutMinPhi->Set(1); | |
345 | fPHOSFidCutMaxPhi->Set(1); | |
346 | ||
347 | fPHOSFidCutMinEta->SetAt(-eta,0); | |
348 | fPHOSFidCutMaxEta->SetAt(eta,0); | |
349 | fPHOSFidCutMinPhi->SetAt(minphi,0); | |
350 | fPHOSFidCutMaxPhi->SetAt(maxphi,0); | |
351 | ||
352 | ||
353 | } |