1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Authors: Svein Lindal, Daniel Lohner *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ////////////////////////////////////////////////
17 //---------------------------------------------
18 // Class handling all kinds of selection cuts for
19 // Gamma Conversion analysis
20 //---------------------------------------------
21 ////////////////////////////////////////////////
23 #include "AliConversionCuts.h"
25 #include "AliKFVertex.h"
26 #include "AliAODTrack.h"
27 #include "AliESDtrack.h"
28 #include "AliAnalysisManager.h"
29 #include "AliInputEventHandler.h"
30 #include "AliMCEventHandler.h"
31 #include "AliAODHandler.h"
32 #include "AliPIDResponse.h"
37 #include "AliAODConversionMother.h"
38 #include "TObjString.h"
39 #include "AliAODEvent.h"
40 #include "AliESDEvent.h"
41 #include "AliCentrality.h"
45 #include "AliGenCocktailEventHeader.h"
46 #include "AliGenDPMjetEventHeader.h"
47 #include "AliGenPythiaEventHeader.h"
48 #include "AliGenHijingEventHeader.h"
49 #include "AliTriggerAnalysis.h"
50 #include "AliV0ReaderV1.h"
51 #include "AliAODMCParticle.h"
52 #include "AliAODMCHeader.h"
53 #include "AliTRDTriggerAnalysis.h"
59 ClassImp(AliConversionCuts)
62 const char* AliConversionCuts::fgkCutNames[AliConversionCuts::kNCuts] = {
66 "SelectSpecialTrigger",//3
67 "SelectSpecialSubTriggerClass",//4
69 "RejectExtraSignals",//6
77 "piMomdedxSigmaCut",//14
78 "piMaxMomdedxSigmaCut",//15
79 "LowPRejectionSigmaCut",//16
84 "DoPhotonAsymmetryCut",//21
85 "CosinePointingAngle", //22
86 "SharedElectronCuts", //23
87 "RejectToCloseV0s", //24
94 //________________________________________________________________________
95 AliConversionCuts::AliConversionCuts(const char *name,const char *title) :
96 AliAnalysisCuts(name,title),
112 fLineCutZRSlopeMin(0.),
113 fLineCutZValueMin(0),
114 fChi2CutConversion(1000),
115 fPIDProbabilityCutNegativeParticle(0),
116 fPIDProbabilityCutPositiveParticle(0),
117 fDodEdxSigmaCut(kTRUE),
118 fDoTOFsigmaCut(kFALSE),
119 fPIDTRDEfficiency(1),
121 fPIDnSigmaAboveElectronLine(100),
122 fPIDnSigmaBelowElectronLine(-100),
123 fTofPIDnSigmaAboveElectronLine(100),
124 fTofPIDnSigmaBelowElectronLine(-100),
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),
135 fPIDMinPKaonRejectionLowP(1.5),
136 fPIDMinPProtonRejectionLowP(2),
137 fPIDMinPPionRejectionLowP(0),
138 fDoQtGammaSelection(kTRUE),
145 fUseEtaMinCut(kFALSE),
146 fUseOnFlyV0Finder(kTRUE),
147 fDoPhotonAsymmetryCut(kTRUE),
148 fMinPPhotonAsymmetryCut(100.),
149 fMinPhotonAsymmetry(0.),
151 fDetectorCentrality(0),
152 fModCentralityClass(0),
156 fUseCorrectedTPCClsInfo(kFALSE),
158 fMultiplicityMethod(0),
160 fSpecialSubTrigger(0),
161 fRemovePileUp(kFALSE),
162 fOpeningAngle(0.005),
164 fDo2DPsiPairChi2(kFALSE),
165 fCosPAngleCut(10000),
166 fDoToCloseV0sCut(kFALSE),
167 fRejectExtraSignals(0),
169 fDoSharedElecCut(kFALSE),
170 fDoPhotonQualitySelectionCut(kFALSE),
171 fPhotonQualityCut(0),
172 fOfflineTriggerMask(0),
176 fElectronArraySize(500),
177 fElectronLabelArray(NULL),
178 fDCAZPrimVtxCut(1000),
179 fDCARPrimVtxCut(1000),
180 fInPlaneOutOfPlane(0),
181 fConversionPointXArray(0.0),
182 fConversionPointYArray(0.0),
183 fConversionPointZArray(0.0),
185 fNotRejectedStart(NULL),
186 fNotRejectedEnd(NULL),
187 fGeneratorNames(NULL),
192 fDoReweightHistoMCPi0(kFALSE),
193 fDoReweightHistoMCEta(kFALSE),
194 fDoReweightHistoMCK0s(kFALSE),
195 fPathTrFReweighting(""),
196 fNameHistoReweightingPi0(""),
197 fNameHistoReweightingEta(""),
198 fNameHistoReweightingK0s(""),
203 hEtaDistV0sAfterdEdxCuts(NULL),
205 hTPCdEdxbefore(NULL),
207 hTPCdEdxSigbefore(NULL),
208 hTPCdEdxSigafter(NULL),
212 hPsiPairDeltaPhiafter(NULL),
215 hInvMassbefore(NULL),
216 hArmenterosbefore(NULL),
218 hArmenterosafter(NULL),
219 hAcceptanceCuts(NULL),
223 hCentralityVsNumberOfPrimaryTracks(NULL),
225 hEventPlanePhi(NULL),
227 hTriggerClassSelected(NULL),
228 hReweightMCHistPi0(NULL),
229 hReweightMCHistEta(NULL),
230 hReweightMCHistK0s(NULL),
234 fAddedSignalPDGCode(0),
236 fTriggerSelectedManually(kFALSE),
237 fSpecialTriggerName(""),
238 fSpecialSubTriggerName(""),
239 fNSpecialSubTriggerOptions(0)
243 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
244 fCutString=new TObjString((GetCutNumber()).Data());
246 fElectronLabelArray = new Int_t[fElectronArraySize];
247 fUtils = new AliAnalysisUtils();
248 //if you do not want to apply the cut on the distance between the SPD and TRK vertex:
249 //fUtils->SetCutOnZVertexSPD(kFALSE);
254 //________________________________________________________________________
255 AliConversionCuts::AliConversionCuts(const AliConversionCuts &ref) :
256 AliAnalysisCuts(ref),
258 fHeaderList(ref.fHeaderList),
260 fEventQuality(ref.fEventQuality),
263 fEtaCut(ref.fEtaCut),
264 fEtaCutMin(ref.fEtaCutMin),
266 fSinglePtCut(ref.fSinglePtCut),
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),
299 fDo2DQt(ref.fDo2DQt),
301 fXVertexCut(ref.fXVertexCut),
302 fYVertexCut(ref.fYVertexCut),
303 fZVertexCut(ref.fZVertexCut),
304 fNSigmaMass(ref.fNSigmaMass),
305 fUseEtaMinCut(ref.fUseEtaMinCut),
306 fUseOnFlyV0Finder(ref.fUseOnFlyV0Finder),
307 fDoPhotonAsymmetryCut(ref.fDoPhotonAsymmetryCut),
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),
320 fSpecialSubTrigger(ref.fSpecialSubTrigger),
321 fRemovePileUp(ref.fRemovePileUp),
322 fOpeningAngle(ref.fOpeningAngle),
323 fPsiPairCut(ref.fPsiPairCut),
324 fDo2DPsiPairChi2(ref.fDo2DPsiPairChi2),
325 fCosPAngleCut(ref.fCosPAngleCut),
326 fDoToCloseV0sCut(ref.fDoToCloseV0sCut),
327 fRejectExtraSignals(ref.fRejectExtraSignals),
328 fminV0Dist(ref.fminV0Dist),
329 fDoSharedElecCut(ref.fDoSharedElecCut),
330 fDoPhotonQualitySelectionCut(ref.fDoPhotonQualitySelectionCut),
331 fPhotonQualityCut(ref.fPhotonQualityCut),
332 fOfflineTriggerMask(ref.fOfflineTriggerMask),
333 fHasV0AND(ref.fHasV0AND),
334 fIsSDDFired(ref.fIsSDDFired),
335 fRandom(ref.fRandom),
336 fElectronArraySize(ref.fElectronArraySize),
337 fElectronLabelArray(NULL),
338 fDCAZPrimVtxCut(ref.fDCAZPrimVtxCut),
339 fDCARPrimVtxCut(ref.fDCAZPrimVtxCut),
340 fInPlaneOutOfPlane(ref.fInPlaneOutOfPlane),
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),
350 fEtaShift(ref.fEtaShift),
351 fDoEtaShift(ref.fDoEtaShift),
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),
359 fNameFitDataPi0(ref.fNameFitDataPi0),
360 fNameFitDataEta(ref.fNameFitDataEta),
361 fNameFitDataK0s(ref.fNameFitDataK0s),
363 hEtaDistV0sAfterdEdxCuts(NULL),
365 hTPCdEdxbefore(NULL),
367 hTPCdEdxSigbefore(NULL),
368 hTPCdEdxSigafter(NULL),
372 hPsiPairDeltaPhiafter(NULL),
375 hInvMassbefore(NULL),
376 hArmenterosbefore(NULL),
378 hArmenterosafter(NULL),
379 hAcceptanceCuts(NULL),
383 hCentralityVsNumberOfPrimaryTracks(NULL),
385 hEventPlanePhi(NULL),
387 hTriggerClassSelected(NULL),
388 hReweightMCHistPi0(ref.hReweightMCHistPi0),
389 hReweightMCHistEta(ref.hReweightMCHistEta),
390 hReweightMCHistK0s(ref.hReweightMCHistK0s),
391 fFitDataPi0(ref.fFitDataPi0),
392 fFitDataEta(ref.fFitDataEta),
393 fFitDataK0s(ref.fFitDataK0s),
394 fAddedSignalPDGCode(ref.fAddedSignalPDGCode),
395 fPreSelCut(ref.fPreSelCut),
396 fTriggerSelectedManually(ref.fTriggerSelectedManually),
397 fSpecialTriggerName(ref.fSpecialTriggerName),
398 fSpecialSubTriggerName(ref.fSpecialSubTriggerName),
399 fNSpecialSubTriggerOptions(ref.fNSpecialSubTriggerOptions)
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];
405 fUtils = new AliAnalysisUtils();
406 // dont copy histograms (if you like histograms, call InitCutHistograms())
411 //________________________________________________________________________
412 AliConversionCuts::~AliConversionCuts() {
414 //Deleting fHistograms leads to seg fault it it's added to output collection of a task
416 // delete fHistograms;
417 // fHistograms = NULL;
418 if(fCutString != NULL){
422 if(fElectronLabelArray){
423 delete fElectronLabelArray;
424 fElectronLabelArray = NULL;
426 if(fNotRejectedStart){
427 delete[] fNotRejectedStart;
428 fNotRejectedStart = NULL;
431 delete[] fNotRejectedEnd;
432 fNotRejectedEnd = NULL;
435 delete[] fGeneratorNames;
436 fGeneratorNames = NULL;
445 //________________________________________________________________________
446 void AliConversionCuts::InitCutHistograms(TString name, Bool_t preCut){
448 // Initialize Cut Histograms for QA (only initialized and filled if function is called)
449 TH1::AddDirectory(kFALSE);
451 if(fHistograms != NULL){
455 if(fHistograms==NULL){
456 fHistograms=new TList();
457 fHistograms->SetOwner(kTRUE);
458 if(name=="")fHistograms->SetName(Form("ConvCuts_%s",GetCutNumber().Data()));
459 else fHistograms->SetName(Form("%s_%s",name.Data(),GetCutNumber().Data()));
462 if (hReweightMCHistPi0){
463 hReweightMCHistPi0->SetName("MCInputForWeightingPi0");
464 fHistograms->Add(hReweightMCHistPi0);
466 if (hReweightMCHistEta){
467 hReweightMCHistEta->SetName("MCInputForWeightingEta");
468 fHistograms->Add(hReweightMCHistEta);
470 if (hReweightMCHistK0s){
471 hReweightMCHistK0s->SetName("MCInputForWeightingK0s");
472 fHistograms->Add(hReweightMCHistK0s);
475 // fFitDataPi0->SetName("DataFitForWeightingPi0");
476 // fHistograms->Add(fFitDataPi0);
479 // fFitDataEta->SetName("DataFitForWeightingEta");
480 // fHistograms->Add(fFitDataEta);
483 // fFitDataK0s->SetName("DataFitForWeightingK0s");
484 // fHistograms->Add(fFitDataK0s);
487 hCutIndex=new TH1F(Form("IsPhotonSelected %s",GetCutNumber().Data()),"IsPhotonSelected",11,-0.5,10.5);
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");
495 hCutIndex->GetXaxis()->SetBinLabel(kEventPlane+1,"EventPlane");
496 hCutIndex->GetXaxis()->SetBinLabel(kPhotonOut+1,"out");
497 fHistograms->Add(hCutIndex);
500 hTrackCuts=new TH1F(Form("TrackCuts %s",GetCutNumber().Data()),"TrackCuts",9,-0.5,8.5);
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);
512 hPhotonCuts=new TH1F(Form("PhotonCuts %s",GetCutNumber().Data()),"PhotonCuts",15,-0.5,14.5);
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");
522 hPhotonCuts->GetXaxis()->SetBinLabel(10,"DCA R");
523 hPhotonCuts->GetXaxis()->SetBinLabel(11,"DCA Z");
524 hPhotonCuts->GetXaxis()->SetBinLabel(12,"Photon Quality");
525 hPhotonCuts->GetXaxis()->SetBinLabel(13,"out");
526 fHistograms->Add(hPhotonCuts);
529 hInvMassbefore=new TH1F(Form("InvMass_before %s",GetCutNumber().Data()),"InvMass_before",1000,0,0.3);
530 fHistograms->Add(hInvMassbefore);
531 hArmenterosbefore=new TH2F(Form("Armenteros_before %s",GetCutNumber().Data()),"Armenteros_before",200,-1,1,1000,0,1.);
532 fHistograms->Add(hArmenterosbefore);
533 hEtaDistV0s = new TH1F(Form("Eta_before %s",GetCutNumber().Data()),"Eta_before",2000,-2,2);
534 fHistograms->Add(hEtaDistV0s);
537 hInvMassafter=new TH1F(Form("InvMass_after %s",GetCutNumber().Data()),"InvMass_after",1000,0,0.3);
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);
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);
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);
567 TAxis *AxisBeforedEdx = NULL;
568 TAxis *AxisBeforedEdxSig = NULL;
569 TAxis *AxisBeforeTOF = NULL;
570 TAxis *AxisBeforeTOFSig = NULL;
572 hTPCdEdxbefore=new TH2F(Form("Gamma_dEdx_before %s",GetCutNumber().Data()),"dEdx Gamma before" ,150,0.03,20,800,0,200);
573 fHistograms->Add(hTPCdEdxbefore);
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();
579 hTOFbefore=new TH2F(Form("Gamma_TOF_before %s",GetCutNumber().Data()),"TOF Gamma before" ,150,0.03,20,11000,-1000,10000);
580 fHistograms->Add(hTOFbefore);
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();
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);
590 hTPCdEdxafter=new TH2F(Form("Gamma_dEdx_after %s",GetCutNumber().Data()),"dEdx Gamma after" ,150,0.03,20,800,0,200);
591 fHistograms->Add(hTPCdEdxafter);
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);
596 hEtaDistV0sAfterdEdxCuts = new TH1F(Form("Eta_afterdEdx %s",GetCutNumber().Data()),"Eta_afterdEdx",2000,-2,2);
597 fHistograms->Add(hEtaDistV0sAfterdEdxCuts);
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);
602 TAxis *AxisAfter = hTPCdEdxSigafter->GetXaxis();
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];
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);
611 AxisAfter = hTOFSigafter->GetXaxis();
612 AxisAfter->Set(bins, newBins);
613 AxisAfter = hTPCdEdxafter->GetXaxis();
614 AxisAfter->Set(bins, newBins);
616 AxisBeforedEdx->Set(bins, newBins);
617 AxisBeforeTOF->Set(bins, newBins);
618 AxisBeforedEdxSig->Set(bins, newBins);
619 AxisBeforeTOFSig->Set(bins, newBins);
623 hCentrality=new TH1F(Form("Centrality %s",GetCutNumber().Data()),"Centrality",100,0,100);
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);
628 // Event Cuts and Info
630 hV0EventCuts=new TH1F(Form("ESD_EventCuts %s",GetCutNumber().Data()),"Event Cuts",7,-0.5,6.5);
631 hV0EventCuts->GetXaxis()->SetBinLabel(1,"in");
632 hV0EventCuts->GetXaxis()->SetBinLabel(2,"OfflineTrigger");
633 hV0EventCuts->GetXaxis()->SetBinLabel(3,"nvtxcontr");
634 hV0EventCuts->GetXaxis()->SetBinLabel(4,"VertexZ");
635 hV0EventCuts->GetXaxis()->SetBinLabel(5,"pileup");
636 hV0EventCuts->GetXaxis()->SetBinLabel(6,"centrsel");
637 hV0EventCuts->GetXaxis()->SetBinLabel(7,"out");
638 fHistograms->Add(hV0EventCuts);
640 hVertexZ=new TH1F(Form("VertexZ %s",GetCutNumber().Data()),"VertexZ",1000,-50,50);
641 fHistograms->Add(hVertexZ);
643 hTriggerClass= new TH1F(Form("OfflineTrigger %s",GetCutNumber().Data()),"OfflineTrigger",35,-0.5,34.5);
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");
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");
679 fHistograms->Add(hTriggerClass);
682 hTriggerClassSelected= new TH1F(Form("OfflineTriggerSelected %s",GetCutNumber().Data()),"OfflineTriggerSelected",34,-0.5,33.5);
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");
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");
717 fHistograms->Add(hTriggerClassSelected);
719 hEventPlanePhi=new TH1F(Form("EventPlaneMinusPhotonAngle %s",GetCutNumber().Data()),"EventPlaneMinusPhotonAngle",360,-TMath::Pi(),TMath::Pi());
720 fHistograms->Add(hEventPlanePhi);
724 TH1::AddDirectory(kTRUE);
727 //________________________________________________________________________
728 Bool_t AliConversionCuts::InitPIDResponse(){
729 // Set Pointer to AliPIDResponse
731 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
733 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
734 fPIDResponse = (AliPIDResponse*)inputHandler->GetPIDResponse();
735 if(fPIDResponse)return kTRUE;
742 ///________________________________________________________________________
743 Bool_t AliConversionCuts::EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent){
744 // Process Event Selection
747 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
750 // Check for MC event
751 if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
752 // Check if MC event is correctly loaded
753 AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
758 if (!mcHandler->InitOk() ){
762 if (!mcHandler->TreeK() ){
766 if (!mcHandler->TreeTR() ) {
773 // cout << "before event trigger" << endl;
774 if(!IsTriggerSelected(fInputEvent)){
775 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
781 if(fInputEvent->IsA()==AliESDEvent::Class()){
782 AliTriggerAnalysis fTriggerAnalysis;// = new AliTriggerAnalysis;
783 fHasV0AND = fTriggerAnalysis.IsOfflineTriggerFired((AliESDEvent*)fInputEvent, AliTriggerAnalysis::kV0AND);
784 if(fHasV0AND&&hTriggerClass)hTriggerClass->Fill(32);
786 // cout << "event number " << ((AliESDEvent*)fInputEvent)->GetEventNumberInFile() << " entered"<< endl;
789 // Number of Contributors Cut
790 if(GetNumberOfContributorsVtx(fInputEvent)<=0) {
791 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
797 // Z Vertex Position Cut
798 if(!VertexZCut(fInputEvent)){
799 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
808 if(fInputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
809 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
816 // Centrality Selection
817 if(!IsCentralitySelected(fInputEvent,fMCEvent)){
818 if(hV0EventCuts)hV0EventCuts->Fill(cutindex);
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));
828 if(hCentralityVsNumberOfPrimaryTracks)
829 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(fInputEvent),
830 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
831 ->GetTask("V0ReaderV1"))->GetNumberOfPrimaryTracks());
836 ///________________________________________________________________________
837 Bool_t AliConversionCuts::PhotonIsSelectedMC(TParticle *particle,AliStack *fMCStack,Bool_t checkForConvertedGamma){
838 // MonteCarlo Photon Selection
840 if(!fMCStack)return kFALSE;
842 if (particle->GetPdgCode() == 22){
845 if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
848 if( particle->Eta() < (fEtaCutMin + fEtaShift) && particle->Eta() > (-fEtaCutMin + fEtaShift) )
852 if(particle->GetMother(0) >-1 && fMCStack->Particle(particle->GetMother(0))->GetPdgCode() == 22){
853 return kFALSE; // no photon as mothers!
856 if(particle->GetMother(0) >= fMCStack->GetNprimary()){
857 return kFALSE; // the gamma has a mother, and it is not a primary particle
860 if(!checkForConvertedGamma) return kTRUE; // return in case of accepted gamma
862 // looking for conversion gammas (electron + positron from pairbuilding (= 5) )
863 TParticle* ePos = NULL;
864 TParticle* eNeg = NULL;
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){
872 } else if(tmpDaughter->GetPdgCode() == -11){
879 if(ePos == NULL || eNeg == NULL){ // means we do not have two daughters from pair production
883 if(ePos->Pt()<fSinglePtCut || eNeg->Pt()<fSinglePtCut){
884 return kFALSE; // no reconstruction below the Pt cut
887 if( ePos->Eta() > (fEtaCut + fEtaShift) || ePos->Eta() < (-fEtaCut + fEtaShift) ||
888 eNeg->Eta() > (fEtaCut + fEtaShift) || eNeg->Eta() < (-fEtaCut + fEtaShift) )
891 if(fEtaCutMin > -0.1){
892 if( (ePos->Eta() < (fEtaCutMin + fEtaShift) && ePos->Eta() > (-fEtaCutMin + fEtaShift)) ||
893 (eNeg->Eta() < (fEtaCutMin + fEtaShift) && eNeg->Eta() > (-fEtaCutMin + fEtaShift)) )
898 return kFALSE; // cuts on distance from collision point
901 if(abs(ePos->Vz()) > fMaxZ){
902 return kFALSE; // outside material
904 if(abs(eNeg->Vz()) > fMaxZ){
905 return kFALSE; // outside material
908 if( ePos->R() <= ((abs(ePos->Vz()) * fLineCutZRSlope) - fLineCutZValue)){
909 return kFALSE; // line cut to exclude regions where we do not reconstruct
910 } else if ( fEtaCutMin != -0.1 && ePos->R() >= ((abs(ePos->Vz()) * fLineCutZRSlopeMin) - fLineCutZValueMin)){
914 if( eNeg->R() <= ((abs(eNeg->Vz()) * fLineCutZRSlope) - fLineCutZValue)){
915 return kFALSE; // line cut to exclude regions where we do not reconstruct
916 } else if ( fEtaCutMin != -0.1 && eNeg->R() >= ((abs(eNeg->Vz()) * fLineCutZRSlopeMin) - fLineCutZValueMin)){
921 //if(AcceptanceCut(particle,ePos,eNeg))return kTRUE;
925 ///________________________________________________________________________
926 Bool_t AliConversionCuts::PhotonIsSelectedAODMC(AliAODMCParticle *particle,TClonesArray *aodmcArray,Bool_t checkForConvertedGamma){
927 // MonteCarlo Photon Selection
929 if(!aodmcArray)return kFALSE;
931 if (particle->GetPdgCode() == 22){
932 if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) )
935 if( particle->Eta() < (fEtaCutMin + fEtaShift) && particle->Eta() > (-fEtaCutMin + fEtaShift) )
939 if(particle->GetMother() > -1){
940 if((static_cast<AliAODMCParticle*>(aodmcArray->At(particle->GetMother())))->GetPdgCode() == 22){
941 return kFALSE; // no photon as mothers!
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
948 if(!checkForConvertedGamma) return kTRUE; // return in case of accepted gamma
950 // looking for conversion gammas (electron + positron from pairbuilding (= 5) )
951 AliAODMCParticle* ePos = NULL;
952 AliAODMCParticle* eNeg = NULL;
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){
961 } else if(tmpDaughter->GetPdgCode() == -11){
968 if(ePos == NULL || eNeg == NULL){ // means we do not have two daughters from pair production
972 if(ePos->Pt()<fSinglePtCut || eNeg->Pt()<fSinglePtCut){
973 return kFALSE; // no reconstruction below the Pt cut
976 if( ePos->Eta() > (fEtaCut + fEtaShift) || ePos->Eta() < (-fEtaCut + fEtaShift) ||
977 eNeg->Eta() > (fEtaCut + fEtaShift) || eNeg->Eta() < (-fEtaCut + fEtaShift) )
980 if(fEtaCutMin > -0.1){
981 if( (ePos->Eta() < (fEtaCutMin + fEtaShift) && ePos->Eta() > (-fEtaCutMin + fEtaShift)) ||
982 (eNeg->Eta() < (fEtaCutMin + fEtaShift) && eNeg->Eta() > (-fEtaCutMin + fEtaShift)) )
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()) );
990 return kFALSE; // cuts on distance from collision point
992 if(abs(ePos->Zv()) > fMaxZ){
993 return kFALSE; // outside material
995 if(abs(eNeg->Zv()) > fMaxZ){
996 return kFALSE; // outside material
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)){
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)){
1012 //if(AcceptanceCut(particle,ePos,eNeg))return kTRUE;
1016 ///________________________________________________________________________
1017 Bool_t AliConversionCuts::PhotonCuts(AliConversionPhotonBase *photon,AliVEvent *event)
1018 { // Specific Photon Cuts
1021 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex);
1024 // Fill Histos before Cuts
1025 if(hInvMassbefore)hInvMassbefore->Fill(photon->GetMass());
1026 if(hArmenterosbefore)hArmenterosbefore->Fill(photon->GetArmenterosAlpha(),photon->GetArmenterosQt());
1028 // Gamma selection based on QT from Armenteros
1029 if(fDoQtGammaSelection == kTRUE){
1030 if(!ArmenterosQtCut(photon)){
1031 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //1
1038 if(photon->GetChi2perNDF() > fChi2CutConversion || photon->GetChi2perNDF() <=0){
1040 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //2
1046 // Reconstruction Acceptance Cuts
1047 if(!AcceptanceCuts(photon)){
1048 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //3
1054 if(fDoPhotonAsymmetryCut == kTRUE){
1055 if(!AsymmetryCut(photon,event)){
1056 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //4
1061 //Check the pid probability
1063 if(!PIDProbabilityCut(photon, event)) {
1064 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //5
1069 if(!CorrectedTPCClusterCut(photon, event)) {
1070 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //6
1074 Double_t magField = event->GetMagneticField();
1075 if( magField < 0.0 ){
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());
1086 if(!PsiPairCut(photon)) {
1087 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //7
1092 if(!CosinePAngleCut(photon, event)) {
1093 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //8
1097 AliAODConversionPhoton* photonAOD = dynamic_cast<AliAODConversionPhoton*>(photon);
1099 photonAOD->CalculateDistanceOfClossetApproachToPrimVtx(event->GetPrimaryVertex());
1102 if(photonAOD->GetDCArToPrimVtx() > fDCARPrimVtxCut) { //DCA R cut of photon to primary vertex
1103 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //9
1108 if(abs(photonAOD->GetDCAzToPrimVtx()) > fDCAZPrimVtxCut) { //DCA Z cut of photon to primary vertex
1109 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //10
1119 UChar_t photonQuality = 0;
1120 AliAODEvent * aodEvent = dynamic_cast<AliAODEvent*>(event);
1122 photonQuality = DeterminePhotonQualityAOD(photonAOD, event);
1124 photonQuality = photonAOD->GetPhotonQuality();
1126 if (fDoPhotonQualitySelectionCut && photonQuality != fPhotonQualityCut){
1127 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //11
1132 if(hPhotonCuts)hPhotonCuts->Fill(cutIndex); //11
1134 // Histos after Cuts
1135 if(hInvMassafter)hInvMassafter->Fill(photon->GetMass());
1136 if(hArmenterosafter)hArmenterosafter->Fill(photon->GetArmenterosAlpha(),photon->GetArmenterosQt());
1137 if(hPsiPairDeltaPhiafter)hPsiPairDeltaPhiafter->Fill(deltaPhi,photon->GetPsiPair());
1142 ///________________________________________________________________________
1143 Bool_t AliConversionCuts::CorrectedTPCClusterCut(AliConversionPhotonBase *photon, AliVEvent * event)
1144 { //Cut on corrected TPC Cluster Info
1146 AliVTrack * negTrack = GetTrack(event, photon->GetTrackLabelNegative());
1147 AliVTrack * posTrack = GetTrack(event, photon->GetTrackLabelPositive());
1149 if(!negTrack||!posTrack)return kFALSE;
1151 Double_t negclsToF=0;
1153 if (!fUseCorrectedTPCClsInfo ){
1154 if(negTrack->GetTPCNclsF()!=0){
1155 negclsToF = (Double_t)negTrack->GetNcls(1)/(Double_t)negTrack->GetTPCNclsF();}// Ncluster/Nfindablecluster
1158 negclsToF = negTrack->GetTPCClusterInfo(2,0,GetFirstTPCRow(photon->GetConversionRadius()));
1161 Double_t posclsToF = 0.;
1162 if (!fUseCorrectedTPCClsInfo ){
1163 if(posTrack->GetTPCNclsF()!=0){
1164 posclsToF = (Double_t)posTrack->GetNcls(1)/(Double_t)posTrack->GetTPCNclsF();
1167 posclsToF = posTrack->GetTPCClusterInfo(2,0,GetFirstTPCRow(photon->GetConversionRadius()));
1170 if( negclsToF < fMinClsTPCToF || posclsToF < fMinClsTPCToF ){
1177 ///________________________________________________________________________
1178 Bool_t AliConversionCuts::PhotonIsSelected(AliConversionPhotonBase *photon, AliVEvent * event)
1180 //Selection of Reconstructed Photons
1182 FillPhotonCutIndex(kPhotonIn);
1184 if(event->IsA()==AliESDEvent::Class()) {
1185 if(!SelectV0Finder( ( ((AliESDEvent*)event)->GetV0(photon->GetV0Index()))->GetOnFlyStatus() ) ){
1186 FillPhotonCutIndex(kOnFly);
1190 // else if(event->IsA()==AliAODEvent::Class()) {
1191 // if(!SelectV0Finder( ( ((AliAODEvent*)event)->GetV0(photon->GetV0Index())) ) ){
1192 // FillPhotonCutIndex(kOnFly);
1198 AliVTrack * negTrack = GetTrack(event, photon->GetTrackLabelNegative());
1199 AliVTrack * posTrack = GetTrack(event, photon->GetTrackLabelPositive());
1201 if(!negTrack || !posTrack) {
1202 FillPhotonCutIndex(kNoTracks);
1205 photon->DeterminePhotonQuality(negTrack,posTrack);
1207 if(!TracksAreSelected(negTrack, posTrack)){
1208 FillPhotonCutIndex(kTrackCuts);
1211 if (hEtaDistV0s)hEtaDistV0s->Fill(photon->GetPhotonEta());
1213 if(!dEdxCuts(negTrack) || !dEdxCuts(posTrack)) {
1214 FillPhotonCutIndex(kdEdxCuts);
1217 if (hEtaDistV0sAfterdEdxCuts)hEtaDistV0sAfterdEdxCuts->Fill(photon->GetPhotonEta());
1219 if(!PhotonCuts(photon,event)){
1220 FillPhotonCutIndex(kPhotonCuts);
1224 // Photon passed cuts
1225 FillPhotonCutIndex(kPhotonOut);
1229 ///________________________________________________________________________
1230 Bool_t AliConversionCuts::ArmenterosQtCut(AliConversionPhotonBase *photon)
1231 { // Armenteros Qt Cut
1233 if ( !(TMath::Power(photon->GetArmenterosAlpha()/0.95,2)+TMath::Power(photon->GetArmenterosQt()/fQtMax,2) < 1) ){
1237 if(photon->GetArmenterosQt()>fQtMax){
1245 ///________________________________________________________________________
1246 Bool_t AliConversionCuts::AcceptanceCuts(AliConversionPhotonBase *photon) {
1247 // Exclude certain areas for photon reconstruction
1250 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1253 if(photon->GetConversionRadius()>fMaxR){ // cuts on distance from collision point
1254 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1259 if(photon->GetConversionRadius()<fMinR){ // cuts on distance from collision point
1260 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1265 if(photon->GetConversionRadius() <= ((abs(photon->GetConversionZ())*fLineCutZRSlope)-fLineCutZValue)){
1266 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1269 else if (fUseEtaMinCut && photon->GetConversionRadius() >= ((abs(photon->GetConversionZ())*fLineCutZRSlopeMin)-fLineCutZValueMin )){
1270 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1275 if(abs(photon->GetConversionZ()) > fMaxZ ){ // cuts out regions where we do not reconstruct
1276 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1282 if( photon->GetPhotonEta() > (fEtaCut + fEtaShift) || photon->GetPhotonEta() < (-fEtaCut + fEtaShift) ){
1283 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1286 if(fEtaCutMin>-0.1){
1287 if( photon->GetPhotonEta() < (fEtaCutMin + fEtaShift) && photon->GetPhotonEta() > (-fEtaCutMin + fEtaShift) ){
1288 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1294 if(photon->GetPhotonPt()<fPtCut){
1295 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1300 if(hAcceptanceCuts)hAcceptanceCuts->Fill(cutIndex);
1306 ///________________________________________________________________________
1307 Bool_t AliConversionCuts::SpecificTrackCuts(AliAODTrack * negTrack, AliAODTrack * posTrack,Int_t &cutIndex) {
1308 // Track Cuts which require AOD/ESD specific implementation
1310 if( !negTrack->IsOn(AliESDtrack::kTPCrefit) || !posTrack->IsOn(AliESDtrack::kTPCrefit) ) {
1311 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1316 AliAODVertex * NegVtxType=negTrack->GetProdVertex();
1317 AliAODVertex * PosVtxType=posTrack->GetProdVertex();
1318 if( (NegVtxType->GetType())==AliAODVertex::kKink || (PosVtxType->GetType())==AliAODVertex::kKink) {
1319 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1327 ///________________________________________________________________________
1328 Bool_t AliConversionCuts::SpecificTrackCuts(AliESDtrack * negTrack, AliESDtrack * posTrack,Int_t &cutIndex) {
1329 // Track Cuts which require AOD/ESD specific implementation
1331 if( !negTrack->IsOn(AliESDtrack::kTPCrefit) || !posTrack->IsOn(AliESDtrack::kTPCrefit) ) {
1332 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1337 if(negTrack->GetKinkIndex(0) > 0 || posTrack->GetKinkIndex(0) > 0 ) {
1338 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1346 ///________________________________________________________________________
1347 Bool_t AliConversionCuts::TracksAreSelected(AliVTrack * negTrack, AliVTrack * posTrack) {
1348 // Track Selection for Photon Reconstruction
1351 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1355 if(negTrack->Charge() == posTrack->Charge()) {
1356 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1361 // Number of TPC Clusters
1364 if( negTrack->GetNcls(1) < fMinClsTPC || posTrack->GetNcls(1) < fMinClsTPC ) {
1365 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1371 if( posTrack->Eta() > (fEtaCut + fEtaShift) || posTrack->Eta() < (-fEtaCut + fEtaShift) ||
1372 negTrack->Eta() > (fEtaCut + fEtaShift) || negTrack->Eta() < (-fEtaCut + fEtaShift) ){
1373 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1376 if(fEtaCutMin>-0.1){
1377 if( (posTrack->Eta() < (fEtaCutMin + fEtaShift) && posTrack->Eta() > (-fEtaCutMin + fEtaShift)) ||
1378 (negTrack->Eta() < (fEtaCutMin + fEtaShift) && negTrack->Eta() > (-fEtaCutMin + fEtaShift)) ){
1379 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1386 if( negTrack->Pt()< fSinglePtCut || posTrack->Pt()< fSinglePtCut){
1387 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1392 // AOD ESD specific cuts
1393 Bool_t passCuts = kTRUE;
1395 if(negTrack->IsA()==AliAODTrack::Class()) {
1396 passCuts = passCuts * SpecificTrackCuts(static_cast<AliAODTrack*>(negTrack), static_cast<AliAODTrack*>(posTrack),cutIndex);
1398 passCuts = passCuts * SpecificTrackCuts(static_cast<AliESDtrack*>(negTrack), static_cast<AliESDtrack*>(posTrack),cutIndex);
1402 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1407 if(hTrackCuts)hTrackCuts->Fill(cutIndex);
1413 ///________________________________________________________________________
1414 Bool_t AliConversionCuts::dEdxCuts(AliVTrack *fCurrentTrack){
1415 // Electron Identification Cuts for Photon reconstruction
1416 if(!fPIDResponse){InitPIDResponse();}// Try to reinitialize PID Response
1417 if(!fPIDResponse){AliError("No PID Response"); return kTRUE;}// if still missing fatal error
1420 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1421 if(hTPCdEdxSigbefore)hTPCdEdxSigbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
1422 if(hTPCdEdxbefore)hTPCdEdxbefore->Fill(fCurrentTrack->P(),fCurrentTrack->GetTPCsignal());
1425 if(fDodEdxSigmaCut == kTRUE){
1426 // TPC Electron Line
1427 if( fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaBelowElectronLine ||
1428 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaAboveElectronLine){
1430 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
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){
1441 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1448 if( fCurrentTrack->P()>fPIDMaxPnSigmaAbovePionLine ){
1449 if(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)>fPIDnSigmaBelowElectronLine &&
1450 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kElectron)<fPIDnSigmaAboveElectronLine &&
1451 fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion)<fPIDnSigmaAbovePionLineHighPt){
1453 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1461 if(fDoKaonRejectionLowP == kTRUE){
1462 if(fCurrentTrack->P()<fPIDMinPKaonRejectionLowP ){
1463 if( abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kKaon))<fPIDnSigmaAtLowPAroundKaonLine){
1465 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1471 if(fDoProtonRejectionLowP == kTRUE){
1472 if( fCurrentTrack->P()<fPIDMinPProtonRejectionLowP ){
1473 if( abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kProton))<fPIDnSigmaAtLowPAroundProtonLine){
1475 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1482 if(fDoPionRejectionLowP == kTRUE){
1483 if( fCurrentTrack->P()<fPIDMinPPionRejectionLowP ){
1484 if( abs(fPIDResponse->NumberOfSigmasTPC(fCurrentTrack,AliPID::kPion))<fPIDnSigmaAtLowPAroundPionLine){
1486 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1494 // cout<<"Start"<<endl;
1495 // AliPIDResponse::EDetPidStatus status=fPIDResponse->CheckPIDStatus(AliPIDResponse::kTOF,fCurrentTrack);
1497 // if( ( (status & AliVTrack::kTOFout) == AliVTrack::kTOFout ) && ( (status & AliVTrack::kTIME) == AliVTrack::kTIME ))
1498 // {cout<<"TOF DA"<<endl;}
1499 // if(status == AliPIDResponse::kDetPidOk){
1500 // Float_t probMis = fPIDResponse->GetTOFMismatchProbability(fCurrentTrack);
1501 // cout<<"--> "<<probMis<<endl;
1502 // if(probMis > 0.01){
1507 if((fCurrentTrack->GetStatus() & AliESDtrack::kTOFpid) && !(fCurrentTrack->GetStatus() & AliESDtrack::kTOFmismatch)){
1509 Double_t t0 = fPIDResponse->GetTOFResponse().GetStartTime(fCurrentTrack->P());
1510 Double_t times[AliPID::kSPECIESC];
1511 fCurrentTrack->GetIntegratedTimes(times);
1512 Double_t TOFsignal = fCurrentTrack->GetTOFsignal();
1513 Double_t dT = TOFsignal - t0 - times[0];
1514 hTOFbefore->Fill(fCurrentTrack->P(),dT);
1516 if(hTOFSigbefore) hTOFSigbefore->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
1518 if(fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)>fTofPIDnSigmaAboveElectronLine ||
1519 fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron)<fTofPIDnSigmaBelowElectronLine ){
1520 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1524 if(hTOFSigafter)hTOFSigafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTOF(fCurrentTrack, AliPID::kElectron));
1529 if(!fPIDResponse->IdentifiedAsElectronTRD(fCurrentTrack,fPIDTRDEfficiency)){
1530 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1536 if(hdEdxCuts)hdEdxCuts->Fill(cutIndex);
1537 if(hTPCdEdxSigafter)hTPCdEdxSigafter->Fill(fCurrentTrack->P(),fPIDResponse->NumberOfSigmasTPC(fCurrentTrack, AliPID::kElectron));
1538 if(hTPCdEdxafter)hTPCdEdxafter->Fill(fCurrentTrack->P(),fCurrentTrack->GetTPCsignal());
1543 ///________________________________________________________________________
1544 Bool_t AliConversionCuts::AsymmetryCut(AliConversionPhotonBase * photon,AliVEvent *event) {
1545 // Cut on Energy Assymetry
1547 for(Int_t ii=0;ii<2;ii++){
1549 AliVTrack *track=GetTrack(event,photon->GetTrackLabel(ii));
1551 if( track->P() > fMinPPhotonAsymmetryCut ){
1552 Double_t trackNegAsy=0;
1553 if (photon->GetPhotonP()!=0.){
1554 trackNegAsy= track->P()/photon->GetPhotonP();
1557 if( trackNegAsy<fMinPhotonAsymmetry ||trackNegAsy>(1.- fMinPhotonAsymmetry)){
1566 ///________________________________________________________________________
1567 AliVTrack *AliConversionCuts::GetTrack(AliVEvent * event, Int_t label){
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)
1572 AliESDEvent * esdEvent = dynamic_cast<AliESDEvent*>(event);
1574 if(label > event->GetNumberOfTracks() ) return NULL;
1575 AliESDtrack * track = esdEvent->GetTrack(label);
1579 AliVTrack * track = 0x0;
1580 if(((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->AreAODsRelabeled()){
1581 track = dynamic_cast<AliVTrack*>(event->GetTrack(label));
1585 for(Int_t ii=0; ii<event->GetNumberOfTracks(); ii++) {
1586 track = dynamic_cast<AliVTrack*>(event->GetTrack(ii));
1588 if(track->GetID() == label) {
1595 //AliDebug(5,(Form("track not found %d %d",label,event->GetNumberOfTracks()));
1599 ///________________________________________________________________________
1600 AliESDtrack *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)
1606 if(label > event->GetNumberOfTracks() ) return NULL;
1607 AliESDtrack * track = event->GetTrack(label);
1610 //AliDebug(5,(Form("track not found %d %d",label,event->GetNumberOfTracks()));
1616 ///________________________________________________________________________
1617 Bool_t AliConversionCuts::PIDProbabilityCut(AliConversionPhotonBase *photon, AliVEvent * event){
1618 // Cut on Electron Probability for Photon Reconstruction
1620 AliESDEvent * esdEvent = dynamic_cast<AliESDEvent*>(event);
1624 Bool_t iResult=kFALSE;
1626 Double_t *posProbArray = new Double_t[AliPID::kSPECIES];
1627 Double_t *negProbArray = new Double_t[AliPID::kSPECIES];
1629 AliESDtrack* negTrack = esdEvent->GetTrack(photon->GetTrackLabelNegative());
1630 AliESDtrack* posTrack = esdEvent->GetTrack(photon->GetTrackLabelPositive());
1632 if(negProbArray && posProbArray){
1634 negTrack->GetTPCpid(negProbArray);
1635 posTrack->GetTPCpid(posProbArray);
1637 if(negProbArray[AliPID::kElectron]>=fPIDProbabilityCutNegativeParticle && posProbArray[AliPID::kElectron]>=fPIDProbabilityCutPositiveParticle){
1642 delete [] posProbArray;
1643 delete [] negProbArray;
1647 ///Not possible for AODs
1657 ///________________________________________________________________________
1658 Bool_t AliConversionCuts::AcceptanceCut(TParticle *particle, TParticle * ePos,TParticle* eNeg){
1659 // MC Acceptance Cuts
1660 //(Certain areas were excluded for photon reconstruction)
1662 if(particle->R()>fMaxR){
1665 if(ePos->R()>fMaxR){
1669 if(ePos->R()<fMinR){
1673 if( ePos->R() <= ((abs(ePos->Vz())*fLineCutZRSlope)-fLineCutZValue)){
1676 else if (fUseEtaMinCut && ePos->R() >= ((abs(ePos->Vz())*fLineCutZRSlopeMin)-fLineCutZValueMin )){
1680 if(abs(eNeg->Vz()) > fMaxZ ){ // cuts out regions where we do not reconstruct
1684 if(eNeg->Vz()!=ePos->Vz()||eNeg->R()!=ePos->R()){
1688 if(abs(ePos->Vz()) > fMaxZ ){ // cuts out regions where we do not reconstruct
1693 if( particle->Eta() > (fEtaCut + fEtaShift) || particle->Eta() < (-fEtaCut + fEtaShift) ){
1696 if( ePos->Eta() > (fEtaCut + fEtaShift) || ePos->Eta() < (-fEtaCut + fEtaShift) ){
1699 if( eNeg->Eta() > (fEtaCut + fEtaShift) || eNeg->Eta() < (-fEtaCut + fEtaShift) ){
1702 if(fEtaCutMin>-0.1){
1703 if( particle->Eta() < (fEtaCutMin + fEtaShift) && particle->Eta() > (-fEtaCutMin + fEtaShift) ){
1706 if( ePos->Eta() < (fEtaCutMin + fEtaShift) && ePos->Eta() > (-fEtaCutMin + fEtaShift) ){
1709 if( eNeg->Eta() < (fEtaCutMin + fEtaShift) && eNeg->Eta() > (-fEtaCutMin + fEtaShift) ){
1714 if( ePos->Pt()< fSinglePtCut || eNeg->Pt()< fSinglePtCut){
1718 if(particle->Pt()<fPtCut){
1724 ///________________________________________________________________________
1725 Bool_t AliConversionCuts::UpdateCutString() {
1726 ///Update the cut string (if it has been created yet)
1728 if(fCutString && fCutString->GetString().Length() == kNCuts) {
1729 fCutString->SetString(GetCutNumber());
1735 ///________________________________________________________________________
1736 void AliConversionCuts::LoadReweightingHistosMCFromFile() {
1738 AliInfo("Entering loading of histograms for weighting");
1739 TFile *f = TFile::Open(fPathTrFReweighting.Data());
1741 AliError(Form("file for weighting %s not found",fPathTrFReweighting.Data()));
1744 if (fNameHistoReweightingPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
1745 cout << "I have to find: " << fNameHistoReweightingPi0.Data() << endl;
1746 TH1D *hReweightMCHistPi0temp = (TH1D*)f->Get(fNameHistoReweightingPi0.Data());
1747 hReweightMCHistPi0 = new TH1D(*hReweightMCHistPi0temp);
1748 if (hReweightMCHistPi0) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingPi0.Data(),fPathTrFReweighting.Data() ));
1749 else AliWarning(Form("%s not found in %s", fNameHistoReweightingPi0.Data() ,fPathTrFReweighting.Data()));
1750 hReweightMCHistPi0->SetDirectory(0);
1752 if (fNameFitDataPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
1753 cout << "I have to find: " << fNameFitDataPi0.Data() << endl;
1754 TF1 *fFitDataPi0temp = (TF1*)f->Get(fNameFitDataPi0.Data());
1755 fFitDataPi0 = new TF1(*fFitDataPi0temp);
1756 if (fFitDataPi0) AliInfo(Form("%s has been loaded from %s", fNameFitDataPi0.Data(),fPathTrFReweighting.Data() ));
1757 else AliWarning(Form("%s not found in %s",fPathTrFReweighting.Data(), fNameFitDataPi0.Data() ));
1760 if (fNameHistoReweightingEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
1761 cout << "I have to find: " << fNameHistoReweightingEta.Data() << endl;
1762 TH1D *hReweightMCHistEtatemp = (TH1D*)f->Get(fNameHistoReweightingEta.Data());
1763 hReweightMCHistEta = new TH1D(*hReweightMCHistEtatemp);
1764 if (hReweightMCHistEta) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
1765 else AliWarning(Form("%s not found in %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
1766 hReweightMCHistEta->SetDirectory(0);
1769 if (fNameFitDataEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
1770 cout << "I have to find: " << fNameFitDataEta.Data() << endl;
1771 TF1 *fFitDataEtatemp = (TF1*)f->Get(fNameFitDataEta.Data());
1772 fFitDataEta = new TF1(*fFitDataEtatemp);
1773 if (fFitDataEta) AliInfo(Form("%s has been loaded from %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
1774 else AliWarning(Form("%s not found in %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
1777 if (fNameHistoReweightingK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
1778 cout << "I have to find: " << fNameHistoReweightingK0s.Data() << endl;
1779 TH1D *hReweightMCHistK0stemp = (TH1D*)f->Get(fNameHistoReweightingK0s.Data());
1780 hReweightMCHistK0s = new TH1D(*hReweightMCHistK0stemp);
1781 if (hReweightMCHistK0s) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
1782 else AliWarning(Form("%s not found in %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
1783 hReweightMCHistK0s->SetDirectory(0);
1786 if (fNameFitDataK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
1787 cout << "I have to find: " << fNameFitDataK0s.Data() << endl;
1788 TF1 *fFitDataK0stemp = (TF1*)f->Get(fNameFitDataK0s.Data());
1789 fFitDataK0s = new TF1(*fFitDataK0stemp);
1790 if (fFitDataK0s) AliInfo(Form("%s has been loaded from %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
1791 else AliWarning(Form("%s not found in %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
1799 ///________________________________________________________________________
1800 Bool_t AliConversionCuts::InitializeCutsFromCutString(const TString analysisCutSelection ) {
1801 // Initialize Cuts from a given Cut string
1802 if(fDoReweightHistoMCPi0 || fDoReweightHistoMCEta || fDoReweightHistoMCK0s) {
1803 AliInfo("Weighting was enabled");
1804 LoadReweightingHistosMCFromFile();
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));
1812 if(!analysisCutSelection.IsDigit()){
1813 AliError("Cut selection contains characters");
1817 const char *cutSelection = analysisCutSelection.Data();
1818 #define ASSIGNARRAY(i) fCuts[i] = cutSelection[i] - '0'
1819 for(Int_t ii=0;ii<kNCuts;ii++){
1823 // Set Individual Cuts
1824 for(Int_t ii=0;ii<kNCuts;ii++){
1825 if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
1828 PrintCutsWithValues();
1832 ///________________________________________________________________________
1833 Bool_t AliConversionCuts::SetCut(cutIds cutID, const Int_t value) {
1834 ///Set individual cut ID
1839 if( SetV0Finder(value)) {
1840 fCuts[kv0FinderType] = value;
1843 } else return kFALSE;
1845 case kededxSigmaCut:
1846 if( SetTPCdEdxCutElectronLine(value)) {
1847 fCuts[kededxSigmaCut] = value;
1850 } else return kFALSE;
1852 case kpidedxSigmaCut:
1853 if( SetTPCdEdxCutPionLine(value)) {
1854 fCuts[kpidedxSigmaCut] = value;
1857 } else return kFALSE;
1859 case kpiMomdedxSigmaCut:
1860 if( SetMinMomPiondEdxCut(value)) {
1861 fCuts[kpiMomdedxSigmaCut] = value;
1864 } else return kFALSE;
1867 if( SetChi2GammaCut(value)) {
1868 fCuts[kchi2GammaCut] = value;
1871 } else return kFALSE;
1874 if( SetSinglePtCut(value)) {
1875 fCuts[ksinglePtCut] = value;
1878 } else return kFALSE;
1881 if( SetTPCClusterCut(value)) {
1882 fCuts[kclsTPCCut] = value;
1885 } else return kFALSE;
1888 if( SetEtaCut(value)) {
1889 fCuts[ketaCut] = value;
1892 } else return kFALSE;
1894 case kLowPRejectionSigmaCut:
1895 if( SetLowPRejectionCuts(value)) {
1896 fCuts[kLowPRejectionSigmaCut] = value;
1899 } else return kFALSE;
1902 if( SetQtMaxCut(value)) {
1903 fCuts[kQtMaxCut] = value;
1906 } else return kFALSE;
1908 case kpiMaxMomdedxSigmaCut:
1909 if( SetMaxMomPiondEdxCut(value)) {
1910 fCuts[kpiMaxMomdedxSigmaCut] = value;
1913 } else return kFALSE;
1916 if( SetRCut(value)) {
1917 fCuts[kRCut] = value;
1920 } else return kFALSE;
1923 if( SetRemovePileUp(value)) {
1924 fCuts[kremovePileUp] = value;
1927 } else return kFALSE;
1929 case kSelectSpecialTriggerAlias:
1930 if( SetSelectSpecialTrigger(value)) {
1931 fCuts[kSelectSpecialTriggerAlias] = value;
1934 } else return kFALSE;
1936 case kSelectSubTriggerClass:
1937 if( SetSelectSubTriggerClass(value)) {
1938 fCuts[kSelectSubTriggerClass] = value;
1941 } else return kFALSE;
1944 if( SetIsHeavyIon(value)) {
1945 fCuts[kisHeavyIon] = value;
1948 } else return kFALSE;
1950 case kCentralityMin:
1951 if( SetCentralityMin(value)) {
1952 fCuts[kCentralityMin] = value;
1955 } else return kFALSE;
1957 case kCentralityMax:
1958 if( SetCentralityMax(value)) {
1959 fCuts[kCentralityMax] = value;
1962 } else return kFALSE;
1964 case kTOFelectronPID:
1965 if( SetTOFElectronPIDCut(value)) {
1966 fCuts[kTOFelectronPID] = value;
1969 } else return kFALSE;
1971 case kdoPhotonAsymmetryCut:
1972 if( SetPhotonAsymmetryCut(value)) {
1973 fCuts[kdoPhotonAsymmetryCut] = value;
1976 } else return kFALSE;
1979 if( SetPsiPairCut(value)) {
1980 fCuts[kPsiPair] = value;
1983 } else return kFALSE;
1986 if( SetCosPAngleCut(value)) {
1987 fCuts[kCosPAngle] = value;
1990 } else return kFALSE;
1994 if( SetSharedElectronCut(value)) {
1995 fCuts[kElecShare] = value;
1998 } else return kFALSE;
2001 if( SetToCloseV0sCut(value)) {
2002 fCuts[kToCloseV0s] = value;
2005 } else return kFALSE;
2008 if( SetRejectExtraSignalsCut(value)) {
2009 fCuts[kExtraSignals] = value;
2012 } else return kFALSE;
2015 if( SetDCARPhotonPrimVtxCut(value)) {
2016 fCuts[kDcaRPrimVtx] = value;
2019 } else return kFALSE;
2022 if( SetDCAZPhotonPrimVtxCut(value)) {
2023 fCuts[kDcaZPrimVtx] = value;
2026 } else return kFALSE;
2028 case kInPlaneOutOfPlane:
2029 if( SetInPlaneOutOfPlane(value)) {
2030 fCuts[kInPlaneOutOfPlane] = value;
2033 } else return kFALSE;
2039 AliError("Cut id out of range");
2043 AliError("Cut id %d not recognized");
2048 ///________________________________________________________________________
2049 void 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]);
2056 void AliConversionCuts::PrintCutsWithValues() {
2057 // Print out current Cut Selection with value
2058 if (fIsHeavyIon == 0) {
2059 printf("Running in pp mode \n");
2060 if (fSpecialTrigger == 0){
2061 printf("\t only events triggered by V0OR will be analysed \n");
2062 } else if (fSpecialTrigger == 1){
2063 printf("\t only events triggered by V0AND will be analysed \n");
2064 } else if (fSpecialTrigger == 2){
2065 printf("\t only events where SDD was present will be analysed \n");
2066 } else if (fSpecialTrigger == 3){
2067 printf("\t only events where SDD was present will be analysed and triggered by VOAND\n");
2068 } else if (fSpecialTrigger > 3){
2069 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
2071 } else if (fIsHeavyIon == 1){
2072 printf("Running in PbPb mode \n");
2073 if (fDetectorCentrality == 0){
2074 printf("\t centrality selection based on V0M \n");
2075 } else if (fDetectorCentrality == 1){
2076 printf("\t centrality selection based on Cl1 \n");
2078 if (fModCentralityClass == 0){
2079 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
2080 } else if ( fModCentralityClass == 1){
2081 printf("\t %d - %d \n", fCentralityMin*5, fCentralityMax*5);
2082 } else if ( fModCentralityClass == 2){
2083 printf("\t %d - %d \n", fCentralityMin*5+45, fCentralityMax*5+45);
2084 } else if (fModCentralityClass == 3){
2085 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*10, fCentralityMax*10);
2086 } else if ( fModCentralityClass == 4){
2087 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5, fCentralityMax*5);
2088 } else if ( fModCentralityClass == 5){
2089 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5+45, fCentralityMax*5+45);
2091 if (fSpecialTrigger == 0){
2092 printf("\t only events triggered by kMB, kCentral, kSemiCentral will be analysed \n");
2093 } else if (fSpecialTrigger > 4){
2094 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
2096 } else if (fIsHeavyIon == 2){
2097 printf("Running in pPb mode \n");
2098 if (fDetectorCentrality == 0){
2099 printf("\t centrality selection based on V0A \n");
2100 } else if (fDetectorCentrality == 1){
2101 printf("\t centrality selection based on Cl1 \n");
2103 if (fModCentralityClass == 0){
2104 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
2106 if (fSpecialTrigger == 0){
2107 printf("\t only events triggered by kINT7 will be analysed \n");
2108 } else if (fSpecialTrigger > 4){
2109 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
2112 printf("MC event cuts: \n");
2113 if (fRejectExtraSignals == 0) printf("\t no rejection was applied \n");
2114 else if (fRejectExtraSignals == 1) printf("\t only MB header will be inspected \n");
2115 else if (fRejectExtraSignals > 1) printf("\t special header have been selected \n");
2117 printf("Electron cuts: \n");
2118 if (fEtaCutMin > -0.1) printf("\t %3.2f < eta_{e} < %3.2f\n", fEtaCutMin, fEtaCut );
2119 else printf("\t eta_{e} < %3.2f\n", fEtaCut );
2120 printf("\t p_{T,e} > %3.2f\n", fSinglePtCut );
2121 printf("\t %3.2f < n sigma e < %3.2f\n", fPIDnSigmaBelowElectronLine, fPIDnSigmaAboveElectronLine );
2123 printf("Photon cuts: \n");
2124 printf("\t %3.2f < R_{conv} < %3.2f\n", fMinR, fMaxR );
2125 printf("\t Z_{conv} < %3.2f\n", fMaxZ );
2126 if (fEtaCutMin > -0.1) printf("\t %3.2f < eta_{conv} < %3.2f\n", fEtaCutMin, fEtaCut );
2127 else printf("\t eta_{conv} < %3.2f\n", fEtaCut );
2128 printf("\t p_{T,gamma} > %3.2f\n", fPtCut );
2130 printf("\t 2 dimensional q_{T} cut applied with maximum of %3.2f \n", fQtMax );
2132 printf("\t 1 dimensional q_{T} cut applied with maximum of %3.2f \n", fQtMax );
2134 if (fDo2DPsiPairChi2){
2135 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 );
2137 printf("\t chi^{2} max cut chi^{2} < %3.2f \n", fChi2CutConversion );
2138 printf("\t psi_{pair} max cut |psi_{pair}| < %3.2f \n", fPsiPairCut );
2140 printf("\t cos(Theta_{point}) > %3.2f \n", fCosPAngleCut );
2141 printf("\t dca_{R} < %3.2f \n", fDCARPrimVtxCut );
2142 printf("\t dca_{Z} < %3.2f \n", fDCAZPrimVtxCut );
2143 if (fDoPhotonQualitySelectionCut) printf("\t selection based on photon quality with quality %d \n", fPhotonQualityCut );
2146 ///________________________________________________________________________
2147 Bool_t AliConversionCuts::SetIsHeavyIon(Int_t isHeavyIon)
2155 fDetectorCentrality=0;
2159 fDetectorCentrality=1;
2161 case 3: //allows to select centrality 0-45% in steps of 5% for V0 Multiplicity
2163 fDetectorCentrality=0;
2164 fModCentralityClass=1;
2166 case 4: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
2168 fDetectorCentrality=0;
2169 fModCentralityClass=2;
2171 case 5: //strict cut on v0 tracks for MC
2173 fDetectorCentrality=0;
2174 fModCentralityClass=3;
2176 case 6: //allows to select centrality 0-45% in steps of 5% for track mult
2177 //strict cut on v0 tracks for MC
2179 fDetectorCentrality=0;
2180 fModCentralityClass=4;
2182 case 7: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
2183 //strict cut on v0 tracks for MC
2185 fDetectorCentrality=0;
2186 fModCentralityClass=5;
2190 fDetectorCentrality=0;
2194 fDetectorCentrality=1;
2197 AliError(Form("SetHeavyIon not defined %d",isHeavyIon));
2203 //___________________________________________________________________
2204 Bool_t AliConversionCuts::SetCentralityMin(Int_t minCentrality)
2207 if(minCentrality<0||minCentrality>9){
2208 AliError(Form("minCentrality not defined %d",minCentrality));
2212 fCentralityMin=minCentrality;
2215 //___________________________________________________________________
2216 Bool_t AliConversionCuts::SetCentralityMax(Int_t maxCentrality)
2219 if(maxCentrality<0||maxCentrality>9){
2220 AliError(Form("maxCentrality not defined %d",maxCentrality));
2223 fCentralityMax=maxCentrality;
2226 ///________________________________________________________________________
2227 Bool_t AliConversionCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
2230 switch(selectSpecialTrigger){
2232 fSpecialTrigger=0; // dont care
2235 fSpecialTrigger=1; // V0AND
2238 fSpecialTrigger=2; // with SDD requested
2241 fSpecialTrigger=3; // V0AND plus with SDD requested
2243 // allows to run MB & 6 other different trigger classes in parallel with the same photon cut
2245 fSpecialTrigger=4; // trigger alias kTRD
2246 fOfflineTriggerMask=AliVEvent::kTRD;
2247 fTriggerSelectedManually = kTRUE;
2248 fSpecialTriggerName="AliVEvent::kTRD";
2251 fSpecialTrigger=5; // trigger alias kEMC
2252 fOfflineTriggerMask=AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMC1 ;
2253 fTriggerSelectedManually = kTRUE;
2254 fSpecialTriggerName="AliVEvent::kEMC7/kEMC8/kEMC1";
2257 fSpecialTrigger=6; // trigger alias kPHI
2258 fOfflineTriggerMask=AliVEvent::kPHI7 | AliVEvent::kPHI1 | AliVEvent::kPHI8 | AliVEvent::kPHOSPb;
2259 fTriggerSelectedManually = kTRUE;
2260 fSpecialTriggerName="AliVEvent::kPHI7/kPHI1/kPHI8/kPHOSPb";
2263 fSpecialTrigger=7; // trigger alias kHighMult
2264 fOfflineTriggerMask=AliVEvent::kHighMult;
2265 fTriggerSelectedManually = kTRUE;
2266 fSpecialTriggerName="AliVEvent::kHighMult";
2269 fSpecialTrigger=8; // trigger alias kEMCEGA
2270 fOfflineTriggerMask=AliVEvent::kEMCEGA;
2271 fTriggerSelectedManually = kTRUE;
2272 fSpecialTriggerName="AliVEvent::kEMCEGA";
2275 fSpecialTrigger=9; // trigger alias kEMCEJE
2276 fOfflineTriggerMask=AliVEvent::kEMCEJE;
2277 fTriggerSelectedManually = kTRUE;
2278 fSpecialTriggerName="AliVEvent::kEMCEJE";
2281 AliError("Warning: Special Trigger Not known");
2287 ///________________________________________________________________________
2288 Bool_t AliConversionCuts::SetSelectSubTriggerClass(Int_t selectSpecialSubTriggerClass)
2291 if (fSpecialTrigger == 1){ //V0AND with different detectors
2292 switch(selectSpecialSubTriggerClass){
2293 case 0: //with VZERO
2295 fSpecialSubTrigger=0;
2296 // AliInfo("Info: Nothing to be done");
2298 case 1: //with TZERO
2300 fSpecialSubTrigger=0;
2301 fOfflineTriggerMask=AliVEvent::kINT8;
2302 fTriggerSelectedManually = kTRUE;
2303 fSpecialTriggerName="AliVEvent::kINT8";
2306 AliError("Warning: Special Subtrigger Class Not known");
2310 } else if (fSpecialTrigger == 4){ // Subdivision of TRD trigger classes
2311 switch(selectSpecialSubTriggerClass){
2312 case 0: // all together
2313 fSpecialSubTrigger=0;
2314 fSpecialSubTriggerName="";
2315 // AliInfo("Info: Nothing to be done");
2317 case 1: // 7WUHSH - V0AND with single electron in TRD & EMCAL
2318 fSpecialSubTrigger=1;
2319 fNSpecialSubTriggerOptions=1;
2320 fSpecialSubTriggerName="7WUHEE";
2322 case 2: // 8WUHSH - T0AND with single electron in TRD & EMCAL
2323 fSpecialSubTrigger=1;
2324 fNSpecialSubTriggerOptions=1;
2325 fSpecialSubTriggerName="8WUHEE";
2327 case 3: // 7WUHSE - V0AND with single high pt electron in TRD
2328 fSpecialSubTrigger=1;
2329 fNSpecialSubTriggerOptions=1;
2330 fSpecialSubTriggerName="7WUHSE";
2332 case 4: // 8WUHSE - T0AND with single high pt electron in TRD
2333 fSpecialSubTrigger=1;
2334 fNSpecialSubTriggerOptions=1;
2335 fSpecialSubTriggerName="8WUHSE";
2337 case 5: // 7WUHJE - V0AND with jet in TRD
2338 fSpecialSubTrigger=1;
2339 fNSpecialSubTriggerOptions=1;
2340 fSpecialSubTriggerName="7WUHJT";
2342 case 6: // 8WUHJE - T0AND with jet in TRD
2343 fSpecialSubTrigger=1;
2344 fNSpecialSubTriggerOptions=1;
2345 fSpecialSubTriggerName="8WUHJT";
2347 case 7: // 7WUHQU - V0AND with dielectron pair in TRD
2348 fSpecialSubTrigger=1;
2349 fNSpecialSubTriggerOptions=1;
2350 fSpecialSubTriggerName="7WUHQU";
2352 case 8: // 8WUHQU - T0AND with dielectron pair in TRD
2353 fSpecialSubTrigger=1;
2354 fNSpecialSubTriggerOptions=1;
2355 fSpecialSubTriggerName="8WUHQU";
2358 AliError("Warning: Special Subtrigger Class Not known");
2361 } else if (fSpecialTrigger == 5){ // Subdivision of kEMC trigger classes
2362 switch(selectSpecialSubTriggerClass){
2363 case 0: // all together
2364 fSpecialSubTrigger=0;
2365 fSpecialSubTriggerName="";
2366 // AliInfo("Info: Nothing to be done");
2368 case 1: // CEMC1 - V0OR and EMCAL fired
2369 fOfflineTriggerMask=AliVEvent::kEMC1;
2370 fSpecialTriggerName="AliVEvent::kEMC1";
2371 fSpecialSubTrigger=1;
2372 fNSpecialSubTriggerOptions=1;
2373 fSpecialSubTriggerName="CEMC1";
2375 case 2: // CEMC7 - V0AND and EMCAL fired
2376 fSpecialSubTrigger=1;
2377 fOfflineTriggerMask=AliVEvent::kEMC7;
2378 fSpecialTriggerName="AliVEvent::kEMC7";
2379 fNSpecialSubTriggerOptions=1;
2380 fSpecialSubTriggerName="CEMC7";
2382 case 3: // CEMC8 - T0OR and EMCAL fired
2383 fOfflineTriggerMask=AliVEvent::kEMC8;
2384 fSpecialTriggerName="AliVEvent::kEMC8";
2385 fSpecialSubTrigger=1;
2386 fNSpecialSubTriggerOptions=1;
2387 fSpecialSubTriggerName="CEMC8";
2390 AliError("Warning: Special Subtrigger Class Not known");
2393 } else if (fSpecialTrigger == 6){ // Subdivision of kPHI trigger classes
2394 switch(selectSpecialSubTriggerClass){
2395 case 0: // all together
2396 fSpecialSubTrigger=0;
2397 fSpecialSubTriggerName="";
2398 // AliInfo("Info: Nothing to be done");
2400 case 1: // CEMC1 - V0OR and EMCAL fired
2401 fOfflineTriggerMask=AliVEvent::kPHI1;
2402 fSpecialTriggerName="AliVEvent::kPHI1";
2403 fSpecialSubTrigger=1;
2404 fNSpecialSubTriggerOptions=1;
2405 fSpecialSubTriggerName="CPHI1";
2407 case 2: // CEMC7 - V0AND and EMCAL fired
2408 fSpecialSubTrigger=1;
2409 fOfflineTriggerMask=AliVEvent::kPHI7;
2410 fSpecialTriggerName="AliVEvent::kPHI7";
2411 fNSpecialSubTriggerOptions=1;
2412 fSpecialSubTriggerName="CPHI7";
2414 case 3: // CEMC8 - T0OR and EMCAL fired
2415 fOfflineTriggerMask=AliVEvent::kPHI8;
2416 fSpecialTriggerName="AliVEvent::kPHI8";
2417 fSpecialSubTrigger=1;
2418 fNSpecialSubTriggerOptions=1;
2419 fSpecialSubTriggerName="CPHI8";
2422 AliError("Warning: Special Subtrigger Class Not known");
2425 } else if (fSpecialTrigger == 7){ // Subdivision of kHighMult trigger classes
2426 switch(selectSpecialSubTriggerClass){
2427 case 0: // all together
2428 fSpecialSubTrigger=0;
2429 fSpecialSubTriggerName="";
2430 // AliInfo("Info: Nothing to be done");
2432 case 1: // CSHM1 - V0OR and high mult fired
2433 fSpecialSubTrigger=1;
2434 fNSpecialSubTriggerOptions=1;
2435 fSpecialSubTriggerName="CSHM1";
2437 case 2: // CSHM7 - V0AND and high mult fired
2438 fSpecialSubTrigger=1;
2439 fNSpecialSubTriggerOptions=1;
2440 fSpecialSubTriggerName="CSHM7";
2442 case 3: // CSHM8 - T0OR and high mult fired
2443 fSpecialSubTrigger=1;
2444 fNSpecialSubTriggerOptions=1;
2445 fSpecialSubTriggerName="CSHM8";
2448 AliError("Warning: Special Subtrigger Class Not known");
2451 } else if (fSpecialTrigger == 8){ // Subdivision of kEMCEGA trigger classes
2452 switch(selectSpecialSubTriggerClass){
2453 case 0: // all together
2454 fSpecialSubTrigger=0;
2455 fSpecialSubTriggerName="";
2456 // AliInfo("Info: Nothing to be done");
2458 case 1: // 7EGA - CINT7 EGA
2459 fSpecialSubTrigger=1;
2460 fNSpecialSubTriggerOptions=1;
2461 fSpecialSubTriggerName="7EGA";
2463 case 2: // 8EGA - CINT8 EGA
2464 fSpecialSubTrigger=1;
2465 fNSpecialSubTriggerOptions=1;
2466 fSpecialSubTriggerName="8EGA";
2468 case 3: // 7EG1 - CINT7 EG1
2469 fSpecialSubTrigger=1;
2470 fNSpecialSubTriggerOptions=1;
2471 fSpecialSubTriggerName="7EG1";
2473 case 4: // 8EG1 - CINT8 EG1
2474 fSpecialSubTrigger=1;
2475 fNSpecialSubTriggerOptions=1;
2476 fSpecialSubTriggerName="8EG1";
2478 case 5: // 7EG2 - CINT7 EG2
2479 fSpecialSubTrigger=1;
2480 fNSpecialSubTriggerOptions=1;
2481 fSpecialSubTriggerName="7EG2";
2483 case 6: // 8EG2 - CINT8 EG2
2484 fSpecialSubTrigger=1;
2485 fNSpecialSubTriggerOptions=1;
2486 fSpecialSubTriggerName="8EG2";
2489 AliError("Warning: Special Subtrigger Class Not known");
2492 } else if (fSpecialTrigger == 9){ // Subdivision of kEMCEGA trigger classes
2493 switch(selectSpecialSubTriggerClass){
2494 case 0: // all together
2495 fSpecialSubTrigger=0;
2496 fSpecialSubTriggerName="";
2497 // AliInfo("Info: Nothing to be done");
2499 case 1: // 7EJE - CINT7 EJE
2500 fSpecialSubTrigger=1;
2501 fNSpecialSubTriggerOptions=1;
2502 fSpecialSubTriggerName="7EJE";
2504 case 2: // 8EJE - CINT8 EJE
2505 fSpecialSubTrigger=1;
2506 fNSpecialSubTriggerOptions=1;
2507 fSpecialSubTriggerName="8EJE";
2509 case 3: // 7EJ1 - CINT7 EJ1
2510 fSpecialSubTrigger=1;
2511 fNSpecialSubTriggerOptions=1;
2512 fSpecialSubTriggerName="7EJ1";
2514 case 4: // 8EJ1 - CINT8 EJ1
2515 fSpecialSubTrigger=1;
2516 fNSpecialSubTriggerOptions=1;
2517 fSpecialSubTriggerName="8EJ1";
2519 case 5: // 7EJ2 - CINT7 EJ2
2520 fSpecialSubTrigger=1;
2521 fNSpecialSubTriggerOptions=1;
2522 fSpecialSubTriggerName="7EJ2";
2524 case 6: // 8EJ2 - CINT8 EJ2
2525 fSpecialSubTrigger=1;
2526 fNSpecialSubTriggerOptions=1;
2527 fSpecialSubTriggerName="8EJ2";
2530 AliError("Warning: Special Subtrigger Class Not known");
2537 ///________________________________________________________________________
2538 Bool_t AliConversionCuts::SetMultiplicityMethod(Int_t multiplicityMethod)
2541 fMultiplicityMethod=multiplicityMethod;
2543 // 0 Photon Multiplicity
2544 // 1 TPC Track multiplicity
2550 ///________________________________________________________________________
2551 Bool_t AliConversionCuts::SetRemovePileUp(Int_t removePileUp)
2553 switch(removePileUp){
2555 fRemovePileUp=kFALSE;
2558 fRemovePileUp=kTRUE;
2561 AliError("RemovePileUpCut not defined");
2566 ///________________________________________________________________________
2567 Bool_t AliConversionCuts::SetRejectExtraSignalsCut(Int_t extraSignal) {
2569 switch(extraSignal){
2571 fRejectExtraSignals = 0;
2572 break; // No Rejection
2574 fRejectExtraSignals = 1;
2575 break; // MinBias Header
2577 fRejectExtraSignals = 2;
2578 break; // User String Array
2580 fRejectExtraSignals = 3;
2581 break; // Rejection for Gamma Correction only
2583 AliError(Form("Extra Signal Rejection not defined %d",extraSignal));
2588 ///________________________________________________________________________
2589 Bool_t AliConversionCuts::SetV0Finder(Int_t v0FinderType)
2591 switch (v0FinderType){
2592 case 0: // on fly V0 finder
2593 cout << "have chosen onfly V0" << endl;
2594 fUseOnFlyV0Finder=kTRUE;
2596 case 1: // offline V0 finder
2597 cout << "have chosen offline V0" << endl;
2598 fUseOnFlyV0Finder=kFALSE;
2601 AliError(Form(" v0FinderType not defined %d",v0FinderType));
2606 ///________________________________________________________________________
2607 Bool_t AliConversionCuts::SetEtaCut(Int_t etaCut)
2610 //Set Standard LineCutZValues
2611 fLineCutZValueMin = -2;
2612 fLineCutZValue = 7.;
2617 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2619 fLineCutZRSlopeMin = 0.;
2621 case 1: // 0.6 // changed from 1.2 to 0.6 on 2013.06.10
2623 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2625 fLineCutZRSlopeMin = 0.;
2629 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2631 fLineCutZRSlopeMin = 0.;
2635 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2637 fLineCutZRSlopeMin = 0.;
2641 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2643 fLineCutZRSlopeMin = 0.;
2647 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2649 fLineCutZRSlopeMin = 0.;
2653 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2655 fLineCutZRSlopeMin = 0.;
2658 if (fIsHeavyIon==1){
2660 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2662 fLineCutZRSlopeMin = 0.;
2666 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2668 fLineCutZRSlopeMin = 0.;
2671 // case 8: // 0.1 - 0.8
2673 // fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2674 // fEtaCutMin = 0.1;
2675 // fLineCutZRSlopeMin = tan(2*atan(exp(-fEtaCutMin)));
2679 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2681 fLineCutZRSlopeMin = 0.;
2685 fLineCutZRSlope = tan(2*atan(exp(-fEtaCut)));
2687 fLineCutZRSlopeMin = 0.;
2690 AliError(Form(" EtaCut not defined %d",etaCut));
2695 ///________________________________________________________________________
2696 Bool_t AliConversionCuts::SetRCut(Int_t RCut){
2729 fMinR = 35.; //old 26.
2741 AliError("RCut not defined");
2746 ///________________________________________________________________________
2747 Bool_t AliConversionCuts::SetSinglePtCut(Int_t singlePtCut)
2749 switch(singlePtCut){
2750 case 0: // 0.050 GeV
2751 fSinglePtCut = 0.050;
2753 case 1: // 0.100 GeV
2754 fSinglePtCut = 0.100;
2756 case 2: // 0.150 GeV
2757 fSinglePtCut = 0.150;
2759 case 3: // 0.200 GeV
2760 fSinglePtCut = 0.200;
2762 case 4: // 0.075 GeV
2763 fSinglePtCut = 0.075;
2765 case 5: // 0.125 GeV
2766 fSinglePtCut = 0.125;
2769 fSinglePtCut = 0.040;
2775 AliError(Form("singlePtCut not defined %d",singlePtCut));
2780 ///________________________________________________________________________
2781 Bool_t AliConversionCuts::SetTPCClusterCut(Int_t clsTPCCut)
2796 case 4: // 95% of findable clusters
2797 fMinClsTPCToF= 0.95;
2798 fUseCorrectedTPCClsInfo=1;
2800 case 5: // 0% of findable clusters
2802 fUseCorrectedTPCClsInfo=1;
2804 case 6: // 70% of findable clusters
2806 fUseCorrectedTPCClsInfo=1;
2808 case 7: // 0% of findable clusters
2809 fMinClsTPCToF= 0.35;
2810 fUseCorrectedTPCClsInfo=0;
2813 fMinClsTPCToF= 0.35;
2814 fUseCorrectedTPCClsInfo=1;
2818 fUseCorrectedTPCClsInfo=1;
2821 AliError(Form("Warning: clsTPCCut not defined %d",clsTPCCut));
2826 ///________________________________________________________________________
2827 Bool_t AliConversionCuts::SetTPCdEdxCutElectronLine(Int_t ededxSigmaCut)
2829 switch(ededxSigmaCut){
2831 fPIDnSigmaBelowElectronLine=-10;
2832 fPIDnSigmaAboveElectronLine=10;
2835 fPIDnSigmaBelowElectronLine=-5;
2836 fPIDnSigmaAboveElectronLine=5;
2839 fPIDnSigmaBelowElectronLine=-3;
2840 fPIDnSigmaAboveElectronLine=5;
2843 fPIDnSigmaBelowElectronLine=-4;
2844 fPIDnSigmaAboveElectronLine=5;
2847 fPIDnSigmaBelowElectronLine=-6;
2848 fPIDnSigmaAboveElectronLine=7;
2851 fPIDnSigmaBelowElectronLine=-4;
2852 fPIDnSigmaAboveElectronLine=4;
2855 fPIDnSigmaBelowElectronLine=-2.5;
2856 fPIDnSigmaAboveElectronLine=4;
2859 fPIDnSigmaBelowElectronLine=-2;
2860 fPIDnSigmaAboveElectronLine=3.5;
2863 AliError("TPCdEdxCutElectronLine not defined");
2869 ///________________________________________________________________________
2870 Bool_t AliConversionCuts::SetTPCdEdxCutPionLine(Int_t pidedxSigmaCut)
2873 switch(pidedxSigmaCut){
2875 fPIDnSigmaAbovePionLine=-10;
2876 fPIDnSigmaAbovePionLineHighPt=-10;
2879 fPIDnSigmaAbovePionLine=0;
2880 fPIDnSigmaAbovePionLineHighPt=-10;
2883 fPIDnSigmaAbovePionLine=1;
2884 fPIDnSigmaAbovePionLineHighPt=-10;
2887 fPIDnSigmaAbovePionLine=2.5;
2888 fPIDnSigmaAbovePionLineHighPt=-10;
2891 fPIDnSigmaAbovePionLine=0.5;
2892 fPIDnSigmaAbovePionLineHighPt=-10;
2895 fPIDnSigmaAbovePionLine=2.;
2896 fPIDnSigmaAbovePionLineHighPt=-10;
2899 fPIDnSigmaAbovePionLine=2.;
2900 fPIDnSigmaAbovePionLineHighPt=0.5;
2903 fPIDnSigmaAbovePionLine=3.5;
2904 fPIDnSigmaAbovePionLineHighPt=-10;
2907 fPIDnSigmaAbovePionLine=2.;
2908 fPIDnSigmaAbovePionLineHighPt=1.;
2911 fPIDnSigmaAbovePionLine=3.0; // We need a bit less tight cut on dE/dx
2912 fPIDnSigmaAbovePionLineHighPt=-10;
2915 AliError(Form("Warning: pidedxSigmaCut not defined %d",pidedxSigmaCut));
2920 ///________________________________________________________________________
2921 Bool_t AliConversionCuts::SetMinMomPiondEdxCut(Int_t piMomdedxSigmaCut)
2923 switch(piMomdedxSigmaCut){
2925 fPIDMinPnSigmaAbovePionLine=0.5;
2928 fPIDMinPnSigmaAbovePionLine=1.;
2931 fPIDMinPnSigmaAbovePionLine=1.5;
2934 fPIDMinPnSigmaAbovePionLine=20.;
2937 fPIDMinPnSigmaAbovePionLine=50.;
2940 fPIDMinPnSigmaAbovePionLine=0.3;
2943 fPIDMinPnSigmaAbovePionLine=0.25;
2946 fPIDMinPnSigmaAbovePionLine=0.4;
2949 fPIDMinPnSigmaAbovePionLine=0.2;
2952 AliError(Form("piMomdedxSigmaCut not defined %d",piMomdedxSigmaCut));
2957 ///________________________________________________________________________
2958 Bool_t AliConversionCuts::SetMaxMomPiondEdxCut(Int_t piMaxMomdedxSigmaCut)
2960 switch(piMaxMomdedxSigmaCut){
2962 fPIDMaxPnSigmaAbovePionLine=100.;
2965 fPIDMaxPnSigmaAbovePionLine=5.;
2968 fPIDMaxPnSigmaAbovePionLine=4.;
2971 fPIDMaxPnSigmaAbovePionLine=3.5;
2974 fPIDMaxPnSigmaAbovePionLine=3.;
2977 fPIDMaxPnSigmaAbovePionLine=7.;
2980 AliError(Form("piMaxMomdedxSigmaCut not defined %d",piMaxMomdedxSigmaCut));
2985 ///________________________________________________________________________
2986 Bool_t AliConversionCuts::SetLowPRejectionCuts(Int_t LowPRejectionSigmaCut)
2988 switch(LowPRejectionSigmaCut){
2990 fPIDnSigmaAtLowPAroundKaonLine=0;
2991 fPIDnSigmaAtLowPAroundProtonLine=0;
2992 fPIDnSigmaAtLowPAroundPionLine=0;
2993 fDoKaonRejectionLowP = kFALSE;
2994 fDoProtonRejectionLowP = kFALSE;
2995 fDoPionRejectionLowP = kFALSE;
2996 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
2999 fPIDnSigmaAtLowPAroundKaonLine=0.5;
3000 fPIDnSigmaAtLowPAroundProtonLine=0.5;
3001 fPIDnSigmaAtLowPAroundPionLine=0.5;
3002 fDoKaonRejectionLowP = kTRUE;
3003 fDoProtonRejectionLowP = kTRUE;
3004 fDoPionRejectionLowP = kTRUE;
3005 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
3008 fPIDnSigmaAtLowPAroundKaonLine=1;
3009 fPIDnSigmaAtLowPAroundProtonLine=1;
3010 fPIDnSigmaAtLowPAroundPionLine=1;
3011 fDoKaonRejectionLowP = kTRUE;
3012 fDoProtonRejectionLowP = kTRUE;
3013 fDoPionRejectionLowP = kTRUE;
3014 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
3017 fPIDnSigmaAtLowPAroundKaonLine=2.;
3018 fPIDnSigmaAtLowPAroundProtonLine=2.;
3019 fPIDnSigmaAtLowPAroundPionLine=2.;
3020 fDoKaonRejectionLowP = kTRUE;
3021 fDoProtonRejectionLowP = kTRUE;
3022 fDoPionRejectionLowP = kTRUE;
3023 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
3026 fPIDnSigmaAtLowPAroundKaonLine=0.;
3027 fPIDnSigmaAtLowPAroundProtonLine=0.;
3028 fPIDnSigmaAtLowPAroundPionLine=1;
3029 fDoKaonRejectionLowP = kFALSE;
3030 fDoProtonRejectionLowP = kFALSE;
3031 fDoPionRejectionLowP = kTRUE;
3032 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
3035 fPIDnSigmaAtLowPAroundKaonLine=0.;
3036 fPIDnSigmaAtLowPAroundProtonLine=0.;
3037 fPIDnSigmaAtLowPAroundPionLine=1.5;
3038 fDoKaonRejectionLowP = kFALSE;
3039 fDoProtonRejectionLowP = kFALSE;
3040 fDoPionRejectionLowP = kTRUE;
3041 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
3044 fPIDnSigmaAtLowPAroundKaonLine=0.;
3045 fPIDnSigmaAtLowPAroundProtonLine=0.;
3046 fPIDnSigmaAtLowPAroundPionLine=2.;
3047 fDoKaonRejectionLowP = kFALSE;
3048 fDoProtonRejectionLowP = kFALSE;
3049 fDoPionRejectionLowP = kTRUE;
3050 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
3053 fPIDnSigmaAtLowPAroundKaonLine=0.;
3054 fPIDnSigmaAtLowPAroundProtonLine=0.;
3055 fPIDnSigmaAtLowPAroundPionLine=0.5;
3056 fDoKaonRejectionLowP = kFALSE;
3057 fDoProtonRejectionLowP = kFALSE;
3058 fDoPionRejectionLowP = kTRUE;
3059 fPIDMinPPionRejectionLowP = fPIDMinPnSigmaAbovePionLine;
3062 AliError(Form("LowPRejectionSigmaCut not defined %d",LowPRejectionSigmaCut));
3067 ///________________________________________________________________________
3068 Bool_t AliConversionCuts::SetTOFElectronPIDCut(Int_t TOFelectronPID){
3070 switch(TOFelectronPID){
3072 fUseTOFpid = kFALSE;
3073 fTofPIDnSigmaBelowElectronLine=-100;
3074 fTofPIDnSigmaAboveElectronLine=100;
3078 fTofPIDnSigmaBelowElectronLine=-7;
3079 fTofPIDnSigmaAboveElectronLine=7;
3083 fTofPIDnSigmaBelowElectronLine=-5;
3084 fTofPIDnSigmaAboveElectronLine=5;
3088 fTofPIDnSigmaBelowElectronLine=-3;
3089 fTofPIDnSigmaAboveElectronLine=5;
3093 fTofPIDnSigmaBelowElectronLine=-2;
3094 fTofPIDnSigmaAboveElectronLine=3;
3098 fTofPIDnSigmaBelowElectronLine=-3;
3099 fTofPIDnSigmaAboveElectronLine=3;
3102 AliError(Form("TOFElectronCut not defined %d",TOFelectronPID));
3107 ///________________________________________________________________________
3108 Bool_t AliConversionCuts::SetQtMaxCut(Int_t QtMaxCut)
3113 fDoQtGammaSelection=kFALSE;
3153 AliError(Form("Warning: QtMaxCut not defined %d",QtMaxCut));
3158 ///________________________________________________________________________
3159 Bool_t AliConversionCuts::SetChi2GammaCut(Int_t chi2GammaCut)
3162 switch(chi2GammaCut){
3164 fChi2CutConversion = 100.;
3167 fChi2CutConversion = 50.;
3170 fChi2CutConversion = 30.;
3173 fChi2CutConversion = 200.;
3176 fChi2CutConversion = 500.;
3179 fChi2CutConversion = 100000.;
3182 fChi2CutConversion = 5.;
3185 fChi2CutConversion = 10.;
3188 fChi2CutConversion = 20.;
3191 fChi2CutConversion = 15.;
3194 AliError(Form("Warning: Chi2GammaCut not defined %d",chi2GammaCut));
3199 ///________________________________________________________________________
3200 Bool_t AliConversionCuts::SetPsiPairCut(Int_t psiCut) {
3204 fPsiPairCut = 10000; //
3207 fPsiPairCut = 0.1; //
3210 fPsiPairCut = 0.05; // Standard
3213 fPsiPairCut = 0.035; //
3216 fPsiPairCut = 0.2; //
3219 fPsiPairCut = 0.1; //
3220 fDo2DPsiPairChi2 = kTRUE;
3223 fPsiPairCut = 0.05; //
3224 fDo2DPsiPairChi2 = kTRUE;
3227 fPsiPairCut = 0.035; //
3228 fDo2DPsiPairChi2 = kTRUE;
3231 fPsiPairCut = 0.2; //
3232 fDo2DPsiPairChi2 = kTRUE; //
3235 fPsiPairCut = 0.5; //
3238 AliError(Form("PsiPairCut not defined %d",psiCut));
3244 ///________________________________________________________________________
3245 Bool_t AliConversionCuts::SetPhotonAsymmetryCut(Int_t doPhotonAsymmetryCut){
3247 switch(doPhotonAsymmetryCut){
3249 fDoPhotonAsymmetryCut=0;
3250 fMinPPhotonAsymmetryCut=100.;
3251 fMinPhotonAsymmetry=0.;
3254 fDoPhotonAsymmetryCut=1;
3255 fMinPPhotonAsymmetryCut=3.5;
3256 fMinPhotonAsymmetry=0.04;
3259 fDoPhotonAsymmetryCut=1;
3260 fMinPPhotonAsymmetryCut=3.5;
3261 fMinPhotonAsymmetry=0.06;
3264 fDoPhotonAsymmetryCut=1;
3265 fMinPPhotonAsymmetryCut=0.0;
3266 fMinPhotonAsymmetry=0.05;
3269 AliError(Form("PhotonAsymmetryCut not defined %d",doPhotonAsymmetryCut));
3272 fCuts[kdoPhotonAsymmetryCut]=doPhotonAsymmetryCut;
3275 ///________________________________________________________________________
3276 Bool_t AliConversionCuts::SetCosPAngleCut(Int_t cosCut) {
3286 fCosPAngleCut = 0.5;
3289 fCosPAngleCut = 0.75;
3292 fCosPAngleCut = 0.85;
3295 fCosPAngleCut = 0.88;
3298 fCosPAngleCut = 0.9;
3301 fCosPAngleCut = 0.95;
3304 AliError(Form("Cosine Pointing Angle cut not defined %d",cosCut));
3310 ///________________________________________________________________________
3311 Bool_t AliConversionCuts::SetSharedElectronCut(Int_t sharedElec) {
3315 fDoSharedElecCut = kFALSE;
3316 fDoPhotonQualitySelectionCut = kFALSE;
3317 fPhotonQualityCut = 0;
3320 fDoSharedElecCut = kTRUE;
3321 fDoPhotonQualitySelectionCut = kFALSE;
3322 fPhotonQualityCut = 0;
3325 fDoSharedElecCut = kFALSE;
3326 fDoPhotonQualitySelectionCut = kTRUE;
3327 fPhotonQualityCut = 1;
3330 fDoSharedElecCut = kFALSE;
3331 fDoPhotonQualitySelectionCut = kTRUE;
3332 fPhotonQualityCut = 2;
3335 fDoSharedElecCut = kFALSE;
3336 fDoPhotonQualitySelectionCut = kTRUE;
3337 fPhotonQualityCut = 3;
3340 AliError(Form("Shared Electron Cut not defined %d",sharedElec));
3346 ///________________________________________________________________________
3347 Bool_t AliConversionCuts::SetToCloseV0sCut(Int_t toClose) {
3351 fDoToCloseV0sCut = kFALSE;
3355 fDoToCloseV0sCut = kTRUE;
3359 fDoToCloseV0sCut = kTRUE;
3363 fDoToCloseV0sCut = kTRUE;
3367 AliError(Form("Shared Electron Cut not defined %d",toClose));
3372 ///________________________________________________________________________
3373 Bool_t AliConversionCuts::SetTRDElectronCut(Int_t TRDElectronCut)
3375 switch(TRDElectronCut){
3381 fPIDTRDEfficiency=0.1;
3385 fPIDTRDEfficiency=0.8;
3389 fPIDTRDEfficiency=0.9;
3392 AliError(Form("TRDElectronCut not defined %d",TRDElectronCut));
3399 ///________________________________________________________________________
3400 Bool_t AliConversionCuts::SetDCAZPhotonPrimVtxCut(Int_t DCAZPhotonPrimVtx){
3402 switch(DCAZPhotonPrimVtx){
3404 fDCAZPrimVtxCut = 1000;
3407 fDCAZPrimVtxCut = 10;
3410 fDCAZPrimVtxCut = 5;
3413 fDCAZPrimVtxCut = 4;
3416 fDCAZPrimVtxCut = 3;
3419 fDCAZPrimVtxCut = 2.5;
3422 fDCAZPrimVtxCut = 2;
3425 fDCAZPrimVtxCut = 1.5;
3428 fDCAZPrimVtxCut = 1;
3431 fDCAZPrimVtxCut = 0.5;
3434 cout<<"Warning: DCAZPhotonPrimVtx not defined "<<DCAZPhotonPrimVtx<<endl;
3440 ///________________________________________________________________________
3441 Bool_t AliConversionCuts::SetDCARPhotonPrimVtxCut(Int_t DCARPhotonPrimVtx){
3443 switch(DCARPhotonPrimVtx){
3445 fDCARPrimVtxCut = 1000;
3448 fDCARPrimVtxCut = 10;
3451 fDCARPrimVtxCut = 5;
3454 fDCARPrimVtxCut = 4;
3457 fDCARPrimVtxCut = 3;
3460 fDCARPrimVtxCut = 2.5;
3463 fDCARPrimVtxCut = 2;
3466 fDCARPrimVtxCut = 1.5;
3469 fDCARPrimVtxCut = 1;
3472 fDCARPrimVtxCut = 0.5;
3475 cout<<"Warning: DCARPhotonPrimVtx not defined "<<DCARPhotonPrimVtx<<endl;
3481 ///________________________________________________________________________
3482 Bool_t AliConversionCuts::SetInPlaneOutOfPlane(Int_t inOutPlane){
3486 fInPlaneOutOfPlane = 0; // No Event Plane
3489 fInPlaneOutOfPlane = 1; // In-Plane
3492 fInPlaneOutOfPlane = 2; // Out-Of-Plane
3495 cout<<"Warning: In-Plane or Out-Of-Plane not defined "<<inOutPlane<<endl;
3502 //-------------------------------------------------------------
3503 Double_t AliConversionCuts::GetCentrality(AliVEvent *event)
3504 { // Get Event Centrality
3506 AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
3508 AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
3510 if(fDetectorCentrality==0){
3511 if (fIsHeavyIon==2){
3512 return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
3514 return fESDCentrality->GetCentralityPercentile("V0M"); // default
3517 if(fDetectorCentrality==1){
3518 return fESDCentrality->GetCentralityPercentile("CL1");
3522 AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
3524 if(aodEvent->GetHeader()){return aodEvent->GetHeader()->GetCentrality();}
3529 //-------------------------------------------------------------
3530 Bool_t AliConversionCuts::IsCentralitySelected(AliVEvent *event, AliVEvent *fMCEvent)
3531 { // Centrality Selection
3532 if(!fIsHeavyIon)return kTRUE;
3534 if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
3535 else if(fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-100%
3537 Double_t centrality=GetCentrality(event);
3538 if(centrality<0)return kFALSE;
3540 Int_t centralityC=0;
3541 if (fModCentralityClass == 0){
3542 centralityC= Int_t(centrality/10);
3543 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
3547 else if (fModCentralityClass ==1){
3548 centralityC= Int_t(centrality);
3549 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
3551 } else return kFALSE;
3553 else if (fModCentralityClass ==2){
3554 centralityC= Int_t(centrality);
3555 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
3560 Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->GetNumberOfPrimaryTracks();
3561 Int_t PrimaryTracks10[10][2] =
3574 Int_t PrimaryTracks5a[10][2] =
3587 Int_t PrimaryTracks5b[10][2] =
3601 if(event->IsA()==AliESDEvent::Class()) column = 0;
3602 if(event->IsA()==AliAODEvent::Class()) column = 1;
3604 if (fModCentralityClass == 3){
3606 if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
3611 centralityC= Int_t(centrality/10);
3612 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
3617 else if (fModCentralityClass ==4){
3619 if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
3624 centralityC= Int_t(centrality);
3625 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
3627 } else return kFALSE;
3630 else if (fModCentralityClass ==5){
3632 if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
3637 centralityC= Int_t(centrality);
3638 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
3646 ///________________________________________________________________________
3647 Bool_t AliConversionCuts::VertexZCut(AliVEvent *event){
3648 // Cut on z position of primary vertex
3649 Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
3650 Double_t fVertexZSPD = 0;
3651 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
3653 fVertexZSPD = fESDEvent->GetPrimaryVertexSPD()->GetZ();
3655 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
3657 fVertexZSPD = fAODEvent->GetPrimaryVertexSPD()->GetZ();
3660 if(abs(fVertexZ)>fMaxVertexZ)return kFALSE;
3662 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
3663 ->GetTask("V0ReaderV1"))->GetPeriodName();
3664 if (periodName.CompareTo("LHC11h")==0){
3665 if (abs(fVertexZ-fVertexZSPD) > 0.1) return kFALSE;
3667 if (fIsHeavyIon == 2){
3668 if(fUtils->IsFirstEventInChunk(event)) return kFALSE;
3669 if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
3670 if(fUtils->IsPileUpEvent(event)) return kFALSE;
3675 ///________________________________________________________________________
3677 Int_t AliConversionCuts::GetNumberOfContributorsVtx(AliVEvent *event){
3678 // returns number of contributors to the vertex
3680 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
3682 if (fESDEvent->GetPrimaryVertex() != NULL){
3683 if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
3684 // cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
3685 return fESDEvent->GetPrimaryVertex()->GetNContributors();
3689 if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
3690 if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
3691 // cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
3692 return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
3694 AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
3695 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
3701 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
3703 if (fAODEvent->GetPrimaryVertex() != NULL){
3704 if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
3705 return fAODEvent->GetPrimaryVertex()->GetNContributors();
3708 if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
3709 if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
3710 return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
3712 AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
3717 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
3721 ///________________________________________________________________________
3723 Bool_t AliConversionCuts::IsTriggerSelected(AliVEvent *fInputEvent)
3726 AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
3727 // AliTRDTriggerAnalysis *trdSelection= new AliTRDTriggerAnalysis();
3728 // trdSelection->CalcTriggers(fInputEvent);
3730 UInt_t isSelected = AliVEvent::kAny;
3731 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->GetPeriodName();
3732 // cout << periodName.Data() << endl;
3734 if (fInputHandler==NULL) return kFALSE;
3735 if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
3737 TString firedTrigClass = fInputEvent->GetFiredTriggerClasses();
3738 if (!fTriggerSelectedManually){
3739 if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
3741 if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
3742 else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
3743 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 ) {
3744 fOfflineTriggerMask = AliVEvent::kINT7;
3745 // cout << "will take kINT7 as trigger mask" << endl;
3747 else fOfflineTriggerMask = AliVEvent::kMB;
3750 // Get the actual offline trigger mask for the event and AND it with the
3751 // requested mask. If no mask requested select by default the event.
3752 // if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
3753 // else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
3755 if (fOfflineTriggerMask){
3756 isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
3757 if (isSelected && !fPreSelCut){
3758 // if (fSpecialTriggerName.Contains("kTRD")){ // make special selection for TRD trigger
3759 // Bool_t bTRDHasFiredConfirmed= 0; // bool whether the TRD has triggered and has been read out due to that trigger & should have triggered
3760 // Bool_t bTRDClassContainedInTriggerList= 1; //check whether the trigger list contains the requested trigger
3761 // if (fSpecialSubTrigger>0){
3762 // if (fSpecialSubTriggerName.Contains("HSE")){
3763 // bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHSE);
3764 // } else if (fSpecialSubTriggerName.Contains("HJT")){
3765 // bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHJT);
3766 // } else if (fSpecialSubTriggerName.Contains("HEE")){
3767 // bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHEE);
3768 // } else if (fSpecialSubTriggerName.Contains("HQU")){
3769 // bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHQU);
3771 // if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) bTRDClassContainedInTriggerList = 0;
3773 // bTRDHasFiredConfirmed = trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHQU) || trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHSE) || trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHJT) || trdSelection->HasTriggeredConfirmed(AliTRDTriggerAnalysis::kHEE);
3775 // if (!bTRDHasFiredConfirmed || !bTRDClassContainedInTriggerList) isSelected = 0;
3776 // } else { // more general condition for all other sub-triggers
3777 // if (fSpecialTriggerName.Contains("kEMCE"))cout << fSpecialTriggerName.Data() << "\t" <<fSpecialSubTriggerName.Data()<< endl;
3778 if (fSpecialSubTrigger>0){
3779 if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
3781 // if (fSpecialTriggerName.Contains("kEMCE"))cout <<firedTrigClass << endl;
3786 fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
3790 if (fIsSDDFired) hTriggerClass->Fill(33);
3791 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
3792 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
3793 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
3794 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
3795 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
3796 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
3797 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
3798 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
3799 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
3800 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
3801 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
3802 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
3803 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
3804 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
3805 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
3806 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
3807 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
3808 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
3809 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
3810 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
3811 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
3812 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
3813 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
3814 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
3815 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
3816 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
3817 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
3818 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
3819 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
3820 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
3821 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
3822 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
3823 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
3824 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
3825 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
3826 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
3827 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
3828 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
3829 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
3830 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
3831 if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
3834 if(hTriggerClassSelected && isSelected){
3835 if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
3836 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
3837 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
3838 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
3839 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
3840 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
3841 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
3842 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
3843 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
3844 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
3845 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
3846 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
3847 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
3848 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
3849 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
3850 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
3851 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
3852 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
3853 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
3854 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
3855 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
3856 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
3857 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
3858 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
3859 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
3860 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
3861 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
3862 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
3863 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
3864 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
3865 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
3866 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
3867 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
3868 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
3869 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
3870 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
3871 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
3872 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
3873 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
3874 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
3875 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
3878 if(!isSelected)return kFALSE;
3884 ///________________________________________________________________________
3885 Int_t AliConversionCuts::GetFirstTPCRow(Double_t radius){
3886 // Get first TPC row
3887 Int_t firstTPCRow = 0;
3888 Double_t radiusI = 84.8;
3889 Double_t radiusO = 134.6;
3890 Double_t radiusOB = 198.;
3891 Double_t rSizeI = 0.75;
3892 Double_t rSizeO = 1.;
3893 Double_t rSizeOB = 1.5;
3897 if(radius <= radiusI){
3900 if(radius>radiusI && radius<=radiusO){
3901 firstTPCRow = (Int_t)((radius-radiusI)/rSizeI);
3903 if(radius>radiusO && radius<=radiusOB){
3904 firstTPCRow = (Int_t)(nClsI+(radius-radiusO)/rSizeO);
3907 if(radius>radiusOB){
3908 firstTPCRow =(Int_t)(nClsIO+(radius-radiusOB)/rSizeOB);
3914 Bool_t AliConversionCuts::CosinePAngleCut(const AliConversionPhotonBase * photon, AliVEvent * event) const {
3915 ///Check if passes cosine of pointing angle cut
3916 if(GetCosineOfPointingAngle(photon, event) < fCosPAngleCut){
3922 Double_t AliConversionCuts::GetCosineOfPointingAngle( const AliConversionPhotonBase * photon, AliVEvent * event) const{
3923 // calculates the pointing angle of the recalculated V0
3925 Double_t momV0[3] = {0,0,0};
3926 if(event->IsA()==AliESDEvent::Class()){
3927 AliESDEvent *esdEvent = dynamic_cast<AliESDEvent*>(event);
3928 if(!esdEvent) return -999;
3929 AliESDv0 *v0 = esdEvent->GetV0(photon->GetV0Index());
3930 if(!v0) return -999;
3931 v0->GetPxPyPz(momV0[0],momV0[1],momV0[2]);
3933 if(event->IsA()==AliAODEvent::Class()){
3934 momV0[0] = photon->GetPx();
3935 momV0[1] = photon->GetPy();
3936 momV0[2] = photon->GetPz();
3939 //Double_t momV0[3] = { photon->GetPx(), photon->GetPy(), photon->GetPz() }; //momentum of the V0
3940 Double_t PosV0[3] = { photon->GetConversionX() - event->GetPrimaryVertex()->GetX(),
3941 photon->GetConversionY() - event->GetPrimaryVertex()->GetY(),
3942 photon->GetConversionZ() - event->GetPrimaryVertex()->GetZ() }; //Recalculated V0 Position vector
3944 Double_t momV02 = momV0[0]*momV0[0] + momV0[1]*momV0[1] + momV0[2]*momV0[2];
3945 Double_t PosV02 = PosV0[0]*PosV0[0] + PosV0[1]*PosV0[1] + PosV0[2]*PosV0[2];
3948 Double_t cosinePointingAngle = -999;
3949 if(momV02*PosV02 > 0.0)
3950 cosinePointingAngle = (PosV0[0]*momV0[0] + PosV0[1]*momV0[1] + PosV0[2]*momV0[2] ) / TMath::Sqrt(momV02 * PosV02);
3952 return cosinePointingAngle;
3955 ///________________________________________________________________________
3956 Bool_t AliConversionCuts::PsiPairCut(const AliConversionPhotonBase * photon) const {
3958 if (fDo2DPsiPairChi2){
3959 if (abs(photon->GetPsiPair()) < -fPsiPairCut/fChi2CutConversion*photon->GetChi2perNDF() + fPsiPairCut ){
3965 if(abs(photon->GetPsiPair()) > fPsiPairCut){
3971 ///________________________________________________________________________
3972 TString AliConversionCuts::GetCutNumber(){
3973 // returns TString with current cut number
3975 for(Int_t ii=0;ii<kNCuts;ii++){
3976 a.Append(Form("%d",fCuts[ii]));
3981 ///________________________________________________________________________
3982 void AliConversionCuts::FillElectonLabelArray(AliAODConversionPhoton* photon, Int_t nV0){
3984 Int_t posLabel = photon->GetTrackLabelPositive();
3985 Int_t negLabel = photon->GetTrackLabelNegative();
3987 fElectronLabelArray[nV0*2] = posLabel;
3988 fElectronLabelArray[(nV0*2)+1] = negLabel;
3990 ///________________________________________________________________________
3991 Bool_t AliConversionCuts::RejectSharedElectronV0s(AliAODConversionPhoton* photon, Int_t nV0, Int_t nV0s){
3993 Int_t posLabel = photon->GetTrackLabelPositive();
3994 Int_t negLabel = photon->GetTrackLabelNegative();
3996 for(Int_t i = 0; i<nV0s*2;i++){
3997 if(i==nV0*2) continue;
3998 if(i==(nV0*2)+1) continue;
3999 if(fElectronLabelArray[i] == posLabel){
4001 if(fElectronLabelArray[i] == negLabel){
4007 ///________________________________________________________________________
4008 Bool_t AliConversionCuts::RejectToCloseV0s(AliAODConversionPhoton* photon, TList *photons, Int_t nV0){
4011 Double_t posX = photon->GetConversionX();
4012 Double_t posY = photon->GetConversionY();
4013 Double_t posZ = photon->GetConversionZ();
4015 for(Int_t i = 0;i<photons->GetEntries();i++){
4016 if(nV0 == i) continue;
4017 AliAODConversionPhoton *photonComp = (AliAODConversionPhoton*) photons->At(i);
4018 Double_t posCompX = photonComp->GetConversionX();
4019 Double_t posCompY = photonComp->GetConversionY();
4020 Double_t posCompZ = photonComp->GetConversionZ();
4022 Double_t dist = pow((posX - posCompX),2)+pow((posY - posCompY),2)+pow((posZ - posCompZ),2);
4024 if(dist < fminV0Dist*fminV0Dist){
4025 if(photon->GetChi2perNDF() < photonComp->GetChi2perNDF()) return kTRUE;
4033 ///________________________________________________________________________
4034 void AliConversionCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent){
4036 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"))->GetPeriodName();
4039 if(fNotRejectedStart){
4040 delete[] fNotRejectedStart;
4041 fNotRejectedStart = NULL;
4043 if(fNotRejectedEnd){
4044 delete[] fNotRejectedEnd;
4045 fNotRejectedEnd = NULL;
4047 if(fGeneratorNames){
4048 delete[] fGeneratorNames;
4049 fGeneratorNames = NULL;
4052 if(rejection == 0) return; // No Rejection
4054 AliGenCocktailEventHeader *cHeader = 0x0;
4055 AliAODMCHeader *cHeaderAOD = 0x0;
4056 Bool_t headerFound = kFALSE;
4057 AliStack *fMCStack = 0x0;
4058 TClonesArray *fMCStackAOD = 0x0;
4059 if(MCEvent->IsA()==AliMCEvent::Class()){
4060 cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
4061 if(cHeader) headerFound = kTRUE;
4062 if(dynamic_cast<AliMCEvent*>(MCEvent))fMCStack = dynamic_cast<AliStack*>(dynamic_cast<AliMCEvent*>(MCEvent)->Stack());
4064 if(MCEvent->IsA()==AliAODEvent::Class()){ // MCEvent is a AODEvent in case of AOD
4065 cHeaderAOD = dynamic_cast<AliAODMCHeader*>(MCEvent->FindListObject(AliAODMCHeader::StdBranchName()));
4066 fMCStackAOD = dynamic_cast<TClonesArray*>(MCEvent->FindListObject(AliAODMCParticle::StdBranchName()));
4069 if(cHeaderAOD) headerFound = kTRUE;
4073 TList *genHeaders = 0x0;
4074 if(cHeader) genHeaders = cHeader->GetHeaders();
4076 genHeaders = cHeaderAOD->GetCocktailHeaders();
4077 if(genHeaders->GetEntries()==1){
4078 SetRejectExtraSignalsCut(0);
4082 AliGenEventHeader* gh = 0;
4084 Int_t firstindexA = 0;
4085 Int_t lastindexA = -1;
4086 if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
4087 if(rejection == 2){ // TList of Headers Names
4088 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
4089 gh = (AliGenEventHeader*)genHeaders->At(i);
4090 TString GeneratorName = gh->GetName();
4091 lastindexA = lastindexA + gh->NProduced();
4092 // cout << i << "\t" << GeneratorName.Data() << endl;
4093 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
4094 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
4095 if(GeneratorName.CompareTo(GeneratorInList) == 0){
4096 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
4098 if (fMCStack->Particle(firstindexA)->GetPdgCode() == fAddedSignalPDGCode ) {
4099 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
4100 if (gh->NProduced() > 10 && fMCStack->Particle(firstindexA+10)->GetPdgCode() == fAddedSignalPDGCode ){
4101 // cout << "cond 1: "<< fnHeaders << endl;
4107 // cout << "cond 2: " << fnHeaders << endl;
4114 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA));
4115 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
4116 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
4117 if (gh->NProduced() > 10){
4118 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA+10));
4119 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
4120 // cout << "cond 1: " << fnHeaders << endl;
4127 // cout << "cond 2: " << fnHeaders << endl;
4135 // cout << "cond 3: "<< fnHeaders << endl;
4140 firstindexA = firstindexA + gh->NProduced();
4143 // cout << "number of headers: " <<fnHeaders << endl;
4145 fNotRejectedStart = new Int_t[fnHeaders];
4146 fNotRejectedEnd = new Int_t[fnHeaders];
4147 fGeneratorNames = new TString[fnHeaders];
4149 if(rejection == 1 || rejection == 3){
4150 fNotRejectedStart[0] = 0;
4151 fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
4152 fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
4156 Int_t firstindex = 0;
4157 Int_t lastindex = -1;
4160 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
4161 gh = (AliGenEventHeader*)genHeaders->At(i);
4162 TString GeneratorName = gh->GetName();
4163 lastindex = lastindex + gh->NProduced();
4164 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
4165 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
4166 // cout << i << "\t" << GeneratorName.Data() << endl;
4167 if(GeneratorName.CompareTo(GeneratorInList) == 0){
4168 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
4170 if (fMCStack->Particle(firstindex)->GetPdgCode() == fAddedSignalPDGCode ) {
4171 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
4172 // cout << "produced " << gh->NProduced() << " with box generator" << endl;
4173 if (gh->NProduced() > 10 && fMCStack->Particle(firstindex+10)->GetPdgCode() == fAddedSignalPDGCode){
4174 // cout << "one of them was a pi0 or eta" << endl;
4175 fNotRejectedStart[number] = firstindex;
4176 fNotRejectedEnd[number] = lastindex;
4177 fGeneratorNames[number] = GeneratorName;
4179 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
4183 fNotRejectedStart[number] = firstindex;
4184 fNotRejectedEnd[number] = lastindex;
4185 fGeneratorNames[number] = GeneratorName;
4192 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex));
4193 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
4194 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
4195 if (gh->NProduced() > 10) {
4196 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex+10));
4197 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
4198 fNotRejectedEnd[number] = lastindex;
4199 fNotRejectedStart[number] = firstindex;
4200 fGeneratorNames[number] = GeneratorName;
4206 fNotRejectedStart[number] = firstindex;
4207 fNotRejectedEnd[number] = lastindex;
4208 fGeneratorNames[number] = GeneratorName;
4216 fNotRejectedStart[number] = firstindex;
4217 fNotRejectedEnd[number] = lastindex;
4218 fGeneratorNames[number] = GeneratorName;
4219 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
4226 firstindex = firstindex + gh->NProduced();
4228 // for (Int_t i = 0; i < number; i++){
4229 // cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
4232 } else { // No Cocktail Header Found
4233 fNotRejectedStart = new Int_t[1];
4234 fNotRejectedEnd = new Int_t[1];
4237 fNotRejectedStart[0] = 0;
4238 fNotRejectedEnd[0] = static_cast<AliMCEvent*>(MCEvent)->Stack()->GetNprimary()-1;
4239 fGeneratorNames = new TString[1];
4240 fGeneratorNames[0] = "NoCocktailGeneratorFound";
4242 AliGenPythiaEventHeader *mcHeaderPythia = dynamic_cast<AliGenPythiaEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
4243 if (mcHeaderPythia) fGeneratorNames[0] = "NoCocktailGeneratorFound_Pythia";
4244 AliGenDPMjetEventHeader *mcHeaderPhojet = dynamic_cast<AliGenDPMjetEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
4245 if (mcHeaderPhojet) fGeneratorNames[0] = "NoCocktailGeneratorFound_Phojet";
4246 AliGenHijingEventHeader *mcHeaderHijing = dynamic_cast<AliGenHijingEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
4247 if (mcHeaderHijing) fGeneratorNames[0] = "NoCocktailGeneratorFound_Hijing";
4249 SetRejectExtraSignalsCut(0);
4254 //_________________________________________________________________________
4255 Int_t AliConversionCuts::IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
4257 // Not Accepted == kFALSE == 0
4258 // Accepted == kTRUE == 1
4259 // FirstHeader == kTRUE == 3
4260 if(index < 0) return 0; // No Particle
4262 // if (index == 100){
4263 // cout << "possible headers" << endl;
4264 // for(Int_t i = 0;i<fnHeaders;i++){
4265 // cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
4269 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
4270 if( index >= MCStack->GetNprimary()){ // Secondary Particle
4271 if( ((TParticle*)MCStack->Particle(index))->GetMother(0) < 0) return 1; // Secondary Particle without Mother??
4272 return IsParticleFromBGEvent(((TParticle*)MCStack->Particle(index))->GetMother(0),MCStack,InputEvent);
4274 for(Int_t i = 0;i<fnHeaders;i++){
4275 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
4277 if(i == 0) accepted = 2; // MB Header
4281 else if(InputEvent->IsA()==AliAODEvent::Class()){
4282 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
4283 if (AODMCTrackArray){
4284 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
4285 if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
4286 if(!aodMCParticle->IsPrimary()){
4287 if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
4288 return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
4290 index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
4291 for(Int_t i = 0;i<fnHeaders;i++){
4292 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
4294 if(i == 0) accepted = 2; // MB Header
4303 //_________________________________________________________________________
4304 Int_t AliConversionCuts::IsEventAcceptedByConversionCut(AliConversionCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon){
4306 if ( !IsTriggerSelected(InputEvent) )
4309 if(isHeavyIon != 0 && !(IsCentralitySelected(InputEvent,MCEvent)))
4310 return 1; // Check Centrality --> Not Accepted => eventQuality = 1
4313 if(isHeavyIon == 0 && GetIsFromPileup()){
4314 if(InputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
4316 return 6; // Check Pileup --> Not Accepted => eventQuality = 6
4320 Bool_t hasV0And = ReaderCuts->HasV0AND();
4321 Bool_t isSDDFired = ReaderCuts->IsSDDFired();
4322 if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !MCEvent)
4323 return 7; // With SDD requested but no fired
4325 if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
4326 return 8; // V0AND requested but no fired
4328 if(hCentrality)hCentrality->Fill(GetCentrality(InputEvent));
4329 if(hCentralityVsNumberOfPrimaryTracks)
4330 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(InputEvent),
4331 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
4332 ->GetTask("V0ReaderV1"))->GetNumberOfPrimaryTracks());
4337 //_________________________________________________________________________
4338 Float_t AliConversionCuts::GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
4339 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") ||
4340 period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.CompareTo("LHC14b2") == 0 )) return 1.;
4343 for (Int_t i = 0; i < fnHeaders; i++){
4344 if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
4345 if (fGeneratorNames[i].CompareTo("Pythia") == 0){
4347 } else if (fGeneratorNames[i].CompareTo("DPMJET") == 0){
4349 } else if (fGeneratorNames[i].CompareTo("HIJING") == 0 ||
4350 fGeneratorNames[i].CompareTo("Hijing") == 0 ||
4351 fGeneratorNames[i].Contains("hijing")){
4353 } else if (fGeneratorNames[i].CompareTo("BOX") == 0){
4355 } else if (fGeneratorNames[i].CompareTo("PARAM") == 0){
4357 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound") == 0){
4359 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Pythia") == 0){
4361 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Phojet") == 0){
4363 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Hijing") == 0){
4366 if (period.Contains("LHC13d2") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.Contains("LHC14a1") || period.CompareTo("LHC14b2") == 0 ){
4371 if (kCaseGen == 0) return 1;
4374 Double_t mesonPt = 0;
4375 Double_t mesonMass = 0;
4377 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
4378 mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
4379 mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
4380 PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
4382 else if(InputEvent->IsA()==AliAODEvent::Class()){
4383 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
4384 if (AODMCTrackArray){
4385 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
4386 mesonPt = aodMCParticle->Pt();
4387 mesonMass = aodMCParticle->GetCalcMass();
4388 PDGCode = aodMCParticle->GetPdgCode();
4394 Float_t functionResultMC = 1.;
4395 if (kCaseGen == 1){ // Pythia 6
4396 Float_t dNdyMC = 2.1462;
4397 Float_t nMC = 7.06055;
4398 Float_t tMC = 0.12533;
4399 if ( PDGCode == 111){
4403 } else if ( PDGCode == 221){
4408 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);
4409 } else if (kCaseGen == 2){ // Phojet
4410 Float_t dNdyMC = 2.35978;
4411 Float_t nMC = 6.81795;
4412 Float_t tMC = 0.11492;
4413 if ( PDGCode == 111){
4417 } else if ( PDGCode == 221){
4422 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);
4423 } else if (kCaseGen == 4){ // BOX generators pp
4424 // functionResultMC = 1./sqrt(1.-mesonMass*mesonMass/((mesonMass*mesonMass+mesonPt*mesonPt)*cosh(mesonY)*cosh(mesonY)));
4425 Float_t a = 0.23437;
4427 Float_t c = -1430.5863;
4428 Float_t d = -0.6966624;
4429 Float_t e = 252.3742;
4430 if ( PDGCode == 111){
4436 } else if ( PDGCode == 221){
4443 functionResultMC = a*TMath::Power(mesonPt,-1.*(b+c/(TMath::Power(mesonPt,d)+e)))*1./mesonPt *1./1.6 *1./(2.* TMath::Pi());
4444 // cout << functionResultMC << endl;
4445 } else if (kCaseGen == 3 ){ // HIJING
4446 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
4447 functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
4449 if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
4450 functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
4452 if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
4453 functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
4457 Float_t functionResultData = 1;
4458 if (kCaseGen == 1 || kCaseGen == 2 || kCaseGen == 4 ){
4459 Float_t dNdyData = 2.2328;
4460 Float_t nData = 7.1473;
4461 Float_t tData = 0.1346;
4462 if ( PDGCode == 111){
4466 } else if ( PDGCode == 221){
4467 dNdyData = 0.38992; //be careful this fit is not optimal, eta in data still has problems
4471 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);
4472 // cout << functionResultData << endl;
4474 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
4475 functionResultData = fFitDataPi0->Eval(mesonPt);
4477 if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
4478 functionResultData = fFitDataEta->Eval(mesonPt);
4480 if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
4481 functionResultData = fFitDataK0s->Eval(mesonPt);
4486 Double_t weight = 1;
4487 if (PDGCode == 111 || PDGCode == 221){
4488 if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
4489 weight = functionResultData/functionResultMC;
4490 if ( kCaseGen == 3){
4491 if (PDGCode == 111){
4492 if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
4496 if (PDGCode == 221){
4497 if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
4502 if (!isfinite(functionResultData)) weight = 1.;
4503 if (!isfinite(weight)) weight = 1.;
4505 } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
4506 weight = functionResultMC;
4509 // if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6 && PDGCode == 111){
4510 // cout << period.Data() << "\t" << kCaseGen << "\t" <<fModCentralityClass<< "\t" <<fCentralityMin<< "\t" <<fCentralityMax << "\t" << mesonPt << "\t" <<mesonMass<< "\t"<<functionResultData << "\t"<< functionResultMC << "\t" << weight <<endl;
4514 ///________________________________________________________________________
4515 AliConversionCuts* AliConversionCuts::GetStandardCuts2010PbPb(){
4516 //Create and return standard 2010 PbPb cuts
4517 AliConversionCuts *cuts=new AliConversionCuts("StandardCuts2010PbPb","StandardCuts2010PbPb");
4518 if(!cuts->InitializeCutsFromCutString("100000204209297002322000000")){
4519 cout<<"Warning: Initialization of Standardcuts2010PbPb failed"<<endl;}
4523 ///________________________________________________________________________
4524 AliConversionCuts* AliConversionCuts::GetStandardCuts2010pp(){
4525 //Create and return standard 2010 PbPb cuts
4526 AliConversionCuts *cuts=new AliConversionCuts("StandardCuts2010pp","StandardCuts2010pp");
4527 if(!cuts->InitializeCutsFromCutString("000001100209366300380000000")){
4528 cout<<"Warning: Initialization of Standardcuts2010pp failed"<<endl;}
4531 ///________________________________________________________________________
4532 void AliConversionCuts::GetCorrectEtaShiftFromPeriod(TString periodName){
4534 if(periodName.CompareTo("LHC12g") == 0 || //pilot run 2012
4535 periodName.CompareTo("LHC13b") == 0 || //mainly minimum bias
4536 periodName.CompareTo("LHC13c") == 0 || //mainly minimum bias
4537 periodName.CompareTo("LHC13d") == 0 || //mainly triggered
4538 periodName.CompareTo("LHC13e") == 0 || //mainly triggered
4539 periodName.CompareTo("LHC13c3") == 0 || //MC Starlight, anchor LHC13d+e
4540 periodName.CompareTo("LHC13c2") == 0 || //MC Starlight, coherent J/Psi, UPC muon anchor LHC13d+e
4541 periodName.CompareTo("LHC13b4") == 0 || //MC Pythia 6 (Jet-Jet), anchor LHC13b
4542 periodName.CompareTo("LHC13b2_fix_1") == 0 || //MC DPMJET, anchr LHC13b+c
4543 periodName.CompareTo("LHC13b2_efix_p1") == 0 || //MC DPMJET, anchr LHC13b+c
4544 periodName.CompareTo("LHC13b2_efix_p2") == 0 || //MC DPMJET, anchr LHC13b+c
4545 periodName.CompareTo("LHC13b2_efix_p3") == 0 || //MC DPMJET, anchr LHC13b+c
4546 periodName.CompareTo("LHC13b2_efix_p4") == 0 || //MC DPMJET, anchr LHC13b+c
4547 periodName.CompareTo("LHC13e7") == 0 || //MC DPMJET, anchr LHC13b+c
4548 periodName.CompareTo("LHC13b3") == 0 || //MC HIJING, weighted to number of events per run, anchor LHC13b
4549 periodName.CompareTo("LHC13b2") == 0 || // MC DPMJET, wrong energy, anchor LHC13b
4550 periodName.CompareTo("LHC13b2_plus") == 0 || // MC DPMJET, weighted to number event per run, anchor LHC13b
4551 periodName.CompareTo("LHC13c1_bis") == 0 || // MC AMPT fast generation, pT hardbin, anchor ?
4552 periodName.CompareTo("LHC13c1") == 0 || // MC AMPT fast generation, anchor ?
4553 periodName.CompareTo("LHC13b1") == 0 || // MC DPMJET, fragments, with fixed label 0, anchor LHC12g
4554 periodName.CompareTo("LHC12g4b_fix") == 0 || // MC DPMJET, with fixed label 0, anchor LHC12g
4555 periodName.CompareTo("LHC12g1_fix") == 0 || // MC ?, with fixed label 0, anchor LHC12g
4556 periodName.CompareTo("LHC12g4c") == 0 || // MC DPMJET, shifted vertex runs, anchor LHC12g
4557 periodName.CompareTo("LHC12h6") == 0 || // MC muon cocktail, anchor LHC12g
4558 periodName.CompareTo("LHC12g4b") == 0 || // MC DPMJET 3rd iteration, anchor LHC12g
4559 periodName.CompareTo("LHC12g4a") == 0 || // MC DPMJET improved, anchor LHC12g
4560 periodName.CompareTo("LHC12g4") == 0 || // MC DPMJET, anchor LHC12g
4561 periodName.CompareTo("LHC12g5") == 0 || // MC PHOJET, anchor LHC12g
4562 periodName.CompareTo("LHC12g2") == 0 || // MC Starlight background, anchor LHC12g
4563 periodName.CompareTo("LHC12g1") == 0 ) // MC ?, anchor LHC12g
4565 printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
4566 SetEtaShift(-0.465);
4568 else if(periodName.CompareTo("LHC13f") == 0 ||
4569 periodName.CompareTo("LHC13c6b") == 0 ||// MC Jpsi -> mumu, anchor LHC13f
4570 periodName.CompareTo("LHC13c5") == 0 || //MC Starlight, gamma gamma UPC muon, anchor LHC13f
4571 periodName.CompareTo("LHC13c4") == 0 )//MC Starlight, coherent JPsi, UPC muon, anchor LHC13f
4573 printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
4574 SetEtaShift(+0.465);
4576 else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
4579 ///________________________________________________________________________
4580 Bool_t AliConversionCuts::InPlaneOutOfPlaneCut(Double_t photonPhi, Double_t eventPlaneAngle, Bool_t fill){
4582 //GetPhotonPhi() 0-2 Pi //eventPlaneAngle -1pi-1pi
4583 eventPlaneAngle=eventPlaneAngle+TMath::Pi();
4584 Double_t gammaToEPAngle = eventPlaneAngle-photonPhi;
4585 if(gammaToEPAngle < 0) gammaToEPAngle=gammaToEPAngle+2*TMath::Pi();
4586 gammaToEPAngle = gammaToEPAngle-TMath::Pi(); // angle from -pi +pi
4588 if(!fInPlaneOutOfPlane){
4589 if(fill&&hEventPlanePhi)hEventPlanePhi->Fill(gammaToEPAngle);
4592 else if(fInPlaneOutOfPlane == 1){
4593 if(abs(gammaToEPAngle)<=0.25*TMath::Pi() || abs(gammaToEPAngle)>=0.75*TMath::Pi()){
4594 if(fill&&hEventPlanePhi)hEventPlanePhi->Fill(gammaToEPAngle);
4599 else if(fInPlaneOutOfPlane == 2){
4600 if(abs(gammaToEPAngle)>0.25*TMath::Pi() && abs(gammaToEPAngle)<0.75*TMath::Pi()){
4601 if(fill&&hEventPlanePhi)hEventPlanePhi->Fill(gammaToEPAngle);
4610 ///________________________________________________________________________
4611 UChar_t AliConversionCuts::DeterminePhotonQualityAOD(AliAODConversionPhoton* photon, AliVEvent* eventDummy){
4613 AliAODTrack * negTrack = static_cast<AliAODTrack*>(GetTrack(eventDummy, photon->GetTrackLabelNegative()));
4614 AliAODTrack * posTrack = static_cast<AliAODTrack*>(GetTrack(eventDummy, photon->GetTrackLabelPositive()));
4616 if(!negTrack || !posTrack) {
4619 if(negTrack->Charge() == posTrack->Charge()){
4622 Int_t nClusterITSneg = negTrack->GetITSNcls();
4623 Int_t nClusterITSpos = posTrack->GetITSNcls();
4624 // cout << nClusterITSneg << "\t" << nClusterITSpos <<endl;
4626 if (nClusterITSneg > 1 && nClusterITSpos > 1){
4628 } else if (nClusterITSneg > 1 || nClusterITSpos > 1){