]>
Commit | Line | Data |
---|---|---|
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 | 35 | ClassImp(AliFiducialCut) |
1c5acb87 | 36 | |
37 | ||
b960c7eb | 38 | //________________________________ |
ff45398a | 39 | AliFiducialCut::AliFiducialCut() : |
b960c7eb | 40 | TObject(), |
41 | fEMCALFiducialCut(0), fPHOSFiducialCut(0), fCTSFiducialCut(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) | |
1c5acb87 | 45 | |
46 | { | |
47 | //Ctor | |
b960c7eb | 48 | |
1c5acb87 | 49 | //Initialize parameters |
50 | InitParameters(); | |
b960c7eb | 51 | |
1c5acb87 | 52 | } |
53 | ||
b960c7eb | 54 | //_______________________________ |
55 | AliFiducialCut::~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 | //________________________________________________________________________________ |
78 | Bool_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 | 112 | Bool_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 | 154 | void 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 | 197 | void 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 | //_______________________________________________________________________________________ |
246 | void 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 | //_________________________________________________________________________________________ |
264 | void 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 | //________________________________________________________________________________________ |
281 | void 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 | } |