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 **************************************************************************/
15 /* $Id: AliFidutialCut.cxx 21839 2007-10-29 13:49:42Z gustavo $ */
17 //_________________________________________________________________________
18 // Class for track/cluster acceptance selection
19 // Selection in Central barrel, EMCAL and PHOS
21 //*-- Author: Gustavo Conesa (LNF-INFN)
22 //////////////////////////////////////////////////////////////////////////////
25 // --- ROOT system ---
27 #include <TLorentzVector.h>
29 //#include <TArrayF.h>
31 //---- ANALYSIS system ----
33 #include "AliFidutialCut.h"
35 ClassImp(AliFidutialCut)
38 //____________________________________________________________________________
39 AliFidutialCut::AliFidutialCut() :
41 fEMCALFidutialCut(0), fPHOSFidutialCut(0), fCTSFidutialCut(0),
42 fCTSFidCutMinEta(0x0),fCTSFidCutMinPhi(0x0),fCTSFidCutMaxEta(0x0), fCTSFidCutMaxPhi(0x0),
43 fEMCALFidCutMinEta(0x0),fEMCALFidCutMinPhi(0x0),fEMCALFidCutMaxEta(0x0), fEMCALFidCutMaxPhi(0x0),
44 fPHOSFidCutMinEta(0x0),fPHOSFidCutMinPhi(0x0),fPHOSFidCutMaxEta(0x0), fPHOSFidCutMaxPhi(0x0)
49 //Initialize parameters
53 //____________________________________________________________________________
54 AliFidutialCut::AliFidutialCut(const AliFidutialCut & g) :
56 fEMCALFidutialCut(g.fEMCALFidutialCut), fPHOSFidutialCut(g.fPHOSFidutialCut), fCTSFidutialCut(g. fCTSFidutialCut),
57 fCTSFidCutMinEta(g.fCTSFidCutMinEta?new TArrayF(*g.fCTSFidCutMinEta):0x0),
58 fCTSFidCutMinPhi(g.fCTSFidCutMinPhi?new TArrayF(*g.fCTSFidCutMinPhi):0x0),
59 fCTSFidCutMaxEta(g.fCTSFidCutMaxEta?new TArrayF(*g.fCTSFidCutMaxEta):0x0),
60 fCTSFidCutMaxPhi(g.fCTSFidCutMaxPhi?new TArrayF(*g.fCTSFidCutMaxPhi):0x0),
61 fEMCALFidCutMinEta(g.fEMCALFidCutMinEta?new TArrayF(*g.fEMCALFidCutMinEta):0x0),
62 fEMCALFidCutMinPhi(g.fEMCALFidCutMinPhi?new TArrayF(*g.fEMCALFidCutMinPhi):0x0),
63 fEMCALFidCutMaxEta(g.fEMCALFidCutMaxEta?new TArrayF(*g.fEMCALFidCutMaxEta):0x0),
64 fEMCALFidCutMaxPhi(g.fEMCALFidCutMaxPhi?new TArrayF(*g.fEMCALFidCutMaxPhi):0x0),
65 fPHOSFidCutMinEta(g.fPHOSFidCutMinEta?new TArrayF(*g.fPHOSFidCutMinEta):0x0),
66 fPHOSFidCutMinPhi(g.fPHOSFidCutMinPhi?new TArrayF(*g.fPHOSFidCutMinPhi):0x0),
67 fPHOSFidCutMaxEta(g.fPHOSFidCutMaxEta?new TArrayF(*g.fPHOSFidCutMaxEta):0x0),
68 fPHOSFidCutMaxPhi(g.fPHOSFidCutMaxPhi?new TArrayF(*g.fPHOSFidCutMaxPhi):0x0)
75 //_________________________________________________________________________
76 AliFidutialCut & AliFidutialCut::operator = (const AliFidutialCut & source)
78 // assignment operator
80 if(&source == this) return *this;
82 fEMCALFidutialCut = source.fEMCALFidutialCut;
83 fPHOSFidutialCut = source.fPHOSFidutialCut;
84 fCTSFidutialCut = source.fCTSFidutialCut;
86 fCTSFidCutMinEta = source.fCTSFidCutMinEta?new TArrayF(*source.fCTSFidCutMinEta):0x0;
87 fCTSFidCutMinPhi = source.fCTSFidCutMinPhi?new TArrayF(*source.fCTSFidCutMinPhi):0x0;
88 fCTSFidCutMaxEta = source.fCTSFidCutMaxEta?new TArrayF(*source.fCTSFidCutMaxEta):0x0;
89 fCTSFidCutMaxPhi = source.fCTSFidCutMaxPhi?new TArrayF(*source.fCTSFidCutMaxPhi):0x0;
90 fEMCALFidCutMinEta = source.fEMCALFidCutMinEta?new TArrayF(*source.fEMCALFidCutMinEta):0x0;
91 fEMCALFidCutMinPhi = source.fEMCALFidCutMinPhi?new TArrayF(*source.fEMCALFidCutMinPhi):0x0;
92 fEMCALFidCutMaxEta = source.fEMCALFidCutMaxEta?new TArrayF(*source.fEMCALFidCutMaxEta):0x0;
93 fEMCALFidCutMaxPhi = source.fEMCALFidCutMaxPhi?new TArrayF(*source.fEMCALFidCutMaxPhi):0x0;
94 fPHOSFidCutMinEta = source.fPHOSFidCutMinEta?new TArrayF(*source.fPHOSFidCutMinEta):0x0;
95 fPHOSFidCutMinPhi = source.fPHOSFidCutMinPhi?new TArrayF(*source.fPHOSFidCutMinPhi):0x0;
96 fPHOSFidCutMaxEta = source.fPHOSFidCutMaxEta?new TArrayF(*source.fPHOSFidCutMaxEta):0x0;
97 fPHOSFidCutMaxPhi = source.fPHOSFidCutMaxPhi?new TArrayF(*source.fPHOSFidCutMaxPhi):0x0;
103 //_________________________________
104 AliFidutialCut::~AliFidutialCut() {
107 delete fCTSFidCutMinEta ;
108 delete fCTSFidCutMinPhi ;
109 delete fCTSFidCutMaxEta ;
110 delete fCTSFidCutMaxPhi ;
112 delete fEMCALFidCutMinEta ;
113 delete fEMCALFidCutMinPhi ;
114 delete fEMCALFidCutMaxEta ;
115 delete fEMCALFidCutMaxPhi ;
117 delete fPHOSFidCutMinEta ;
118 delete fPHOSFidCutMinPhi ;
119 delete fPHOSFidCutMaxEta ;
120 delete fPHOSFidCutMaxPhi ;
125 //_______________________________________________________________
126 Bool_t AliFidutialCut::IsInFidutialCut(TLorentzVector momentum, TString det) const
128 //Selects EMCAL or PHOS cluster or CTS track if it is inside eta-phi defined regions
130 Double_t phi = momentum.Phi();
131 if(phi<0) phi+=TMath::TwoPi() ;
132 Double_t eta = momentum.Eta();
133 //printf("IsInFidutialCut::Det: %s, phi = %f, eta = %f\n", det.Data(),phi*TMath::RadToDeg(), eta);
135 Float_t * maxeta = new Float_t;
136 Float_t * maxphi = new Float_t;
137 Float_t * mineta = new Float_t;
138 Float_t * minphi = new Float_t;
139 Int_t nphiregions = 0;
140 Int_t netaregions = 0;
141 Bool_t selection = kFALSE;
144 netaregions = fCTSFidCutMaxEta->GetSize();
145 nphiregions = fCTSFidCutMaxPhi->GetSize();
146 if(netaregions != fCTSFidCutMinEta->GetSize() || nphiregions != fCTSFidCutMinPhi->GetSize())
147 AliFatal(Form("Wrong number of CTS fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d",
148 netaregions, fCTSFidCutMinEta->GetSize(), nphiregions, fCTSFidCutMinPhi->GetSize()));
150 maxeta = fCTSFidCutMaxEta->GetArray();
151 maxphi = fCTSFidCutMaxPhi->GetArray();
152 mineta = fCTSFidCutMinEta->GetArray();
153 minphi = fCTSFidCutMinPhi->GetArray();
154 selection = fCTSFidutialCut ;
156 else if(det == "EMCAL"){
157 netaregions = fEMCALFidCutMaxEta->GetSize();
158 nphiregions = fEMCALFidCutMaxPhi->GetSize();
159 if(netaregions != fEMCALFidCutMinEta->GetSize() || nphiregions != fEMCALFidCutMinPhi->GetSize())
160 AliFatal(Form("Wrong number of EMCAL fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d",
161 netaregions, fEMCALFidCutMinEta->GetSize(), nphiregions, fEMCALFidCutMinPhi->GetSize()));
163 maxeta = fEMCALFidCutMaxEta->GetArray();
164 maxphi = fEMCALFidCutMaxPhi->GetArray();
165 mineta = fEMCALFidCutMinEta->GetArray();
166 minphi = fEMCALFidCutMinPhi->GetArray();
167 selection = fEMCALFidutialCut ;
169 else if(det == "PHOS"){
170 netaregions = fPHOSFidCutMaxEta->GetSize();
171 nphiregions = fPHOSFidCutMaxPhi->GetSize();
172 if(netaregions != fPHOSFidCutMinEta->GetSize() || nphiregions != fPHOSFidCutMinPhi->GetSize())
173 AliFatal(Form("Wrong number of PHOS fidutial cut regions: nmaxeta %d != nmineta %d; nmaxphi %d != nminphi %d",
174 netaregions, fPHOSFidCutMinEta->GetSize(), nphiregions, fPHOSFidCutMinPhi->GetSize()));
176 maxeta = fPHOSFidCutMaxEta->GetArray();
177 maxphi = fPHOSFidCutMaxPhi->GetArray();
178 mineta = fPHOSFidCutMinEta->GetArray();
179 minphi = fPHOSFidCutMinPhi->GetArray();
180 selection = fPHOSFidutialCut ;
183 AliFatal(Form("Wrong detector name = %s", det.Data()));
185 //printf("IsInFidutialCut::nphiregions = %d, netaregions = %d\n",nphiregions, netaregions);
187 if(!selection) return kTRUE; //No cuts applied, all tracks/clusters used
190 Bool_t bInEtaFidCut = kFALSE;
191 for(Int_t ieta = 0; ieta < netaregions; ieta++)
192 if(eta > mineta[ieta] && eta < maxeta[ieta]) bInEtaFidCut = kTRUE;
195 //printf("Eta cut passed\n");
197 Bool_t bInPhiFidCut = kFALSE;
198 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
199 if(phi > minphi[iphi] *TMath::DegToRad()&& phi < maxphi[iphi]*TMath::DegToRad()) bInPhiFidCut = kTRUE ;
202 //printf("IsInFidutialCut:: %s cluster/track accepted\n",det.Data());
214 //_______________________________________________________________
215 void AliFidutialCut::InitParameters()
218 //Initialize the parameters of the analysis.
220 fEMCALFidutialCut = kTRUE ;
221 fPHOSFidutialCut = kTRUE ;
222 fCTSFidutialCut = kTRUE ;
224 fCTSFidCutMinEta = new TArrayF(1);
225 fCTSFidCutMinEta->SetAt(-0.9,0);
226 fCTSFidCutMaxEta = new TArrayF(1);
227 fCTSFidCutMaxEta->SetAt(0.9,0);
229 fCTSFidCutMinPhi = new TArrayF(1);
230 fCTSFidCutMinPhi->SetAt(0,0);
231 fCTSFidCutMaxPhi = new TArrayF(1);
232 fCTSFidCutMaxPhi->SetAt(360.,0);
234 fEMCALFidCutMinEta = new TArrayF(1);
235 fEMCALFidCutMinEta->SetAt(-0.7,0);
236 fEMCALFidCutMaxEta = new TArrayF(1);
237 fEMCALFidCutMaxEta->SetAt(0.7,0);
239 fEMCALFidCutMinPhi = new TArrayF(1);
240 fEMCALFidCutMinPhi->SetAt(80.,0);
241 fEMCALFidCutMaxPhi = new TArrayF(1);
242 fEMCALFidCutMaxPhi->SetAt(190.,0);
244 fPHOSFidCutMinEta = new TArrayF(1);
245 fPHOSFidCutMinEta->SetAt(-0.13,0);
246 fPHOSFidCutMaxEta = new TArrayF(1);
247 fPHOSFidCutMaxEta->SetAt(0.13,0);
249 fPHOSFidCutMinPhi = new TArrayF(1);
250 fPHOSFidCutMinPhi->SetAt(220.,0);
251 fPHOSFidCutMaxPhi = new TArrayF(1);
252 fPHOSFidCutMaxPhi->SetAt(320.,0);
257 //________________________________________________________________
258 void AliFidutialCut::Print(const Option_t * opt) const
261 //Print some relevant parameters set for the analysis
265 printf("***** Print: %s %s ******\n", GetName(), GetTitle() ) ;
268 Int_t netaregions = fCTSFidCutMaxEta->GetSize();
269 Int_t nphiregions = fCTSFidCutMaxPhi->GetSize();
270 printf(">> CTS Fidutial regions : phi %d eta %d\n", netaregions, nphiregions) ;
271 for(Int_t ieta = 0; ieta < netaregions; ieta++)
272 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fCTSFidCutMinEta->GetAt(ieta), fCTSFidCutMaxEta->GetAt(ieta)) ;
273 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
274 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fCTSFidCutMinPhi->GetAt(iphi), fCTSFidCutMaxPhi->GetAt(iphi)) ;
276 else printf(">>No fidutial cuts in CTS\n");
278 if(fEMCALFidutialCut){
279 Int_t netaregions = fEMCALFidCutMaxEta->GetSize();
280 Int_t nphiregions = fEMCALFidCutMaxPhi->GetSize();
281 printf(">>EMCAL Fidutial regions : phi %d eta %d\n", netaregions, nphiregions) ;
282 for(Int_t ieta = 0; ieta < netaregions; ieta++)
283 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fEMCALFidCutMinEta->GetAt(ieta), fEMCALFidCutMaxEta->GetAt(ieta)) ;
284 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
285 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fEMCALFidCutMinPhi->GetAt(iphi), fEMCALFidCutMaxPhi->GetAt(iphi)) ;
287 else printf(">>No fidutial cuts in EMCAL\n");
289 if(fPHOSFidutialCut){
290 Int_t netaregions = fPHOSFidCutMaxEta->GetSize();
291 Int_t nphiregions = fPHOSFidCutMaxPhi->GetSize();
292 printf(">>PHOS Fidutial regions : phi %d eta %d\n", netaregions, nphiregions) ;
293 for(Int_t ieta = 0; ieta < netaregions; ieta++)
294 printf(" region %d : %3.2f < eta < %3.2f\n", ieta, fPHOSFidCutMinEta->GetAt(ieta), fPHOSFidCutMaxEta->GetAt(ieta)) ;
295 for(Int_t iphi = 0; iphi < nphiregions; iphi++)
296 printf(" region %d : %3.1f < phi < %3.1f\n", iphi, fPHOSFidCutMinPhi->GetAt(iphi), fPHOSFidCutMaxPhi->GetAt(iphi)) ;
298 else printf(">>No fidutial cuts in PHOS\n");
303 //_______________________________________________________________
304 void AliFidutialCut::SetSimpleCTSFidutialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){
306 //Method to set simple acceptance cut to CTS
307 fCTSFidCutMinEta->Set(1);
308 fCTSFidCutMaxEta->Set(1);
309 fCTSFidCutMinPhi->Set(1);
310 fCTSFidCutMaxPhi->Set(1);
312 fCTSFidCutMinEta->SetAt(-eta,0);
313 fCTSFidCutMaxEta->SetAt(eta,0);
314 fCTSFidCutMinPhi->SetAt(minphi,0);
315 fCTSFidCutMaxPhi->SetAt(maxphi,0);
321 //_______________________________________________________________
322 void AliFidutialCut::SetSimpleEMCALFidutialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){
323 //Method to set simple acceptance cut to EMCAL
325 fEMCALFidCutMinEta->Set(1);
326 fEMCALFidCutMaxEta->Set(1);
327 fEMCALFidCutMinPhi->Set(1);
328 fEMCALFidCutMaxPhi->Set(1);
330 fEMCALFidCutMinEta->SetAt(-eta,0);
331 fEMCALFidCutMaxEta->SetAt(eta,0);
332 fEMCALFidCutMinPhi->SetAt(minphi,0);
333 fEMCALFidCutMaxPhi->SetAt(maxphi,0);
338 //_______________________________________________________________
339 void AliFidutialCut::SetSimplePHOSFidutialCut(const Float_t eta, const Float_t minphi, const Float_t maxphi){
341 //Method to set simple acceptance cut to PHOS
342 fPHOSFidCutMinEta->Set(1);
343 fPHOSFidCutMaxEta->Set(1);
344 fPHOSFidCutMinPhi->Set(1);
345 fPHOSFidCutMaxPhi->Set(1);
347 fPHOSFidCutMinEta->SetAt(-eta,0);
348 fPHOSFidCutMaxEta->SetAt(eta,0);
349 fPHOSFidCutMinPhi->SetAt(minphi,0);
350 fPHOSFidCutMaxPhi->SetAt(maxphi,0);