AliPhysics  a8fcd8c (a8fcd8c)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliConvEventCuts.cxx
Go to the documentation of this file.
1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Authors: Friederike Bock, Daniel Muehlheim *
5 * Version 1.0 *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15 
17 //---------------------------------------------
18 // Class handling all kinds of selection cuts for
19 // Gamma Conversion analysis
20 //---------------------------------------------
22 
23 #include "AliConvEventCuts.h"
24 
25 #include "AliAODTrack.h"
26 #include "AliESDtrack.h"
27 #include "AliAnalysisManager.h"
28 #include "AliInputEventHandler.h"
29 #include "AliMCEventHandler.h"
30 #include "AliAODHandler.h"
31 #include "TH1.h"
32 #include "TH2.h"
33 #include "TF1.h"
34 #include "TObjString.h"
35 #include "AliMCEvent.h"
36 #include "AliAODEvent.h"
37 #include "AliESDEvent.h"
38 #include "AliCentrality.h"
39 #include "AliMultSelection.h"
40 #include "TList.h"
41 #include "TFile.h"
42 #include "AliLog.h"
43 #include "AliGenCocktailEventHeader.h"
44 #include "AliGenDPMjetEventHeader.h"
45 #include "AliGenPythiaEventHeader.h"
46 #include "AliGenHijingEventHeader.h"
47 #include "AliTriggerAnalysis.h"
48 #include "AliV0ReaderV1.h"
49 #include "AliVCaloCells.h"
50 #include "AliAODMCParticle.h"
51 #include "AliAODMCHeader.h"
52 #include "AliEMCALTriggerPatchInfo.h"
53 
54 class iostream;
55 
56 using namespace std;
57 
59 ClassImp(AliConvEventCuts)
61 
62 
63 const char* AliConvEventCuts::fgkCutNames[AliConvEventCuts::kNCuts] = {
64  "HeavyIon", //0
65  "CentralityMin", //1
66  "CentralityMax", //2
67  "SelectSpecialTrigger", //3
68  "SelectSpecialSubTriggerClass", //4
69  "RemovePileUp", //5
70  "RejectExtraSignals", //6
71  "VertexCut", //7
72 };
73 
74 
75 //________________________________________________________________________
76 AliConvEventCuts::AliConvEventCuts(const char *name,const char *title) :
77  AliAnalysisCuts(name,title),
78  fHistograms(NULL),
79  fHeaderList(NULL),
80  fDoLightOutput(kFALSE),
81  fEventQuality(-1),
82  fIsHeavyIon(0),
83  fDetectorCentrality(0),
84  fModCentralityClass(0),
85  fEnableVertexCut(kTRUE),
86  fMaxVertexZ(10),
87  fCentralityMin(0),
88  fCentralityMax(0),
89  fMultiplicityMethod(0),
90  fSpecialTrigger(0),
91  fSpecialSubTrigger(0),
92  fRemovePileUp(kFALSE),
93  fPastFutureRejectionLow(0),
94  fPastFutureRejectionHigh(0),
95  fDoPileUpRejectV0MTPCout(0),
96  fFPileUpRejectV0MTPCout(0),
97  fRejectExtraSignals(0),
98  fOfflineTriggerMask(0),
99  fHasV0AND(kTRUE),
100  fIsSDDFired(kTRUE),
101  fRandom(0),
102  fnHeaders(0),
103  fNotRejectedStart(NULL),
104  fNotRejectedEnd(NULL),
105  fGeneratorNames(NULL),
106  fPeriodEnum(kNoPeriod),
107  fEnergyEnum(kUnset),
108  fCutString(NULL),
109  fCutStringRead(""),
110  fUtils(NULL),
111  fEtaShift(0.0),
112  fDoEtaShift(kFALSE),
113  fDoCentralityFlat(0),
114  fPathWeightsFlatCent(""),
115  fNameHistoNotFlatCentrality(""),
116  fDoReweightHistoMCPi0(kFALSE),
117  fDoReweightHistoMCEta(kFALSE),
118  fDoReweightHistoMCK0s(kFALSE),
119  fPathTrFReweighting(""),
120  fNameHistoReweightingPi0(""),
121  fNameHistoReweightingEta(""),
122  fNameHistoReweightingK0s(""),
123  fNameFitDataPi0(""),
124  fNameFitDataEta(""),
125  fNameFitDataK0s(""),
126  fHistoEventCuts(NULL),
127  fHistoPastFutureBits(NULL),
128  hCentrality(NULL),
129  hCentralityNotFlat(NULL),
130  //hCentralityVsNumberOfPrimaryTracks(NULL),
131  hVertexZ(NULL),
132  hNPileupVertices(NULL),
133  hPileupVertexToPrimZ(NULL),
134  hPileupVertexToPrimZSPDPileup(NULL),
135  hPileupVertexToPrimZTrackletvsHits(NULL),
136  hEventPlaneAngle(NULL),
137  fEventPlaneAngle(0),
138  hTriggerClass(NULL),
139  hTriggerClassSelected(NULL),
140  hTriggerClassesCorrelated(NULL),
141  hReweightMCHistPi0(NULL),
142  hReweightMCHistEta(NULL),
143  hReweightMCHistK0s(NULL),
144  fFitDataPi0(NULL),
145  fFitDataEta(NULL),
146  fFitDataK0s(NULL),
147  fAddedSignalPDGCode(0),
148  fPreSelCut(kFALSE),
149  fTriggerSelectedManually(kFALSE),
150  fSpecialTriggerName(""),
151  fSpecialSubTriggerName(""),
152  fNSpecialSubTriggerOptions(0),
153  hSPDClusterTrackletBackgroundBefore(NULL),
154  hSPDClusterTrackletBackground(NULL),
155  fV0ReaderName(""),
156  fCaloTriggers(NULL),
157  fTriggerPatchInfo(NULL),
158  fMainTriggerPatchEMCAL(NULL),
159  fCaloTriggersName(""),
160  fCaloTriggerPatchInfoName(""),
161  fTriggersEMCAL(0),
162  fTriggersEMCALSelected(-1),
163  fEMCALTrigInitialized(kFALSE),
164  fSecProdBoundary(1.0),
165  fMaxPtJetMC(0),
166  fMaxFacPtHard(2.5),
167  fMaxFacPtHardSingleParticle(1.5),
168  fMimicTrigger(kFALSE),
169  fRejectTriggerOverlap(kFALSE),
170  fDoMultiplicityWeighting(kFALSE),
171  fPathReweightingMult(""),
172  fNameHistoReweightingMultData(""),
173  fNameHistoReweightingMultMC(""),
174  hReweightMultData(NULL),
175  hReweightMultMC(NULL),
176  fDebugLevel(0)
177 {
178  for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
179  fCutString=new TObjString((GetCutNumber()).Data());
180 
181  fUtils = new AliAnalysisUtils();
182  //if you do not want to apply the cut on the distance between the SPD and TRK vertex:
183  //fUtils->SetCutOnZVertexSPD(kFALSE);
184 
185 
186 }
187 
188 //________________________________________________________________________
190  AliAnalysisCuts(ref),
191  fHistograms(NULL),
192  fHeaderList(ref.fHeaderList),
193  fDoLightOutput(ref.fDoLightOutput),
194  fEventQuality(ref.fEventQuality),
195  fIsHeavyIon(ref.fIsHeavyIon),
196  fDetectorCentrality(ref.fDetectorCentrality),
197  fModCentralityClass(ref.fModCentralityClass),
198  fEnableVertexCut(ref.fEnableVertexCut),
199  fMaxVertexZ(ref.fMaxVertexZ),
200  fCentralityMin(ref.fCentralityMin),
201  fCentralityMax(ref.fCentralityMax),
202  fMultiplicityMethod(ref.fMultiplicityMethod),
203  fSpecialTrigger(ref.fSpecialTrigger),
204  fSpecialSubTrigger(ref.fSpecialSubTrigger),
205  fRemovePileUp(ref.fRemovePileUp),
206  fPastFutureRejectionLow(ref.fPastFutureRejectionLow),
207  fPastFutureRejectionHigh(ref.fPastFutureRejectionHigh),
208  fDoPileUpRejectV0MTPCout(ref.fDoPileUpRejectV0MTPCout),
209  fFPileUpRejectV0MTPCout(ref.fFPileUpRejectV0MTPCout),
210  fRejectExtraSignals(ref.fRejectExtraSignals),
211  fOfflineTriggerMask(ref.fOfflineTriggerMask),
212  fHasV0AND(ref.fHasV0AND),
213  fIsSDDFired(ref.fIsSDDFired),
214  fRandom(ref.fRandom),
215  fnHeaders(ref.fnHeaders),
216  fNotRejectedStart(NULL),
217  fNotRejectedEnd(NULL),
218  fGeneratorNames(ref.fGeneratorNames),
219  fPeriodEnum(ref.fPeriodEnum),
220  fEnergyEnum(kUnset),
221  fCutString(NULL),
222  fCutStringRead(""),
223  fUtils(NULL),
224  fEtaShift(ref.fEtaShift),
225  fDoEtaShift(ref.fDoEtaShift),
226  fDoCentralityFlat(ref.fDoCentralityFlat),
227  fPathWeightsFlatCent(ref.fPathWeightsFlatCent),
228  fNameHistoNotFlatCentrality(ref.fNameHistoNotFlatCentrality),
229  fDoReweightHistoMCPi0(ref.fDoReweightHistoMCPi0),
230  fDoReweightHistoMCEta(ref.fDoReweightHistoMCEta),
231  fDoReweightHistoMCK0s(ref.fDoReweightHistoMCK0s),
232  fPathTrFReweighting(ref.fPathTrFReweighting),
233  fNameHistoReweightingPi0(ref.fNameHistoReweightingPi0),
234  fNameHistoReweightingEta(ref.fNameHistoReweightingEta),
235  fNameHistoReweightingK0s(ref.fNameHistoReweightingK0s),
236  fNameFitDataPi0(ref.fNameFitDataPi0),
237  fNameFitDataEta(ref.fNameFitDataEta),
238  fNameFitDataK0s(ref.fNameFitDataK0s),
239  fHistoEventCuts(NULL),
240  fHistoPastFutureBits(NULL),
241  hCentrality(ref.hCentrality),
242  hCentralityNotFlat(ref.hCentralityNotFlat),
243  //hCentralityVsNumberOfPrimaryTracks(ref.hCentralityVsNumberOfPrimaryTracks),
244  hVertexZ(ref.hVertexZ),
245  hNPileupVertices(ref.hNPileupVertices),
246  hPileupVertexToPrimZ(ref.hPileupVertexToPrimZ),
247  hPileupVertexToPrimZSPDPileup(ref.hPileupVertexToPrimZSPDPileup),
248  hPileupVertexToPrimZTrackletvsHits(ref.hPileupVertexToPrimZTrackletvsHits),
249  hEventPlaneAngle(ref.hEventPlaneAngle),
250  fEventPlaneAngle(ref.fEventPlaneAngle),
251  hTriggerClass(NULL),
252  hTriggerClassSelected(NULL),
253  hTriggerClassesCorrelated(NULL),
254  hReweightMCHistPi0(ref.hReweightMCHistPi0),
255  hReweightMCHistEta(ref.hReweightMCHistEta),
256  hReweightMCHistK0s(ref.hReweightMCHistK0s),
257  fFitDataPi0(ref.fFitDataPi0),
258  fFitDataEta(ref.fFitDataEta),
259  fFitDataK0s(ref.fFitDataK0s),
260  fAddedSignalPDGCode(ref.fAddedSignalPDGCode),
261  fPreSelCut(ref.fPreSelCut),
262  fTriggerSelectedManually(ref.fTriggerSelectedManually),
263  fSpecialTriggerName(ref.fSpecialTriggerName),
264  fSpecialSubTriggerName(ref.fSpecialSubTriggerName),
265  fNSpecialSubTriggerOptions(ref.fNSpecialSubTriggerOptions),
266  hSPDClusterTrackletBackgroundBefore(NULL),
267  hSPDClusterTrackletBackground(NULL),
268  fV0ReaderName(ref.fV0ReaderName),
269  fCaloTriggers(NULL),
270  fTriggerPatchInfo(NULL),
271  fMainTriggerPatchEMCAL(NULL),
272  fCaloTriggersName(ref.fCaloTriggersName),
273  fCaloTriggerPatchInfoName(ref.fCaloTriggerPatchInfoName),
274  fTriggersEMCAL(ref.fTriggersEMCAL),
275  fTriggersEMCALSelected(ref.fTriggersEMCALSelected),
276  fEMCALTrigInitialized(kFALSE),
277  fSecProdBoundary(ref.fSecProdBoundary),
278  fMaxPtJetMC(ref.fMaxPtJetMC),
279  fMaxFacPtHard(ref.fMaxFacPtHard),
280  fMaxFacPtHardSingleParticle(ref.fMaxFacPtHardSingleParticle),
281  fMimicTrigger(ref.fMimicTrigger),
282  fRejectTriggerOverlap(ref.fRejectTriggerOverlap),
283  fDoMultiplicityWeighting(ref.fDoMultiplicityWeighting),
284  fPathReweightingMult(ref.fPathReweightingMult),
285  fNameHistoReweightingMultData(ref.fNameHistoReweightingMultData),
286  fNameHistoReweightingMultMC(ref.fNameHistoReweightingMultMC),
287  hReweightMultData(ref.hReweightMultData),
288  hReweightMultMC(ref.hReweightMultMC),
290 {
291  // Copy Constructor
292  for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=ref.fCuts[jj];}
293  fCutString=new TObjString((GetCutNumber()).Data());
294  fUtils = new AliAnalysisUtils();
295  // dont copy histograms (if you like histograms, call InitCutHistograms())
296 
297 }
298 
299 
300 //________________________________________________________________________
302  // Destructor
303  //Deleting fHistograms leads to seg fault it it's added to output collection of a task
304  // if(fHistograms)
305  // delete fHistograms;
306  // fHistograms = NULL;
307  if(fCutString != NULL){
308  delete fCutString;
309  fCutString = NULL;
310  }
311  if(fNotRejectedStart){
312  delete[] fNotRejectedStart;
313  fNotRejectedStart = NULL;
314  }
315  if(fNotRejectedEnd){
316  delete[] fNotRejectedEnd;
317  fNotRejectedEnd = NULL;
318  }
319  if(fGeneratorNames){
320  delete[] fGeneratorNames;
321  fGeneratorNames = NULL;
322  }
323  if(fUtils){
324  delete fUtils;
325  fUtils = NULL;
326  }
327 
328 }
329 
330 //________________________________________________________________________
332 
333  // Initialize Cut Histograms for QA (only initialized and filled if function is called)
334  TH1::AddDirectory(kFALSE);
335 
336  if(fHistograms != NULL){
337  delete fHistograms;
338  fHistograms=NULL;
339  }
340  if(fHistograms==NULL){
341  fHistograms=new TList();
342  fHistograms->SetOwner(kTRUE);
343  if(name=="")fHistograms->SetName(Form("ConvEventCuts_%s",GetCutNumber().Data()));
344  else fHistograms->SetName(Form("%s_%s",name.Data(),GetCutNumber().Data()));
345  }
346 
347  if (hReweightMCHistPi0){
348  hReweightMCHistPi0->SetName("MCInputForWeightingPi0");
350  }
351  if (hReweightMCHistEta){
352  hReweightMCHistEta->SetName("MCInputForWeightingEta");
354  }
355  if (hReweightMCHistK0s){
356  hReweightMCHistK0s->SetName("MCInputForWeightingK0s");
358  }
359 
360  if (hReweightMultData){
361  hReweightMultData->SetName(Form("hReweightMultData_%s",GetCutNumber().Data()));
363  }
364  if (hReweightMultMC){
365  hReweightMultMC->SetName(Form("hReweightMultMC_%s",GetCutNumber().Data()));
367  }
368 
369  if(!fDoLightOutput){
370  hSPDClusterTrackletBackgroundBefore = new TH2F(Form("SPD tracklets vs SPD clusters %s before Pileup Cut",GetCutNumber().Data()),"SPD tracklets vs SPD clusters",100,0,200,250,0,1000);
372 
373  hSPDClusterTrackletBackground = new TH2F(Form("SPD tracklets vs SPD clusters %s",GetCutNumber().Data()),"SPD tracklets vs SPD clusters",100,0,200,250,0,1000);
375  }
376 
377  if(fIsHeavyIon > 0){
378  hCentrality=new TH1F(Form("Centrality %s",GetCutNumber().Data()),"Centrality",400,0,100);
379  fHistograms->Add(hCentrality);
380  }
381 
382  //hCentralityVsNumberOfPrimaryTracks=new TH2F(Form("Centrality vs Primary Tracks %s",GetCutNumber().Data()),"Centrality vs Primary Tracks ",400,0,100,4000,0,4000);
383  //fHistograms->Add(hCentralityVsNumberOfPrimaryTracks); commented on 3.3.2015 because it's in the main Task
384 
385  hVertexZ = new TH1F(Form("VertexZ %s",GetCutNumber().Data()),"VertexZ",1000,-50,50);
386  fHistograms->Add(hVertexZ);
387 
388  hNPileupVertices = new TH1F(Form("NPileupVertices %s",GetCutNumber().Data()),"NPileupVertices",30,-0.5,29.5);
390 
391  hPileupVertexToPrimZ = new TH1F(Form("PileupVertexDistance %s",GetCutNumber().Data()),"PileupVertexDistance",600,-15,15);
393  hPileupVertexToPrimZSPDPileup = new TH1F(Form("PileupVertexDistance_SPDPileup %s",GetCutNumber().Data()),"PileupVertexDistance_SPDPileup",600,-15,15);
395  hPileupVertexToPrimZTrackletvsHits = new TH1F(Form("PileupVertexDistance_TrackletvsHits %s",GetCutNumber().Data()),"PileupVertexDistance_TrackletvsHits",600,-15,15);
397 
398  if(fIsHeavyIon == 1){
399  hEventPlaneAngle = new TH1F(Form("EventPlaneAngle %s",GetCutNumber().Data()),"EventPlaneAngle",60, 0, TMath::Pi());
401  }
402  fHistoPastFutureBits=new TH1F(Form("PastFutureBits %s",GetCutNumber().Data()),"Past Future Bits",180,-90*25,90*25);
404 
405  // Event Cuts and Info
406  if(preCut){
407  fHistoEventCuts=new TH1F(Form("ESD_EventCuts %s",GetCutNumber().Data()),"Event Cuts",8,-0.5,7.5);
408  fHistoEventCuts->GetXaxis()->SetBinLabel(1,"in");
409  fHistoEventCuts->GetXaxis()->SetBinLabel(2,"OfflineTrigger");
410  fHistoEventCuts->GetXaxis()->SetBinLabel(3,"nvtxcontr");
411  fHistoEventCuts->GetXaxis()->SetBinLabel(4,"VertexZ");
412  fHistoEventCuts->GetXaxis()->SetBinLabel(5,"pileup");
413  fHistoEventCuts->GetXaxis()->SetBinLabel(6,"centrsel");
414  fHistoEventCuts->GetXaxis()->SetBinLabel(7,"OOB-pileup");
415  fHistoEventCuts->GetXaxis()->SetBinLabel(8,"out");
417 
418  hTriggerClass= new TH1F(Form("OfflineTrigger %s",GetCutNumber().Data()),"OfflineTrigger",36,-0.5,35.5);
419  hTriggerClass->GetXaxis()->SetBinLabel( 1,"kMB");
420  hTriggerClass->GetXaxis()->SetBinLabel( 2,"kINT7");
421  hTriggerClass->GetXaxis()->SetBinLabel( 3,"kMUON");
422  hTriggerClass->GetXaxis()->SetBinLabel( 4,"kHighMult");
423  hTriggerClass->GetXaxis()->SetBinLabel( 5,"kEMC1");
424  hTriggerClass->GetXaxis()->SetBinLabel( 6,"kCINT5");
425  hTriggerClass->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
426  hTriggerClass->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
427  hTriggerClass->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
428  hTriggerClass->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
429  hTriggerClass->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
430  hTriggerClass->GetXaxis()->SetBinLabel(12,"kMUS7");
431  hTriggerClass->GetXaxis()->SetBinLabel(13,"kPHI1");
432  hTriggerClass->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
433  hTriggerClass->GetXaxis()->SetBinLabel(15,"kEMCEJE");
434  hTriggerClass->GetXaxis()->SetBinLabel(16,"kEMCEGA");
435  hTriggerClass->GetXaxis()->SetBinLabel(17,"kCentral");
436  hTriggerClass->GetXaxis()->SetBinLabel(18,"kSemiCentral");
437  hTriggerClass->GetXaxis()->SetBinLabel(19,"kDG5");
438  hTriggerClass->GetXaxis()->SetBinLabel(20,"kZED");
439  hTriggerClass->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
440  hTriggerClass->GetXaxis()->SetBinLabel(22,"kINT8");
441  hTriggerClass->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
442  hTriggerClass->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
443  hTriggerClass->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
444  hTriggerClass->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
445  hTriggerClass->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
446  hTriggerClass->GetXaxis()->SetBinLabel(28,"kUserDefined");
447  hTriggerClass->GetXaxis()->SetBinLabel(29,"kTRD");
448  hTriggerClass->GetXaxis()->SetBinLabel(30,"kFastOnly");
449  hTriggerClass->GetXaxis()->SetBinLabel(31,"kAnyINT");
450  hTriggerClass->GetXaxis()->SetBinLabel(32,"kAny");
451  hTriggerClass->GetXaxis()->SetBinLabel(33,"V0AND");
452  hTriggerClass->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
453  hTriggerClass->GetXaxis()->SetBinLabel(35,"failed Physics Selection");
454  hTriggerClass->GetXaxis()->SetBinLabel(36,"mimickedTrigger");
456  }
457  if(!preCut){
458  hTriggerClassSelected= new TH1F(Form("OfflineTriggerSelected %s",GetCutNumber().Data()),"OfflineTriggerSelected",35,-0.5,34.5);
459  hTriggerClassSelected->GetXaxis()->SetBinLabel( 1,"kMB");
460  hTriggerClassSelected->GetXaxis()->SetBinLabel( 2,"kINT7");
461  hTriggerClassSelected->GetXaxis()->SetBinLabel( 3,"kMUON");
462  hTriggerClassSelected->GetXaxis()->SetBinLabel( 4,"kHighMult");
463  hTriggerClassSelected->GetXaxis()->SetBinLabel( 5,"kEMC1");
464  hTriggerClassSelected->GetXaxis()->SetBinLabel( 6,"kCINT5");
465  hTriggerClassSelected->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
466  hTriggerClassSelected->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
467  hTriggerClassSelected->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
468  hTriggerClassSelected->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
469  hTriggerClassSelected->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
470  hTriggerClassSelected->GetXaxis()->SetBinLabel(12,"kMUS7");
471  hTriggerClassSelected->GetXaxis()->SetBinLabel(13,"kPHI1");
472  hTriggerClassSelected->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
473  hTriggerClassSelected->GetXaxis()->SetBinLabel(15,"kEMCEJE");
474  hTriggerClassSelected->GetXaxis()->SetBinLabel(16,"kEMCEGA");
475  hTriggerClassSelected->GetXaxis()->SetBinLabel(17,"kCentral");
476  hTriggerClassSelected->GetXaxis()->SetBinLabel(18,"kSemiCentral");
477  hTriggerClassSelected->GetXaxis()->SetBinLabel(19,"kDG5");
478  hTriggerClassSelected->GetXaxis()->SetBinLabel(20,"kZED");
479  hTriggerClassSelected->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
480  hTriggerClassSelected->GetXaxis()->SetBinLabel(22,"kINT8");
481  hTriggerClassSelected->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
482  hTriggerClassSelected->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
483  hTriggerClassSelected->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
484  hTriggerClassSelected->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
485  hTriggerClassSelected->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
486  hTriggerClassSelected->GetXaxis()->SetBinLabel(28,"kUserDefined");
487  hTriggerClassSelected->GetXaxis()->SetBinLabel(29,"kTRD");
488  hTriggerClassSelected->GetXaxis()->SetBinLabel(30,"kFastOnly");
489  hTriggerClassSelected->GetXaxis()->SetBinLabel(31,"kAnyINT");
490  hTriggerClassSelected->GetXaxis()->SetBinLabel(32,"kAny");
491  hTriggerClassSelected->GetXaxis()->SetBinLabel(33,"V0AND");
492  hTriggerClassSelected->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
493  hTriggerClassSelected->GetXaxis()->SetBinLabel(35,"mimickedTrigger");
495 
496  if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){
497  hTriggerClassesCorrelated= new TH1F(Form("TriggerCorrelations %s",GetCutNumber().Data()),"Triggers Correlated with EMCal triggers",10,-0.5,9.5);
498  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 1,"kMB");
499  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 2,"kINT7");
500  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 3,"kEMC1");
501  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 4,"kEMC7");
502  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 5,"kEMCEJE");
503  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 6,"kEMCEJ1");
504  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 7,"kEMCEJ2");
505  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 8,"kEMCEGA");
506  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 9,"kEMCEG1");
507  hTriggerClassesCorrelated->GetXaxis()->SetBinLabel( 10,"kEMCEG2");
509  }
510 
511  }
512  TH1::AddDirectory(kTRUE);
513 }
514 
516 Bool_t AliConvEventCuts::EventIsSelected(AliVEvent *event, AliMCEvent *mcEvent){
517  // Process Event Selection
518 
519  Int_t cutindex=0;
520  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
521  cutindex++;
522 
523  // Check for MC event
524  Bool_t isMC = kFALSE;
525  if(mcEvent && event->IsA()==AliESDEvent::Class()){
526  // Check if MC event is correctly loaded
527  AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
528  if (!mcHandler){
529  fEventQuality = 2;
530  return kFALSE;
531  }
532  if (!mcHandler->InitOk() ){
533  fEventQuality = 2;
534  return kFALSE;
535  }
536  if (!mcHandler->TreeK() ){
537  fEventQuality = 2;
538  return kFALSE;
539  }
540  if (!mcHandler->TreeTR() ) {
541  fEventQuality = 2;
542  return kFALSE;
543  }
544  isMC = kTRUE;
545  }
546 
547 
548 
549  // Event Trigger
550  // cout << "before event trigger" << endl;
551  if(!IsTriggerSelected(event, isMC )){
552  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
553  fEventQuality = 3;
554  return kFALSE;
555  }
556  cutindex++;
557 
558  if(event->IsA()==AliESDEvent::Class()){
559  AliTriggerAnalysis fTriggerAnalysis;// = new AliTriggerAnalysis;
560  fHasV0AND = fTriggerAnalysis.IsOfflineTriggerFired((AliESDEvent*)event, AliTriggerAnalysis::kV0AND);
561  if(fHasV0AND&&hTriggerClass)hTriggerClass->Fill(32);
562  }
563  // cout << "event number " << ((AliESDEvent*)event)->GetEventNumberInFile() << " entered"<< endl;
564 
565 
566  // Number of Contributors Cut
567  if (fEnableVertexCut){
568  if(GetNumberOfContributorsVtx(event)<=0) {
569  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
570  fEventQuality = 5;
571  return kFALSE;
572  }
573  }
574  cutindex++;
575 
576  // Z Vertex Position Cut
577  if (fEnableVertexCut){
578  if(!VertexZCut(event)){
579  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
580  fEventQuality = 4;
581  return kFALSE;
582  }
583  }
584  cutindex++;
585 
586  // SPD clusters vs tracklets to check for pileup/background
587  Int_t nClustersLayer0 = event->GetNumberOfITSClusters(0);
588  Int_t nClustersLayer1 = event->GetNumberOfITSClusters(1);
589  Int_t nTracklets = event->GetMultiplicity()->GetNumberOfTracklets();
590  if(hSPDClusterTrackletBackgroundBefore) hSPDClusterTrackletBackgroundBefore->Fill(nTracklets, (nClustersLayer0 + nClustersLayer1));
591 
592 
593  Double_t distZMax = 0;
594  if(event->IsA()==AliESDEvent::Class()){
595  Int_t nPileVert = ((AliESDEvent*)event)->GetNumberOfPileupVerticesSPD();
596  if (hNPileupVertices) hNPileupVertices->Fill(nPileVert);
597  if (nPileVert > 0){
598  for(Int_t i=0; i<nPileVert;i++){
599  const AliESDVertex* pv = ((AliESDEvent*)event)->GetPileupVertexSPD(i);
600  Int_t nc2 = pv->GetNContributors();
601  if(nc2>=3){
602  Double_t z1 = ((AliESDEvent*)event)->GetPrimaryVertexSPD()->GetZ();
603  Double_t z2 = pv->GetZ();
604  Double_t distZ = z2-z1;
605  if (TMath::Abs(distZMax) < TMath::Abs(distZ) ){
606  distZMax = distZ;
607  }
608  }
609  }
610  if (hPileupVertexToPrimZ) hPileupVertexToPrimZ->Fill(distZMax);
611  }
612  }
613 
614  // Pile Up Rejection
615  if (fIsHeavyIon == 2){
616  if(GetUseNewMultiplicityFramework()){// for Run2 pPb
617  if(fUtils->IsPileUpMV(event)){
618  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
619  fEventQuality = 6;
620  return kFALSE;
621  }
622  } else{
623  if(fUtils->IsFirstEventInChunk(event)){
624  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
625  fEventQuality = 6;
626  return kFALSE;
627  }
628  if(fRemovePileUp){
629  if(fUtils->IsPileUpEvent(event)){
630  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
632  fEventQuality = 6;
633  return kFALSE;
634  }
635  if (fUtils->IsSPDClusterVsTrackletBG(event)){
636  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
638  fEventQuality = 11;
639  return kFALSE;
640  }
641  }
642  }
643  } else if(fRemovePileUp){
644  if(event->IsPileupFromSPD(3,0.8,3.,2.,5.) ){
645  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
647  fEventQuality = 6;
648  return kFALSE;
649  }
650  if (fUtils->IsSPDClusterVsTrackletBG(event)){
651  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
653  fEventQuality = 11;
654  return kFALSE;
655  }
656  }
657  cutindex++;
658 
659  // Centrality Selection
660  if(!IsCentralitySelected(event,mcEvent)){
661  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
662  fEventQuality = 1;
663  return kFALSE;
664  }
665  cutindex++;
666 
668  if(fHistoEventCuts) fHistoEventCuts->Fill(cutindex);
669  fEventQuality = 12;
670  return kFALSE;
671  }
672  cutindex++;
673  // Fill Event Histograms
674  if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
675  if(hCentrality)hCentrality->Fill(GetCentrality(event));
676  if(hVertexZ)hVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
677  // if(hCentralityVsNumberOfPrimaryTracks)
678  // hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(event),
679  // ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
680  // ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
681 
682  if(fIsHeavyIon == 1){
683  AliEventplane *EventPlane = event->GetEventplane();
684  fEventPlaneAngle = EventPlane->GetEventplane("V0",event,2);
685  if(hEventPlaneAngle)hEventPlaneAngle->Fill(TMath::Abs(fEventPlaneAngle));
686  }
687  if(hSPDClusterTrackletBackground) hSPDClusterTrackletBackground->Fill(nTracklets, (nClustersLayer0 + nClustersLayer1));
688 
689  fEventQuality = 0;
690  return kTRUE;
691 }
692 
696 
697  if(fCutString && fCutString->GetString().Length() == kNCuts) {
698  fCutString->SetString(GetCutNumber());
699  } else {
700  return kFALSE;
701  }
702  return kTRUE;
703 }
704 
707 
708  AliInfo("Entering loading of weights for centrality flattening");
709  TFile *w = TFile::Open(fPathWeightsFlatCent.Data());
710  if(!w){
711  AliError(Form("file for centrality flattening %s not found",fPathWeightsFlatCent.Data()));
712  return;
713  }
714 
715  if (fNameHistoNotFlatCentrality.CompareTo("") != 0 && (fDoCentralityFlat > 0)){
716  cout << "I have to find: " << fNameHistoNotFlatCentrality.Data() << endl;
717  TH1D *hCentralityNotFlattemp = (TH1D*)w->Get(fNameHistoNotFlatCentrality.Data());
718  hCentralityNotFlat = new TH1D(*hCentralityNotFlattemp);
719  if (hCentralityNotFlat) AliInfo(Form("%s has been loaded from %s", fNameHistoNotFlatCentrality.Data(),fPathWeightsFlatCent.Data() ));
720  else AliWarning(Form("%s not found in %s", fNameHistoNotFlatCentrality.Data() ,fPathWeightsFlatCent.Data()));
721  hCentralityNotFlat->SetDirectory(0);
722  }
723 
724  w->Close();
725  delete w;
726 }
727 
730 
731  AliInfo("Entering loading of weights for multiplicity weighting");
732  TFile *w = TFile::Open(fPathReweightingMult.Data());
733  if(!w){
734  AliError(Form("file for multiplicity reweighting %s not found",fPathReweightingMult.Data()));
735  return;
736  }
737 
738  if (fNameHistoReweightingMultData.CompareTo("") != 0 && (fDoMultiplicityWeighting > 0)){
739  cout << "I have to find: " << fNameHistoReweightingMultData.Data() << endl;
740  TH1D *hReweightMultDatatemp = (TH1D*)w->Get(fNameHistoReweightingMultData.Data());
741  if (hReweightMultDatatemp == NULL) AliError(Form("%s was not contained in %s", fNameHistoReweightingMultData.Data(),fPathReweightingMult.Data() ));
742  hReweightMultData = new TH1D(*hReweightMultDatatemp);
743  if (hReweightMultData) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingMultData.Data(),fPathReweightingMult.Data() ));
744  else AliWarning(Form("%s not found in %s", fNameHistoReweightingMultData.Data() ,fPathReweightingMult.Data()));
745  hReweightMultData->SetDirectory(0);
746  }
747  if (fNameHistoReweightingMultMC.CompareTo("") != 0 && (fDoMultiplicityWeighting > 0)){
748  cout << "I have to find: " << fNameHistoReweightingMultMC.Data() << endl;
749  TH1D *hReweightMultMCtemp = (TH1D*)w->Get(fNameHistoReweightingMultMC.Data());
750  if (hReweightMultMCtemp == NULL) AliError(Form("%s was not contained in %s", fNameHistoReweightingMultMC.Data(),fPathReweightingMult.Data() ));
751  hReweightMultMC = new TH1D(*hReweightMultMCtemp);
752  if (hReweightMultData) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingMultMC.Data(),fPathReweightingMult.Data() ));
753  else AliWarning(Form("%s not found in %s", fNameHistoReweightingMultMC.Data() ,fPathReweightingMult.Data()));
754  hReweightMultMC->SetDirectory(0);
755  }
756 
757  w->Close();
758  delete w;
759 }
760 
761 
764 
765  AliInfo("Entering loading of histograms for weighting");
766  TFile *f = TFile::Open(fPathTrFReweighting.Data());
767  if(!f){
768  AliError(Form("file for weighting %s not found",fPathTrFReweighting.Data()));
769  return;
770  }
771  if (fNameHistoReweightingPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
772  cout << "I have to find: " << fNameHistoReweightingPi0.Data() << endl;
773  TH1D *hReweightMCHistPi0temp = (TH1D*)f->Get(fNameHistoReweightingPi0.Data());
774  hReweightMCHistPi0 = new TH1D(*hReweightMCHistPi0temp);
775  if (hReweightMCHistPi0) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingPi0.Data(),fPathTrFReweighting.Data() ));
776  else AliWarning(Form("%s not found in %s", fNameHistoReweightingPi0.Data() ,fPathTrFReweighting.Data()));
777  hReweightMCHistPi0->SetDirectory(0);
778  }
779  if (fNameFitDataPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
780  cout << "I have to find: " << fNameFitDataPi0.Data() << endl;
781  TF1 *fFitDataPi0temp = (TF1*)f->Get(fNameFitDataPi0.Data());
782  fFitDataPi0 = new TF1(*fFitDataPi0temp);
783  if (fFitDataPi0) AliInfo(Form("%s has been loaded from %s", fNameFitDataPi0.Data(),fPathTrFReweighting.Data() ));
784  else AliWarning(Form("%s not found in %s",fPathTrFReweighting.Data(), fNameFitDataPi0.Data() ));
785  }
786 
787  if (fNameHistoReweightingEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
788  cout << "I have to find: " << fNameHistoReweightingEta.Data() << endl;
789  TH1D *hReweightMCHistEtatemp = (TH1D*)f->Get(fNameHistoReweightingEta.Data());
790  hReweightMCHistEta = new TH1D(*hReweightMCHistEtatemp);
791  if (hReweightMCHistEta) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
792  else AliWarning(Form("%s not found in %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
793  hReweightMCHistEta->SetDirectory(0);
794  }
795 
796  if (fNameFitDataEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
797  cout << "I have to find: " << fNameFitDataEta.Data() << endl;
798  TF1 *fFitDataEtatemp = (TF1*)f->Get(fNameFitDataEta.Data());
799  fFitDataEta = new TF1(*fFitDataEtatemp);
800  if (fFitDataEta) AliInfo(Form("%s has been loaded from %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
801  else AliWarning(Form("%s not found in %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
802 
803  }
804  if (fNameHistoReweightingK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
805  cout << "I have to find: " << fNameHistoReweightingK0s.Data() << endl;
806  TH1D *hReweightMCHistK0stemp = (TH1D*)f->Get(fNameHistoReweightingK0s.Data());
807  hReweightMCHistK0s = new TH1D(*hReweightMCHistK0stemp);
808  if (hReweightMCHistK0s) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
809  else AliWarning(Form("%s not found in %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
810  hReweightMCHistK0s->SetDirectory(0);
811  }
812 
813  if (fNameFitDataK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
814  cout << "I have to find: " << fNameFitDataK0s.Data() << endl;
815  TF1 *fFitDataK0stemp = (TF1*)f->Get(fNameFitDataK0s.Data());
816  fFitDataK0s = new TF1(*fFitDataK0stemp);
817  if (fFitDataK0s) AliInfo(Form("%s has been loaded from %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
818  else AliWarning(Form("%s not found in %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
819  }
820  f->Close();
821  delete f;
822 }
823 
824 
827  fCutStringRead = Form("%s",analysisCutSelection.Data());
828 
829  // Initialize Cuts from a given Cut string
830  if(fDoCentralityFlat > 0){
831  AliInfo("Centrality flattening was enabled");
833  }
834 
836  AliInfo("Multiplicity weighting was enabled");
838  }
840  AliInfo("Particle Weighting was enabled");
842  }
843 
844 
845  AliInfo(Form("Set Event Cut Number: %s",analysisCutSelection.Data()));
846  if(analysisCutSelection.Length()!=kNCuts) {
847  AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));
848  return kFALSE;
849  }
850  if(!analysisCutSelection.IsAlnum()){
851  AliError("Cut selection is not alphanumeric");
852  return kFALSE;
853  }
854 
855  if (fV0ReaderName.CompareTo("") == 0){
856  fV0ReaderName = "V0ReaderV1";
857  }
858  TString analysisCutSelectionLowerCase = Form("%s",analysisCutSelection.Data());
859  analysisCutSelectionLowerCase.ToLower();
860  const char *cutSelection = analysisCutSelectionLowerCase.Data();
861  #define ASSIGNARRAY(i) fCuts[i] = ((int)cutSelection[i]>=(int)'a') ? cutSelection[i]-'a'+10 : cutSelection[i]-'0'
862  for(Int_t ii=0;ii<kNCuts;ii++){
863  ASSIGNARRAY(ii);
864  }
865 
866  // Set Individual Cuts
867  for(Int_t ii=0;ii<kNCuts;ii++){
868  if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
869  }
870 
872 
873  return kTRUE;
874 }
875 
879 // "HeavyIon", //0
880 // "CentralityMin", //1
881 // "CentralityMax", //2
882 // "SelectSpecialTrigger", //3
883 // "SelectSpecialSubTriggerClass", //4
884 // "RemovePileUp", //5
885 // "RejectExtraSignals", //6
886 // "VertexCut", //7
887 
888  switch (cutID) {
889  case kisHeavyIon:
890  if( SetIsHeavyIon(value)) {
891  fCuts[kisHeavyIon] = value;
892  UpdateCutString();
893  return kTRUE;
894  } else return kFALSE;
895  case kCentralityMin:
896  if( SetCentralityMin(value)) {
897  fCuts[kCentralityMin] = value;
898  UpdateCutString();
899  return kTRUE;
900  } else return kFALSE;
901  case kCentralityMax:
902  if( SetCentralityMax(value)) {
903  fCuts[kCentralityMax] = value;
904  UpdateCutString();
905  return kTRUE;
906  } else return kFALSE;
908  if( SetSelectSpecialTrigger(value)) {
910  UpdateCutString();
911  return kTRUE;
912  } else return kFALSE;
914  if( SetSelectSubTriggerClass(value)) {
915  fCuts[kSelectSubTriggerClass] = value;
916  UpdateCutString();
917  return kTRUE;
918  } else return kFALSE;
919  case kremovePileUp:
920  if( SetRemovePileUp(value)) {
921  fCuts[kremovePileUp] = value;
922  UpdateCutString();
923  return kTRUE;
924  } else return kFALSE;
925  case kExtraSignals:
926  if( SetRejectExtraSignalsCut(value)) {
927  fCuts[kExtraSignals] = value;
928  UpdateCutString();
929  return kTRUE;
930  } else return kFALSE;
931  case kVertex:
932  if( SetVertexCut(value)) {
933  fCuts[kVertex] = value;
934  UpdateCutString();
935  return kTRUE;
936  } else return kFALSE;
937 
938  case kNCuts:
939  AliError("Cut id out of range");
940  return kFALSE;
941  }
942 
943  AliError("Cut id %d not recognized");
944  return kFALSE;
945 }
946 
949  // Print out current Cut Selection
950  for(Int_t ic = 0; ic < kNCuts; ic++) {
951  printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]);
952  }
953 }
954 
956  // Print out current Cut Selection with value
957  printf("\nEvent cutnumber \n");
958  for(Int_t ic = 0; ic < kNCuts; ic++) {
959  printf("%d",fCuts[ic]);
960  }
961  printf("\n\n");
962  if (fIsHeavyIon == 0) {
963  printf("Running in pp mode \n");
964  if (fSpecialTrigger == 0){
965  if (fSpecialSubTrigger == 0){
966  printf("\t only events triggered by V0OR will be analysed \n");
967  } else if (fSpecialSubTrigger == 1){
968  printf("\t only events where SDD was present will be analysed \n");
969  }
970  } else if (fSpecialTrigger == 1){
971  if (fSpecialSubTrigger == 0){
972  printf("\t only events triggered by V0AND will be analysed \n");
973  } else if(fSpecialSubTrigger == 1){
974  printf("\t only events where SDD was present will be analysed and triggered by VOAND\n");
975  }
976  if (fRejectTriggerOverlap) printf("\t reject trigger overlaps");
977  } else if (fSpecialTrigger > 1){
978  printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
979  if (fRejectTriggerOverlap) printf("\t reject trigger overlaps\n\n");
980  }
981  if ( !(fCentralityMin == 0 && fCentralityMax == 0) && !(fCentralityMax < fCentralityMin) ){
982  printf("\t Multiplicity cut %d - %d \n", fCentralityMin, fCentralityMax);
983  }
984  } else if (fIsHeavyIon == 1){
985  printf("Running in PbPb mode \n");
986  if (fDetectorCentrality == 0){
987  printf("\t centrality selection based on V0M \n");
988  } else if (fDetectorCentrality == 1){
989  printf("\t centrality selection based on Cl1 \n");
990  }
991  if (fModCentralityClass == 0){
992  printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
993  } else if ( fModCentralityClass == 1){
994  printf("\t %d - %d \n", fCentralityMin*5, fCentralityMax*5);
995  } else if ( fModCentralityClass == 2){
996  printf("\t %d - %d \n", fCentralityMin*5+45, fCentralityMax*5+45);
997  } else if (fModCentralityClass == 3){
998  printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*10, fCentralityMax*10);
999  } else if ( fModCentralityClass == 4){
1000  printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5, fCentralityMax*5);
1001  } else if ( fModCentralityClass == 5){
1002  printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5+45, fCentralityMax*5+45);
1003  }
1004  if (fSpecialTrigger == 0){
1005  printf("\t only events triggered by kMB, kCentral, kSemiCentral will be analysed \n");
1006  } else if (fSpecialTrigger > 1){
1007  printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
1008  printf("\n\t SpecialTrigger is: %s\n", fSpecialTriggerName.Data());
1009  printf("\t SpecialSubTrigger is: %s\n", fSpecialSubTriggerName.Data());
1010  if (fRejectTriggerOverlap) printf("\t reject trigger overlaps\n\n");
1011  }
1012  } else if (fIsHeavyIon == 2){
1013  printf("Running in pPb mode \n");
1014  if (fDetectorCentrality == 0){
1015  printf("\t centrality selection based on V0A \n");
1016  } else if (fDetectorCentrality == 1){
1017  printf("\t centrality selection based on Cl1 \n");
1018  }
1019  if (fModCentralityClass == 0){
1020  printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
1021  }
1022  if (fSpecialTrigger == 0){
1023  printf("\t only events triggered by kINT7 will be analysed \n");
1024  } else if (fSpecialTrigger > 1){
1025  printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
1026  if (fRejectTriggerOverlap) printf("\t reject trigger overlaps\n\n");
1027  }
1028  }
1029  if (fEnableVertexCut) printf("\t Vertex cut with |Z_{vtx}| <%2.2f \n",fMaxVertexZ);
1030  else printf("\t No vertex cut \n");
1031 
1032  if (fRemovePileUp ==1 ) {
1033  printf("\t Doing pile up removal \n");
1034  if (fDoPileUpRejectV0MTPCout ==1 ){
1035  printf("\t Doing extra pile up removal V0M vs TPCout \n");
1036  }
1037  }
1038 
1039  printf("MC event cuts: \n");
1040  if (fRejectExtraSignals == 0) printf("\t no rejection was applied \n");
1041  else if (fRejectExtraSignals == 1) printf("\t only MB header will be inspected \n");
1042  else if (fRejectExtraSignals > 1) printf("\t special header have been selected \n");
1043  printf("\t maximum factor between jet and pt hard = %2.2f \n", fMaxFacPtHard);
1044 }
1045 
1048 { // Set Cut
1049  switch(isHeavyIon){
1050  case 0:
1051  fIsHeavyIon=0;
1052  break;
1053  case 1:
1054  fIsHeavyIon=1;
1056  break;
1057  case 2:
1058  fIsHeavyIon=1;
1060  break;
1061  case 3: //allows to select centrality 0-45% in steps of 5% for V0 Multiplicity
1062  fIsHeavyIon=1;
1065  break;
1066  case 4: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
1067  fIsHeavyIon=1;
1070  break;
1071  case 5: //strict cut on v0 tracks for MC
1072  fIsHeavyIon=1;
1075  break;
1076  case 6: //allows to select centrality 0-45% in steps of 5% for track mult
1077  //strict cut on v0 tracks for MC
1078  fIsHeavyIon=1;
1081  break;
1082  case 7: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
1083  //strict cut on v0 tracks for MC
1084  fIsHeavyIon=1;
1087  break;
1088  case 8:
1089  fIsHeavyIon=2;
1091  break;
1092  case 9:
1093  fIsHeavyIon=2;
1095  break;
1096  default:
1097  AliError(Form("SetHeavyIon not defined %d",isHeavyIon));
1098  return kFALSE;
1099  }
1100  return kTRUE;
1101 }
1102 
1103 //___________________________________________________________________
1105 {
1106  // Set Cut
1107  if(minCentrality<0||minCentrality>9){
1108  AliError(Form("minCentrality not defined %d",minCentrality));
1109  return kFALSE;
1110  }
1111 
1112  fCentralityMin=minCentrality;
1113  return kTRUE;
1114 }
1115 
1116 //___________________________________________________________________
1118 {
1119  // Set Cut
1120  if(maxCentrality<0||maxCentrality>9){
1121  AliError(Form("maxCentrality not defined %d",maxCentrality));
1122  return kFALSE;
1123  }
1124  fCentralityMax=maxCentrality;
1125  return kTRUE;
1126 }
1127 
1130 {
1131  // Set Cut
1132  switch(selectSpecialTrigger){
1133  case 0:
1134  fSpecialTrigger=0; // V0OR
1135  break;
1136  case 1:
1137  fSpecialTrigger=1; // V0AND
1138  break;
1139 // case 2:
1140 // fSpecialTrigger=2; //
1141 // break;
1142  case 3:
1143  fSpecialTrigger=3; //specific centrality trigger selection
1144  fSpecialTriggerName="AliVEvent::kCentral/kSemiCentral/kMB";
1145  break;
1146  case 4:
1147  fSpecialTrigger=4; // trigger alias kTRD
1148  fOfflineTriggerMask=AliVEvent::kTRD;
1149  fTriggerSelectedManually = kTRUE;
1150  fSpecialTriggerName="AliVEvent::kTRD";
1151  break;
1152  case 5:
1153  fSpecialTrigger=5; // trigger alias kEMC
1154  fOfflineTriggerMask=AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMC1 ;
1155  fTriggerSelectedManually = kTRUE;
1157  SETBIT(fTriggersEMCALSelected, kL0);
1158  fSpecialTriggerName="AliVEvent::kEMC7/kEMC8/kEMC1";
1159  break;
1160  case 6:
1161  fSpecialTrigger=6; // trigger alias kPHI
1162  fOfflineTriggerMask=AliVEvent::kPHI7 | AliVEvent::kPHI1 | AliVEvent::kPHI8 | AliVEvent::kPHOSPb;
1163  fTriggerSelectedManually = kTRUE;
1164  fSpecialTriggerName="AliVEvent::kPHI7/kPHI1/kPHI8/kPHOSPb";
1165  break;
1166  case 7:
1167  fSpecialTrigger=7; // trigger alias kHighMult
1168  fOfflineTriggerMask=AliVEvent::kHighMult;
1169  fTriggerSelectedManually = kTRUE;
1170  fSpecialTriggerName="AliVEvent::kHighMult";
1171  break;
1172  case 8:
1173  fSpecialTrigger=8; // trigger alias kEMCEGA
1174  fOfflineTriggerMask=AliVEvent::kEMCEGA;
1175  fTriggerSelectedManually = kTRUE;
1177  SETBIT(fTriggersEMCALSelected, kG2);
1178  fSpecialTriggerName="AliVEvent::kEMCEGA";
1179  break;
1180  case 9:
1181  fSpecialTrigger=9; // trigger alias kEMCEJE
1182  fOfflineTriggerMask=AliVEvent::kEMCEJE;
1183  fTriggerSelectedManually = kTRUE;
1185  SETBIT(fTriggersEMCALSelected, kJ2);
1186  fSpecialTriggerName="AliVEvent::kEMCEJE";
1187  break;
1188  default:
1189  AliError("Warning: Special Trigger Not known");
1190  return 0;
1191  }
1192  return 1;
1193 }
1194 
1197 {
1198  // Set Cut
1199  if (fSpecialTrigger == 0){ //OR
1200  switch(selectSpecialSubTriggerClass){
1201  case 0://with VZERO
1202  fSpecialTrigger=0;
1204 // AliInfo("Info: Nothing to be done");
1205  break;
1206  case 3: //V0OR with SDD requested (will only work with LHC11a dataset)
1208 // cout << "V0OR with SDD requested" << endl;
1209  break;
1210  default:
1211  AliError("Warning: Special Subtrigger Class Not known");
1212  return 0;
1213  }
1214  } else if (fSpecialTrigger == 1){ //AND with different detectors
1215  switch(selectSpecialSubTriggerClass){
1216  case 0: //with VZERO general implementation of V0AND (periods LHC11c onwards)
1217  fSpecialTrigger=0;
1219  fOfflineTriggerMask=AliVEvent::kINT7;
1220  fTriggerSelectedManually = kTRUE;
1221  fSpecialTriggerName="AliVEvent::kINT7";
1222  break;
1223  case 1: //with TZERO
1224  fSpecialTrigger=0;
1226  fOfflineTriggerMask=AliVEvent::kINT8;
1227  fTriggerSelectedManually = kTRUE;
1228  fSpecialTriggerName="AliVEvent::kINT8";
1229  break;
1230  case 2: //with VZERO (will only work with LHC11a dataset)
1231  fSpecialTrigger=1;
1233 // AliInfo("Info: Nothing to be done");
1234  break;
1235  case 3: //V0AND with SDD requested (will only work with LHC11a dataset)
1236  fSpecialTrigger=1;
1238  break;
1239  default:
1240  AliError("Warning: Special Subtrigger Class Not known");
1241  return 0;
1242  }
1243  } else if (fSpecialTrigger == 3){ // Selecting kCentral and kSemiCentral from trigger classes, not aliases
1244  switch(selectSpecialSubTriggerClass){
1245  case 0: // all together
1248 // AliInfo("Info: Nothing to be done");
1249  break;
1250  case 1: // kCentral - no vertex restriction
1253  fSpecialSubTriggerName="CVHN";
1254 // cout << "kCentralOpen" << endl;
1255  break;
1256  case 2: // kCentral - T00 +- 10 cm
1259  fSpecialSubTriggerName="CCENT";
1260 // cout << "kCentralVertex" << endl;
1261  break;
1262  case 3: // kCentral - both
1265  fSpecialSubTriggerName="CVHN|CCENT|CSEMI|CVLN";
1266 // cout << "kCentral both" << endl;
1267  break;
1268  case 4: // kSemiCentral - no vertex restriction
1271  fSpecialSubTriggerName="CVLN";
1272 // cout << "kSemiCentralOpen" << endl;
1273  break;
1274  case 5: // kSemiCentral - T00 +- 10 cm
1277  fSpecialSubTriggerName="CSEMI";
1278 // cout << "kSemiCentralVertex" << endl;
1279  break;
1280  case 6: // kSemiCentral - both
1283  fSpecialSubTriggerName="CSEMI%CVLN";
1284 // cout << "kSemiCentral both" << endl;
1285  break;
1286  case 7: // kMB
1289  fSpecialSubTriggerName="CPBI1_|CPBI1-";
1290 // cout << "kMB 1" << endl;
1291  break;
1292  case 8: // kMB
1295  fSpecialSubTriggerName="CPBI2_|CPBI2-";
1296 // cout << "kMB 2" << endl;
1297  break;
1298  case 9: // kMB
1301  fSpecialSubTriggerName="CPBI2_@CPBI2-@CPBI2_@CPBI2-";
1302 // cout << "kMB both" << endl;
1303  break;
1304  default:
1305  AliError("Warning: Special Subtrigger Class Not known");
1306  return 0;
1307  }
1308  } else if (fSpecialTrigger == 4){ // Subdivision of TRD trigger classes
1309  switch(selectSpecialSubTriggerClass){
1310  case 0: // all together
1313 // AliInfo("Info: Nothing to be done");
1314  break;
1315  case 1: // 7WUHSH - V0AND with single electron in TRD & EMCAL
1318  fSpecialSubTriggerName="7WUHEE";
1319  break;
1320  case 2: // 8WUHSH - T0AND with single electron in TRD & EMCAL
1323  fSpecialSubTriggerName="8WUHEE";
1324  break;
1325  case 3: // 7WUHSE - V0AND with single high pt electron in TRD
1328  fSpecialSubTriggerName="7WUHSE";
1329  break;
1330  case 4: // 8WUHSE - T0AND with single high pt electron in TRD
1333  fSpecialSubTriggerName="8WUHSE";
1334  break;
1335  case 5: // 7WUHJE - V0AND with jet in TRD
1338  fSpecialSubTriggerName="7WUHJT";
1339  break;
1340  case 6: // 8WUHJE - T0AND with jet in TRD
1343  fSpecialSubTriggerName="8WUHJT";
1344  break;
1345  case 7: // 7WUHQU - V0AND with dielectron pair in TRD
1348  fSpecialSubTriggerName="7WUHQU";
1349  break;
1350  case 8: // 8WUHQU - T0AND with dielectron pair in TRD
1353  fSpecialSubTriggerName="8WUHQU";
1354  break;
1355  default:
1356  AliError("Warning: Special Subtrigger Class Not known");
1357  return 0;
1358  }
1359  } else if (fSpecialTrigger == 5){ // Subdivision of kEMC trigger classes
1360  switch(selectSpecialSubTriggerClass){
1361  case 0: // all together
1364 // AliInfo("Info: Nothing to be done");
1365  break;
1366  case 1: // CEMC1 - V0OR and EMCAL fired
1367  fOfflineTriggerMask=AliVEvent::kEMC1;
1368  fSpecialTriggerName="AliVEvent::kEMC1";
1371  fSpecialSubTriggerName="CEMC1";
1372  break;
1373  case 2: // CEMC7 - V0AND and EMCAL fired
1375  fOfflineTriggerMask=AliVEvent::kEMC7;
1376  fSpecialTriggerName="AliVEvent::kEMC7";
1378  fSpecialSubTriggerName="CEMC7";
1379  break;
1380  case 3: // CEMC8 - T0OR and EMCAL fired
1381  fOfflineTriggerMask=AliVEvent::kEMC8;
1382  fSpecialTriggerName="AliVEvent::kEMC8";
1385  fSpecialSubTriggerName="CEMC8";
1386  break;
1387  case 4: // CDMC1 - V0OR and DCAL fired
1388  fOfflineTriggerMask=AliVEvent::kEMC1;
1389  fSpecialTriggerName="AliVEvent::kEMC1";
1392  fSpecialSubTriggerName="CDMC1";
1393  break;
1394  case 5: // CDMC7 - V0AND and DCAL fired
1396  fOfflineTriggerMask=AliVEvent::kEMC7;
1397  fSpecialTriggerName="AliVEvent::kEMC7";
1399  fSpecialSubTriggerName="CDMC7";
1400  break;
1401  case 6: // CDMC8 - T0OR and DCAL fired
1402  fOfflineTriggerMask=AliVEvent::kEMC8;
1403  fSpecialTriggerName="AliVEvent::kEMC8";
1406  fSpecialSubTriggerName="CDMC8";
1407  break;
1408  default:
1409  AliError("Warning: Special Subtrigger Class Not known");
1410  return 0;
1411  }
1412  }else if (fSpecialTrigger == 6){ // Subdivision of kPHI trigger classes
1413  switch(selectSpecialSubTriggerClass){
1414  case 0: // all together
1417 // AliInfo("Info: Nothing to be done");
1418  break;
1419  case 1: // CEMC1 - V0OR and EMCAL fired
1420  fOfflineTriggerMask=AliVEvent::kPHI1;
1421  fSpecialTriggerName="AliVEvent::kPHI1";
1424  fSpecialSubTriggerName="CPHI1";
1425  break;
1426  case 2: // CEMC7 - V0AND and EMCAL fired
1428  fOfflineTriggerMask=AliVEvent::kPHI7;
1429  fSpecialTriggerName="AliVEvent::kPHI7";
1431  fSpecialSubTriggerName="CPHI7";
1432  break;
1433  case 3: // CEMC8 - T0OR and EMCAL fired
1434  fOfflineTriggerMask=AliVEvent::kPHI8;
1435  fSpecialTriggerName="AliVEvent::kPHI8";
1438  fSpecialSubTriggerName="CPHI8";
1439  break;
1440  default:
1441  AliError("Warning: Special Subtrigger Class Not known");
1442  return 0;
1443  }
1444  } else if (fSpecialTrigger == 7){ // Subdivision of kHighMult trigger classes
1445  switch(selectSpecialSubTriggerClass){
1446  case 0: // all together
1449 // AliInfo("Info: Nothing to be done");
1450  break;
1451  case 1: // CSHM1 - V0OR and high mult fired
1454  fSpecialSubTriggerName="CSHM1";
1455  break;
1456  case 2: // CSHM7 - V0AND and high mult fired
1459  fSpecialSubTriggerName="CSHM7";
1460  break;
1461  case 3: // CSHM8 - T0OR and high mult fired
1464  fSpecialSubTriggerName="CSHM8";
1465  break;
1466  case 4: // V0 high mult trigger
1468  fOfflineTriggerMask=AliVEvent::kAny;
1469  fSpecialTriggerName="V0Mult";
1471  fSpecialSubTriggerName="CVHMV0M-B-";
1472  break;
1473  case 5: // SPD high mult trigger
1475  fOfflineTriggerMask=AliVEvent::kAny;
1476  fSpecialTriggerName="SPMult";
1478  fSpecialSubTriggerName="CVHMSH2-B-";
1479  break;
1480  case 6: // V0 high mult trigger with pileup condition on
1482  fOfflineTriggerMask=AliVEvent::kAny;
1483  fSpecialTriggerName="V0Mult";
1485  fSpecialSubTriggerName="CVHMV0M-B-SPD2";
1486  break;
1487 
1488  default:
1489  AliError("Warning: Special Subtrigger Class Not known");
1490  return 0;
1491  }
1492  }else if (fSpecialTrigger == 8){ // Subdivision of kEMCEGA trigger classes
1493  switch(selectSpecialSubTriggerClass){
1494  case 0: // all together
1497 // AliInfo("Info: Nothing to be done");
1498  break;
1499  case 1: // 7EGA - CINT7 EGA
1502  fSpecialSubTriggerName="7EGA";
1504  SETBIT(fTriggersEMCALSelected, kG2);
1505  break;
1506  case 2: // 8EGA - CINT8 EGA
1509  fSpecialSubTriggerName="8EGA";
1511  SETBIT(fTriggersEMCALSelected, kG2);
1512  break;
1513  case 3: // 7EG1 - CINT7 EG1
1516  fSpecialSubTriggerName="7EG1";
1518  SETBIT(fTriggersEMCALSelected, kG1);
1519  break;
1520  case 4: // 8EG1 - CINT8 EG1
1523  fSpecialSubTriggerName="8EG1";
1525  SETBIT(fTriggersEMCALSelected, kG1);
1526  break;
1527  case 5: // 7EG2 - CINT7 EG2
1530  fSpecialSubTriggerName="7EG2";
1532  SETBIT(fTriggersEMCALSelected, kG2);
1533  break;
1534  case 6: // 8EG2 - CINT8 EG2
1537  fSpecialSubTriggerName="8EG2";
1539  SETBIT(fTriggersEMCALSelected, kG2);
1540  break;
1541  case 7: // 7DGA - CINT7 DGA
1544  fSpecialSubTriggerName="7DGA";
1546  SETBIT(fTriggersEMCALSelected, kG2);
1547  break;
1548  case 8: // 8DGA - CINT8 DGA
1551  fSpecialSubTriggerName="8DGA";
1553  SETBIT(fTriggersEMCALSelected, kG2);
1554  break;
1555  case 9: // 7DG1 - CINT7 DG1
1558  fSpecialSubTriggerName="7DG1";
1560  SETBIT(fTriggersEMCALSelected, kG1);
1561  break;
1562  case 10: // 8DG1 - CINT8 DG1
1565  fSpecialSubTriggerName="8DG1";
1567  SETBIT(fTriggersEMCALSelected, kG1);
1568  break;
1569  case 11: // 7DG2 - CINT7 DG2
1572  fSpecialSubTriggerName="7DG2";
1574  SETBIT(fTriggersEMCALSelected, kG2);
1575  break;
1576  case 12: // 8DG2 - CINT8 DG2
1579  fSpecialSubTriggerName="8DG2";
1581  SETBIT(fTriggersEMCALSelected, kG2);
1582  break;
1583 
1584  default:
1585  AliError("Warning: Special Subtrigger Class Not known");
1586  return 0;
1587  }
1588  } else if (fSpecialTrigger == 9){ // Subdivision of kEMCEGA trigger classes
1589  switch(selectSpecialSubTriggerClass){
1590  case 0: // all together
1593 // AliInfo("Info: Nothing to be done");
1594  break;
1595  case 1: // 7EJE - CINT7 EJE
1598  fSpecialSubTriggerName="7EJE";
1600  SETBIT(fTriggersEMCALSelected, kJ2);
1601  break;
1602  case 2: // 8EJE - CINT8 EJE
1605  fSpecialSubTriggerName="8EJE";
1607  SETBIT(fTriggersEMCALSelected, kJ2);
1608  break;
1609  case 3: // 7EJ1 - CINT7 EJ1
1612  fSpecialSubTriggerName="7EJ1";
1614  SETBIT(fTriggersEMCALSelected, kJ1);
1615  break;
1616  case 4: // 8EJ1 - CINT8 EJ1
1619  fSpecialSubTriggerName="8EJ1";
1621  SETBIT(fTriggersEMCALSelected, kJ1);
1622  break;
1623  case 5: // 7EJ2 - CINT7 EJ2
1626  fSpecialSubTriggerName="7EJ2";
1628  SETBIT(fTriggersEMCALSelected, kJ2);
1629  break;
1630  case 6: // 8EJ2 - CINT8 EJ2
1633  fSpecialSubTriggerName="8EJ2";
1635  SETBIT(fTriggersEMCALSelected, kJ2);
1636  break;
1637  case 7: // 7DJ1 - CINT7 DJ1
1640  fSpecialSubTriggerName="7DJ1";
1642  SETBIT(fTriggersEMCALSelected, kJ1);
1643  break;
1644  case 8: // 8DJ1 - CINT8 DJ1
1647  fSpecialSubTriggerName="8DJ1";
1649  SETBIT(fTriggersEMCALSelected, kJ1);
1650  break;
1651  case 9: // 7DJ2 - CINT7 DJ2
1654  fSpecialSubTriggerName="7DJ2";
1656  SETBIT(fTriggersEMCALSelected, kJ2);
1657  break;
1658  case 10: // 8DJ2 - CINT8 DJ2
1661  fSpecialSubTriggerName="8DJ2";
1663  SETBIT(fTriggersEMCALSelected, kJ2);
1664  break;
1665 
1666  default:
1667  AliError("Warning: Special Subtrigger Class Not known");
1668  return 0;
1669  }
1670  }
1671  return 1;
1672 }
1673 
1674 //________________________________________________________________________
1676 {
1677  // Set Cut
1678  fMultiplicityMethod=multiplicityMethod;
1679 
1680  // 0 Photon Multiplicity
1681  // 1 TPC Track multiplicity
1682  // 2 V0 Mult
1683  // 3 SPD Mult
1684 
1685  return kTRUE;
1686 }
1687 
1688 //________________________________________________________________________
1690 {// Set Cut
1691  switch(removePileUp){
1692  case 0:
1693  fRemovePileUp = kFALSE;
1694  break;
1695  case 1:
1696  fRemovePileUp = kTRUE;
1697  break;
1698  case 2:
1699  fRemovePileUp = kTRUE;
1702  break;
1703  case 3:
1704  fRemovePileUp = kTRUE;
1707  break;
1708  case 4:
1709  fRemovePileUp = kTRUE;
1712  break;
1713  case 5:
1714  fRemovePileUp = kTRUE;
1717  break;
1718  case 6:
1719  fRemovePileUp = kTRUE;
1720  fDoPileUpRejectV0MTPCout = kTRUE;
1721  fFPileUpRejectV0MTPCout = new TF1("fFPileUpRejectV0MTPCout","[0] + [1]*x",0.,10000.);
1722  fFPileUpRejectV0MTPCout->SetParameter(0,0.);
1723  fFPileUpRejectV0MTPCout->SetParameter(1,0.);
1724  if (fIsHeavyIon==1){
1725  if(fPeriodEnum == kLHC15o){
1726  fFPileUpRejectV0MTPCout->SetParameter(0,-2500.);
1727  fFPileUpRejectV0MTPCout->SetParameter(1,5.0);
1728  break;
1729  }else{
1730  fFPileUpRejectV0MTPCout->SetParameter(0,-1500.);
1731  fFPileUpRejectV0MTPCout->SetParameter(1,3.0);
1732  break;
1733  }
1734  } else if(fIsHeavyIon == 2){
1735  fFPileUpRejectV0MTPCout->SetParameter(0,-200.);
1736  fFPileUpRejectV0MTPCout->SetParameter(1,2.0);
1737  break;
1738  }else{
1739  fFPileUpRejectV0MTPCout->SetParameter(0,-300.);
1740  fFPileUpRejectV0MTPCout->SetParameter(1,4.0);
1741  break;
1742  }
1743  break;
1744  case 7:
1745  fRemovePileUp = kTRUE;
1746  fDoPileUpRejectV0MTPCout = kTRUE;
1747  fFPileUpRejectV0MTPCout = new TF1("fFPileUpRejectV0MTPCout","[0] + [1]*x",0.,10000.);
1748  fFPileUpRejectV0MTPCout->SetParameter(0,0.);
1749  fFPileUpRejectV0MTPCout->SetParameter(1,0.);
1750  if (fIsHeavyIon==1){
1751  if(fPeriodEnum == kLHC15o){
1752  fFPileUpRejectV0MTPCout->SetParameter(0,-2500.);
1753  fFPileUpRejectV0MTPCout->SetParameter(1,5.0);
1754  break;
1755  }else{
1756  fFPileUpRejectV0MTPCout->SetParameter(0,-2500.);
1757  fFPileUpRejectV0MTPCout->SetParameter(1,3.0);
1758  break;
1759  }
1760  } else if(fIsHeavyIon == 2){
1761  fFPileUpRejectV0MTPCout->SetParameter(0,-300.);
1762  fFPileUpRejectV0MTPCout->SetParameter(1,1.5);
1763  break;
1764  }else{
1765  fFPileUpRejectV0MTPCout->SetParameter(0,-300.);
1766  fFPileUpRejectV0MTPCout->SetParameter(1,3.0);
1767  break;
1768  }
1769  break;
1770  case 8:
1771  fRemovePileUp = kTRUE;
1772  fDoPileUpRejectV0MTPCout = kTRUE;
1773  fFPileUpRejectV0MTPCout = new TF1("fFPileUpRejectV0MTPCout","[0] + [1]*x",0.,10000.);
1774  fFPileUpRejectV0MTPCout->SetParameter(0,0.);
1775  fFPileUpRejectV0MTPCout->SetParameter(1,0.);
1776  if (fIsHeavyIon==1){
1777  if(fPeriodEnum == kLHC15o){
1778  fFPileUpRejectV0MTPCout->SetParameter(0,-2500.);
1779  fFPileUpRejectV0MTPCout->SetParameter(1,5.0);
1780  break;
1781  }else{
1782  fFPileUpRejectV0MTPCout->SetParameter(0,-1500.);
1783  fFPileUpRejectV0MTPCout->SetParameter(1,3.0);
1784  break;
1785  }
1786  } else if(fIsHeavyIon == 2){
1787  fFPileUpRejectV0MTPCout->SetParameter(0,-200.);
1788  fFPileUpRejectV0MTPCout->SetParameter(1,1.5);
1789  break;
1790  }else{
1791  fFPileUpRejectV0MTPCout->SetParameter(0,-300.);
1792  fFPileUpRejectV0MTPCout->SetParameter(1,4.0);
1793  break;
1794  }
1795  break;
1796  case 9:
1797  fRemovePileUp = kTRUE;
1800  fDoPileUpRejectV0MTPCout = kTRUE;
1801  fFPileUpRejectV0MTPCout = new TF1("fFPileUpRejectV0MTPCout","[0] + [1]*x",0.,10000.);
1802  fFPileUpRejectV0MTPCout->SetParameter(0,0.);
1803  fFPileUpRejectV0MTPCout->SetParameter(1,0.);
1804  if (fIsHeavyIon==1){
1805  if(fPeriodEnum == kLHC15o){
1806  fFPileUpRejectV0MTPCout->SetParameter(0,-2500.);
1807  fFPileUpRejectV0MTPCout->SetParameter(1,5.0);
1808  break;
1809  }else{
1810  fFPileUpRejectV0MTPCout->SetParameter(0,-1500.);
1811  fFPileUpRejectV0MTPCout->SetParameter(1,3.0);
1812  break;
1813  }
1814  } else if(fIsHeavyIon == 2){
1815  fFPileUpRejectV0MTPCout->SetParameter(0,-200.);
1816  fFPileUpRejectV0MTPCout->SetParameter(1,1.5);
1817  break;
1818  }else{
1819  fFPileUpRejectV0MTPCout->SetParameter(0,-300.);
1820  fFPileUpRejectV0MTPCout->SetParameter(1,4.0);
1821  break;
1822  }
1823  break;
1824  default:
1825  AliError("RemovePileUpCut not defined");
1826  return kFALSE;
1827  }
1828  return kTRUE;
1829 }
1830 
1831 //________________________________________________________________________
1833 
1834  switch(extraSignal){
1835  case 0:
1836  fRejectExtraSignals = 0;
1837  break; // No Rejection
1838  case 1:
1839  fRejectExtraSignals = 1;
1840  break; // MinBias Header
1841  case 2:
1842  fRejectExtraSignals = 2;
1843  break; // User String Array
1844  case 3:
1845  fRejectExtraSignals = 3;
1846  break; // Rejection for Gamma Correction only
1847  default:
1848  AliError(Form("Extra Signal Rejection not defined %d",extraSignal));
1849  return kFALSE;
1850  }
1851  return kTRUE;
1852 }
1853 
1854 //________________________________________________________________________
1856 
1857  switch(vertexCut){
1858  case 0: // no Vertex required // NOT fully working yet
1859  fEnableVertexCut = kFALSE;
1860  fMaxVertexZ = 1000;
1861  break;
1862  case 1: // vertex within +-15 cm
1863  fEnableVertexCut = kTRUE;
1864  fMaxVertexZ = 15;
1865  break;
1866  case 2: // vertex within +-12.5 cm
1867  fEnableVertexCut = kTRUE;
1868  fMaxVertexZ = 12.5;
1869  break;
1870  case 3: // vertex within +-10 cm
1871  fEnableVertexCut = kTRUE;
1872  fMaxVertexZ = 10.0;
1873  break;
1874  case 4: // vertex within +-7.5 cm
1875  fEnableVertexCut = kTRUE;
1876  fMaxVertexZ = 7.5;
1877  break;
1878  case 5: // vertex within +-5 cm
1879  fEnableVertexCut = kTRUE;
1880  fMaxVertexZ = 5.;
1881  break;
1882  default:
1883  AliError(Form("Vertex Cut not defined %d",vertexCut));
1884  return kFALSE;
1885  }
1886  return kTRUE;
1887 }
1888 
1889 //-------------------------------------------------------------
1891  if (fPeriodEnum == kLHC15n || // pp 5TeV
1892  fPeriodEnum == kLHC15o || // PbPb 5TeV
1893  fPeriodEnum == kLHC15k1a1 || fPeriodEnum == kLHC15k1a2 || fPeriodEnum == kLHC15k1a3 || fPeriodEnum == kLHC16j7 || // MC PbPb 5TeV LowIR
1894  fPeriodEnum == kLHC16h4 || // MC PbPb 5TeV added signals
1895  fPeriodEnum == kLHC16g1 || fPeriodEnum == kLHC16g1a || fPeriodEnum == kLHC16g1b || fPeriodEnum == kLHC16g1c || // MC PbPb 5TeV general purpose
1897  fPeriodEnum == kLHC16h2a || fPeriodEnum == kLHC16h2b || fPeriodEnum == kLHC16h2c || // MC PbPb 5TeV jet-jet
1899  fPeriodEnum == kLHC15g3a3 || fPeriodEnum == kLHC15g3c3 || // MC pp 13TeV
1900  fPeriodEnum == kLHC16q || fPeriodEnum == kLHC16t || // pPb 5TeV LHC16qt
1901  fPeriodEnum == kLHC16r || fPeriodEnum == kLHC16s || // pPb 8TeV LHC16rs
1905  fPeriodEnum == kLHC17g8a_fast || fPeriodEnum == kLHC17g8a_cent_woSDD || // MC pPb 5TeV LHC16qt
1906  fPeriodEnum == kLHC17g8b || fPeriodEnum == kLHC17g8c || // MC pPb 8TeV LHC16sr
1907  fPeriodEnum == kLHC17n || // Xe-Xe LHC17n
1908  fPeriodEnum == kLHC17j7 // MC Xe-Xe LHC17n
1909  ){
1910  return kTRUE;
1911  } else {
1912  return kFALSE;
1913  }
1914 }
1915 
1916 //-------------------------------------------------------------
1918 { // Get Event Centrality
1919 
1920  AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
1921  if(esdEvent){
1923  AliMultSelection *MultSelection = (AliMultSelection*)event->FindListObject("MultSelection");
1924  if(!MultSelection){
1925  AliWarning ("AliMultSelection object not found !");
1926  return -1;
1927  }else{
1928  if(fDetectorCentrality==0){
1929  if(fIsHeavyIon==2) return MultSelection->GetMultiplicityPercentile("V0A");// default for pPb
1930  else return MultSelection->GetMultiplicityPercentile("V0M");// default
1931  }else if(fDetectorCentrality==1) return MultSelection->GetMultiplicityPercentile("CL1",kTRUE);
1932  }
1933  }else{
1934  AliCentrality *fESDCentrality = (AliCentrality*)esdEvent->GetCentrality();
1935  if(fDetectorCentrality==0){
1936  if(fIsHeavyIon==2) return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
1937  else return fESDCentrality->GetCentralityPercentile("V0M"); // default
1938  }else if(fDetectorCentrality==1) return fESDCentrality->GetCentralityPercentile("CL1");
1939  }
1940  }
1941 
1942  AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
1943  if(aodEvent){
1945  AliMultSelection *MultSelection = (AliMultSelection*)aodEvent->FindListObject("MultSelection");
1946  if(!MultSelection){
1947  AliWarning ("AliMultSelection object not found !");
1948  return -1;
1949  } else{
1950  if(fDetectorCentrality==0){
1951  if(fIsHeavyIon==2) return MultSelection->GetMultiplicityPercentile("V0A");// default for pPb
1952  else return MultSelection->GetMultiplicityPercentile("V0M",kTRUE);
1953  }else if(fDetectorCentrality==1) return MultSelection->GetMultiplicityPercentile("CL1",kTRUE);
1954  }
1955  }else{
1956  if(aodEvent->GetHeader()){return ((AliVAODHeader*)aodEvent->GetHeader())->GetCentrality();}
1957  }
1958  }
1959 
1960  return -1;
1961 }
1962 
1963 //_____________________________________________________________________________________
1964 Bool_t AliConvEventCuts::IsCentralitySelected(AliVEvent *event, AliMCEvent *mcEvent)
1965 {
1966  // Centrality Selection
1967  if(!fIsHeavyIon){
1968  if ((fCentralityMin == 0 && fCentralityMax == 0) || (fCentralityMin > fCentralityMax) ){
1969  return kTRUE;
1970  } else {
1971  Int_t primaryTracksPP[9] = { 0, 2, 5, 10, 15,
1972  30, 50, 100, 1000
1973  };
1974  Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
1975  if ( nprimaryTracks >= primaryTracksPP[fCentralityMin] && nprimaryTracks < primaryTracksPP[fCentralityMax]){
1976  return kTRUE;
1977  } else {
1978  return kFALSE;
1979  }
1980  return kFALSE;
1981  }
1982  }
1983  if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
1984  else if ( fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-10*multfactor
1986  if(centrality<0 && !mcEvent)return kFALSE;
1987 
1988  Int_t centralityC=0;
1989  if (fModCentralityClass == 0){
1990  centralityC= Int_t(centrality/10);
1991  if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1992  return kTRUE;
1993  else return kFALSE;
1994  }
1995  else if (fModCentralityClass ==1){
1996  centralityC= Int_t(centrality);
1997  if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1998  return kTRUE;
1999  } else return kFALSE;
2000  }
2001  else if (fModCentralityClass ==2){
2002  centralityC= Int_t(centrality);
2003  if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
2004  return kTRUE;
2005  else return kFALSE;
2006  }
2007 
2008  Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
2009  Int_t PrimaryTracks10[11][2] =
2010  {
2011  {9999,9999}, // 0 //1550 changed to 9999 on 9 Dec
2012  {1210, 928}, // 10
2013  { 817, 658}, // 20
2014  { 536, 435}, // 30
2015  { 337, 276}, // 40
2016  { 197, 162}, // 50
2017  { 106, 100}, // 60
2018  { 51, 44}, // 70
2019  { 21, 18}, // 80
2020  { 0, 0}, // 90
2021  { 0, 0}// 100 // only max accessible
2022  };
2023  Int_t PrimaryTracksLHC11h10[11][2] =
2024  {
2025  {9999,9999}, // 0 //1550 changed to 9999 on 9 Dec
2026  { 985, 928}, // 10
2027  { 661, 658}, // 20
2028  { 434, 435}, // 30
2029  { 275, 276}, // 40
2030  { 173, 162}, // 50
2031  { 100, 100}, // 60
2032  { 42, 44}, // 70
2033  { 19, 18}, // 80
2034  { 0, 0}, // 90
2035  { 0, 0}// 100 // only max accessible
2036  };
2037  Int_t PrimaryTracks5a[11][2] =
2038  {
2039  {9999,9999}, // 0 ///1550 changed to 9999 on 9 Dec
2040  {1485,1168}, // 5
2041  {1210, 928}, // 10
2042  { 995, 795}, // 15
2043  { 817, 658}, // 20
2044  { 666, 538}, // 25
2045  { 536, 435}, // 30
2046  { 428, 350}, // 35
2047  { 337, 276}, // 40
2048  { 260, 214}, // 45
2049  { 0, 162}// 50 only max accessible
2050  };
2051  Int_t PrimaryTracksLHC11h5a[11][2] =
2052  {
2053  {9999,9999}, // 0 ///1550 changed to 9999 on 9 Dec
2054  {1166,1168}, // 5
2055  { 953, 928}, // 10
2056  { 805, 795}, // 15
2057  { 655, 658}, // 20
2058  { 535, 538}, // 25
2059  { 435, 435}, // 30
2060  { 349, 350}, // 35
2061  { 275, 276}, // 40
2062  { 214, 214}, // 45
2063  { 165, 162}// 50 only max accessible
2064  };
2065  Int_t PrimaryTracks5b[11][2] =
2066  {
2067  { 260, 214}, // 45
2068  { 197, 162}, // 50
2069  { 147, 125}, // 55
2070  { 106, 100}, // 60
2071  { 75, 63}, // 65
2072  { 51, 44}, // 70
2073  { 34, 29}, // 75
2074  { 21, 18}, // 80
2075  { 13, 11}, // 85
2076  { 0, 0}, // 90
2077  { 0, 0}// 100 only max accessible
2078  };
2079  Int_t PrimaryTracksLHC11h5b[11][2] =
2080  {
2081  { 214, 214}, // 45
2082  { 165, 162}, // 50
2083  { 127, 125}, // 55
2084  { 93, 100}, // 60
2085  { 64, 63}, // 65
2086  { 44, 44}, // 70
2087  { 30, 29}, // 75
2088  { 18, 18}, // 80
2089  { 11, 11}, // 85
2090  { 0, 0}, // 90
2091  { 0, 0}// 100 only max accessible
2092  };
2093  Int_t PrimaryTracksLHC17n10[11][2] =
2094  {
2095  {9999,9999}, // 0 // 1500 max in hist but set to real max
2096  { 800, 800}, // 10 // guess
2097  { 628, 628}, // 20
2098  { 350, 350}, // 30 // guess
2099  { 268, 268}, // 40
2100  { 200, 200}, // 50 // guess
2101  { 100, 100}, // 60 // guess
2102  { 51, 44}, // 70 // guess
2103  { 21, 18}, // 80 // guess
2104  { 0, 0}, // 90 // guess
2105  { 0, 0} // 100 // only max accessible
2106  };
2107 
2108  Int_t column = 0;
2109  if(event->IsA()==AliESDEvent::Class()) column = 0;
2110  if(event->IsA()==AliAODEvent::Class()) column = 1;
2111 
2112  if (fModCentralityClass == 3){
2113  if(mcEvent){
2114  // setting specific arry for LHC11h for MC track mult
2116  if(nprimaryTracks > PrimaryTracksLHC11h10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC11h10[fCentralityMin][column])
2117  return kTRUE;
2118  else return kFALSE;
2119  // setting specific arry for LHC17n for MC track mult
2120  } else if(fPeriodEnum == kLHC17j7 ){
2121  if(nprimaryTracks > PrimaryTracksLHC17n10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC17n10[fCentralityMin][column])
2122  return kTRUE;
2123  else return kFALSE;
2124  // setting specific arry for LHC10h for MC track mult
2125  } else {
2126  if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
2127  return kTRUE;
2128  else return kFALSE;
2129  }
2130  }
2131  else{
2132  centralityC= Int_t(centrality/10);
2133  if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
2134  return kTRUE;
2135  else return kFALSE;
2136  }
2137  }
2138  else if (fModCentralityClass ==4){
2139  if(mcEvent){
2140  // setting specific arry for LHC11h for MC track mult
2142  if(nprimaryTracks > PrimaryTracksLHC11h5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC11h5a[fCentralityMin][column])
2143  return kTRUE;
2144  else return kFALSE;
2145  // setting specific arry for LHC10h for MC track mult
2146  } else {
2147  if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
2148  return kTRUE;
2149  else return kFALSE;
2150  }
2151  }
2152  else{
2153  centralityC= Int_t(centrality);
2154  if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
2155  return kTRUE;
2156  } else return kFALSE;
2157  }
2158  }
2159  else if (fModCentralityClass ==5){
2160  if(mcEvent){
2161  // setting specific arry for LHC11h for MC track mult
2163  if(nprimaryTracks > PrimaryTracksLHC11h5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC11h5b[fCentralityMin][column])
2164  return kTRUE;
2165  else return kFALSE;
2166  // setting specific arry for LHC10h for MC track mult
2167  } else {
2168  if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
2169  return kTRUE;
2170  else return kFALSE;
2171  }
2172  }
2173  else{
2174  centralityC= Int_t(centrality);
2175  if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
2176  return kTRUE;
2177  else return kFALSE;
2178  }
2179  }
2180 
2181  return kFALSE;
2182 }
2183 
2184 //________________________________________________________________________
2186  // Cut on z position of primary vertex
2187  Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
2188  Double_t fVertexZSPD = 0;
2189  AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
2190  if(fESDEvent){
2191  fVertexZSPD = fESDEvent->GetPrimaryVertexSPD()->GetZ();
2192  }
2193  AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
2194  if(fAODEvent){
2195  fVertexZSPD = fAODEvent->GetPrimaryVertexSPD()->GetZ();
2196  }
2197 
2198  if(TMath::Abs(fVertexZ)>fMaxVertexZ)return kFALSE;
2199 
2200 
2201  if (fPeriodEnum == kLHC11h){
2202  if (TMath::Abs(fVertexZ-fVertexZSPD) > 0.1) return kFALSE;
2203  }
2204  if (fIsHeavyIon == 2){
2205  if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
2206  }
2207 
2208  return kTRUE;
2209 }
2210 
2211 //________________________________________________________________________
2213 {
2215  return kFALSE;
2216  TBits fIR1 = event->GetHeader()->GetIRInt1InteractionMap(); // IR1 contains V0 information (VIR)
2217  TBits fIR2 = event->GetHeader()->GetIRInt2InteractionMap(); // IR2 contains T0 information
2218  UShort_t bunchCrossings = event->GetBunchCrossNumber();
2220  for(Int_t i = 0; i<180;i++){
2221  if(fIR1.TestBitNumber(i))
2222  fHistoPastFutureBits->Fill((i*25)-90*25);
2223  }
2224  }
2225 
2226  Bool_t isOutOfBunchPileup = 0;
2227  Int_t pf1 = fPastFutureRejectionLow +bunchCrossings%4;
2228  Int_t pf2 = fPastFutureRejectionHigh+bunchCrossings%4;
2229  if(pf1 < -89) pf1 = -89;
2230  if(pf2 > 89) pf2 = 89;
2231  Int_t pf2maxForT0 = pf2;
2232  Int_t ir1skip = 0;
2233  for (Int_t i=pf1;i<=pf2;i++) {
2234  if (i==0) continue;
2235  if (i<=pf2maxForT0) isOutOfBunchPileup|=fIR2.TestBitNumber(90+i); // T0-based clean-up
2236  if (i>0 && i<=ir1skip) continue; // skip next 2 for old IR definitions
2237  isOutOfBunchPileup|=fIR1.TestBitNumber(90+i); // V0-based clean-up
2238  }
2239  return isOutOfBunchPileup;
2240 }
2241 //________________________________________________________________________
2242 
2244 {
2245  Bool_t isPileUpV0MTPCout=0;
2246 
2247  Double_t multV0M;
2248  Double_t valFunc;
2249  if (fIsHeavyIon==2){
2250  multV0M = event->GetVZEROData()->GetMTotV0A();
2251  }else{
2252  multV0M = event->GetVZEROData()->GetMTotV0A() + event->GetVZEROData()->GetMTotV0C() ;
2253  }
2254 
2255  if ( fFPileUpRejectV0MTPCout != 0x0 ){
2256  valFunc= fFPileUpRejectV0MTPCout->Eval(((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfTPCoutTracks());
2257  if (multV0M < valFunc ) isPileUpV0MTPCout=1;
2258  }
2259 
2260  return isPileUpV0MTPCout;
2261 
2262 }
2263 //________________________________________________________________________
2265  // returns number of contributors to the vertex
2266 
2267  AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
2268  if(fESDEvent){
2269  if (fESDEvent->GetPrimaryVertex() != NULL){
2270  if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
2271  // cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
2272  return fESDEvent->GetPrimaryVertex()->GetNContributors();
2273  }
2274  }
2275 
2276  if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
2277  if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
2278  // cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
2279  return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
2280  }else {
2281  AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
2282  // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
2283  return 0;
2284  }
2285  }
2286  }
2287 
2288  AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
2289  if(fAODEvent){
2290  if (fAODEvent->GetPrimaryVertex() != NULL){
2291  if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
2292  return fAODEvent->GetPrimaryVertex()->GetNContributors();
2293  }
2294  }
2295  if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
2296  if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
2297  return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
2298  } else {
2299  AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
2300  return 0;
2301  }
2302  }
2303  }
2304  // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
2305  return 0;
2306 }
2307 
2308 //________________________________________________________________________
2309 // Analysing Jet-Jet MC's
2310 //________________________________________________________________________
2312  AliGenCocktailEventHeader *cHeader = 0x0;
2313  Bool_t headerFound = kFALSE;
2314  weight = -1;
2315  fMaxPtJetMC = 0;
2316 
2317  if ( fPeriodEnum != kLHC17g8a_fast && fPeriodEnum != kLHC17g8a_cent_woSDD && // LHC16qt pPb 5TeV JetJet MC's
2318  fPeriodEnum != kLHC17g8b && fPeriodEnum != kLHC17g8c && // LHC16sr pPb 8TeV JetJet MC's
2319  fPeriodEnum != kLHC16P1JJ && fPeriodEnum != kLHC16P1JJLowB && // LHC16X Jet Jet MC's
2320  fPeriodEnum != kLHC16h3 && // LHC15n Jet Jet MC's
2321  fPeriodEnum != kLHC15a3a && fPeriodEnum != kLHC15a3a_plus && fPeriodEnum != kLHC15a3b && // LHC13g Jet Jet MC's
2322  fPeriodEnum != kLHC15g1a && fPeriodEnum != kLHC15g1b && // LHC11a Jet Jet MC's
2323  fPeriodEnum != kLHC13b4_fix && fPeriodEnum != kLHC13b4_plus && // LHC13 pPb Jet Jet MC's
2324  fPeriodEnum != kLHC16c3a && fPeriodEnum != kLHC16c3b && fPeriodEnum != kLHC16c3c && // LHC13 pPb Jet Jet MC's
2325  fPeriodEnum != kLHC16c2 && fPeriodEnum != kLHC16c2_plus // LHC12 JetJet MC
2326  ){
2327 
2328  weight = 1;
2329  return kTRUE;
2330  }
2331 
2332  if(mcEvent){
2333  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(mcEvent->GenEventHeader());
2334  if(cHeader) headerFound = kTRUE;
2335  }else{
2336  //no mcEvent available -> not running on MC
2337  weight = 1;
2338  return kTRUE;
2339  }
2340 
2341  if(headerFound){
2342  TList *genHeaders = 0x0;
2343  if(cHeader) genHeaders = cHeader->GetHeaders();
2344  AliGenEventHeader* gh = 0;
2345  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
2346  gh = (AliGenEventHeader*)genHeaders->At(i);
2347  TString GeneratorName = gh->GetName();
2348  if (GeneratorName.CompareTo("AliGenPythiaEventHeader") == 0){
2349  Bool_t eventAccepted = kTRUE;
2350  TParticle * jet = 0;
2351  Int_t nTriggerJets = dynamic_cast<AliGenPythiaEventHeader*>(gh)->NTriggerJets();
2352  Float_t ptHard = dynamic_cast<AliGenPythiaEventHeader*>(gh)->GetPtHard();
2353  Float_t tmpjet[]={0,0,0,0};
2354  for(Int_t ijet = 0; ijet< nTriggerJets; ijet++){
2355  dynamic_cast<AliGenPythiaEventHeader*>(gh)->TriggerJet(ijet, tmpjet);
2356  jet = new TParticle(94, 21, -1, -1, -1, -1, tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3], 0,0,0,0);
2357  //Compare jet pT and pt Hard
2358  if(jet->Pt() > fMaxFacPtHard * ptHard){
2359  eventAccepted= kFALSE;
2360  }
2361  if (jet->Pt() > fMaxPtJetMC) fMaxPtJetMC = jet->Pt();
2362  }
2363  if (jet) delete jet;
2364  if (mcEvent){
2365  for(Long_t i = 0; i < mcEvent->GetNumberOfPrimaries(); i++) {
2366  TParticle* particle = (TParticle *)mcEvent->Particle(i);
2367  if (!particle) continue;
2368  if (TMath::Abs(particle->GetPdgCode()) == 111 || TMath::Abs(particle->GetPdgCode()) == 221){
2369  if (particle->Pt() > fMaxFacPtHardSingleParticle*ptHard){
2370  eventAccepted= kFALSE;
2371  }
2372  }
2373 
2374  }
2375  }
2376 
2377  if ( fPeriodEnum == kLHC16P1JJLowB) {
2378  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2379  21, 28, 36, 45, 57,
2380  70, 85, 99, 115, 132,
2381  150, 169, 190, 212, 235,
2382  1000000};
2383  Double_t weightsBins[20] = { 43.7553, 13.5848, 6.788, 2.67826, 0.975255,
2384  0.39069, 0.127342, 0.0465597, 0.0206539, 0.00750243,
2385  0.00319118, 0.00122291, 0.000641232, 0.000321437, 0.000168273,
2386  9.17033e-05, 5.34755e-05, 3.01354e-05, 1.74518e-05, 2.8004e-05};
2387  Int_t bin = 0;
2388  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2389  if (bin < 20) weight = weightsBins[bin];
2390 
2391  } else if ( fPeriodEnum == kLHC16P1JJ ){
2392  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2393  21, 28, 36, 45, 57,
2394  70, 85, 99, 115, 132,
2395  150, 169, 190, 212, 235,
2396  1000000};
2397  Double_t weightsBins[20] = { 43.8654, 13.6215, 6.79856, 2.67526, 0.978794,
2398  0.390797, 0.127769, 0.0465714, 0.0206173, 0.00750282,
2399  0.00318773, 0.00122533, 0.000644385, 0.000321225, 0.00016846,
2400  9.18305e-05, 5.33507e-05, 3.00677e-05, 1.74608e-05, 2.80823e-05};
2401 
2402  Int_t bin = 0;
2403  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2404  if (bin < 20) weight = weightsBins[bin];
2405 
2406  } else if ( fPeriodEnum == kLHC16h3 ){
2407  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2408  21, 28, 36, 45, 57,
2409  70, 85, 99, 115, 132,
2410  150, 169, 190, 212, 235,
2411  1000000};
2412  Double_t weightsBins[20] = { 16.0869, 4.61169, 2.14976, 0.782544, 0.264854,
2413  9.7619E-02, 2.92747E-02, 9.89515E-03, 4.05152E-03, 1.35393E-03,
2414  5.29864E-04, 1.88317E-04, 9.23E-05, 4.29E-05, 2.09E-05,
2415  1.06E-05, 5.76E-06, 3.00E-06, 1.62E-06, 2.10E-06 };
2416  Int_t bin = 0;
2417  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2418  if (bin < 20) weight = weightsBins[bin];
2419 
2420 
2421  } else if ( fPeriodEnum == kLHC15a3b || fPeriodEnum == kLHC15g1b ){
2422  Double_t ptHardBinRanges[13] = { 5, 7, 9, 12, 16,
2423  21, 28, 36, 45, 57,
2424  70, 85, 1000};
2425  Double_t weightsBins[12] = { 7.858393e-03, 4.718691e-03, 4.077575e-03, 2.814527e-03, 1.669625e-03,
2426  1.007535e-03, 4.536554e-04, 2.111041e-04, 1.094840e-04, 4.404973e-05,
2427  1.933238e-05, 1.562895e-05};
2428  Int_t bin = 0;
2429  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2430  if (bin < 12) weight = weightsBins[bin];
2431 
2432  } else if ( fPeriodEnum == kLHC15g1a ){
2433  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2434  84, 117, 152, 191, 1000000,
2435  5, 7, 9, 12, 16,
2436  21, 28, 36, 45, 57 };
2437  Double_t weightsBins[19] = { 4.43629 , 0.49523, 0.0394921, 0.00383174, 0.000446559,
2438  6.37374e-05, 1.03134e-05, 2.27012e-06, 7.59281e-07, 0,
2439  2.62906, 1.12884, 0.656873, 0.262822, 0.0876732,
2440  0.0307759, 0.0087083, 0.0027664, 0.00106203};
2441 
2442  Int_t bin = 0;
2443  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2444  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2445  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2446  if (bin < 19) weight = weightsBins[bin];
2447 
2448  } else if ( fPeriodEnum == kLHC15a3a || fPeriodEnum == kLHC15a3a_plus ) {
2449  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2450  84, 117, 152, 191, 1000000,
2451  5, 7, 9, 12, 16,
2452  21, 28, 36, 45, 57 };
2453  // LHC15a3a
2454  Double_t weightsBins[19] = { 4.43897 , 0.495766, 0.039486, 0.00383011, 0.000447104,
2455  6.37277e-05, 1.03166e-05, 2.26971e-06, 7.59023e-07, 0,
2456  2.63331, 1.12815, 0.657034, 0.262756, 0.0877227,
2457  0.0307638, 0.00870635, 0.00276658, 0.00106229};
2458  Int_t bin = 0;
2459  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2460  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2461  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2462  if (bin < 19) weight = weightsBins[bin];
2463 
2464  } else if ( fPeriodEnum == kLHC16c2 || fPeriodEnum == kLHC16c2_plus ){
2465  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2466  21, 28, 36, 45, 57,
2467  70, 85, 99, 115, 132,
2468  150, 169, 190, 212, 235,
2469  1000000};
2470  Double_t weightsBins[20] = { 28.3084, 8.43277, 4.07753, 1.54359, 0.543318,
2471  0.208394, 0.0652349, 0.0186904, 0.00834528, 0.00301414,
2472  0.00125939, 0.000474403, 0.000244052, 0.00011924, 6.09838e-05,
2473  3.24148e-05, 1.84314e-05, 1.00926e-05, 5.68632e-06, 8.38092e-06};
2474  Int_t bin = 0;
2475  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2476  if (bin < 20) weight = weightsBins[bin];
2477 
2478  } else if ( fPeriodEnum == kLHC16c3a ){
2479  Double_t ptHardBinRanges[6] = { 7, 9, 12, 16, 21, 1000};
2480  Double_t weightsBins[5] = { 0.00672445, 0.00799158, 0.00678934, 0.00463908, 0.00600068}; //preliminary estimates
2481  Int_t bin = 0;
2482  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2483  if (bin < 5) weight = weightsBins[bin];
2484 
2485  } else if (fPeriodEnum == kLHC16c3b ){
2486  Double_t ptHardBinRanges[7] = { 14, 19, 26, 35, 48, 66, 1000};
2487  Double_t weightsBins[6] = { 0.00608281, 0.00393646, 0.00200138, 0.000986267, 0.000389051, 0.0001863}; //preliminary estimates
2488  Int_t bin = 0;
2489  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2490  if (bin < 6) weight = weightsBins[bin];
2491 
2492  } else if (fPeriodEnum == kLHC16c3c ){
2493  Double_t ptHardBinRanges[8] = { 0, 5, 11, 21, 36, 57, 84, 1000};
2494  Double_t weightsBins[7] = { 0.00151999, 0.000100346, 1.27688e-05, 1.82388e-06, 3.08506e-07, 6.00308e-08, 1.88414e-08}; //preliminary estimates
2495  Int_t bin = 0;
2496  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2497  if (bin < 7) weight = weightsBins[bin];
2498 
2499  } else if ( fPeriodEnum == kLHC13b4_fix || fPeriodEnum == kLHC13b4_plus ){
2500  Double_t ptHardBinRanges[11] = { 5, 11, 21, 36, 57,
2501  84, 117, 152, 191, 234,
2502  1000};
2503  Double_t weightsBins[10] = { 2.24185e-6 , 2.48463e-7, 2.23171e-8, 2.43667e-9, 3.29934e-10,
2504  5.34592e-11, 1.00937e-11, 2.6493e-12, 8.53912e-13, 5.43077e-13};
2505  Int_t bin = 0;
2506  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2507  if (bin < 10) weight = weightsBins[bin];
2508 
2509  } else {
2510  weight = 1;
2511  }
2512 
2513  if (weight == -1) return kFALSE;
2514  else return eventAccepted;
2515 
2516  }
2517  }
2518  } else {
2519  AliGenEventHeader * eventHeader = mcEvent->GenEventHeader();
2520  TString eventHeaderName = eventHeader->ClassName();
2521  if (eventHeaderName.CompareTo("AliGenPythiaEventHeader") == 0){
2522  Bool_t eventAccepted = kTRUE;
2523  TParticle * jet = 0;
2524  Int_t nTriggerJets = dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->NTriggerJets();
2525  Float_t ptHard = dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->GetPtHard();
2526  Float_t tmpjet[]={0,0,0,0};
2527  for(Int_t ijet = 0; ijet< nTriggerJets; ijet++){
2528  dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->TriggerJet(ijet, tmpjet);
2529  jet = new TParticle(94, 21, -1, -1, -1, -1, tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3], 0,0,0,0);
2530  //Compare jet pT and pt Hard
2531  if(jet->Pt() > fMaxFacPtHard * ptHard){
2532  eventAccepted= kFALSE;
2533  }
2534  if (jet->Pt() > fMaxPtJetMC) fMaxPtJetMC = jet->Pt();
2535  }
2536  if (mcEvent){
2537  for(Long_t i = 0; i < mcEvent->GetNumberOfPrimaries(); i++) {
2538  TParticle* particle = (TParticle *)mcEvent->Particle(i);
2539  if (!particle) continue;
2540  if (TMath::Abs(particle->GetPdgCode()) == 111 || TMath::Abs(particle->GetPdgCode()) == 221){
2541  if (particle->Pt() > fMaxFacPtHardSingleParticle*ptHard){
2542  eventAccepted= kFALSE;
2543  }
2544  }
2545 
2546  }
2547  }
2548 
2549  if ( fPeriodEnum == kLHC16P1JJLowB) {
2550  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2551  21, 28, 36, 45, 57,
2552  70, 85, 99, 115, 132,
2553  150, 169, 190, 212, 235,
2554  1000000};
2555  Double_t weightsBins[20] = { 43.7553, 13.5848, 6.788, 2.67826, 0.975255,
2556  0.39069, 0.127342, 0.0465597, 0.0206539, 0.00750243,
2557  0.00319118, 0.00122291, 0.000641232, 0.000321437, 0.000168273,
2558  9.17033e-05, 5.34755e-05, 3.01354e-05, 1.74518e-05, 2.8004e-05};
2559  Int_t bin = 0;
2560  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2561  if (bin < 20) weight = weightsBins[bin];
2562 
2563  } else if ( fPeriodEnum == kLHC16P1JJ ){
2564  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2565  21, 28, 36, 45, 57,
2566  70, 85, 99, 115, 132,
2567  150, 169, 190, 212, 235,
2568  1000000};
2569  Double_t weightsBins[20] = { 43.8654, 13.6215, 6.79856, 2.67526, 0.978794,
2570  0.390797, 0.127769, 0.0465714, 0.0206173, 0.00750282,
2571  0.00318773, 0.00122533, 0.000644385, 0.000321225, 0.00016846,
2572  9.18305e-05, 5.33507e-05, 3.00677e-05, 1.74608e-05, 2.80823e-05};
2573 
2574  Int_t bin = 0;
2575  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2576  if (bin < 20) weight = weightsBins[bin];
2577 
2578  } else if ( fPeriodEnum == kLHC16h3 ){
2579  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2580  21, 28, 36, 45, 57,
2581  70, 85, 99, 115, 132,
2582  150, 169, 190, 212, 235,
2583  1000000};
2584  Double_t weightsBins[20] = { 16.0869, 4.61169, 2.14976, 0.782544, 0.264854,
2585  9.7619E-02, 2.92747E-02, 9.89515E-03, 4.05152E-03, 1.35393E-03,
2586  5.29864E-04, 1.88317E-04, 9.23E-05, 4.29E-05, 2.09E-05,
2587  1.06E-05, 5.76E-06, 3.00E-06, 1.62E-06, 2.10E-06 };
2588  Int_t bin = 0;
2589  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2590  if (bin < 20) weight = weightsBins[bin];
2591 
2592 
2593  } else if ( fPeriodEnum == kLHC15a3b || fPeriodEnum == kLHC15g1b ){
2594  Double_t ptHardBinRanges[13] = { 5, 7, 9, 12, 16,
2595  21, 28, 36, 45, 57,
2596  70, 85, 1000};
2597  Double_t weightsBins[12] = { 7.858393e-03, 4.718691e-03, 4.077575e-03, 2.814527e-03, 1.669625e-03,
2598  1.007535e-03, 4.536554e-04, 2.111041e-04, 1.094840e-04, 4.404973e-05,
2599  1.933238e-05, 1.562895e-05};
2600  Int_t bin = 0;
2601  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2602  if (bin < 12) weight = weightsBins[bin];
2603 
2604  } else if ( fPeriodEnum == kLHC15g1a ){
2605  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2606  84, 117, 152, 191, 1000000,
2607  5, 7, 9, 12, 16,
2608  21, 28, 36, 45, 57 };
2609  Double_t weightsBins[19] = { 4.43629 , 0.49523, 0.0394921, 0.00383174, 0.000446559,
2610  6.37374e-05, 1.03134e-05, 2.27012e-06, 7.59281e-07, 0,
2611  2.62906, 1.12884, 0.656873, 0.262822, 0.0876732,
2612  0.0307759, 0.0087083, 0.0027664, 0.00106203};
2613 
2614  Int_t bin = 0;
2615  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2616  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2617  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2618  if (bin < 19) weight = weightsBins[bin];
2619 
2620  } else if ( fPeriodEnum == kLHC15a3a || fPeriodEnum == kLHC15a3a_plus ) {
2621  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2622  84, 117, 152, 191, 1000000,
2623  5, 7, 9, 12, 16,
2624  21, 28, 36, 45, 57 };
2625  // LHC15a3a
2626  Double_t weightsBins[19] = { 4.43897 , 0.495766, 0.039486, 0.00383011, 0.000447104,
2627  6.37277e-05, 1.03166e-05, 2.26971e-06, 7.59023e-07, 0,
2628  2.63331, 1.12815, 0.657034, 0.262756, 0.0877227,
2629  0.0307638, 0.00870635, 0.00276658, 0.00106229};
2630  Int_t bin = 0;
2631  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2632  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2633  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2634  if (bin < 19) weight = weightsBins[bin];
2635 
2636  } else if ( fPeriodEnum == kLHC16c2 || fPeriodEnum == kLHC16c2_plus ){
2637  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2638  21, 28, 36, 45, 57,
2639  70, 85, 99, 115, 132,
2640  150, 169, 190, 212, 235,
2641  1000000};
2642  Double_t weightsBins[20] = { 28.3084, 8.43277, 4.07753, 1.54359, 0.543318,
2643  0.208394, 0.0652349, 0.0186904, 0.00834528, 0.00301414,
2644  0.00125939, 0.000474403, 0.000244052, 0.00011924, 6.09838e-05,
2645  3.24148e-05, 1.84314e-05, 1.00926e-05, 5.68632e-06, 8.38092e-06};
2646  Int_t bin = 0;
2647  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2648  if (bin < 20) weight = weightsBins[bin];
2649 
2650  } else if ( fPeriodEnum == kLHC16c3a ){
2651  Double_t ptHardBinRanges[6] = { 7, 9, 12, 16, 21, 1000};
2652  Double_t weightsBins[5] = { 0.00672445, 0.00799158, 0.00678934, 0.00463908, 0.00600068}; //preliminary estimates
2653  Int_t bin = 0;
2654  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2655  if (bin < 5) weight = weightsBins[bin];
2656 
2657  } else if (fPeriodEnum == kLHC16c3b ){
2658  Double_t ptHardBinRanges[7] = { 14, 19, 26, 35, 48, 66, 1000};
2659  Double_t weightsBins[6] = { 0.00608281, 0.00393646, 0.00200138, 0.000986267, 0.000389051, 0.0001863}; //preliminary estimates
2660  Int_t bin = 0;
2661  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2662  if (bin < 6) weight = weightsBins[bin];
2663 
2664  } else if (fPeriodEnum == kLHC16c3c ){
2665  Double_t ptHardBinRanges[8] = { 0, 5, 11, 21, 36, 57, 84, 1000};
2666  Double_t weightsBins[7] = { 0.00151999, 0.000100346, 1.27688e-05, 1.82388e-06, 3.08506e-07, 6.00308e-08, 1.88414e-08}; //preliminary estimates
2667  Int_t bin = 0;
2668  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2669  if (bin < 7) weight = weightsBins[bin];
2670 
2671  } else if ( fPeriodEnum == kLHC13b4_fix || fPeriodEnum == kLHC13b4_plus ){
2672  Double_t ptHardBinRanges[11] = { 5, 11, 21, 36, 57,
2673  84, 117, 152, 191, 234,
2674  1000};
2675  Double_t weightsBins[10] = { 2.24185e-6 , 2.48463e-7, 2.23171e-8, 2.43667e-9, 3.29934e-10,
2676  5.34592e-11, 1.00937e-11, 2.6493e-12, 8.53912e-13, 5.43077e-13};
2677  Int_t bin = 0;
2678  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2679  if (bin < 10) weight = weightsBins[bin];
2680  } else {
2681  weight = 1;
2682  }
2683 
2684  if (weight == -1) return kFALSE;
2685  else return eventAccepted;
2686 
2687  } else {
2688  return kFALSE;
2689  }
2690  }
2691 
2692  return kFALSE;
2693 }
2694 
2695 //________________________________________________________________________
2696 // Analysing Jet-Jet MC's
2697 //________________________________________________________________________
2698 void AliConvEventCuts::GetXSectionAndNTrials(AliMCEvent *mcEvent, Float_t &XSection, Float_t &NTrials){
2699 
2700  AliGenCocktailEventHeader *cHeader = 0x0;
2701  Bool_t headerFound = kFALSE;
2702 
2703  if ( fPeriodEnum != kLHC17g8a_fast && fPeriodEnum != kLHC17g8a_cent_woSDD && // LHC16qt pPb 5TeV JetJet MC's
2704  fPeriodEnum != kLHC17g8b && fPeriodEnum != kLHC17g8c && // LHC16sr pPb 8TeV JetJet MC's
2705  fPeriodEnum != kLHC16P1JJ && fPeriodEnum != kLHC16P1JJLowB && // LHC16X Jet Jet MC's
2706  fPeriodEnum != kLHC16h3 && // LHC15n Jet Jet MC's
2707  fPeriodEnum != kLHC15a3a && fPeriodEnum != kLHC15a3a_plus && fPeriodEnum != kLHC15a3b && // LHC13g Jet Jet MC's
2708  fPeriodEnum != kLHC15g1a && fPeriodEnum != kLHC15g1b && // LHC11a Jet Jet MC's
2709  fPeriodEnum != kLHC13b4_fix && fPeriodEnum != kLHC13b4_plus && // LHC13 pPb Jet Jet MC's
2710  fPeriodEnum != kLHC16c3a && fPeriodEnum != kLHC16c3b && fPeriodEnum != kLHC16c3c && // LHC13 pPb Jet Jet MC's
2711  fPeriodEnum != kLHC16c2 && fPeriodEnum != kLHC16c2_plus // LHC12 JetJet MC
2712  ){
2713  NTrials = -1;
2714  XSection = -1;
2715  return;
2716  }
2717 
2718  if(mcEvent){
2719  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(mcEvent->GenEventHeader());
2720  if(cHeader) headerFound = kTRUE;
2721  }else{
2722  //no mcEvent available -> not running on MC
2723  NTrials = -1;
2724  XSection = -1;
2725  return;
2726  }
2727 
2728  if(headerFound){
2729  TList *genHeaders = 0x0;
2730  if(cHeader) genHeaders = cHeader->GetHeaders();
2731  AliGenEventHeader* gh = 0;
2732  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
2733  gh = (AliGenEventHeader*)genHeaders->At(i);
2734  TString GeneratorName = gh->GetName();
2735  if (GeneratorName.CompareTo("AliGenPythiaEventHeader") == 0){
2736  AliGenPythiaEventHeader* gPythia = dynamic_cast<AliGenPythiaEventHeader*>(gh);
2737  NTrials = gPythia->Trials();
2738  XSection = gPythia->GetXsection();
2739  return;
2740  }
2741  }
2742  } else {
2743  AliGenEventHeader * eventHeader = mcEvent->GenEventHeader();
2744  if(eventHeader){
2745  TString eventHeaderName = eventHeader->ClassName();
2746  if (eventHeaderName.CompareTo("AliGenPythiaEventHeader") == 0){
2747  AliGenPythiaEventHeader* gPythia = dynamic_cast<AliGenPythiaEventHeader*>(eventHeader);
2748  NTrials = gPythia->Trials();
2749  XSection = gPythia->GetXsection();
2750  return;
2751  }
2752  }
2753  }
2754 
2755  NTrials = -1;
2756  XSection = -1;
2757  return;
2758 }
2759 
2760 
2761 //________________________________________________________________________
2762 // Analysing Jet-Jet MC's
2763 //________________________________________________________________________
2765  AliGenCocktailEventHeader *cHeader = 0x0;
2766  Bool_t headerFound = kFALSE;
2767 
2768  if ( fPeriodEnum != kLHC17g8a_fast && fPeriodEnum != kLHC17g8a_cent_woSDD && // LHC16qt pPb 5TeV JetJet MC's
2769  fPeriodEnum != kLHC17g8b && fPeriodEnum != kLHC17g8c && // LHC16sr pPb 8TeV JetJet MC's
2770  fPeriodEnum != kLHC16P1JJ && fPeriodEnum != kLHC16P1JJLowB && // LHC16X Jet Jet MC's
2771  fPeriodEnum != kLHC16h3 && // LHC15n Jet Jet MC's
2772  fPeriodEnum != kLHC15a3a && fPeriodEnum != kLHC15a3a_plus && fPeriodEnum != kLHC15a3b && // LHC13g Jet Jet MC's
2773  fPeriodEnum != kLHC15g1a && fPeriodEnum != kLHC15g1b && // LHC11a Jet Jet MC's
2774  fPeriodEnum != kLHC13b4_fix && fPeriodEnum != kLHC13b4_plus && // LHC13 pPb Jet Jet MC's
2775  fPeriodEnum != kLHC16c3a && fPeriodEnum != kLHC16c3b && fPeriodEnum != kLHC16c3c && // LHC13 pPb Jet Jet MC's
2776  fPeriodEnum != kLHC16c2 && fPeriodEnum != kLHC16c2_plus // LHC12 JetJet MC
2777  ) return -1;
2778 
2779  if(mcEvent){
2780  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(mcEvent->GenEventHeader());
2781  if(cHeader) headerFound = kTRUE;
2782  }else{
2783  //no mcEvent available -> not running on MC
2784  return -1;
2785  }
2786 
2787  if(headerFound){
2788  TList *genHeaders = 0x0;
2789  if(cHeader) genHeaders = cHeader->GetHeaders();
2790  AliGenEventHeader* gh = 0;
2791  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
2792  gh = (AliGenEventHeader*)genHeaders->At(i);
2793  TString GeneratorName = gh->GetName();
2794  if (GeneratorName.CompareTo("AliGenPythiaEventHeader") == 0){
2795  return dynamic_cast<AliGenPythiaEventHeader*>(gh)->GetPtHard();
2796  }
2797  }
2798  } else {
2799  AliGenEventHeader * eventHeader = mcEvent->GenEventHeader();
2800  if(eventHeader){
2801  TString eventHeaderName = eventHeader->ClassName();
2802  if (eventHeaderName.CompareTo("AliGenPythiaEventHeader") == 0){
2803  return dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->GetPtHard();
2804  }
2805  }
2806  }
2807 
2808  return -1;
2809 }
2810 
2811 
2812 //________________________________________________________________________
2814  // abort if mimicing not enabled
2815 
2816  if (!fMimicTrigger) return kTRUE;
2817 
2818  Int_t runRangesEMCalL0 [35] = { 144871, 145288, 146375, 146382, // LHC11a
2819  146502, 148522, // LHC11a
2820  150209, 153056, 153911, 153915, // LHC11b,c,d
2821  158135, 158136, 158178, 158182, 160683,
2822  160764, 161139, 161256, 161379, 161457,
2823  161525, 161556, 161558, 161609, 161630,
2824  161724, // LHC11d,e
2825  173731, 177144, 177147, 177653, 177724, 178327,
2826  195180, // LHC13b-f
2827  197469, 197692 // LHC13g
2828  };
2829 
2830  Double_t thresholdEMCalL0[34] = { 2.11, 3.43, 1.71, 2.05, // LHC11a 7 TeV
2831  3.43, // LHC11a 2.76TeV
2832  1.94, 3.39, 4.01, 5.25, 5.5, // LHC11b, LHC11c, LHC11d
2833  2.05, 5.50, 2.05, 5.50, 2.05, 1.71, 5.50, 1.71, 5.50, 1.71, 5.50, 1.71, 5.50, 1.71, 5.50, 1.71,
2834  2.01, 1.75, 1.52, 2.01, 1.52, 1.85,
2835  3.2,
2836  /*2.01*/1.8
2837  };
2838  Double_t spreadEMCalL0[34] = { 0., 0., 0, 0, // LHC11a 7TeV
2839  /*0.7*/0.65, // LHC11a 2.76TeV
2840  0., 0., 0., 0., 0., // LHC11b, LHC11c, LHC11d
2841  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
2842  0., 0., 0., 0., 0.2, 0.2,/*0.,0.,*/
2843  0.1,
2844  /*0.1*/0.12
2845  };
2846 
2847  Int_t runRangesEMCalL1[4] = { 179796, // LHC12c-i
2848  195180, // LHC13b-f
2849  197469, 197692 // LHC13g
2850  };
2851 
2852  Double_t thresholdEMCalL1[3] = { 9.5/*8.398*/, 11.5, /*6.*/5.5};
2853  Double_t spreadEMCalL1[3] = { 1.0/*0.*/, 0.5, /*0.4*/0.6};
2854 
2855  Int_t runRangesEMCalL1G2[3] = { 195180, // LHC13b-f
2856  197469, 197692 // LHC13g
2857  };
2858 
2859  Double_t thresholdEMCalL1G2[2] = { 7.2, /*3.9*/3.75};
2860  Double_t spreadEMCalL1G2[2] = { 0.3, /*0.2*/0.25};
2861 
2862  Int_t runnumber = event->GetRunNumber();
2863 
2864  if (fSpecialTrigger == 5 ){
2865  if (runnumber < runRangesEMCalL0[0]) return kTRUE;
2866  Int_t binRun = 0;
2867  while (!(runnumber >= runRangesEMCalL0[binRun] && runnumber < runRangesEMCalL0[binRun+1] ) && binRun < 34 ){
2868 // cout << runnumber << "\t" << binRun << "\t" << runRangesEMCalL0[binRun] << "\t" << runRangesEMCalL0[binRun+1] << endl;
2869  binRun++;
2870  }
2871  if (binRun==34) return kFALSE;
2872  Double_t threshold = thresholdEMCalL0[binRun];
2873 
2874  if (isMC && spreadEMCalL0[binRun] != 0.){
2875  TF1* triggerSmearing = new TF1("triggerSmearing","[0]*exp(-0.5*((x-[1])/[2])**2)",0,15);
2876  triggerSmearing->SetParameter(0, 1/(spreadEMCalL0[binRun]*TMath::Sqrt(TMath::Pi()*2)));
2877  triggerSmearing->SetParameter(1, thresholdEMCalL0[binRun]);
2878  triggerSmearing->SetParameter(2, spreadEMCalL0[binRun]);
2879  threshold = triggerSmearing->GetRandom();
2880  delete triggerSmearing;
2881  }
2882 
2883 // cout << runnumber << "\t"<< binRun << "\t"<< threshold << endl;
2884 
2885  Int_t nclus = 0;
2886  nclus = event->GetNumberOfCaloClusters();
2887 
2888  if(nclus == 0) return kFALSE;
2889 
2890  // Loop over EMCal clusters
2891  Bool_t eventIsAccepted = kFALSE;
2892  for(Int_t i = 0; i < nclus; i++){
2893  AliVCluster* clus = NULL;
2894  clus = event->GetCaloCluster(i);
2895  if (!clus) continue;
2896  if (!clus->IsEMCAL()) continue;
2897  if (clus->GetM02()<0.1) continue;
2898  if (clus->GetNCells()<2) continue;
2899  if (clus->E() > threshold ){
2900 // cout << "found L0" << endl;
2901  eventIsAccepted = kTRUE;
2902  }
2903  }
2904  return eventIsAccepted;
2905 
2906  } else if (fSpecialTrigger == 6 ) {
2907 
2908  return kTRUE;
2909  } else if (fSpecialTrigger == 8 ) {
2910  if (fSpecialSubTriggerName.CompareTo("7EGA")==0 || fSpecialSubTriggerName.CompareTo("8EGA")==0 || fSpecialSubTriggerName.CompareTo("7EG1")==0 ||fSpecialSubTriggerName.CompareTo("8EG1")==0 ){
2911  if (runnumber < runRangesEMCalL1[0]) return kTRUE;
2912  Int_t binRun = 0;
2913  while (!(runnumber >= runRangesEMCalL1[binRun] && runnumber < runRangesEMCalL1[binRun+1] ) && binRun < 3 ){
2914  // cout << runnumber << "\t" << binRun << "\t" << runRangesEMCalL0[binRun] << "\t" << runRangesEMCalL0[binRun+1] << endl;
2915  binRun++;
2916  }
2917  if (binRun==3) return kFALSE;
2918  Double_t threshold = thresholdEMCalL1[binRun];
2919 
2920  if (isMC && spreadEMCalL1[binRun] != 0.){
2921  TF1* triggerSmearing = new TF1("triggerSmearing","[0]*exp(-0.5*((x-[1])/[2])**2)",0,15);
2922  triggerSmearing->SetParameter(0, 1/(spreadEMCalL1[binRun]*TMath::Sqrt(TMath::Pi()*2)));
2923  triggerSmearing->SetParameter(1, thresholdEMCalL1[binRun]);
2924  triggerSmearing->SetParameter(2, spreadEMCalL1[binRun]);
2925  threshold = triggerSmearing->GetRandom();
2926  delete triggerSmearing;
2927  }
2928 
2929 // cout << runnumber << "\t"<< binRun << "\t L1 \t"<< threshold << endl;
2930 
2931  Int_t nclus = 0;
2932  nclus = event->GetNumberOfCaloClusters();
2933 
2934  if(nclus == 0) return kFALSE;
2935 
2936  // Loop over EMCal clusters
2937  Bool_t eventIsAccepted = kFALSE;
2938  for(Int_t i = 0; i < nclus; i++){
2939  AliVCluster* clus = NULL;
2940  clus = event->GetCaloCluster(i);
2941  if (!clus) continue;
2942  if (!clus->IsEMCAL()) continue;
2943  if (clus->GetM02()<0.1) continue;
2944  if (clus->GetNCells()<2) continue;
2945  if (clus->E() > threshold ){
2946 // cout << "found L1G1" << endl;
2947  eventIsAccepted = kTRUE;
2948  }
2949  }
2950  return eventIsAccepted;
2951  } else if ( fSpecialSubTriggerName.CompareTo("7EG2")==0 ||fSpecialSubTriggerName.CompareTo("8EG2")==0 ){
2952  if (runnumber < runRangesEMCalL1G2[0]) return kTRUE;
2953  Int_t binRun = 0;
2954  while (!(runnumber >= runRangesEMCalL1G2[binRun] && runnumber < runRangesEMCalL1G2[binRun+1] ) && binRun < 2 ){
2955  // cout << runnumber << "\t" << binRun << "\t" << runRangesEMCalL0[binRun] << "\t" << runRangesEMCalL0[binRun+1] << endl;
2956  binRun++;
2957  }
2958  if (binRun==2) return kFALSE;
2959  Double_t threshold = thresholdEMCalL1G2[binRun];
2960  if (isMC && spreadEMCalL1G2[binRun] != 0.){
2961  TF1* triggerSmearing = new TF1("triggerSmearing","[0]*exp(-0.5*((x-[1])/[2])**2)",0,15);
2962  triggerSmearing->SetParameter(0, 1/(spreadEMCalL1G2[binRun]*TMath::Sqrt(TMath::Pi()*2)));
2963  triggerSmearing->SetParameter(1, thresholdEMCalL1G2[binRun]);
2964  triggerSmearing->SetParameter(2, spreadEMCalL1G2[binRun]);
2965  threshold = triggerSmearing->GetRandom();
2966  delete triggerSmearing;
2967  }
2968 // cout << runnumber << "\t"<< binRun << "\t L2 \t"<< threshold << endl;
2969 
2970  Int_t nclus = 0;
2971  nclus = event->GetNumberOfCaloClusters();
2972 
2973  if(nclus == 0) return kFALSE;
2974 
2975  // Loop over EMCal clusters
2976  Bool_t eventIsAccepted = kFALSE;
2977  for(Int_t i = 0; i < nclus; i++){
2978  AliVCluster* clus = NULL;
2979  clus = event->GetCaloCluster(i);
2980  if (!clus) continue;
2981  if (!clus->IsEMCAL()) continue;
2982  if (clus->GetM02()<0.1) continue;
2983  if (clus->GetNCells()<2) continue;
2984  if (clus->E() > threshold ){
2985 // cout << "found L1G2" << endl;
2986  eventIsAccepted = kTRUE;
2987  }
2988  }
2989  return eventIsAccepted;
2990  }
2991  return kTRUE;
2992  } else if (fSpecialTrigger == 9 ) {
2993  return kTRUE;
2994  } else {
2995  return kTRUE;
2996  }
2997 
2998  return kTRUE;
2999 }
3000 
3001 
3002 //________________________________________________________________________
3004 {
3005 
3006  AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
3007 
3008 
3009  UInt_t isSelected = AliVEvent::kAny;
3010 
3011  if (fInputHandler==NULL) return kFALSE;
3012  if( fInputHandler->GetEventSelection() || event->IsA()==AliAODEvent::Class()) {
3013 
3014  TString firedTrigClass = event->GetFiredTriggerClasses();
3015  // if no trigger has been selected manually, select kAny in case of presel (also important for AOD filtering!)
3016  // in other cases select standards depending on system
3018  if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
3019  else {
3020  if (fIsHeavyIon == 1){
3021  fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
3022  } else if (fIsHeavyIon == 2){
3023  fOfflineTriggerMask = AliVEvent::kINT7;
3024  } else {
3025  fOfflineTriggerMask = AliVEvent::kMB;
3026  }
3027  }
3028  }
3029 
3030  // in case of MC switch to kAny if no MB/INT7/INT8 has been selected
3031  if(isMC){
3032  if( fIsHeavyIon == 0){
3033  if( fOfflineTriggerMask != AliVEvent::kMB && fOfflineTriggerMask != AliVEvent::kINT7 && fOfflineTriggerMask != AliVEvent::kINT8 ){
3034  fOfflineTriggerMask = AliVEvent::kAny;
3035  }
3036  }else{
3037  fOfflineTriggerMask = AliVEvent::kAny;
3038  }
3039  }
3040 
3041  if (fOfflineTriggerMask){
3042  isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
3043  if (isSelected && !fPreSelCut){
3044 // cout << firedTrigClass.Data() << endl;
3045 // cout << "Special trigger: "<< fSpecialTrigger << " initialized " << fEMCALTrigInitialized << endl;
3046 // if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
3047 // if (!fEMCALTrigInitialized ) InitializeEMCALTrigger(event);
3048 // fTriggersEMCAL= GetTriggerList();
3049 // }
3050  if (fSpecialSubTrigger>0 && !isMC){
3051  if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
3052  if (fRejectTriggerOverlap){
3053  // trigger rejection EMC1,7,8
3054  if (fSpecialTrigger == 5 && fSpecialSubTriggerName.CompareTo("CEMC7") == 0){
3055  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3056  } else if (fSpecialTrigger == 5 && fSpecialSubTriggerName.CompareTo("CEMC1") == 0){
3057  if (fInputHandler->IsEventSelected() & AliVEvent::kMB) isSelected = 0;
3058  } else if (fSpecialTrigger == 5 && fSpecialSubTriggerName.CompareTo("CEMC8") == 0){
3059  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3060  }
3061  // trigger rejection EGA
3062  if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EGA") == 0){
3063  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3064  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3065  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EGA") == 0){
3066  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3067  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3068  }
3069  // trigger rejection EG1 & EG2
3070  if (fPeriodEnum == kLHC13g){
3071  // EG1 is the trigger with the highest threshold
3072  if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG1") == 0){
3073 // cout << firedTrigClass.Data() << endl;
3074  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3075 // cout << "INT7? " << isSelected << endl;
3076  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3077 // cout << "CEM7? " << isSelected << endl;
3078  if (firedTrigClass.Contains("7EG2")) isSelected = 0;
3079 // cout << "7EG2? " << isSelected << endl;
3080  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG1") == 0){
3081  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3082  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3083  if (firedTrigClass.Contains("8EG2")) isSelected = 0;
3084  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG2") == 0){
3085 // cout << firedTrigClass.Data() << endl;
3086  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3087 // cout << "INT7? " << isSelected << endl;
3088  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3089 // cout << "CEM7? " << isSelected << endl;
3090  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG2") == 0){
3091  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3092  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3093  }
3094  } else {
3095  // EG2 is the trigger with the highest threshold
3096  if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG2") == 0){
3097  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3098  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3099  if (firedTrigClass.Contains("7EG1")) isSelected = 0;
3100  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG2") == 0){
3101  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3102  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3103  if (firedTrigClass.Contains("8EG1")) isSelected = 0;
3104  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG1") == 0){
3105  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3106  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3107  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG1") == 0){
3108  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3109  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3110  }
3111  }
3112  }
3113  if (isSelected != 0 ){
3114 // cout << "I am here" << " :" << fSpecialSubTriggerName.Data() <<endl;
3115  if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9 ){
3117  if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassesCorrelated->Fill(0);
3118  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassesCorrelated->Fill(1);
3119  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassesCorrelated->Fill(2);
3120  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassesCorrelated->Fill(3);
3121  if (firedTrigClass.Contains("7EJE") || firedTrigClass.Contains("8EJE")) hTriggerClassesCorrelated->Fill(4);
3122  if (firedTrigClass.Contains("7EJ1") || firedTrigClass.Contains("8EJ1")) hTriggerClassesCorrelated->Fill(5);
3123  if (firedTrigClass.Contains("7EJ2") || firedTrigClass.Contains("8EJ2")) hTriggerClassesCorrelated->Fill(6);
3124  if (firedTrigClass.Contains("7EGA") || firedTrigClass.Contains("8EGA")) hTriggerClassesCorrelated->Fill(7);
3125  if (firedTrigClass.Contains("7EG1") || firedTrigClass.Contains("8EG1")) hTriggerClassesCorrelated->Fill(8);
3126  if (firedTrigClass.Contains("7EG2") || firedTrigClass.Contains("8EG2")) hTriggerClassesCorrelated->Fill(9);
3127  }
3128  }
3129  }
3130 
3131  } else if (isMC){
3132  if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
3133 // isSelected = 0;
3134 // if (fTriggersEMCAL > 0)cout << "Special Trigger " << fSpecialTrigger << " triggers: " << fTriggersEMCAL << " selected triggers: " << fTriggersEMCALSelected << " run number: " <<event->GetRunNumber()<<endl;
3135 // if (fTriggersEMCAL&fTriggersEMCALSelected){
3136 // cout << "accepted ++++++++++++++++++++" << endl;
3137  isSelected = 1;
3138 // }
3139  }
3140  }
3141  //if for specific centrality trigger selection
3142  if(fSpecialSubTrigger == 1){
3143  if(fSpecialSubTriggerName.Contains("|") && GetCentrality(event) <= 10.){
3144  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("|");
3145  for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
3146  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3147  if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
3148  }
3149  } else if(fSpecialSubTriggerName.Contains("%")){
3150  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("%");
3151  for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
3152  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3153  if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
3154  }
3155  } else if(fSpecialSubTriggerName.Contains("@")){
3156  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("@");
3157  for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
3158  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3159  if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
3160  }
3161  } else if(fSpecialSubTriggerName.Contains("&")){ //logic AND of two classes
3162  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("&");
3163  TString CheckClass = "";
3164  for (Int_t i=0; i<ClassesList->GetEntriesFast(); i++){
3165  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3166  if (firedTrigClass.Contains(NameClass->GetString())) CheckClass+="1";
3167  else CheckClass+="0";
3168  }
3169  if(CheckClass.Contains("0")) isSelected = 0;
3170  }
3171  else if(firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 1;
3172  }
3173  }
3174  }
3175  }
3176  fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
3177 
3178  Bool_t mimickedTrigger = kTRUE;
3179  if (fMimicTrigger) mimickedTrigger = MimicTrigger(event, isMC);
3180 // cout << "mimicked decision \t" << mimickedTrigger << "expect decision? "<< fMimicTrigger<< endl;
3181 
3182  // Fill Histogram
3183  if(hTriggerClass){
3184  if (fIsSDDFired) hTriggerClass->Fill(33);
3185  if (mimickedTrigger){
3186  if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
3187  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
3188  if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
3189  if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
3190  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
3191  if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
3192  if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
3193  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
3194  if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
3195  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
3196  if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
3197  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
3198  if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
3199  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
3200  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
3201  // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
3202  if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
3203  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
3204  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
3205  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
3206  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
3207  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
3208  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
3209  if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
3210  if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
3211  if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
3212  if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
3213  if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
3214  // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
3215  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
3216  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
3217  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
3218  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
3219  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
3220  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
3221  if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
3222  if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
3223  if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
3224  if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
3225  if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
3226  if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
3227  }
3228  if (mimickedTrigger && fMimicTrigger) hTriggerClass->Fill(35);
3229  }
3230 
3231  if(hTriggerClassSelected && isSelected){
3232  if (mimickedTrigger){
3233  if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
3234  if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
3235  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
3236  if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
3237  if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
3238  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
3239  if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
3240  if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
3241  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
3242  if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
3243  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
3244  if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
3245  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
3246  if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
3247  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
3248  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
3249  // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
3250  if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
3251  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
3252  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
3253  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
3254  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
3255  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
3256  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
3257  if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
3258  if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
3259  if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
3260  if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
3261  if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
3262  // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
3263  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
3264  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
3265  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
3266  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
3267  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
3268  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
3269  if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
3270  if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
3271  if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
3272  if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
3273  if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
3274  }
3275  if (mimickedTrigger && fMimicTrigger) hTriggerClassSelected->Fill(34);
3276  }
3277 
3278  if(!isSelected)return kFALSE;
3279  if (fMimicTrigger)
3280  if (!mimickedTrigger ) return kFALSE;
3281  return kTRUE;
3282 
3283 }
3284 
3285 //________________________________________________________________________
3287  // returns TString with current cut number
3288  return fCutStringRead;
3289 }
3290 
3291 //________________________________________________________________________
3292 void AliConvEventCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *event){
3293 
3294  if(fNotRejectedStart){
3295  delete[] fNotRejectedStart;
3296  fNotRejectedStart = NULL;
3297  }
3298  if(fNotRejectedEnd){
3299  delete[] fNotRejectedEnd;
3300  fNotRejectedEnd = NULL;
3301  }
3302  if(fGeneratorNames){
3303  delete[] fGeneratorNames;
3304  fGeneratorNames = NULL;
3305  }
3306 
3307  if(rejection == 0) return; // No Rejection
3308 
3309  AliGenCocktailEventHeader *cHeader = 0x0;
3310  AliAODMCHeader *cHeaderAOD = 0x0;
3311  Bool_t headerFound = kFALSE;
3312  AliMCEvent *fMCEvent = 0x0;
3313  TClonesArray *fMCEventAOD = 0x0;
3314  if(event->IsA()==AliMCEvent::Class()){
3315  if(dynamic_cast<AliMCEvent*>(event)){
3316  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(event)->GenEventHeader());
3317  fMCEvent = dynamic_cast<AliMCEvent*>(event);
3318  if(cHeader) headerFound = kTRUE;
3319  }
3320  }
3321  if(event->IsA()==AliAODEvent::Class()){ // event is a AODEvent in case of AOD
3322  cHeaderAOD = dynamic_cast<AliAODMCHeader*>(event->FindListObject(AliAODMCHeader::StdBranchName()));
3323  fMCEventAOD = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
3324  if(cHeaderAOD) headerFound = kTRUE;
3325  }
3326 
3327  if (fDebugLevel > 0 ) cout << "event starts here" << endl;
3328  if(headerFound){
3329  TList *genHeaders = 0x0;
3330  if(cHeader) genHeaders = cHeader->GetHeaders();
3331  if(cHeaderAOD){
3332  genHeaders = cHeaderAOD->GetCocktailHeaders();
3333  if(genHeaders->GetEntries()==1){
3335  return;
3336  }
3337  }
3338  AliGenEventHeader* gh = 0;
3339  fnHeaders = 0;
3340  Int_t firstindexA = 0;
3341  Int_t lastindexA = -1;
3342  if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
3343  if(rejection == 2){ // TList of Headers Names
3344  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
3345  gh = (AliGenEventHeader*)genHeaders->At(i);
3346  TString GeneratorName = gh->GetName();
3347  lastindexA = lastindexA + gh->NProduced();
3348  if (fDebugLevel > 0 ) cout << i << "\t" << GeneratorName.Data() << endl;
3349  for(Int_t j = 0; j<HeaderList->GetEntries();j++){
3350  TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
3351  if (fDebugLevel > 0 ) cout << GeneratorInList.Data() << endl;
3352  if(GeneratorName.CompareTo(GeneratorInList) == 0){
3353  if (fDebugLevel > 0 ) cout << "accepted" << endl;
3354  if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
3355  if(fMCEvent){
3356  if (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c ){
3357  if (fMCEvent->Particle(firstindexA)->GetPdgCode() == fAddedSignalPDGCode ) {
3358  if (gh->NProduced() > 10 && fMCEvent->Particle(firstindexA+10)->GetPdgCode() == fAddedSignalPDGCode ){
3359  if (fDebugLevel > 0 ) cout << "cond 1: "<< fnHeaders << endl;
3360  fnHeaders++;
3361  continue;
3362  }
3363  continue;
3364  }
3365  } else {
3366  if (fDebugLevel > 0 ) cout << "cond 2: " << fnHeaders << endl;
3367  fnHeaders++;
3368  continue;
3369 
3370  }
3371  }
3372  if ( fMCEventAOD){
3373  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindexA));
3374  if (aodMCParticle && (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c) ){
3375  if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
3376  if (gh->NProduced() > 10){
3377  AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindexA+10));
3378  if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
3379  if (fDebugLevel > 0 ) cout << "cond 1: " << fnHeaders << endl;
3380  fnHeaders++;
3381  continue;
3382  }
3383  }
3384  continue;
3385  }
3386  } else {
3387  if (fDebugLevel > 0 ) cout << "cond 2: " << fnHeaders << endl;
3388  fnHeaders++;
3389  continue;
3390  }
3391  }
3392  continue;
3393  }
3394  if (fDebugLevel > 0 ) cout << "cond 3: "<< fnHeaders << endl;
3395  fnHeaders++;
3396  continue;
3397  }
3398  }
3399  firstindexA = firstindexA + gh->NProduced();
3400  }
3401  }
3402  if (fDebugLevel > 0 ) cout << "number of headers: " <<fnHeaders << endl;
3403 
3407 
3408  if(rejection == 1 || rejection == 3){
3409  fNotRejectedStart[0] = 0;
3410  fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
3411  fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
3412  if (fDebugLevel > 0 ) cout << 0 << "\t" <<fGeneratorNames[0] << "\t" << fNotRejectedStart[0] << "\t" <<fNotRejectedEnd[0] << endl;
3413  return;
3414  }
3415 
3416  Int_t firstindex = 0;
3417  Int_t lastindex = -1;
3418  Int_t number = 0;
3419 
3420  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
3421  gh = (AliGenEventHeader*)genHeaders->At(i);
3422  TString GeneratorName = gh->GetName();
3423  lastindex = lastindex + gh->NProduced();
3424  for(Int_t j = 0; j<HeaderList->GetEntries();j++){
3425  TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
3426  if (fDebugLevel > 0 ) cout << i << "\t" << GeneratorName.Data() << endl;
3427  if(GeneratorName.CompareTo(GeneratorInList) == 0){
3428  if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
3429  if(fMCEvent){
3430  if (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c ){
3431  if (fMCEvent->Particle(firstindex)->GetPdgCode() == fAddedSignalPDGCode ) {
3432  if (fDebugLevel > 0 ) cout << "produced " << gh->NProduced() << " with box generator" << endl;
3433  if (gh->NProduced() > 10 && fMCEvent->Particle(firstindex+10)->GetPdgCode() == fAddedSignalPDGCode){
3434  if (fDebugLevel > 0 ) cout << "one of them was a pi0 or eta" << endl;
3435  fNotRejectedStart[number] = firstindex;
3436  fNotRejectedEnd[number] = lastindex;
3437  fGeneratorNames[number] = GeneratorName;
3438  number++;
3439  if (fDebugLevel > 0 ) cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
3440  continue;
3441  }
3442  }
3443  } else {
3444  fNotRejectedStart[number] = firstindex;
3445  fNotRejectedEnd[number] = lastindex;
3446  fGeneratorNames[number] = GeneratorName;
3447  number++;
3448  continue;
3449  }
3450  }
3451  if ( fMCEventAOD){
3452  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindex));
3453  if (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c ){
3454  if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
3455  if (gh->NProduced() > 10) {
3456  AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindex+10));
3457  if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
3458  fNotRejectedEnd[number] = lastindex;
3459  fNotRejectedStart[number] = firstindex;
3460  fGeneratorNames[number] = GeneratorName;
3461  number++;
3462  }
3463  continue;
3464  }
3465  }
3466  } else {
3467  fNotRejectedStart[number] = firstindex;
3468  fNotRejectedEnd[number] = lastindex;
3469  fGeneratorNames[number] = GeneratorName;
3470  number++;
3471  continue;
3472  }
3473  }
3474  continue;
3475  } else {
3476  fNotRejectedStart[number] = firstindex;
3477  fNotRejectedEnd[number] = lastindex;
3478  fGeneratorNames[number] = GeneratorName;
3479  if (fDebugLevel > 0 ) cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
3480  number++;
3481  continue;
3482  }
3483 
3484  }
3485  }
3486  firstindex = firstindex + gh->NProduced();
3487  }
3488  if (fDebugLevel > 0 ) {
3489  for (Int_t i = 0; i < number; i++){
3490  cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
3491  }
3492  }
3493  } else { // No Cocktail Header Found
3494  fNotRejectedStart = new Int_t[1];
3495  fNotRejectedEnd = new Int_t[1];
3496 
3497  fnHeaders = 1;
3498  fNotRejectedStart[0] = 0;
3499  fNotRejectedEnd[0] = static_cast<AliMCEvent*>(event)->GetNumberOfPrimaries()-1;
3500  if (rejection > 1){
3501  fNotRejectedStart[0] = -1;
3502  fNotRejectedEnd[0] = -1;
3503  }
3504 
3505  fGeneratorNames = new TString[1];
3506  fGeneratorNames[0] = "NoCocktailGeneratorFound";
3507 // SetRejectExtraSignalsCut(0);
3508  }
3509 
3510 }
3511 
3512 //_________________________________________________________________________
3513 Int_t AliConvEventCuts::IsParticleFromBGEvent(Int_t index, AliMCEvent *mcEvent, AliVEvent *InputEvent){
3514 
3515  if (fDebugLevel > 2 ) cout << index << endl;
3516  if(index < 0) return 0; // No Particle
3517 
3518  Int_t accepted = 0;
3519  if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
3520  if(!mcEvent) return 0; // no mcEvent available, return 0
3521  if(index >= mcEvent->GetNumberOfPrimaries()){ // initial particle is secondary particle
3522  if( ((TParticle*)mcEvent->Particle(index))->GetMother(0) < 0) return 0; // material particle, return 0
3523  return IsParticleFromBGEvent(((TParticle*)mcEvent->Particle(index))->GetMother(0),mcEvent,InputEvent);
3524  }
3525  for(Int_t i = 0;i<fnHeaders;i++){
3526  if (fDebugLevel > 2 ) cout << "header " << i << ":"<< fNotRejectedStart[i] << "\t" << fNotRejectedEnd[i] << endl;
3527  if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
3528  if (fDebugLevel > 1 ) cout << "accepted:" << index << "\t header " << i << ": "<< fNotRejectedStart[i] << "\t" << fNotRejectedEnd[i] << endl;
3529  accepted = 1;
3530  if(i == 0) accepted = 2; // MB Header
3531  }
3532  }
3533  }
3534  else if(InputEvent->IsA()==AliAODEvent::Class()){
3535  TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
3536  if (AODMCTrackArray){
3537  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
3538  if(!aodMCParticle) return 0; // no particle
3539  if(!aodMCParticle->IsPrimary()){
3540  if( aodMCParticle->GetMother() < 0) return 0;// material particle, return 0
3541  return IsParticleFromBGEvent(aodMCParticle->GetMother(),mcEvent,InputEvent);
3542  }
3543  index = TMath::Abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
3544  for(Int_t i = 0;i<fnHeaders;i++){
3545  if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
3546  accepted = 1;
3547  if(i == 0) accepted = 2; // MB Header
3548  }
3549  }
3550  }
3551  }
3552 
3553  return accepted;
3554 }
3555 
3556 //_________________________________________________________________________
3557 Int_t AliConvEventCuts::IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *event, AliMCEvent *mcEvent, Int_t isHeavyIon, Bool_t isEMCALAnalysis){
3558 
3559  Bool_t isMC = kFALSE;
3560  if (mcEvent){isMC = kTRUE;}
3561 
3562  if ( !IsTriggerSelected(event, isMC) )
3563  return 3;
3564 
3565  if( !(IsCentralitySelected(event,mcEvent)))
3566  return 1; // Check Centrality --> Not Accepted => eventQuality = 1
3567 
3568  Bool_t hasV0And = ReaderCuts->HasV0AND();
3569  Bool_t isSDDFired = ReaderCuts->IsSDDFired();
3570 
3571  if( ( (IsSpecialTrigger() == 0 && IsSpecialSubTrigger() == 1) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !isSDDFired && !mcEvent)
3572  //if V0OR with SDD requested or V0AND with SDD request but the SDD has not fired
3573  return 7; // V0 with SDD requested but no fired
3574 
3575  if( ( (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 0) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !hasV0And)
3576  //if V0AND (only) or V0AND with SDD requested but V0AND requested but no fired
3577  return 8; // V0AND requested but no fired
3578 
3579 
3580  if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !mcEvent)
3581  return 7; // With SDD requested but no fired
3582 
3583  if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
3584  return 8; // V0AND requested but no fired
3585 
3586  // Special EMCAL checks due to hardware issues in LHC11a
3587  if (isEMCALAnalysis || IsSpecialTrigger() == 5 || IsSpecialTrigger() == 8 || IsSpecialTrigger() == 9 ){
3588  Int_t runnumber = event->GetRunNumber();
3589  if ((runnumber>=144871) && (runnumber<=146860)) {
3590 
3591  AliVCaloCells *cells = event->GetEMCALCells();
3592  const Short_t nCells = cells->GetNumberOfCells();
3593 
3594  if (event->IsA()==AliESDEvent::Class()) AliAnalysisManager::GetAnalysisManager()->LoadBranch("EMCALCells.");
3595 
3596  AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
3597  if (!fInputHandler) return 3;
3598 
3599  // count cells above threshold
3600  Int_t nCellCount[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
3601  for(Int_t iCell=0; iCell<nCells; ++iCell) {
3602  Short_t cellId = cells->GetCellNumber(iCell);
3603  Double_t cellE = cells->GetCellAmplitude(cellId);
3604  Int_t sm = cellId / (24*48);
3605  if (cellE>0.1) ++nCellCount[sm];
3606  }
3607 
3608  Bool_t fIsLedEvent = kFALSE;
3609  if (nCellCount[4] > 100) {
3610  fIsLedEvent = kTRUE;
3611  } else {
3612  if ((runnumber>=146858) && (runnumber<=146860)) {
3613  if ((fInputHandler->IsEventSelected() & AliVEvent::kMB) && (nCellCount[3]>=21))
3614  fIsLedEvent = kTRUE;
3615  else if ((fInputHandler->IsEventSelected() & AliVEvent::kEMC1) && (nCellCount[3]>=35))
3616  fIsLedEvent = kTRUE;
3617  }
3618  }
3619  if (fIsLedEvent) {
3620  return 9;
3621  }
3622  }
3623  }
3624 
3625  // SPD clusters vs tracklets to check for pileup/background
3626  Int_t nClustersLayer0 = event->GetNumberOfITSClusters(0);
3627  Int_t nClustersLayer1 = event->GetNumberOfITSClusters(1);
3628  Int_t nTracklets = event->GetMultiplicity()->GetNumberOfTracklets();
3629  if(hSPDClusterTrackletBackgroundBefore) hSPDClusterTrackletBackgroundBefore->Fill(nTracklets, (nClustersLayer0 + nClustersLayer1));
3630 
3631 
3632  Double_t distZMax = 0;
3633  if(event->IsA()==AliESDEvent::Class()){
3634  Int_t nPileVert = ((AliESDEvent*)event)->GetNumberOfPileupVerticesSPD();
3635  if (hNPileupVertices) hNPileupVertices->Fill(nPileVert);
3636  if (nPileVert > 0){
3637  for(Int_t i=0; i<nPileVert;i++){
3638  const AliESDVertex* pv= ((AliESDEvent*)event)->GetPileupVertexSPD(i);
3639  Int_t nc2 = pv->GetNContributors();
3640  if(nc2>=3){
3641  Double_t z1 = ((AliESDEvent*)event)->GetPrimaryVertexSPD()->GetZ();
3642  Double_t z2 = pv->GetZ();
3643  Double_t distZ = z2-z1;
3644  if (TMath::Abs(distZMax) < TMath::Abs(distZ) ){
3645  distZMax = distZ;
3646  }
3647  }
3648  }
3649  if (hPileupVertexToPrimZ) hPileupVertexToPrimZ->Fill(distZMax);
3650  }
3651  }
3652  if(GetPastFutureLowBC()!=0 && GetPastFutureHighBC()!=0 ){
3653  if(IsOutOfBunchPileupPastFuture(event))
3654  return 12;
3655  }
3656 
3657  if( isHeavyIon != 2 && GetIsFromPileup()){
3658  if(event->IsPileupFromSPD(3,0.8,3.,2.,5.) ){
3660  return 6; // Check Pileup --> Not Accepted => eventQuality = 6
3661  }
3662  if (fUtils->IsSPDClusterVsTrackletBG(event)){
3664  return 11; // Check Pileup --> Not Accepted => eventQuality = 11
3665  }
3666  }
3667  if(isHeavyIon == 2 && GetIsFromPileup()){
3668  if(fUtils->IsPileUpEvent(event) ){
3670  return 6; // Check Pileup --> Not Accepted => eventQuality = 6
3671  }
3672  if (fUtils->IsSPDClusterVsTrackletBG(event)){
3674  return 11; // Check Pileup --> Not Accepted => eventQuality = 11
3675  }
3676  }
3677 
3679  if( IsPileUpV0MTPCout(event) ){
3680  return 13;
3681  }
3682  }
3683 
3684  if(hCentrality)hCentrality->Fill(GetCentrality(event));
3685 
3686  if(hVertexZ)hVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
3687 // if(hCentralityVsNumberOfPrimaryTracks)
3688 // hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(event),
3689 // ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
3690 // ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
3691 
3692  if(fIsHeavyIon == 1){
3693  AliEventplane *EventPlane = event->GetEventplane();
3694  fEventPlaneAngle = EventPlane->GetEventplane("V0",event,2);
3695  if(hEventPlaneAngle)hEventPlaneAngle->Fill(TMath::Abs(fEventPlaneAngle));
3696  }
3697  if(hSPDClusterTrackletBackground) hSPDClusterTrackletBackground->Fill(nTracklets, (nClustersLayer0 + nClustersLayer1));
3698 
3699  return 0;
3700 }
3701 
3702 
3703 //_________________________________________________________________________
3705 
3706  AliInfo("Inside the GetWeightForCentralityFlattening function");
3707  Double_t centrality = 0.;
3708  //obtain centrality for ESD or AOD
3709  if(!event || event->IsA()==AliESDEvent::Class()){
3710  AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
3711  if(esdEvent){
3712  AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
3713  if(fDetectorCentrality==0 && fIsHeavyIon==1){
3714  centrality = fESDCentrality->GetCentralityPercentile("V0M"); // default for PbPb
3715  }
3716  }
3717  } else if(event->IsA()==AliAODEvent::Class()){
3718  AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
3719  if(aodEvent){
3720  if(aodEvent->GetHeader()){
3721  centrality = ((AliVAODHeader*)aodEvent->GetHeader())->GetCentrality();
3722  }
3723  }
3724  }
3725 
3726  //Get the maximum vlaue from the reference distribution and interpolated value
3727  Float_t GetValueForWeight = 1.;
3728  Float_t maximum = 1.;
3729  Double_t weightCentrality = 1.;
3730  Bool_t CorrCentrLoop = kFALSE;
3731 
3732  //depending on the value of the flag, flattening in different cent. range
3733  if ( fDoCentralityFlat == 1 && (centrality >= 0. && centrality <= 10.) ){
3734  GetValueForWeight = hCentralityNotFlat->Interpolate(centrality);
3735  maximum = hCentralityNotFlat->GetMaximum();
3736  CorrCentrLoop = kTRUE;
3737  } else if ( fDoCentralityFlat == 2 && (centrality >=10. && centrality <= 20.) ){
3738  GetValueForWeight = hCentralityNotFlat->Interpolate(centrality);
3739  maximum = hCentralityNotFlat->GetMaximum();
3740  CorrCentrLoop = kTRUE;
3741  } else if ( fDoCentralityFlat == 8 ){
3742  GetValueForWeight = hCentralityNotFlat->Interpolate(centrality);
3743  maximum = hCentralityNotFlat->GetMaximum();
3744  CorrCentrLoop = kTRUE;
3745  } else {
3746  CorrCentrLoop = kFALSE;
3747  }
3748 
3749  if (CorrCentrLoop && GetValueForWeight != 0. && maximum !=0. && isfinite(GetValueForWeight) && isfinite(maximum) ){
3750  weightCentrality = maximum/GetValueForWeight;
3751  if (!isfinite(GetValueForWeight)) weightCentrality = 1.;
3752  if (!isfinite(weightCentrality)) weightCentrality = 1.;
3753  }
3754 
3755  return weightCentrality;
3756 }
3757 
3758 //_________________________________________________________________________
3760 
3761  Double_t weightMult = 1.;
3762 
3763  Float_t valueMultData = -1.;
3764  Float_t valueMultMC = -1.;
3765 
3766  if (hReweightMultData == NULL || hReweightMultMC == NULL ) return weightMult;
3767 
3768  valueMultData = hReweightMultData->Interpolate(mult);
3769  valueMultMC = hReweightMultMC->Interpolate(mult);
3770 
3771  Float_t relativeErrorMC = hReweightMultMC->GetBinError(hReweightMultMC->FindBin(mult))/hReweightMultMC->GetBinContent(hReweightMultMC->FindBin(mult));
3772  Float_t relativeErrorData = hReweightMultData->GetBinError(hReweightMultData->FindBin(mult))/hReweightMultData->GetBinContent(hReweightMultData->FindBin(mult));
3773 
3774  if (relativeErrorData < 0.2 && relativeErrorMC < 0.2 ){
3775  if (isfinite(valueMultData) && isfinite(valueMultMC) ){
3776  weightMult = valueMultData/valueMultMC;
3777  }
3778  }
3779 
3780  return weightMult;
3781 }
3782 
3783 
3784 
3785 //_________________________________________________________________________
3786 Float_t AliConvEventCuts::GetWeightForMeson(Int_t index, AliMCEvent *mcEvent, AliVEvent *event){
3787  if (!( fPeriodEnum == kLHC13d2 || fPeriodEnum == kLHC13d2b || // LHC10h MCs
3788  fPeriodEnum == kLHC14a1a || fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c || // LHC11h MCs
3789  fPeriodEnum == kLHC13e7 || fPeriodEnum == kLHC13b2_efix || fPeriodEnum == kLHC14b2 || // LHC13bc MCs
3790  fPeriodEnum == kLHC14e2a || fPeriodEnum == kLHC14e2b || fPeriodEnum == kLHC14e2c || // LHC12[a-i] pass 1 MCs
3791  fPeriodEnum == kLHC12f1a || fPeriodEnum == kLHC12f1b || fPeriodEnum == kLHC12i3 // LHC11a MCs
3792  ) ) return 1.;
3793  Int_t kCaseGen = 0;
3794 
3795  if(index < 0) return 0; // No Particle
3796 
3797  if (IsParticleFromBGEvent(index, mcEvent, event)){
3800  kCaseGen = 1;
3801  }
3802  }
3803  if (kCaseGen == 0) return 1;
3804 
3805  Double_t mesonPt = 0;
3806  //Double_t mesonMass = 0;
3807  Int_t PDGCode = 0;
3808  if(!event || event->IsA()==AliESDEvent::Class()){
3809  mesonPt = ((TParticle*)mcEvent->Particle(index))->Pt();
3810  //mesonMass = ((TParticle*)mcEvent->Particle(index))->GetCalcMass();
3811  PDGCode = ((TParticle*)mcEvent->Particle(index))->GetPdgCode();
3812  } else if(event->IsA()==AliAODEvent::Class()){
3813  TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
3814  if (AODMCTrackArray){
3815  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
3816  mesonPt = aodMCParticle->Pt();
3817  //mesonMass = aodMCParticle->GetCalcMass();
3818  PDGCode = aodMCParticle->GetPdgCode();
3819  } else {
3820  return 1;
3821  }
3822  }
3823 
3824  Float_t functionResultMC = 1.;
3825  if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
3826  functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
3827  }
3828  if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
3829  functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
3830  }
3831  if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
3832  functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
3833  }
3834 
3835  Float_t functionResultData = 1;
3836  if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
3837  functionResultData = fFitDataPi0->Eval(mesonPt);
3838  }
3839  if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
3840  functionResultData = fFitDataEta->Eval(mesonPt);
3841  }
3842  if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
3843  functionResultData = fFitDataK0s->Eval(mesonPt);
3844  }
3845 
3846  Double_t weight = 1;
3847  if (PDGCode == 111 || PDGCode == 221){
3848  if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
3849  weight = functionResultData/functionResultMC;
3850  if ( kCaseGen == 3){
3851  if (PDGCode == 111){
3852  if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
3853  weight = 1.;
3854  }
3855  }
3856  if (PDGCode == 221){
3857  if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
3858  weight = 1.;
3859  }
3860  }
3861  }
3862  if (!isfinite(functionResultData)) weight = 1.;
3863  if (!isfinite(weight)) weight = 1.;
3864  }
3865  } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
3866  weight = functionResultMC;
3867  }
3868  return weight;
3869 }
3870 
3871 
3874 
3875  if( fPeriodEnum == kLHC13bc || // mainly minimum bias
3876  fPeriodEnum == kLHC13de || // mainly triggered
3877  fPeriodEnum == kLHC13b4_fix || fPeriodEnum == kLHC13b4_plus || // MC Pythia 6 (Jet-Jet), anchor LHC13b-e
3878  fPeriodEnum == kLHC13b2_efix || //MC DPMJET, anchr LHC13b+c
3879  fPeriodEnum == kLHC13e7 || //MC HIJING, anchr LHC13b+c
3880  fPeriodEnum == kLHC14b2 //MC HIJING, anchr LHC13b+c
3881  ){
3882  printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
3883  SetEtaShift(-0.465);
3884  } else if( fPeriodEnum == kLHC13f ) {
3885  printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
3886  SetEtaShift(+0.465);
3887  }
3888  else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
3889 }
3890 
3891 //________________________________________________________________________
3892 AliEMCALTriggerPatchInfo* AliConvEventCuts::GetMainTriggerPatch()
3893 {
3894  //get main trigger match; if not known yet, look for it and cache
3895 
3897  return fMainTriggerPatchEMCAL;
3898 
3899  if (!fTriggerPatchInfo) {
3900  AliError(Form("%s: fTriggerPatchInfo not available",GetName()));
3901  return 0;
3902  }
3903 
3904  //number of patches in event
3905  Int_t nPatch = fTriggerPatchInfo->GetEntries();
3906 
3907  //extract main trigger patch
3908  AliEMCALTriggerPatchInfo *patch;
3909  for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
3910  patch = (AliEMCALTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
3911  if (patch->IsMainTrigger()) {
3912  fMainTriggerPatchEMCAL = patch;
3913  break;
3914  }
3915  }
3916 
3917  return fMainTriggerPatchEMCAL;
3918 }
3919 
3920 
3921 //________________________________________________________________________
3923 {
3924 // cout << "entered EMCAL trigger initialization" << endl;
3925 
3926  // Init the analysis.
3927  if (fCaloTriggersName.IsNull()){
3928  if (event->IsA()==AliESDEvent::Class()){
3929  fCaloTriggersName = "EMCALTrigger";
3930  } else {
3931  fCaloTriggersName = "emcalTrigger";
3932  }
3933  }
3934 
3935  if (!fCaloTriggersName.IsNull() && !fCaloTriggers) {
3936  fCaloTriggers = dynamic_cast<AliVCaloTrigger*>(event->FindListObject(fCaloTriggersName));
3937  if (!fCaloTriggers) {
3938  AliError(Form("%s: Could not retrieve calo triggers %s!", GetName(), fCaloTriggersName.Data()));
3939  return;
3940  }
3941  }
3942 
3943  if (fCaloTriggerPatchInfoName.IsNull()){
3944  if (event->IsA()==AliESDEvent::Class()){
3945  fCaloTriggerPatchInfoName = "EmcalTriggers";
3946  } else {
3947  fCaloTriggerPatchInfoName = "EmcalTriggers";
3948  }
3949  }
3950 
3951  if (!fCaloTriggerPatchInfoName.IsNull() && !fTriggerPatchInfo) {
3952  fTriggerPatchInfo = GetArrayFromEvent(event, fCaloTriggerPatchInfoName.Data(), "AliEMCALTriggerPatchInfo");
3953  if (!fTriggerPatchInfo) {
3954  AliError(Form("%s: Could not retrieve calo trigger patch info %s!", GetName(), fCaloTriggerPatchInfoName.Data()));
3955  return;
3956  }
3957 
3958  }
3959 
3960  fEMCALTrigInitialized = kTRUE;
3961 }
3962 
3963 //________________________________________________________________________
3965  if (!fTriggerPatchInfo)
3966  return 0;
3967  //number of patches in event
3968  Int_t nPatch = fTriggerPatchInfo->GetEntries();
3969 
3970  //loop over patches to define trigger type of event
3971  Int_t nG1 = 0;
3972  Int_t nG2 = 0;
3973  Int_t nJ1 = 0;
3974  Int_t nJ2 = 0;
3975  Int_t nL0 = 0;
3976  AliEMCALTriggerPatchInfo *patch;
3977 // if (nPatch> 0) {cout << "NEW Triggers in this event*********************************" << endl;}
3978  for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
3979  patch = (AliEMCALTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
3980 // cout << "Patch energy: "<<patch->GetPatchE() << "\t ADC counts: " << patch->GetADCAmp() << endl;
3981 // cout << "Phi: " << patch->GetPhiMin() << " - " << patch->GetPhiMax() << " delta phi: " <<TMath::Abs(patch->GetPhiMin()-patch->GetPhiMax())<< endl;
3982 // cout << "Eta: " << patch->GetEtaMin() << " - " << patch->GetEtaMax() << " delta eta: " <<TMath::Abs(patch->GetEtaMin()-patch->GetEtaMax())<< endl;
3983  if (patch->IsGammaHigh()){
3984 // cout << "fired L1GA high" << endl;
3985  nG1++;
3986  }
3987  if (patch->IsGammaLow()){
3988 // cout << "fired L1GA low" << endl;
3989  nG2++;
3990  }
3991  if (patch->IsJetHigh()){
3992 // cout << "fired L1JE high" << endl;
3993  nJ1++;
3994  }
3995  if (patch->IsJetLow()){
3996 // cout << "fired L1JE low" << endl;
3997  nJ2++;
3998  }
3999  if (patch->IsLevel0()){
4000 // cout << "fired L0" << endl;
4001  nL0++;
4002  }
4003 // cout << patch->GetPatchE() << "\t" << patch->GetADCAmp() << "\t" << patch->IsGammaHigh() << "\t" << patch->IsGammaLow()
4004 // << "\t" << patch->IsJetHigh() << "\t" << patch->IsJetLow() << "\t" << patch->IsLevel0()
4005 // << "\t" << patch->GetPhiMin() << "\t" << patch->GetPhiMax() << "\t" << TMath::Abs(patch->GetPhiMin()-patch->GetPhiMax())
4006 // << "\t" << patch->GetEtaMin() << "\t" << patch->GetEtaMax() << "\t" << TMath::Abs(patch->GetEtaMin()-patch->GetEtaMax()) << endl;
4007  }
4008 
4009  if (nPatch > 0){
4010  AliDebug(2, "Patch summary: ");
4011  AliDebug(2, Form("Number of patches: %d", nPatch));
4012  AliDebug(2, Form("Level0: [%d]" ,nL0));
4013  AliDebug(2, Form("Jet: low[%d], high[%d]" ,nJ2, nJ1));
4014  AliDebug(2, Form("Gamma: low[%d], high[%d]" ,nG2, nG1));
4015  }
4016 
4017 // if (nPatch > 0){
4018 // cout << Form("Number of patches: %d", nPatch) << endl;
4019 // cout << Form("Level0: [%d]" ,nL0) << endl;
4020 // cout << Form("Jet: low[%d], high[%d]" ,nJ2, nJ1) << endl;
4021 // cout << Form("Gamma: low[%d], high[%d]" ,nG2, nG1) << endl;
4022 // }
4023 
4024  ULong_t triggers(0);
4025  if (nG1>0)
4026  SETBIT(triggers, kG1);
4027  if (nG2>0)
4028  SETBIT(triggers, kG2);
4029  if (nJ1>0)
4030  SETBIT(triggers, kJ1);
4031  if (nJ2>0)
4032  SETBIT(triggers, kJ2);
4033  if (nL0>0)
4034  SETBIT(triggers, kL0);
4035  return triggers;
4036 }
4037 
4038 //________________________________________________________________________
4040  // Check if event has a given trigger type
4041  if(t == kND){
4042  return fTriggersEMCAL == 0;
4043  }
4044  return TESTBIT(fTriggersEMCAL, int(t));
4045 }
4046 
4047 
4048 //________________________________________________________________________
4049 TClonesArray *AliConvEventCuts::GetArrayFromEvent(AliVEvent* event, const char *name, const char *clname)
4050 {
4051  // Get array from event.
4052 
4053  TClonesArray *arr = 0;
4054  TString sname(name);
4055  if (!sname.IsNull()) {
4056  arr = dynamic_cast<TClonesArray*>(event->FindListObject(sname));
4057  if (!arr) {
4058  AliWarning(Form("%s: Could not retrieve array with name %s!", GetName(), name));
4059  return 0;
4060  }
4061  } else {
4062  return 0;
4063  }
4064 
4065  if (!clname)
4066  return arr;
4067 
4068  TString objname(arr->GetClass()->GetName());
4069  TClass cls(objname);
4070  if (!cls.InheritsFrom(clname)) {
4071  AliWarning(Form("%s: Objects of type %s in %s are not inherited from %s!",
4072  GetName(), cls.GetName(), name, clname));
4073  return 0;
4074  }
4075  return arr;
4076 }
4077 
4078 //_________________________________________________________________________
4079 Bool_t AliConvEventCuts::IsConversionPrimaryESD( AliMCEvent *mcEvent, Long_t eventpos, Double_t prodVtxX, Double_t prodVtxY, Double_t prodVtxZ){
4080 
4081  if (eventpos < 0) return kFALSE;
4082  TParticle* particle = (TParticle *)mcEvent->Particle(eventpos);
4083  if (!particle) return kFALSE;
4084  if (TMath::Abs(particle->GetPdgCode()) == 11 ){
4085  if (particle->GetMother(0) != -1){
4086  TParticle* particleMother = (TParticle *)mcEvent->Particle(particle->GetMother(0));
4087  if (particleMother){
4088  if (TMath::Abs(particleMother->GetPdgCode()) == 22)
4089  particle = particleMother;
4090  }
4091  }
4092  }
4093  if (particle->GetMother(0) != -1){
4094  Double_t deltaX = particle->Vx() - prodVtxX;
4095  Double_t deltaY = particle->Vy() - prodVtxY;
4096  Double_t deltaZ = particle->Vz() - prodVtxZ;
4097 
4098  //Double_t realRadius2D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY);
4099  Double_t realRadius3D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ);
4100 
4101 
4102  Bool_t dalitzCand = kFALSE;
4103 
4104  TParticle* firstmother = (TParticle *)mcEvent->Particle(particle->GetMother(0));
4105  if (!firstmother) return kFALSE;
4106  Int_t pdgCodeFirstMother = firstmother->GetPdgCode();
4107  Bool_t intDecay = kFALSE;
4108  if ( pdgCodeFirstMother == 111 || pdgCodeFirstMother == 221 ) intDecay = kTRUE;
4109  if ( intDecay && TMath::Abs(particle->GetPdgCode()) == 11 ){
4110  dalitzCand = kTRUE;
4111 // cout << "dalitz candidate found" << endl;
4112  }
4113 
4114  Long_t source = particle->GetMother(0);
4115  Bool_t foundExcludedPart = kFALSE;
4116  Bool_t foundShower = kFALSE;
4117  Int_t pdgCodeMotherPrev = 0;
4118  Int_t pdgCodeMotherPPrevMother = 0;
4119  Int_t depth = 0;
4120  if (dalitzCand || realRadius3D < fSecProdBoundary ){
4121 // if (particle->GetPdgCode() == 22){
4122 // cout << endl << endl << "new particle: " << eventpos <<endl;
4123 // cout << particle->GetPdgCode() << "\t" << particle->R() << "\t" << realRadius2D << "\t" << realRadius3D << endl;
4124 // }
4125  while (depth < 20){
4126  TParticle* mother = (TParticle *)mcEvent->Particle(source);
4127  source = mother->GetMother(0);
4128 // if (particle->GetPdgCode() == 22)cout << "eventposition: "<< source << endl;
4129  Int_t pdgCodeMother = mother->GetPdgCode();
4130 // if (particle->GetPdgCode() == 22)cout << "Previous mothers: " << pdgCodeMother << "\t"<< pdgCodeMotherPrev<< "\t" << pdgCodeMotherPPrevMother << endl;
4131  if (pdgCodeMother == pdgCodeMotherPrev && pdgCodeMother == pdgCodeMotherPPrevMother) depth = 20;
4132  if (TMath::Abs(pdgCodeMother) == 11 && TMath::Abs(pdgCodeMotherPrev) == 22 && TMath::Abs(pdgCodeMotherPPrevMother) == 11 ){
4133  foundShower = kTRUE;
4134  depth =20;
4135  }
4136  if (TMath::Abs(pdgCodeMother) == 22 && TMath::Abs(pdgCodeMotherPrev) == 11 && TMath::Abs(pdgCodeMotherPPrevMother) == 22 ){
4137  foundShower = kTRUE;
4138  depth =20;
4139  }
4140 
4141  // particles to be excluded:
4142  // K0s - 310
4143  // K0l - 130
4144  // K+/- - 321
4145  // Lambda - 3122
4146  // Sigma0 - 3212
4147  // Sigma+/- - 3222, 3112
4148  // Cascades - 3322, 3312
4149  if (TMath::Abs(pdgCodeMother) == 310 || TMath::Abs(pdgCodeMother) == 130 || TMath::Abs(pdgCodeMother) == 321 ||
4150  TMath::Abs(pdgCodeMother) == 3122 || TMath::Abs(pdgCodeMother) == 3212 || TMath::Abs(pdgCodeMother) == 3222 ||
4151  TMath::Abs(pdgCodeMother) == 3112 || TMath::Abs(pdgCodeMother) == 3322 || TMath::Abs(pdgCodeMother) == 3312
4152  ) {
4153  foundExcludedPart = kTRUE;
4154  }
4155 // if (particle->GetPdgCode() == 22)cout << mother->GetPdgCode() << "\t" << source << "\t" << foundExcludedPart<< endl;
4156  pdgCodeMotherPPrevMother = pdgCodeMotherPrev;
4157  pdgCodeMotherPrev = pdgCodeMother;
4158  if (source == -1) depth = 20;
4159 
4160 // if (particle->GetPdgCode() == 22)cout << depth << endl;
4161  depth++;
4162  }
4163  }
4164  if (foundExcludedPart){
4165 // if (particle->GetPdgCode() == 22)cout << "This is definitely a secondary, manually excluded" << endl;
4166  return kFALSE;
4167  } else if (dalitzCand && realRadius3D < fSecProdBoundary ){
4168 // if (particle->GetPdgCode() == 22)cout << "This was a decay via a virtual photon" << endl;
4169  return kTRUE;
4170  } else if (foundShower){
4171 // if (particle->GetPdgCode() == 22)cout << "This is a shower" << endl;
4172  return kFALSE;
4173  } else if (realRadius3D >= fSecProdBoundary){
4174 // cout << "This is a secondary, to large production radius" << endl;
4175  return kFALSE;
4176  }
4177  }
4178 
4179  return kTRUE;
4180 }
4181 
4182 //_________________________________________________________________________
4183 Bool_t AliConvEventCuts::IsConversionPrimaryAOD(AliVEvent *event, AliAODMCParticle* AODMCParticle, Double_t prodVtxX, Double_t prodVtxY, Double_t prodVtxZ){
4184 
4185  TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
4186  if (AODMCTrackArray == NULL) return kFALSE;
4187  AliAODMCParticle* currentParticle = AODMCParticle;
4188  if (TMath::Abs(currentParticle->GetPdgCode()) == 11 ){
4189  if (currentParticle->GetMother() != -1){
4190  AliAODMCParticle* particleMother = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(currentParticle->GetMother()));
4191  if (particleMother){
4192  if (TMath::Abs(particleMother->GetPdgCode()) == 22)
4193  currentParticle = particleMother;
4194  }
4195  }
4196  }
4197  if (currentParticle->GetMother() > -1){
4198  Double_t deltaX = currentParticle->Xv() - prodVtxX;
4199  Double_t deltaY = currentParticle->Yv() - prodVtxY;
4200  Double_t deltaZ = currentParticle->Zv() - prodVtxZ;
4201 
4202  //Double_t realRadius2D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY);
4203  Double_t realRadius3D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ);
4204 
4205  Bool_t dalitzCand = kFALSE;
4206 
4207  AliAODMCParticle* firstmother = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(currentParticle->GetMother()));
4208  if (!firstmother) return kFALSE;
4209  Int_t pdgCodeFirstMother = firstmother->GetPdgCode();
4210  Bool_t intDecay = kFALSE;
4211  if ( pdgCodeFirstMother == 111 || pdgCodeFirstMother == 221 ) intDecay = kTRUE;
4212  if ( intDecay && TMath::Abs(currentParticle->GetPdgCode()) == 11 ){
4213  dalitzCand = kTRUE;
4214 // cout << "dalitz candidate found" << endl;
4215  }
4216 
4217  Long_t source = currentParticle->GetMother();
4218  Bool_t foundExcludedPart = kFALSE;
4219  Bool_t foundShower = kFALSE;
4220  Int_t pdgCodeMotherPrev = 0;
4221  Int_t pdgCodeMotherPPrevMother = 0;
4222  Int_t depth = 0;
4223  if (dalitzCand || realRadius3D < fSecProdBoundary ){
4224 // if (currentParticle->GetPdgCode() == 22){
4225 // cout << endl << endl << "new particle: " << eventpos <<endl;
4226 // cout << currentParticle->GetPdgCode() << "\t" << currentParticle->R() << "\t" << realRadius2D << "\t" << realRadius3D << endl;
4227 // }
4228  while (depth < 20){
4229  AliAODMCParticle* mother = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(source));
4230  source = mother->GetMother();
4231 // if (currentParticle->GetPdgCode() == 22)cout << "eventposition: "<< source << endl;
4232  Int_t pdgCodeMother = mother->GetPdgCode();
4233 // if (currentParticle->GetPdgCode() == 22)cout << "Previous mothers: " << pdgCodeMother << "\t"<< pdgCodeMotherPrev<< "\t" << pdgCodeMotherPPrevMother << endl;
4234  if (pdgCodeMother == pdgCodeMotherPrev && pdgCodeMother == pdgCodeMotherPPrevMother) depth = 20;
4235  if (TMath::Abs(pdgCodeMother) == 11 && TMath::Abs(pdgCodeMotherPrev) == 22 && TMath::Abs(pdgCodeMotherPPrevMother) == 11 ){
4236  foundShower = kTRUE;
4237  depth =20;
4238  }
4239  if (TMath::Abs(pdgCodeMother) == 22 && TMath::Abs(pdgCodeMotherPrev) == 11 && TMath::Abs(pdgCodeMotherPPrevMother) == 22 ){
4240  foundShower = kTRUE;
4241  depth =20;
4242  }
4243 
4244  // particles to be excluded:
4245  // K0s - 310
4246  // K0l - 130
4247  // K+/- - 321
4248  // Lambda - 3122
4249  // Sigma0 - 3212
4250  // Sigma+/- - 3222, 3112
4251  // Cascades - 3322, 3312
4252  if (TMath::Abs(pdgCodeMother) == 310 || TMath::Abs(pdgCodeMother) == 130 || TMath::Abs(pdgCodeMother) == 321 ||
4253  TMath::Abs(pdgCodeMother) == 3122 || TMath::Abs(pdgCodeMother) == 3212 || TMath::Abs(pdgCodeMother) == 3222 ||
4254  TMath::Abs(pdgCodeMother) == 3112 || TMath::Abs(pdgCodeMother) == 3322 || TMath::Abs(pdgCodeMother) == 3312)
4255  {
4256  foundExcludedPart = kTRUE;
4257  }
4258 // if (currentParticle->GetPdgCode() == 22)cout << mother->GetPdgCode() << "\t" << source << "\t" << foundExcludedPart<< endl;
4259  pdgCodeMotherPPrevMother = pdgCodeMotherPrev;
4260  pdgCodeMotherPrev = pdgCodeMother;
4261  if (source == -1) depth = 20;
4262 
4263 // if (currentParticle->GetPdgCode() == 22)cout << depth << endl;
4264  depth++;
4265  }
4266  }
4267  if (foundExcludedPart){
4268 // if (currentParticle->GetPdgCode() == 22)cout << "This is definitely a secondary, manually excluded" << endl;
4269  return kFALSE;
4270  } else if (dalitzCand && realRadius3D < fSecProdBoundary ){
4271 // if (currentParticle->GetPdgCode() == 22)cout << "This was a decay via a virtual photon" << endl;
4272  return kTRUE;
4273  } else if (foundShower){
4274 // if (currentParticle->GetPdgCode() == 22)cout << "This is a shower" << endl;
4275  return kFALSE;
4276  } else if (realRadius3D >= fSecProdBoundary){
4277 // cout << "This is a secondary, too large production radius" << endl;
4278  return kFALSE;
4279  }
4280  }
4281 
4282  return kTRUE;
4283 }
4284 
4285 
4286 //________________________________________________________________________
4287 Int_t AliConvEventCuts::SecondaryClassificationPhoton( TParticle *particle, AliMCEvent* mcEvent, Bool_t isConversion ){
4288  if (particle != NULL && mcEvent != NULL){
4289  Int_t pdgSecondary = 0;
4290  if (!isConversion){
4291  //Bool_t hasMother = kFALSE;
4292  //Bool_t hasGrandMother = kFALSE;
4293  Long_t motherID = particle->GetMother(0);
4294  Long_t grandMotherID = -1;
4295  // is the photon a direct photons, without a mother?
4296  if (motherID > -1){
4297  //hasMother = kTRUE;
4298  grandMotherID = mcEvent->Particle(motherID)->GetMother(0);
4299  // is the meson a primary?
4300  if (grandMotherID > -1){
4301  //hasGrandMother = kTRUE;
4302  pdgSecondary = mcEvent->Particle(grandMotherID)->GetPdgCode();
4303  }
4304  }
4305  } else {
4306  //Bool_t hasMother = kFALSE;
4307  //Bool_t hasGrandMother = kFALSE;
4308  //Bool_t hasGreatGrandMother = kFALSE;
4309  Long_t motherID = particle->GetMother(0);
4310  Long_t grandMotherID = -1;
4311  Long_t greatGrandMotherID = -1;
4312  // is the electron a direct electron, without a mother?
4313  if (motherID > -1){
4314  //hasMother = kTRUE;
4315  grandMotherID = mcEvent->Particle(motherID)->GetMother(0);
4316  // is the photon a direct photons, without a mother?
4317  if (grandMotherID > -1){
4318  //hasGrandMother = kTRUE;
4319  greatGrandMotherID = mcEvent->Particle(grandMotherID)->GetMother(0);
4320  // is the meson a primary?
4321  if (greatGrandMotherID > -1){
4322  //hasGreatGrandMother = kTRUE;
4323  pdgSecondary = mcEvent->Particle(greatGrandMotherID)->GetPdgCode();
4324  }
4325  }
4326  }
4327  }
4328  // is the secondary photon from a lambda
4329  if (TMath::Abs(pdgSecondary) == 3122 )
4330  return 3;
4331  // is the secondary photon from a K0s
4332  else if ( TMath::Abs(pdgSecondary) == 310 )
4333  return 2;
4334  // is the secondary photon from a K0l
4335  else if ( TMath::Abs(pdgSecondary) == 130 )
4336  return 5;
4337  // is the secondary photon from a eta
4338  else if ( TMath::Abs(pdgSecondary) == 221 )
4339  return 4;
4340  // is the secondary photon from something else
4341  else if ( TMath::Abs(pdgSecondary) != 0 )
4342  return 1;
4343 
4344  }
4345 
4346  return 0;
4347 }
4348 
4349 //________________________________________________________________________
4350 Int_t AliConvEventCuts::SecondaryClassificationPhotonAOD( AliAODMCParticle *particle, TClonesArray *aodmcArray, Bool_t isConversion ){
4351  if (particle != NULL && aodmcArray != NULL){
4352  Int_t pdgSecondary = 0;
4353  if (!isConversion){
4354  //Bool_t hasMother = kFALSE;
4355  //Bool_t hasGrandMother = kFALSE;
4356  Long_t motherID = particle->GetMother();
4357  Long_t grandMotherID = -1;
4358  // is the photon a direct photons, without a mother?
4359  if (motherID > -1){
4360  //hasMother = kTRUE;
4361  grandMotherID = ((AliAODMCParticle*)aodmcArray->At(motherID))->GetMother();
4362  // is the meson a primary?
4363  if (grandMotherID > -1){
4364  //hasGrandMother = kTRUE;
4365  pdgSecondary = ((AliAODMCParticle*)aodmcArray->At(grandMotherID))->GetPdgCode();
4366  }
4367  }
4368  } else {
4369  //Bool_t hasMother = kFALSE;
4370  //Bool_t hasGrandMother = kFALSE;
4371  //Bool_t hasGreatGrandMother = kFALSE;
4372  Long_t motherID = particle->GetMother();
4373  Long_t grandMotherID = -1;
4374  Long_t greatGrandMotherID = -1;
4375  // is the electron a direct electron, without a mother?
4376  if (motherID > -1){
4377  //hasMother = kTRUE;
4378  grandMotherID = ((AliAODMCParticle*)aodmcArray->At(motherID))->GetMother();
4379  // is the photon a direct photons, without a mother?
4380  if (grandMotherID > -1){
4381  //hasGrandMother = kTRUE;
4382  greatGrandMotherID = ((AliAODMCParticle*)aodmcArray->At(grandMotherID))->GetMother();
4383  // is the meson a primary?
4384  if (greatGrandMotherID > -1){
4385  //hasGreatGrandMother = kTRUE;
4386  pdgSecondary = ((AliAODMCParticle*)aodmcArray->At(greatGrandMotherID))->GetPdgCode();
4387  }
4388  }
4389  }
4390  }
4391  // is the secondary photon from a lambda
4392  if (TMath::Abs(pdgSecondary) == 3122 )
4393  return 3;
4394  // is the secondary photon from a K0s
4395  else if ( TMath::Abs(pdgSecondary) == 310 )
4396  return 2;
4397  // is the secondary photon from a K0l
4398  else if ( TMath::Abs(pdgSecondary) == 130 )
4399  return 5;
4400  // is the secondary photon from a eta
4401  else if ( TMath::Abs(pdgSecondary) == 221 )
4402  return 4;
4403  // is the secondary photon from something else
4404  else if ( TMath::Abs(pdgSecondary) != 0 )
4405  return 1;
4406 
4407  }
4408 
4409  return 0;
4410 }
4411 
4413 
4414  if (periodName.CompareTo("") == 0){
4415  periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
4416  }
4417 
4418  if (periodName.CompareTo("") == 0) {
4420  fEnergyEnum = kUnset;
4421  AliError("No correct period could be set, periodName string empty");
4422  return;
4423  }
4424 
4425  // Data
4426  if (periodName.CompareTo("LHC10b") == 0 || periodName.CompareTo("LHC10c") == 0 || periodName.CompareTo("LHC10d") == 0 || periodName.CompareTo("LHC10e") == 0 ||
4427  periodName.CompareTo("LHC10f") == 0 || periodName.CompareTo("LHC10g") == 0 || periodName.CompareTo("LHC10bg") == 0
4428  ){
4430  fEnergyEnum = k7TeV;
4431  } else if (periodName.CompareTo("LHC10h") == 0) {
4432  fPeriodEnum = kLHC10h;
4434  } else if (periodName.CompareTo("LHC11a") == 0) {
4435  fPeriodEnum = kLHC11a;
4437  } else if (periodName.CompareTo("LHC11b") == 0) {
4438  fPeriodEnum = kLHC11b;
4439  fEnergyEnum = k7TeV;
4440  } else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 ||
4441  periodName.CompareTo("LHC11g") == 0
4442  ) {
4444  fEnergyEnum = k7TeV;
4445  } else if (periodName.CompareTo("LHC11h") == 0) {
4446  fPeriodEnum = kLHC11h;
4448  } else if (periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 ||
4449  periodName.CompareTo("LHC12e") == 0 || periodName.CompareTo("LHC12f") == 0 || periodName.CompareTo("LHC12g") == 0 || periodName.CompareTo("LHC12h") == 0 ||
4450  periodName.CompareTo("LHC12i") == 0 || periodName.CompareTo("LHC12ai") == 0
4451  ) {
4452  fPeriodEnum = kLHC12;
4453  fEnergyEnum = k8TeV;
4454  } else if (periodName.CompareTo("LHC13b") == 0 || periodName.CompareTo("LHC13c") == 0 || periodName.CompareTo("LHC13bc") == 0){
4457  } else if (periodName.CompareTo("LHC13d") == 0 || periodName.CompareTo("LHC13e") == 0 || periodName.CompareTo("LHC13de") == 0){
4460  } else if (periodName.CompareTo("LHC13f") == 0 ){
4461  fPeriodEnum = kLHC13f;
4463  } else if (periodName.CompareTo("LHC13g") == 0 ){
4464  fPeriodEnum = kLHC13g;
4466  } else if ( periodName.CompareTo("LHC15f") == 0 || periodName.CompareTo("LHC15g") == 0 || periodName.CompareTo("LHC15h") == 0 || periodName.CompareTo("LHC15i") == 0 ||
4467  periodName.CompareTo("LHC15j") == 0 || periodName.CompareTo("LHC15k") == 0 || periodName.CompareTo("LHC15l") == 0 || periodName.CompareTo("LHC15m") == 0 ||
4468  periodName.CompareTo("LHC15fm") == 0
4469  ) {
4471  fEnergyEnum = k13TeV;
4472  } else if (periodName.CompareTo("LHC15n") == 0 ){
4473  fPeriodEnum = kLHC15n;
4474  fEnergyEnum = k5TeV;
4475  } else if (periodName.CompareTo("LHC15o") == 0 ){
4476  fPeriodEnum = kLHC15o;
4478  } else if ( periodName.CompareTo("LHC16d") == 0 || periodName.CompareTo("LHC16e") == 0 || periodName.CompareTo("LHC16g") == 0 || periodName.CompareTo("LHC16h") == 0 ||
4479  periodName.CompareTo("LHC16i") == 0 || periodName.CompareTo("LHC16j") == 0 || periodName.CompareTo("LHC16k") == 0 || periodName.CompareTo("LHC16l") == 0 ||
4480  periodName.CompareTo("LHC16m") == 0 || periodName.CompareTo("LHC16n") == 0 || periodName.CompareTo("LHC16o") == 0 || periodName.CompareTo("LHC16p") == 0){
4482  fEnergyEnum = k13TeV;
4483  } else if (periodName.CompareTo("LHC16f") == 0 ){
4486  } else if (periodName.CompareTo("LHC16q") == 0 ){
4487  fPeriodEnum = kLHC16q;
4489  } else if (periodName.CompareTo("LHC16r") == 0 ){
4490  fPeriodEnum = kLHC16r;
4492  } else if (periodName.CompareTo("LHC16s") == 0 ){
4493  fPeriodEnum = kLHC16s;
4495  } else if (periodName.CompareTo("LHC16t") == 0 ){
4496  fPeriodEnum = kLHC16t;
4498  } else if ( periodName.CompareTo("LHC17c") == 0 || periodName.CompareTo("LHC17d") == 0 || periodName.CompareTo("LHC17e") == 0 || periodName.CompareTo("LHC17f") == 0 ||
4499  periodName.CompareTo("LHC17h") == 0 || periodName.CompareTo("LHC17i") == 0 || periodName.CompareTo("LHC17j") == 0 || periodName.CompareTo("LHC17k") == 0 ||
4500  periodName.CompareTo("LHC17l") == 0 || periodName.CompareTo("LHC17m") == 0 || periodName.CompareTo("LHC17o") == 0 ){
4502  fEnergyEnum = k13TeV;
4503  } else if ( periodName.CompareTo("LHC17g") == 0 ){
4506  } else if ( periodName.CompareTo("LHC17n") == 0 ){
4507  fPeriodEnum = kLHC17n;
4509 
4510  // LHC10x anchored MCs
4511  } else if (periodName.CompareTo("LHC10d1") == 0){
4513  fEnergyEnum = k7TeV;
4514  } else if (periodName.CompareTo("LHC10d2") == 0){
4516  fEnergyEnum = k7TeV;
4517  } else if (periodName.CompareTo("LHC10d4a") == 0){
4519  fEnergyEnum = k7TeV;
4520  } else if (periodName.CompareTo("LHC10d4") == 0){
4522  fEnergyEnum = k7TeV;
4523  } else if (periodName.CompareTo("LHC10e12") == 0){
4525  fEnergyEnum = k900GeV;
4526  } else if (periodName.CompareTo("LHC10e13") == 0){
4528  fEnergyEnum = k900GeV;
4529  } else if (periodName.CompareTo("LHC10e20") == 0){
4531  fEnergyEnum = k7TeV;
4532  } else if (periodName.CompareTo("LHC10e21") == 0){
4534  fEnergyEnum = k7TeV;
4535  } else if (periodName.CompareTo("LHC10f6a") == 0){
4537  fEnergyEnum = k7TeV;
4538  } else if (periodName.CompareTo("LHC10f6") == 0){
4540  fEnergyEnum = k7TeV;
4541  } else if (periodName.Contains("LHC14j4")){
4543  fEnergyEnum = k7TeV;
4544  } else if (periodName.CompareTo("LHC13d2") == 0){
4547  } else if (periodName.CompareTo("LHC13d2b") == 0){
4550  } else if (periodName.CompareTo("LHC12a11a") == 0){
4553  } else if (periodName.CompareTo("LHC12a11b") == 0){
4556  } else if (periodName.CompareTo("LHC12a11c") == 0){
4559  } else if (periodName.CompareTo("LHC12a11d") == 0){
4562  } else if (periodName.CompareTo("LHC12a11e") == 0){
4565  } else if (periodName.CompareTo("LHC12a11f") == 0){
4568  // LHC11x anchored MCs
4569  } else if (periodName.CompareTo("LHC12a15c") == 0){
4572  } else if (periodName.Contains("LHC12f1a") ){
4575  } else if (periodName.Contains("LHC12f1b") ){
4578  } else if (periodName.Contains("LHC12i3") ){
4581  } else if (periodName.CompareTo("LHC15g1a") == 0){
4584  } else if (periodName.CompareTo("LHC15g1b") == 0){
4587  } else if (periodName.CompareTo("LHC13e4") == 0){
4589  fEnergyEnum = k7TeV;
4590  } else if (periodName.CompareTo("LHC13e5") == 0){
4592  fEnergyEnum = k7TeV;
4593  } else if (periodName.CompareTo("LHC14k1a") == 0){
4595  fEnergyEnum = k7TeV;
4596  } else if (periodName.CompareTo("LHC14k1b") == 0){
4598  fEnergyEnum = k7TeV;
4599  } else if (periodName.CompareTo("LHC12a15f") == 0){
4601  fEnergyEnum = k7TeV;
4602  } else if (periodName.CompareTo("LHC12a15g") == 0){
4604  fEnergyEnum = k7TeV;
4605  } else if (periodName.CompareTo("LHC12f2a") == 0){
4607  fEnergyEnum = k7TeV;
4608  } else if (periodName.CompareTo("LHC14a1a") == 0){
4611  } else if (periodName.CompareTo("LHC14a1b") == 0){
4614  } else if (periodName.CompareTo("LHC14a1c") == 0){
4617  // LHC12x anchored MCs
4618  } else if (periodName.CompareTo("LHC14e2a") == 0){
4620  fEnergyEnum = k8TeV;
4621  } else if (periodName.CompareTo("LHC14e2b") == 0){
4623  fEnergyEnum = k8TeV;
4624  } else if (periodName.CompareTo("LHC14e2c") == 0){
4626  fEnergyEnum = k8TeV;
4627  } else if (periodName.Contains("LHC15h1")){
4629  fEnergyEnum = k8TeV;
4630  } else if (periodName.Contains("LHC15h2")){
4632  fEnergyEnum = k8TeV;
4633  } else if (periodName.CompareTo("LHC16c2") == 0){
4635  fEnergyEnum = k8TeV;
4636  } else if (periodName.CompareTo("LHC16c2_plus") == 0){
4638  fEnergyEnum = k8TeV;
4639  // LHC13x anchored MCs
4640  } else if (periodName.Contains("LHC13b2_efix")){
4643  } else if (periodName.CompareTo("LHC13e7") == 0){
4646  } else if (periodName.CompareTo("LHC14b2") == 0){
4649  } else if (periodName.CompareTo("LHC13b4_fix") == 0){
4652  } else if (periodName.CompareTo("LHC13b4_plus") == 0){
4655  } else if (periodName.CompareTo("LHC16c3a") == 0){
4658  } else if (periodName.CompareTo("LHC16c3b") == 0){
4661  } else if (periodName.CompareTo("LHC16c3c") == 0){
4664  } else if (periodName.CompareTo("LHC15g2") == 0){
4667  } else if (periodName.CompareTo("LHC15a3a") == 0){
4670  } else if (periodName.CompareTo("LHC15a3a_plus") == 0){
4673  } else if (periodName.CompareTo("LHC15a3b") == 0){
4676  } else if (periodName.CompareTo("LHC15d3a") == 0){
4679  } else if (periodName.CompareTo("LHC15d3b") == 0){
4682  // LHC15x anchored MCs
4683  } else if (periodName.CompareTo("LHC15g3a3") == 0){
4685  fEnergyEnum = k13TeV;
4686  } else if (periodName.CompareTo("LHC15g3a") == 0){
4688  fEnergyEnum = k13TeV;
4689  } else if (periodName.CompareTo("LHC15g3c2") == 0){
4691  fEnergyEnum = k13TeV;
4692  } else if (periodName.CompareTo("LHC15g3c3") == 0){
4694  fEnergyEnum = k13TeV;
4695  } else if (periodName.CompareTo("LHC15g3") == 0){
4697  fEnergyEnum = k13TeV;
4698  } else if (periodName.CompareTo("LHC16a2a") == 0){
4700  fEnergyEnum = k13TeV;
4701  } else if (periodName.CompareTo("LHC16a2b") == 0){
4703  fEnergyEnum = k13TeV;
4704  } else if (periodName.CompareTo("LHC16a2c") == 0){
4706  fEnergyEnum = k13TeV;
4707  } else if (periodName.CompareTo("LHC15l1a2") == 0){
4709  fEnergyEnum = k5TeV;
4710  } else if (periodName.CompareTo("LHC15l1b2") == 0){
4712  fEnergyEnum = k5TeV;
4713  } else if (periodName.CompareTo("LHC16h3") == 0){
4715  fEnergyEnum = k5TeV;
4716  } else if (periodName.CompareTo("LHC16h8a") == 0){
4718  fEnergyEnum = k5TeV;
4719  } else if (periodName.CompareTo("LHC16h8b") == 0){
4721  fEnergyEnum = k5TeV;
4722  } else if (periodName.CompareTo("LHC16k5a") == 0){
4724  fEnergyEnum = k5TeV;
4725  } else if (periodName.CompareTo("LHC16k5b") == 0){
4727  fEnergyEnum = k5TeV;
4728  } else if (periodName.CompareTo("LHC16k3a") == 0){
4730  fEnergyEnum = k5TeV;
4731  } else if (periodName.CompareTo("LHC16k3a2") == 0){
4733  fEnergyEnum = k5TeV;
4734  } else if (periodName.CompareTo("LHC17e2") == 0){
4736  fEnergyEnum = k5TeV;
4737  } else if (periodName.Contains("LHC15k1a1")){
4740  } else if (periodName.Contains("LHC15k1a2")){
4743  } else if (periodName.Contains("LHC15k1a3")){
4746  } else if (periodName.Contains("LHC16j7")){
4749  } else if (periodName.Contains("LHC16h4")){
4752  } else if (periodName.Contains("LHC16g1")){
4755  } else if (periodName.Contains("LHC16g1a")){
4758  } else if (periodName.Contains("LHC16g1b")){
4761  } else if (periodName.Contains("LHC16g1c")){
4764  } else if (periodName.Contains("LHC16g2")){
4767  } else if (periodName.Contains("LHC16g3")){
4770  } else if (periodName.Contains("LHC16h2a")){
4773  } else if (periodName.Contains("LHC16h2b")){
4776  } else if (periodName.Contains("LHC16h2c")){
4779  } else if (periodName.CompareTo("LHC16k3b") == 0){
4782  } else if (periodName.CompareTo("LHC16k3b2") == 0){
4785 
4786  // LHC16x anchored MCs
4787  // 13TeV LHC16* anchors full field Pythia 8 MB
4788  } else if ( periodName.CompareTo("LHC16P1Pyt8") == 0 || periodName.CompareTo("LHC17f6") == 0 || periodName.CompareTo("LHC17d17") == 0 || periodName.CompareTo("LHC17f5") == 0 ||
4789  periodName.CompareTo("LHC17d3") == 0 || periodName.CompareTo("LHC17e5") == 0 || periodName.CompareTo("LHC17d20a1") == 0 || periodName.CompareTo("LHC17d20a1_extra") == 0 ||
4790  periodName.CompareTo("LHC17d20a2") == 0 || periodName.CompareTo("LHC17d20a2_extra") == 0 || periodName.CompareTo("LHC17d16") == 0 || periodName.CompareTo("LHC17d18") == 0 ||
4791  periodName.CompareTo("LHC17f9") == 0 || periodName.CompareTo("LHC17f9_test") == 0){
4793  fEnergyEnum = k13TeV;
4794  // 13TeV LHC16* anchors low field Pythia 8 MB
4795  } else if ( periodName.CompareTo("LHC16P1Pyt8LowB") == 0 || periodName.CompareTo("LHC17d1") == 0 ){
4798  // 13TeV LHC16* anchors full field EPOS MB
4799  } else if ( periodName.CompareTo("LHC16P1EPOS") == 0 || periodName.CompareTo("LHC17d20b1") == 0 || periodName.CompareTo("LHC17d20b2") == 0 ){
4801  fEnergyEnum = k13TeV;
4802  // 13TeV LHC16* anchors full field JJ Pythia 8 MB
4803  } else if ( periodName.CompareTo("LHC16P1JJ") == 0 || periodName.CompareTo("LHC17f8a") == 0 || periodName.CompareTo("LHC17f8c") == 0 || periodName.CompareTo("LHC17f8d") == 0 ||
4804  periodName.CompareTo("LHC17f8e") == 0 ){
4806  fEnergyEnum = k13TeV;
4807  // 13TeV LHC16* anchors low field JJ Pythia 8 MB
4808  } else if ( periodName.CompareTo("LHC16P1JJLowB") == 0 || periodName.CompareTo("LHC17f8b") == 0 ){
4811 
4812  // LHC16qt anchored MCs
4813  } else if (periodName.CompareTo("LHC17f2a") == 0){
4816  } else if (periodName.CompareTo("LHC17f2a_fast") == 0){
4819  } else if (periodName.CompareTo("LHC17f2a_cent") == 0){
4822  } else if (periodName.CompareTo("LHC17f2a_cent_woSDD") == 0){
4825  } else if (periodName.CompareTo("LHC17f2a_fast_fix") == 0){
4828  } else if (periodName.CompareTo("LHC17f2a_cent_fix") == 0){
4831  } else if (periodName.CompareTo("LHC17f2a_cent_woSDD_fix") == 0){
4834  } else if (periodName.CompareTo("LHC17f2b") == 0){
4837  } else if (periodName.CompareTo("LHC17f2b_fast") == 0){
4840  } else if (periodName.CompareTo("LHC17f2b_cent") == 0){
4843  } else if (periodName.CompareTo("LHC17f2b_cent_woSDD") == 0){
4846  } else if (periodName.CompareTo("LHC17g8a_fast") == 0){
4849  } else if (periodName.CompareTo("LHC17g8a_cent_woSDD") == 0){
4852  // LHC16r anchored MCs
4853  } else if (periodName.CompareTo("LHC17a3a") == 0){
4856  } else if (periodName.CompareTo("LHC17a3a_fast") == 0){
4859  } else if (periodName.CompareTo("LHC17a3a_cent") == 0){
4862  } else if (periodName.CompareTo("LHC17a3a_cent_woSDD") == 0){
4865  } else if (periodName.CompareTo("LHC17a3b") == 0){
4868  } else if (periodName.CompareTo("LHC17a3b_fast") == 0){
4871  } else if (periodName.CompareTo("LHC17a3b_cent") == 0){
4874  } else if (periodName.CompareTo("LHC17a3b_cent_woSDD") == 0){
4877  } else if (periodName.CompareTo("LHC17f3a") == 0){
4880  } else if (periodName.CompareTo("LHC17f3a_fast") == 0){
4883  } else if (periodName.CompareTo("LHC17f3a_cent") == 0){
4886  } else if (periodName.CompareTo("LHC17f3a_cent_woSDD") == 0){
4889  } else if (periodName.CompareTo("LHC17f3b") == 0){
4892  } else if (periodName.CompareTo("LHC17f3b_fast") == 0){
4895  } else if (periodName.CompareTo("LHC17f3b_cent") == 0){
4898  } else if (periodName.CompareTo("LHC17f3b_cent_woSDD") == 0){
4899