]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/AliFidutialCut.cxx
Warnings potentially serious in compilation fixed
[u/mrichter/AliRoot.git] / PWG4 / AliFidutialCut.cxx
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 }