]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/CaloTrackCorrBase/AliFiducialCut.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[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"
1c5acb87 34
ff45398a 35ClassImp(AliFiducialCut)
1c5acb87 36
37
b960c7eb 38//________________________________
ff45398a 39AliFiducialCut::AliFiducialCut() :
b960c7eb 40TObject(),
41fEMCALFiducialCut(0), fPHOSFiducialCut(0), fCTSFiducialCut(0),
42fCTSFidCutMinEta(0x0), fCTSFidCutMinPhi(0x0), fCTSFidCutMaxEta(0x0), fCTSFidCutMaxPhi(0x0),
43fEMCALFidCutMinEta(0x0),fEMCALFidCutMinPhi(0x0),fEMCALFidCutMaxEta(0x0), fEMCALFidCutMaxPhi(0x0),
44fPHOSFidCutMinEta(0x0), fPHOSFidCutMinPhi(0x0), fPHOSFidCutMaxEta(0x0), fPHOSFidCutMaxPhi(0x0)
1c5acb87 45
46{
47 //Ctor
b960c7eb 48
1c5acb87 49 //Initialize parameters
50 InitParameters();
b960c7eb 51
1c5acb87 52}
53
b960c7eb 54//_______________________________
55AliFiducialCut::~AliFiducialCut()
1c5acb87 56{
1c5acb87 57 //Dtor
b960c7eb 58
59 if(fCTSFidCutMinEta) delete fCTSFidCutMinEta ;
60 if(fCTSFidCutMinPhi) delete fCTSFidCutMinPhi ;
61 if(fCTSFidCutMaxEta) delete fCTSFidCutMaxEta ;
62 if(fCTSFidCutMaxPhi) delete fCTSFidCutMaxPhi ;
63
64 if(fEMCALFidCutMinEta) delete fEMCALFidCutMinEta ;
65 if(fEMCALFidCutMinPhi) delete fEMCALFidCutMinPhi ;
66 if(fEMCALFidCutMaxEta) delete fEMCALFidCutMaxEta ;
67 if(fEMCALFidCutMaxPhi) delete fEMCALFidCutMaxPhi ;
68
69 if(fPHOSFidCutMinEta) delete fPHOSFidCutMinEta ;
70 if(fPHOSFidCutMinPhi) delete fPHOSFidCutMinPhi ;
71 if(fPHOSFidCutMaxEta) delete fPHOSFidCutMaxEta ;
72 if(fPHOSFidCutMaxPhi) delete fPHOSFidCutMaxPhi ;
73
1c5acb87 74}
75
76
8a2dbbff 77//________________________________________________________________________________
78Bool_t AliFiducialCut::IsInFiducialCut(TLorentzVector momentum, TString det) const
1c5acb87 79{
80 //Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
b960c7eb 81
82 if(det == "CTS")
83 {
84 if(!fCTSFiducialCut)
85 return kTRUE; //Fiducial cut not requested, accept all tracks
86 else
87 return CheckFiducialRegion(momentum, fCTSFidCutMinPhi , fCTSFidCutMaxPhi , fCTSFidCutMinEta , fCTSFidCutMaxEta );
1c5acb87 88 }
b960c7eb 89 else if(det == "EMCAL")
90 {
91 if(!fEMCALFiducialCut)
92 return kTRUE; //Fiducial cut not requested, accept all clusters
93 else
94 return CheckFiducialRegion(momentum, fEMCALFidCutMinPhi, fEMCALFidCutMaxPhi, fEMCALFidCutMinEta, fEMCALFidCutMaxEta);
1c5acb87 95 }
b960c7eb 96 else if(det == "PHOS")
97 {
98 if(!fPHOSFiducialCut)
99 return kTRUE; //Fiducial cut not requested, accept all clusters
100 else
101 return CheckFiducialRegion(momentum, fPHOSFidCutMinPhi , fPHOSFidCutMaxPhi , fPHOSFidCutMinEta , fPHOSFidCutMaxEta );
5efec477 102 }
b960c7eb 103 else
104 {
ff45398a 105 printf("AliFiducialCut::IsInFiducialCut() - Wrong detector name = %s\n", det.Data());
5efec477 106 return kFALSE;
1c5acb87 107 }
b960c7eb 108
5efec477 109}
1c5acb87 110
b960c7eb 111//___________________________________________________________________________________________
8a2dbbff 112Bool_t AliFiducialCut::CheckFiducialRegion(TLorentzVector momentum,
b960c7eb 113 const TArrayF* minphi, const TArrayF* maxphi,
114 const TArrayF* mineta, const TArrayF* maxeta) const
115{
5efec477 116 //Given the selection regions in Eta and Phi, check if particle is in this region.
b960c7eb 117
118 Double_t phi = momentum.Phi();
5efec477 119 if(phi < 0) phi+=TMath::TwoPi() ;
120 Double_t eta = momentum.Eta();
ff45398a 121 //printf("IsInFiducialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
b960c7eb 122
123 Int_t netaregions = maxeta->GetSize();
124 Int_t nphiregions = maxphi->GetSize();
125 if(netaregions != mineta->GetSize() || nphiregions != minphi->GetSize())
ff45398a 126 printf("AliFiducialCut::IsInFiducialCut() - Wrong number of fiducial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
b960c7eb 127 netaregions, mineta->GetSize(), nphiregions, minphi->GetSize());
5efec477 128
ff45398a 129 //Eta fiducial cut
5efec477 130 Bool_t bInEtaFidCut = kFALSE;
131 for(Int_t ieta = 0; ieta < netaregions; ieta++)
132 if(eta > mineta->GetAt(ieta) && eta < maxeta->GetAt(ieta)) bInEtaFidCut = kTRUE;
b960c7eb 133
5efec477 134 if(bInEtaFidCut){
135 //printf("Eta cut passed\n");
ff45398a 136 //Phi fiducial cut
5efec477 137 Bool_t bInPhiFidCut = kFALSE;
138 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
139 if(phi > minphi->GetAt(iphi) *TMath::DegToRad()&& phi < maxphi->GetAt(iphi)*TMath::DegToRad()) bInPhiFidCut = kTRUE ;
140
141 if(bInPhiFidCut) {
ff45398a 142 //printf("IsInFiducialCut:: %s cluster/track accepted\n",det.Data());
5efec477 143 return kTRUE;
144 }
145 else return kFALSE;
1c5acb87 146
5efec477 147 }//In eta fid cut
148 else
1c5acb87 149 return kFALSE;
1c5acb87 150}
151
152
153//_______________________________________________________________
ff45398a 154void AliFiducialCut::InitParameters()
1c5acb87 155{
b960c7eb 156
1c5acb87 157 //Initialize the parameters of the analysis.
b960c7eb 158
ff45398a 159 fEMCALFiducialCut = kTRUE ;
b960c7eb 160 fPHOSFiducialCut = kTRUE ;
161 fCTSFiducialCut = kTRUE ;
162
1c5acb87 163 fCTSFidCutMinEta = new TArrayF(1);
164 fCTSFidCutMinEta->SetAt(-0.9,0);
165 fCTSFidCutMaxEta = new TArrayF(1);
b960c7eb 166 fCTSFidCutMaxEta->SetAt( 0.9,0);
167
1c5acb87 168 fCTSFidCutMinPhi = new TArrayF(1);
b960c7eb 169 fCTSFidCutMinPhi->SetAt(0. ,0);
1c5acb87 170 fCTSFidCutMaxPhi = new TArrayF(1);
171 fCTSFidCutMaxPhi->SetAt(360.,0);
b960c7eb 172
1c5acb87 173 fEMCALFidCutMinEta = new TArrayF(1);
174 fEMCALFidCutMinEta->SetAt(-0.7,0);
175 fEMCALFidCutMaxEta = new TArrayF(1);
b960c7eb 176 fEMCALFidCutMaxEta->SetAt( 0.7,0);
177
1c5acb87 178 fEMCALFidCutMinPhi = new TArrayF(1);
179 fEMCALFidCutMinPhi->SetAt(80.,0);
180 fEMCALFidCutMaxPhi = new TArrayF(1);
b960c7eb 181 fEMCALFidCutMaxPhi->SetAt(187.,0);
182
1c5acb87 183 fPHOSFidCutMinEta = new TArrayF(1);
184 fPHOSFidCutMinEta->SetAt(-0.13,0);
185 fPHOSFidCutMaxEta = new TArrayF(1);
b960c7eb 186 fPHOSFidCutMaxEta->SetAt( 0.13,0);
187
1c5acb87 188 fPHOSFidCutMinPhi = new TArrayF(1);
b960c7eb 189 fPHOSFidCutMinPhi->SetAt(260.,0);
1c5acb87 190 fPHOSFidCutMaxPhi = new TArrayF(1);
191 fPHOSFidCutMaxPhi->SetAt(320.,0);
b960c7eb 192
1c5acb87 193}
194
195
196//________________________________________________________________
ff45398a 197void AliFiducialCut::Print(const Option_t * opt) const
1c5acb87 198{
b960c7eb 199
1c5acb87 200 //Print some relevant parameters set for the analysis
201 if(! opt)
202 return;
b960c7eb 203
1c5acb87 204 printf("***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
b960c7eb 205
206 if(fCTSFiducialCut)
207 {
1c5acb87 208 Int_t netaregions = fCTSFidCutMaxEta->GetSize();
209 Int_t nphiregions = fCTSFidCutMaxPhi->GetSize();
ff45398a 210 printf(">> CTS Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 211 for(Int_t ieta = 0; ieta < netaregions; ieta++)
212 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fCTSFidCutMinEta->GetAt(ieta), fCTSFidCutMaxEta->GetAt(ieta)) ;
213 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
214 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fCTSFidCutMinPhi->GetAt(iphi), fCTSFidCutMaxPhi->GetAt(iphi)) ;
215 }
ff45398a 216 else printf(">>No fiducial cuts in CTS\n");
b960c7eb 217
218 if(fEMCALFiducialCut)
219 {
1c5acb87 220 Int_t netaregions = fEMCALFidCutMaxEta->GetSize();
221 Int_t nphiregions = fEMCALFidCutMaxPhi->GetSize();
ff45398a 222 printf(">>EMCAL Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 223 for(Int_t ieta = 0; ieta < netaregions; ieta++)
224 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fEMCALFidCutMinEta->GetAt(ieta), fEMCALFidCutMaxEta->GetAt(ieta)) ;
225 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
226 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fEMCALFidCutMinPhi->GetAt(iphi), fEMCALFidCutMaxPhi->GetAt(iphi)) ;
227 }
ff45398a 228 else printf(">>No fiducial cuts in EMCAL\n");
b960c7eb 229
230 if(fPHOSFiducialCut)
231 {
1c5acb87 232 Int_t netaregions = fPHOSFidCutMaxEta->GetSize();
233 Int_t nphiregions = fPHOSFidCutMaxPhi->GetSize();
ff45398a 234 printf(">>PHOS Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 235 for(Int_t ieta = 0; ieta < netaregions; ieta++)
236 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fPHOSFidCutMinEta->GetAt(ieta), fPHOSFidCutMaxEta->GetAt(ieta)) ;
237 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
238 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fPHOSFidCutMinPhi->GetAt(iphi), fPHOSFidCutMaxPhi->GetAt(iphi)) ;
239 }
ff45398a 240 else printf(">>No fiducial cuts in PHOS\n");
1c5acb87 241 printf(" \n") ;
b960c7eb 242
1c5acb87 243}
244
8a2dbbff 245//_______________________________________________________________________________________
246void AliFiducialCut::SetSimpleCTSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
b960c7eb 247{
248
1c5acb87 249 //Method to set simple acceptance cut to CTS
b960c7eb 250
1c5acb87 251 fCTSFidCutMinEta->Set(1);
252 fCTSFidCutMaxEta->Set(1);
253 fCTSFidCutMinPhi->Set(1);
254 fCTSFidCutMaxPhi->Set(1);
b960c7eb 255
1c5acb87 256 fCTSFidCutMinEta->SetAt(-eta,0);
b960c7eb 257 fCTSFidCutMaxEta->SetAt( eta,0);
1c5acb87 258 fCTSFidCutMinPhi->SetAt(minphi,0);
259 fCTSFidCutMaxPhi->SetAt(maxphi,0);
b960c7eb 260
1c5acb87 261}
262
8a2dbbff 263//_________________________________________________________________________________________
264void AliFiducialCut::SetSimpleEMCALFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
b960c7eb 265{
1c5acb87 266 //Method to set simple acceptance cut to EMCAL
b960c7eb 267
1c5acb87 268 fEMCALFidCutMinEta->Set(1);
269 fEMCALFidCutMaxEta->Set(1);
270 fEMCALFidCutMinPhi->Set(1);
271 fEMCALFidCutMaxPhi->Set(1);
b960c7eb 272
1c5acb87 273 fEMCALFidCutMinEta->SetAt(-eta,0);
b960c7eb 274 fEMCALFidCutMaxEta->SetAt( eta,0);
1c5acb87 275 fEMCALFidCutMinPhi->SetAt(minphi,0);
276 fEMCALFidCutMaxPhi->SetAt(maxphi,0);
b960c7eb 277
1c5acb87 278}
279
8a2dbbff 280//________________________________________________________________________________________
281void AliFiducialCut::SetSimplePHOSFiducialCut(Float_t eta, Float_t minphi, Float_t maxphi)
b960c7eb 282{
1c5acb87 283 //Method to set simple acceptance cut to PHOS
b960c7eb 284
1c5acb87 285 fPHOSFidCutMinEta->Set(1);
286 fPHOSFidCutMaxEta->Set(1);
287 fPHOSFidCutMinPhi->Set(1);
288 fPHOSFidCutMaxPhi->Set(1);
b960c7eb 289
1c5acb87 290 fPHOSFidCutMinEta->SetAt(-eta,0);
291 fPHOSFidCutMaxEta->SetAt(eta,0);
292 fPHOSFidCutMinPhi->SetAt(minphi,0);
293 fPHOSFidCutMaxPhi->SetAt(maxphi,0);
b960c7eb 294
1c5acb87 295}