]>
Commit | Line | Data |
---|---|---|
8bdca7f1 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Authors: Friederike Bock, Baldo Sahlmueller * | |
5 | * Version 1.0 * | |
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 | ||
16 | //////////////////////////////////////////////// | |
17 | //--------------------------------------------- | |
18 | // Class handling all kinds of selection cuts for | |
19 | // Photon from EMCAL clusters | |
20 | //--------------------------------------------- | |
21 | //////////////////////////////////////////////// | |
22 | ||
23 | #include "AliCaloPhotonCuts.h" | |
24 | #include "AliAnalysisManager.h" | |
25 | #include "AliInputEventHandler.h" | |
26 | #include "AliMCEventHandler.h" | |
27 | #include "AliAODHandler.h" | |
28 | #include "TH1.h" | |
29 | #include "TH2.h" | |
30 | #include "TF1.h" | |
31 | #include "AliStack.h" | |
32 | #include "AliAODConversionMother.h" | |
d53bf4ac | 33 | #include "AliAODConversionPhoton.h" |
8bdca7f1 | 34 | #include "TObjString.h" |
35 | #include "AliAODEvent.h" | |
36 | #include "AliESDEvent.h" | |
37 | #include "AliCentrality.h" | |
38 | #include "TList.h" | |
39 | #include "TFile.h" | |
40 | #include "AliLog.h" | |
41 | #include "AliV0ReaderV1.h" | |
42 | #include "AliAODMCParticle.h" | |
43 | #include "AliAODMCHeader.h" | |
fd94f234 | 44 | #include "AliPicoTrack.h" |
d53bf4ac | 45 | #include "AliEMCALRecoUtils.h" |
2c75809c | 46 | #include "AliTrackerBase.h" |
8bdca7f1 | 47 | |
48 | class iostream; | |
49 | ||
50 | using namespace std; | |
51 | ||
52 | ClassImp(AliCaloPhotonCuts) | |
53 | ||
54 | ||
55 | const char* AliCaloPhotonCuts::fgkCutNames[AliCaloPhotonCuts::kNCuts] = { | |
fd94f234 | 56 | "ClusterType", //0 0: all, 1: EMCAL, 2: PHOS |
57 | "EtaMin", //1 0: -10, 1: -0.6687, 2: -0,5, 3: -2 | |
58 | "EtaMax", //2 0: 10, 1: 0.66465, 2: 0.5, 3: 2 | |
59 | "PhiMin", //3 0: -10000, 1: 1.39626 | |
60 | "PhiMax", //4 0: 10000, 1: 3.125 | |
61 | "DistanceToBadChannel", //5 0: 0, 1: 5 | |
62 | "Timing", //6 0: no cut | |
63 | "TrackMatching", //7 0: 0, 1: 5 | |
64 | "ExoticCell", //8 0: no cut | |
65 | "MinEnergy", //9 0: no cut, 1: 0.05, 2: 0.1, 3: 0.15, 4: 0.2, 5: 0.3, 6: 0.5, 7: 0.75, 8: 1, 9: 1.25 (all GeV) | |
66 | "MinNCells", //10 0: no cut, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6 | |
8bdca7f1 | 67 | "MinM02", //11 |
68 | "MaxM02", //12 | |
69 | "MinM20", //13 | |
70 | "MaxM20", //14 | |
71 | "MaximumDispersion", //15 | |
72 | "NLM" //16 | |
73 | }; | |
74 | ||
75 | ||
76 | //________________________________________________________________________ | |
77 | AliCaloPhotonCuts::AliCaloPhotonCuts(const char *name,const char *title) : | |
78 | AliAnalysisCuts(name,title), | |
79 | fHistograms(NULL), | |
80 | fClusterType(0), | |
81 | fMinEtaCut(-10), | |
82 | fMaxEtaCut(10), | |
9df9736d | 83 | fUseEtaCut(0), |
8bdca7f1 | 84 | fMinPhiCut(-10000), |
85 | fMaxPhiCut(-10000), | |
9df9736d | 86 | fUsePhiCut(0), |
8bdca7f1 | 87 | fMinDistanceToBadChannel(0), |
9df9736d | 88 | fUseDistanceToBadChannel(0), |
8bdca7f1 | 89 | fMaxTimeDiff(10e10), |
9df9736d | 90 | fUseTimeDiff(0), |
9af60dfb | 91 | fMaxDistTrackToClusterEta(0), |
92 | fMinDistTrackToClusterPhi(0), | |
93 | fMaxDistTrackToClusterPhi(0), | |
9df9736d | 94 | fUseDistTrackToCluster(0), |
4e8dcc76 | 95 | fExtendedMatching(kFALSE), |
8bdca7f1 | 96 | fExoticCell(0), |
9df9736d | 97 | fUseExoticCell(0), |
8bdca7f1 | 98 | fMinEnergy(0), |
9df9736d | 99 | fUseMinEnergy(0), |
8bdca7f1 | 100 | fMinNCells(0), |
9df9736d | 101 | fUseNCells(0), |
8bdca7f1 | 102 | fMaxM02(1000), |
103 | fMinM02(0), | |
9df9736d | 104 | fUseM02(0), |
8bdca7f1 | 105 | fMaxM20(1000), |
106 | fMinM20(0), | |
9df9736d | 107 | fUseM20(0), |
8bdca7f1 | 108 | fMaxDispersion(1000), |
9df9736d | 109 | fUseDispersion(0), |
8bdca7f1 | 110 | fMinNLM(0), |
111 | fMaxNLM(1000), | |
9df9736d | 112 | fUseNLM(0), |
8bdca7f1 | 113 | fCutString(NULL), |
114 | fHistCutIndex(NULL), | |
115 | fHistAcceptanceCuts(NULL), | |
116 | fHistClusterIdentificationCuts(NULL), | |
117 | fHistClusterEtavsPhiBeforeAcc(NULL), | |
118 | fHistClusterEtavsPhiAfterAcc(NULL), | |
119 | fHistClusterEtavsPhiAfterQA(NULL), | |
1a0b989a | 120 | //fHistDistanceToBadChannelBeforeAcc(NULL), |
121 | //fHistDistanceToBadChannelAfterAcc(NULL), | |
8bdca7f1 | 122 | fHistClusterTimevsEBeforeQA(NULL), |
123 | fHistClusterTimevsEAfterQA(NULL), | |
1a0b989a | 124 | //fHistExoticCellBeforeQA(NULL), |
125 | //fHistExoticCellAfterQA(NULL), | |
126 | //fHistNMatchedTracks(NULL), | |
8bdca7f1 | 127 | fHistEnergyOfClusterBeforeQA(NULL), |
128 | fHistEnergyOfClusterAfterQA(NULL), | |
129 | fHistNCellsBeforeQA(NULL), | |
130 | fHistNCellsAfterQA(NULL), | |
131 | fHistM02BeforeQA(NULL), | |
132 | fHistM02AfterQA(NULL), | |
133 | fHistM20BeforeQA(NULL), | |
134 | fHistM20AfterQA(NULL), | |
135 | fHistDispersionBeforeQA(NULL), | |
1a0b989a | 136 | fHistDispersionAfterQA(NULL), |
137 | //fHistNLMBeforeQA(NULL), | |
138 | //fHistNLMAfterQA(NULL), | |
139 | fHistClusterRBeforeQA(NULL), | |
140 | fHistClusterRAfterQA(NULL), | |
4e8dcc76 | 141 | fHistClusterdEtadPhiBeforeQA(NULL), |
1a0b989a | 142 | fHistClusterdEtadPhiAfterQA(NULL), |
143 | fHistDistanceTrackToClusterBeforeQA(NULL), | |
4e8dcc76 | 144 | fHistDistanceTrackToClusterAfterQA(NULL), |
145 | fHistClusterdEtadPhiPosTracksBeforeQA(NULL), | |
146 | fHistClusterdEtadPhiNegTracksBeforeQA(NULL), | |
9af60dfb | 147 | fHistClusterdEtadPhiPosTracksAfterQA(NULL), |
148 | fHistClusterdEtadPhiNegTracksAfterQA(NULL), | |
149 | fHistClusterdEtadPhiPosTracks_P1_BeforeQA(NULL), | |
150 | fHistClusterdEtadPhiPosTracks_P14_BeforeQA(NULL), | |
151 | fHistClusterdEtadPhiPosTracks_P4_BeforeQA(NULL), | |
152 | fHistClusterdEtadPhiNegTracks_P1_BeforeQA(NULL), | |
153 | fHistClusterdEtadPhiNegTracks_P14_BeforeQA(NULL), | |
154 | fHistClusterdEtadPhiNegTracks_P4_BeforeQA(NULL), | |
4e8dcc76 | 155 | fHistClusterdEtadPtBeforeQA(NULL), |
156 | fHistClusterdPhidPtBeforeQA(NULL), | |
157 | fHistClusterM20Pt_dPhiBeforeQA(NULL), | |
158 | fHistClusterM02Pt_dPhiBeforeQA(NULL), | |
159 | fHistClusterM20M02BeforeQA(NULL), | |
160 | fHistClusterM20M02AfterQA(NULL) | |
8bdca7f1 | 161 | { |
162 | for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;} | |
163 | fCutString=new TObjString((GetCutNumber()).Data()); | |
164 | } | |
165 | ||
166 | //________________________________________________________________________ | |
167 | AliCaloPhotonCuts::AliCaloPhotonCuts(const AliCaloPhotonCuts &ref) : | |
168 | AliAnalysisCuts(ref), | |
169 | fHistograms(NULL), | |
9df9736d | 170 | fClusterType(ref.fClusterType), |
8bdca7f1 | 171 | fMinEtaCut(ref.fMinEtaCut), |
172 | fMaxEtaCut(ref.fMaxEtaCut), | |
9df9736d | 173 | fUseEtaCut(ref.fUseEtaCut), |
8bdca7f1 | 174 | fMinPhiCut(ref.fMinPhiCut), |
175 | fMaxPhiCut(ref.fMaxPhiCut), | |
9df9736d | 176 | fUsePhiCut(ref.fUsePhiCut), |
8bdca7f1 | 177 | fMinDistanceToBadChannel(ref.fMinDistanceToBadChannel), |
9df9736d | 178 | fUseDistanceToBadChannel(ref.fUseDistanceToBadChannel), |
8bdca7f1 | 179 | fMaxTimeDiff(ref.fMaxTimeDiff), |
9df9736d | 180 | fUseTimeDiff(ref.fUseTimeDiff), |
9af60dfb | 181 | fMaxDistTrackToClusterEta(ref.fMaxDistTrackToClusterEta), |
182 | fMinDistTrackToClusterPhi(ref.fMinDistTrackToClusterPhi), | |
183 | fMaxDistTrackToClusterPhi(ref.fMaxDistTrackToClusterPhi), | |
9df9736d | 184 | fUseDistTrackToCluster(ref.fUseDistTrackToCluster), |
4e8dcc76 | 185 | fExtendedMatching(ref.fExtendedMatching), |
8bdca7f1 | 186 | fExoticCell(ref.fExoticCell), |
9df9736d | 187 | fUseExoticCell(ref.fUseExoticCell), |
8bdca7f1 | 188 | fMinEnergy(ref.fMinEnergy), |
9df9736d | 189 | fUseMinEnergy(ref.fUseMinEnergy), |
8bdca7f1 | 190 | fMinNCells(ref.fMinNCells), |
9df9736d | 191 | fUseNCells(ref.fUseNCells), |
8bdca7f1 | 192 | fMaxM02(ref.fMaxM02), |
193 | fMinM02(ref.fMinM02), | |
9df9736d | 194 | fUseM02(ref.fUseM02), |
8bdca7f1 | 195 | fMaxM20(ref.fMaxM20), |
196 | fMinM20(ref.fMinM20), | |
9df9736d | 197 | fUseM20(ref.fUseDispersion), |
8bdca7f1 | 198 | fMaxDispersion(ref.fMaxDispersion), |
9df9736d | 199 | fUseDispersion(ref.fUseDispersion), |
8bdca7f1 | 200 | fMinNLM(ref.fMinNLM), |
201 | fMaxNLM(ref.fMaxNLM), | |
9df9736d | 202 | fUseNLM(ref.fUseNLM), |
8bdca7f1 | 203 | fCutString(NULL), |
204 | fHistCutIndex(NULL), | |
205 | fHistAcceptanceCuts(NULL), | |
206 | fHistClusterIdentificationCuts(NULL), | |
207 | fHistClusterEtavsPhiBeforeAcc(NULL), | |
208 | fHistClusterEtavsPhiAfterAcc(NULL), | |
209 | fHistClusterEtavsPhiAfterQA(NULL), | |
1a0b989a | 210 | //fHistDistanceToBadChannelBeforeAcc(NULL), |
211 | //fHistDistanceToBadChannelAfterAcc(NULL), | |
8bdca7f1 | 212 | fHistClusterTimevsEBeforeQA(NULL), |
213 | fHistClusterTimevsEAfterQA(NULL), | |
1a0b989a | 214 | //fHistExoticCellBeforeQA(NULL), |
215 | //fHistExoticCellAfterQA(NULL), | |
216 | //fHistNMatchedTracks(NULL), | |
8bdca7f1 | 217 | fHistEnergyOfClusterBeforeQA(NULL), |
218 | fHistEnergyOfClusterAfterQA(NULL), | |
219 | fHistNCellsBeforeQA(NULL), | |
220 | fHistNCellsAfterQA(NULL), | |
221 | fHistM02BeforeQA(NULL), | |
222 | fHistM02AfterQA(NULL), | |
223 | fHistM20BeforeQA(NULL), | |
224 | fHistM20AfterQA(NULL), | |
225 | fHistDispersionBeforeQA(NULL), | |
1a0b989a | 226 | fHistDispersionAfterQA(NULL), |
227 | //fHistNLMBeforeQA(NULL), | |
228 | //fHistNLMAfterQA(NULL), | |
229 | fHistClusterRBeforeQA(NULL), | |
230 | fHistClusterRAfterQA(NULL), | |
4e8dcc76 | 231 | fHistClusterdEtadPhiBeforeQA(NULL), |
1a0b989a | 232 | fHistClusterdEtadPhiAfterQA(NULL), |
233 | fHistDistanceTrackToClusterBeforeQA(NULL), | |
4e8dcc76 | 234 | fHistDistanceTrackToClusterAfterQA(NULL), |
235 | fHistClusterdEtadPhiPosTracksBeforeQA(NULL), | |
236 | fHistClusterdEtadPhiNegTracksBeforeQA(NULL), | |
9af60dfb | 237 | fHistClusterdEtadPhiPosTracksAfterQA(NULL), |
238 | fHistClusterdEtadPhiNegTracksAfterQA(NULL), | |
239 | fHistClusterdEtadPhiPosTracks_P1_BeforeQA(NULL), | |
240 | fHistClusterdEtadPhiPosTracks_P14_BeforeQA(NULL), | |
241 | fHistClusterdEtadPhiPosTracks_P4_BeforeQA(NULL), | |
242 | fHistClusterdEtadPhiNegTracks_P1_BeforeQA(NULL), | |
243 | fHistClusterdEtadPhiNegTracks_P14_BeforeQA(NULL), | |
244 | fHistClusterdEtadPhiNegTracks_P4_BeforeQA(NULL), | |
4e8dcc76 | 245 | fHistClusterdEtadPtBeforeQA(NULL), |
246 | fHistClusterdPhidPtBeforeQA(NULL), | |
247 | fHistClusterM20Pt_dPhiBeforeQA(NULL), | |
248 | fHistClusterM02Pt_dPhiBeforeQA(NULL), | |
249 | fHistClusterM20M02BeforeQA(NULL), | |
250 | fHistClusterM20M02AfterQA(NULL) | |
8bdca7f1 | 251 | { |
252 | // Copy Constructor | |
253 | for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=ref.fCuts[jj];} | |
254 | fCutString=new TObjString((GetCutNumber()).Data()); | |
255 | ||
256 | } | |
257 | ||
258 | ||
259 | //________________________________________________________________________ | |
260 | AliCaloPhotonCuts::~AliCaloPhotonCuts() { | |
261 | // Destructor | |
262 | //Deleting fHistograms leads to seg fault it it's added to output collection of a task | |
263 | // if(fHistograms) | |
264 | // delete fHistograms; | |
265 | // fHistograms = NULL; | |
266 | if(fCutString != NULL){ | |
267 | delete fCutString; | |
268 | fCutString = NULL; | |
269 | } | |
270 | } | |
271 | ||
272 | //________________________________________________________________________ | |
273 | void AliCaloPhotonCuts::InitCutHistograms(TString name){ | |
274 | ||
275 | // Initialize Cut Histograms for QA (only initialized and filled if function is called) | |
276 | TH1::AddDirectory(kFALSE); | |
277 | ||
278 | if(fHistograms != NULL){ | |
279 | delete fHistograms; | |
280 | fHistograms=NULL; | |
281 | } | |
282 | if(fHistograms==NULL){ | |
283 | fHistograms=new TList(); | |
284 | fHistograms->SetOwner(kTRUE); | |
285 | if(name=="")fHistograms->SetName(Form("CaloCuts_%s",GetCutNumber().Data())); | |
286 | else fHistograms->SetName(Form("%s_%s",name.Data(),GetCutNumber().Data())); | |
287 | } | |
288 | ||
289 | // IsPhotonSelected | |
290 | fHistCutIndex=new TH1F(Form("IsPhotonSelected %s",GetCutNumber().Data()),"IsPhotonSelected",5,-0.5,4.5); | |
291 | fHistCutIndex->GetXaxis()->SetBinLabel(kPhotonIn+1,"in"); | |
292 | fHistCutIndex->GetXaxis()->SetBinLabel(kDetector+1,"detector"); | |
293 | fHistCutIndex->GetXaxis()->SetBinLabel(kAcceptance+1,"acceptance"); | |
294 | fHistCutIndex->GetXaxis()->SetBinLabel(kClusterQuality+1,"cluster QA"); | |
295 | fHistCutIndex->GetXaxis()->SetBinLabel(kPhotonOut+1,"out"); | |
296 | fHistograms->Add(fHistCutIndex); | |
297 | ||
298 | // Acceptance Cuts | |
299 | fHistAcceptanceCuts=new TH1F(Form("AcceptanceCuts %s",GetCutNumber().Data()),"AcceptanceCuts",5,-0.5,4.5); | |
300 | fHistAcceptanceCuts->GetXaxis()->SetBinLabel(1,"in"); | |
301 | fHistAcceptanceCuts->GetXaxis()->SetBinLabel(2,"eta"); | |
302 | fHistAcceptanceCuts->GetXaxis()->SetBinLabel(3,"phi"); | |
303 | fHistAcceptanceCuts->GetXaxis()->SetBinLabel(4,"distance to bad channel"); | |
304 | fHistAcceptanceCuts->GetXaxis()->SetBinLabel(5,"out"); | |
305 | fHistograms->Add(fHistAcceptanceCuts); | |
306 | ||
307 | // Cluster Cuts | |
9df9736d | 308 | fHistClusterIdentificationCuts =new TH1F(Form("ClusterQualityCuts %s",GetCutNumber().Data()),"ClusterQualityCuts",11,-0.5,10.5); |
8bdca7f1 | 309 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(1,"in"); |
310 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(2,"timing"); | |
311 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(3,"track matching"); | |
312 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(4,"Exotics"); | |
313 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(5,"minimum energy"); | |
9df9736d | 314 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(6,"minimum NCells"); |
315 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(7,"M02"); | |
316 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(8,"M20"); | |
317 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(9,"dispersion"); | |
318 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(10,"NLM"); | |
319 | fHistClusterIdentificationCuts->GetXaxis()->SetBinLabel(11,"out"); | |
8bdca7f1 | 320 | fHistograms->Add(fHistClusterIdentificationCuts); |
321 | ||
322 | // Acceptance related histogramms | |
0e006b2c | 323 | fHistClusterEtavsPhiBeforeAcc=new TH2F(Form("EtaPhi_beforeAcceptance %s",GetCutNumber().Data()),"EtaPhi_beforeAcceptance",430,0,2*TMath::Pi(),96,-0.7,0.7); // 462->430, 110->96 |
8bdca7f1 | 324 | fHistograms->Add(fHistClusterEtavsPhiBeforeAcc); |
0e006b2c | 325 | fHistClusterEtavsPhiAfterAcc=new TH2F(Form("EtaPhi_afterAcceptance %s",GetCutNumber().Data()),"EtaPhi_afterAcceptance",430,0,2*TMath::Pi(),96,-0.7,0.7); // 462->430, 110->96 |
8bdca7f1 | 326 | fHistograms->Add(fHistClusterEtavsPhiAfterAcc); |
0e006b2c | 327 | fHistClusterEtavsPhiAfterQA=new TH2F(Form("EtaPhi_afterClusterQA %s",GetCutNumber().Data()),"EtaPhi_afterClusterQA",430,0,2*TMath::Pi(),96,-0.7,0.7); // 462->430, 110->96 |
8bdca7f1 | 328 | fHistograms->Add(fHistClusterEtavsPhiAfterQA); |
1a0b989a | 329 | //fHistDistanceToBadChannelBeforeAcc = new TH1F(Form("DistanceToBadChannel_beforeAcceptance %s",GetCutNumber().Data()),"DistanceToBadChannel_beforeAcceptance",200,0,40); |
330 | //fHistograms->Add(fHistDistanceToBadChannelBeforeAcc); | |
331 | //fHistDistanceToBadChannelAfterAcc = new TH1F(Form("DistanceToBadChannel_afterAcceptance %s",GetCutNumber().Data()),"DistanceToBadChannel_afterAcceptance",200,0,40); | |
332 | //fHistograms->Add(fHistDistanceToBadChannelAfterAcc); | |
8bdca7f1 | 333 | |
334 | // Cluster quality related histograms | |
9af60dfb | 335 | Double_t timeMin = -2e-6; |
336 | Double_t timeMax = 8e-6; | |
b6f448d7 | 337 | if (GetClusterType() == 1){ |
338 | timeMin = -2e-7; | |
339 | timeMax = 12e-7; | |
340 | } | |
9af60dfb | 341 | fHistClusterTimevsEBeforeQA=new TH2F(Form("ClusterTimeVsE_beforeClusterQA %s",GetCutNumber().Data()),"ClusterTimeVsE_beforeClusterQA",800,timeMin,timeMax,100,0,40); |
8bdca7f1 | 342 | fHistograms->Add(fHistClusterTimevsEBeforeQA); |
9af60dfb | 343 | fHistClusterTimevsEAfterQA=new TH2F(Form("ClusterTimeVsE_afterClusterQA %s",GetCutNumber().Data()),"ClusterTimeVsE_afterClusterQA",800,timeMin,timeMax,100,0,40); |
8bdca7f1 | 344 | fHistograms->Add(fHistClusterTimevsEAfterQA); |
1a0b989a | 345 | //fHistExoticCellBeforeQA=new TH2F(Form("ExoticCell_beforeClusterQA %s",GetCutNumber().Data()),"ExoticCell_beforeClusterQA",400,0,40,50,0.75,1); |
346 | //fHistograms->Add(fHistExoticCellBeforeQA); | |
347 | //fHistExoticCellAfterQA=new TH2F(Form("ExoticCell_afterClusterQA %s",GetCutNumber().Data()),"ExoticCell_afterClusterQA",400,0,40,50,0.75,1); | |
348 | //fHistograms->Add(fHistExoticCellAfterQA); | |
349 | //fHistNMatchedTracks = new TH1F(Form("NMatchedTracks_%s",GetCutNumber().Data()),"NMatchedTracks",22,-1.5,20.5); | |
350 | //fHistograms->Add(fHistNMatchedTracks); | |
8bdca7f1 | 351 | fHistEnergyOfClusterBeforeQA = new TH1F(Form("EnergyOfCluster_beforeClusterQA %s",GetCutNumber().Data()),"EnergyOfCluster_beforeClusterQA",300,0,30); |
352 | fHistograms->Add(fHistEnergyOfClusterBeforeQA); | |
353 | fHistEnergyOfClusterAfterQA = new TH1F(Form("EnergyOfCluster_afterClusterQA %s",GetCutNumber().Data()),"EnergyOfCluster_afterClusterQA",300,0,30); | |
354 | fHistograms->Add(fHistEnergyOfClusterAfterQA); | |
355 | fHistNCellsBeforeQA = new TH1F(Form("NCellPerCluster_beforeClusterQA %s",GetCutNumber().Data()),"NCellPerCluster_beforeClusterQA",50,0,50); | |
356 | fHistograms->Add(fHistNCellsBeforeQA); | |
357 | fHistNCellsAfterQA = new TH1F(Form("NCellPerCluster_afterClusterQA %s",GetCutNumber().Data()),"NCellPerCluster_afterClusterQA",50,0,50); | |
358 | fHistograms->Add(fHistNCellsAfterQA); | |
72cfe7c8 | 359 | fHistM02BeforeQA = new TH1F(Form("M02_beforeClusterQA %s",GetCutNumber().Data()),"M02_beforeClusterQA",400,0,5); |
8bdca7f1 | 360 | fHistograms->Add(fHistM02BeforeQA); |
72cfe7c8 | 361 | fHistM02AfterQA = new TH1F(Form("M02_afterClusterQA %s",GetCutNumber().Data()),"M02_afterClusterQA",400,0,5); |
8bdca7f1 | 362 | fHistograms->Add(fHistM02AfterQA); |
72cfe7c8 | 363 | fHistM20BeforeQA = new TH1F(Form("M20_beforeClusterQA %s",GetCutNumber().Data()),"M20_beforeClusterQA",400,0,2.5); |
8bdca7f1 | 364 | fHistograms->Add(fHistM20BeforeQA); |
72cfe7c8 | 365 | fHistM20AfterQA = new TH1F(Form("M20_afterClusterQA %s",GetCutNumber().Data()),"M20_afterClusterQA",400,0,2.5); |
8bdca7f1 | 366 | fHistograms->Add(fHistM20AfterQA); |
367 | fHistDispersionBeforeQA = new TH1F(Form("Dispersion_beforeClusterQA %s",GetCutNumber().Data()),"Dispersion_beforeClusterQA",100,0,4); | |
368 | fHistograms->Add(fHistDispersionBeforeQA); | |
369 | fHistDispersionAfterQA = new TH1F(Form("Dispersion_afterClusterQA %s",GetCutNumber().Data()),"Dispersion_afterClusterQA",100,0,4); | |
370 | fHistograms->Add(fHistDispersionAfterQA); | |
1a0b989a | 371 | //fHistNLMBeforeQA = new TH1F(Form("NLM_beforeClusterQA %s",GetCutNumber().Data()),"NLM_beforeClusterQA",10,0,10); |
372 | //fHistograms->Add(fHistNLMBeforeQA); | |
373 | //fHistNLMAfterQA = new TH1F(Form("NLM_afterClusterQA %s",GetCutNumber().Data()),"NLM_afterClusterQA",10,0,10); | |
374 | //fHistograms->Add(fHistNLMAfterQA); | |
375 | ||
376 | //TrackMatching histograms | |
843ebf3b | 377 | if(fUseDistTrackToCluster) { |
1a0b989a | 378 | fHistClusterRBeforeQA = new TH1F(Form("R_Cluster_beforeClusterQA %s",GetCutNumber().Data()),"R of cluster",200,400,500); |
379 | fHistograms->Add(fHistClusterRBeforeQA); | |
380 | fHistClusterRAfterQA = new TH1F(Form("R_Cluster_afterClusterQA %s",GetCutNumber().Data()),"R of cluster_matched",200,400,500); | |
381 | fHistograms->Add(fHistClusterRAfterQA); | |
4e8dcc76 | 382 | fHistClusterdEtadPhiBeforeQA=new TH2F(Form("dEtaVsdPhi_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); |
383 | fHistograms->Add(fHistClusterdEtadPhiBeforeQA); | |
1a0b989a | 384 | fHistClusterdEtadPhiAfterQA=new TH2F(Form("dEtaVsdPhi_afterClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_afterClusterQA",240,-0.3,0.3,240,-0.3,0.3); |
385 | fHistograms->Add(fHistClusterdEtadPhiAfterQA); | |
386 | fHistDistanceTrackToClusterBeforeQA = new TH1F(Form("DistanceToTrack_beforeClusterQA %s",GetCutNumber().Data()),"DistanceToTrack_beforeClusterQA",200,0,2); | |
387 | fHistograms->Add(fHistDistanceTrackToClusterBeforeQA); | |
388 | fHistDistanceTrackToClusterAfterQA = new TH1F(Form("DistanceToTrack_afterClusterQA %s",GetCutNumber().Data()),"DistanceToTrack_afterClusterQA",200,0,2); | |
389 | fHistograms->Add(fHistDistanceTrackToClusterAfterQA); | |
8bdca7f1 | 390 | |
4e8dcc76 | 391 | if(fExtendedMatching){ |
392 | fHistClusterdEtadPhiPosTracksBeforeQA = new TH2F(Form("dEtaVsdPhi_posTracks_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_posTracks_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
393 | fHistograms->Add(fHistClusterdEtadPhiPosTracksBeforeQA); | |
394 | fHistClusterdEtadPhiNegTracksBeforeQA = new TH2F(Form("dEtaVsdPhi_negTracks_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_negTracks_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
395 | fHistograms->Add(fHistClusterdEtadPhiNegTracksBeforeQA); | |
9af60dfb | 396 | fHistClusterdEtadPhiPosTracksAfterQA = new TH2F(Form("dEtaVsdPhi_posTracks_afterClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_posTracks_afterClusterQA",240,-0.3,0.3,240,-0.3,0.3); |
397 | fHistograms->Add(fHistClusterdEtadPhiPosTracksAfterQA); | |
398 | fHistClusterdEtadPhiNegTracksAfterQA = new TH2F(Form("dEtaVsdPhi_negTracks_afterClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_negTracks_afterClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
399 | fHistograms->Add(fHistClusterdEtadPhiNegTracksAfterQA); | |
400 | fHistClusterdEtadPhiPosTracks_P1_BeforeQA = new TH2F(Form("dEtaVsdPhi_posTracks_P<1_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_posTracks_P<1_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
401 | fHistograms->Add(fHistClusterdEtadPhiPosTracks_P1_BeforeQA); | |
402 | fHistClusterdEtadPhiPosTracks_P14_BeforeQA = new TH2F(Form("dEtaVsdPhi_posTracks_1<P<4_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_posTracks_1<P<4_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
403 | fHistograms->Add(fHistClusterdEtadPhiPosTracks_P14_BeforeQA); | |
404 | fHistClusterdEtadPhiPosTracks_P4_BeforeQA = new TH2F(Form("dEtaVsdPhi_posTracks_P>4_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_posTracks_P>4_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
405 | fHistograms->Add(fHistClusterdEtadPhiPosTracks_P4_BeforeQA); | |
406 | fHistClusterdEtadPhiNegTracks_P1_BeforeQA= new TH2F(Form("dEtaVsdPhi_negTrack_P<1s_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_negTrack_P<1s_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
407 | fHistograms->Add(fHistClusterdEtadPhiNegTracks_P1_BeforeQA); | |
408 | fHistClusterdEtadPhiNegTracks_P14_BeforeQA = new TH2F(Form("dEtaVsdPhi_negTracks_1<P<4_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_negTracks_1<P<4_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
409 | fHistograms->Add(fHistClusterdEtadPhiNegTracks_P14_BeforeQA); | |
410 | fHistClusterdEtadPhiNegTracks_P4_BeforeQA = new TH2F(Form("dEtaVsdPhi_negTracks_P>4_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsdPhi_negTracks_P>4_beforeClusterQA",240,-0.3,0.3,240,-0.3,0.3); | |
411 | fHistograms->Add(fHistClusterdEtadPhiNegTracks_P4_BeforeQA); | |
4e8dcc76 | 412 | fHistClusterdEtadPtBeforeQA = new TH2F(Form("dEtaVsPt_beforeClusterQA %s",GetCutNumber().Data()),"dEtaVsPt_beforeClusterQA",240,-0.3,0.3,250,0,25); |
413 | fHistograms->Add(fHistClusterdEtadPtBeforeQA); | |
414 | fHistClusterdPhidPtBeforeQA = new TH2F(Form("dPhiVsPt_beforeClusterQA %s",GetCutNumber().Data()),"dPhiVsPt_beforeClusterQA",480,-0.6,0.6,250,0,25); | |
415 | fHistograms->Add(fHistClusterdPhidPtBeforeQA); | |
416 | fHistClusterM20Pt_dPhiBeforeQA = new TH2F(Form("M20VsPt_dPhi_beforeClusterQA %s",GetCutNumber().Data()),"M20VsPt_dPhi_beforeClusterQA",200,0,2.5,250,0,25); | |
417 | fHistograms->Add(fHistClusterM20Pt_dPhiBeforeQA); | |
418 | fHistClusterM02Pt_dPhiBeforeQA = new TH2F(Form("M02VsPt_dPhi_beforeClusterQA %s",GetCutNumber().Data()),"M20VsPt_dPhi_beforeClusterQA",400,0,5,250,0,25); | |
419 | fHistograms->Add(fHistClusterM02Pt_dPhiBeforeQA); | |
420 | fHistClusterM20M02BeforeQA = new TH2F(Form("M20VsM02_beforeClusterQA %s",GetCutNumber().Data()),"M20VsM02_beforeClusterQA",200,0,2.5,400,0,5); | |
421 | fHistograms->Add(fHistClusterM20M02BeforeQA); | |
422 | fHistClusterM20M02AfterQA = new TH2F(Form("M20VsM02_afterClusterQA %s",GetCutNumber().Data()),"M20VsM02_afterClusterQA",200,0,2.5,400,0,5); | |
423 | fHistograms->Add(fHistClusterM20M02AfterQA); | |
424 | } | |
425 | } | |
8bdca7f1 | 426 | TH1::AddDirectory(kTRUE); |
427 | } | |
428 | ||
d53bf4ac | 429 | |
8bdca7f1 | 430 | ///________________________________________________________________________ |
d53bf4ac | 431 | Bool_t AliCaloPhotonCuts::ClusterIsSelectedMC(TParticle *particle,AliStack *fMCStack){ |
8bdca7f1 | 432 | // MonteCarlo Photon Selection |
433 | ||
d53bf4ac | 434 | if(!fMCStack)return kFALSE; |
435 | ||
436 | if (particle->GetPdgCode() == 22){ | |
437 | ||
438 | if ( particle->Eta() < fMinEtaCut || particle->Eta() > fMaxEtaCut ) return kFALSE; | |
439 | if ( particle->Phi() < fMinPhiCut || particle->Phi() > fMaxPhiCut ) return kFALSE; | |
440 | ||
441 | if(particle->GetMother(0) >-1 && fMCStack->Particle(particle->GetMother(0))->GetPdgCode() == 22){ | |
442 | return kFALSE; // no photon as mothers! | |
443 | } | |
444 | if(particle->GetMother(0) >= fMCStack->GetNprimary()){ | |
445 | return kFALSE; // the gamma has a mother, and it is not a primary particle | |
446 | } | |
447 | return kTRUE; | |
448 | } | |
449 | return kFALSE; | |
8bdca7f1 | 450 | } |
451 | ///________________________________________________________________________ | |
d53bf4ac | 452 | Bool_t AliCaloPhotonCuts::ClusterIsSelectedAODMC(AliAODMCParticle *particle,TClonesArray *aodmcArray){ |
453 | // MonteCarlo Photon Selection | |
454 | ||
455 | if(!aodmcArray)return kFALSE; | |
456 | if (particle->GetPdgCode() == 22){ | |
457 | if ( particle->Eta() < fMinEtaCut || particle->Eta() > fMaxEtaCut ) return kFALSE; | |
458 | if ( particle->Phi() < fMinPhiCut || particle->Phi() > fMaxPhiCut ) return kFALSE; | |
459 | if(particle->GetMother() > -1){ | |
460 | if((static_cast<AliAODMCParticle*>(aodmcArray->At(particle->GetMother())))->GetPdgCode() == 22){ | |
461 | return kFALSE; // no photon as mothers! | |
462 | } | |
463 | if(!(static_cast<AliAODMCParticle*>(aodmcArray->At(particle->GetMother()))->IsPrimary())){ | |
464 | return kFALSE; // the gamma has a mother, and it is not a primary particle | |
465 | } | |
466 | } | |
467 | return kTRUE; // return in case of accepted gamma | |
468 | } | |
469 | return kFALSE; | |
470 | } | |
8bdca7f1 | 471 | |
472 | ||
473 | ||
474 | ///________________________________________________________________________ | |
475 | // This function selects the clusters based on their quality criteria | |
476 | ///________________________________________________________________________ | |
477 | Bool_t AliCaloPhotonCuts::ClusterQualityCuts(AliVCluster* cluster, AliVEvent *event, Bool_t isMC) | |
478 | { // Specific Photon Cuts | |
9af60dfb | 479 | if(event){} // suppress warning |
8bdca7f1 | 480 | |
481 | Int_t cutIndex = 0; | |
482 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); | |
483 | cutIndex++; | |
484 | ||
d53bf4ac | 485 | // Double_t minR = 999.0; |
e13e00c9 | 486 | // get the minimum radius of tracks to cluster |
d53bf4ac | 487 | // if(fHistDistanceTrackToClusterBeforeQA || fHistDistanceTrackToClusterAfterQA){ |
fdc1d2db | 488 | // Float_t pos[3]; |
489 | // cluster->GetPosition(pos); // Get cluster position | |
490 | // | |
491 | // TVector3 cp(pos); | |
492 | // int NtrMatched = 0; | |
493 | // NtrMatched = cluster->GetNTracksMatched(); | |
494 | // fHistNMatchedTracks->Fill(NtrMatched); | |
495 | // //loop over tracks for Jet QA | |
496 | // TList *l = event->GetList(); | |
497 | // TClonesArray *tracks = dynamic_cast<TClonesArray*>(l->FindObject("Tracks")); | |
498 | // for(int itrack = 0; itrack < NtrMatched; itrack++){ | |
499 | // AliVTrack *trackcluster = static_cast<AliVTrack*>(tracks->At(itrack)); | |
500 | // if (! trackcluster) { | |
501 | // AliError(Form("Couldn't get ESD track %d\n", itrack)); | |
502 | // continue; | |
503 | // } | |
504 | // Double_t dphi = -999.0; | |
505 | // Double_t deta = -999.0; | |
506 | // AliPicoTrack::GetEtaPhiDiff(trackcluster, cluster, dphi, deta); | |
e13e00c9 | 507 | // cout << "here" << endl; |
fdc1d2db | 508 | // Double_t dr = sqrt(dphi*dphi + deta+deta); |
509 | // if(dr < minR) | |
510 | // minR = dr; | |
511 | // }//loop over tracks | |
d53bf4ac | 512 | // } |
8bdca7f1 | 513 | |
514 | // Fill Histos before Cuts | |
515 | if(fHistClusterTimevsEBeforeQA) fHistClusterTimevsEBeforeQA->Fill(cluster->GetTOF(), cluster->E()); | |
516 | // if(fHistExoticCellBeforeQA) fHistExoticCellBeforeQA->Fill(cluster->E(), ); | |
d53bf4ac | 517 | // if(fHistDistanceTrackToClusterBeforeQA) fHistDistanceTrackToClusterBeforeQA->Fill(minR); |
8bdca7f1 | 518 | if(fHistEnergyOfClusterBeforeQA) fHistEnergyOfClusterBeforeQA->Fill(cluster->E()); |
519 | if(fHistNCellsBeforeQA) fHistNCellsBeforeQA->Fill(cluster->GetNCells()); | |
520 | if(fHistM02BeforeQA) fHistM02BeforeQA->Fill(cluster->GetM02()); | |
521 | if(fHistM20BeforeQA) fHistM20BeforeQA->Fill(cluster->GetM20()); | |
522 | if(fHistDispersionBeforeQA) fHistDispersionBeforeQA->Fill(cluster->GetDispersion()); | |
523 | // if(fHistNLMBeforeQA) fHistNLMBeforeQA->Fill(cluster->GetNExMax()); | |
524 | ||
525 | // Check wether timing is ok | |
9df9736d | 526 | if (fUseTimeDiff){ |
527 | if(abs(cluster->GetTOF()) > fMaxTimeDiff && !isMC){ | |
528 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //1 | |
529 | return kFALSE; | |
530 | } | |
531 | } | |
8bdca7f1 | 532 | cutIndex++; //2, next cut |
533 | ||
534 | // Minimum distance to track | |
d53bf4ac | 535 | // if (fUseDistTrackToCluster){ |
536 | // Float_t pos[3]; | |
537 | // cluster->GetPosition(pos); // Get cluster position | |
538 | // TVector3 cp(pos); | |
539 | // int NtrMatched = 0; | |
540 | // NtrMatched = cluster->GetNTracksMatched(); | |
541 | // fHistNMatchedTracks->Fill(NtrMatched); | |
542 | // if(NtrMatched > 0){ | |
543 | // //loop over tracks for QA | |
544 | // TList *l = event->GetList(); | |
545 | // TClonesArray *tracks = dynamic_cast<TClonesArray*>(l->FindObject("Tracks")); | |
546 | // | |
547 | // Double_t dphi = 999.0; | |
548 | // Double_t deta = 999.0; | |
549 | // Double_t dr2 = 999.0; | |
550 | // | |
551 | // for(int itrack = 0; itrack < NtrMatched; itrack++){ | |
552 | // AliVTrack *trackcluster = NULL; | |
553 | // trackcluster = static_cast<AliVTrack*>(tracks->At(itrack)); | |
554 | // if (! trackcluster) { | |
555 | // AliError(Form("Couldn't get ESD track %d\n", itrack)); | |
556 | // continue; | |
557 | // } | |
558 | // AliPicoTrack::GetEtaPhiDiff(trackcluster, cluster, dphi, deta); | |
559 | // dr2 = dphi*dphi + deta+deta; | |
560 | // //cout << dr << endl; | |
561 | // if(dr2 < fMinDistTrackToCluster*fMinDistTrackToCluster){ | |
562 | // // if(dphi < fMinDistTrackToCluster || deta < fMinDistTrackToCluster){ | |
563 | // if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //2 | |
564 | // return kFALSE; | |
565 | // } | |
566 | // | |
567 | // }//loop over tracks | |
568 | // } | |
569 | // // if(cluster->GetEmcCpvDistance() < fMinDistTrackToCluster){ | |
570 | // // if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //2 | |
571 | // // return kFALSE; | |
572 | // // } | |
573 | // } | |
8bdca7f1 | 574 | cutIndex++;//3, next cut |
575 | ||
576 | // exotic cell cut --IMPLEMENT LATER--- | |
577 | // if(!AcceptanceCuts(photon)){ | |
578 | // if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //3 | |
579 | // return kFALSE; | |
580 | // } | |
581 | cutIndex++; //4, next cut | |
582 | ||
583 | // minimum cell energy cut | |
9df9736d | 584 | if (fUseMinEnergy){ |
585 | if(cluster->E() < fMinEnergy){ | |
586 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //4 | |
587 | return kFALSE; | |
588 | } | |
589 | } | |
8bdca7f1 | 590 | cutIndex++; //5, next cut |
591 | ||
592 | // minimum number of cells | |
9df9736d | 593 | if (fUseNCells){ |
594 | if(cluster->GetNCells() < fMinNCells) { | |
595 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //5 | |
596 | return kFALSE; | |
597 | } | |
598 | } | |
8bdca7f1 | 599 | cutIndex++; //6, next cut |
600 | ||
601 | // M02 cut | |
9df9736d | 602 | if (fUseM02){ |
603 | if( cluster->GetM02()< fMinM02 || cluster->GetM02() > fMaxM02 ) { | |
604 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //6 | |
605 | return kFALSE; | |
606 | } | |
607 | } | |
8bdca7f1 | 608 | cutIndex++; //7, next cut |
609 | ||
610 | // M20 cut | |
9df9736d | 611 | if (fUseM20){ |
612 | if( cluster->GetM20()< fMinM20 || cluster->GetM20() > fMaxM20 ) { | |
613 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //7 | |
614 | return kFALSE; | |
615 | } | |
616 | } | |
8bdca7f1 | 617 | cutIndex++; //8, next cut |
618 | ||
619 | // dispersion cut | |
9df9736d | 620 | if (fUseDispersion){ |
621 | if( cluster->GetDispersion()> fMaxDispersion) { | |
622 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //8 | |
623 | return kFALSE; | |
624 | } | |
625 | } | |
8bdca7f1 | 626 | cutIndex++; //9, next cut |
627 | ||
628 | // NLM cut --IMPLEMENT LATER--- | |
9df9736d | 629 | // if (fUseNLM){ |
630 | // if( cluster->GetDispersion()> fMaxDispersion) { | |
631 | // if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //9 | |
632 | // return kFALSE; | |
633 | // } | |
634 | // } | |
8bdca7f1 | 635 | cutIndex++; //9, next cut |
636 | ||
637 | // DONE with selecting photons | |
638 | if(fHistClusterIdentificationCuts)fHistClusterIdentificationCuts->Fill(cutIndex); //10 | |
639 | ||
640 | // Histos after Cuts | |
1baaaea0 | 641 | // Double_t vertex[3] = {0,0,0}; |
4e8dcc76 | 642 | // event->GetPrimaryVertex()->GetXYZ(vertex); |
8bdca7f1 | 643 | // TLorentzvector with cluster |
1baaaea0 | 644 | // TLorentzVector clusterVector; |
645 | // cluster->GetMomentum(clusterVector,vertex); | |
646 | ||
647 | Float_t clusPos[3]={0,0,0}; | |
648 | cluster->GetPosition(clusPos); | |
649 | TVector3 clusterVector(clusPos[0],clusPos[1],clusPos[2]); | |
8bdca7f1 | 650 | Double_t etaCluster = clusterVector.Eta(); |
651 | Double_t phiCluster = clusterVector.Phi(); | |
0e006b2c | 652 | if (phiCluster < 0) phiCluster= phiCluster+ 2*TMath::Pi(); |
653 | ||
8bdca7f1 | 654 | if(fHistClusterEtavsPhiAfterQA) fHistClusterEtavsPhiAfterQA->Fill(phiCluster,etaCluster); |
655 | if(fHistClusterTimevsEAfterQA) fHistClusterTimevsEAfterQA->Fill(cluster->GetTOF(), cluster->E()); | |
656 | // if(fHistExoticCellAfterQA) fHistExoticCellAfterQA->Fill(cluster->E(), ); | |
d53bf4ac | 657 | // if(fHistDistanceTrackToClusterAfterQA) fHistDistanceTrackToClusterAfterQA->Fill(minR); |
8bdca7f1 | 658 | if(fHistEnergyOfClusterAfterQA) fHistEnergyOfClusterAfterQA->Fill(cluster->E()); |
659 | if(fHistNCellsAfterQA) fHistNCellsAfterQA->Fill(cluster->GetNCells()); | |
660 | if(fHistM02AfterQA) fHistM02AfterQA->Fill(cluster->GetM02()); | |
661 | if(fHistM20AfterQA) fHistM20AfterQA->Fill(cluster->GetM20()); | |
662 | if(fHistDispersionAfterQA) fHistDispersionAfterQA->Fill(cluster->GetDispersion()); | |
663 | // if(fHistNLMBeforeQA) fHistNLMAfterQA->Fill(cluster->GetNExMax()); | |
664 | ||
665 | return kTRUE; | |
666 | ||
667 | } | |
668 | ||
669 | ||
670 | ///________________________________________________________________________ | |
671 | Bool_t AliCaloPhotonCuts::ClusterIsSelected(AliVCluster *cluster, AliVEvent * event, Bool_t isMC) | |
672 | { | |
673 | //Selection of Reconstructed photon clusters with Calorimeters | |
674 | ||
675 | FillClusterCutIndex(kPhotonIn); | |
676 | ||
1baaaea0 | 677 | // Double_t vertex[3] = {0,0,0}; |
4e8dcc76 | 678 | // event->GetPrimaryVertex()->GetXYZ(vertex); |
1baaaea0 | 679 | // TLorentzvector with cluster |
680 | // TLorentzVector clusterVector; | |
681 | // cluster->GetMomentum(clusterVector,vertex); | |
682 | ||
683 | Float_t clusPos[3]={0,0,0}; | |
684 | cluster->GetPosition(clusPos); | |
685 | TVector3 clusterVector(clusPos[0],clusPos[1],clusPos[2]); | |
8bdca7f1 | 686 | Double_t etaCluster = clusterVector.Eta(); |
687 | Double_t phiCluster = clusterVector.Phi(); | |
0e006b2c | 688 | if (phiCluster < 0) phiCluster= phiCluster+ 2*TMath::Pi(); |
8bdca7f1 | 689 | |
690 | // Histos before cuts | |
691 | if(fHistClusterEtavsPhiBeforeAcc) fHistClusterEtavsPhiBeforeAcc->Fill(phiCluster,etaCluster); | |
692 | ||
693 | // Cluster Selection - 0= accept any calo cluster | |
694 | if (fClusterType > 0){ | |
695 | //Select EMCAL cluster | |
696 | if (fClusterType == 1 && !cluster->IsEMCAL()){ | |
697 | FillClusterCutIndex(kDetector); | |
9df9736d | 698 | return kFALSE; |
8bdca7f1 | 699 | } |
700 | //Select PHOS cluster | |
701 | if (fClusterType == 2 && !cluster->IsPHOS()){ | |
702 | FillClusterCutIndex(kDetector); | |
9df9736d | 703 | return kFALSE; |
8bdca7f1 | 704 | } |
705 | } | |
706 | ||
707 | // Acceptance Cuts | |
708 | if(!AcceptanceCuts(cluster,event)){ | |
709 | FillClusterCutIndex(kAcceptance); | |
710 | return kFALSE; | |
711 | } | |
712 | // Cluster Quality Cuts | |
713 | if(!ClusterQualityCuts(cluster,event,isMC)){ | |
714 | FillClusterCutIndex(kClusterQuality); | |
715 | return kFALSE; | |
716 | } | |
717 | ||
718 | // Photon passed cuts | |
719 | FillClusterCutIndex(kPhotonOut); | |
720 | return kTRUE; | |
721 | } | |
722 | ||
723 | ||
724 | ///________________________________________________________________________ | |
725 | Bool_t AliCaloPhotonCuts::AcceptanceCuts(AliVCluster *cluster, AliVEvent* event) | |
726 | { | |
727 | // Exclude certain areas for photon reconstruction | |
9af60dfb | 728 | if(event){} // suppress warning |
8bdca7f1 | 729 | |
730 | Int_t cutIndex=0; | |
731 | if(fHistAcceptanceCuts)fHistAcceptanceCuts->Fill(cutIndex); | |
732 | cutIndex++; | |
733 | ||
734 | ||
1baaaea0 | 735 | // Double_t vertex[3] = {0,0,0}; |
843ebf3b | 736 | // event->GetPrimaryVertex()->GetXYZ(vertex); |
8bdca7f1 | 737 | // TLorentzvector with cluster |
1baaaea0 | 738 | // TLorentzVector clusterVector; |
739 | // cluster->GetMomentum(clusterVector,vertex); | |
740 | ||
741 | Float_t clusPos[3]={0,0,0}; | |
742 | cluster->GetPosition(clusPos); | |
743 | TVector3 clusterVector(clusPos[0],clusPos[1],clusPos[2]); | |
8bdca7f1 | 744 | Double_t etaCluster = clusterVector.Eta(); |
745 | Double_t phiCluster = clusterVector.Phi(); | |
0e006b2c | 746 | if (phiCluster < 0) phiCluster= phiCluster+ 2*TMath::Pi(); |
8bdca7f1 | 747 | |
748 | // check eta range | |
9df9736d | 749 | if (fUseEtaCut){ |
8bdca7f1 | 750 | if (etaCluster < fMinEtaCut || etaCluster > fMaxEtaCut){ |
751 | if(fHistAcceptanceCuts)fHistAcceptanceCuts->Fill(cutIndex); | |
752 | return kFALSE; | |
753 | } | |
9df9736d | 754 | } |
8bdca7f1 | 755 | cutIndex++; |
756 | ||
757 | // check phi range | |
9df9736d | 758 | if (fUsePhiCut ){ |
4e8dcc76 | 759 | if (phiCluster < fMinPhiCut || phiCluster > fMaxPhiCut){ |
8bdca7f1 | 760 | if(fHistAcceptanceCuts)fHistAcceptanceCuts->Fill(cutIndex); |
761 | return kFALSE; | |
762 | } | |
763 | } | |
764 | cutIndex++; | |
765 | ||
766 | // check distance to bad channel | |
9df9736d | 767 | if (fUseDistanceToBadChannel){ |
768 | if (cluster->GetDistanceToBadChannel() < fMinDistanceToBadChannel){ | |
769 | if(fHistAcceptanceCuts)fHistAcceptanceCuts->Fill(cutIndex); | |
770 | return kFALSE; | |
771 | } | |
772 | } | |
773 | cutIndex++; | |
8bdca7f1 | 774 | if(fHistAcceptanceCuts)fHistAcceptanceCuts->Fill(cutIndex); |
775 | ||
776 | // Histos after cuts | |
777 | if(fHistClusterEtavsPhiAfterAcc) fHistClusterEtavsPhiAfterAcc->Fill(phiCluster,etaCluster); | |
778 | ||
779 | return kTRUE; | |
780 | } | |
781 | ||
d53bf4ac | 782 | Bool_t AliCaloPhotonCuts::MatchConvPhotonToCluster(AliAODConversionPhoton* convPhoton, AliVCluster* cluster, AliVEvent* event ){ |
783 | ||
784 | if (!fUseDistTrackToCluster) return kFALSE; | |
785 | ||
786 | AliESDEvent *esdev = dynamic_cast<AliESDEvent*>(event); | |
787 | AliAODEvent *aodev = 0; | |
788 | if (!esdev) { | |
789 | aodev = dynamic_cast<AliAODEvent*>(event); | |
790 | if (!aodev) { | |
791 | AliError("Task needs AOD or ESD event, returning"); | |
792 | return kFALSE; | |
793 | } | |
794 | } | |
795 | ||
4e8dcc76 | 796 | // Double_t vertex[3] = {0,0,0}; |
1baaaea0 | 797 | // event->GetPrimaryVertex()->GetXYZ(vertex); |
925a074a | 798 | |
799 | if(!cluster->IsEMCAL() && !cluster->IsPHOS()){AliError("Cluster is neither EMCAL nor PHOS, returning"); return kFALSE;} | |
d53bf4ac | 800 | |
925a074a | 801 | Float_t clusterPosition[3] = {0,0,0}; |
802 | cluster->GetPosition(clusterPosition); | |
803 | Double_t clusterR = TMath::Sqrt( clusterPosition[0]*clusterPosition[0] + clusterPosition[1]*clusterPosition[1] ); | |
804 | if(fHistClusterRBeforeQA) fHistClusterRBeforeQA->Fill(clusterR); | |
805 | ||
806 | //cout << "+++++++++ Cluster: x, y, z, R" << clusterPosition[0] << ", " << clusterPosition[1] << ", " << clusterPosition[2] << ", " << clusterR << "+++++++++" << endl; | |
807 | ||
d53bf4ac | 808 | Bool_t matched = kFALSE; |
809 | for (Int_t i = 0; i < 2; i++){ | |
810 | Int_t tracklabel = convPhoton->GetLabel(i); | |
811 | AliVTrack *inTrack = 0x0; | |
812 | if(esdev) { | |
813 | if(tracklabel > event->GetNumberOfTracks() ) continue; | |
814 | inTrack = esdev->GetTrack(tracklabel); | |
815 | } else { | |
816 | if(((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->AreAODsRelabeled()){ | |
817 | inTrack = dynamic_cast<AliVTrack*>(event->GetTrack(tracklabel)); | |
818 | } else { | |
819 | for(Int_t ii=0; ii<event->GetNumberOfTracks(); ii++) { | |
820 | inTrack = dynamic_cast<AliVTrack*>(event->GetTrack(ii)); | |
821 | if(inTrack){ | |
822 | if(inTrack->GetID() == tracklabel) { | |
823 | continue; | |
824 | } | |
825 | } | |
826 | } | |
827 | } | |
828 | } | |
2c75809c | 829 | |
830 | AliESDtrack *esdt = dynamic_cast<AliESDtrack*>(inTrack); | |
831 | AliAODTrack *aodt = 0; | |
832 | if (!esdt) { | |
833 | aodt = dynamic_cast<AliAODTrack*>(inTrack); | |
834 | if (!aodt){AliError("Track is neither ESD nor AOD, continue"); continue;} | |
835 | } | |
836 | ||
837 | AliExternalTrackParam *trackParam = 0; | |
838 | if (esdt) { | |
839 | const AliExternalTrackParam *in = esdt->GetInnerParam(); | |
840 | if (!in){AliError("Could not get InnerParam of Track, continue"); continue;} | |
841 | trackParam = new AliExternalTrackParam(*in); | |
842 | } else { | |
843 | Double_t xyz[3] = {0}, pxpypz[3] = {0}, cv[21] = {0}; | |
844 | aodt->PxPyPz(pxpypz); | |
845 | aodt->XvYvZv(xyz); | |
846 | aodt->GetCovarianceXYZPxPyPz(cv); | |
847 | trackParam = new AliExternalTrackParam(xyz,pxpypz,cv,aodt->Charge()); | |
848 | } | |
d404157c | 849 | if (!trackParam){AliError("Could not get TrackParameters, continue"); continue;} |
850 | ||
2c75809c | 851 | Bool_t propagated = kFALSE; |
852 | AliExternalTrackParam emcParam(*trackParam); | |
853 | Float_t dPhi = 0; | |
854 | Float_t dEta = 0; | |
855 | ||
856 | if(cluster->IsEMCAL()){ | |
857 | Float_t eta = 0; Float_t phi = 0; Float_t pt = 0; | |
858 | propagated = AliEMCALRecoUtils::ExtrapolateTrackToEMCalSurface(&emcParam, 430, 0.000510999, 20, eta, phi, pt); | |
859 | if(propagated){ | |
860 | propagated = AliEMCALRecoUtils::ExtrapolateTrackToCluster(&emcParam, cluster, 0.000510999, 5, dEta, dPhi); | |
861 | } | |
862 | } | |
863 | if(cluster->IsPHOS()){ | |
864 | propagated = AliTrackerBase::PropagateTrackToBxByBz(&emcParam, clusterR, 0.000510999, 20, kTRUE, 0.8, -1); | |
865 | if (propagated){ | |
866 | Double_t trkPos[3] = {0,0,0}; | |
867 | emcParam.GetXYZ(trkPos); | |
868 | TVector3 trkPosVec(trkPos[0],trkPos[1],trkPos[2]); | |
869 | TVector3 clsPosVec(clusterPosition); | |
870 | dPhi = clsPosVec.DeltaPhi(trkPosVec); | |
871 | dEta = clsPosVec.Eta()-trkPosVec.Eta(); | |
872 | } | |
873 | } | |
874 | ||
875 | if (propagated){ | |
876 | Float_t dR2 = dPhi*dPhi + dEta*dEta; | |
4e8dcc76 | 877 | if(fHistDistanceTrackToClusterBeforeQA)fHistDistanceTrackToClusterBeforeQA->Fill(TMath::Sqrt(dR2)); |
4e8dcc76 | 878 | if(fHistClusterdEtadPhiBeforeQA) fHistClusterdEtadPhiBeforeQA->Fill(dEta, dPhi); |
879 | ||
9af60dfb | 880 | Float_t clusM02 = (Float_t) cluster->GetM02(); |
881 | Float_t clusM20 = (Float_t) cluster->GetM20(); | |
4e8dcc76 | 882 | if(fExtendedMatching){ |
9af60dfb | 883 | if(inTrack->Charge() > 0) { |
884 | fHistClusterdEtadPhiPosTracksBeforeQA->Fill(dEta, dPhi); | |
885 | if(inTrack->P() < 1) fHistClusterdEtadPhiPosTracks_P1_BeforeQA->Fill(dEta, dPhi); | |
886 | else if(inTrack->P() < 4) fHistClusterdEtadPhiPosTracks_P14_BeforeQA->Fill(dEta, dPhi); | |
887 | else fHistClusterdEtadPhiPosTracks_P4_BeforeQA->Fill(dEta, dPhi); | |
888 | } | |
889 | else{ | |
890 | fHistClusterdEtadPhiNegTracksBeforeQA->Fill(dEta, dPhi); | |
891 | if(inTrack->P() < 1) fHistClusterdEtadPhiNegTracks_P1_BeforeQA->Fill(dEta, dPhi); | |
892 | else if(inTrack->P() < 4) fHistClusterdEtadPhiNegTracks_P14_BeforeQA->Fill(dEta, dPhi); | |
893 | else fHistClusterdEtadPhiNegTracks_P4_BeforeQA->Fill(dEta, dPhi); | |
894 | } | |
4e8dcc76 | 895 | fHistClusterdEtadPtBeforeQA->Fill(dEta, inTrack->Pt()); |
896 | fHistClusterdPhidPtBeforeQA->Fill(dPhi, inTrack->Pt()); | |
9af60dfb | 897 | if(abs(dPhi) > 0.05){ |
898 | fHistClusterM20Pt_dPhiBeforeQA->Fill(clusM20, inTrack->Pt()); | |
899 | fHistClusterM02Pt_dPhiBeforeQA->Fill(clusM02, inTrack->Pt()); | |
900 | } | |
4e8dcc76 | 901 | fHistClusterM20M02BeforeQA->Fill(clusM20, clusM02); |
902 | } | |
903 | ||
9af60dfb | 904 | Bool_t match_dEta = (abs(dEta) < fMaxDistTrackToClusterEta) ? kTRUE : kFALSE; |
905 | Bool_t match_dPhi = kFALSE; | |
906 | if( (inTrack->Charge() > 0) && (dPhi > fMinDistTrackToClusterPhi) && (dPhi < fMaxDistTrackToClusterPhi) ) match_dPhi = kTRUE; | |
907 | else if( (inTrack->Charge() < 0) && (dPhi < -fMinDistTrackToClusterPhi) && (dPhi > -fMaxDistTrackToClusterPhi) ) match_dPhi = kTRUE; | |
908 | ||
909 | if(match_dEta && match_dPhi){ | |
910 | //if(dR2 < fMinDistTrackToCluster*fMinDistTrackToCluster){ | |
2c75809c | 911 | matched = kTRUE; |
f57c67ac | 912 | } else { |
4e8dcc76 | 913 | if(fHistDistanceTrackToClusterAfterQA)fHistDistanceTrackToClusterAfterQA->Fill(TMath::Sqrt(dR2)); |
914 | if(fHistClusterdEtadPhiAfterQA) fHistClusterdEtadPhiAfterQA->Fill(dEta, dPhi); | |
915 | if(fHistClusterRAfterQA) fHistClusterRAfterQA->Fill(clusterR); | |
916 | if(fExtendedMatching){ | |
9af60dfb | 917 | if(inTrack->Charge() > 0) fHistClusterdEtadPhiPosTracksAfterQA->Fill(dEta, dPhi); |
918 | else fHistClusterdEtadPhiNegTracksAfterQA->Fill(dEta, dPhi); | |
4e8dcc76 | 919 | fHistClusterM20M02AfterQA->Fill(clusM20, clusM02); |
920 | } | |
f57c67ac | 921 | } |
2c75809c | 922 | } |
923 | delete trackParam; | |
924 | } | |
d53bf4ac | 925 | |
d53bf4ac | 926 | return matched; |
2c75809c | 927 | |
d53bf4ac | 928 | } |
929 | ||
930 | //____________________________________________________________________________________________ | |
931 | ||
932 | ||
8bdca7f1 | 933 | ///________________________________________________________________________ |
934 | Bool_t AliCaloPhotonCuts::UpdateCutString() { | |
935 | ///Update the cut string (if it has been created yet) | |
936 | ||
937 | if(fCutString && fCutString->GetString().Length() == kNCuts) { | |
938 | fCutString->SetString(GetCutNumber()); | |
939 | } else { | |
940 | return kFALSE; | |
941 | } | |
942 | return kTRUE; | |
943 | } | |
944 | ||
945 | ///________________________________________________________________________ | |
946 | Bool_t AliCaloPhotonCuts::InitializeCutsFromCutString(const TString analysisCutSelection ) { | |
947 | // Initialize Cuts from a given Cut string | |
948 | AliInfo(Form("Set CaloCut Number: %s",analysisCutSelection.Data())); | |
949 | if(analysisCutSelection.Length()!=kNCuts) { | |
950 | AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts)); | |
951 | return kFALSE; | |
952 | } | |
953 | if(!analysisCutSelection.IsDigit()){ | |
954 | AliError("Cut selection contains characters"); | |
955 | return kFALSE; | |
956 | } | |
957 | ||
958 | const char *cutSelection = analysisCutSelection.Data(); | |
959 | #define ASSIGNARRAY(i) fCuts[i] = cutSelection[i] - '0' | |
960 | for(Int_t ii=0;ii<kNCuts;ii++){ | |
961 | ASSIGNARRAY(ii); | |
962 | } | |
963 | ||
964 | // Set Individual Cuts | |
965 | for(Int_t ii=0;ii<kNCuts;ii++){ | |
966 | if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE; | |
967 | } | |
968 | PrintCutsWithValues(); | |
969 | return kTRUE; | |
970 | } | |
971 | ||
972 | ///________________________________________________________________________ | |
973 | Bool_t AliCaloPhotonCuts::SetCut(cutIds cutID, const Int_t value) { | |
974 | ///Set individual cut ID | |
975 | ||
976 | switch (cutID) { | |
977 | ||
978 | case kClusterType: | |
979 | if( SetClusterTypeCut(value)) { | |
980 | fCuts[kClusterType] = value; | |
981 | UpdateCutString(); | |
982 | return kTRUE; | |
983 | } else return kFALSE; | |
984 | ||
985 | case kEtaMin: | |
986 | if( SetMinEtaCut(value)) { | |
987 | fCuts[kEtaMin] = value; | |
988 | UpdateCutString(); | |
989 | return kTRUE; | |
990 | } else return kFALSE; | |
991 | ||
992 | case kEtaMax: | |
993 | if( SetMaxEtaCut(value)) { | |
994 | fCuts[kEtaMax] = value; | |
995 | UpdateCutString(); | |
996 | return kTRUE; | |
997 | } else return kFALSE; | |
998 | ||
999 | case kPhiMin: | |
1000 | if( SetMinPhiCut(value)) { | |
1001 | fCuts[kPhiMin] = value; | |
1002 | UpdateCutString(); | |
1003 | return kTRUE; | |
1004 | } else return kFALSE; | |
1005 | ||
1006 | case kPhiMax: | |
1007 | if( SetMaxPhiCut(value)) { | |
1008 | fCuts[kPhiMax] = value; | |
1009 | UpdateCutString(); | |
1010 | return kTRUE; | |
1011 | } else return kFALSE; | |
1012 | ||
1013 | case kDistanceToBadChannel: | |
1014 | if( SetDistanceToBadChannelCut(value)) { | |
1015 | fCuts[kDistanceToBadChannel] = value; | |
1016 | UpdateCutString(); | |
1017 | return kTRUE; | |
1018 | } else return kFALSE; | |
1019 | ||
1020 | case kTiming: | |
1021 | if( SetTimingCut(value)) { | |
1022 | fCuts[kTiming] = value; | |
1023 | UpdateCutString(); | |
1024 | return kTRUE; | |
1025 | } else return kFALSE; | |
1026 | ||
1027 | case kTrackMatching: | |
1028 | if( SetTrackMatchingCut(value)) { | |
1029 | fCuts[kTrackMatching] = value; | |
1030 | UpdateCutString(); | |
1031 | return kTRUE; | |
1032 | } else return kFALSE; | |
1033 | ||
1034 | case kExoticCell: | |
1035 | if( SetExoticCellCut(value)) { | |
1036 | fCuts[kExoticCell] = value; | |
1037 | UpdateCutString(); | |
1038 | return kTRUE; | |
1039 | } else return kFALSE; | |
1040 | ||
1041 | case kMinEnery: | |
1042 | if( SetMinEnergyCut(value)) { | |
1043 | fCuts[kMinEnery] = value; | |
1044 | UpdateCutString(); | |
1045 | return kTRUE; | |
1046 | } else return kFALSE; | |
1047 | ||
1048 | case kNMinCells: | |
1049 | if( SetMinNCellsCut(value)) { | |
1050 | fCuts[kNMinCells] = value; | |
1051 | UpdateCutString(); | |
1052 | return kTRUE; | |
1053 | } else return kFALSE; | |
1054 | ||
1055 | case kMinM02: | |
1056 | if( SetMinM02(value)) { | |
1057 | fCuts[kMinM02] = value; | |
1058 | UpdateCutString(); | |
1059 | return kTRUE; | |
1060 | } else return kFALSE; | |
1061 | ||
1062 | case kMaxM02: | |
1063 | if( SetMaxM02(value)) { | |
1064 | fCuts[kMaxM02] = value; | |
1065 | UpdateCutString(); | |
1066 | return kTRUE; | |
1067 | } else return kFALSE; | |
1068 | ||
1069 | case kMinM20: | |
1070 | if( SetMinM20(value)) { | |
1071 | fCuts[kMinM20] = value; | |
1072 | UpdateCutString(); | |
1073 | return kTRUE; | |
1074 | } else return kFALSE; | |
1075 | ||
1076 | case kMaxM20: | |
1077 | if( SetMaxM20(value)) { | |
1078 | fCuts[kMaxM20] = value; | |
1079 | UpdateCutString(); | |
1080 | return kTRUE; | |
1081 | } else return kFALSE; | |
1082 | ||
1083 | case kDispersion: | |
1084 | if( SetDispersion(value)) { | |
1085 | fCuts[kDispersion] = value; | |
1086 | UpdateCutString(); | |
1087 | return kTRUE; | |
1088 | } else return kFALSE; | |
1089 | ||
1090 | case kNLM: | |
1091 | if( SetNLM(value)) { | |
1092 | fCuts[kNLM] = value; | |
1093 | UpdateCutString(); | |
1094 | return kTRUE; | |
1095 | } else return kFALSE; | |
1096 | ||
1097 | case kNCuts: | |
1098 | AliError("Cut id out of range"); | |
1099 | return kFALSE; | |
1100 | } | |
1101 | ||
1102 | AliError("Cut id %d not recognized"); | |
1103 | return kFALSE; | |
1104 | ||
1105 | ||
1106 | } | |
1107 | ///________________________________________________________________________ | |
1108 | void AliCaloPhotonCuts::PrintCuts() { | |
1109 | // Print out current Cut Selection | |
1110 | for(Int_t ic = 0; ic < kNCuts; ic++) { | |
1111 | printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]); | |
1112 | } | |
1113 | } | |
1114 | ||
1115 | void AliCaloPhotonCuts::PrintCutsWithValues() { | |
1116 | // Print out current Cut Selection with value | |
135c1186 | 1117 | printf("\nCluster cutnumber \n"); |
1118 | for(Int_t ic = 0; ic < kNCuts; ic++) { | |
1119 | printf("%d",fCuts[ic]); | |
1120 | } | |
1121 | printf("\n\n"); | |
1122 | ||
8bdca7f1 | 1123 | printf("Acceptance cuts: \n"); |
9df9736d | 1124 | if (fClusterType == 0) printf("\tall calorimeter clusters are used\n"); |
1125 | if (fClusterType == 1) printf("\tEMCAL calorimeter clusters are used\n"); | |
1126 | if (fClusterType == 2) printf("\tPHOS calorimeter clusters are used\n"); | |
1127 | if (fUseEtaCut) printf("\t%3.2f < eta_{cluster} < %3.2f\n", fMinEtaCut, fMaxEtaCut ); | |
1128 | if (fUsePhiCut) printf("\t%3.2f < phi_{cluster} < %3.2f\n", fMinPhiCut, fMaxPhiCut ); | |
1129 | if (fUseDistanceToBadChannel) printf("\tcut on exotics applied \n"); | |
8bdca7f1 | 1130 | |
1131 | printf("Cluster Quality cuts: \n"); | |
9df9736d | 1132 | if (fUseTimeDiff) printf("\t time difference < %3.2f\n", fMaxTimeDiff ); |
9af60dfb | 1133 | if (fUseDistTrackToCluster) printf("\tmin distance to track in eta > %3.2f, min phi < %3.2f and max phi > %3.2f\n", fMaxDistTrackToClusterEta, fMinDistTrackToClusterPhi, fMaxDistTrackToClusterPhi ); |
1134 | if (fUseExoticCell)printf("\t exotic cell: %3.2f\n", fExoticCell ); | |
9df9736d | 1135 | if (fUseMinEnergy)printf("\t E_{cluster} > %3.2f\n", fMinEnergy ); |
72cfe7c8 | 1136 | if (fUseNCells) printf("\t number of cells per cluster >= %d\n", fMinNCells ); |
9df9736d | 1137 | if (fUseM02) printf("\t %3.2f < M02 < %3.2f\n", fMinM02, fMaxM02 ); |
1138 | if (fUseM20) printf("\t %3.2f < M20 < %3.2f\n", fMinM20, fMaxM20 ); | |
1139 | if (fUseDispersion) printf("\t dispersion < %3.2f\n", fMaxDispersion ); | |
1140 | if (fUseNLM) printf("\t %d < NLM < %d\n", fMinNLM, fMaxNLM ); | |
8bdca7f1 | 1141 | |
1142 | } | |
1143 | ||
1144 | // EMCAL acceptance 2011 | |
1145 | // 1.39626, 3.125 (phi) | |
1146 | // -0.66687,,0.66465 | |
1147 | ||
1148 | ||
1149 | ///________________________________________________________________________ | |
1150 | Bool_t AliCaloPhotonCuts::SetClusterTypeCut(Int_t clusterType) | |
1151 | { // Set Cut | |
1152 | switch(clusterType){ | |
1153 | case 0: // all clusters | |
1154 | fClusterType=0; | |
1155 | break; | |
1156 | case 1: // EMCAL clusters | |
1157 | fClusterType=1; | |
1158 | break; | |
1159 | case 2: // PHOS clusters | |
1160 | fClusterType=2; | |
1161 | break; | |
1162 | default: | |
1163 | AliError(Form("ClusterTypeCut not defined %d",clusterType)); | |
1164 | return kFALSE; | |
1165 | } | |
1166 | return kTRUE; | |
1167 | } | |
1168 | ||
1169 | //___________________________________________________________________ | |
1170 | Bool_t AliCaloPhotonCuts::SetMinEtaCut(Int_t minEta) | |
1171 | { | |
1172 | switch(minEta){ | |
9df9736d | 1173 | case 0: |
1174 | if (!fUseEtaCut) fUseEtaCut=0; | |
1175 | fMinEtaCut=-10.; | |
1176 | break; | |
1177 | case 1: | |
1178 | if (!fUseEtaCut) fUseEtaCut=1; | |
8bdca7f1 | 1179 | fMinEtaCut=-0.6687; |
1180 | break; | |
9df9736d | 1181 | case 2: |
1182 | if (!fUseEtaCut) fUseEtaCut=1; | |
344100c4 | 1183 | fMinEtaCut=-0.5; |
8bdca7f1 | 1184 | break; |
9df9736d | 1185 | case 3: |
1186 | if (!fUseEtaCut) fUseEtaCut=1; | |
344100c4 | 1187 | fMinEtaCut=-2; |
8bdca7f1 | 1188 | break; |
1189 | default: | |
1190 | AliError(Form("MinEta Cut not defined %d",minEta)); | |
1191 | return kFALSE; | |
1192 | } | |
1193 | return kTRUE; | |
1194 | } | |
1195 | ||
1196 | ||
1197 | //___________________________________________________________________ | |
1198 | Bool_t AliCaloPhotonCuts::SetMaxEtaCut(Int_t maxEta) | |
1199 | { | |
1200 | switch(maxEta){ | |
1201 | case 0: | |
9df9736d | 1202 | if (!fUseEtaCut) fUseEtaCut=0; |
1203 | fMaxEtaCut=10; | |
1204 | break; | |
1205 | case 1: | |
1206 | if (!fUseEtaCut) fUseEtaCut=1; | |
8bdca7f1 | 1207 | fMaxEtaCut=0.66465; |
1208 | break; | |
9df9736d | 1209 | case 2: |
1210 | if (!fUseEtaCut) fUseEtaCut=1; | |
8bdca7f1 | 1211 | fMaxEtaCut=0.5; |
1212 | break; | |
9df9736d | 1213 | case 3: |
1214 | if (!fUseEtaCut) fUseEtaCut=1; | |
8bdca7f1 | 1215 | fMaxEtaCut=2; |
1216 | break; | |
1217 | default: | |
1218 | AliError(Form("MaxEta Cut not defined %d",maxEta)); | |
1219 | return kFALSE; | |
1220 | } | |
1221 | return kTRUE; | |
1222 | } | |
1223 | ||
1224 | //___________________________________________________________________ | |
1225 | Bool_t AliCaloPhotonCuts::SetMinPhiCut(Int_t minPhi) | |
1226 | { | |
1227 | switch(minPhi){ | |
1228 | case 0: | |
9df9736d | 1229 | if (!fUsePhiCut) fUsePhiCut=0; |
8bdca7f1 | 1230 | fMinPhiCut=-10000; |
1231 | break; | |
0e006b2c | 1232 | case 1: // min EMCAL |
9df9736d | 1233 | if (!fUsePhiCut) fUsePhiCut=1; |
8bdca7f1 | 1234 | fMinPhiCut=1.39626; |
1235 | break; | |
0e006b2c | 1236 | case 2: // min EMCAL with TRD 2012 |
1237 | if (!fUsePhiCut) fUsePhiCut=1; | |
1238 | fMinPhiCut=2.10; | |
1239 | break; | |
1240 | case 3: // min EMCAL with TRD 2011 | |
1241 | if (!fUsePhiCut) fUsePhiCut=1; | |
1242 | fMinPhiCut=2.45; | |
1243 | break; | |
1244 | ||
1245 | ||
8bdca7f1 | 1246 | default: |
1247 | AliError(Form("MinPhi Cut not defined %d",minPhi)); | |
1248 | return kFALSE; | |
1249 | } | |
1250 | return kTRUE; | |
1251 | } | |
1252 | ||
1253 | //___________________________________________________________________ | |
1254 | Bool_t AliCaloPhotonCuts::SetMaxPhiCut(Int_t maxPhi) | |
1255 | { | |
1256 | switch(maxPhi){ | |
1257 | case 0: | |
9df9736d | 1258 | if (!fUsePhiCut) fUsePhiCut=0; |
fd94f234 | 1259 | fMaxPhiCut=10000; |
8bdca7f1 | 1260 | break; |
0e006b2c | 1261 | case 1: // max EMCAL |
1262 | if (!fUsePhiCut) fUsePhiCut=1; | |
1263 | fMaxPhiCut=3.15; | |
1264 | break; | |
1265 | case 2: // max EMCAL with TRD 2011 | |
9df9736d | 1266 | if (!fUsePhiCut) fUsePhiCut=1; |
0e006b2c | 1267 | fMaxPhiCut=2.45; |
8bdca7f1 | 1268 | break; |
0e006b2c | 1269 | case 3: // max EMCAL with TRD 2012 |
1270 | if (!fUsePhiCut) fUsePhiCut=1; | |
1271 | fMaxPhiCut=2.10; | |
1272 | break; | |
1273 | ||
1274 | ||
8bdca7f1 | 1275 | default: |
1276 | AliError(Form("Max Phi Cut not defined %d",maxPhi)); | |
1277 | return kFALSE; | |
1278 | } | |
1279 | return kTRUE; | |
1280 | } | |
1281 | ||
1282 | //___________________________________________________________________ | |
1283 | Bool_t AliCaloPhotonCuts::SetDistanceToBadChannelCut(Int_t distanceToBadChannel) | |
1284 | { | |
1285 | switch(distanceToBadChannel){ | |
1286 | case 0: | |
9df9736d | 1287 | fUseDistanceToBadChannel=0; |
8bdca7f1 | 1288 | fMinDistanceToBadChannel=0; |
1289 | break; | |
1290 | case 1: | |
9df9736d | 1291 | if (!fUseDistanceToBadChannel) fUseDistanceToBadChannel=1; |
8bdca7f1 | 1292 | fMinDistanceToBadChannel=5; |
1293 | break; | |
1294 | default: | |
1295 | AliError(Form("minimum distance to bad channel Cut not defined %d",distanceToBadChannel)); | |
1296 | return kFALSE; | |
1297 | } | |
1298 | return kTRUE; | |
1299 | } | |
1300 | ||
1301 | //___________________________________________________________________ | |
1302 | Bool_t AliCaloPhotonCuts::SetTimingCut(Int_t timing) | |
1303 | { | |
1304 | switch(timing){ | |
1305 | case 0: | |
9df9736d | 1306 | fUseTimeDiff=0; |
8bdca7f1 | 1307 | fMaxTimeDiff=500; |
1308 | break; | |
1309 | case 1: | |
9df9736d | 1310 | if (!fUseTimeDiff) fUseTimeDiff=1; |
8bdca7f1 | 1311 | fMaxTimeDiff=10e-7; //1000ns |
1312 | break; | |
1313 | case 2: | |
9df9736d | 1314 | if (!fUseTimeDiff) fUseTimeDiff=1; |
8bdca7f1 | 1315 | fMaxTimeDiff=50e-8; //500ns |
1316 | break; | |
1317 | case 3: | |
9df9736d | 1318 | if (!fUseTimeDiff) fUseTimeDiff=1; |
8bdca7f1 | 1319 | fMaxTimeDiff=20e-8; //200ns |
1320 | break; | |
1321 | case 4: | |
9df9736d | 1322 | if (!fUseTimeDiff) fUseTimeDiff=1; |
8bdca7f1 | 1323 | fMaxTimeDiff=10e-8; //100ns |
1324 | break; | |
1325 | case 5: | |
9df9736d | 1326 | if (!fUseTimeDiff) fUseTimeDiff=1; |
8bdca7f1 | 1327 | fMaxTimeDiff=50e-9; //50ns |
1328 | break; | |
1329 | ||
1330 | default: | |
1331 | AliError(Form("Timing Cut not defined %d",timing)); | |
1332 | return kFALSE; | |
1333 | } | |
1334 | return kTRUE; | |
1335 | } | |
1336 | ||
1337 | //___________________________________________________________________ | |
1338 | Bool_t AliCaloPhotonCuts::SetTrackMatchingCut(Int_t trackMatching) | |
1339 | { | |
1340 | switch(trackMatching){ | |
1341 | case 0: | |
9af60dfb | 1342 | fUseDistTrackToCluster = 0; |
1343 | fMaxDistTrackToClusterEta = 0; | |
1344 | fMinDistTrackToClusterPhi = 0; | |
1345 | fMaxDistTrackToClusterPhi = 0; | |
8bdca7f1 | 1346 | break; |
1347 | case 1: | |
9df9736d | 1348 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; |
9af60dfb | 1349 | fMaxDistTrackToClusterEta = 0.015; |
1350 | fMinDistTrackToClusterPhi = -0.01; | |
1351 | fMaxDistTrackToClusterPhi = 0.03; //0.04; | |
d53bf4ac | 1352 | break; |
1353 | case 2: | |
1354 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1355 | fMaxDistTrackToClusterEta = 0.015; |
1356 | fMinDistTrackToClusterPhi = -0.01; | |
1357 | fMaxDistTrackToClusterPhi = 0.035; //0.05; | |
8bdca7f1 | 1358 | break; |
d53bf4ac | 1359 | case 3: |
1360 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1361 | fMaxDistTrackToClusterEta = 0.015; |
1362 | fMinDistTrackToClusterPhi = -0.015; | |
1363 | fMaxDistTrackToClusterPhi = 0.04; //0.1; | |
d53bf4ac | 1364 | break; |
1365 | case 4: | |
1366 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1367 | fMaxDistTrackToClusterEta = 0.015; |
1368 | fMinDistTrackToClusterPhi = -0.015; | |
1369 | fMaxDistTrackToClusterPhi = 0.045; //0.13; | |
d53bf4ac | 1370 | break; |
1371 | case 5: | |
1372 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1373 | fMaxDistTrackToClusterEta = 0.015; |
1374 | fMinDistTrackToClusterPhi = -0.02; | |
1375 | fMaxDistTrackToClusterPhi = 0.05; //0.15 | |
d53bf4ac | 1376 | break; |
1377 | case 6: | |
1378 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1379 | fMaxDistTrackToClusterEta = 0.015; |
1380 | fMinDistTrackToClusterPhi = -0.02; | |
1381 | fMaxDistTrackToClusterPhi = 0.055; //0.2; | |
d53bf4ac | 1382 | break; |
1383 | case 7: | |
1384 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1385 | fMaxDistTrackToClusterEta = 0.015; |
1386 | fMinDistTrackToClusterPhi = -0.025; | |
1387 | fMaxDistTrackToClusterPhi = 0.06; //0.3; | |
d53bf4ac | 1388 | break; |
1389 | case 8: | |
1390 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1391 | fMaxDistTrackToClusterEta = 0.015; |
1392 | fMinDistTrackToClusterPhi = -0.025; | |
1393 | fMaxDistTrackToClusterPhi = 0.07; //0.4; | |
d53bf4ac | 1394 | break; |
1395 | case 9: | |
1396 | if (!fUseDistTrackToCluster) fUseDistTrackToCluster=1; | |
9af60dfb | 1397 | fMaxDistTrackToClusterEta = 0.02; |
1398 | fMinDistTrackToClusterPhi = -0.03; | |
1399 | fMaxDistTrackToClusterPhi = 0.1; //0.5; | |
d53bf4ac | 1400 | break; |
1401 | ||
8bdca7f1 | 1402 | default: |
1403 | AliError(Form("Track Matching Cut not defined %d",trackMatching)); | |
1404 | return kFALSE; | |
1405 | } | |
1406 | return kTRUE; | |
1407 | } | |
1408 | ||
1409 | //___________________________________________________________________ | |
1410 | Bool_t AliCaloPhotonCuts::SetExoticCellCut(Int_t exoticCell) | |
1411 | { | |
1412 | switch(exoticCell){ | |
1413 | case 0: | |
9df9736d | 1414 | fUseExoticCell=0; |
8bdca7f1 | 1415 | fExoticCell=0; |
1416 | break; | |
1417 | case 1: | |
9df9736d | 1418 | if (!fUseExoticCell) fUseExoticCell=1; |
8bdca7f1 | 1419 | fExoticCell=5; |
1420 | break; | |
1421 | default: | |
1422 | AliError(Form("Exotic cell Cut not defined %d",exoticCell)); | |
1423 | return kFALSE; | |
1424 | } | |
1425 | return kTRUE; | |
1426 | } | |
1427 | ||
1428 | //___________________________________________________________________ | |
1429 | Bool_t AliCaloPhotonCuts::SetMinEnergyCut(Int_t minEnergy) | |
1430 | { | |
1431 | switch(minEnergy){ | |
1432 | case 0: | |
9df9736d | 1433 | if (!fUseMinEnergy) fUseMinEnergy=0; |
0e006b2c | 1434 | fMinEnergy=0.1; |
8bdca7f1 | 1435 | break; |
1436 | case 1: | |
9df9736d | 1437 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1438 | fMinEnergy=0.2; |
8bdca7f1 | 1439 | break; |
1440 | case 2: | |
9df9736d | 1441 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1442 | fMinEnergy=0.3; |
8bdca7f1 | 1443 | break; |
1444 | case 3: | |
9df9736d | 1445 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1446 | fMinEnergy=0.4; |
8bdca7f1 | 1447 | break; |
1448 | case 4: | |
9df9736d | 1449 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1450 | fMinEnergy=0.5; |
8bdca7f1 | 1451 | break; |
1452 | case 5: | |
9df9736d | 1453 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1454 | fMinEnergy=0.6; |
8bdca7f1 | 1455 | break; |
1456 | case 6: | |
9df9736d | 1457 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1458 | fMinEnergy=4.5; |
8bdca7f1 | 1459 | break; |
1460 | case 7: | |
9df9736d | 1461 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1462 | fMinEnergy=5.0; |
8bdca7f1 | 1463 | break; |
1464 | case 8: | |
9df9736d | 1465 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1466 | fMinEnergy=5.5; |
8bdca7f1 | 1467 | break; |
1468 | case 9: | |
9df9736d | 1469 | if (!fUseMinEnergy) fUseMinEnergy=1; |
0e006b2c | 1470 | fMinEnergy=6.0; |
8bdca7f1 | 1471 | break; |
1472 | default: | |
1473 | AliError(Form("Minimum Energy Cut not defined %d",minEnergy)); | |
1474 | return kFALSE; | |
1475 | } | |
1476 | return kTRUE; | |
1477 | } | |
1478 | ||
1479 | //___________________________________________________________________ | |
1480 | Bool_t AliCaloPhotonCuts::SetMinNCellsCut(Int_t minNCells) | |
1481 | { | |
1482 | switch(minNCells){ | |
9df9736d | 1483 | case 0: |
1484 | if (!fUseNCells) fUseNCells=0; | |
8bdca7f1 | 1485 | fMinNCells=0; |
1486 | break; | |
1487 | case 1: | |
9df9736d | 1488 | if (!fUseNCells) fUseNCells=1; |
8bdca7f1 | 1489 | fMinNCells=1; |
1490 | break; | |
1491 | case 2: | |
9df9736d | 1492 | if (!fUseNCells) fUseNCells=1; |
8bdca7f1 | 1493 | fMinNCells=2; |
1494 | break; | |
1495 | case 3: | |
9df9736d | 1496 | if (!fUseNCells) fUseNCells=1; |
8bdca7f1 | 1497 | fMinNCells=3; |
1498 | break; | |
1499 | case 4: | |
9df9736d | 1500 | if (!fUseNCells) fUseNCells=1; |
8bdca7f1 | 1501 | fMinNCells=4; |
1502 | break; | |
1503 | case 5: | |
9df9736d | 1504 | if (!fUseNCells) fUseNCells=1; |
8bdca7f1 | 1505 | fMinNCells=5; |
1506 | break; | |
1507 | case 6: | |
9df9736d | 1508 | if (!fUseNCells) fUseNCells=1; |
8bdca7f1 | 1509 | fMinNCells=6; |
1510 | break; | |
1511 | ||
1512 | default: | |
1513 | AliError(Form("Min N cells Cut not defined %d",minNCells)); | |
1514 | return kFALSE; | |
1515 | } | |
1516 | return kTRUE; | |
1517 | } | |
1518 | ||
1519 | //___________________________________________________________________ | |
1520 | Bool_t AliCaloPhotonCuts::SetMaxM02(Int_t maxM02) | |
1521 | { | |
1522 | switch(maxM02){ | |
1523 | case 0: | |
9df9736d | 1524 | if (!fUseM02) fUseM02=0; |
8bdca7f1 | 1525 | fMaxM02=100; |
1526 | break; | |
1527 | case 1: | |
9df9736d | 1528 | if (!fUseM02) fUseM02=1; |
8bdca7f1 | 1529 | fMaxM02=1.; |
1530 | break; | |
1531 | case 2: | |
9df9736d | 1532 | if (!fUseM02) fUseM02=1; |
8bdca7f1 | 1533 | fMaxM02=0.7; |
1534 | break; | |
1535 | case 3: | |
9df9736d | 1536 | if (!fUseM02) fUseM02=1; |
8bdca7f1 | 1537 | fMaxM02=0.5; |
1538 | break; | |
1539 | case 4: | |
9df9736d | 1540 | if (!fUseM02) fUseM02=1; |
8bdca7f1 | 1541 | fMaxM02=0.4; |
1542 | break; | |
8bdca7f1 | 1543 | default: |
1544 | AliError(Form("Max M02 Cut not defined %d",maxM02)); | |
1545 | return kFALSE; | |
1546 | } | |
1547 | return kTRUE; | |
1548 | } | |
1549 | ||
1550 | //___________________________________________________________________ | |
1551 | Bool_t AliCaloPhotonCuts::SetMinM02(Int_t minM02) | |
1552 | { | |
1553 | switch(minM02){ | |
1554 | case 0: | |
9df9736d | 1555 | if (!fUseM02) fUseM02=0; |
8bdca7f1 | 1556 | fMinM02=0; |
1557 | break; | |
1558 | case 1: | |
9df9736d | 1559 | if (!fUseM02) fUseM02=1; |
8bdca7f1 | 1560 | fMinM02=0.002; |
1561 | break; | |
ee4b3d66 | 1562 | case 2: |
1563 | if (!fUseM02) fUseM02=1; | |
1564 | fMinM02=0.2; | |
1565 | break; | |
1566 | ||
8bdca7f1 | 1567 | default: |
1568 | AliError(Form("Min M02 not defined %d",minM02)); | |
1569 | return kFALSE; | |
1570 | } | |
1571 | return kTRUE; | |
1572 | } | |
1573 | ||
1574 | //___________________________________________________________________ | |
1575 | Bool_t AliCaloPhotonCuts::SetMaxM20(Int_t maxM20) | |
1576 | { | |
1577 | switch(maxM20){ | |
1578 | case 0: | |
9df9736d | 1579 | if (!fUseM20) fUseM20=0; |
8bdca7f1 | 1580 | fMaxM20=100; |
1581 | break; | |
1582 | case 1: | |
9df9736d | 1583 | if (!fUseM20) fUseM20=1; |
8bdca7f1 | 1584 | fMaxM20=0.5; |
1585 | break; | |
1586 | default: | |
1587 | AliError(Form("Max M20 Cut not defined %d",maxM20)); | |
1588 | return kFALSE; | |
1589 | } | |
1590 | return kTRUE; | |
1591 | } | |
1592 | ||
1593 | //___________________________________________________________________ | |
1594 | Bool_t AliCaloPhotonCuts::SetMinM20(Int_t minM20) | |
1595 | { | |
1596 | switch(minM20){ | |
1597 | case 0: | |
9df9736d | 1598 | if (!fUseM20) fUseM20=0; |
8bdca7f1 | 1599 | fMinM20=0; |
1600 | break; | |
1601 | case 1: | |
9df9736d | 1602 | if (!fUseM20) fUseM20=1; |
8bdca7f1 | 1603 | fMinM20=0.002; |
1604 | break; | |
1605 | default: | |
1606 | AliError(Form("Min M20 Cut not defined %d",minM20)); | |
1607 | return kFALSE; | |
1608 | } | |
1609 | return kTRUE; | |
1610 | } | |
1611 | ||
1612 | //___________________________________________________________________ | |
1613 | Bool_t AliCaloPhotonCuts::SetDispersion(Int_t dispersion) | |
1614 | { | |
1615 | switch(dispersion){ | |
1616 | case 0: | |
9df9736d | 1617 | if (!fUseDispersion) fUseDispersion=0; |
8bdca7f1 | 1618 | fMaxDispersion =100; |
1619 | break; | |
1620 | case 1: | |
9df9736d | 1621 | if (!fUseDispersion) fUseDispersion=1; |
8bdca7f1 | 1622 | fMaxDispersion=2.; |
1623 | break; | |
1624 | default: | |
1625 | AliError(Form("Maximum Dispersion Cut not defined %d",dispersion)); | |
1626 | return kFALSE; | |
1627 | } | |
1628 | return kTRUE; | |
1629 | } | |
1630 | ||
1631 | //___________________________________________________________________ | |
1632 | Bool_t AliCaloPhotonCuts::SetNLM(Int_t nlm) | |
1633 | { | |
1634 | switch(nlm){ | |
1635 | case 0: | |
9df9736d | 1636 | if (!fUseNLM) fUseNLM=0; |
8bdca7f1 | 1637 | fMinNLM =0; |
1638 | fMaxNLM =100; | |
1639 | break; | |
1640 | case 1: | |
9df9736d | 1641 | if (!fUseNLM) fUseNLM=1; |
8bdca7f1 | 1642 | fMinNLM =0; |
1643 | fMaxNLM =1; | |
1644 | break; | |
1645 | default: | |
1646 | AliError(Form("NLM Cut not defined %d",nlm)); | |
1647 | return kFALSE; | |
1648 | } | |
1649 | return kTRUE; | |
1650 | } | |
1651 | ||
1652 | ///________________________________________________________________________ | |
1653 | TString AliCaloPhotonCuts::GetCutNumber(){ | |
1654 | // returns TString with current cut number | |
1655 | TString a(kNCuts); | |
1656 | for(Int_t ii=0;ii<kNCuts;ii++){ | |
1657 | a.Append(Form("%d",fCuts[ii])); | |
1658 | } | |
1659 | return a; | |
1660 | } | |
1661 | ||
925a074a | 1662 |