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