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