]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG4/PartCorrBase/AliFiducialCut.cxx
Centrality update (Alberica)
[u/mrichter/AliRoot.git] / PWG4 / PartCorrBase / 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 **************************************************************************/
ff45398a 15/* $Id: AliFiducialCut.cxx 21839 2007-10-29 13:49:42Z gustavo $ */
1c5acb87 16
17//_________________________________________________________________________
18// Class for track/cluster acceptance selection
19// Selection in Central barrel, EMCAL and PHOS
5efec477 20//
21// Several selection regions possible for the different
22// detectors
23//
1c5acb87 24//*-- Author: Gustavo Conesa (LNF-INFN)
25//////////////////////////////////////////////////////////////////////////////
26
27
28// --- ROOT system ---
29#include <TMath.h>
30#include <TLorentzVector.h>
31#include <TString.h>
32//#include <TArrayF.h>
5efec477 33
1c5acb87 34//---- ANALYSIS system ----
ff45398a 35#include "AliFiducialCut.h"
1c5acb87 36
ff45398a 37ClassImp(AliFiducialCut)
1c5acb87 38
39
40//____________________________________________________________________________
ff45398a 41AliFiducialCut::AliFiducialCut() :
1c5acb87 42 TObject(),
ff45398a 43 fEMCALFiducialCut(0), fPHOSFiducialCut(0), fCTSFiducialCut(0),
1c5acb87 44 fCTSFidCutMinEta(0x0),fCTSFidCutMinPhi(0x0),fCTSFidCutMaxEta(0x0), fCTSFidCutMaxPhi(0x0),
45 fEMCALFidCutMinEta(0x0),fEMCALFidCutMinPhi(0x0),fEMCALFidCutMaxEta(0x0), fEMCALFidCutMaxPhi(0x0),
46 fPHOSFidCutMinEta(0x0),fPHOSFidCutMinPhi(0x0),fPHOSFidCutMaxEta(0x0), fPHOSFidCutMaxPhi(0x0)
47
48{
49 //Ctor
50
51 //Initialize parameters
52 InitParameters();
53}
78219bac 54/*
1c5acb87 55//____________________________________________________________________________
ff45398a 56AliFiducialCut::AliFiducialCut(const AliFiducialCut & g) :
1c5acb87 57 TObject(g),
ff45398a 58 fEMCALFiducialCut(g.fEMCALFiducialCut), fPHOSFiducialCut(g.fPHOSFiducialCut), fCTSFiducialCut(g. fCTSFiducialCut),
1c5acb87 59 fCTSFidCutMinEta(g.fCTSFidCutMinEta?new TArrayF(*g.fCTSFidCutMinEta):0x0),
60 fCTSFidCutMinPhi(g.fCTSFidCutMinPhi?new TArrayF(*g.fCTSFidCutMinPhi):0x0),
61 fCTSFidCutMaxEta(g.fCTSFidCutMaxEta?new TArrayF(*g.fCTSFidCutMaxEta):0x0),
62 fCTSFidCutMaxPhi(g.fCTSFidCutMaxPhi?new TArrayF(*g.fCTSFidCutMaxPhi):0x0),
63 fEMCALFidCutMinEta(g.fEMCALFidCutMinEta?new TArrayF(*g.fEMCALFidCutMinEta):0x0),
64 fEMCALFidCutMinPhi(g.fEMCALFidCutMinPhi?new TArrayF(*g.fEMCALFidCutMinPhi):0x0),
65 fEMCALFidCutMaxEta(g.fEMCALFidCutMaxEta?new TArrayF(*g.fEMCALFidCutMaxEta):0x0),
66 fEMCALFidCutMaxPhi(g.fEMCALFidCutMaxPhi?new TArrayF(*g.fEMCALFidCutMaxPhi):0x0),
67 fPHOSFidCutMinEta(g.fPHOSFidCutMinEta?new TArrayF(*g.fPHOSFidCutMinEta):0x0),
68 fPHOSFidCutMinPhi(g.fPHOSFidCutMinPhi?new TArrayF(*g.fPHOSFidCutMinPhi):0x0),
69 fPHOSFidCutMaxEta(g.fPHOSFidCutMaxEta?new TArrayF(*g.fPHOSFidCutMaxEta):0x0),
70 fPHOSFidCutMaxPhi(g.fPHOSFidCutMaxPhi?new TArrayF(*g.fPHOSFidCutMaxPhi):0x0)
71
72{
73 // cpy ctor
74
75}
76
77//_________________________________________________________________________
ff45398a 78AliFiducialCut & AliFiducialCut::operator = (const AliFiducialCut & source)
1c5acb87 79{
80 // assignment operator
81
82 if(&source == this) return *this;
83
ff45398a 84 fEMCALFiducialCut = source.fEMCALFiducialCut;
85 fPHOSFiducialCut = source.fPHOSFiducialCut;
86 fCTSFiducialCut = source.fCTSFiducialCut;
1c5acb87 87
88 fCTSFidCutMinEta = source.fCTSFidCutMinEta?new TArrayF(*source.fCTSFidCutMinEta):0x0;
89 fCTSFidCutMinPhi = source.fCTSFidCutMinPhi?new TArrayF(*source.fCTSFidCutMinPhi):0x0;
90 fCTSFidCutMaxEta = source.fCTSFidCutMaxEta?new TArrayF(*source.fCTSFidCutMaxEta):0x0;
91 fCTSFidCutMaxPhi = source.fCTSFidCutMaxPhi?new TArrayF(*source.fCTSFidCutMaxPhi):0x0;
92 fEMCALFidCutMinEta = source.fEMCALFidCutMinEta?new TArrayF(*source.fEMCALFidCutMinEta):0x0;
93 fEMCALFidCutMinPhi = source.fEMCALFidCutMinPhi?new TArrayF(*source.fEMCALFidCutMinPhi):0x0;
94 fEMCALFidCutMaxEta = source.fEMCALFidCutMaxEta?new TArrayF(*source.fEMCALFidCutMaxEta):0x0;
95 fEMCALFidCutMaxPhi = source.fEMCALFidCutMaxPhi?new TArrayF(*source.fEMCALFidCutMaxPhi):0x0;
96 fPHOSFidCutMinEta = source.fPHOSFidCutMinEta?new TArrayF(*source.fPHOSFidCutMinEta):0x0;
97 fPHOSFidCutMinPhi = source.fPHOSFidCutMinPhi?new TArrayF(*source.fPHOSFidCutMinPhi):0x0;
98 fPHOSFidCutMaxEta = source.fPHOSFidCutMaxEta?new TArrayF(*source.fPHOSFidCutMaxEta):0x0;
99 fPHOSFidCutMaxPhi = source.fPHOSFidCutMaxPhi?new TArrayF(*source.fPHOSFidCutMaxPhi):0x0;
100
101 return *this;
102
103}
78219bac 104*/
1c5acb87 105//_________________________________
ff45398a 106AliFiducialCut::~AliFiducialCut() {
1c5acb87 107 //Dtor
108
7ac2407a 109 if(fCTSFidCutMinEta)delete fCTSFidCutMinEta ;
110 if(fCTSFidCutMinPhi)delete fCTSFidCutMinPhi ;
111 if(fCTSFidCutMaxEta)delete fCTSFidCutMaxEta ;
112 if(fCTSFidCutMaxPhi)delete fCTSFidCutMaxPhi ;
1c5acb87 113
7ac2407a 114 if(fEMCALFidCutMinEta)delete fEMCALFidCutMinEta ;
115 if(fEMCALFidCutMinPhi)delete fEMCALFidCutMinPhi ;
116 if(fEMCALFidCutMaxEta)delete fEMCALFidCutMaxEta ;
117 if(fEMCALFidCutMaxPhi)delete fEMCALFidCutMaxPhi ;
1c5acb87 118
7ac2407a 119 if(fPHOSFidCutMinEta)delete fPHOSFidCutMinEta ;
120 if(fPHOSFidCutMinPhi)delete fPHOSFidCutMinPhi ;
121 if(fPHOSFidCutMaxEta)delete fPHOSFidCutMaxEta ;
122 if(fPHOSFidCutMaxPhi)delete fPHOSFidCutMaxPhi ;
1c5acb87 123
124}
125
126
127//_______________________________________________________________
ff45398a 128Bool_t AliFiducialCut::IsInFiducialCut(const TLorentzVector momentum, const TString det) const
1c5acb87 129{
130 //Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
131
1c5acb87 132 if(det == "CTS"){
ff45398a 133 if(!fCTSFiducialCut) return kTRUE; //Fiducial cut not requested, accept all tracks
134 else return CheckFiducialRegion(momentum, fCTSFidCutMinPhi , fCTSFidCutMaxPhi , fCTSFidCutMinEta , fCTSFidCutMaxEta );
1c5acb87 135 }
5efec477 136 else if(det == "EMCAL") {
ff45398a 137 if(!fEMCALFiducialCut) return kTRUE; //Fiducial cut not requested, accept all clusters
138 else return CheckFiducialRegion(momentum, fEMCALFidCutMinPhi, fEMCALFidCutMaxPhi, fEMCALFidCutMinEta, fEMCALFidCutMaxEta);
1c5acb87 139 }
5efec477 140 else if(det == "PHOS") {
ff45398a 141 if(!fPHOSFiducialCut) return kTRUE; //Fiducial cut not requested, accept all clusters
142 else return CheckFiducialRegion(momentum, fPHOSFidCutMinPhi , fPHOSFidCutMaxPhi , fPHOSFidCutMinEta , fPHOSFidCutMaxEta );
5efec477 143 }
144 else{
ff45398a 145 printf("AliFiducialCut::IsInFiducialCut() - Wrong detector name = %s\n", det.Data());
5efec477 146 return kFALSE;
1c5acb87 147 }
1c5acb87 148
5efec477 149}
1c5acb87 150
5efec477 151//_______________________________________________________________
ff45398a 152Bool_t AliFiducialCut::CheckFiducialRegion(const TLorentzVector momentum, const TArrayF* minphi, const TArrayF* maxphi, const TArrayF* mineta, const TArrayF* maxeta) const {
5efec477 153 //Given the selection regions in Eta and Phi, check if particle is in this region.
154
155 Double_t phi = momentum.Phi();
156 if(phi < 0) phi+=TMath::TwoPi() ;
157 Double_t eta = momentum.Eta();
ff45398a 158 //printf("IsInFiducialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
5efec477 159
9ad18506 160 Int_t netaregions = maxeta->GetSize();
161 Int_t nphiregions = maxphi->GetSize();
5efec477 162 if(netaregions != mineta->GetSize() || nphiregions != minphi->GetSize())
ff45398a 163 printf("AliFiducialCut::IsInFiducialCut() - Wrong number of fiducial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d\n",
5efec477 164 netaregions, mineta->GetSize(), nphiregions, minphi->GetSize());
165
ff45398a 166 //Eta fiducial cut
5efec477 167 Bool_t bInEtaFidCut = kFALSE;
168 for(Int_t ieta = 0; ieta < netaregions; ieta++)
169 if(eta > mineta->GetAt(ieta) && eta < maxeta->GetAt(ieta)) bInEtaFidCut = kTRUE;
170
171 if(bInEtaFidCut){
172 //printf("Eta cut passed\n");
ff45398a 173 //Phi fiducial cut
5efec477 174 Bool_t bInPhiFidCut = kFALSE;
175 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
176 if(phi > minphi->GetAt(iphi) *TMath::DegToRad()&& phi < maxphi->GetAt(iphi)*TMath::DegToRad()) bInPhiFidCut = kTRUE ;
177
178 if(bInPhiFidCut) {
ff45398a 179 //printf("IsInFiducialCut:: %s cluster/track accepted\n",det.Data());
5efec477 180 return kTRUE;
181 }
182 else return kFALSE;
1c5acb87 183
5efec477 184 }//In eta fid cut
185 else
1c5acb87 186 return kFALSE;
1c5acb87 187}
188
189
190//_______________________________________________________________
ff45398a 191void AliFiducialCut::InitParameters()
1c5acb87 192{
193
194 //Initialize the parameters of the analysis.
195
ff45398a 196 fEMCALFiducialCut = kTRUE ;
197 fPHOSFiducialCut = kTRUE ;
198 fCTSFiducialCut = kTRUE ;
1c5acb87 199
200 fCTSFidCutMinEta = new TArrayF(1);
201 fCTSFidCutMinEta->SetAt(-0.9,0);
202 fCTSFidCutMaxEta = new TArrayF(1);
203 fCTSFidCutMaxEta->SetAt(0.9,0);
204
205 fCTSFidCutMinPhi = new TArrayF(1);
206 fCTSFidCutMinPhi->SetAt(0,0);
207 fCTSFidCutMaxPhi = new TArrayF(1);
208 fCTSFidCutMaxPhi->SetAt(360.,0);
209
210 fEMCALFidCutMinEta = new TArrayF(1);
211 fEMCALFidCutMinEta->SetAt(-0.7,0);
212 fEMCALFidCutMaxEta = new TArrayF(1);
213 fEMCALFidCutMaxEta->SetAt(0.7,0);
214
215 fEMCALFidCutMinPhi = new TArrayF(1);
216 fEMCALFidCutMinPhi->SetAt(80.,0);
217 fEMCALFidCutMaxPhi = new TArrayF(1);
218 fEMCALFidCutMaxPhi->SetAt(190.,0);
219
220 fPHOSFidCutMinEta = new TArrayF(1);
221 fPHOSFidCutMinEta->SetAt(-0.13,0);
222 fPHOSFidCutMaxEta = new TArrayF(1);
223 fPHOSFidCutMaxEta->SetAt(0.13,0);
224
225 fPHOSFidCutMinPhi = new TArrayF(1);
226 fPHOSFidCutMinPhi->SetAt(220.,0);
227 fPHOSFidCutMaxPhi = new TArrayF(1);
228 fPHOSFidCutMaxPhi->SetAt(320.,0);
229
230}
231
232
233//________________________________________________________________
ff45398a 234void AliFiducialCut::Print(const Option_t * opt) const
1c5acb87 235{
236
237 //Print some relevant parameters set for the analysis
238 if(! opt)
239 return;
240
241 printf("***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
242
ff45398a 243 if(fCTSFiducialCut){
1c5acb87 244 Int_t netaregions = fCTSFidCutMaxEta->GetSize();
245 Int_t nphiregions = fCTSFidCutMaxPhi->GetSize();
ff45398a 246 printf(">> CTS Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 247 for(Int_t ieta = 0; ieta < netaregions; ieta++)
248 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fCTSFidCutMinEta->GetAt(ieta), fCTSFidCutMaxEta->GetAt(ieta)) ;
249 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
250 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fCTSFidCutMinPhi->GetAt(iphi), fCTSFidCutMaxPhi->GetAt(iphi)) ;
251 }
ff45398a 252 else printf(">>No fiducial cuts in CTS\n");
1c5acb87 253
ff45398a 254 if(fEMCALFiducialCut){
1c5acb87 255 Int_t netaregions = fEMCALFidCutMaxEta->GetSize();
256 Int_t nphiregions = fEMCALFidCutMaxPhi->GetSize();
ff45398a 257 printf(">>EMCAL Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 258 for(Int_t ieta = 0; ieta < netaregions; ieta++)
259 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fEMCALFidCutMinEta->GetAt(ieta), fEMCALFidCutMaxEta->GetAt(ieta)) ;
260 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
261 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fEMCALFidCutMinPhi->GetAt(iphi), fEMCALFidCutMaxPhi->GetAt(iphi)) ;
262 }
ff45398a 263 else printf(">>No fiducial cuts in EMCAL\n");
1c5acb87 264
ff45398a 265 if(fPHOSFiducialCut){
1c5acb87 266 Int_t netaregions = fPHOSFidCutMaxEta->GetSize();
267 Int_t nphiregions = fPHOSFidCutMaxPhi->GetSize();
ff45398a 268 printf(">>PHOS Fiducial regions : phi %d eta %d\n", netaregions, nphiregions) ;
1c5acb87 269 for(Int_t ieta = 0; ieta < netaregions; ieta++)
270 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fPHOSFidCutMinEta->GetAt(ieta), fPHOSFidCutMaxEta->GetAt(ieta)) ;
271 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
272 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fPHOSFidCutMinPhi->GetAt(iphi), fPHOSFidCutMaxPhi->GetAt(iphi)) ;
273 }
ff45398a 274 else printf(">>No fiducial cuts in PHOS\n");
1c5acb87 275 printf(" \n") ;
276}
277
278
279//_______________________________________________________________
ff45398a 280void AliFiducialCut::SetSimpleCTSFiducialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){
1c5acb87 281
282 //Method to set simple acceptance cut to CTS
283 fCTSFidCutMinEta->Set(1);
284 fCTSFidCutMaxEta->Set(1);
285 fCTSFidCutMinPhi->Set(1);
286 fCTSFidCutMaxPhi->Set(1);
287
288 fCTSFidCutMinEta->SetAt(-eta,0);
289 fCTSFidCutMaxEta->SetAt(eta,0);
290 fCTSFidCutMinPhi->SetAt(minphi,0);
291 fCTSFidCutMaxPhi->SetAt(maxphi,0);
292
293
294}
295
296
297//_______________________________________________________________
ff45398a 298void AliFiducialCut::SetSimpleEMCALFiducialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){
1c5acb87 299 //Method to set simple acceptance cut to EMCAL
300
301 fEMCALFidCutMinEta->Set(1);
302 fEMCALFidCutMaxEta->Set(1);
303 fEMCALFidCutMinPhi->Set(1);
304 fEMCALFidCutMaxPhi->Set(1);
305
306 fEMCALFidCutMinEta->SetAt(-eta,0);
307 fEMCALFidCutMaxEta->SetAt(eta,0);
308 fEMCALFidCutMinPhi->SetAt(minphi,0);
309 fEMCALFidCutMaxPhi->SetAt(maxphi,0);
310
311
312}
313
314//_______________________________________________________________
ff45398a 315void AliFiducialCut::SetSimplePHOSFiducialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){
1c5acb87 316
317 //Method to set simple acceptance cut to PHOS
318 fPHOSFidCutMinEta->Set(1);
319 fPHOSFidCutMaxEta->Set(1);
320 fPHOSFidCutMinPhi->Set(1);
321 fPHOSFidCutMaxPhi->Set(1);
322
323 fPHOSFidCutMinEta->SetAt(-eta,0);
324 fPHOSFidCutMaxEta->SetAt(eta,0);
325 fPHOSFidCutMinPhi->SetAt(minphi,0);
326 fPHOSFidCutMaxPhi->SetAt(maxphi,0);
327
328
329}