1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 //_________________________________________________________________________
17 // Class for track/cluster acceptance selection
18 // Selection in Central barrel, EMCAL and PHOS
20 // Several selection regions possible for the different
23 //*-- Author: Gustavo Conesa (LNF-INFN)
24 //////////////////////////////////////////////////////////////////////////////
27 // --- ROOT system ---
29 //#include <TLorentzVector.h>
32 //---- ANALYSIS system ----
33 #include "AliFiducialCut.h"
36 ClassImp(AliFiducialCut)
39 //________________________________
40 AliFiducialCut::AliFiducialCut() :
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)
50 //Initialize parameters
55 //_______________________________
56 AliFiducialCut::~AliFiducialCut()
60 if(fCTSFidCutMinEta) delete fCTSFidCutMinEta ;
61 if(fCTSFidCutMinPhi) delete fCTSFidCutMinPhi ;
62 if(fCTSFidCutMaxEta) delete fCTSFidCutMaxEta ;
63 if(fCTSFidCutMaxPhi) delete fCTSFidCutMaxPhi ;
65 if(fEMCALFidCutMinEta) delete fEMCALFidCutMinEta ;
66 if(fEMCALFidCutMinPhi) delete fEMCALFidCutMinPhi ;
67 if(fEMCALFidCutMaxEta) delete fEMCALFidCutMaxEta ;
68 if(fEMCALFidCutMaxPhi) delete fEMCALFidCutMaxPhi ;
70 if(fPHOSFidCutMinEta) delete fPHOSFidCutMinEta ;
71 if(fPHOSFidCutMinPhi) delete fPHOSFidCutMinPhi ;
72 if(fPHOSFidCutMaxEta) delete fPHOSFidCutMaxEta ;
73 if(fPHOSFidCutMaxPhi) delete fPHOSFidCutMaxPhi ;
75 if(fDCALFidCutMinEta) delete fDCALFidCutMinEta ;
76 if(fDCALFidCutMinPhi) delete fDCALFidCutMinPhi ;
77 if(fDCALFidCutMaxEta) delete fDCALFidCutMaxEta ;
78 if(fDCALFidCutMaxPhi) delete fDCALFidCutMaxPhi ;
82 ////________________________________________________________________________________
83 //Bool_t AliFiducialCut::IsInFiducialCut(TLorentzVector momentum, TString det) const
85 // // Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
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;
94 // AliFatal(Form("Detector < %s > not known!", det.Data()));
98 // return IsInFiducialCut(momentum.Eta(), momentum.Phi(), idet);
101 //________________________________________________________________________________
102 Bool_t AliFiducialCut::IsInFiducialCut(Float_t eta, Float_t phi, Int_t det) const
104 // Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
109 return kTRUE; //Fiducial cut not requested, accept all tracks
111 return CheckFiducialRegion(eta,phi, fCTSFidCutMinPhi , fCTSFidCutMaxPhi , fCTSFidCutMinEta , fCTSFidCutMaxEta );
113 else if(det == kEMCAL)
115 if(!fEMCALFiducialCut)
116 return kTRUE; //Fiducial cut not requested, accept all clusters
118 return CheckFiducialRegion(eta,phi, fEMCALFidCutMinPhi, fEMCALFidCutMaxPhi, fEMCALFidCutMinEta, fEMCALFidCutMaxEta);
120 else if(det == kPHOS)
122 if(!fPHOSFiducialCut)
123 return kTRUE; //Fiducial cut not requested, accept all clusters
125 return CheckFiducialRegion(eta,phi, fPHOSFidCutMinPhi , fPHOSFidCutMaxPhi , fPHOSFidCutMinEta , fPHOSFidCutMaxEta );
127 else if(det == kDCAL || det == kDCALPHOS)
129 if(!fDCALFiducialCut)
130 return kTRUE; //Fiducial cut not requested, accept all clusters
132 return CheckFiducialRegion(eta,phi, fDCALFidCutMinPhi , fDCALFidCutMaxPhi , fDCALFidCutMinEta , fDCALFidCutMaxEta );
137 AliFatal(Form("Detector < %d > not known!", det));
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
147 //Given the selection regions in Eta and Phi, check if particle is in this region.
149 Float_t phi = phiOrg;
150 if(phi < 0) phi+=TMath::TwoPi() ;
152 //printf("IsInFiducialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
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());
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;
166 //printf("Eta cut passed\n");
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 ;
173 //printf("IsInFiducialCut:: %s cluster/track accepted\n",det.Data());
184 //_______________________________________________________________
185 void AliFiducialCut::InitParameters()
188 //Initialize the parameters of the analysis.
190 fEMCALFiducialCut = kTRUE ;
191 fPHOSFiducialCut = kTRUE ;
192 fCTSFiducialCut = kTRUE ;
193 fDCALFiducialCut = kTRUE ;
195 fCTSFidCutMinEta = new TArrayF(1);
196 fCTSFidCutMinEta->SetAt(-0.9,0);
197 fCTSFidCutMaxEta = new TArrayF(1);
198 fCTSFidCutMaxEta->SetAt( 0.9,0);
200 fCTSFidCutMinPhi = new TArrayF(1);
201 fCTSFidCutMinPhi->SetAt(0. ,0);
202 fCTSFidCutMaxPhi = new TArrayF(1);
203 fCTSFidCutMaxPhi->SetAt(360.,0);
205 fEMCALFidCutMinEta = new TArrayF(1);
206 fEMCALFidCutMinEta->SetAt(-0.7,0);
207 fEMCALFidCutMaxEta = new TArrayF(1);
208 fEMCALFidCutMaxEta->SetAt( 0.7,0);
210 fEMCALFidCutMinPhi = new TArrayF(1);
211 fEMCALFidCutMinPhi->SetAt(80.,0);
212 fEMCALFidCutMaxPhi = new TArrayF(1);
213 fEMCALFidCutMaxPhi->SetAt(187.,0);
215 fPHOSFidCutMinEta = new TArrayF(1);
216 fPHOSFidCutMinEta->SetAt(-0.13,0);
217 fPHOSFidCutMaxEta = new TArrayF(1);
218 fPHOSFidCutMaxEta->SetAt( 0.13,0);
220 fPHOSFidCutMinPhi = new TArrayF(1);
221 fPHOSFidCutMinPhi->SetAt(260.,0);
222 fPHOSFidCutMaxPhi = new TArrayF(1);
223 fPHOSFidCutMaxPhi->SetAt(320.,0);
225 // fDCALFidCutMinEta = new TArrayF(1);
226 // fDCALFidCutMinEta->SetAt(-0.7,0);
227 // fDCALFidCutMaxEta = new TArrayF(1);
228 // fDCALFidCutMaxEta->SetAt( 0.7,0);
230 // fDCALFidCutMinPhi = new TArrayF(1);
231 // fDCALFidCutMinPhi->SetAt(260.,0);
232 // fDCALFidCutMaxPhi = new TArrayF(1);
233 // fDCALFidCutMaxPhi->SetAt(327.,0);
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
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);
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);
261 //________________________________________________________________
262 void AliFiducialCut::Print(const Option_t * opt) const
265 //Print some relevant parameters set for the analysis
269 printf("***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
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)) ;
281 else printf(">>No fiducial cuts in CTS\n");
283 if(fEMCALFiducialCut)
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)) ;
293 else printf(">>No fiducial cuts in EMCAL\n");
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)) ;
305 else printf(">>No fiducial cuts in PHOS\n");
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)) ;
317 else printf(">>No fiducial cuts in DCAL\n");
323 //_______________________________________________________________________________________
324 void AliFiducialCut::SetSimpleCTSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
327 //Method to set simple acceptance cut to CTS
329 fCTSFidCutMinEta->Set(1);
330 fCTSFidCutMaxEta->Set(1);
331 fCTSFidCutMinPhi->Set(1);
332 fCTSFidCutMaxPhi->Set(1);
334 fCTSFidCutMinEta->SetAt(-eta,0);
335 fCTSFidCutMaxEta->SetAt( eta,0);
336 fCTSFidCutMinPhi->SetAt(minphi,0);
337 fCTSFidCutMaxPhi->SetAt(maxphi,0);
341 //_________________________________________________________________________________________
342 void AliFiducialCut::SetSimpleEMCALFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
344 //Method to set simple acceptance cut to EMCAL
346 fEMCALFidCutMinEta->Set(1);
347 fEMCALFidCutMaxEta->Set(1);
348 fEMCALFidCutMinPhi->Set(1);
349 fEMCALFidCutMaxPhi->Set(1);
351 fEMCALFidCutMinEta->SetAt(-eta,0);
352 fEMCALFidCutMaxEta->SetAt( eta,0);
353 fEMCALFidCutMinPhi->SetAt(minphi,0);
354 fEMCALFidCutMaxPhi->SetAt(maxphi,0);
358 //________________________________________________________________________________________
359 void AliFiducialCut::SetSimplePHOSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
361 //Method to set simple acceptance cut to PHOS
363 fPHOSFidCutMinEta->Set(1);
364 fPHOSFidCutMaxEta->Set(1);
365 fPHOSFidCutMinPhi->Set(1);
366 fPHOSFidCutMaxPhi->Set(1);
368 fPHOSFidCutMinEta->SetAt(-eta,0);
369 fPHOSFidCutMaxEta->SetAt(eta,0);
370 fPHOSFidCutMinPhi->SetAt(minphi,0);
371 fPHOSFidCutMaxPhi->SetAt(maxphi,0);
375 //_________________________________________________________________________________________
376 void AliFiducialCut::SetSimpleDCALFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
378 //Method to set simple acceptance cut to DCAL
380 fDCALFidCutMinEta->Set(1);
381 fDCALFidCutMaxEta->Set(1);
382 fDCALFidCutMinPhi->Set(1);
383 fDCALFidCutMaxPhi->Set(1);
385 fDCALFidCutMinEta->SetAt(-eta,0);
386 fDCALFidCutMaxEta->SetAt( eta,0);
387 fDCALFidCutMinPhi->SetAt(minphi,0);
388 fDCALFidCutMaxPhi->SetAt(maxphi,0);