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