]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/CaloTrackCorrBase/AliFiducialCut.cxx
temporal commit to avoir breaking compilation
[u/mrichter/AliRoot.git] / PWG / CaloTrackCorrBase / AliFiducialCut.cxx
CommitLineData
1c5acb87 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 **************************************************************************/
1c5acb87 15
16//_________________________________________________________________________
17// Class for track/cluster acceptance selection
18// Selection in Central barrel, EMCAL and PHOS
5efec477 19//
20// Several selection regions possible for the different
21// detectors
22//
1c5acb87 23//*-- Author: Gustavo Conesa (LNF-INFN)
24//////////////////////////////////////////////////////////////////////////////
25
26
27// --- ROOT system ---
28#include <TMath.h>
29#include <TLorentzVector.h>
30#include <TString.h>
5efec477 31
1c5acb87 32//---- ANALYSIS system ----
ff45398a 33#include "AliFiducialCut.h"
87fae7e8 34#include <AliLog.h>
1c5acb87 35
ff45398a 36ClassImp(AliFiducialCut)
1c5acb87 37
38
b960c7eb 39//________________________________
ff45398a 40AliFiducialCut::AliFiducialCut() :
b960c7eb 41TObject(),
42fEMCALFiducialCut(0), fPHOSFiducialCut(0), fCTSFiducialCut(0),
43fCTSFidCutMinEta(0x0), fCTSFidCutMinPhi(0x0), fCTSFidCutMaxEta(0x0), fCTSFidCutMaxPhi(0x0),
44fEMCALFidCutMinEta(0x0),fEMCALFidCutMinPhi(0x0),fEMCALFidCutMaxEta(0x0), fEMCALFidCutMaxPhi(0x0),
87fae7e8 45fPHOSFidCutMinEta(0x0), fPHOSFidCutMinPhi(0x0), fPHOSFidCutMaxEta(0x0), fPHOSFidCutMaxPhi(0x0),
46fDCALFidCutMinEta(0x0), fDCALFidCutMinPhi(0x0), fDCALFidCutMaxEta(0x0), fDCALFidCutMaxPhi(0x0)
1c5acb87 47{
48 //Ctor
b960c7eb 49
1c5acb87 50 //Initialize parameters
51 InitParameters();
b960c7eb 52
1c5acb87 53}
54
b960c7eb 55//_______________________________
56AliFiducialCut::~AliFiducialCut()
1c5acb87 57{
1c5acb87 58 //Dtor
b960c7eb 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
87fae7e8 75 if(fDCALFidCutMinEta) delete fDCALFidCutMinEta ;
76 if(fDCALFidCutMinPhi) delete fDCALFidCutMinPhi ;
77 if(fDCALFidCutMaxEta) delete fDCALFidCutMaxEta ;
78 if(fDCALFidCutMaxPhi) delete fDCALFidCutMaxPhi ;
1c5acb87 79}
80
81
02e3ce0c 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//}
87fae7e8 100
101//________________________________________________________________________________
102Bool_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
b960c7eb 105
87fae7e8 106 if(det == kCTS)
b960c7eb 107 {
108 if(!fCTSFiducialCut)
109 return kTRUE; //Fiducial cut not requested, accept all tracks
110 else
87fae7e8 111 return CheckFiducialRegion(eta,phi, fCTSFidCutMinPhi , fCTSFidCutMaxPhi , fCTSFidCutMinEta , fCTSFidCutMaxEta );
1c5acb87 112 }
87fae7e8 113 else if(det == kEMCAL)
b960c7eb 114 {
115 if(!fEMCALFiducialCut)
116 return kTRUE; //Fiducial cut not requested, accept all clusters
117 else
87fae7e8 118 return CheckFiducialRegion(eta,phi, fEMCALFidCutMinPhi, fEMCALFidCutMaxPhi, fEMCALFidCutMinEta, fEMCALFidCutMaxEta);
1c5acb87 119 }
87fae7e8 120 else if(det == kPHOS)
b960c7eb 121 {
87fae7e8 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 );
5efec477 133 }
b960c7eb 134 else
135 {
87fae7e8 136 return kFALSE;
137 AliFatal(Form("Detector < %d > not known!", det));
1c5acb87 138 }
b960c7eb 139
5efec477 140}
1c5acb87 141
b960c7eb 142//___________________________________________________________________________________________
6a766bba 143Bool_t AliFiducialCut::CheckFiducialRegion(Float_t eta, Float_t phiOrg,
b960c7eb 144 const TArrayF* minphi, const TArrayF* maxphi,
145 const TArrayF* mineta, const TArrayF* maxeta) const
146{
5efec477 147 //Given the selection regions in Eta and Phi, check if particle is in this region.
b960c7eb 148
6a766bba 149 Float_t phi = phiOrg;
5efec477 150 if(phi < 0) phi+=TMath::TwoPi() ;
6a766bba 151
ff45398a 152 //printf("IsInFiducialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
b960c7eb 153
154 Int_t netaregions = maxeta->GetSize();
155 Int_t nphiregions = maxphi->GetSize();
156 if(netaregions != mineta->GetSize() || nphiregions != minphi->GetSize())
ff45398a 157 printf("AliFiducialCut::IsInFiducialCut() - Wrong number of fiducial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
b960c7eb 158 netaregions, mineta->GetSize(), nphiregions, minphi->GetSize());
5efec477 159
ff45398a 160 //Eta fiducial cut
5efec477 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;
b960c7eb 164
5efec477 165 if(bInEtaFidCut){
166 //printf("Eta cut passed\n");
ff45398a 167 //Phi fiducial cut
5efec477 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) {
ff45398a 173 //printf("IsInFiducialCut:: %s cluster/track accepted\n",det.Data());
5efec477 174 return kTRUE;
175 }
176 else return kFALSE;
1c5acb87 177
5efec477 178 }//In eta fid cut
179 else
1c5acb87 180 return kFALSE;
1c5acb87 181}
182
183
184//_______________________________________________________________
ff45398a 185void AliFiducialCut::InitParameters()
1c5acb87 186{
b960c7eb 187
1c5acb87 188 //Initialize the parameters of the analysis.
b960c7eb 189
ff45398a 190 fEMCALFiducialCut = kTRUE ;
b960c7eb 191 fPHOSFiducialCut = kTRUE ;
192 fCTSFiducialCut = kTRUE ;
87fae7e8 193 fDCALFiducialCut = kTRUE ;
b960c7eb 194
1c5acb87 195 fCTSFidCutMinEta = new TArrayF(1);
196 fCTSFidCutMinEta->SetAt(-0.9,0);
197 fCTSFidCutMaxEta = new TArrayF(1);
b960c7eb 198 fCTSFidCutMaxEta->SetAt( 0.9,0);
199
1c5acb87 200 fCTSFidCutMinPhi = new TArrayF(1);
b960c7eb 201 fCTSFidCutMinPhi->SetAt(0. ,0);
1c5acb87 202 fCTSFidCutMaxPhi = new TArrayF(1);
203 fCTSFidCutMaxPhi->SetAt(360.,0);
b960c7eb 204
1c5acb87 205 fEMCALFidCutMinEta = new TArrayF(1);
206 fEMCALFidCutMinEta->SetAt(-0.7,0);
207 fEMCALFidCutMaxEta = new TArrayF(1);
b960c7eb 208 fEMCALFidCutMaxEta->SetAt( 0.7,0);
209
1c5acb87 210 fEMCALFidCutMinPhi = new TArrayF(1);
211 fEMCALFidCutMinPhi->SetAt(80.,0);
212 fEMCALFidCutMaxPhi = new TArrayF(1);
b960c7eb 213 fEMCALFidCutMaxPhi->SetAt(187.,0);
214
1c5acb87 215 fPHOSFidCutMinEta = new TArrayF(1);
216 fPHOSFidCutMinEta->SetAt(-0.13,0);
217 fPHOSFidCutMaxEta = new TArrayF(1);
b960c7eb 218 fPHOSFidCutMaxEta->SetAt( 0.13,0);
219
1c5acb87 220 fPHOSFidCutMinPhi = new TArrayF(1);
b960c7eb 221 fPHOSFidCutMinPhi->SetAt(260.,0);
1c5acb87 222 fPHOSFidCutMaxPhi = new TArrayF(1);
223 fPHOSFidCutMaxPhi->SetAt(320.,0);
b960c7eb 224
400b8646 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.15,1);
243 fDCALFidCutMinEta->SetAt(-0.7 ,2);
244 fDCALFidCutMaxEta = new TArrayF(3);
245 fDCALFidCutMaxEta->SetAt(-0.15,0);
246 fDCALFidCutMaxEta->SetAt( 0.7 ,1);
247 fDCALFidCutMaxEta->SetAt( 0.7 ,2);
87fae7e8 248
400b8646 249 fDCALFidCutMinPhi = new TArrayF(3);
87fae7e8 250 fDCALFidCutMinPhi->SetAt(260.,0);
400b8646 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);
87fae7e8 256 fDCALFidCutMaxPhi->SetAt(327.,0);
400b8646 257
1c5acb87 258}
259
260
261//________________________________________________________________
ff45398a 262void AliFiducialCut::Print(const Option_t * opt) const
1c5acb87 263{
b960c7eb 264
1c5acb87 265 //Print some relevant parameters set for the analysis
266 if(! opt)
267 return;
b960c7eb 268
1c5acb87 269 printf("***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
b960c7eb 270
271 if(fCTSFiducialCut)
272 {
1c5acb87 273 Int_t netaregions = fCTSFidCutMaxEta->GetSize();
274 Int_t nphiregions = fCTSFidCutMaxPhi->GetSize();
ff45398a 275 printf(">> CTS Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 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 }
ff45398a 281 else printf(">>No fiducial cuts in CTS\n");
b960c7eb 282
283 if(fEMCALFiducialCut)
284 {
1c5acb87 285 Int_t netaregions = fEMCALFidCutMaxEta->GetSize();
286 Int_t nphiregions = fEMCALFidCutMaxPhi->GetSize();
ff45398a 287 printf(">>EMCAL Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 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 }
ff45398a 293 else printf(">>No fiducial cuts in EMCAL\n");
b960c7eb 294
295 if(fPHOSFiducialCut)
296 {
1c5acb87 297 Int_t netaregions = fPHOSFidCutMaxEta->GetSize();
298 Int_t nphiregions = fPHOSFidCutMaxPhi->GetSize();
ff45398a 299 printf(">>PHOS Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 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 }
ff45398a 305 else printf(">>No fiducial cuts in PHOS\n");
87fae7e8 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
1c5acb87 319 printf(" \n") ;
b960c7eb 320
1c5acb87 321}
322
8a2dbbff 323//_______________________________________________________________________________________
324void AliFiducialCut::SetSimpleCTSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
b960c7eb 325{
326
1c5acb87 327 //Method to set simple acceptance cut to CTS
b960c7eb 328
1c5acb87 329 fCTSFidCutMinEta->Set(1);
330 fCTSFidCutMaxEta->Set(1);
331 fCTSFidCutMinPhi->Set(1);
332 fCTSFidCutMaxPhi->Set(1);
b960c7eb 333
1c5acb87 334 fCTSFidCutMinEta->SetAt(-eta,0);
b960c7eb 335 fCTSFidCutMaxEta->SetAt( eta,0);
1c5acb87 336 fCTSFidCutMinPhi->SetAt(minphi,0);
337 fCTSFidCutMaxPhi->SetAt(maxphi,0);
b960c7eb 338
1c5acb87 339}
340
8a2dbbff 341//_________________________________________________________________________________________
342void AliFiducialCut::SetSimpleEMCALFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
b960c7eb 343{
1c5acb87 344 //Method to set simple acceptance cut to EMCAL
b960c7eb 345
1c5acb87 346 fEMCALFidCutMinEta->Set(1);
347 fEMCALFidCutMaxEta->Set(1);
348 fEMCALFidCutMinPhi->Set(1);
349 fEMCALFidCutMaxPhi->Set(1);
b960c7eb 350
1c5acb87 351 fEMCALFidCutMinEta->SetAt(-eta,0);
b960c7eb 352 fEMCALFidCutMaxEta->SetAt( eta,0);
1c5acb87 353 fEMCALFidCutMinPhi->SetAt(minphi,0);
354 fEMCALFidCutMaxPhi->SetAt(maxphi,0);
b960c7eb 355
1c5acb87 356}
357
8a2dbbff 358//________________________________________________________________________________________
359void AliFiducialCut::SetSimplePHOSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
b960c7eb 360{
1c5acb87 361 //Method to set simple acceptance cut to PHOS
b960c7eb 362
1c5acb87 363 fPHOSFidCutMinEta->Set(1);
364 fPHOSFidCutMaxEta->Set(1);
365 fPHOSFidCutMinPhi->Set(1);
366 fPHOSFidCutMaxPhi->Set(1);
b960c7eb 367
1c5acb87 368 fPHOSFidCutMinEta->SetAt(-eta,0);
369 fPHOSFidCutMaxEta->SetAt(eta,0);
370 fPHOSFidCutMinPhi->SetAt(minphi,0);
371 fPHOSFidCutMaxPhi->SetAt(maxphi,0);
b960c7eb 372
1c5acb87 373}
87fae7e8 374
375//_________________________________________________________________________________________
376void 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}