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