]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/AliFidutialCut.cxx
Corrected two bugs found by Sergey regarding the error calculation.
[u/mrichter/AliRoot.git] / PWG4 / AliFidutialCut.cxx
CommitLineData
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
35ClassImp(AliFidutialCut)
36
37
38//____________________________________________________________________________
39AliFidutialCut::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//____________________________________________________________________________
54AliFidutialCut::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//_________________________________________________________________________
76AliFidutialCut & 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//_________________________________
104AliFidutialCut::~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//_______________________________________________________________
126Bool_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//_______________________________________________________________
215void 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//________________________________________________________________
258void 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//_______________________________________________________________
304void 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//_______________________________________________________________
322void 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//_______________________________________________________________
339void 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}