add forgoten ctor initialization
[u/mrichter/AliRoot.git] / PWG / CaloTrackCorrBase / AliFiducialCut.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
16 //_________________________________________________________________________
17 // Class for track/cluster acceptance selection
18 // Selection in Central barrel, EMCAL and PHOS
19 //  
20 // Several selection regions possible for the different
21 // detectors
22 //
23 //*-- Author: Gustavo Conesa (LNF-INFN) 
24 //////////////////////////////////////////////////////////////////////////////
25
26
27 // --- ROOT system ---
28 #include <TMath.h>
29 //#include <TLorentzVector.h>
30 #include <TString.h>
31
32 //---- ANALYSIS system ----
33 #include "AliFiducialCut.h"
34 #include <AliLog.h>
35
36 ClassImp(AliFiducialCut)
37
38
39 //________________________________
40 AliFiducialCut::AliFiducialCut() : 
41 TObject(),
42 fEMCALFiducialCut(0),   fDCALFiducialCut(0),    fPHOSFiducialCut(0),     fCTSFiducialCut(0),
43 fCTSFidCutMinEta(0x0),  fCTSFidCutMinPhi(0x0),  fCTSFidCutMaxEta(0x0),   fCTSFidCutMaxPhi(0x0),
44 fEMCALFidCutMinEta(0x0),fEMCALFidCutMinPhi(0x0),fEMCALFidCutMaxEta(0x0), fEMCALFidCutMaxPhi(0x0),
45 fPHOSFidCutMinEta(0x0), fPHOSFidCutMinPhi(0x0), fPHOSFidCutMaxEta(0x0),  fPHOSFidCutMaxPhi(0x0),
46 fDCALFidCutMinEta(0x0), fDCALFidCutMinPhi(0x0), fDCALFidCutMaxEta(0x0),  fDCALFidCutMaxPhi(0x0)
47 {
48   //Ctor
49   
50   //Initialize parameters
51   InitParameters();
52   
53 }
54
55 //_______________________________
56 AliFiducialCut::~AliFiducialCut()
57 {
58   //Dtor
59   
60   if(fCTSFidCutMinEta)   delete fCTSFidCutMinEta ;
61   if(fCTSFidCutMinPhi)   delete fCTSFidCutMinPhi ;
62   if(fCTSFidCutMaxEta)   delete fCTSFidCutMaxEta ;
63   if(fCTSFidCutMaxPhi)   delete fCTSFidCutMaxPhi ;
64   
65   if(fEMCALFidCutMinEta) delete fEMCALFidCutMinEta ;
66   if(fEMCALFidCutMinPhi) delete fEMCALFidCutMinPhi ;
67   if(fEMCALFidCutMaxEta) delete fEMCALFidCutMaxEta ; 
68   if(fEMCALFidCutMaxPhi) delete fEMCALFidCutMaxPhi ;
69   
70   if(fPHOSFidCutMinEta)  delete fPHOSFidCutMinEta ; 
71   if(fPHOSFidCutMinPhi)  delete fPHOSFidCutMinPhi ; 
72   if(fPHOSFidCutMaxEta)  delete fPHOSFidCutMaxEta ;
73   if(fPHOSFidCutMaxPhi)  delete fPHOSFidCutMaxPhi ;
74   
75   if(fDCALFidCutMinEta)  delete fDCALFidCutMinEta ;
76   if(fDCALFidCutMinPhi)  delete fDCALFidCutMinPhi ;
77   if(fDCALFidCutMaxEta)  delete fDCALFidCutMaxEta ;
78   if(fDCALFidCutMaxPhi)  delete fDCALFidCutMaxPhi ;
79 }
80
81
82 ////________________________________________________________________________________
83 //Bool_t AliFiducialCut::IsInFiducialCut(TLorentzVector momentum, TString det) const
84 //{
85 //  // Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
86 //  Int_t idet = -1;
87 //  if     (det=="EMCAL") idet = kEMCAL;
88 //  else if(det=="PHOS" ) idet = kPHOS;
89 //  else if(det=="CTS")   idet = kCTS;
90 //  else if(det=="DCAL")  idet = kDCAL;
91 //  else if(det.Contains("DCAL") && det.Contains("PHOS")) idet = kDCALPHOS;
92 //  else
93 //  {
94 //    AliFatal(Form("Detector < %s > not known!", det.Data()));
95 //    return kFALSE;
96 //  }
97 //  
98 //  return IsInFiducialCut(momentum.Eta(), momentum.Phi(), idet);
99 //}
100
101 //________________________________________________________________________________
102 Bool_t AliFiducialCut::IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
103 {
104   // Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
105   
106   if(det == kCTS)
107   {
108           if(!fCTSFiducialCut)  
109       return kTRUE; //Fiducial cut not requested, accept all tracks  
110           else 
111       return CheckFiducialRegion(eta,phi, fCTSFidCutMinPhi  , fCTSFidCutMaxPhi , fCTSFidCutMinEta  , fCTSFidCutMaxEta  );
112   }
113   else   if(det == kEMCAL)
114   {
115           if(!fEMCALFiducialCut) 
116       return kTRUE; //Fiducial cut not requested, accept all clusters  
117           else                   
118       return CheckFiducialRegion(eta,phi, fEMCALFidCutMinPhi, fEMCALFidCutMaxPhi, fEMCALFidCutMinEta, fEMCALFidCutMaxEta);
119   }
120   else   if(det == kPHOS)
121   {
122     if(!fPHOSFiducialCut)
123       return kTRUE; //Fiducial cut not requested, accept all clusters
124     else
125       return CheckFiducialRegion(eta,phi, fPHOSFidCutMinPhi , fPHOSFidCutMaxPhi , fPHOSFidCutMinEta , fPHOSFidCutMaxEta );
126   }
127   else   if(det == kDCAL || det == kDCALPHOS)
128   {
129     if(!fDCALFiducialCut)
130       return kTRUE; //Fiducial cut not requested, accept all clusters
131     else
132       return CheckFiducialRegion(eta,phi, fDCALFidCutMinPhi , fDCALFidCutMaxPhi , fDCALFidCutMinEta , fDCALFidCutMaxEta );
133   }
134   else
135   {
136     return kFALSE;
137     AliFatal(Form("Detector < %d > not known!", det));
138   }
139   
140 }
141
142 //___________________________________________________________________________________________
143 Bool_t AliFiducialCut::CheckFiducialRegion(Float_t eta, Float_t phiOrg,
144                                            const TArrayF* minphi, const TArrayF* maxphi, 
145                                            const TArrayF* mineta, const TArrayF* maxeta) const 
146 {
147   //Given the selection regions in Eta and Phi, check if particle is in this region.
148   
149   Float_t phi = phiOrg;
150         if(phi < 0) phi+=TMath::TwoPi() ;
151   
152         //printf("IsInFiducialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
153   
154   Int_t netaregions = maxeta->GetSize();
155   Int_t nphiregions = maxphi->GetSize();
156   if(netaregions !=  mineta->GetSize() || nphiregions !=  minphi->GetSize())
157                 printf("AliFiducialCut::IsInFiducialCut() - Wrong number of fiducial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
158            netaregions, mineta->GetSize(),  nphiregions, minphi->GetSize());
159         
160         //Eta fiducial cut
161         Bool_t bInEtaFidCut = kFALSE;
162         for(Int_t ieta = 0; ieta < netaregions; ieta++)
163                 if(eta > mineta->GetAt(ieta) && eta < maxeta->GetAt(ieta)) bInEtaFidCut = kTRUE;
164   
165         if(bInEtaFidCut){
166                 //printf("Eta cut passed\n");
167                 //Phi fiducial cut
168                 Bool_t bInPhiFidCut = kFALSE;
169                 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
170                         if(phi > minphi->GetAt(iphi) *TMath::DegToRad()&& phi < maxphi->GetAt(iphi)*TMath::DegToRad()) bInPhiFidCut = kTRUE ;
171           
172                 if(bInPhiFidCut) {
173                         //printf("IsInFiducialCut:: %s cluster/track accepted\n",det.Data());
174                         return kTRUE;
175                 }
176                 else return kFALSE;
177     
178         }//In eta fid cut
179         else
180     return kFALSE;
181 }
182
183
184 //_______________________________________________________________
185 void AliFiducialCut::InitParameters()
186 {
187   
188   //Initialize the parameters of the analysis.
189   
190   fEMCALFiducialCut = kTRUE ;  
191   fPHOSFiducialCut  = kTRUE ;
192   fCTSFiducialCut   = kTRUE ;
193   fDCALFiducialCut  = kTRUE ;
194   
195   fCTSFidCutMinEta = new TArrayF(1);
196   fCTSFidCutMinEta->SetAt(-0.9,0); 
197   fCTSFidCutMaxEta = new TArrayF(1);
198   fCTSFidCutMaxEta->SetAt( 0.9,0); 
199   
200   fCTSFidCutMinPhi = new TArrayF(1);
201   fCTSFidCutMinPhi->SetAt(0.  ,0); 
202   fCTSFidCutMaxPhi = new TArrayF(1);
203   fCTSFidCutMaxPhi->SetAt(360.,0); 
204   
205   fEMCALFidCutMinEta = new TArrayF(1);
206   fEMCALFidCutMinEta->SetAt(-0.7,0); 
207   fEMCALFidCutMaxEta = new TArrayF(1);
208   fEMCALFidCutMaxEta->SetAt( 0.7,0); 
209   
210   fEMCALFidCutMinPhi = new TArrayF(1);
211   fEMCALFidCutMinPhi->SetAt(80.,0); 
212   fEMCALFidCutMaxPhi = new TArrayF(1);
213   fEMCALFidCutMaxPhi->SetAt(187.,0); 
214   
215   fPHOSFidCutMinEta = new TArrayF(1);
216   fPHOSFidCutMinEta->SetAt(-0.13,0); 
217   fPHOSFidCutMaxEta = new TArrayF(1);
218   fPHOSFidCutMaxEta->SetAt( 0.13,0); 
219   
220   fPHOSFidCutMinPhi = new TArrayF(1);
221   fPHOSFidCutMinPhi->SetAt(260.,0); 
222   fPHOSFidCutMaxPhi = new TArrayF(1);
223   fPHOSFidCutMaxPhi->SetAt(320.,0); 
224   
225 //  fDCALFidCutMinEta = new TArrayF(1);
226 //  fDCALFidCutMinEta->SetAt(-0.7,0);
227 //  fDCALFidCutMaxEta = new TArrayF(1);
228 //  fDCALFidCutMaxEta->SetAt( 0.7,0);
229 //  
230 //  fDCALFidCutMinPhi = new TArrayF(1);
231 //  fDCALFidCutMinPhi->SetAt(260.,0);
232 //  fDCALFidCutMaxPhi = new TArrayF(1);
233 //  fDCALFidCutMaxPhi->SetAt(327.,0);
234   
235   // Divide DCal in 3 regions:
236   // A (C?) side : -0.70<eta<-0.15, 260<phi<320
237   // C (A?) side :  0.15<eta< 0.70, 260<phi<320
238   // 1/3 SM      : -0.70<eta< 0.70, 320<phi<327
239   
240   fDCALFidCutMinEta = new TArrayF(3);
241   fDCALFidCutMinEta->SetAt(-0.7 ,0);
242   fDCALFidCutMinEta->SetAt( 0.20,1);
243   fDCALFidCutMinEta->SetAt(-0.7 ,2);
244   fDCALFidCutMaxEta = new TArrayF(3);
245   fDCALFidCutMaxEta->SetAt(-0.20,0);
246   fDCALFidCutMaxEta->SetAt( 0.7 ,1);
247   fDCALFidCutMaxEta->SetAt( 0.7 ,2);
248   
249   fDCALFidCutMinPhi = new TArrayF(3);
250   fDCALFidCutMinPhi->SetAt(260.,0);
251   fDCALFidCutMinPhi->SetAt(260.,1);
252   fDCALFidCutMinPhi->SetAt(320.,2);
253   fDCALFidCutMaxPhi = new TArrayF(3);
254   fDCALFidCutMaxPhi->SetAt(320.,0);
255   fDCALFidCutMaxPhi->SetAt(320.,0);
256   fDCALFidCutMaxPhi->SetAt(327.,0);
257
258 }
259
260
261 //________________________________________________________________
262 void AliFiducialCut::Print(const Option_t * opt) const
263 {
264   
265   //Print some relevant parameters set for the analysis
266   if(! opt)
267     return;
268   
269   printf("***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
270   
271   if(fCTSFiducialCut)
272   {
273     Int_t netaregions =  fCTSFidCutMaxEta->GetSize();
274     Int_t nphiregions =  fCTSFidCutMaxPhi->GetSize();
275     printf(">> CTS Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
276     for(Int_t ieta = 0; ieta < netaregions; ieta++)
277       printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fCTSFidCutMinEta->GetAt(ieta), fCTSFidCutMaxEta->GetAt(ieta)) ;
278     for(Int_t iphi = 0; iphi < nphiregions; iphi++)
279       printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fCTSFidCutMinPhi->GetAt(iphi), fCTSFidCutMaxPhi->GetAt(iphi)) ; 
280   }
281   else printf(">>No fiducial cuts in CTS\n");
282   
283   if(fEMCALFiducialCut)
284   {
285     Int_t netaregions =  fEMCALFidCutMaxEta->GetSize();
286     Int_t nphiregions =  fEMCALFidCutMaxPhi->GetSize();
287     printf(">>EMCAL Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
288     for(Int_t ieta = 0; ieta < netaregions; ieta++)
289       printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fEMCALFidCutMinEta->GetAt(ieta), fEMCALFidCutMaxEta->GetAt(ieta)) ;
290     for(Int_t iphi = 0; iphi < nphiregions; iphi++)
291       printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fEMCALFidCutMinPhi->GetAt(iphi), fEMCALFidCutMaxPhi->GetAt(iphi)) ; 
292   }
293   else printf(">>No fiducial cuts in EMCAL\n");
294   
295   if(fPHOSFiducialCut)
296   {
297     Int_t netaregions =  fPHOSFidCutMaxEta->GetSize();
298     Int_t nphiregions =  fPHOSFidCutMaxPhi->GetSize();
299     printf(">>PHOS Fiducial 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 fiducial cuts in PHOS\n");
306   
307   if(fDCALFiducialCut)
308   {
309     Int_t netaregions =  fDCALFidCutMaxEta->GetSize();
310     Int_t nphiregions =  fDCALFidCutMaxPhi->GetSize();
311     printf(">>DCAL Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
312     for(Int_t ieta = 0; ieta < netaregions; ieta++)
313       printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fDCALFidCutMinEta->GetAt(ieta), fDCALFidCutMaxEta->GetAt(ieta)) ;
314     for(Int_t iphi = 0; iphi < nphiregions; iphi++)
315       printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fDCALFidCutMinPhi->GetAt(iphi), fDCALFidCutMaxPhi->GetAt(iphi)) ;
316   }
317   else printf(">>No fiducial cuts in DCAL\n");
318   
319   printf("    \n") ;
320   
321
322
323 //_______________________________________________________________________________________
324 void AliFiducialCut::SetSimpleCTSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
325 {
326   
327   //Method to set simple acceptance cut to CTS
328   
329   fCTSFidCutMinEta->Set(1);
330   fCTSFidCutMaxEta->Set(1);
331   fCTSFidCutMinPhi->Set(1);
332   fCTSFidCutMaxPhi->Set(1);
333   
334   fCTSFidCutMinEta->SetAt(-eta,0);
335   fCTSFidCutMaxEta->SetAt( eta,0);
336   fCTSFidCutMinPhi->SetAt(minphi,0);
337   fCTSFidCutMaxPhi->SetAt(maxphi,0);
338   
339 }
340
341 //_________________________________________________________________________________________
342 void AliFiducialCut::SetSimpleEMCALFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
343 {
344   //Method to set simple acceptance cut to EMCAL
345   
346   fEMCALFidCutMinEta->Set(1);
347   fEMCALFidCutMaxEta->Set(1);
348   fEMCALFidCutMinPhi->Set(1);
349   fEMCALFidCutMaxPhi->Set(1);
350   
351   fEMCALFidCutMinEta->SetAt(-eta,0);
352   fEMCALFidCutMaxEta->SetAt( eta,0);
353   fEMCALFidCutMinPhi->SetAt(minphi,0);
354   fEMCALFidCutMaxPhi->SetAt(maxphi,0);
355   
356 }
357
358 //________________________________________________________________________________________
359 void AliFiducialCut::SetSimplePHOSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
360 {
361   //Method to set simple acceptance cut to PHOS
362   
363   fPHOSFidCutMinEta->Set(1);
364   fPHOSFidCutMaxEta->Set(1);
365   fPHOSFidCutMinPhi->Set(1);
366   fPHOSFidCutMaxPhi->Set(1);
367   
368   fPHOSFidCutMinEta->SetAt(-eta,0);
369   fPHOSFidCutMaxEta->SetAt(eta,0);
370   fPHOSFidCutMinPhi->SetAt(minphi,0);
371   fPHOSFidCutMaxPhi->SetAt(maxphi,0);
372   
373 }
374
375 //_________________________________________________________________________________________
376 void AliFiducialCut::SetSimpleDCALFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
377 {
378   //Method to set simple acceptance cut to DCAL
379   
380   fDCALFidCutMinEta->Set(1);
381   fDCALFidCutMaxEta->Set(1);
382   fDCALFidCutMinPhi->Set(1);
383   fDCALFidCutMaxPhi->Set(1);
384   
385   fDCALFidCutMinEta->SetAt(-eta,0);
386   fDCALFidCutMaxEta->SetAt( eta,0);
387   fDCALFidCutMinPhi->SetAt(minphi,0);
388   fDCALFidCutMaxPhi->SetAt(maxphi,0);
389   
390 }