]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliConversionCuts.cxx
Fixed typo in addtask and renamed histograms (from Redmer)
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliConversionCuts.cxx
CommitLineData
3b77b2d1 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
aff90284 3 * *
4 * Authors: Svein Lindal, Daniel Lohner *
5 * Version 1.0 *
6 * *
fcc79cf5 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 *
aff90284 12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
3b77b2d1 14 **************************************************************************/
15
16////////////////////////////////////////////////
e5b6e8a6 17//---------------------------------------------
3b77b2d1 18// Class handling all kinds of selection cuts for
19// Gamma Conversion analysis
20//---------------------------------------------
21////////////////////////////////////////////////
22
23#include "AliConversionCuts.h"
24
25#include "AliKFVertex.h"
26#include "AliAODTrack.h"
27#include "AliESDtrack.h"
28#include "AliAnalysisManager.h"
29#include "AliInputEventHandler.h"
92efd725 30#include "AliMCEventHandler.h"
3b77b2d1 31#include "AliAODHandler.h"
32#include "AliPIDResponse.h"
33#include "TH1.h"
34#include "TH2.h"
aff90284 35#include "TF1.h"
3b77b2d1 36#include "AliStack.h"
37#include "AliAODConversionMother.h"
38#include "TObjString.h"
39#include "AliAODEvent.h"
40#include "AliESDEvent.h"
41#include "AliCentrality.h"
42#include "TList.h"
ae947965 43#include "TFile.h"
92efd725 44#include "AliLog.h"
ca91a3e1 45#include "AliGenCocktailEventHeader.h"
a280ac15 46#include "AliGenDPMjetEventHeader.h"
47#include "AliGenPythiaEventHeader.h"
48#include "AliGenHijingEventHeader.h"
e5b6e8a6 49#include "AliTriggerAnalysis.h"
50#include "AliV0ReaderV1.h"
ae947965 51#include "AliAODMCParticle.h"
52#include "AliAODMCHeader.h"
92efd725 53
3b77b2d1 54class iostream;
55
56using namespace std;
57
58ClassImp(AliConversionCuts)
59
60
61const char* AliConversionCuts::fgkCutNames[AliConversionCuts::kNCuts] = {
4803eb1f 62 "HeavyIon",//0
63 "CentralityMin",//1
64 "CentralityMax",//2
65 "SelectV0AND",//3
66 "MultiplicityMethod",//4
67 "RemovePileUp",//5
68 "RejectExtraSignals",//6
69 "V0FinderType",//7
70 "EtaCut",//8
71 "MinRCut",//9
72 "SinglePtCut",//10
73 "ClsTPCCut", //11
74 "ededxSigmaCut",//12
75 "pidedxSigmaCut",//13
76 "piMomdedxSigmaCut",//14
77 "piMaxMomdedxSigmaCut",//15
78 "LowPRejectionSigmaCut",//16
79 "TOFelectronPID",//17
80 "QtMaxCut",//18
81 "Chi2GammaCut", //19
82 "PsiPair", //20
83 "DoPhotonAsymmetryCut",//21
84 "CosinePointingAngle", //22
85 "SharedElectronCuts", //23
86 "RejectToCloseV0s", //24
87 "DcaRPrimVtx", //25
88 "DcaZPrimVtx" //26
3b77b2d1 89};
90
91
92//________________________________________________________________________
4a0aab28 93AliConversionCuts::AliConversionCuts(const char *name,const char *title) :
94 AliAnalysisCuts(name,title),
95 fHistograms(NULL),
e5b6e8a6 96 fHeaderList(NULL),
4a0aab28 97 fPIDResponse(NULL),
98 fEventQuality(-1),
99 fMaxR(200),
100 fMinR(0),
101 fEtaCut(0.9),
102 fEtaCutMin(-0.1),
103 fPtCut(0.02),
104 fSinglePtCut(0),
105 fMaxZ(1000),
106 fMinClsTPC(0.),
107 fMinClsTPCToF(0.),
108 fLineCutZRSlope(0.),
109 fLineCutZValue(0),
110 fLineCutZRSlopeMin(0.),
111 fLineCutZValueMin(0),
112 fChi2CutConversion(1000),
113 fPIDProbabilityCutNegativeParticle(0),
114 fPIDProbabilityCutPositiveParticle(0),
115 fDodEdxSigmaCut(kTRUE),
e5b6e8a6 116 fDoTOFsigmaCut(kFALSE),
4a0aab28 117 fPIDTRDEfficiency(1),
118 fDoTRDPID(kFALSE),
119 fPIDnSigmaAboveElectronLine(100),
120 fPIDnSigmaBelowElectronLine(-100),
e5b6e8a6 121 fTofPIDnSigmaAboveElectronLine(100),
122 fTofPIDnSigmaBelowElectronLine(-100),
4a0aab28 123 fPIDnSigmaAbovePionLine(0),
124 fPIDnSigmaAbovePionLineHighPt(-100),
125 fPIDMinPnSigmaAbovePionLine(0),
126 fPIDMaxPnSigmaAbovePionLine(0),
127 fDoKaonRejectionLowP(kFALSE),
128 fDoProtonRejectionLowP(kFALSE),
129 fDoPionRejectionLowP(kFALSE),
130 fPIDnSigmaAtLowPAroundKaonLine(0),
131 fPIDnSigmaAtLowPAroundProtonLine(0),
132 fPIDnSigmaAtLowPAroundPionLine(0),
e5b6e8a6 133 fPIDMinPKaonRejectionLowP(1.5),
134 fPIDMinPProtonRejectionLowP(2),
4a0aab28 135 fPIDMinPPionRejectionLowP(0),
136 fDoQtGammaSelection(kTRUE),
e5b6e8a6 137 fDoHighPtQtGammaSelection(kFALSE),
4a0aab28 138 fQtMax(100),
e5b6e8a6 139 fHighPtQtMax(0.),
140 fPtBorderForQt(0),
4a0aab28 141 fXVertexCut(0.),
142 fYVertexCut(0.),
143 fZVertexCut(0.),
144 fNSigmaMass(0.),
145 fUseEtaMinCut(kFALSE),
146 fUseOnFlyV0Finder(kTRUE),
147 fDoPhotonAsymmetryCut(kTRUE),
148 fMinPPhotonAsymmetryCut(100.),
149 fMinPhotonAsymmetry(0.),
0a2b2b4b 150 fIsHeavyIon(0),
4a0aab28 151 fDetectorCentrality(0),
152 fModCentralityClass(0),
153 fMaxVertexZ(10),
154 fCentralityMin(0),
155 fCentralityMax(0),
156 fUseCorrectedTPCClsInfo(kFALSE),
157 fUseTOFpid(kFALSE),
158 fMultiplicityMethod(0),
e5b6e8a6 159 fSpecialTrigger(0),
4a0aab28 160 fRemovePileUp(kFALSE),
161 fOpeningAngle(0.005),
162 fPsiPairCut(10000),
163 fCosPAngleCut(10000),
164 fDoToCloseV0sCut(kFALSE),
165 fRejectExtraSignals(0),
166 fminV0Dist(200.),
167 fDoSharedElecCut(kFALSE),
168 fOfflineTriggerMask(0),
e5b6e8a6 169 fHasV0AND(kTRUE),
170 fIsSDDFired(kTRUE),
4a0aab28 171 fRandom(0),
e5b6e8a6 172 fElectronArraySize(500),
4a0aab28 173 fElectronLabelArray(NULL),
4803eb1f 174 fDCAZPrimVtxCut(1000),
175 fDCARPrimVtxCut(1000),
e5b6e8a6 176 fConversionPointXArray(0.0),
177 fConversionPointYArray(0.0),
178 fConversionPointZArray(0.0),
179 fnHeaders(0),
4a0aab28 180 fNotRejectedStart(NULL),
181 fNotRejectedEnd(NULL),
182 fGeneratorNames(NULL),
183 fCutString(NULL),
0a2b2b4b 184 fUtils(NULL),
11c1e680 185 fEtaShift(0.0),
186 fDoEtaShift(kFALSE),
ae947965 187 fDoReweightHistoMCPi0(kFALSE),
188 fDoReweightHistoMCEta(kFALSE),
189 fDoReweightHistoMCK0s(kFALSE),
190 fPathTrFReweighting(""),
191 fNameHistoReweightingPi0(""),
192 fNameHistoReweightingEta(""),
193 fNameHistoReweightingK0s(""),
fcc79cf5 194 fNameFitDataPi0(""),
195 fNameFitDataEta(""),
196 fNameFitDataK0s(""),
4a0aab28 197 hdEdxCuts(NULL),
198 hTPCdEdxbefore(NULL),
199 hTPCdEdxafter(NULL),
e5b6e8a6 200 hTPCdEdxSigbefore(NULL),
201 hTPCdEdxSigafter(NULL),
4a0aab28 202 hTOFbefore(NULL),
e5b6e8a6 203 hTOFSigbefore(NULL),
204 hTOFSigafter(NULL),
4a0aab28 205 hTrackCuts(NULL),
206 hPhotonCuts(NULL),
207 hInvMassbefore(NULL),
208 hArmenterosbefore(NULL),
209 hInvMassafter(NULL),
210 hArmenterosafter(NULL),
211 hAcceptanceCuts(NULL),
212 hCutIndex(NULL),
213 hV0EventCuts(NULL),
214 hCentrality(NULL),
4803eb1f 215 hCentralityVsNumberOfPrimaryTracks(NULL),
4a0aab28 216 hVertexZ(NULL),
a280ac15 217 hTriggerClass(NULL),
ae947965 218 hTriggerClassSelected(NULL),
219 hReweightMCHistPi0(NULL),
220 hReweightMCHistEta(NULL),
221 hReweightMCHistK0s(NULL),
fcc79cf5 222 fFitDataPi0(NULL),
223 fFitDataEta(NULL),
224 fFitDataK0s(NULL),
ae947965 225 fPreSelCut(kFALSE),
226 fTriggerSelectedManually(kFALSE),
227 fSpecialTriggerName("")
aff90284 228
3b77b2d1 229{
4a0aab28 230 InitPIDResponse();
231 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
232 fCutString=new TObjString((GetCutNumber()).Data());
3b77b2d1 233
e5b6e8a6 234 fElectronLabelArray = new Int_t[fElectronArraySize];
0a2b2b4b 235 fUtils = new AliAnalysisUtils();
236 //if you do not want to apply the cut on the distance between the SPD and TRK vertex:
11c1e680 237 //fUtils->SetCutOnZVertexSPD(kFALSE);
238
ca91a3e1 239
3b77b2d1 240}
241
1d9e6011 242//________________________________________________________________________
243AliConversionCuts::AliConversionCuts(const AliConversionCuts &ref) :
244 AliAnalysisCuts(ref),
245 fHistograms(NULL),
246 fHeaderList(ref.fHeaderList),
247 fPIDResponse(NULL),
248 fEventQuality(ref.fEventQuality),
249 fMaxR(ref.fMaxR),
250 fMinR(ref.fMinR),
251 fEtaCut(ref.fEtaCut),
252 fEtaCutMin(ref.fEtaCutMin),
253 fPtCut(ref.fPtCut),
254 fSinglePtCut(ref.fSinglePtCut),
255 fMaxZ(ref.fMaxZ),
256 fMinClsTPC(ref.fMinClsTPC),
257 fMinClsTPCToF(ref.fMinClsTPCToF),
258 fLineCutZRSlope(ref.fLineCutZRSlope),
259 fLineCutZValue(ref.fLineCutZValue),
260 fLineCutZRSlopeMin(ref.fLineCutZRSlopeMin),
261 fLineCutZValueMin(ref.fLineCutZValueMin),
262 fChi2CutConversion(ref.fChi2CutConversion),
263 fPIDProbabilityCutNegativeParticle(ref.fPIDProbabilityCutNegativeParticle),
264 fPIDProbabilityCutPositiveParticle(ref.fPIDProbabilityCutPositiveParticle),
265 fDodEdxSigmaCut(ref. fDodEdxSigmaCut),
266 fDoTOFsigmaCut(ref.fDoTOFsigmaCut),
267 fPIDTRDEfficiency(ref.fPIDTRDEfficiency),
268 fDoTRDPID(ref.fDoTRDPID),
269 fPIDnSigmaAboveElectronLine(ref.fPIDnSigmaAboveElectronLine),
270 fPIDnSigmaBelowElectronLine(ref.fPIDnSigmaBelowElectronLine),
271 fTofPIDnSigmaAboveElectronLine(ref.fTofPIDnSigmaAboveElectronLine),
272 fTofPIDnSigmaBelowElectronLine(ref.fTofPIDnSigmaBelowElectronLine),
273 fPIDnSigmaAbovePionLine(ref.fPIDnSigmaAbovePionLine),
274 fPIDnSigmaAbovePionLineHighPt(ref.fPIDnSigmaAbovePionLineHighPt),
275 fPIDMinPnSigmaAbovePionLine(ref.fPIDMinPnSigmaAbovePionLine),
276 fPIDMaxPnSigmaAbovePionLine(ref.fPIDMaxPnSigmaAbovePionLine),
277 fDoKaonRejectionLowP(ref.fDoKaonRejectionLowP),
278 fDoProtonRejectionLowP(ref.fDoProtonRejectionLowP),
279 fDoPionRejectionLowP(ref.fDoPionRejectionLowP),
280 fPIDnSigmaAtLowPAroundKaonLine(ref.fPIDnSigmaAtLowPAroundKaonLine),
281 fPIDnSigmaAtLowPAroundProtonLine(ref.fPIDnSigmaAtLowPAroundProtonLine),
282 fPIDnSigmaAtLowPAroundPionLine(ref.fPIDnSigmaAtLowPAroundPionLine),
283 fPIDMinPKaonRejectionLowP(ref.fPIDMinPKaonRejectionLowP),
284 fPIDMinPProtonRejectionLowP(ref.fPIDMinPProtonRejectionLowP),
285 fPIDMinPPionRejectionLowP(ref.fPIDMinPPionRejectionLowP),
286 fDoQtGammaSelection(ref.fDoQtGammaSelection),
287 fDoHighPtQtGammaSelection(ref.fDoHighPtQtGammaSelection),
288 fQtMax(ref.fQtMax),
289 fHighPtQtMax(ref.fHighPtQtMax),
290 fPtBorderForQt(ref.fPtBorderForQt),
291 fXVertexCut(ref.fXVertexCut),
292 fYVertexCut(ref.fYVertexCut),
293 fZVertexCut(ref.fZVertexCut),
294 fNSigmaMass(ref.fNSigmaMass),
295 fUseEtaMinCut(ref.fUseEtaMinCut),
296 fUseOnFlyV0Finder(ref.fUseOnFlyV0Finder),
0a2b2b4b 297 fDoPhotonAsymmetryCut(ref.fDoPhotonAsymmetryCut),
1d9e6011 298 fMinPPhotonAsymmetryCut(ref.fMinPPhotonAsymmetryCut),
299 fMinPhotonAsymmetry(ref.fMinPhotonAsymmetry),
300 fIsHeavyIon(ref.fIsHeavyIon),
301 fDetectorCentrality(ref.fDetectorCentrality),
302 fModCentralityClass(ref.fModCentralityClass),
303 fMaxVertexZ(ref.fMaxVertexZ),
304 fCentralityMin(ref.fCentralityMin),
305 fCentralityMax(ref.fCentralityMax),
306 fUseCorrectedTPCClsInfo(ref.fUseCorrectedTPCClsInfo),
307 fUseTOFpid(ref.fUseTOFpid),
308 fMultiplicityMethod(ref.fMultiplicityMethod),
309 fSpecialTrigger(ref.fSpecialTrigger),
310 fRemovePileUp(ref.fRemovePileUp),
311 fOpeningAngle(ref.fOpeningAngle),
312 fPsiPairCut(ref.fPsiPairCut),
313 fCosPAngleCut(ref.fCosPAngleCut),
314 fDoToCloseV0sCut(ref.fDoToCloseV0sCut),
315 fRejectExtraSignals(ref.fRejectExtraSignals),
316 fminV0Dist(ref.fminV0Dist),
317 fDoSharedElecCut(ref.fDoSharedElecCut),
318 fOfflineTriggerMask(ref.fOfflineTriggerMask),
319 fHasV0AND(ref.fHasV0AND),
320 fIsSDDFired(ref.fIsSDDFired),
321 fRandom(ref.fRandom),
322 fElectronArraySize(ref.fElectronArraySize),
323 fElectronLabelArray(NULL),
4803eb1f 324 fDCAZPrimVtxCut(ref.fDCAZPrimVtxCut),
325 fDCARPrimVtxCut(ref.fDCAZPrimVtxCut),
1d9e6011 326 fConversionPointXArray(ref.fConversionPointXArray),
327 fConversionPointYArray(ref.fConversionPointYArray),
328 fConversionPointZArray(ref.fConversionPointZArray),
329 fnHeaders(ref.fnHeaders),
330 fNotRejectedStart(NULL),
331 fNotRejectedEnd(NULL),
332 fGeneratorNames(ref.fGeneratorNames),
333 fCutString(NULL),
0a2b2b4b 334 fUtils(NULL),
11c1e680 335 fEtaShift(ref.fEtaShift),
336 fDoEtaShift(ref.fDoEtaShift),
ae947965 337 fDoReweightHistoMCPi0(ref.fDoReweightHistoMCPi0),
338 fDoReweightHistoMCEta(ref.fDoReweightHistoMCEta),
339 fDoReweightHistoMCK0s(ref.fDoReweightHistoMCK0s),
340 fPathTrFReweighting(ref.fPathTrFReweighting),
341 fNameHistoReweightingPi0(ref.fNameHistoReweightingPi0),
342 fNameHistoReweightingEta(ref.fNameHistoReweightingEta),
343 fNameHistoReweightingK0s(ref.fNameHistoReweightingK0s),
fcc79cf5 344 fNameFitDataPi0(ref.fNameFitDataPi0),
345 fNameFitDataEta(ref.fNameFitDataEta),
346 fNameFitDataK0s(ref.fNameFitDataK0s),
1d9e6011 347 hdEdxCuts(NULL),
348 hTPCdEdxbefore(NULL),
349 hTPCdEdxafter(NULL),
350 hTPCdEdxSigbefore(NULL),
351 hTPCdEdxSigafter(NULL),
352 hTOFbefore(NULL),
353 hTOFSigbefore(NULL),
354 hTOFSigafter(NULL),
355 hTrackCuts(NULL),
356 hPhotonCuts(NULL),
357 hInvMassbefore(NULL),
358 hArmenterosbefore(NULL),
359 hInvMassafter(NULL),
360 hArmenterosafter(NULL),
361 hAcceptanceCuts(NULL),
362 hCutIndex(NULL),
363 hV0EventCuts(NULL),
364 hCentrality(NULL),
4803eb1f 365 hCentralityVsNumberOfPrimaryTracks(NULL),
1d9e6011 366 hVertexZ(NULL),
a280ac15 367 hTriggerClass(NULL),
ae947965 368 hTriggerClassSelected(NULL),
aff90284 369 hReweightMCHistPi0(ref.hReweightMCHistPi0),
370 hReweightMCHistEta(ref.hReweightMCHistEta),
371 hReweightMCHistK0s(ref.hReweightMCHistK0s),
372 fFitDataPi0(ref.fFitDataPi0),
373 fFitDataEta(ref.fFitDataEta),
374 fFitDataK0s(ref.fFitDataK0s),
ae947965 375 fPreSelCut(ref.fPreSelCut),
376 fTriggerSelectedManually(ref.fTriggerSelectedManually),
377 fSpecialTriggerName(ref.fSpecialTriggerName)
1d9e6011 378{
379 // Copy Constructor
a280ac15 380 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=ref.fCuts[jj];}
381 fCutString=new TObjString((GetCutNumber()).Data());
382 fElectronLabelArray = new Int_t[fElectronArraySize];
0a2b2b4b 383 fUtils = new AliAnalysisUtils();
a280ac15 384 // dont copy histograms (if you like histograms, call InitCutHistograms())
11c1e680 385
1d9e6011 386}
387
a280ac15 388
3b77b2d1 389//________________________________________________________________________
390AliConversionCuts::~AliConversionCuts() {
4a0aab28 391 // Destructor
392 //Deleting fHistograms leads to seg fault it it's added to output collection of a task
393 // if(fHistograms)
fcc79cf5 394 // delete fHistograms;
4a0aab28 395 // fHistograms = NULL;
92efd725 396 if(fCutString != NULL){
397 delete fCutString;
398 fCutString = NULL;
399 }
92efd725 400 if(fElectronLabelArray){
401 delete fElectronLabelArray;
402 fElectronLabelArray = NULL;
403 }
ca91a3e1 404 if(fNotRejectedStart){
405 delete[] fNotRejectedStart;
406 fNotRejectedStart = NULL;
407 }
408 if(fNotRejectedEnd){
409 delete[] fNotRejectedEnd;
410 fNotRejectedEnd = NULL;
411 }
412 if(fGeneratorNames){
413 delete[] fGeneratorNames;
414 fGeneratorNames = NULL;
415 }
0a2b2b4b 416 if(fUtils){
417 delete fUtils;
418 fUtils = NULL;
419 }
420
3b77b2d1 421}
422
423//________________________________________________________________________
92efd725 424void AliConversionCuts::InitCutHistograms(TString name, Bool_t preCut){
3b77b2d1 425
4a0aab28 426 // Initialize Cut Histograms for QA (only initialized and filled if function is called)
ccfa8c0d 427 TH1::AddDirectory(kFALSE);
4a0aab28 428
429 if(fHistograms != NULL){
430 delete fHistograms;
431 fHistograms=NULL;
432 }
433 if(fHistograms==NULL){
434 fHistograms=new TList();
ccfa8c0d 435 fHistograms->SetOwner(kTRUE);
4a0aab28 436 if(name=="")fHistograms->SetName(Form("ConvCuts_%s",GetCutNumber().Data()));
437 else fHistograms->SetName(Form("%s_%s",name.Data(),GetCutNumber().Data()));
438 }
439
fcc79cf5 440 if (hReweightMCHistPi0){
441 hReweightMCHistPi0->SetName("MCInputForWeightingPi0");
442 fHistograms->Add(hReweightMCHistPi0);
443 }
444 if (hReweightMCHistEta){
445 hReweightMCHistEta->SetName("MCInputForWeightingEta");
446 fHistograms->Add(hReweightMCHistEta);
aff90284 447 }
fcc79cf5 448 if (hReweightMCHistK0s){
449 hReweightMCHistK0s->SetName("MCInputForWeightingK0s");
450 fHistograms->Add(hReweightMCHistK0s);
aff90284 451 }
34a75862 452// if (fFitDataPi0){
453// fFitDataPi0->SetName("DataFitForWeightingPi0");
454// fHistograms->Add(fFitDataPi0);
455// }
456// if (fFitDataEta){
457// fFitDataEta->SetName("DataFitForWeightingEta");
458// fHistograms->Add(fFitDataEta);
459// }
460// if (fFitDataK0s){
461// fFitDataK0s->SetName("DataFitForWeightingK0s");
462// fHistograms->Add(fFitDataK0s);
463// }
4a0aab28 464 // IsPhotonSelected
465 hCutIndex=new TH1F(Form("IsPhotonSelected %s",GetCutNumber().Data()),"IsPhotonSelected",10,-0.5,9.5);
466 hCutIndex->GetXaxis()->SetBinLabel(kPhotonIn+1,"in");
467 hCutIndex->GetXaxis()->SetBinLabel(kOnFly+1,"onfly");
468 hCutIndex->GetXaxis()->SetBinLabel(kNoTracks+1,"no tracks");
469 hCutIndex->GetXaxis()->SetBinLabel(kdEdxCuts+1,"dEdx");
470 hCutIndex->GetXaxis()->SetBinLabel(kTrackCuts+1,"Track cuts");
471 hCutIndex->GetXaxis()->SetBinLabel(kConvPointFail+1,"ConvPoint fail");
472 hCutIndex->GetXaxis()->SetBinLabel(kPhotonCuts+1,"PhotonCuts");
473 hCutIndex->GetXaxis()->SetBinLabel(kPhotonOut+1,"out");
474 fHistograms->Add(hCutIndex);
475
476 // Track Cuts
e5b6e8a6 477 hTrackCuts=new TH1F(Form("TrackCuts %s",GetCutNumber().Data()),"TrackCuts",9,-0.5,8.5);
4a0aab28 478 hTrackCuts->GetXaxis()->SetBinLabel(1,"in");
479 hTrackCuts->GetXaxis()->SetBinLabel(2,"likesign");
480 hTrackCuts->GetXaxis()->SetBinLabel(3,"ntpccl");
481 hTrackCuts->GetXaxis()->SetBinLabel(4,"acceptance");
482 hTrackCuts->GetXaxis()->SetBinLabel(5,"singlept");
483 hTrackCuts->GetXaxis()->SetBinLabel(6,"TPCrefit");
484 hTrackCuts->GetXaxis()->SetBinLabel(7,"kink");
485 hTrackCuts->GetXaxis()->SetBinLabel(8,"out");
486 fHistograms->Add(hTrackCuts);
487
488 // Photon Cuts
4803eb1f 489 hPhotonCuts=new TH1F(Form("PhotonCuts %s",GetCutNumber().Data()),"PhotonCuts",14,-0.5,13.5);
4a0aab28 490 hPhotonCuts->GetXaxis()->SetBinLabel(1,"in");
491 hPhotonCuts->GetXaxis()->SetBinLabel(2,"qtcut");
492 hPhotonCuts->GetXaxis()->SetBinLabel(3,"chi2");
493 hPhotonCuts->GetXaxis()->SetBinLabel(4,"acceptance");
494 hPhotonCuts->GetXaxis()->SetBinLabel(5,"asymmetry");
495 hPhotonCuts->GetXaxis()->SetBinLabel(6,"pidprob");
496 hPhotonCuts->GetXaxis()->SetBinLabel(7,"cortpcclinfo");
497 hPhotonCuts->GetXaxis()->SetBinLabel(8,"PsiPair");
498 hPhotonCuts->GetXaxis()->SetBinLabel(9,"CosPAngle");
4803eb1f 499 hPhotonCuts->GetXaxis()->SetBinLabel(10,"DCA R");
500 hPhotonCuts->GetXaxis()->SetBinLabel(11,"DCA Z");
501 hPhotonCuts->GetXaxis()->SetBinLabel(12,"out");
4a0aab28 502 fHistograms->Add(hPhotonCuts);
503
504 if(preCut){
e5b6e8a6 505 hInvMassbefore=new TH1F(Form("InvMass_before %s",GetCutNumber().Data()),"InvMass_before",1000,0,0.3);
4a0aab28 506 fHistograms->Add(hInvMassbefore);
e5b6e8a6 507 hArmenterosbefore=new TH2F(Form("Armenteros_before %s",GetCutNumber().Data()),"Armenteros_before",200,-1,1,1000,0,1.);
4a0aab28 508 fHistograms->Add(hArmenterosbefore);
509 }
e5b6e8a6 510 hInvMassafter=new TH1F(Form("InvMass_after %s",GetCutNumber().Data()),"InvMass_after",1000,0,0.3);
4a0aab28 511 fHistograms->Add(hInvMassafter);
512 hArmenterosafter=new TH2F(Form("Armenteros_after %s",GetCutNumber().Data()),"Armenteros_after",200,-1,1,250,0,0.25);
513 fHistograms->Add(hArmenterosafter);
514
515 hAcceptanceCuts=new TH1F(Form("PhotonAcceptanceCuts %s",GetCutNumber().Data()),"PhotonAcceptanceCuts",10,-0.5,9.5);
516 hAcceptanceCuts->GetXaxis()->SetBinLabel(1,"in");
517 hAcceptanceCuts->GetXaxis()->SetBinLabel(2,"maxR");
518 hAcceptanceCuts->GetXaxis()->SetBinLabel(3,"minR");
519 hAcceptanceCuts->GetXaxis()->SetBinLabel(4,"line");
520 hAcceptanceCuts->GetXaxis()->SetBinLabel(5,"maxZ");
521 hAcceptanceCuts->GetXaxis()->SetBinLabel(6,"eta");
522 hAcceptanceCuts->GetXaxis()->SetBinLabel(7,"minpt");
523 hAcceptanceCuts->GetXaxis()->SetBinLabel(8,"out");
524 fHistograms->Add(hAcceptanceCuts);
525
526 // dEdx Cuts
527 hdEdxCuts=new TH1F(Form("dEdxCuts %s",GetCutNumber().Data()),"dEdxCuts",10,-0.5,9.5);
528 hdEdxCuts->GetXaxis()->SetBinLabel(1,"in");
529 hdEdxCuts->GetXaxis()->SetBinLabel(2,"TPCelectron");
530 hdEdxCuts->GetXaxis()->SetBinLabel(3,"TPCpion");
531 hdEdxCuts->GetXaxis()->SetBinLabel(4,"TPCpionhighp");
532 hdEdxCuts->GetXaxis()->SetBinLabel(5,"TPCkaonlowprej");
533 hdEdxCuts->GetXaxis()->SetBinLabel(6,"TPCprotonlowprej");
534 hdEdxCuts->GetXaxis()->SetBinLabel(7,"TPCpionlowprej");
535 hdEdxCuts->GetXaxis()->SetBinLabel(8,"TOFelectron");
536 hdEdxCuts->GetXaxis()->SetBinLabel(9,"TRDelectron");
537 hdEdxCuts->GetXaxis()->SetBinLabel(10,"out");
538 fHistograms->Add(hdEdxCuts);
e5b6e8a6 539
4a0aab28 540 TAxis *AxisBeforedEdx = NULL;
e5b6e8a6 541 TAxis *AxisBeforedEdxSig = NULL;
4a0aab28 542 TAxis *AxisBeforeTOF = NULL;
e5b6e8a6 543 TAxis *AxisBeforeTOFSig = NULL;
4a0aab28 544 if(preCut){
e5b6e8a6 545 hTPCdEdxbefore=new TH2F(Form("Gamma_dEdx_before %s",GetCutNumber().Data()),"dEdx Gamma before" ,150,0.03,20,800,0,200);
4a0aab28 546 fHistograms->Add(hTPCdEdxbefore);
e5b6e8a6 547 AxisBeforedEdx = hTPCdEdxbefore->GetXaxis();
548 hTPCdEdxSigbefore=new TH2F(Form("Gamma_dEdxSig_before %s",GetCutNumber().Data()),"dEdx Sigma Gamma before" ,150,0.03,20,400,-10,10);
549 fHistograms->Add(hTPCdEdxSigbefore);
550 AxisBeforedEdxSig = hTPCdEdxSigbefore->GetXaxis();
4a0aab28 551
e5b6e8a6 552 hTOFbefore=new TH2F(Form("Gamma_TOF_before %s",GetCutNumber().Data()),"TOF Gamma before" ,150,0.03,20,11000,-1000,10000);
4a0aab28 553 fHistograms->Add(hTOFbefore);
e5b6e8a6 554 AxisBeforeTOF = hTOFbefore->GetXaxis();
555 hTOFSigbefore=new TH2F(Form("Gamma_TOFSig_before %s",GetCutNumber().Data()),"TOF Sigma Gamma before" ,150,0.03,20,400,-6,10);
556 fHistograms->Add(hTOFSigbefore);
557 AxisBeforeTOFSig = hTOFSigbefore->GetXaxis();
558
4a0aab28 559 }
e5b6e8a6 560 hTPCdEdxSigafter=new TH2F(Form("Gamma_dEdxSig_after %s",GetCutNumber().Data()),"dEdx Sigma Gamma after" ,150,0.03,20,400, -10,10);
561 fHistograms->Add(hTPCdEdxSigafter);
562
563 hTPCdEdxafter=new TH2F(Form("Gamma_dEdx_after %s",GetCutNumber().Data()),"dEdx Gamma after" ,150,0.03,20,800,0,200);
4a0aab28 564 fHistograms->Add(hTPCdEdxafter);
565
e5b6e8a6 566 hTOFSigafter=new TH2F(Form("Gamma_TOFSig_after %s",GetCutNumber().Data()),"TOF Sigma Gamma after" ,150,0.03,20,400,-6,10);
567 fHistograms->Add(hTOFSigafter);
4a0aab28 568
e5b6e8a6 569 TAxis *AxisAfter = hTPCdEdxSigafter->GetXaxis();
4a0aab28 570 Int_t bins = AxisAfter->GetNbins();
571 Double_t from = AxisAfter->GetXmin();
572 Double_t to = AxisAfter->GetXmax();
573 Double_t *newBins = new Double_t[bins+1];
574 newBins[0] = from;
575 Double_t factor = TMath::Power(to/from, 1./bins);
576 for(Int_t i=1; i<=bins; ++i) newBins[i] = factor * newBins[i-1];
577 AxisAfter->Set(bins, newBins);
e5b6e8a6 578 AxisAfter = hTOFSigafter->GetXaxis();
579 AxisAfter->Set(bins, newBins);
580 AxisAfter = hTPCdEdxafter->GetXaxis();
4a0aab28 581 AxisAfter->Set(bins, newBins);
582 if(preCut){
583 AxisBeforedEdx->Set(bins, newBins);
584 AxisBeforeTOF->Set(bins, newBins);
e5b6e8a6 585 AxisBeforedEdxSig->Set(bins, newBins);
586 AxisBeforeTOFSig->Set(bins, newBins);
4a0aab28 587 }
588 delete [] newBins;
e5b6e8a6 589
4a0aab28 590 // Event Cuts and Info
591 if(preCut){
e5b6e8a6 592 hV0EventCuts=new TH1F(Form("ESD_EventCuts %s",GetCutNumber().Data()),"Event Cuts",7,-0.5,6.5);
4a0aab28 593 hV0EventCuts->GetXaxis()->SetBinLabel(1,"in");
594 hV0EventCuts->GetXaxis()->SetBinLabel(2,"OfflineTrigger");
e5b6e8a6 595 hV0EventCuts->GetXaxis()->SetBinLabel(3,"nvtxcontr");
596 hV0EventCuts->GetXaxis()->SetBinLabel(4,"VertexZ");
4a0aab28 597 hV0EventCuts->GetXaxis()->SetBinLabel(5,"pileup");
598 hV0EventCuts->GetXaxis()->SetBinLabel(6,"centrsel");
599 hV0EventCuts->GetXaxis()->SetBinLabel(7,"out");
600 fHistograms->Add(hV0EventCuts);
e5b6e8a6 601
4803eb1f 602 hCentrality=new TH1F(Form("Centrality %s",GetCutNumber().Data()),"Centrality",1000,0,100);
4a0aab28 603 fHistograms->Add(hCentrality);
46ec68c9 604 hCentralityVsNumberOfPrimaryTracks=new TH2F(Form("Centrality vs Primary Tracks %s",GetCutNumber().Data()),"Centrality vs Primary Tracks ",100,0,100,4000,0,4000);
4803eb1f 605 fHistograms->Add(hCentralityVsNumberOfPrimaryTracks);
4a0aab28 606 hVertexZ=new TH1F(Form("VertexZ %s",GetCutNumber().Data()),"VertexZ",1000,-50,50);
607 fHistograms->Add(hVertexZ);
e5b6e8a6 608
11c1e680 609 hTriggerClass= new TH1F(Form("OfflineTrigger %s",GetCutNumber().Data()),"OfflineTrigger",35,-0.5,34.5);
e5b6e8a6 610 hTriggerClass->GetXaxis()->SetBinLabel( 1,"kMB");
611 hTriggerClass->GetXaxis()->SetBinLabel( 2,"kINT7");
612 hTriggerClass->GetXaxis()->SetBinLabel( 3,"kMUON");
613 hTriggerClass->GetXaxis()->SetBinLabel( 4,"kHighMult");
614 hTriggerClass->GetXaxis()->SetBinLabel( 5,"kKEMC1");
615 hTriggerClass->GetXaxis()->SetBinLabel( 6,"kCINT5");
616 hTriggerClass->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
617 hTriggerClass->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
618 hTriggerClass->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
619 hTriggerClass->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
620 hTriggerClass->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
621 hTriggerClass->GetXaxis()->SetBinLabel(12,"kMUS7");
622 hTriggerClass->GetXaxis()->SetBinLabel(13,"kPHI1");
623 hTriggerClass->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
624 hTriggerClass->GetXaxis()->SetBinLabel(15,"kEMCEJE");
625 hTriggerClass->GetXaxis()->SetBinLabel(16,"kEMCEGA");
626 hTriggerClass->GetXaxis()->SetBinLabel(17,"kCentral");
627 hTriggerClass->GetXaxis()->SetBinLabel(18,"kSemiCentral");
628 hTriggerClass->GetXaxis()->SetBinLabel(19,"kDG5");
629 hTriggerClass->GetXaxis()->SetBinLabel(20,"kZED");
630 hTriggerClass->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
631 hTriggerClass->GetXaxis()->SetBinLabel(22,"kINT8");
632 hTriggerClass->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
633 hTriggerClass->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
634 hTriggerClass->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
635 hTriggerClass->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
636 hTriggerClass->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
637 hTriggerClass->GetXaxis()->SetBinLabel(28,"kUserDefined");
11c1e680 638 hTriggerClass->GetXaxis()->SetBinLabel(29,"kTRD");
639 hTriggerClass->GetXaxis()->SetBinLabel(30,"kFastOnly");
640 hTriggerClass->GetXaxis()->SetBinLabel(31,"kAnyINT");
641 hTriggerClass->GetXaxis()->SetBinLabel(32,"kAny");
642 hTriggerClass->GetXaxis()->SetBinLabel(33,"V0AND");
643 hTriggerClass->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
644 hTriggerClass->GetXaxis()->SetBinLabel(35,"failed Physics Selection");
4a0aab28 645 fHistograms->Add(hTriggerClass);
ae947965 646 }
647 if(!preCut){
11c1e680 648 hTriggerClassSelected= new TH1F(Form("OfflineTriggerSelected %s",GetCutNumber().Data()),"OfflineTriggerSelected",34,-0.5,33.5);
a280ac15 649 hTriggerClassSelected->GetXaxis()->SetBinLabel( 1,"kMB");
650 hTriggerClassSelected->GetXaxis()->SetBinLabel( 2,"kINT7");
651 hTriggerClassSelected->GetXaxis()->SetBinLabel( 3,"kMUON");
652 hTriggerClassSelected->GetXaxis()->SetBinLabel( 4,"kHighMult");
653 hTriggerClassSelected->GetXaxis()->SetBinLabel( 5,"kKEMC1");
654 hTriggerClassSelected->GetXaxis()->SetBinLabel( 6,"kCINT5");
655 hTriggerClassSelected->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
656 hTriggerClassSelected->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
657 hTriggerClassSelected->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
658 hTriggerClassSelected->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
659 hTriggerClassSelected->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
660 hTriggerClassSelected->GetXaxis()->SetBinLabel(12,"kMUS7");
661 hTriggerClassSelected->GetXaxis()->SetBinLabel(13,"kPHI1");
662 hTriggerClassSelected->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
663 hTriggerClassSelected->GetXaxis()->SetBinLabel(15,"kEMCEJE");
664 hTriggerClassSelected->GetXaxis()->SetBinLabel(16,"kEMCEGA");
665 hTriggerClassSelected->GetXaxis()->SetBinLabel(17,"kCentral");
666 hTriggerClassSelected->GetXaxis()->SetBinLabel(18,"kSemiCentral");
667 hTriggerClassSelected->GetXaxis()->SetBinLabel(19,"kDG5");
668 hTriggerClassSelected->GetXaxis()->SetBinLabel(20,"kZED");
669 hTriggerClassSelected->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
670 hTriggerClassSelected->GetXaxis()->SetBinLabel(22,"kINT8");
671 hTriggerClassSelected->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
672 hTriggerClassSelected->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
673 hTriggerClassSelected->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
674 hTriggerClassSelected->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
675 hTriggerClassSelected->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
676 hTriggerClassSelected->GetXaxis()->SetBinLabel(28,"kUserDefined");
11c1e680 677 hTriggerClassSelected->GetXaxis()->SetBinLabel(29,"kTRD");
678 hTriggerClassSelected->GetXaxis()->SetBinLabel(30,"kFastOnly");
679 hTriggerClassSelected->GetXaxis()->SetBinLabel(31,"kAnyINT");
680 hTriggerClassSelected->GetXaxis()->SetBinLabel(32,"kAny");
681 hTriggerClassSelected->GetXaxis()->SetBinLabel(33,"V0AND");
682 hTriggerClassSelected->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
a280ac15 683 fHistograms->Add(hTriggerClassSelected);
4a0aab28 684 }
ccfa8c0d 685 TH1::AddDirectory(kTRUE);
3b77b2d1 686}
687
688//________________________________________________________________________
689Bool_t AliConversionCuts::InitPIDResponse(){
4a0aab28 690 // Set Pointer to AliPIDResponse
3b77b2d1 691
4a0aab28 692 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
e5b6e8a6 693 if(man) {
4a0aab28 694 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
695 fPIDResponse = (AliPIDResponse*)inputHandler->GetPIDResponse();
696 if(fPIDResponse)return kTRUE;
e5b6e8a6 697
4a0aab28 698 }
e5b6e8a6 699
ca91a3e1 700
4a0aab28 701 return kFALSE;
3b77b2d1 702}
703///________________________________________________________________________
92efd725 704Bool_t AliConversionCuts::EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent){
4a0aab28 705 // Process Event Selection
3b77b2d1 706
4a0aab28 707 Int_t cutindex=0;
708 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
709 cutindex++;
e5b6e8a6 710
4a0aab28 711 // Check for MC event
ae947965 712 if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
4a0aab28 713 // Check if MC event is correctly loaded
714 AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
715 if (!mcHandler){
716 fEventQuality = 2;
717 return kFALSE;
718 }
719 if (!mcHandler->InitOk() ){
720 fEventQuality = 2;
721 return kFALSE;
722 }
723 if (!mcHandler->TreeK() ){
724 fEventQuality = 2;
725 return kFALSE;
726 }
727 if (!mcHandler->TreeTR() ) {
728 fEventQuality = 2;
729 return kFALSE;
730 }
731 }
4a0aab28 732
e5b6e8a6 733 // Event Trigger
4803eb1f 734// cout << "before event trigger" << endl;
1186afd2 735 if(!IsTriggerSelected(fInputEvent)){
4a0aab28 736 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
737 fEventQuality = 3;
738 return kFALSE;
739 }
740 cutindex++;
a280ac15 741
e5b6e8a6 742 if(fInputEvent->IsA()==AliESDEvent::Class()){
743 AliTriggerAnalysis fTriggerAnalysis;// = new AliTriggerAnalysis;
744 fHasV0AND = fTriggerAnalysis.IsOfflineTriggerFired((AliESDEvent*)fInputEvent, AliTriggerAnalysis::kV0AND);
11c1e680 745 if(fHasV0AND&&hTriggerClass)hTriggerClass->Fill(32);
e5b6e8a6 746 }
ccfa8c0d 747// cout << "event number " << ((AliESDEvent*)fInputEvent)->GetEventNumberInFile() << " entered"<< endl;
748
4a0aab28 749
e5b6e8a6 750 // Number of Contributors Cut
751 if(GetNumberOfContributorsVtx(fInputEvent)<=0) {
4a0aab28 752 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
e5b6e8a6 753 fEventQuality = 5;
4a0aab28 754 return kFALSE;
755 }
756 cutindex++;
757
e5b6e8a6 758 // Z Vertex Position Cut
759 if(!VertexZCut(fInputEvent)){
4a0aab28 760 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
e5b6e8a6 761 fEventQuality = 4;
4a0aab28 762 return kFALSE;
763 }
764 cutindex++;
92efd725 765
4a0aab28 766 // Pile Up Rejection
3b77b2d1 767
4a0aab28 768 if(fRemovePileUp){
769 if(fInputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
770 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
771 fEventQuality = 6;
772 return kFALSE;
773 }
774 }
775 cutindex++;
776
777 // Centrality Selection
e5b6e8a6 778 if(!IsCentralitySelected(fInputEvent,fMCEvent)){
4a0aab28 779 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
780 fEventQuality = 1;
781 return kFALSE;
782 }
783 cutindex++;
784
785 // Fill Event Histograms
786 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
787 if(hVertexZ)hVertexZ->Fill(fInputEvent->GetPrimaryVertex()->GetZ());
788 if(hCentrality)hCentrality->Fill(GetCentrality(fInputEvent));
4803eb1f 789 if(hCentralityVsNumberOfPrimaryTracks)
790 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(fInputEvent),
791 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
792 ->GetTask("V0ReaderV1"))->GetNumberOfPrimaryTracks());
4a0aab28 793 fEventQuality = 0;
794 return kTRUE;
3b77b2d1 795}
796
797///________________________________________________________________________
92efd725 798Bool_t AliConversionCuts::PhotonIsSelectedMC(TParticle *particle,AliStack *fMCStack,Bool_t checkForConvertedGamma){
4a0aab28 799 // MonteCarlo Photon Selection
3b77b2d1 800
4a0aab28 801 if(!fMCStack)return kFALSE;
3b77b2d1 802
4a0aab28 803 if (particle->GetPdgCode() == 22){
e5b6e8a6 804
4a0aab28 805
11c1e680 806 if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
807 return kFALSE;
808 if(fEtaCutMin>-0.1){
809 if( particle->Eta() < (fEtaCutMin + fEtaShift) && particle->Eta() > (-fEtaCutMin + fEtaShift) )
810 return kFALSE;
811 }
ccfa8c0d 812
4a0aab28 813 if(particle->GetMother(0) >-1 && fMCStack->Particle(particle->GetMother(0))->GetPdgCode() == 22){
814 return kFALSE; // no photon as mothers!
815 }
816
817 if(particle->GetMother(0) >= fMCStack->GetNprimary()){
818 return kFALSE; // the gamma has a mother, and it is not a primary particle
819 }
820
821 if(!checkForConvertedGamma) return kTRUE; // return in case of accepted gamma
822
823 // looking for conversion gammas (electron + positron from pairbuilding (= 5) )
824 TParticle* ePos = NULL;
825 TParticle* eNeg = NULL;
826
827 if(particle->GetNDaughters() >= 2){
828 for(Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
829 TParticle *tmpDaughter = fMCStack->Particle(daughterIndex);
830 if(tmpDaughter->GetUniqueID() == 5){
831 if(tmpDaughter->GetPdgCode() == 11){
832 eNeg = tmpDaughter;
833 } else if(tmpDaughter->GetPdgCode() == -11){
834 ePos = tmpDaughter;
835 }
836 }
837 }
838 }
839
840 if(ePos == NULL || eNeg == NULL){ // means we do not have two daughters from pair production
841 return kFALSE;
842 }
e5b6e8a6 843
4a0aab28 844 if(ePos->Pt()<fSinglePtCut || eNeg->Pt()<fSinglePtCut){
845 return kFALSE; // no reconstruction below the Pt cut
846 }
e5b6e8a6 847
11c1e680 848 if( ePos->Eta() > (fEtaCut + fEtaShift) || ePos->Eta() < (-fEtaCut + fEtaShift) ||
849 eNeg->Eta() > (fEtaCut + fEtaShift) || eNeg->Eta() < (-fEtaCut + fEtaShift) )
4a0aab28 850 return kFALSE;
11c1e680 851
852 if(fEtaCutMin > -0.1){
853 if( (ePos->Eta() < (fEtaCutMin + fEtaShift) && ePos->Eta() > (-fEtaCutMin + fEtaShift)) ||
854 (eNeg->Eta() < (fEtaCutMin + fEtaShift) && eNeg->Eta() > (-fEtaCutMin + fEtaShift)) )
855 return kFALSE;
4a0aab28 856 }
e5b6e8a6 857
4a0aab28 858 if(ePos->R()>fMaxR){
859 return kFALSE; // cuts on distance from collision point
860 }
861
e5b6e8a6 862 if(abs(ePos->Vz()) > fMaxZ){
fcc79cf5 863 return kFALSE; // outside material
4a0aab28 864 }
e5b6e8a6 865 if(abs(eNeg->Vz()) > fMaxZ){
fcc79cf5 866 return kFALSE; // outside material
4a0aab28 867 }
868
e5b6e8a6 869 if( ePos->R() <= ((abs(ePos->Vz()) * fLineCutZRSlope) - fLineCutZValue)){
4a0aab28 870 return kFALSE; // line cut to exclude regions where we do not reconstruct
e5b6e8a6 871 } else if ( fEtaCutMin != -0.1 && ePos->R() >= ((abs(ePos->Vz()) * fLineCutZRSlopeMin) - fLineCutZValueMin)){
4a0aab28 872 return kFALSE;
873 }
e5b6e8a6 874
875 if( eNeg->R() <= ((abs(eNeg->Vz()) * fLineCutZRSlope) - fLineCutZValue)){
4a0aab28 876 return kFALSE; // line cut to exclude regions where we do not reconstruct
e5b6e8a6 877 } else if ( fEtaCutMin != -0.1 && eNeg->R() >= ((abs(eNeg->Vz()) * fLineCutZRSlopeMin) - fLineCutZValueMin)){
4a0aab28 878 return kFALSE;
879 }
e5b6e8a6 880
4a0aab28 881 return kTRUE;
882 //if(AcceptanceCut(particle,ePos,eNeg))return kTRUE;
883 }
884 return kFALSE;
3b77b2d1 885}
ae947965 886///________________________________________________________________________
887Bool_t AliConversionCuts::PhotonIsSelectedAODMC(AliAODMCParticle *particle,TClonesArray *aodmcArray,Bool_t checkForConvertedGamma){
888 // MonteCarlo Photon Selection
889
890 if(!aodmcArray)return kFALSE;
aff90284 891
ae947965 892 if (particle->GetPdgCode() == 22){
893 if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
894 return kFALSE;
895 if(fEtaCutMin>-0.1){
896 if( particle->Eta() < (fEtaCutMin + fEtaShift) && particle->Eta() > (-fEtaCutMin + fEtaShift) )
897 return kFALSE;
898 }
899
900 if(particle->GetMother() > -1){
901 if((static_cast<AliAODMCParticle*>(aodmcArray->At(particle->GetMother())))->GetPdgCode() == 22){
902 return kFALSE; // no photon as mothers!
903 }
904 if(!(static_cast<AliAODMCParticle*>(aodmcArray->At(particle->GetMother()))->IsPrimary())){
905 return kFALSE; // the gamma has a mother, and it is not a primary particle
906 }
907 }
aff90284 908
ae947965 909 if(!checkForConvertedGamma) return kTRUE; // return in case of accepted gamma
910
911 // looking for conversion gammas (electron + positron from pairbuilding (= 5) )
912 AliAODMCParticle* ePos = NULL;
913 AliAODMCParticle* eNeg = NULL;
914
915 if(particle->GetNDaughters() >= 2){
916 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
917 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(aodmcArray->At(daughterIndex));
918 if(!tmpDaughter) continue;
919 if(((tmpDaughter->GetMCProcessCode())) == 5){ // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
920 if(tmpDaughter->GetPdgCode() == 11){
921 eNeg = tmpDaughter;
922 } else if(tmpDaughter->GetPdgCode() == -11){
923 ePos = tmpDaughter;
924 }
925 }
926 }
927 }
aff90284 928
ae947965 929 if(ePos == NULL || eNeg == NULL){ // means we do not have two daughters from pair production
930 return kFALSE;
931 }
932
933 if(ePos->Pt()<fSinglePtCut || eNeg->Pt()<fSinglePtCut){
934 return kFALSE; // no reconstruction below the Pt cut
935 }
936
937 if( ePos->Eta() > (fEtaCut + fEtaShift) || ePos->Eta() < (-fEtaCut + fEtaShift) ||
938 eNeg->Eta() > (fEtaCut + fEtaShift) || eNeg->Eta() < (-fEtaCut + fEtaShift) )
939 return kFALSE;
940
941 if(fEtaCutMin > -0.1){
942 if( (ePos->Eta() < (fEtaCutMin + fEtaShift) && ePos->Eta() > (-fEtaCutMin + fEtaShift)) ||
943 (eNeg->Eta() < (fEtaCutMin + fEtaShift) && eNeg->Eta() > (-fEtaCutMin + fEtaShift)) )
944 return kFALSE;
945 }
946
947 Double_t rPos = sqrt( (ePos->Xv()*ePos->Xv()) + (ePos->Yv()*ePos->Yv()) );
948 Double_t rNeg = sqrt( (eNeg->Xv()*eNeg->Xv()) + (eNeg->Yv()*eNeg->Yv()) );
aff90284 949
ae947965 950 if(rPos>fMaxR){
951 return kFALSE; // cuts on distance from collision point
952 }
953 if(abs(ePos->Zv()) > fMaxZ){
fcc79cf5 954 return kFALSE; // outside material
ae947965 955 }
956 if(abs(eNeg->Zv()) > fMaxZ){
fcc79cf5 957 return kFALSE; // outside material
ae947965 958 }
3b77b2d1 959
ae947965 960 if( rPos <= ((abs(ePos->Zv()) * fLineCutZRSlope) - fLineCutZValue)){
961 return kFALSE; // line cut to exclude regions where we do not reconstruct
962 } else if ( fEtaCutMin != -0.1 && rPos >= ((abs(ePos->Zv()) * fLineCutZRSlopeMin) - fLineCutZValueMin)){
963 return kFALSE;
964 }
965
966 if( rNeg <= ((abs(eNeg->Zv()) * fLineCutZRSlope) - fLineCutZValue)){
967 return kFALSE; // line cut to exclude regions where we do not reconstruct
968 } else if ( fEtaCutMin != -0.1 && rNeg >= ((abs(eNeg->Zv()) * fLineCutZRSlopeMin) - fLineCutZValueMin)){
969 return kFALSE;
970 }
2bb2434e 971
ae947965 972 return kTRUE;
973 //if(AcceptanceCut(particle,ePos,eNeg))return kTRUE;
974 }
975 return kFALSE;
976}
3b77b2d1 977///________________________________________________________________________
978Bool_t AliConversionCuts::PhotonCuts(AliConversionPhotonBase *photon,AliVEvent *event)
979{ // Specific Photon Cuts
980
4a0aab28 981 Int_t cutIndex = 0;
982 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex);
983 cutIndex++;
984
985 // Fill Histos before Cuts
986 if(hInvMassbefore)hInvMassbefore->Fill(photon->GetMass());
e5b6e8a6 987
4a0aab28 988 if(hArmenterosbefore)hArmenterosbefore->Fill(photon->GetArmenterosAlpha(),photon->GetArmenterosQt());
989
990 // Gamma selection based on QT from Armenteros
991 if(fDoQtGammaSelection == kTRUE){
992 if(!ArmenterosQtCut(photon)){
993 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //1
994 return kFALSE;
995 }
996 }
997 cutIndex++; //2
998
999 // Chi Cut
1000 if(photon->GetChi2perNDF() > fChi2CutConversion || photon->GetChi2perNDF() <=0){
1001 {
1002 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //2
1003 return kFALSE;
1004 }
1005 }
1006 cutIndex++;//3
1007
1008 // Reconstruction Acceptance Cuts
1009 if(!AcceptanceCuts(photon)){
1010 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //3
1011 return kFALSE;
1012 }
1013
1014 cutIndex++; //4
1015 // Asymmetry Cut
1016 if(fDoPhotonAsymmetryCut == kTRUE){
1017 if(!AsymmetryCut(photon,event)){
1018 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //4
1019 return kFALSE;
1020 }
1021 }
1022
1023 //Check the pid probability
1024 cutIndex++; //5
1025 if(!PIDProbabilityCut(photon, event)) {
1026 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //5
1027 return kFALSE;
1028 }
1029
1030 cutIndex++; //6
1031 if(!CorrectedTPCClusterCut(photon, event)) {
1032 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //6
1033 return kFALSE;
1034 }
1035
1036
1037 cutIndex++; //7
1038 if(!PsiPairCut(photon)) {
1039 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //7
1040 return kFALSE;
1041 }
1042
1043 cutIndex++; //8
1044 if(!CosinePAngleCut(photon, event)) {
1045 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //8
1046 return kFALSE;
1047 }
1048
4803eb1f 1049 AliAODConversionPhoton* photonAOD = dynamic_cast<AliAODConversionPhoton*>(photon);
1050 if (photonAOD){
1051 photonAOD->CalculateDistanceOfClossetApproachToPrimVtx(event->GetPrimaryVertex());
aff90284 1052
4803eb1f 1053 cutIndex++; //9
1054 if(photonAOD->GetDCArToPrimVtx() > fDCARPrimVtxCut) { //DCA R cut of photon to primary vertex
1055 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //9
1056 return kFALSE;
1057 }
aff90284 1058
4803eb1f 1059 cutIndex++; //10
1060 if(abs(photonAOD->GetDCAzToPrimVtx()) > fDCAZPrimVtxCut) { //DCA Z cut of photon to primary vertex
1061 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //10
1062 return kFALSE;
1063 }
1064 } else {
1065 cutIndex++; //9
1066 cutIndex++; //10
1067 }
1068 cutIndex++; //11
1069 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //11
4a0aab28 1070
1071 // Histos after Cuts
1072 if(hInvMassafter)hInvMassafter->Fill(photon->GetMass());
1073 if(hArmenterosafter)hArmenterosafter->Fill(photon->GetArmenterosAlpha(),photon->GetArmenterosQt());
aff90284 1074
4a0aab28 1075 return kTRUE;
3b77b2d1 1076
1077}
1078
1079///________________________________________________________________________
1080Bool_t AliConversionCuts::CorrectedTPCClusterCut(AliConversionPhotonBase *photon, AliVEvent * event)
1081{ //Cut on corrected TPC Cluster Info
1082
4a0aab28 1083 AliVTrack * negTrack = GetTrack(event, photon->GetTrackLabelNegative());
1084 AliVTrack * posTrack = GetTrack(event, photon->GetTrackLabelPositive());
3b77b2d1 1085
4a0aab28 1086 if(!negTrack||!posTrack)return kFALSE;
3b77b2d1 1087
4a0aab28 1088 Double_t negclsToF=0;
3b77b2d1 1089
4a0aab28 1090 if (!fUseCorrectedTPCClsInfo ){
1091 if(negTrack->GetTPCNclsF()!=0){
1092 negclsToF = (Double_t)negTrack->GetNcls(1)/(Double_t)negTrack->GetTPCNclsF();}// Ncluster/Nfindablecluster
1093 }
1094 else {
1095 negclsToF = negTrack->GetTPCClusterInfo(2,0,GetFirstTPCRow(photon->GetConversionRadius()));
1096 }
3b77b2d1 1097
4a0aab28 1098 Double_t posclsToF = 0.;
1099 if (!fUseCorrectedTPCClsInfo ){
e5b6e8a6 1100 if(posTrack->GetTPCNclsF()!=0){
4a0aab28 1101 posclsToF = (Double_t)posTrack->GetNcls(1)/(Double_t)posTrack->GetTPCNclsF();
1102 }
1103 }else{
1104 posclsToF = posTrack->GetTPCClusterInfo(2,0,GetFirstTPCRow(photon->GetConversionRadius()));
1105 }
3b77b2d1 1106
e5b6e8a6 1107 if( negclsToF < fMinClsTPCToF || posclsToF < fMinClsTPCToF ){
4a0aab28 1108 return kFALSE;
1109 }
3b77b2d1 1110
4a0aab28 1111 return kTRUE;
3b77b2d1 1112}
1113
3b77b2d1 1114///________________________________________________________________________
d008165e 1115Bool_t AliConversionCuts::PhotonIsSelected(AliConversionPhotonBase *photon, AliVEvent * event)
1116{
4a0aab28 1117 //Selection of Reconstructed Photons
3b77b2d1 1118
4a0aab28 1119 FillPhotonCutIndex(kPhotonIn);
11c1e680 1120
0a2b2b4b 1121 if(event->IsA()==AliESDEvent::Class()) {
ccfa8c0d 1122 if(!SelectV0Finder( ( ((AliESDEvent*)event)->GetV0(photon->GetV0Index()))->GetOnFlyStatus() ) ){
0a2b2b4b 1123 FillPhotonCutIndex(kOnFly);
1124 return kFALSE;
1125 }
1126 }
1127 // else if(event->IsA()==AliAODEvent::Class()) {
1128 // if(!SelectV0Finder( ( ((AliAODEvent*)event)->GetV0(photon->GetV0Index())) ) ){
1129 // FillPhotonCutIndex(kOnFly);
1130 // return kFALSE;
1131 // }
1132 // }
3b77b2d1 1133
4a0aab28 1134 // Get Tracks
1135 AliVTrack * negTrack = GetTrack(event, photon->GetTrackLabelNegative());
1136 AliVTrack * posTrack = GetTrack(event, photon->GetTrackLabelPositive());
3b77b2d1 1137
4a0aab28 1138 if(!negTrack || !posTrack) {
1139 FillPhotonCutIndex(kNoTracks);
1140 return kFALSE;
1141 }
4803eb1f 1142 photon->DeterminePhotonQuality(negTrack,posTrack);
4a0aab28 1143 // Track Cuts
1144 if(!TracksAreSelected(negTrack, posTrack)){
1145 FillPhotonCutIndex(kTrackCuts);
1146 return kFALSE;
1147 }
aff90284 1148
1186afd2 1149 // dEdx Cuts
1150 if(!dEdxCuts(negTrack) || !dEdxCuts(posTrack)) {
1151 FillPhotonCutIndex(kdEdxCuts);
1152 return kFALSE;
1153 }
1154
4a0aab28 1155 // Photon Cuts
1156 if(!PhotonCuts(photon,event)){
1157 FillPhotonCutIndex(kPhotonCuts);
1158 return kFALSE;
1159 }
3b77b2d1 1160
4a0aab28 1161 // Photon passed cuts
1162 FillPhotonCutIndex(kPhotonOut);
1163 return kTRUE;
3b77b2d1 1164}
1165
3b77b2d1 1166///________________________________________________________________________
1167Bool_t AliConversionCuts::ArmenterosQtCut(AliConversionPhotonBase *photon)
1168{ // Armenteros Qt Cut
1169
4a0aab28 1170 if(fDoHighPtQtGammaSelection){
1171 if(photon->GetPhotonPt() < fPtBorderForQt){
1172 if(photon->GetArmenterosQt()>fQtMax){
1173 return kFALSE;
1174 }
1175 } else {
1176 if(photon->GetArmenterosQt()>fHighPtQtMax){
1177 return kFALSE;
1178 }
1179 }
1180 } else {
3b77b2d1 1181
4a0aab28 1182 if(photon->GetArmenterosQt()>fQtMax){
1183 return kFALSE;
1184 }
1185 }
1186 return kTRUE;
3b77b2d1 1187}
1188
1189
1190///________________________________________________________________________
1191Bool_t AliConversionCuts::AcceptanceCuts(AliConversionPhotonBase *photon) {
4a0aab28 1192 // Exclude certain areas for photon reconstruction
3b77b2d1 1193
4a0aab28 1194 Int_t cutIndex=0;
1195 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1196 cutIndex++;
3b77b2d1 1197
4a0aab28 1198 if(photon->GetConversionRadius()>fMaxR){ // cuts on distance from collision point
1199 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1200 return kFALSE;
1201 }
1202 cutIndex++;
3b77b2d1 1203
4a0aab28 1204 if(photon->GetConversionRadius()<fMinR){ // cuts on distance from collision point
1205 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1206 return kFALSE;
1207 }
1208 cutIndex++;
3b77b2d1 1209
e5b6e8a6 1210 if(photon->GetConversionRadius() <= ((abs(photon->GetConversionZ())*fLineCutZRSlope)-fLineCutZValue)){
3b77b2d1 1211 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1212 return kFALSE;
4a0aab28 1213 }
e5b6e8a6 1214 else if (fUseEtaMinCut && photon->GetConversionRadius() >= ((abs(photon->GetConversionZ())*fLineCutZRSlopeMin)-fLineCutZValueMin )){
4a0aab28 1215 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1216 return kFALSE;
1217 }
1218 cutIndex++;
3b77b2d1 1219
e5b6e8a6 1220 if(abs(photon->GetConversionZ()) > fMaxZ ){ // cuts out regions where we do not reconstruct
3b77b2d1 1221 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1222 return kFALSE;
4a0aab28 1223 }
1224 cutIndex++;
3b77b2d1 1225
1226
11c1e680 1227 if( photon->GetPhotonEta() > (fEtaCut + fEtaShift) || photon->GetPhotonEta() < (-fEtaCut + fEtaShift) ){
3b77b2d1 1228 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1229 return kFALSE;
4a0aab28 1230 }
11c1e680 1231 if(fEtaCutMin>-0.1){
1232 if( photon->GetPhotonEta() < (fEtaCutMin + fEtaShift) && photon->GetPhotonEta() > (-fEtaCutMin + fEtaShift) ){
1233 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1234 return kFALSE;
1235 }
1236 }
4a0aab28 1237 cutIndex++;
3b77b2d1 1238
4a0aab28 1239 if(photon->GetPhotonPt()<fPtCut){
3b77b2d1 1240 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1241 return kFALSE;
4a0aab28 1242 }
1243 cutIndex++;
3b77b2d1 1244
4a0aab28 1245 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
e5b6e8a6 1246
4a0aab28 1247 return kTRUE;
3b77b2d1 1248}
1249
1250
1251///________________________________________________________________________
1252Bool_t AliConversionCuts::SpecificTrackCuts(AliAODTrack * negTrack, AliAODTrack * posTrack,Int_t &cutIndex) {
4a0aab28 1253 // Track Cuts which require AOD/ESD specific implementation
3b77b2d1 1254
4a0aab28 1255 if( !negTrack->IsOn(AliESDtrack::kTPCrefit) || !posTrack->IsOn(AliESDtrack::kTPCrefit) ) {
3b77b2d1 1256 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1257 return kFALSE;
4a0aab28 1258 }
1259 cutIndex++;
3b77b2d1 1260
4a0aab28 1261 AliAODVertex * NegVtxType=negTrack->GetProdVertex();
1262 AliAODVertex * PosVtxType=posTrack->GetProdVertex();
4803eb1f 1263 if( (NegVtxType->GetType())==AliAODVertex::kKink || (PosVtxType->GetType())==AliAODVertex::kKink) {
3b77b2d1 1264 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1265 return kFALSE;
4a0aab28 1266 }
1267 return kTRUE;
3b77b2d1 1268
1269}
1270
1271
1272///________________________________________________________________________
1273Bool_t AliConversionCuts::SpecificTrackCuts(AliESDtrack * negTrack, AliESDtrack * posTrack,Int_t &cutIndex) {
4a0aab28 1274 // Track Cuts which require AOD/ESD specific implementation
3b77b2d1 1275
92efd725 1276 if( !negTrack->IsOn(AliESDtrack::kTPCrefit) || !posTrack->IsOn(AliESDtrack::kTPCrefit) ) {
3b77b2d1 1277 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1278 return kFALSE;
4a0aab28 1279 }
1280 cutIndex++;
3b77b2d1 1281
4a0aab28 1282 if(negTrack->GetKinkIndex(0) > 0 || posTrack->GetKinkIndex(0) > 0 ) {
3b77b2d1 1283 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1284 return kFALSE;
4a0aab28 1285 }
1286 return kTRUE;
3b77b2d1 1287}
1288
1289
1290
1291///________________________________________________________________________
1292Bool_t AliConversionCuts::TracksAreSelected(AliVTrack * negTrack, AliVTrack * posTrack) {
4a0aab28 1293 // Track Selection for Photon Reconstruction
3b77b2d1 1294
4a0aab28 1295 Int_t cutIndex=0;
1296 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1297 cutIndex++;
3b77b2d1 1298
4a0aab28 1299 // avoid like sign
1300 if(negTrack->Charge() == posTrack->Charge()) {
1301 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1302 return kFALSE;
1303 }
1304 cutIndex++;
3b77b2d1 1305
4a0aab28 1306 // Number of TPC Clusters
aff90284 1307
1308
4a0aab28 1309 if( negTrack->GetNcls(1) < fMinClsTPC || posTrack->GetNcls(1) < fMinClsTPC ) {
3b77b2d1 1310 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
4a0aab28 1311 return kFALSE;
1312 }
1313 cutIndex++;
ccfa8c0d 1314
4a0aab28 1315 // Acceptance
11c1e680 1316 if( posTrack->Eta() > (fEtaCut + fEtaShift) || posTrack->Eta() < (-fEtaCut + fEtaShift) ||
1317 negTrack->Eta() > (fEtaCut + fEtaShift) || negTrack->Eta() < (-fEtaCut + fEtaShift) ){
4a0aab28 1318 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
3b77b2d1 1319 return kFALSE;
4a0aab28 1320 }
11c1e680 1321 if(fEtaCutMin>-0.1){
1322 if( (posTrack->Eta() < (fEtaCutMin + fEtaShift) && posTrack->Eta() > (-fEtaCutMin + fEtaShift)) ||
1323 (negTrack->Eta() < (fEtaCutMin + fEtaShift) && negTrack->Eta() > (-fEtaCutMin + fEtaShift)) ){
1324 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1325 return kFALSE;
1326 }
1327 }
4a0aab28 1328 cutIndex++;
3b77b2d1 1329
4a0aab28 1330 // Single Pt Cut
fcc79cf5 1331 if( negTrack->Pt()< fSinglePtCut || posTrack->Pt()< fSinglePtCut){
3b77b2d1 1332 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1333 return kFALSE;
4a0aab28 1334 }
1335 cutIndex++;
3b77b2d1 1336
4a0aab28 1337 // AOD ESD specific cuts
1338 Bool_t passCuts = kTRUE;
3b77b2d1 1339
4a0aab28 1340 if(negTrack->IsA()==AliAODTrack::Class()) {
1341 passCuts = passCuts * SpecificTrackCuts(static_cast<AliAODTrack*>(negTrack), static_cast<AliAODTrack*>(posTrack),cutIndex);
e5b6e8a6 1342 } else {
4a0aab28 1343 passCuts = passCuts * SpecificTrackCuts(static_cast<AliESDtrack*>(negTrack), static_cast<AliESDtrack*>(posTrack),cutIndex);
e5b6e8a6 1344 }
3b77b2d1 1345
4a0aab28 1346 if(!passCuts){
3b77b2d1 1347 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1348 return kFALSE;
4a0aab28 1349 }
1350 cutIndex++;
3b77b2d1 1351
4a0aab28 1352 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
3b77b2d1 1353
4a0aab28 1354 return kTRUE;
e5b6e8a6 1355
3b77b2d1 1356}
1357
1358///________________________________________________________________________
1359Bool_t AliConversionCuts::dEdxCuts(AliVTrack *fCurrentTrack){
4a0aab28 1360 // Electron Identification Cuts for Photon reconstruction
3b77b2d1 1361
4a0aab28 1362 if(!fPIDResponse){InitPIDResponse();}// Try to reinitialize PID Response
1363 if(!fPIDResponse){AliError("No PID Response"); return kTRUE;}// if still missing fatal error
3b77b2d1 1364
4a0aab28 1365 Int_t cutIndex=0;
1366 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
e5b6e8a6 1367 if(hTPCdEdxSigbefore)hTPCdEdxSigbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
1368 if(hTPCdEdxbefore)hTPCdEdxbefore->Fill(fCurrentTrack->P(),fCurrentTrack->GetTPCsignal());
4a0aab28 1369 cutIndex++;
e5b6e8a6 1370
3b77b2d1 1371
4a0aab28 1372 if(fDodEdxSigmaCut == kTRUE){
3b77b2d1 1373 // TPC Electron Line
1374 if( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaBelowElectronLine ||
4a0aab28 1375 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaAboveElectronLine){
3b77b2d1 1376
4a0aab28 1377 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1378 return kFALSE;
3b77b2d1 1379 }
1380 cutIndex++;
1381
1382 // TPC Pion Line
4a0aab28 1383 if( fCurrentTrack->P()>fPIDMinPnSigmaAbovePionLine && fCurrentTrack->P()<fPIDMaxPnSigmaAbovePionLine ){
1384 if(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaBelowElectronLine &&
1385 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaAboveElectronLine&&
1386 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaAbovePionLine){
1387
1388 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1389 return kFALSE;
1390 }
1391 }
1392 cutIndex++;
e5b6e8a6 1393
4a0aab28 1394 // High Pt Pion rej
1395 if( fCurrentTrack->P()>fPIDMaxPnSigmaAbovePionLine ){
1396 if(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaBelowElectronLine &&
e5b6e8a6 1397 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaAboveElectronLine &&
4a0aab28 1398 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaAbovePionLineHighPt){
1399
1400 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1401 return kFALSE;
1402 }
1403 }
1404 cutIndex++;
1405 }
1406 else{cutIndex+=3;}
1407
1408 if(fDoKaonRejectionLowP == kTRUE){
1409 if(fCurrentTrack->P()<fPIDMinPKaonRejectionLowP ){
e5b6e8a6 1410 if( abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kKaon))<fPIDnSigmaAtLowPAroundKaonLine){
4a0aab28 1411
1412 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1413 return kFALSE;
1414 }
1415 }
1416 }
1417 cutIndex++;
e5b6e8a6 1418
4a0aab28 1419 if(fDoProtonRejectionLowP == kTRUE){
1420 if( fCurrentTrack->P()<fPIDMinPProtonRejectionLowP ){
e5b6e8a6 1421 if( abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kProton))<fPIDnSigmaAtLowPAroundProtonLine){
4a0aab28 1422
1423 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1424 return kFALSE;
1425 }
1426 }
1427 }
3b77b2d1 1428 cutIndex++;
e5b6e8a6 1429
4a0aab28 1430 if(fDoPionRejectionLowP == kTRUE){
1431 if( fCurrentTrack->P()<fPIDMinPPionRejectionLowP ){
e5b6e8a6 1432 if( abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion))<fPIDnSigmaAtLowPAroundPionLine){
4a0aab28 1433
1434 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1435 return kFALSE;
1436 }
1437 }
1438 }
1439 cutIndex++;
e5b6e8a6 1440
1441
1442 // cout<<"Start"<<endl;
1443 // AliPIDResponse::EDetPidStatus status=fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF,fCurrentTrack);
a280ac15 1444
e5b6e8a6 1445 // if( ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) && ( (status & AliVTrack::kTIME) == AliVTrack::kTIME ))
1446 // {cout<<"TOF DA"<<endl;}
a280ac15 1447 // if(status == AliPIDResponse::kDetPidOk){
e5b6e8a6 1448 // Float_t probMis = fPIDResponse->GetTOFMismatchProbability(fCurrentTrack);
1449 // cout<<"--> "<<probMis<<endl;
1450 // if(probMis > 0.01){
a280ac15 1451
e5b6e8a6 1452 // }
1453 // }
a280ac15 1454
4a0aab28 1455 if((fCurrentTrack->GetStatus() & AliESDtrack::kTOFpid) && !(fCurrentTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
e5b6e8a6 1456 if(hTOFbefore){
1457 Double_t t0 = fPIDResponse->GetTOFResponse().GetStartTime(fCurrentTrack->P());
1458 Double_t times[5];
1459 fCurrentTrack->GetIntegratedTimes(times);
fcc79cf5 1460 Double_t TOFsignal = fCurrentTrack->GetTOFsignal();
e5b6e8a6 1461 Double_t dT = TOFsignal - t0 - times[0];
1462 hTOFbefore->Fill(fCurrentTrack->P(),dT);
1463 }
1464 if(hTOFSigbefore) hTOFSigbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
4a0aab28 1465 if(fUseTOFpid){
1466 if(fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)>fTofPIDnSigmaAboveElectronLine ||
1467 fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)<fTofPIDnSigmaBelowElectronLine ){
1468 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1469 return kFALSE;
1470 }
1471 }
e5b6e8a6 1472 if(hTOFSigafter)hTOFSigafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
4a0aab28 1473 }
1474 cutIndex++;
e5b6e8a6 1475
4a0aab28 1476 // Apply TRD PID
1477 if(fDoTRDPID){
1478 if(!fPIDResponse->IdentifiedAsElectronTRD(fCurrentTrack,fPIDTRDEfficiency)){
4a0aab28 1479 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1480 return kFALSE;
1481 }
1482 }
1483 cutIndex++;
3b77b2d1 1484
4a0aab28 1485 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
e5b6e8a6 1486 if(hTPCdEdxSigafter)hTPCdEdxSigafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
1487 if(hTPCdEdxafter)hTPCdEdxafter->Fill(fCurrentTrack->P(),fCurrentTrack->GetTPCsignal());
4a0aab28 1488 return kTRUE;
3b77b2d1 1489}
1490
1491///________________________________________________________________________
1492Bool_t AliConversionCuts::AsymmetryCut(AliConversionPhotonBase * photon,AliVEvent *event) {
4a0aab28 1493 // Cut on Energy Assymetry
3b77b2d1 1494
4a0aab28 1495 for(Int_t ii=0;ii<2;ii++){
3b77b2d1 1496
4a0aab28 1497 AliVTrack *track=GetTrack(event,photon->GetTrackLabel(ii));
3b77b2d1 1498
4a0aab28 1499 if( track->P() > fMinPPhotonAsymmetryCut ){
1500 Double_t trackNegAsy=0;
1501 if (photon->GetPhotonP()!=0.){
1502 trackNegAsy= track->P()/photon->GetPhotonP();
1503 }
aff90284 1504
4a0aab28 1505 if( trackNegAsy<fMinPhotonAsymmetry ||trackNegAsy>(1.- fMinPhotonAsymmetry)){
1506 return kFALSE;
1507 }
1508 }
3b77b2d1 1509
4a0aab28 1510 }
1511 return kTRUE;
3b77b2d1 1512}
1513
1514///________________________________________________________________________
92efd725 1515AliVTrack *AliConversionCuts::GetTrack(AliVEvent * event, Int_t label){
4a0aab28 1516 //Returns pointer to the track with given ESD label
1517 //(Important for AOD implementation, since Track array in AOD data is different
1518 //from ESD array, but ESD tracklabels are stored in AOD Tracks)
1519
1520 AliESDEvent * esdEvent = dynamic_cast<AliESDEvent*>(event);
1521 if(esdEvent) {
1522 if(label > event->GetNumberOfTracks() ) return NULL;
1523 AliESDtrack * track = esdEvent->GetTrack(label);
1524 return track;
e5b6e8a6 1525
1526 } else {
ae947965 1527 AliVTrack * track = 0x0;
1186afd2 1528 if(((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->AreAODsRelabeled()){
1529 track = dynamic_cast<AliVTrack*>(event->GetTrack(label));
1530 return track;
1531 }
aff90284 1532 else{
1186afd2 1533 for(Int_t ii=0; ii<event->GetNumberOfTracks(); ii++) {
1534 track = dynamic_cast<AliVTrack*>(event->GetTrack(ii));
1535 if(track){
1536 if(track->GetID() == label) {
ae947965 1537 return track;
1538 }
1539 }
1540 }
1541 }
4a0aab28 1542 }
e5b6e8a6 1543 //AliDebug(5,(Form("track not found %d %d",label,event->GetNumberOfTracks()));
1544 return NULL;
1545}
1546
1547///________________________________________________________________________
1548AliESDtrack *AliConversionCuts::GetESDTrack(AliESDEvent * event, Int_t label){
1549 //Returns pointer to the track with given ESD label
1550 //(Important for AOD implementation, since Track array in AOD data is different
1551 //from ESD array, but ESD tracklabels are stored in AOD Tracks)
1552
1553 if(event) {
1554 if(label > event->GetNumberOfTracks() ) return NULL;
1555 AliESDtrack * track = event->GetTrack(label);
1556 return track;
1557 }
4a0aab28 1558 //AliDebug(5,(Form("track not found %d %d",label,event->GetNumberOfTracks()));
1559 return NULL;
3b77b2d1 1560}
1561
1562
e5b6e8a6 1563
3b77b2d1 1564///________________________________________________________________________
1565Bool_t AliConversionCuts::PIDProbabilityCut(AliConversionPhotonBase *photon, AliVEvent * event){
4a0aab28 1566 // Cut on Electron Probability for Photon Reconstruction
3b77b2d1 1567
4a0aab28 1568 AliESDEvent * esdEvent = dynamic_cast<AliESDEvent*>(event);
3b77b2d1 1569
4a0aab28 1570 if(esdEvent){
e5b6e8a6 1571
4a0aab28 1572 Bool_t iResult=kFALSE;
e5b6e8a6 1573
4a0aab28 1574 Double_t *posProbArray = new Double_t[AliPID::kSPECIES];
1575 Double_t *negProbArray = new Double_t[AliPID::kSPECIES];
e5b6e8a6 1576
fcc79cf5 1577 AliESDtrack* negTrack = esdEvent->GetTrack(photon->GetTrackLabelNegative());
1578 AliESDtrack* posTrack = esdEvent->GetTrack(photon->GetTrackLabelPositive());
e5b6e8a6 1579
4a0aab28 1580 if(negProbArray && posProbArray){
e5b6e8a6 1581
4a0aab28 1582 negTrack->GetTPCpid(negProbArray);
1583 posTrack->GetTPCpid(posProbArray);
3b77b2d1 1584
4a0aab28 1585 if(negProbArray[AliPID::kElectron]>=fPIDProbabilityCutNegativeParticle && posProbArray[AliPID::kElectron]>=fPIDProbabilityCutPositiveParticle){
1586 iResult=kTRUE;
1587 }
1588 }
e5b6e8a6 1589
4a0aab28 1590 delete [] posProbArray;
1591 delete [] negProbArray;
1592 return iResult;
3b77b2d1 1593
4a0aab28 1594 } else {
3b77b2d1 1595 ///Not possible for AODs
1596 return kTRUE;
4a0aab28 1597 }
3b77b2d1 1598
1599
1600
e5b6e8a6 1601
3b77b2d1 1602}
1603
1604
1605///________________________________________________________________________
1606Bool_t AliConversionCuts::AcceptanceCut(TParticle *particle, TParticle * ePos,TParticle* eNeg){
4a0aab28 1607 // MC Acceptance Cuts
1608 //(Certain areas were excluded for photon reconstruction)
3b77b2d1 1609
4a0aab28 1610 if(particle->R()>fMaxR){
1611 return kFALSE;}
3b77b2d1 1612
4a0aab28 1613 if(ePos->R()>fMaxR){
1614 return kFALSE;
1615 }
3b77b2d1 1616
4a0aab28 1617 if(ePos->R()<fMinR){
1618 return kFALSE;
1619 }
3b77b2d1 1620
e5b6e8a6 1621 if( ePos->R() <= ((abs(ePos->Vz())*fLineCutZRSlope)-fLineCutZValue)){
4a0aab28 1622 return kFALSE;
1623 }
e5b6e8a6 1624 else if (fUseEtaMinCut && ePos->R() >= ((abs(ePos->Vz())*fLineCutZRSlopeMin)-fLineCutZValueMin )){
3b77b2d1 1625 return kFALSE;
4a0aab28 1626 }
3b77b2d1 1627
e5b6e8a6 1628 if(abs(eNeg->Vz()) > fMaxZ ){ // cuts out regions where we do not reconstruct
4a0aab28 1629 return kFALSE;
1630 }
3b77b2d1 1631
4a0aab28 1632 if(eNeg->Vz()!=ePos->Vz()||eNeg->R()!=ePos->R()){
1633 return kFALSE;
1634 }
3b77b2d1 1635
e5b6e8a6 1636 if(abs(ePos->Vz()) > fMaxZ ){ // cuts out regions where we do not reconstruct
4a0aab28 1637 return kFALSE;
1638 }
3b77b2d1 1639
ccfa8c0d 1640
11c1e680 1641 if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) ){
4a0aab28 1642 return kFALSE;
1643 }
11c1e680 1644 if( ePos->Eta() > (fEtaCut + fEtaShift) || ePos->Eta() < (-fEtaCut + fEtaShift) ){
4a0aab28 1645 return kFALSE;
1646 }
11c1e680 1647 if( eNeg->Eta() > (fEtaCut + fEtaShift) || eNeg->Eta() < (-fEtaCut + fEtaShift) ){
4a0aab28 1648 return kFALSE;
1649 }
11c1e680 1650 if(fEtaCutMin>-0.1){
1651 if( particle->Eta() < (fEtaCutMin + fEtaShift) && particle->Eta() > (-fEtaCutMin + fEtaShift) ){
1652 return kFALSE;
1653 }
1654 if( ePos->Eta() < (fEtaCutMin + fEtaShift) && ePos->Eta() > (-fEtaCutMin + fEtaShift) ){
1655 return kFALSE;
1656 }
1657 if( eNeg->Eta() < (fEtaCutMin + fEtaShift) && eNeg->Eta() > (-fEtaCutMin + fEtaShift) ){
1658 return kFALSE;
1659 }
1660 }
ccfa8c0d 1661
4a0aab28 1662 if( ePos->Pt()< fSinglePtCut || eNeg->Pt()< fSinglePtCut){
1663 return kFALSE;
1664 }
3b77b2d1 1665
4a0aab28 1666 if(particle->Pt()<fPtCut){
1667 return kFALSE;
1668 }
3b77b2d1 1669
4a0aab28 1670 return kTRUE;
3b77b2d1 1671}
1672///________________________________________________________________________
e5b6e8a6 1673Bool_t AliConversionCuts::UpdateCutString() {
4a0aab28 1674 ///Update the cut string (if it has been created yet)
3b77b2d1 1675
4a0aab28 1676 if(fCutString && fCutString->GetString().Length() == kNCuts) {
1677 fCutString->SetString(GetCutNumber());
1678 } else {
1679 return kFALSE;
1680 }
1681 return kTRUE;
3b77b2d1 1682}
aff90284 1683///________________________________________________________________________
ae947965 1684void AliConversionCuts::LoadReweightingHistosMCFromFile() {
1685
1686 AliInfo("Entering loading of histograms for weighting");
1687 TFile *f = TFile::Open(fPathTrFReweighting.Data());
1688 if(!f){
1689 AliError(Form("file for weighting %s not found",fPathTrFReweighting.Data()));
1690 return;
aff90284 1691 }
ae947965 1692 if (fNameHistoReweightingPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
aff90284 1693 TH1D *hReweightMCHistPi0temp = (TH1D*)f->Get(fNameHistoReweightingPi0.Data());
1694 hReweightMCHistPi0 = new TH1D(*hReweightMCHistPi0temp);
6feb1680 1695 hReweightMCHistPi0->SetDirectory(0);
ae947965 1696 if (hReweightMCHistPi0) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingPi0.Data(),fPathTrFReweighting.Data() ));
aff90284 1697 else AliWarning(Form("%s not found in %s", fNameHistoReweightingPi0.Data() ,fPathTrFReweighting.Data()));
fcc79cf5 1698 }
1699 if (fNameFitDataPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
aff90284 1700 TF1 *fFitDataPi0temp = (TF1*)f->Get(fNameFitDataPi0.Data());
1701 fFitDataPi0 = new TF1(*fFitDataPi0temp);
fcc79cf5 1702 if (fFitDataPi0) AliInfo(Form("%s has been loaded from %s", fNameFitDataPi0.Data(),fPathTrFReweighting.Data() ));
aff90284 1703 else AliWarning(Form("%s not found in %s",fPathTrFReweighting.Data(), fNameFitDataPi0.Data() ));
ae947965 1704 }
aff90284 1705
ae947965 1706 if (fNameHistoReweightingEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
aff90284 1707 TH1D *hReweightMCHistEtatemp = (TH1D*)f->Get(fNameHistoReweightingEta.Data());
1708 hReweightMCHistEta = new TH1D(*hReweightMCHistEtatemp);
6feb1680 1709 hReweightMCHistEta->SetDirectory(0);
ae947965 1710 if (hReweightMCHistEta) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
aff90284 1711 else AliWarning(Form("%s not found in %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
fcc79cf5 1712 }
aff90284 1713
fcc79cf5 1714 if (fNameFitDataEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
aff90284 1715 TF1 *fFitDataEtatemp = (TF1*)f->Get(fNameFitDataEta.Data());
1716 fFitDataEta = new TF1(*fFitDataEtatemp);
fcc79cf5 1717 if (fFitDataEta) AliInfo(Form("%s has been loaded from %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
aff90284 1718 else AliWarning(Form("%s not found in %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
ae947965 1719
1720 }
1721 if (fNameHistoReweightingK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
aff90284 1722 TH1D *hReweightMCHistK0stemp = (TH1D*)f->Get(fNameHistoReweightingK0s.Data());
1723 hReweightMCHistK0s = new TH1D(*hReweightMCHistK0stemp);
6feb1680 1724 hReweightMCHistK0s->SetDirectory(0);
ae947965 1725 if (hReweightMCHistK0s) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
aff90284 1726 else AliWarning(Form("%s not found in %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
ae947965 1727 }
1728
fcc79cf5 1729 if (fNameFitDataK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
aff90284 1730 TF1 *fFitDataK0stemp = (TF1*)f->Get(fNameFitDataK0s.Data());
1731 fFitDataK0s = new TF1(*fFitDataK0stemp);
fcc79cf5 1732 if (fFitDataK0s) AliInfo(Form("%s has been loaded from %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
aff90284 1733 else AliWarning(Form("%s not found in %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
fcc79cf5 1734 }
6feb1680 1735 f->Close();
1736 delete f;
1737
ae947965 1738}
1739
1740
3b77b2d1 1741///________________________________________________________________________
1742Bool_t AliConversionCuts::InitializeCutsFromCutString(const TString analysisCutSelection ) {
1743 // Initialize Cuts from a given Cut string
fcc79cf5 1744 if(fDoReweightHistoMCPi0 || fDoReweightHistoMCEta || fDoReweightHistoMCK0s) {
1745 AliInfo("Weighting was enabled");
1746 LoadReweightingHistosMCFromFile();
fcc79cf5 1747 }
aff90284 1748
4a0aab28 1749 AliInfo(Form("Set Photoncut Number: %s",analysisCutSelection.Data()));
1750 if(analysisCutSelection.Length()!=kNCuts) {
1751 AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));
1752 return kFALSE;
1753 }
1754 if(!analysisCutSelection.IsDigit()){
1755 AliError("Cut selection contains characters");
1756 return kFALSE;
1757 }
e5b6e8a6 1758
4a0aab28 1759 const char *cutSelection = analysisCutSelection.Data();
fcc79cf5 1760#define ASSIGNARRAY(i) fCuts[i] = cutSelection[i] - '0'
4a0aab28 1761 for(Int_t ii=0;ii<kNCuts;ii++){
3b77b2d1 1762 ASSIGNARRAY(ii);
4a0aab28 1763 }
3b77b2d1 1764
4a0aab28 1765 // Set Individual Cuts
1766 for(Int_t ii=0;ii<kNCuts;ii++){
3b77b2d1 1767 if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
4a0aab28 1768 }
3b77b2d1 1769
4a0aab28 1770 //PrintCuts();
92efd725 1771
4a0aab28 1772 return kTRUE;
3b77b2d1 1773}
1774///________________________________________________________________________
1775Bool_t AliConversionCuts::SetCut(cutIds cutID, const Int_t value) {
4a0aab28 1776 ///Set individual cut ID
3b77b2d1 1777
4a0aab28 1778 switch (cutID) {
e5b6e8a6 1779
4a0aab28 1780 case kv0FinderType:
1781 if( SetV0Finder(value)) {
1782 fCuts[kv0FinderType] = value;
e5b6e8a6 1783 UpdateCutString();
4a0aab28 1784 return kTRUE;
1785 } else return kFALSE;
1786
1787 case kededxSigmaCut:
1788 if( SetTPCdEdxCutElectronLine(value)) {
1789 fCuts[kededxSigmaCut] = value;
e5b6e8a6 1790 UpdateCutString();
4a0aab28 1791 return kTRUE;
1792 } else return kFALSE;
1793
1794 case kpidedxSigmaCut:
1795 if( SetTPCdEdxCutPionLine(value)) {
1796 fCuts[kpidedxSigmaCut] = value;
e5b6e8a6 1797 UpdateCutString();
4a0aab28 1798 return kTRUE;
1799 } else return kFALSE;
1800
1801 case kpiMomdedxSigmaCut:
1802 if( SetMinMomPiondEdxCut(value)) {
1803 fCuts[kpiMomdedxSigmaCut] = value;
e5b6e8a6 1804 UpdateCutString();
4a0aab28 1805 return kTRUE;
1806 } else return kFALSE;
1807
1808 case kchi2GammaCut:
1809 if( SetChi2GammaCut(value)) {
1810 fCuts[kchi2GammaCut] = value;
e5b6e8a6 1811 UpdateCutString();
4a0aab28 1812 return kTRUE;
1813 } else return kFALSE;
1814
1815 case ksinglePtCut:
1816 if( SetSinglePtCut(value)) {
1817 fCuts[ksinglePtCut] = value;
e5b6e8a6 1818 UpdateCutString();
4a0aab28 1819 return kTRUE;
1820 } else return kFALSE;
1821
1822 case kclsTPCCut:
1823 if( SetTPCClusterCut(value)) {
1824 fCuts[kclsTPCCut] = value;
e5b6e8a6 1825 UpdateCutString();
4a0aab28 1826 return kTRUE;
1827 } else return kFALSE;
1828
1829 case ketaCut:
1830 if( SetEtaCut(value)) {
1831 fCuts[ketaCut] = value;
e5b6e8a6 1832 UpdateCutString();
4a0aab28 1833 return kTRUE;
1834 } else return kFALSE;
1835
1836 case kLowPRejectionSigmaCut:
1837 if( SetLowPRejectionCuts(value)) {
1838 fCuts[kLowPRejectionSigmaCut] = value;
e5b6e8a6 1839 UpdateCutString();
4a0aab28 1840 return kTRUE;
1841 } else return kFALSE;
1842
1843 case kQtMaxCut:
1844 if( SetQtMaxCut(value)) {
1845 fCuts[kQtMaxCut] = value;
e5b6e8a6 1846 UpdateCutString();
4a0aab28 1847 return kTRUE;
1848 } else return kFALSE;
1849
1850 case kpiMaxMomdedxSigmaCut:
1851 if( SetMaxMomPiondEdxCut(value)) {
1852 fCuts[kpiMaxMomdedxSigmaCut] = value;
e5b6e8a6 1853 UpdateCutString();
4a0aab28 1854 return kTRUE;
1855 } else return kFALSE;
1856
1857 case kRCut:
1858 if( SetRCut(value)) {
1859 fCuts[kRCut] = value;
e5b6e8a6 1860 UpdateCutString();
4a0aab28 1861 return kTRUE;
1862 } else return kFALSE;
1863
1864 case kremovePileUp:
1865 if( SetRemovePileUp(value)) {
1866 fCuts[kremovePileUp] = value;
e5b6e8a6 1867 UpdateCutString();
4a0aab28 1868 return kTRUE;
1869 } else return kFALSE;
1870
1871 case kselectV0AND:
e5b6e8a6 1872 if( SetSelectSpecialTrigger(value)) {
4a0aab28 1873 fCuts[kselectV0AND] = value;
e5b6e8a6 1874 UpdateCutString();
4a0aab28 1875 return kTRUE;
1876 } else return kFALSE;
1877
1878 case kmultiplicityMethod:
1879 if( SetMultiplicityMethod(value)) {
1880 fCuts[kmultiplicityMethod] = value;
e5b6e8a6 1881 UpdateCutString();
4a0aab28 1882 return kTRUE;
1883 } else return kFALSE;
1884
1885 case kisHeavyIon:
1886 if( SetIsHeavyIon(value)) {
1887 fCuts[kisHeavyIon] = value;
e5b6e8a6 1888 UpdateCutString();
4a0aab28 1889 return kTRUE;
1890 } else return kFALSE;
1891
1892 case kCentralityMin:
1893 if( SetCentralityMin(value)) {
1894 fCuts[kCentralityMin] = value;
e5b6e8a6 1895 UpdateCutString();
4a0aab28 1896 return kTRUE;
1897 } else return kFALSE;
1898
1899 case kCentralityMax:
1900 if( SetCentralityMax(value)) {
1901 fCuts[kCentralityMax] = value;
e5b6e8a6 1902 UpdateCutString();
4a0aab28 1903 return kTRUE;
1904 } else return kFALSE;
1905
1906 case kTOFelectronPID:
1907 if( SetTOFElectronPIDCut(value)) {
1908 fCuts[kTOFelectronPID] = value;
e5b6e8a6 1909 UpdateCutString();
4a0aab28 1910 return kTRUE;
1911 } else return kFALSE;
1912
1913 case kdoPhotonAsymmetryCut:
1914 if( SetPhotonAsymmetryCut(value)) {
1915 fCuts[kdoPhotonAsymmetryCut] = value;
e5b6e8a6 1916 UpdateCutString();
4a0aab28 1917 return kTRUE;
1918 } else return kFALSE;
1919
1920 case kPsiPair:
1921 if( SetPsiPairCut(value)) {
1922 fCuts[kPsiPair] = value;
e5b6e8a6 1923 UpdateCutString();
4a0aab28 1924 return kTRUE;
1925 } else return kFALSE;
1926
1927 case kCosPAngle:
1928 if( SetCosPAngleCut(value)) {
1929 fCuts[kCosPAngle] = value;
e5b6e8a6 1930 UpdateCutString();
4a0aab28 1931 return kTRUE;
1932 } else return kFALSE;
1933
1934
1935 case kElecShare:
1936 if( SetSharedElectronCut(value)) {
1937 fCuts[kElecShare] = value;
e5b6e8a6 1938 UpdateCutString();
4a0aab28 1939 return kTRUE;
1940 } else return kFALSE;
1941
4a0aab28 1942 case kToCloseV0s:
1943 if( SetToCloseV0sCut(value)) {
1944 fCuts[kToCloseV0s] = value;
e5b6e8a6 1945 UpdateCutString();
4a0aab28 1946 return kTRUE;
1947 } else return kFALSE;
1948
1949 case kExtraSignals:
1950 if( SetRejectExtraSignalsCut(value)) {
1951 fCuts[kExtraSignals] = value;
e5b6e8a6 1952 UpdateCutString();
4a0aab28 1953 return kTRUE;
1954 } else return kFALSE;
1955
4803eb1f 1956 case kDcaRPrimVtx:
1957 if( SetDCARPhotonPrimVtxCut(value)) {
1958 fCuts[kDcaRPrimVtx] = value;
1959 UpdateCutString();
1960 return kTRUE;
1961 } else return kFALSE;
1962
1963 case kDcaZPrimVtx:
1964 if( SetDCAZPhotonPrimVtxCut(value)) {
1965 fCuts[kDcaZPrimVtx] = value;
1966 UpdateCutString();
1967 return kTRUE;
1968 } else return kFALSE;
1969
aff90284 1970
4a0aab28 1971 case kNCuts:
92efd725 1972 AliError("Cut id out of range");
4a0aab28 1973 return kFALSE;
1974 }
d008165e 1975
4a0aab28 1976 AliError("Cut id %d not recognized");
1977 return kFALSE;
3b77b2d1 1978
e5b6e8a6 1979
3b77b2d1 1980}
1981///________________________________________________________________________
e5b6e8a6 1982void AliConversionCuts::PrintCuts() {
1983 // Print out current Cut Selection
1984 for(Int_t ic = 0; ic < kNCuts; ic++) {
1985 printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]);
1986 }
1987}
1988///________________________________________________________________________
1989Bool_t AliConversionCuts::SetIsHeavyIon(Int_t isHeavyIon)
1990{ // Set Cut
1991 switch(isHeavyIon){
4a0aab28 1992 case 0:
e5b6e8a6 1993 fIsHeavyIon=0;
4a0aab28 1994 break;
1995 case 1:
e5b6e8a6 1996 fIsHeavyIon=1;
1997 fDetectorCentrality=0;
1998 break;
1999 case 2:
2000 fIsHeavyIon=1;
2001 fDetectorCentrality=1;
2002 break;
2003 case 3: //allows to select centrality 0-45% in steps of 5% for V0 Multiplicity
2004 fIsHeavyIon=1;
2005 fDetectorCentrality=0;
2006 fModCentralityClass=1;
2007 break;
2008 case 4: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
2009 fIsHeavyIon=1;
2010 fDetectorCentrality=0;
2011 fModCentralityClass=2;
2012 break;
2013 case 5: //strict cut on v0 tracks for MC
2014 fIsHeavyIon=1;
2015 fDetectorCentrality=0;
2016 fModCentralityClass=3;
2017 break;
4803eb1f 2018 case 6: //allows to select centrality 0-45% in steps of 5% for track mult
e5b6e8a6 2019 //strict cut on v0 tracks for MC
2020 fIsHeavyIon=1;
2021 fDetectorCentrality=0;
2022 fModCentralityClass=4;
2023 break;
2024 case 7: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
2025 //strict cut on v0 tracks for MC
2026 fIsHeavyIon=1;
2027 fDetectorCentrality=0;
2028 fModCentralityClass=5;
4a0aab28 2029 break;
0a2b2b4b 2030 case 8:
2031 fIsHeavyIon=2;
2032 fDetectorCentrality=0;
2033 break;
2034 case 9:
2035 fIsHeavyIon=2;
2036 fDetectorCentrality=1;
11c1e680 2037 break;
4a0aab28 2038 default:
e5b6e8a6 2039 AliError(Form("SetHeavyIon not defined %d",isHeavyIon));
4a0aab28 2040 return kFALSE;
2041 }
2042 return kTRUE;
3b77b2d1 2043}
0a2b2b4b 2044
e5b6e8a6 2045//___________________________________________________________________
2046Bool_t AliConversionCuts::SetCentralityMin(Int_t minCentrality)
2047{
2048 // Set Cut
2049 if(minCentrality<0||minCentrality>9){
2050 AliError(Form("minCentrality not defined %d",minCentrality));
2051 return kFALSE;
2052 }
3b77b2d1 2053
e5b6e8a6 2054 fCentralityMin=minCentrality;
2055 return kTRUE;
2056}
2057//___________________________________________________________________
2058Bool_t AliConversionCuts::SetCentralityMax(Int_t maxCentrality)
2059{
2060 // Set Cut
2061 if(maxCentrality<0||maxCentrality>9){
2062 AliError(Form("maxCentrality not defined %d",maxCentrality));
2063 return kFALSE;
2064 }
2065 fCentralityMax=maxCentrality;
2066 return kTRUE;
2067}
3b77b2d1 2068///________________________________________________________________________
e5b6e8a6 2069Int_t AliConversionCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
3b77b2d1 2070{// Set Cut
e5b6e8a6 2071
2072 switch(selectSpecialTrigger){
4a0aab28 2073 case 0:
e5b6e8a6 2074 fSpecialTrigger=0; // dont care
3b77b2d1 2075 break;
4a0aab28 2076 case 1:
e5b6e8a6 2077 fSpecialTrigger=1; // V0AND
2078 break;
2079 case 2:
2080 fSpecialTrigger=2; // with SDD requested
2081 break;
2082 case 3:
2083 fSpecialTrigger=3; // V0AND plus with SDD requested
3b77b2d1 2084 break;
aff90284 2085 // allows to run MB & 6 other different trigger classes in parallel with the same photon cut
2086 case 4:
ae947965 2087 fSpecialTrigger=4; // different trigger class as MB
2088 fTriggerSelectedManually = kTRUE;
2089 break;
aff90284 2090 case 5:
ae947965 2091 fSpecialTrigger=4; // different trigger class as MB
2092 fTriggerSelectedManually = kTRUE;
2093 break;
aff90284 2094 case 6:
ae947965 2095 fSpecialTrigger=4; // different trigger class as MB
2096 fTriggerSelectedManually = kTRUE;
2097 break;
aff90284 2098 case 7:
ae947965 2099 fSpecialTrigger=4; // different trigger class as MB
2100 fTriggerSelectedManually = kTRUE;
2101 break;
aff90284 2102 case 8:
ae947965 2103 fSpecialTrigger=4; // different trigger class as MB
2104 fTriggerSelectedManually = kTRUE;
aff90284 2105 break;
2106 case 9:
ae947965 2107 fSpecialTrigger=4; // different trigger class as MB
2108 fTriggerSelectedManually = kTRUE;
aff90284 2109 break;
4a0aab28 2110 default:
e5b6e8a6 2111 AliError("Warning: Special Trigger Not known");
3b77b2d1 2112 return kFALSE;
4a0aab28 2113 }
2114 return kTRUE;
3b77b2d1 2115}
3b77b2d1 2116///________________________________________________________________________
92efd725 2117Bool_t AliConversionCuts::SetMultiplicityMethod(Int_t multiplicityMethod)
2118{
4a0aab28 2119 // Set Cut
2120 fMultiplicityMethod=multiplicityMethod;
92efd725 2121
4a0aab28 2122 // 0 Photon Multiplicity
2123 // 1 TPC Track multiplicity
2124 // 2 V0 Mult
2125 // 3 SPD Mult
92efd725 2126
4a0aab28 2127 return kTRUE;
3b77b2d1 2128}
3b77b2d1 2129///________________________________________________________________________
e5b6e8a6 2130Bool_t AliConversionCuts::SetRemovePileUp(Int_t removePileUp)
2131{// Set Cut
2132 switch(removePileUp){
2133 case 0:
2134 fRemovePileUp=kFALSE;
2135 break;
2136 case 1:
2137 fRemovePileUp=kTRUE;
2138 break;
2139 default:
2140 AliError("RemovePileUpCut not defined");
2141 return kFALSE;
4a0aab28 2142 }
e5b6e8a6 2143 return kTRUE;
3b77b2d1 2144}
3b77b2d1 2145///________________________________________________________________________
e5b6e8a6 2146Bool_t AliConversionCuts::SetRejectExtraSignalsCut(Int_t extraSignal) {
2147
2148 switch(extraSignal){
4a0aab28 2149 case 0:
e5b6e8a6 2150 fRejectExtraSignals = 0;
2151 break; // No Rejection
4a0aab28 2152 case 1:
e5b6e8a6 2153 fRejectExtraSignals = 1;
2154 break; // MinBias Header
4a0aab28 2155 case 2:
e5b6e8a6 2156 fRejectExtraSignals = 2;
2157 break; // User String Array
4a0aab28 2158 case 3:
e5b6e8a6 2159 fRejectExtraSignals = 3;
2160 break; // Rejection for Gamma Correction only
2161 default:
2162 AliError(Form("Extra Signal Rejection not defined %d",extraSignal));
2163 return kFALSE;
2164 }
2165 return kTRUE;
2166}
2167///________________________________________________________________________
2168Bool_t AliConversionCuts::SetV0Finder(Int_t v0FinderType)
2169{ // Set Cut
2170 switch (v0FinderType){
2171 case 0: // on fly V0 finder
ccfa8c0d 2172 cout << "have chosen onfly V0" << endl;
e5b6e8a6 2173 fUseOnFlyV0Finder=kTRUE;
4a0aab28 2174 break;
e5b6e8a6 2175 case 1: // offline V0 finder
ccfa8c0d 2176 cout << "have chosen offline V0" << endl;
e5b6e8a6 2177 fUseOnFlyV0Finder=kFALSE;
4a0aab28 2178 break;
4a0aab28 2179 default:
e5b6e8a6 2180 AliError(Form(" v0FinderType not defined %d",v0FinderType));
4a0aab28 2181 return kFALSE;
2182 }
2183 return kTRUE;
3b77b2d1 2184}
3b77b2d1 2185///________________________________________________________________________
e5b6e8a6 2186Bool_t AliConversionCuts::SetEtaCut(Int_t etaCut)
3b77b2d1 2187{ // Set Cut
e5b6e8a6 2188
2189 //Set Standard LineCutZValues
2190 fLineCutZValueMin = -2;
2191 fLineCutZValue = 7.;
2192
2193 switch(etaCut){
2194 case 0: // 0.9
fcc79cf5 2195 fEtaCut = 0.9;
e5b6e8a6 2196 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2197 fEtaCutMin = -0.1;
e5b6e8a6 2198 fLineCutZRSlopeMin = 0.;
4a0aab28 2199 break;
fcc79cf5 2200 case 1: // 1.2 // changed from 1.2 to 0.6 on 2013.06.10
2201 fEtaCut = 0.6;
e5b6e8a6 2202 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2203 fEtaCutMin = -0.1;
e5b6e8a6 2204 fLineCutZRSlopeMin = 0.;
4a0aab28 2205 break;
fcc79cf5 2206 case 2: // 1.4
2207 fEtaCut = 1.4;
e5b6e8a6 2208 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2209 fEtaCutMin = -0.1;
e5b6e8a6 2210 fLineCutZRSlopeMin = 0.;
4a0aab28 2211 break;
e5b6e8a6 2212 case 3: // 0.8
fcc79cf5 2213 fEtaCut = 0.8;
e5b6e8a6 2214 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2215 fEtaCutMin = -0.1;
e5b6e8a6 2216 fLineCutZRSlopeMin = 0.;
4a0aab28 2217 break;
a280ac15 2218 case 4: // 0.75
fcc79cf5 2219 fEtaCut = 0.75;
e5b6e8a6 2220 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2221 fEtaCutMin = -0.1;
e5b6e8a6 2222 fLineCutZRSlopeMin = 0.;
4a0aab28 2223 break;
11c1e680 2224 case 5: // 0.5
fcc79cf5 2225 fEtaCut = 0.5;
e5b6e8a6 2226 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2227 fEtaCutMin = -0.1;
11c1e680 2228 fLineCutZRSlopeMin = 0.;
4a0aab28 2229 break;
e5b6e8a6 2230 case 6: // 5.
fcc79cf5 2231 fEtaCut = 5.;
e5b6e8a6 2232 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2233 fEtaCutMin = -0.1;
e5b6e8a6 2234 fLineCutZRSlopeMin = 0.;
4a0aab28 2235 break;
ccfa8c0d 2236 case 7:
fcc79cf5 2237 fEtaCut = 0.3;
e5b6e8a6 2238 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2239 fEtaCutMin = -0.1;
11c1e680 2240 fLineCutZRSlopeMin = 0.;
e5b6e8a6 2241 break;
11c1e680 2242 // case 8: // 0.1 - 0.8
fcc79cf5 2243 // fEtaCut = 0.9;
11c1e680 2244 // fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2245 // fEtaCutMin = 0.1;
11c1e680 2246 // fLineCutZRSlopeMin = tan(2*atan(exp(-fEtaCutMin)));
2247 // break;
2248 case 8: // 0.4
fcc79cf5 2249 fEtaCut = 0.4;
e5b6e8a6 2250 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2251 fEtaCutMin = -0.1;
11c1e680 2252 fLineCutZRSlopeMin = 0.;
e5b6e8a6 2253 break;
2254 case 9: // 10
fcc79cf5 2255 fEtaCut = 10;
e5b6e8a6 2256 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
fcc79cf5 2257 fEtaCutMin = -0.1;
e5b6e8a6 2258 fLineCutZRSlopeMin = 0.;
4a0aab28 2259 break;
2260 default:
e5b6e8a6 2261 AliError(Form(" EtaCut not defined %d",etaCut));
4a0aab28 2262 return kFALSE;
4a0aab28 2263 }
2264 return kTRUE;
3b77b2d1 2265}
3b77b2d1 2266///________________________________________________________________________
e5b6e8a6 2267Bool_t AliConversionCuts::SetRCut(Int_t RCut){
2268 // Set Cut
2269 switch(RCut){
2270 case 0:
2271 fMinR=0;
2272 fMaxR = 180.;
4a0aab28 2273 break;
e5b6e8a6 2274 case 1:
2275 fMinR=2.8;
2276 fMaxR = 180.;
4a0aab28 2277 break;
e5b6e8a6 2278 case 2:
2279 fMinR=5.;
2280 fMaxR = 180.;
4a0aab28 2281 break;
e5b6e8a6 2282 case 3:
2283 fMaxR = 70.;
2284 fMinR = 10.;
4a0aab28 2285 break;
e5b6e8a6 2286 case 4:
2287 fMaxR = 70.;
2288 fMinR = 5.;
4a0aab28 2289 break;
e5b6e8a6 2290 // High purity cuts for PbPb (remove first layers of material)
2291 case 5:
2292 fMaxR = 180.;
2293 fMinR = 10.;
4a0aab28 2294 break;
e5b6e8a6 2295 case 6:
2296 fMaxR = 180.;
2297 fMinR = 20.;
4a0aab28 2298 break;
e5b6e8a6 2299 case 7:
2300 fMaxR = 180.;
2301 fMinR = 26.;
4a0aab28 2302 break;
e5b6e8a6 2303 case 8:
2304 fMaxR = 180.;
2305 fMinR = 35.;
4a0aab28 2306 break;
2307 case 9:
e5b6e8a6 2308 fMaxR = 35.;
2309 fMinR = 5.;
4a0aab28 2310 break;
e5b6e8a6 2311
4a0aab28 2312 default:
e5b6e8a6 2313 AliError("RCut not defined");
4a0aab28 2314 return kFALSE;
2315 }
2316 return kTRUE;
92efd725 2317}
92efd725 2318///________________________________________________________________________
e5b6e8a6 2319Bool_t AliConversionCuts::SetSinglePtCut(Int_t singlePtCut)
92efd725 2320{ // Set Cut
e5b6e8a6 2321 switch(singlePtCut){
2322 case 0: // 0.050 GeV
2323 fSinglePtCut = 0.050;
4a0aab28 2324 break;
e5b6e8a6 2325 case 1: // 0.100 GeV
2326 fSinglePtCut = 0.100;
4a0aab28 2327 break;
e5b6e8a6 2328 case 2: // 0.150 GeV
2329 fSinglePtCut = 0.150;
4a0aab28 2330 break;
e5b6e8a6 2331 case 3: // 0.200 GeV
2332 fSinglePtCut = 0.200;
4a0aab28 2333 break;
e5b6e8a6 2334 case 4: // 0.075 GeV
2335 fSinglePtCut = 0.075;
4a0aab28 2336 break;
e5b6e8a6 2337 case 5: // 0.125 GeV
2338 fSinglePtCut = 0.125;
4a0aab28 2339 break;
e5b6e8a6 2340 case 6: // 0.04 GeV
2341 fSinglePtCut = 0.040;
4a0aab28 2342 break;
e5b6e8a6 2343 case 7: // 0.0 GeV
2344 fSinglePtCut = 0.0;
4a0aab28 2345 break;
2346 default:
e5b6e8a6 2347 AliError(Form("singlePtCut not defined %d",singlePtCut));
4a0aab28 2348 return kFALSE;
2349 }
2350 return kTRUE;
3b77b2d1 2351}
3b77b2d1 2352///________________________________________________________________________
e5b6e8a6 2353Bool_t AliConversionCuts::SetTPCClusterCut(Int_t clsTPCCut)
3b77b2d1 2354{ // Set Cut
e5b6e8a6 2355 switch(clsTPCCut){
2356 case 0: // 0
2357 fMinClsTPC= 0.;
4a0aab28 2358 break;
ccfa8c0d 2359 case 1: // 60
2360 fMinClsTPC= 60.;
4a0aab28 2361 break;
e5b6e8a6 2362 case 2: // 80
2363 fMinClsTPC= 80.;
4a0aab28 2364 break;
e5b6e8a6 2365 case 3: // 100
2366 fMinClsTPC= 100.;
4a0aab28 2367 break;
ccfa8c0d 2368 case 4: // 95% of findable clusters
2369 fMinClsTPCToF= 0.95;
2370 fUseCorrectedTPCClsInfo=1;
4a0aab28 2371 break;
e5b6e8a6 2372 case 5: // 0% of findable clusters
2373 fMinClsTPCToF= 0.0;
2374 fUseCorrectedTPCClsInfo=1;
4a0aab28 2375 break;
e5b6e8a6 2376 case 6: // 70% of findable clusters
2377 fMinClsTPCToF= 0.7;
2378 fUseCorrectedTPCClsInfo=1;
4a0aab28 2379 break;
e5b6e8a6 2380 case 7: // 0% of findable clusters
2381 fMinClsTPCToF= 0.35;
2382 fUseCorrectedTPCClsInfo=0;
4a0aab28 2383 break;
2384 case 8:
e5b6e8a6 2385 fMinClsTPCToF= 0.35;
2386 fUseCorrectedTPCClsInfo=1;
4a0aab28 2387 break;
2388 case 9:
e5b6e8a6 2389 fMinClsTPCToF= 0.6;
2390 fUseCorrectedTPCClsInfo=1;
4a0aab28 2391 break;
2392 default:
e5b6e8a6 2393 AliError(Form("Warning: clsTPCCut not defined %d",clsTPCCut));
4a0aab28 2394 return kFALSE;
2395 }
2396 return kTRUE;
3b77b2d1 2397}
3b77b2d1 2398///________________________________________________________________________
e5b6e8a6 2399Bool_t AliConversionCuts::SetTPCdEdxCutElectronLine(Int_t ededxSigmaCut)
3b77b2d1 2400{ // Set Cut
e5b6e8a6 2401 switch(ededxSigmaCut){
2402 case 0: // -10,10
2403 fPIDnSigmaBelowElectronLine=-10;
2404 fPIDnSigmaAboveElectronLine=10;
4a0aab28 2405 break;
e5b6e8a6 2406 case 1: // -5,5
2407 fPIDnSigmaBelowElectronLine=-5;
2408 fPIDnSigmaAboveElectronLine=5;
4a0aab28 2409 break;
e5b6e8a6 2410 case 2: // -3,5
2411 fPIDnSigmaBelowElectronLine=-3;
2412 fPIDnSigmaAboveElectronLine=5;
4a0aab28 2413 break;
e5b6e8a6 2414 case 3: // -4,5
2415 fPIDnSigmaBelowElectronLine=-4;
2416 fPIDnSigmaAboveElectronLine=5;
4a0aab28 2417 break;
e5b6e8a6 2418 case 4: // -6,7
2419 fPIDnSigmaBelowElectronLine=-6;
2420 fPIDnSigmaAboveElectronLine=7;
4a0aab28 2421 break;
e5b6e8a6 2422 case 5: // -4,4
2423 fPIDnSigmaBelowElectronLine=-4;
2424 fPIDnSigmaAboveElectronLine=4;
4a0aab28 2425 break;
e5b6e8a6 2426 case 6: // -2.5,4
2427 fPIDnSigmaBelowElectronLine=-2.5;
2428 fPIDnSigmaAboveElectronLine=4;
4a0aab28 2429 break;
e5b6e8a6 2430 case 7: // -2,3.5
2431 fPIDnSigmaBelowElectronLine=-2;
2432 fPIDnSigmaAboveElectronLine=3.5;
4a0aab28 2433 break;
2434 default:
e5b6e8a6 2435 AliError("TPCdEdxCutElectronLine not defined");
4a0aab28 2436 return kFALSE;
e5b6e8a6 2437
4a0aab28 2438 }
2439 return kTRUE;
3b77b2d1 2440}
2441///________________________________________________________________________
e5b6e8a6 2442Bool_t AliConversionCuts::SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut)
3b77b2d1 2443{ // Set Cut
e5b6e8a6 2444
2445 switch(pidedxSigmaCut){
2446 case 0: // -10
2447 fPIDnSigmaAbovePionLine=-10;
2448 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2449 break;
e5b6e8a6 2450 case 1: // 0
2451 fPIDnSigmaAbovePionLine=0;
2452 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2453 break;
e5b6e8a6 2454 case 2: // 1
2455 fPIDnSigmaAbovePionLine=1;
2456 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2457 break;
e5b6e8a6 2458 case 3: // 1
2459 fPIDnSigmaAbovePionLine=2.5;
2460 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2461 break;
e5b6e8a6 2462 case 4: // 1
2463 fPIDnSigmaAbovePionLine=0.5;
2464 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2465 break;
e5b6e8a6 2466 case 5: // 1
2467 fPIDnSigmaAbovePionLine=2.;
2468 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2469 break;
e5b6e8a6 2470 case 6: // 1
2471 fPIDnSigmaAbovePionLine=2.;
2472 fPIDnSigmaAbovePionLineHighPt=0.5;
4a0aab28 2473 break;
e5b6e8a6 2474 case 7: // 1
2475 fPIDnSigmaAbovePionLine=3.5;
2476 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2477 break;
e5b6e8a6 2478 case 8: // 1
2479 fPIDnSigmaAbovePionLine=2.;
2480 fPIDnSigmaAbovePionLineHighPt=1.;
4a0aab28 2481 break;
2482 case 9:
e5b6e8a6 2483 fPIDnSigmaAbovePionLine=3.0; // We need a bit less tight cut on dE/dx
2484 fPIDnSigmaAbovePionLineHighPt=-10;
4a0aab28 2485 break;
2486 default:
e5b6e8a6 2487 AliError(Form("Warning: pidedxSigmaCut not defined %d",pidedxSigmaCut));
4a0aab28 2488 return kFALSE;
2489 }
2490 return kTRUE;
3b77b2d1 2491}
3b77b2d1 2492///________________________________________________________________________
e5b6e8a6 2493Bool_t AliConversionCuts::SetMinMomPiondEdxCut(Int_t piMomdedxSigmaCut)
3b77b2d1 2494{ // Set Cut
e5b6e8a6 2495 switch(piMomdedxSigmaCut){
2496 case 0: // 0.5 GeV
2497 fPIDMinPnSigmaAbovePionLine=0.5;
4a0aab28 2498 break;
e5b6e8a6 2499 case 1: // 1. GeV
2500 fPIDMinPnSigmaAbovePionLine=1.;
4a0aab28 2501 break;
e5b6e8a6 2502 case 2: // 1.5 GeV
2503 fPIDMinPnSigmaAbovePionLine=1.5;
4a0aab28 2504 break;
e5b6e8a6 2505 case 3: // 20.0 GeV
2506 fPIDMinPnSigmaAbovePionLine=20.;
4a0aab28 2507 break;
e5b6e8a6 2508 case 4: // 50.0 GeV
2509 fPIDMinPnSigmaAbovePionLine=50.;
4a0aab28 2510 break;
e5b6e8a6 2511 case 5: // 0.3 GeV
2512 fPIDMinPnSigmaAbovePionLine=0.3;
4a0aab28 2513 break;
e5b6e8a6 2514 case 6: // 0.25 GeV
2515 fPIDMinPnSigmaAbovePionLine=0.25;
4a0aab28 2516 break;
e5b6e8a6 2517 case 7: // 0.4 GeV
2518 fPIDMinPnSigmaAbovePionLine=0.4;
4a0aab28 2519 break;
e5b6e8a6 2520 case 8: // 0.2 GeV
2521 fPIDMinPnSigmaAbovePionLine=0.2;
4a0aab28 2522 break;
2523 default:
e5b6e8a6 2524 AliError(Form("piMomdedxSigmaCut not defined %d",piMomdedxSigmaCut));
4a0aab28 2525 return kFALSE;
2526 }
2527 return kTRUE;
3b77b2d1 2528}
3b77b2d1 2529///________________________________________________________________________
2530Bool_t AliConversionCuts::SetMaxMomPiondEdxCut(Int_t piMaxMomdedxSigmaCut)
2531{ // Set Cut
4a0aab28 2532 switch(piMaxMomdedxSigmaCut){
2533 case 0: // 100. GeV
2534 fPIDMaxPnSigmaAbovePionLine=100.;
2535 break;
2536 case 1: // 5. GeV
2537 fPIDMaxPnSigmaAbovePionLine=5.;
2538 break;
2539 case 2: // 4. GeV
2540 fPIDMaxPnSigmaAbovePionLine=4.;
2541 break;
2542 case 3: // 3.5 GeV
2543 fPIDMaxPnSigmaAbovePionLine=3.5;
2544 break;
2545 case 4: // 3. GeV
2546 fPIDMaxPnSigmaAbovePionLine=3.;
2547 break;
e5b6e8a6 2548 case 5: // 7. GeV
2549 fPIDMaxPnSigmaAbovePionLine=7.;
4a0aab28 2550 break;
2551 default:
e5b6e8a6 2552 AliError(Form("piMaxMomdedxSigmaCut not defined %d",piMaxMomdedxSigmaCut));
4a0aab28 2553 return kFALSE;
92efd725 2554 }
2555 return kTRUE;
3b77b2d1 2556}
3b77b2d1 2557///________________________________________________________________________
2558Bool_t AliConversionCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
2559{ // Set Cut
4a0aab28 2560 switch(LowPRejectionSigmaCut){
2561 case 0: //
2562 fPIDnSigmaAtLowPAroundKaonLine=0;
2563 fPIDnSigmaAtLowPAroundProtonLine=0;
2564 fPIDnSigmaAtLowPAroundPionLine=0;
e5b6e8a6 2565 fDoKaonRejectionLowP = kFALSE;
2566 fDoProtonRejectionLowP = kFALSE;
2567 fDoPionRejectionLowP = kFALSE;
2568 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
4a0aab28 2569 break;
2570 case 1: //
2571 fPIDnSigmaAtLowPAroundKaonLine=0.5;
2572 fPIDnSigmaAtLowPAroundProtonLine=0.5;
2573 fPIDnSigmaAtLowPAroundPionLine=0.5;
e5b6e8a6 2574 fDoKaonRejectionLowP = kTRUE;
2575 fDoProtonRejectionLowP = kTRUE;
2576 fDoPionRejectionLowP = kTRUE;
2577 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
4a0aab28 2578 break;
2579 case 2: //
2580 fPIDnSigmaAtLowPAroundKaonLine=1;
2581 fPIDnSigmaAtLowPAroundProtonLine=1;
2582 fPIDnSigmaAtLowPAroundPionLine=1;
e5b6e8a6 2583 fDoKaonRejectionLowP = kTRUE;
2584 fDoProtonRejectionLowP = kTRUE;
2585 fDoPionRejectionLowP = kTRUE;
2586 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
4a0aab28 2587 break;
2588 case 3: //
2589 fPIDnSigmaAtLowPAroundKaonLine=2.;
2590 fPIDnSigmaAtLowPAroundProtonLine=2.;
2591 fPIDnSigmaAtLowPAroundPionLine=2.;
e5b6e8a6 2592 fDoKaonRejectionLowP = kTRUE;
2593 fDoProtonRejectionLowP = kTRUE;
2594 fDoPionRejectionLowP = kTRUE;
2595 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
4a0aab28 2596 break;
2597 case 4: //
2598 fPIDnSigmaAtLowPAroundKaonLine=0.;
2599 fPIDnSigmaAtLowPAroundProtonLine=0.;
2600 fPIDnSigmaAtLowPAroundPionLine=1;
e5b6e8a6 2601 fDoKaonRejectionLowP = kFALSE;
2602 fDoProtonRejectionLowP = kFALSE;
2603 fDoPionRejectionLowP = kTRUE;
2604 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
4a0aab28 2605 break;
2606 case 5: //
2607 fPIDnSigmaAtLowPAroundKaonLine=0.;
2608 fPIDnSigmaAtLowPAroundProtonLine=0.;
2609 fPIDnSigmaAtLowPAroundPionLine=1.5;
e5b6e8a6 2610 fDoKaonRejectionLowP = kFALSE;
2611 fDoProtonRejectionLowP = kFALSE;
2612 fDoPionRejectionLowP = kTRUE;
2613 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
4a0aab28 2614 break;
2615 case 6: //
2616 fPIDnSigmaAtLowPAroundKaonLine=0.;
2617 fPIDnSigmaAtLowPAroundProtonLine=0.;
2618 fPIDnSigmaAtLowPAroundPionLine=2.;
e5b6e8a6 2619 fDoKaonRejectionLowP = kFALSE;
2620 fDoProtonRejectionLowP = kFALSE;
2621 fDoPionRejectionLowP = kTRUE;
2622 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
2623 break;
2624 case 7: //
2625 fPIDnSigmaAtLowPAroundKaonLine=0.;
2626 fPIDnSigmaAtLowPAroundProtonLine=0.;
2627 fPIDnSigmaAtLowPAroundPionLine=0.5;
2628 fDoKaonRejectionLowP = kFALSE;
2629 fDoProtonRejectionLowP = kFALSE;
2630 fDoPionRejectionLowP = kTRUE;
2631 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
4a0aab28 2632 break;
2633 default:
2634 AliError(Form("LowPRejectionSigmaCut not defined %d",LowPRejectionSigmaCut));
2635 return kFALSE;
2636 }
2637 return kTRUE;
3b77b2d1 2638}
3b77b2d1 2639///________________________________________________________________________
2640Bool_t AliConversionCuts::SetTOFElectronPIDCut(Int_t TOFelectronPID){
4a0aab28 2641 // Set Cut
e5b6e8a6 2642 switch(TOFelectronPID){
4a0aab28 2643 case 0: // no cut
2644 fUseTOFpid = kFALSE;
2645 fTofPIDnSigmaBelowElectronLine=-100;
2646 fTofPIDnSigmaAboveElectronLine=100;
2647 break;
2648 case 1: // -7,7
2649 fUseTOFpid = kTRUE;
2650 fTofPIDnSigmaBelowElectronLine=-7;
2651 fTofPIDnSigmaAboveElectronLine=7;
2652 break;
2653 case 2: // -5,5
2654 fUseTOFpid = kTRUE;
2655 fTofPIDnSigmaBelowElectronLine=-5;
2656 fTofPIDnSigmaAboveElectronLine=5;
2657 break;
2658 case 3: // -3,5
2659 fUseTOFpid = kTRUE;
2660 fTofPIDnSigmaBelowElectronLine=-3;
2661 fTofPIDnSigmaAboveElectronLine=5;
2662 break;
2663 case 4: // -2,3
2664 fUseTOFpid = kTRUE;
2665 fTofPIDnSigmaBelowElectronLine=-2;
2666 fTofPIDnSigmaAboveElectronLine=3;
2667 break;
e5b6e8a6 2668 case 5: // -3,3
2669 fUseTOFpid = kTRUE;
2670 fTofPIDnSigmaBelowElectronLine=-3;
2671 fTofPIDnSigmaAboveElectronLine=3;
4a0aab28 2672 break;
2673 default:
e5b6e8a6 2674 AliError(Form("TOFElectronCut not defined %d",TOFelectronPID));
4a0aab28 2675 return kFALSE;
2676 }
4a0aab28 2677 return kTRUE;
3b77b2d1 2678}
2679///________________________________________________________________________
2680Bool_t AliConversionCuts::SetQtMaxCut(Int_t QtMaxCut)
2681{ // Set Cut
4a0aab28 2682 switch(QtMaxCut){
2683 case 0: //
2684 fQtMax=1.;
e5b6e8a6 2685 fDoQtGammaSelection=kFALSE;
2686 fDoHighPtQtGammaSelection=kFALSE;
2687 fHighPtQtMax=100.;
2688 fPtBorderForQt=100.;
4a0aab28 2689 break;
2690 case 1:
2691 fQtMax=0.1;
e5b6e8a6 2692 fDoHighPtQtGammaSelection=kFALSE;
2693 fHighPtQtMax=100.;
2694 fPtBorderForQt=100.;
4a0aab28 2695 break;
2696 case 2:
2697 fQtMax=0.07;
e5b6e8a6 2698 fDoHighPtQtGammaSelection=kFALSE;
2699 fHighPtQtMax=100.;
2700 fPtBorderForQt=100.;
4a0aab28 2701 break;
2702 case 3:
2703 fQtMax=0.05;
e5b6e8a6 2704 fDoHighPtQtGammaSelection=kFALSE;
2705 fHighPtQtMax=100.;
2706 fPtBorderForQt=100.;
4a0aab28 2707 break;
2708 case 4:
2709 fQtMax=0.03;
e5b6e8a6 2710 fDoHighPtQtGammaSelection=kFALSE;
2711 fHighPtQtMax=100.;
2712 fPtBorderForQt=100.;
4a0aab28 2713 break;
e5b6e8a6 2714 case 5:
4a0aab28 2715 fQtMax=0.02;
e5b6e8a6 2716 fDoHighPtQtGammaSelection=kFALSE;
2717 fHighPtQtMax=100.;
2718 fPtBorderForQt=100.;
2719 break;
2720 case 6:
4a0aab28 2721 fQtMax=0.02;
2722 fDoHighPtQtGammaSelection=kTRUE;
2723 fHighPtQtMax=0.06;
2724 fPtBorderForQt=2.5;
e5b6e8a6 2725 break;
4a0aab28 2726 case 7:
2727 fQtMax=0.15;
e5b6e8a6 2728 fDoHighPtQtGammaSelection=kFALSE;
2729 fHighPtQtMax=100.;
2730 fPtBorderForQt=100.;
4a0aab28 2731 break;
2732 default:
2733 AliError(Form("Warning: QtMaxCut not defined %d",QtMaxCut));
2734 return kFALSE;
2735 }
2736 return kTRUE;
3b77b2d1 2737}
3b77b2d1 2738///________________________________________________________________________
e5b6e8a6 2739Bool_t AliConversionCuts::SetChi2GammaCut(Int_t chi2GammaCut)
2740{ // Set Cut
2741
2742 switch(chi2GammaCut){
2743 case 0: // 100
2744 fChi2CutConversion = 100.;
4a0aab28 2745 break;
e5b6e8a6 2746 case 1: // 50
2747 fChi2CutConversion = 50.;
4a0aab28 2748 break;
e5b6e8a6 2749 case 2: // 30
2750 fChi2CutConversion = 30.;
2751 break;
2752 case 3:
2753 fChi2CutConversion = 200.;
2754 break;
2755 case 4:
2756 fChi2CutConversion = 500.;
2757 break;
2758 case 5:
2759 fChi2CutConversion = 100000.;
2760 break;
2761 case 6:
2762 fChi2CutConversion = 5.;
2763 break;
2764 case 7:
2765 fChi2CutConversion = 10.;
2766 break;
2767 case 8:
2768 fChi2CutConversion = 20.;
2769 break;
2770 case 9:
2771 fChi2CutConversion = 15.;
4a0aab28 2772 break;
2773 default:
e5b6e8a6 2774 AliError(Form("Warning: Chi2GammaCut not defined %d",chi2GammaCut));
4a0aab28 2775 return kFALSE;
2776 }
4a0aab28 2777 return kTRUE;
3b77b2d1 2778}
3b77b2d1 2779///________________________________________________________________________
2780Bool_t AliConversionCuts::SetPsiPairCut(Int_t psiCut) {
3b77b2d1 2781
4a0aab28 2782 switch(psiCut) {
2783 case 0:
e5b6e8a6 2784 fPsiPairCut = 10000; //
4a0aab28 2785 break;
2786 case 1:
e5b6e8a6 2787 fPsiPairCut = 0.1; //
4a0aab28 2788 break;
2789 case 2:
2790 fPsiPairCut = 0.05; // Standard
2791 break;
2792 case 3:
e5b6e8a6 2793 fPsiPairCut = 0.035; //
4a0aab28 2794 break;
2795 case 4:
e5b6e8a6 2796 fPsiPairCut = 0.15; //
4a0aab28 2797 break;
2798 case 5:
e5b6e8a6 2799 fPsiPairCut = 0.2; //
4a0aab28 2800 break;
2801 case 6:
e5b6e8a6 2802 fPsiPairCut = 0.03; //
4a0aab28 2803 break;
2804 case 7:
e5b6e8a6 2805 fPsiPairCut = 0.025; //
4a0aab28 2806 break;
2807 case 8:
e5b6e8a6 2808 fPsiPairCut = 0.01; //
2809 break;
2810 case 9:
2811 fPsiPairCut = 0.5; //
4a0aab28 2812 break;
2813 default:
92efd725 2814 AliError(Form("PsiPairCut not defined %d",psiCut));
3b77b2d1 2815 return kFALSE;
4a0aab28 2816 }
3b77b2d1 2817
4a0aab28 2818 return kTRUE;
3b77b2d1 2819}
e5b6e8a6 2820///________________________________________________________________________
2821Bool_t AliConversionCuts::SetPhotonAsymmetryCut(Int_t doPhotonAsymmetryCut){
2822 // Set Cut
2823 switch(doPhotonAsymmetryCut){
2824 case 0:
2825 fDoPhotonAsymmetryCut=0;
2826 fMinPPhotonAsymmetryCut=100.;
2827 fMinPhotonAsymmetry=0.;
2828 break;
2829 case 1:
2830 fDoPhotonAsymmetryCut=1;
2831 fMinPPhotonAsymmetryCut=3.5;
2832 fMinPhotonAsymmetry=0.04;
2833 break;
2834 case 2:
2835 fDoPhotonAsymmetryCut=1;
2836 fMinPPhotonAsymmetryCut=3.5;
2837 fMinPhotonAsymmetry=0.06;
2838 break;
5a104c5e 2839 case 3:
2840 fDoPhotonAsymmetryCut=1;
2841 fMinPPhotonAsymmetryCut=0.0;
2842 fMinPhotonAsymmetry=0.05;
2843 break;
e5b6e8a6 2844 default:
2845 AliError(Form("PhotonAsymmetryCut not defined %d",doPhotonAsymmetryCut));
2846 return kFALSE;
2847 }
2848 fCuts[kdoPhotonAsymmetryCut]=doPhotonAsymmetryCut;
2849 return kTRUE;
2850}
3b77b2d1 2851///________________________________________________________________________
2852Bool_t AliConversionCuts::SetCosPAngleCut(Int_t cosCut) {
2853
4a0aab28 2854 switch(cosCut){
2855 case 0:
e5b6e8a6 2856 fCosPAngleCut = TMath::Pi(); // -1
4a0aab28 2857 break;
2858 case 1:
e5b6e8a6 2859 fCosPAngleCut = 0.1; // 0.99500
4a0aab28 2860 break;
2861 case 2:
e5b6e8a6 2862 fCosPAngleCut = 0.05; // 0.99875
4a0aab28 2863 break;
2864 case 3:
e5b6e8a6 2865 fCosPAngleCut = 0.025; // 0.99969
4a0aab28 2866 break;
2867 case 4:
e5b6e8a6 2868 fCosPAngleCut = 0.01; // 0.99995
2869 break;
2870 case 5:
2871 fCosPAngleCut = 0.2; // 0.98007
2872 break;
2873 case 6:
2874 fCosPAngleCut = 0.5; // 0.87758
2875 break;
2876 case 7:
2877 fCosPAngleCut = 0.075; // 0.73169
4a0aab28 2878 break;
2879 default:
2880 AliError(Form("Cosine Pointing Angle cut not defined %d",cosCut));
2881 return kFALSE;
2882 }
3b77b2d1 2883
4a0aab28 2884 return kTRUE;
3b77b2d1 2885}
92efd725 2886///________________________________________________________________________
2887Bool_t AliConversionCuts::SetSharedElectronCut(Int_t sharedElec) {
2888
2889 switch(sharedElec){
4a0aab28 2890 case 0:
2891 fDoSharedElecCut = kFALSE;
2892 break;
2893 case 1:
2894 fDoSharedElecCut = kTRUE;
2895 break;
2896 default:
2897 AliError(Form("Shared Electron Cut not defined %d",sharedElec));
2898 return kFALSE;
2899 }
e5b6e8a6 2900
4a0aab28 2901 return kTRUE;
92efd725 2902}
92efd725 2903///________________________________________________________________________
2904Bool_t AliConversionCuts::SetToCloseV0sCut(Int_t toClose) {
2905
2906 switch(toClose){
2907 case 0:
2908 fDoToCloseV0sCut = kFALSE;
2909 fminV0Dist = 250;
2910 break;
2911 case 1:
2912 fDoToCloseV0sCut = kTRUE;
2913 fminV0Dist = 1;
2914 break;
2915 case 2:
2916 fDoToCloseV0sCut = kTRUE;
2917 fminV0Dist = 2;
2918 break;
2919 case 3:
2920 fDoToCloseV0sCut = kTRUE;
2921 fminV0Dist = 3;
2922 break;
2923 default:
4a0aab28 2924 AliError(Form("Shared Electron Cut not defined %d",toClose));
2925 return kFALSE;
92efd725 2926 }
2927 return kTRUE;
2928}
ca91a3e1 2929///________________________________________________________________________
e5b6e8a6 2930Bool_t AliConversionCuts::SetTRDElectronCut(Int_t TRDElectronCut)
2931{ // Set Cut
2932 switch(TRDElectronCut){
ca91a3e1 2933 case 0:
e5b6e8a6 2934 fDoTRDPID=kFALSE;
2935 break;
ca91a3e1 2936 case 1:
e5b6e8a6 2937 fDoTRDPID=kTRUE;
2938 fPIDTRDEfficiency=0.1;
2939 break;
2940 case 8:
2941 fDoTRDPID=kTRUE;
2942 fPIDTRDEfficiency=0.8;
2943 break;
2944 case 9:
2945 fDoTRDPID=kTRUE;
2946 fPIDTRDEfficiency=0.9;
2947 break;
ca91a3e1 2948 default:
e5b6e8a6 2949 AliError(Form("TRDElectronCut not defined %d",TRDElectronCut));
ca91a3e1 2950 return kFALSE;
2951 }
e5b6e8a6 2952
ca91a3e1 2953 return kTRUE;
2954}
4803eb1f 2955
2956///________________________________________________________________________
aff90284 2957Bool_t AliConversionCuts::SetDCAZPhotonPrimVtxCut(Int_t DCAZPhotonPrimVtx){
4803eb1f 2958 // Set Cut
2959 switch(DCAZPhotonPrimVtx){
2960 case 0: //
aff90284 2961 fDCAZPrimVtxCut = 1000;
4803eb1f 2962 break;
2963 case 1: //
2964 fDCAZPrimVtxCut = 10;
2965 break;
2966 case 2: //
2967 fDCAZPrimVtxCut = 5;
2968 break;
2969 case 3: //
2970 fDCAZPrimVtxCut = 4;
2971 break;
2972 case 4: //
2973 fDCAZPrimVtxCut = 3;
2974 break;
2975 case 5: //
2976 fDCAZPrimVtxCut = 2.5;
2977 break;
2978 case 6: //
2979 fDCAZPrimVtxCut = 2;
2980 break;
2981 case 7: //
2982 fDCAZPrimVtxCut = 1.5;
2983 break;
2984 case 8: //
2985 fDCAZPrimVtxCut = 1;
2986 break;
2987 case 9: //
2988 fDCAZPrimVtxCut = 0.5;
2989 break;
2990 default:
2991 cout<<"Warning: DCAZPhotonPrimVtx not defined "<<DCAZPhotonPrimVtx<<endl;
2992 return kFALSE;
2993 }
2994 return kTRUE;
2995}
2996
2997///________________________________________________________________________
aff90284 2998Bool_t AliConversionCuts::SetDCARPhotonPrimVtxCut(Int_t DCARPhotonPrimVtx){
4803eb1f 2999 // Set Cut
3000 switch(DCARPhotonPrimVtx){
3001 case 0: //
aff90284 3002 fDCARPrimVtxCut = 1000;
4803eb1f 3003 break;
3004 case 1: //
3005 fDCARPrimVtxCut = 10;
3006 break;
3007 case 2: //
3008 fDCARPrimVtxCut = 5;
3009 break;
3010 case 3: //
3011 fDCARPrimVtxCut = 4;
3012 break;
3013 case 4: //
3014 fDCARPrimVtxCut = 3;
3015 break;
3016 case 5: //
3017 fDCARPrimVtxCut = 2.5;
3018 break;
3019 case 6: //
3020 fDCARPrimVtxCut = 2;
3021 break;
3022 case 7: //
3023 fDCARPrimVtxCut = 1.5;
3024 break;
3025 case 8: //
3026 fDCARPrimVtxCut = 1;
3027 break;
3028 case 9: //
3029 fDCARPrimVtxCut = 0.5;
3030 break;
3031 default:
3032 cout<<"Warning: DCARPhotonPrimVtx not defined "<<DCARPhotonPrimVtx<<endl;
3033 return kFALSE;
3034 }
3035 return kTRUE;
3036}
3037
3038
e5b6e8a6 3039//-------------------------------------------------------------
3040Double_t AliConversionCuts::GetCentrality(AliVEvent *event)
3041{ // Get Event Centrality
3042
3043 AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
3044 if(esdEvent){
3045 AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
3046
3047 if(fDetectorCentrality==0){
ae947965 3048 if (fIsHeavyIon==2){
3049 return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
3050 } else{
3051 return fESDCentrality->GetCentralityPercentile("V0M"); // default
3052 }
e5b6e8a6 3053 }
3054 if(fDetectorCentrality==1){
3055 return fESDCentrality->GetCentralityPercentile("CL1");
3056 }
3057 }
3058
3059 AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
3060 if(aodEvent){
3061 if(aodEvent->GetHeader()){return aodEvent->GetHeader()->GetCentrality();}
3062 }
3063
3064 return -1;
3065}
3066//-------------------------------------------------------------
3067Bool_t AliConversionCuts::IsCentralitySelected(AliVEvent *event, AliVEvent *fMCEvent)
3068{ // Centrality Selection
3069 if(!fIsHeavyIon)return kTRUE;
3070
4803eb1f 3071 if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
3072 else if(fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-100%
aff90284 3073
e5b6e8a6 3074 Double_t centrality=GetCentrality(event);
3075 if(centrality<0)return kFALSE;
3076
3077 Int_t centralityC=0;
3078 if (fModCentralityClass == 0){
3079 centralityC= Int_t(centrality/10);
3080 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
3081 return kTRUE;
3082 else return kFALSE;
3083 }
3084 else if (fModCentralityClass ==1){
3085 centralityC= Int_t(centrality);
3086 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
3087 return kTRUE;
3088 } else return kFALSE;
3089 }
3090 else if (fModCentralityClass ==2){
3091 centralityC= Int_t(centrality);
3092 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
3093 return kTRUE;
3094 else return kFALSE;
3095 }
aff90284 3096
4803eb1f 3097 Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->GetNumberOfPrimaryTracks();
aff90284 3098 Int_t PrimaryTracks10[10][2] =
4803eb1f 3099 {
3100 {9999,9999}, // 0
46ec68c9 3101 {1210,2150}, // 10
3102 { 817,1435}, // 20
3103 { 536, 930}, // 30
3104 { 337, 570}, // 40
3105 { 197, 327}, // 50
3106 { 106, 173}, // 60
3107 { 51, 81}, // 70
3108 { 21, 34}, // 80
4803eb1f 3109 { 0, 0} // 90
3110 };
aff90284 3111 Int_t PrimaryTracks5a[10][2] =
4803eb1f 3112 {
3113 {9999,9999}, // 0
46ec68c9 3114 {1485,2640}, // 5
3115 {1210,2150}, // 10
3116 { 995,1760}, // 15
3117 { 817,1435}, // 20
3118 { 666,1160}, // 25
3119 { 536, 930}, // 30
3120 { 428, 731}, // 35
3121 { 337, 570}, // 40
3122 { 260, 436} // 45
4803eb1f 3123 };
aff90284 3124 Int_t PrimaryTracks5b[10][2] =
4803eb1f 3125 {
46ec68c9 3126 { 260, 436}, // 45
3127 { 197, 327}, // 50
3128 { 147, 239}, // 55
3129 { 106, 173}, // 60
3130 { 75, 120}, // 65
3131 { 51, 81}, // 70
3132 { 34, 53}, // 75
3133 { 21, 34}, // 80
3134 { 13, 19}, // 85
4803eb1f 3135 { 0, 0} // 90
3136 };
3137
3138 Int_t column = -1;
3139 if(event->IsA()==AliESDEvent::Class()) column = 0;
3140 if(event->IsA()==AliAODEvent::Class()) column = 1;
aff90284 3141
e5b6e8a6 3142 if (fModCentralityClass == 3){
3143 if(fMCEvent){
4803eb1f 3144 if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
e5b6e8a6 3145 return kTRUE;
3146 else return kFALSE;
3147 }
3148 else{
3149 centralityC= Int_t(centrality/10);
3150 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
3151 return kTRUE;
3152 else return kFALSE;
3153 }
3154 }
3155 else if (fModCentralityClass ==4){
3156 if(fMCEvent){
4803eb1f 3157 if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
e5b6e8a6 3158 return kTRUE;
3159 else return kFALSE;
3160 }
3161 else{
3162 centralityC= Int_t(centrality);
3163 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
3164 return kTRUE;
3165 } else return kFALSE;
3166 }
3167 }
3168 else if (fModCentralityClass ==5){
3169 if(fMCEvent){
4803eb1f 3170 if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
e5b6e8a6 3171 return kTRUE;
3172 else return kFALSE;
3173 }
3174 else{
3175 centralityC= Int_t(centrality);
3176 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
3177 return kTRUE;
3178 else return kFALSE;
3179 }
3180 }
3181
3182 return kFALSE;
3183}
3184///________________________________________________________________________
3185Bool_t AliConversionCuts::VertexZCut(AliVEvent *event){
3186 // Cut on z position of primary vertex
3187 Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
3b77b2d1 3188
e5b6e8a6 3189 if(abs(fVertexZ)>fMaxVertexZ)return kFALSE;
11c1e680 3190
0a2b2b4b 3191 if (fIsHeavyIon == 2){
3192 if(fUtils->IsFirstEventInChunk(event)) return kFALSE;
3193 if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
3194
3195 }
11c1e680 3196
e5b6e8a6 3197 return kTRUE;
3198}
3b77b2d1 3199///________________________________________________________________________
3200
3201Int_t AliConversionCuts::GetNumberOfContributorsVtx(AliVEvent *event){
4a0aab28 3202 // returns number of contributors to the vertex
e5b6e8a6 3203
4a0aab28 3204 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
3205 if(fESDEvent){
e5b6e8a6 3206 if (fESDEvent->GetPrimaryVertex() != NULL){
3207 if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
fcc79cf5 3208// cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
e5b6e8a6 3209 return fESDEvent->GetPrimaryVertex()->GetNContributors();
3210 }
4a0aab28 3211 }
a280ac15 3212
e5b6e8a6 3213 if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
4a0aab28 3214 if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
fcc79cf5 3215// cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
4a0aab28 3216 return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
e5b6e8a6 3217 } else {
3218 AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
ccfa8c0d 3219// cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
4a0aab28 3220 return 0;
3221 }
3222 }
3223 }
3224
3225 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
3226 if(fAODEvent){
e5b6e8a6 3227 if (fAODEvent->GetPrimaryVertex() != NULL){
3228 if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
3229 return fAODEvent->GetPrimaryVertex()->GetNContributors();
3230 }
a280ac15 3231 }
e5b6e8a6 3232 if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
4a0aab28 3233 if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
3234 return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
e5b6e8a6 3235 } else {
4a0aab28 3236 AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
3237 return 0;
3238 }
3239 }
3240 }
ccfa8c0d 3241 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
4a0aab28 3242 return 0;
3b77b2d1 3243}
3244
92efd725 3245///________________________________________________________________________
3b77b2d1 3246
1186afd2 3247Bool_t AliConversionCuts::IsTriggerSelected(AliVEvent *fInputEvent)
92efd725 3248{
e5b6e8a6 3249
4a0aab28 3250 AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
3251
3252 UInt_t isSelected = AliVEvent::kAny;
0a2b2b4b 3253 if (fInputHandler==NULL) return kFALSE;
1186afd2 3254 if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
ae947965 3255 if (!fTriggerSelectedManually){
3256 if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
3257 else {
3258 if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
3259 else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
3260 else fOfflineTriggerMask = AliVEvent::kMB;
aff90284 3261 }
ae947965 3262 }
4a0aab28 3263 // Get the actual offline trigger mask for the event and AND it with the
3264 // requested mask. If no mask requested select by default the event.
ae947965 3265// if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
3266// else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
aff90284 3267
4a0aab28 3268 if (fOfflineTriggerMask)
3269 isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
3270 }
e5b6e8a6 3271 fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
4a0aab28 3272
3273 // Fill Histogram
3274 if(hTriggerClass){
11c1e680 3275 if (fIsSDDFired) hTriggerClass->Fill(33);
e5b6e8a6 3276 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
3277 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
3278 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
3279 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
3280 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
4a0aab28 3281 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
e5b6e8a6 3282 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
3283 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
e5b6e8a6 3284 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
3285 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
3286 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
3287 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
3288 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
3289 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
3290 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
3291 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
3292 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
3293 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
3294 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
3295 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
3296 if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
3297 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
3298 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
3299 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
3300 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
3301 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
3302 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
3303 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
3304 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
3305 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
3306 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
3307 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
3308 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
3309 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
3310 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
3311 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
11c1e680 3312 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
3313 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
3314 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
3315 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
3316 if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
a280ac15 3317 }
3318
3319 if(hTriggerClassSelected && isSelected){
11c1e680 3320 if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
a280ac15 3321 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
3322 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
3323 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
3324 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
3325 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
3326 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
3327 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
3328 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
3329 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
3330 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
3331 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
3332 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
3333 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
3334 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
3335 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
3336 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
3337 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
3338 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
3339 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
3340 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
3341 if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
3342 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
3343 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
3344 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
3345 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
3346 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
3347 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
3348 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
3349 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
3350 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
3351 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
3352 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
3353 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
3354 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
3355 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
3356 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
11c1e680 3357 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
3358 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
3359 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
3360 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
4a0aab28 3361 }
3b77b2d1 3362
e5b6e8a6 3363 if(!isSelected)return kFALSE;
a280ac15 3364
4a0aab28 3365 return kTRUE;
3b77b2d1 3366
92efd725 3367}
3b77b2d1 3368
3369///________________________________________________________________________
3370Int_t AliConversionCuts::GetFirstTPCRow(Double_t radius){
4a0aab28 3371 // Get first TPC row
e5b6e8a6 3372 Int_t firstTPCRow = 0;
3373 Double_t radiusI = 84.8;
3374 Double_t radiusO = 134.6;
4a0aab28 3375 Double_t radiusOB = 198.;
e5b6e8a6 3376 Double_t rSizeI = 0.75;
3377 Double_t rSizeO = 1.;
3378 Double_t rSizeOB = 1.5;
3379 Int_t nClsI = 63;
3380 Int_t nClsIO = 127;
4a0aab28 3381
3382 if(radius <= radiusI){
3383 return firstTPCRow;
3384 }
3385 if(radius>radiusI && radius<=radiusO){
3386 firstTPCRow = (Int_t)((radius-radiusI)/rSizeI);
3387 }
3388 if(radius>radiusO && radius<=radiusOB){
3389 firstTPCRow = (Int_t)(nClsI+(radius-radiusO)/rSizeO);
3390 }
3391
3392 if(radius>radiusOB){
3393 firstTPCRow =(Int_t)(nClsIO+(radius-radiusOB)/rSizeOB);
3394 }
3395
3396 return firstTPCRow;
3b77b2d1 3397}
3398
92efd725 3399Bool_t AliConversionCuts::CosinePAngleCut(const AliConversionPhotonBase * photon, AliVEvent * event) const {
4a0aab28 3400 ///Check if passes cosine of pointing angle cut
92efd725 3401 if(GetCosineOfPointingAngle(photon, event) < (TMath::Cos(fCosPAngleCut))){
3402 return kFALSE;
3403 }
3404 return kTRUE;
3b77b2d1 3405}
3406
92efd725 3407Double_t AliConversionCuts::GetCosineOfPointingAngle( const AliConversionPhotonBase * photon, AliVEvent * event) const{
e5b6e8a6 3408 // calculates the pointing angle of the recalculated V0
3b77b2d1 3409
92efd725 3410 Double_t momV0[3] = {0,0,0};
3411 if(event->IsA()==AliESDEvent::Class()){
3412 AliESDEvent *esdEvent = dynamic_cast<AliESDEvent*>(event);
e5b6e8a6 3413 if(!esdEvent) return -999;
92efd725 3414 AliESDv0 *v0 = esdEvent->GetV0(photon->GetV0Index());
e5b6e8a6 3415 if(!v0) return -999;
92efd725 3416 v0->GetPxPyPz(momV0[0],momV0[1],momV0[2]);
3417 }
3418 if(event->IsA()==AliAODEvent::Class()){
3419 momV0[0] = photon->GetPx();
3420 momV0[1] = photon->GetPy();
3421 momV0[2] = photon->GetPz();
3422 }
e5b6e8a6 3423
92efd725 3424 //Double_t momV0[3] = { photon->GetPx(), photon->GetPy(), photon->GetPz() }; //momentum of the V0
e5b6e8a6 3425 Double_t PosV0[3] = { photon->GetConversionX() - event->GetPrimaryVertex()->GetX(),
3426 photon->GetConversionY() - event->GetPrimaryVertex()->GetY(),
92efd725 3427 photon->GetConversionZ() - event->GetPrimaryVertex()->GetZ() }; //Recalculated V0 Position vector
e5b6e8a6 3428
3b77b2d1 3429 Double_t momV02 = momV0[0]*momV0[0] + momV0[1]*momV0[1] + momV0[2]*momV0[2];
3430 Double_t PosV02 = PosV0[0]*PosV0[0] + PosV0[1]*PosV0[1] + PosV0[2]*PosV0[2];
3431
e5b6e8a6 3432
3433 Double_t cosinePointingAngle = -999;
3434 if(momV02*PosV02 > 0.0)
3435 cosinePointingAngle = (PosV0[0]*momV0[0] + PosV0[1]*momV0[1] + PosV0[2]*momV0[2] ) / TMath::Sqrt(momV02 * PosV02);
3436
3b77b2d1 3437 return cosinePointingAngle;
3438}
3439
e5b6e8a6 3440///________________________________________________________________________
92efd725 3441Bool_t AliConversionCuts::PsiPairCut(const AliConversionPhotonBase * photon) const {
3b77b2d1 3442
4a0aab28 3443 if(photon->GetPsiPair() > fPsiPairCut){
3444 return kFALSE;}
3445 else{return kTRUE;}
3b77b2d1 3446
3b77b2d1 3447}
3448
3449///________________________________________________________________________
3450TString AliConversionCuts::GetCutNumber(){
4a0aab28 3451 // returns TString with current cut number
3452 TString a(kNCuts);
3453 for(Int_t ii=0;ii<kNCuts;ii++){
92efd725 3454 a.Append(Form("%d",fCuts[ii]));
4a0aab28 3455 }
3456 return a;
3b77b2d1 3457}
3458
92efd725 3459///________________________________________________________________________
3460void AliConversionCuts::FillElectonLabelArray(AliAODConversionPhoton* photon, Int_t nV0){
e5b6e8a6 3461
92efd725 3462 Int_t posLabel = photon->GetTrackLabelPositive();
3463 Int_t negLabel = photon->GetTrackLabelNegative();
e5b6e8a6 3464
92efd725 3465 fElectronLabelArray[nV0*2] = posLabel;
3466 fElectronLabelArray[(nV0*2)+1] = negLabel;
3467}
3468///________________________________________________________________________
3469Bool_t AliConversionCuts::RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s){
3b77b2d1 3470
92efd725 3471 Int_t posLabel = photon->GetTrackLabelPositive();
3472 Int_t negLabel = photon->GetTrackLabelNegative();
e5b6e8a6 3473
92efd725 3474 for(Int_t i = 0; i<nV0s*2;i++){
3475 if(i==nV0*2) continue;
3476 if(i==(nV0*2)+1) continue;
3477 if(fElectronLabelArray[i] == posLabel){
3478 return kFALSE;}
3479 if(fElectronLabelArray[i] == negLabel){
3480 return kFALSE;}
3481 }
3b77b2d1 3482
92efd725 3483 return kTRUE;
3484}
3b77b2d1 3485///________________________________________________________________________
92efd725 3486Bool_t AliConversionCuts::RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0){
3487
3488
3489 Double_t posX = photon->GetConversionX();
3490 Double_t posY = photon->GetConversionY();
3491 Double_t posZ = photon->GetConversionZ();
3492
3493 for(Int_t i = 0;i<photons->GetEntries();i++){
3494 if(nV0 == i) continue;
3495 AliAODConversionPhoton *photonComp = (AliAODConversionPhoton*) photons->At(i);
3496 Double_t posCompX = photonComp->GetConversionX();
3497 Double_t posCompY = photonComp->GetConversionY();
3498 Double_t posCompZ = photonComp->GetConversionZ();
e5b6e8a6 3499
92efd725 3500 Double_t dist = pow((posX - posCompX),2)+pow((posY - posCompY),2)+pow((posZ - posCompZ),2);
3501
3502 if(dist < fminV0Dist*fminV0Dist){
3503 if(photon->GetChi2perNDF() < photonComp->GetChi2perNDF()) return kTRUE;
3504 else {
3505 return kFALSE;}
3506 }
e5b6e8a6 3507
92efd725 3508 }
3509 return kTRUE;
3b77b2d1 3510}
ca91a3e1 3511///________________________________________________________________________
ae947965 3512void AliConversionCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent){
e5b6e8a6 3513
4803eb1f 3514
3515
ca91a3e1 3516 if(fNotRejectedStart){
3517 delete[] fNotRejectedStart;
3518 fNotRejectedStart = NULL;
3519 }
3520 if(fNotRejectedEnd){
3521 delete[] fNotRejectedEnd;
3522 fNotRejectedEnd = NULL;
3523 }
3524 if(fGeneratorNames){
3525 delete[] fGeneratorNames;
3526 fGeneratorNames = NULL;
3527 }
e5b6e8a6 3528
ca91a3e1 3529 if(rejection == 0) return; // No Rejection
ae947965 3530
3531 AliGenCocktailEventHeader *cHeader = 0x0;
3532 AliAODMCHeader *cHeaderAOD = 0x0;
3533 Bool_t headerFound = kFALSE;
3534
3535 if(MCEvent->IsA()==AliMCEvent::Class()){
3536 cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
3537 if(cHeader) headerFound = kTRUE;
3538 }
4803eb1f 3539 if(MCEvent->IsA()==AliAODEvent::Class()){ // MCEvent is a AODEvent in case of AOD
ae947965 3540 cHeaderAOD = dynamic_cast<AliAODMCHeader*>(MCEvent->FindListObject(AliAODMCHeader::StdBranchName()));
3541 if(cHeaderAOD) headerFound = kTRUE;
3542 }
aff90284 3543
ae947965 3544 if(headerFound){
3545 TList *genHeaders = 0x0;
3546 if(cHeader) genHeaders = cHeader->GetHeaders();
3547 if(cHeaderAOD){
3548 genHeaders = cHeaderAOD->GetCocktailHeaders();
3549 if(genHeaders->GetEntries()==1){
3550 SetRejectExtraSignalsCut(0);
3551 return;
3552 }
3553 }
ca91a3e1 3554 AliGenEventHeader* gh = 0;
3555 fnHeaders = 0;
e5b6e8a6 3556 if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
ca91a3e1 3557 if(rejection == 2){ // TList of Headers Names
3558 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
3559 gh = (AliGenEventHeader*)genHeaders->At(i);
3560 TString GeneratorName = gh->GetName();
3561 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
3562 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
3563 if(GeneratorName.CompareTo(GeneratorInList) == 0){
3564 fnHeaders++;
3565 continue;
3566 }
3567 }
3568 }
3569 }
3570
3571 fNotRejectedStart = new Int_t[fnHeaders];
3572 fNotRejectedEnd = new Int_t[fnHeaders];
3573 fGeneratorNames = new TString[fnHeaders];
3574
e5b6e8a6 3575 if(rejection == 1 || rejection == 3){
ca91a3e1 3576 fNotRejectedStart[0] = 0;
e5b6e8a6 3577 fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
ca91a3e1 3578 fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
ca91a3e1 3579 return;
3580 }
e5b6e8a6 3581
ca91a3e1 3582 Int_t firstindex = 0;
e5b6e8a6 3583 Int_t lastindex = -1;
ca91a3e1 3584 Int_t nummer = 0;
3585 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
3586 gh = (AliGenEventHeader*)genHeaders->At(i);
3587 TString GeneratorName = gh->GetName();
3588 lastindex = lastindex + gh->NProduced();
3589 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
3590 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
3591 if(GeneratorName.CompareTo(GeneratorInList) == 0){
3592 fNotRejectedStart[nummer] = firstindex;
3593 fNotRejectedEnd[nummer] = lastindex;
3594 fGeneratorNames[nummer] = GeneratorName;
4803eb1f 3595 //cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
ca91a3e1 3596 nummer++;
3597 continue;
3598 }
3599 }
3600 firstindex = firstindex + gh->NProduced();
3601 }
a280ac15 3602 } else { // No Cocktail Header Found
ca91a3e1 3603 fNotRejectedStart = new Int_t[1];
3604 fNotRejectedEnd = new Int_t[1];
e5b6e8a6 3605
3606 fnHeaders = 1;
ca91a3e1 3607 fNotRejectedStart[0] = 0;
ae947965 3608 fNotRejectedEnd[0] = static_cast<AliMCEvent*>(MCEvent)->Stack()->GetNprimary()-1;
a280ac15 3609 fGeneratorNames = new TString[1];
3610 fGeneratorNames[0] = "NoCocktailGeneratorFound";
11c1e680 3611
ae947965 3612 AliGenPythiaEventHeader *mcHeaderPythia = dynamic_cast<AliGenPythiaEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
a280ac15 3613 if (mcHeaderPythia) fGeneratorNames[0] = "NoCocktailGeneratorFound_Pythia";
ae947965 3614 AliGenDPMjetEventHeader *mcHeaderPhojet = dynamic_cast<AliGenDPMjetEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
a280ac15 3615 if (mcHeaderPhojet) fGeneratorNames[0] = "NoCocktailGeneratorFound_Phojet";
ae947965 3616 AliGenHijingEventHeader *mcHeaderHijing = dynamic_cast<AliGenHijingEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
a280ac15 3617 if (mcHeaderHijing) fGeneratorNames[0] = "NoCocktailGeneratorFound_Hijing";
3618
e5b6e8a6 3619 SetRejectExtraSignalsCut(0);
ca91a3e1 3620 }
e5b6e8a6 3621
ca91a3e1 3622}
3623//_________________________________________________________________________
ae947965 3624Int_t AliConversionCuts::IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
a280ac15 3625
3626 // Not Accepted == kFALSE == 0
3627 // Accepted == kTRUE == 1
3628 // FirstHeader == kTRUE == 3
a280ac15 3629 if(index < 0) return 0; // No Particle
e5b6e8a6 3630
a280ac15 3631 Int_t accepted = 0;
ae947965 3632 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
3633 if( index >= MCStack->GetNprimary()){ // Secondary Particle
3634 if( ((TParticle*)MCStack->Particle(index))->GetMother(0) < 0) return 1; // Secondary Particle without Mother??
3635 return IsParticleFromBGEvent(((TParticle*)MCStack->Particle(index))->GetMother(0),MCStack,InputEvent);
3636 }
3637 for(Int_t i = 0;i<fnHeaders;i++){
3638 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
3639 accepted = 1;
3640 if(i == 0) accepted = 2; // MB Header
3641 }
3642 }
ca91a3e1 3643 }
ae947965 3644 else if(InputEvent->IsA()==AliAODEvent::Class()){
3645 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
3646 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
4803eb1f 3647 if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
ae947965 3648 if(!aodMCParticle->IsPrimary()){
3649 if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
3650 return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
3651 }
3652 index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
3653 for(Int_t i = 0;i<fnHeaders;i++){
3654 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
3655 accepted = 1;
3656 if(i == 0) accepted = 2; // MB Header
3657 }
e5b6e8a6 3658 }
ca91a3e1 3659 }
e5b6e8a6 3660
ca91a3e1 3661 return accepted;
3662}
e5b6e8a6 3663//_________________________________________________________________________
3664Int_t AliConversionCuts::IsEventAcceptedByConversionCut(AliConversionCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Bool_t isHeavyIon){
3665
1186afd2 3666 if ( !IsTriggerSelected(InputEvent) )
ae947965 3667 return 3;
aff90284 3668
e5b6e8a6 3669 if(isHeavyIon && !(IsCentralitySelected(InputEvent,MCEvent)))
3670 return 1; // Check Centrality --> Not Accepted => eventQuality = 1
a280ac15 3671
e5b6e8a6 3672 if(!isHeavyIon && GetIsFromPileup()){
3673 if(InputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
ccfa8c0d 3674
e5b6e8a6 3675 return 6; // Check Pileup --> Not Accepted => eventQuality = 6
3676 }
3677 }
aff90284 3678
e5b6e8a6 3679 Bool_t hasV0And = ReaderCuts->HasV0AND();
3680 Bool_t isSDDFired = ReaderCuts->IsSDDFired();
3681 if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !MCEvent)
3682 return 7; // With SDD requested but no fired
a280ac15 3683
e5b6e8a6 3684 if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
3685 return 8; // V0AND requested but no fired
aff90284 3686
e5b6e8a6 3687
3688 return 0;
3689}
ccfa8c0d 3690//_________________________________________________________________________
ae947965 3691Float_t AliConversionCuts::GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
34a75862 3692 if (!(period.CompareTo("LHC12f1a") == 0 || period.CompareTo("LHC12f1b") == 0 || period.CompareTo("LHC12i3") == 0 || period.CompareTo("LHC11a10a") == 0 || period.CompareTo("LHC11a10b") == 0 || period.CompareTo("LHC11a10b_bis") == 0 || period.CompareTo("LHC11a10a_bis") == 0 || period.CompareTo("LHC11a10b_plus") == 0 || period.Contains("LHC13d2"))) return 1.;
aff90284 3693
a280ac15 3694 Int_t kCaseGen = 0;
3695 for (Int_t i = 0; i < fnHeaders; i++){
3696 if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
a280ac15 3697 if (fGeneratorNames[i].CompareTo("Pythia") == 0){
3698 kCaseGen = 1;
3699 } else if (fGeneratorNames[i].CompareTo("DPMJET") == 0){
3700 kCaseGen = 2;
aff90284 3701 } else if (fGeneratorNames[i].CompareTo("HIJING") == 0 ||
3702 fGeneratorNames[i].CompareTo("Hijing") == 0 ||
ae947965 3703 fGeneratorNames[i].Contains("hijing")){
a280ac15 3704 kCaseGen = 3;
3705 } else if (fGeneratorNames[i].CompareTo("BOX") == 0){
fcc79cf5 3706 kCaseGen = 4;
a280ac15 3707 } else if (fGeneratorNames[i].CompareTo("PARAM") == 0){
3708 kCaseGen = 5;
3709 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound") == 0){
3710 kCaseGen = 6;
3711 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Pythia") == 0){
3712 kCaseGen = 1;
3713 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Phojet") == 0){
3714 kCaseGen = 2;
3715 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Hijing") == 0){
3716 kCaseGen = 3;
11c1e680 3717 }
34a75862 3718 if (period.Contains("LHC13d2")){
aff90284 3719 kCaseGen = 3;
fcc79cf5 3720 }
a280ac15 3721 }
3722 }
ae947965 3723 if (kCaseGen == 0) return 1;
aff90284 3724
11c1e680 3725
ae947965 3726 Double_t mesonPt = 0;
3727 Double_t mesonMass = 0;
3728 Int_t PDGCode = 0;
3729 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
3730 mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
3731 mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
3732 PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
3733 }
3734 else if(InputEvent->IsA()==AliAODEvent::Class()){
3735 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
3736 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
3737 mesonPt = aodMCParticle->Pt();
3738 mesonMass = aodMCParticle->GetCalcMass();
3739 PDGCode = aodMCParticle->GetPdgCode();
aff90284 3740 }
ae947965 3741
3742 Float_t functionResultMC = 1.;
3743 if (kCaseGen == 1){ // Pythia 6
a280ac15 3744 Float_t dNdyMC = 2.1462;
3745 Float_t nMC = 7.06055;
3746 Float_t tMC = 0.12533;
ae947965 3747 if ( PDGCode == 111){
a280ac15 3748 dNdyMC = 2.1462;
3749 nMC = 7.06055;
3750 tMC = 0.12533;
ae947965 3751 } else if ( PDGCode == 221){
a280ac15 3752 dNdyMC = 0.2357;
3753 nMC = 5.9105;
3754 tMC = 0.1525;
3755 }
ae947965 3756 functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
3757 } else if (kCaseGen == 2){ // Phojet
a280ac15 3758 Float_t dNdyMC = 2.35978;
3759 Float_t nMC = 6.81795;
3760 Float_t tMC = 0.11492;
ae947965 3761 if ( PDGCode == 111){
a280ac15 3762 dNdyMC = 2.35978;
3763 nMC = 6.81795;
3764 tMC = 0.11492;
ae947965 3765 } else if ( PDGCode == 221){
a280ac15 3766 dNdyMC = 0.3690;
3767 nMC = 5.55809;
3768 tMC = 0.13387;
3769 }
ae947965 3770 functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
3771 } else if (kCaseGen == 4){ // BOX generators pp
3772// functionResultMC = 1./sqrt(1.-mesonMass*mesonMass/((mesonMass*mesonMass+mesonPt*mesonPt)*cosh(mesonY)*cosh(mesonY)));
a280ac15 3773 Float_t a = 0.23437;
3774 Float_t b = 5.6661;
3775 Float_t c = -1430.5863;
3776 Float_t d = -0.6966624;
3777 Float_t e = 252.3742;
ae947965 3778 if ( PDGCode == 111){
a280ac15 3779 a = 0.23437;
3780 b = 5.6661;
3781 c = -1430.5863;
3782 d = -0.6966624;
3783 e = 252.3742;
ae947965 3784 } else if ( PDGCode == 221){
a280ac15 3785 a = 0.10399;
3786 b = 4.35311;
3787 c = -12.17723;
3788 d = -0.01172;
3789 e =1.85140;
3790 }
ae947965 3791 functionResultMC = a*TMath::Power(mesonPt,-1.*(b+c/(TMath::Power(mesonPt,d)+e)))*1./mesonPt *1./1.6 *1./(2.* TMath::Pi());
4803eb1f 3792// cout << functionResultMC << endl;
ae947965 3793 } else if (kCaseGen == 3 ){ // HIJING
3794 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
3795 functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
fcc79cf5 3796 }
3797 if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
3798 functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
3799 }
ae947965 3800 if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
3801 functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
3802 }
a280ac15 3803 }
11c1e680 3804
ae947965 3805 Float_t functionResultData = 1;
3806 if (kCaseGen == 1 || kCaseGen == 2 || kCaseGen == 4 ){
3807 Float_t dNdyData = 2.2328;
3808 Float_t nData = 7.1473;
3809 Float_t tData = 0.1346;
3810 if ( PDGCode == 111){
a280ac15 3811 dNdyData = 2.2328;
3812 nData = 7.1473;
3813 tData = 0.1346;
ae947965 3814 } else if ( PDGCode == 221){
a280ac15 3815 dNdyData = 0.38992; //be careful this fit is not optimal, eta in data still has problems
3816 nData = 5.72778;
3817 tData = 0.13835;
3818 }
ae947965 3819 functionResultData = dNdyData / ( 2 * TMath::Pi())*(nData-1.)*(nData-2.) / (nData*tData*(nData*tData+mesonMass*(nData-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nData*tData), -nData);
4803eb1f 3820// cout << functionResultData << endl;
ae947965 3821 } else {
fcc79cf5 3822 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
3823 functionResultData = fFitDataPi0->Eval(mesonPt);
3824 }
3825 if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
3826 functionResultData = fFitDataEta->Eval(mesonPt);
3827 }
3828 if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
3829 functionResultData = fFitDataK0s->Eval(mesonPt);
3830 }
aff90284 3831
fcc79cf5 3832// Float_t a = 0.;
3833// Float_t b = 0.;
3834// Float_t c = 0.;
3835// Float_t d = 0.;
3836// Float_t e = 0.;
3837// if ( PDGCode == 111 ){
3838// if (fModCentralityClass == 1 && fCentralityMin == 0 && fCentralityMax == 1 ){ // 0-5 % PbPb
3839// a = 25.8747458223;
3840// b = 5.8761820045;
3841// c = -33.9928191673;
3842// d = 3.0731850142;
3843// e = 13.2500447620;
3844// } else if (fModCentralityClass == 1 && fCentralityMin == 1 && fCentralityMax == 2){ // 5-10% PbPb
3845// a = 21.7518148922;
3846// b = 5.8441200081;
3847// c = -17.1497051691;
3848// d = 2.3799090842;
3849// e = 5.4346404718;
3850// } else if (fModCentralityClass == 0 && fCentralityMin == 0 && fCentralityMax == 1){ // 0-10% PbPb
3851// a = 22.9852133622;
3852// b = 5.8602063916;
3853// c = -17.0992478654;
3854// d = 2.4426218039;
3855// e = 5.1194526345;
3856// } else if (fModCentralityClass == 0 && fCentralityMin == 1 && fCentralityMax == 2){ // 10-20% PbPb
3857// a = 19.3237333776;
3858// b = 5.8145906958;
3859// c = -13.8316665424;
3860// d = 2.3737630637;
3861// e = 4.7690300693;
3862// } else if (fModCentralityClass == 0 && fCentralityMin == 2 && fCentralityMax == 4){ // 20-40% PbPb
3863// a = 11.2656032751;
3864// b = 5.8003194354;
3865// c = -13.3936105929;
3866// d = 2.3371452334;
3867// e = 4.4726244958;
aff90284 3868// } else if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6){ // 40-60% PbPb
fcc79cf5 3869// a = 4.1578154081;
3870// b = 5.6450005163;
3871// c = -8.4309375240;
3872// d = 1.8918308704;
3873// e = 2.9429194709;
aff90284 3874// } else if (fModCentralityClass == 0 && fCentralityMin == 6 && fCentralityMax == 8){ // 60-80% PbPb
fcc79cf5 3875// a = 1.0635443810;
3876// b = 5.1337469970;
3877// c = -8.5906997238;
3878// d = 2.9794995997;
3879// e = 3.9294980048;
aff90284 3880// } else if (fModCentralityClass == 0 && fCentralityMin == 0 && fCentralityMax == 2){ // 0-20% PbPb
fcc79cf5 3881// a = 21.7018745556;
3882// b = 5.9019352094;
3883// c = -14.2295510326;
3884// d = 2.2104490688;
3885// e = 4.2969671500;
aff90284 3886// } else if (fModCentralityClass == 0 && fCentralityMin == 0 && fCentralityMax == 4){ // 0-40% PbPb
fcc79cf5 3887// a = 16.8227412106;
3888// b = 5.8660502207;
3889// c = -12.0978551215;
3890// d = 2.1695068981;
3891// e = 3.5349621182;
aff90284 3892// } else if (fModCentralityClass == 0 && fCentralityMin == 0 && fCentralityMax == 8){ // 0-80% PbPb
fcc79cf5 3893// a = 9.4675681080;
3894// b = 5.8114944205;
3895// c = -10.4901523616;
3896// d = 2.0607982712;
3897// e = 2.9262259130;
aff90284 3898// } else if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 8){ // 60-80% PbPb
fcc79cf5 3899// a = 2.5985551785;
3900// b = 5.4118895738;
3901// c = -8.2510958428;
3902// d = 2.2551249190;
3903// e = 3.0700919491;
3904// }
aff90284 3905//
fcc79cf5 3906// functionResultData = a*TMath::Power(mesonPt,-1*(b+c/(TMath::Power(mesonPt,d)+e)));
aff90284 3907// }
3908
ae947965 3909 }
aff90284 3910
ae947965 3911 Double_t weight = 1;
3912 if (PDGCode == 111 || PDGCode == 221){
3913 if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
3914 weight = functionResultData/functionResultMC;
4803eb1f 3915 if ( kCaseGen == 3){
3916 if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
aff90284 3917 weight = 1.;
4803eb1f 3918 }
ae947965 3919 }
aff90284 3920 if (!isfinite(functionResultData)) weight = 1.;
3921 if (!isfinite(weight)) weight = 1.;
ae947965 3922 }
3923 } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
3924 weight = functionResultMC;
3925 }
aff90284 3926
ae947965 3927// if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6 && PDGCode == 111){
4803eb1f 3928// cout << period.Data() << "\t" << kCaseGen << "\t" <<fModCentralityClass<< "\t" <<fCentralityMin<< "\t" <<fCentralityMax << "\t" << mesonPt << "\t" <<mesonMass<< "\t"<<functionResultData << "\t"<< functionResultMC << "\t" << weight <<endl;
ae947965 3929// }
3930 return weight;
a280ac15 3931}
a280ac15 3932///________________________________________________________________________
3933AliConversionCuts* AliConversionCuts::GetStandardCuts2010PbPb(){
3934 //Create and return standard 2010 PbPb cuts
3935 AliConversionCuts *cuts=new AliConversionCuts("StandardCuts2010PbPb","StandardCuts2010PbPb");
430b9c94 3936 if(!cuts->InitializeCutsFromCutString("100000204209297002322000000")){
fcc79cf5 3937 cout<<"Warning: Initialization of Standardcuts2010PbPb failed"<<endl;}
a280ac15 3938 return cuts;
3939}
3940
3941///________________________________________________________________________
3942AliConversionCuts* AliConversionCuts::GetStandardCuts2010pp(){
3943 //Create and return standard 2010 PbPb cuts
3944 AliConversionCuts *cuts=new AliConversionCuts("StandardCuts2010pp","StandardCuts2010pp");
430b9c94 3945 if(!cuts->InitializeCutsFromCutString("000001100209366300380000000")){
fcc79cf5 3946 cout<<"Warning: Initialization of Standardcuts2010pp failed"<<endl;}
a280ac15 3947 return cuts;
3948}
ccfa8c0d 3949///________________________________________________________________________
3950void AliConversionCuts::GetCorrectEtaShiftFromPeriod(TString periodName){
3951
3952 if(periodName.CompareTo("LHC12g") == 0 || //pilot run 2012
3953 periodName.CompareTo("LHC13b") == 0 || //mainly minimum bias
3954 periodName.CompareTo("LHC13c") == 0 || //mainly minimum bias
3955 periodName.CompareTo("LHC13d") == 0 || //mainly triggered
3956 periodName.CompareTo("LHC13e") == 0 || //mainly triggered
3957 periodName.CompareTo("LHC13c3") == 0 || //MC Starlight, anchor LHC13d+e
3958 periodName.CompareTo("LHC13c2") == 0 || //MC Starlight, coherent J/Psi, UPC muon anchor LHC13d+e
3959 periodName.CompareTo("LHC13b4") == 0 || //MC Pythia 6 (Jet-Jet), anchor LHC13b
3960 periodName.CompareTo("LHC13b2_fix_1") == 0 || //MC DPMJET, anchr LHC13b+c
3961 periodName.CompareTo("LHC13b3") == 0 || //MC HIJING, weighted to number of events per run, anchor LHC13b
3962 periodName.CompareTo("LHC13b2") == 0 || // MC DPMJET, wrong energy, anchor LHC13b
3963 periodName.CompareTo("LHC13b2_plus") == 0 || // MC DPMJET, weighted to number event per run, anchor LHC13b
3964 periodName.CompareTo("LHC13c1_bis") == 0 || // MC AMPT fast generation, pT hardbin, anchor ?
3965 periodName.CompareTo("LHC13c1") == 0 || // MC AMPT fast generation, anchor ?
3966 periodName.CompareTo("LHC13b1") == 0 || // MC DPMJET, fragments, with fixed label 0, anchor LHC12g
3967 periodName.CompareTo("LHC12g4b_fix") == 0 || // MC DPMJET, with fixed label 0, anchor LHC12g
3968 periodName.CompareTo("LHC12g1_fix") == 0 || // MC ?, with fixed label 0, anchor LHC12g
3969 periodName.CompareTo("LHC12g4c") == 0 || // MC DPMJET, shifted vertex runs, anchor LHC12g
3970 periodName.CompareTo("LHC12h6") == 0 || // MC muon cocktail, anchor LHC12g
3971 periodName.CompareTo("LHC12g4b") == 0 || // MC DPMJET 3rd iteration, anchor LHC12g
3972 periodName.CompareTo("LHC12g4a") == 0 || // MC DPMJET improved, anchor LHC12g
3973 periodName.CompareTo("LHC12g4") == 0 || // MC DPMJET, anchor LHC12g
3974 periodName.CompareTo("LHC12g5") == 0 || // MC PHOJET, anchor LHC12g
3975 periodName.CompareTo("LHC12g2") == 0 || // MC Starlight background, anchor LHC12g
3976 periodName.CompareTo("LHC12g1") == 0 ) // MC ?, anchor LHC12g
3977 {
3978 printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
3979 SetEtaShift(-0.465);
3980 }
3981 else if(periodName.CompareTo("LHC13f") == 0 ||
3982 periodName.CompareTo("LHC13c6b") == 0 ||// MC Jpsi -> mumu, anchor LHC13f
3983 periodName.CompareTo("LHC13c5") == 0 || //MC Starlight, gamma gamma UPC muon, anchor LHC13f
3984 periodName.CompareTo("LHC13c4") == 0 )//MC Starlight, coherent JPsi, UPC muon, anchor LHC13f
3985 {
3986 printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
3987 SetEtaShift(+0.465);
3988 }
3989 else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
3990}