AliPhysics  8dc8609 (8dc8609)
 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 == kLHC16g1 || fPeriodEnum == kLHC16g1a || fPeriodEnum == kLHC16g1b || fPeriodEnum == kLHC16g1c || // MC PbPb 5TeV general purpose
1895  fPeriodEnum == kLHC16g2 || // MC PbPb 5TeV EPOS-LHC
1896  fPeriodEnum == kLHC16g3 || // MC PbPb 5TeV DPMJET
1897  fPeriodEnum == kLHC16h4 || // MC PbPb 5TeV GA added pi0 and eta
1898  fPeriodEnum == kLHC16i1a || fPeriodEnum == kLHC16i1b || fPeriodEnum == kLHC16i1c || // MC PbPb 5TeV LF added (multi-)strange
1899  fPeriodEnum == kLHC16i2a || fPeriodEnum == kLHC16i2b || fPeriodEnum == kLHC16i2c || // MC PbPb 5TeV HF added hadronic decays
1900  fPeriodEnum == kLHC16i3a || fPeriodEnum == kLHC16i3b || fPeriodEnum == kLHC16i3c || // MC PbPb 5TeV HF added electron decays
1901  fPeriodEnum == kLHC16h2a || fPeriodEnum == kLHC16h2b || fPeriodEnum == kLHC16h2c || // MC PbPb 5TeV jet-jet
1903  fPeriodEnum == kLHC15g3a3 || fPeriodEnum == kLHC15g3c3 || // MC pp 13TeV
1904  fPeriodEnum == kLHC16q || fPeriodEnum == kLHC16t || // pPb 5TeV LHC16qt
1905  fPeriodEnum == kLHC16r || fPeriodEnum == kLHC16s || // pPb 8TeV LHC16rs
1906  fPeriodEnum == kLHC17f2a || fPeriodEnum == kLHC17f2b || fPeriodEnum == kLHC17g8a || // MC pPb 5TeV LHC16qt
1909  fPeriodEnum == kLHC17f4a || fPeriodEnum == kLHC17f4b || // MC pPb 8TeV LHC16sr
1910  fPeriodEnum == kLHC17n || // Xe-Xe LHC17n
1911  fPeriodEnum == kLHC17j7 || // MC Xe-Xe LHC17n
1912  fPeriodEnum == kLHC17p || fPeriodEnum == kLHC17q || // pp 5TeV LHC17pq
1915  ){
1916  return kTRUE;
1917  } else {
1918  return kFALSE;
1919  }
1920 }
1921 
1922 //-------------------------------------------------------------
1924 { // Get Event Centrality
1925 
1926  AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
1927  if(esdEvent){
1929  AliMultSelection *MultSelection = (AliMultSelection*)event->FindListObject("MultSelection");
1930  if(!MultSelection){
1931  AliWarning ("AliMultSelection object not found !");
1932  return -1;
1933  }else{
1934  if(fDetectorCentrality==0){
1935  if(fIsHeavyIon==2) return MultSelection->GetMultiplicityPercentile("V0A");// default for pPb
1936  else return MultSelection->GetMultiplicityPercentile("V0M");// default
1937  }else if(fDetectorCentrality==1) return MultSelection->GetMultiplicityPercentile("CL1",kTRUE);
1938  }
1939  }else{
1940  AliCentrality *fESDCentrality = (AliCentrality*)esdEvent->GetCentrality();
1941  if(fDetectorCentrality==0){
1942  if(fIsHeavyIon==2) return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
1943  else return fESDCentrality->GetCentralityPercentile("V0M"); // default
1944  }else if(fDetectorCentrality==1) return fESDCentrality->GetCentralityPercentile("CL1");
1945  }
1946  }
1947 
1948  AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
1949  if(aodEvent){
1951  AliMultSelection *MultSelection = (AliMultSelection*)aodEvent->FindListObject("MultSelection");
1952  if(!MultSelection){
1953  AliWarning ("AliMultSelection object not found !");
1954  return -1;
1955  } else{
1956  if(fDetectorCentrality==0){
1957  if(fIsHeavyIon==2) return MultSelection->GetMultiplicityPercentile("V0A");// default for pPb
1958  else return MultSelection->GetMultiplicityPercentile("V0M",kTRUE);
1959  }else if(fDetectorCentrality==1) return MultSelection->GetMultiplicityPercentile("CL1",kTRUE);
1960  }
1961  }else{
1962  if(aodEvent->GetHeader()){return ((AliVAODHeader*)aodEvent->GetHeader())->GetCentrality();}
1963  }
1964  }
1965 
1966  return -1;
1967 }
1968 
1969 //_____________________________________________________________________________________
1970 Bool_t AliConvEventCuts::IsCentralitySelected(AliVEvent *event, AliMCEvent *mcEvent)
1971 {
1972  // Centrality Selection
1973  if(!fIsHeavyIon){
1974  if ((fCentralityMin == 0 && fCentralityMax == 0) || (fCentralityMin > fCentralityMax) ){
1975  return kTRUE;
1976  } else {
1977  Int_t primaryTracksPP[9] = { 0, 2, 5, 10, 15,
1978  30, 50, 100, 1000
1979  };
1980  Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
1981  if ( nprimaryTracks >= primaryTracksPP[fCentralityMin] && nprimaryTracks < primaryTracksPP[fCentralityMax]){
1982  return kTRUE;
1983  } else {
1984  return kFALSE;
1985  }
1986  return kFALSE;
1987  }
1988  }
1989  if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
1990  else if ( fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-10*multfactor
1992  if(centrality<0 && !mcEvent)return kFALSE;
1993 
1994  Int_t centralityC=0;
1995  if (fModCentralityClass == 0){
1996  centralityC= Int_t(centrality/10);
1997  if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1998  return kTRUE;
1999  else return kFALSE;
2000  }
2001  else if (fModCentralityClass ==1){
2002  centralityC= Int_t(centrality);
2003  if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
2004  return kTRUE;
2005  } else return kFALSE;
2006  }
2007  else if (fModCentralityClass ==2){
2008  centralityC= Int_t(centrality);
2009  if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
2010  return kTRUE;
2011  else return kFALSE;
2012  }
2013 
2014  Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
2015  Int_t PrimaryTracks10[11][2] =
2016  {
2017  {9999,9999}, // 0 //1550 changed to 9999 on 9 Dec
2018  {1210, 928}, // 10
2019  { 817, 658}, // 20
2020  { 536, 435}, // 30
2021  { 337, 276}, // 40
2022  { 197, 162}, // 50
2023  { 106, 100}, // 60
2024  { 51, 44}, // 70
2025  { 21, 18}, // 80
2026  { 0, 0}, // 90
2027  { 0, 0}// 100 // only max accessible
2028  };
2029  Int_t PrimaryTracksLHC11h10[11][2] =
2030  {
2031  {9999,9999}, // 0 //1550 changed to 9999 on 9 Dec
2032  { 985, 928}, // 10
2033  { 661, 658}, // 20
2034  { 434, 435}, // 30
2035  { 275, 276}, // 40
2036  { 173, 162}, // 50
2037  { 100, 100}, // 60
2038  { 42, 44}, // 70
2039  { 19, 18}, // 80
2040  { 0, 0}, // 90
2041  { 0, 0}// 100 // only max accessible
2042  };
2043  Int_t PrimaryTracksLHC15o10[11][2] =
2044  { // values calculated from ESD analysis so far
2045  {2700, 2700}, // 0-10% cent class max # of tracks: max value of the data distribution
2046  {1498, 1498}, // 0-10% cent class min # of tracks
2047  {1012, 1012}, // 10-20
2048  { 669, 669}, // 20-30
2049  { 423, 423}, // 30-40
2050  { 251, 251}, // 40-50
2051  { 136, 136}, // 50-60
2052  { 67, 67}, // 60-70
2053  { 28, 28}, // 70-80
2054  { 0, 0}, // 80-90% cent class min # of tracks
2055  { 0, 0} // not used
2056  };
2057  Int_t PrimaryTracks5a[11][2] =
2058  {
2059  {9999,9999}, // 0 ///1550 changed to 9999 on 9 Dec
2060  {1485,1168}, // 5
2061  {1210, 928}, // 10
2062  { 995, 795}, // 15
2063  { 817, 658}, // 20
2064  { 666, 538}, // 25
2065  { 536, 435}, // 30
2066  { 428, 350}, // 35
2067  { 337, 276}, // 40
2068  { 260, 214}, // 45
2069  { 0, 162}// 50 only max accessible
2070  };
2071  Int_t PrimaryTracksLHC11h5a[11][2] =
2072  {
2073  {9999,9999}, // 0 ///1550 changed to 9999 on 9 Dec
2074  {1166,1168}, // 5
2075  { 953, 928}, // 10
2076  { 805, 795}, // 15
2077  { 655, 658}, // 20
2078  { 535, 538}, // 25
2079  { 435, 435}, // 30
2080  { 349, 350}, // 35
2081  { 275, 276}, // 40
2082  { 214, 214}, // 45
2083  { 165, 162}// 50 only max accessible
2084  };
2085  Int_t PrimaryTracksLHC15o5a[11][2] =
2086  {
2087  { 2700, 2700}, // 0-5% cent class max # of tracks: max value of the data distribution
2088  { 1827, 1827}, // 0-5% cent class min # of tracks
2089  { 1498, 1498}, // 5-10
2090  { 1234, 1234}, // 10-15
2091  { 1012, 1012}, // 15-20
2092  { 827, 827}, // 20-25
2093  { 669, 669}, // 25-30
2094  { 536, 536}, // 30-35
2095  { 423, 423}, // 35-40
2096  { 329, 329}, // 40-45 cent class min # of tracks (cut digit 9)
2097  { 0, 0} // not used
2098  };
2099  Int_t PrimaryTracks5b[11][2] =
2100  {
2101  { 260, 214}, // 45
2102  { 197, 162}, // 50
2103  { 147, 125}, // 55
2104  { 106, 100}, // 60
2105  { 75, 63}, // 65
2106  { 51, 44}, // 70
2107  { 34, 29}, // 75
2108  { 21, 18}, // 80
2109  { 13, 11}, // 85
2110  { 0, 0}, // 90
2111  { 0, 0}// 100 only max accessible
2112  };
2113  Int_t PrimaryTracksLHC11h5b[11][2] =
2114  {
2115  { 214, 214}, // 45
2116  { 165, 162}, // 50
2117  { 127, 125}, // 55
2118  { 93, 100}, // 60
2119  { 64, 63}, // 65
2120  { 44, 44}, // 70
2121  { 30, 29}, // 75
2122  { 18, 18}, // 80
2123  { 11, 11}, // 85
2124  { 0, 0}, // 90
2125  { 0, 0}// 100 only max accessible
2126  };
2127  Int_t PrimaryTracksLHC15o5b[11][2] =
2128  {
2129  { 329, 329}, // 45-50% cent class max # of tracks
2130  { 251, 251}, // 45-50% cent class min # of tracks
2131  { 188, 188}, // 50-55
2132  { 136, 136}, // 55-60
2133  { 97, 97}, // 60-65
2134  { 67, 67}, // 65-70
2135  { 44, 44}, // 70-75
2136  { 28, 28}, // 75-80
2137  { 17, 17}, // 80-85
2138  { 0, 0}, // 85-90 cent class minimum # of tracks
2139  { 0, 0} // not used
2140  };
2141  Int_t PrimaryTracksLHC17n10[11][2] =
2142  {
2143  {9999,9999}, // 0 // 1500 max in hist but set to real max
2144  { 800, 800}, // 10 // guess
2145  { 628, 628}, // 20
2146  { 350, 350}, // 30 // guess
2147  { 268, 268}, // 40
2148  { 200, 200}, // 50 // guess
2149  { 100, 100}, // 60 // guess
2150  { 51, 44}, // 70 // guess
2151  { 21, 18}, // 80 // guess
2152  { 0, 0}, // 90 // guess
2153  { 0, 0} // 100 // only max accessible
2154  };
2155 
2156  Int_t column = 0;
2157  if(event->IsA()==AliESDEvent::Class()) column = 0;
2158  if(event->IsA()==AliAODEvent::Class()) column = 1;
2159 
2160  if (fModCentralityClass == 3){
2161  if(mcEvent){
2162  // setting specific arry for LHC11h for MC track mult
2164  if(nprimaryTracks > PrimaryTracksLHC11h10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC11h10[fCentralityMin][column])
2165  return kTRUE;
2166  else return kFALSE;
2167  // setting specific arry for LHC17n for MC track mult
2168  } else if(fPeriodEnum == kLHC17j7 ){
2169  if(nprimaryTracks > PrimaryTracksLHC17n10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC17n10[fCentralityMin][column])
2170  return kTRUE;
2171  else return kFALSE;
2172  // setting specific arry for LHC15o for MC track mult
2174  if(nprimaryTracks > PrimaryTracksLHC15o10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC15o10[fCentralityMin][column])
2175  return kTRUE;
2176  else return kFALSE;
2177  // setting specific arry for LHC10h for MC track mult
2178  } else {
2179  if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
2180  return kTRUE;
2181  else return kFALSE;
2182  }
2183  }
2184  else{
2185  centralityC= Int_t(centrality/10);
2186  if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
2187  return kTRUE;
2188  else return kFALSE;
2189  }
2190  }
2191  else if (fModCentralityClass ==4){
2192  if(mcEvent){
2193  // setting specific arry for LHC11h for MC track mult
2195  if(nprimaryTracks > PrimaryTracksLHC11h5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC11h5a[fCentralityMin][column])
2196  return kTRUE;
2197  else return kFALSE;
2198  // setting specific arry for LHC15o for MC track mult
2200  if(nprimaryTracks > PrimaryTracksLHC15o5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC15o5a[fCentralityMin][column])
2201  return kTRUE;
2202  else return kFALSE;
2203  // setting specific arry for LHC10h for MC track mult
2204  } else {
2205  if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
2206  return kTRUE;
2207  else return kFALSE;
2208  }
2209  }
2210  else{
2211  centralityC= Int_t(centrality);
2212  if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
2213  return kTRUE;
2214  } else return kFALSE;
2215  }
2216  }
2217  else if (fModCentralityClass ==5){
2218  if(mcEvent){
2219  // setting specific arry for LHC11h for MC track mult
2221  if(nprimaryTracks > PrimaryTracksLHC11h5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC11h5b[fCentralityMin][column])
2222  return kTRUE;
2223  else return kFALSE;
2224  // setting specific arry for LHC15o for MC track mult
2226  if(nprimaryTracks > PrimaryTracksLHC15o5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracksLHC15o5b[fCentralityMin][column])
2227  return kTRUE;
2228  else return kFALSE;
2229  // setting specific arry for LHC10h for MC track mult
2230  } else {
2231  if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
2232  return kTRUE;
2233  else return kFALSE;
2234  }
2235  }
2236  else{
2237  centralityC= Int_t(centrality);
2238  if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
2239  return kTRUE;
2240  else return kFALSE;
2241  }
2242  }
2243 
2244  return kFALSE;
2245 }
2246 
2247 //________________________________________________________________________
2249  // Cut on z position of primary vertex
2250  Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
2251  Double_t fVertexZSPD = 0;
2252  AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
2253  if(fESDEvent){
2254  fVertexZSPD = fESDEvent->GetPrimaryVertexSPD()->GetZ();
2255  }
2256  AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
2257  if(fAODEvent){
2258  fVertexZSPD = fAODEvent->GetPrimaryVertexSPD()->GetZ();
2259  }
2260 
2261  if(TMath::Abs(fVertexZ)>fMaxVertexZ)return kFALSE;
2262 
2263 
2264  if (fPeriodEnum == kLHC11h){
2265  if (TMath::Abs(fVertexZ-fVertexZSPD) > 0.1) return kFALSE;
2266  }
2267  if (fIsHeavyIon == 2){
2268  if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
2269  }
2270 
2271  return kTRUE;
2272 }
2273 
2274 //________________________________________________________________________
2276 {
2278  return kFALSE;
2279  TBits fIR1 = event->GetHeader()->GetIRInt1InteractionMap(); // IR1 contains V0 information (VIR)
2280  TBits fIR2 = event->GetHeader()->GetIRInt2InteractionMap(); // IR2 contains T0 information
2281  UShort_t bunchCrossings = event->GetBunchCrossNumber();
2283  for(Int_t i = 0; i<180;i++){
2284  if(fIR1.TestBitNumber(i))
2285  fHistoPastFutureBits->Fill((i*25)-90*25);
2286  }
2287  }
2288 
2289  Bool_t isOutOfBunchPileup = 0;
2290  Int_t pf1 = fPastFutureRejectionLow +bunchCrossings%4;
2291  Int_t pf2 = fPastFutureRejectionHigh+bunchCrossings%4;
2292  if(pf1 < -89) pf1 = -89;
2293  if(pf2 > 89) pf2 = 89;
2294  Int_t pf2maxForT0 = pf2;
2295  Int_t ir1skip = 0;
2296  for (Int_t i=pf1;i<=pf2;i++) {
2297  if (i==0) continue;
2298  if (i<=pf2maxForT0) isOutOfBunchPileup|=fIR2.TestBitNumber(90+i); // T0-based clean-up
2299  if (i>0 && i<=ir1skip) continue; // skip next 2 for old IR definitions
2300  isOutOfBunchPileup|=fIR1.TestBitNumber(90+i); // V0-based clean-up
2301  }
2302  return isOutOfBunchPileup;
2303 }
2304 //________________________________________________________________________
2305 
2307 {
2308  Bool_t isPileUpV0MTPCout=0;
2309 
2310  Double_t multV0M;
2311  Double_t valFunc;
2312  if (fIsHeavyIon==2){
2313  multV0M = event->GetVZEROData()->GetMTotV0A();
2314  }else{
2315  multV0M = event->GetVZEROData()->GetMTotV0A() + event->GetVZEROData()->GetMTotV0C() ;
2316  }
2317 
2318  if ( fFPileUpRejectV0MTPCout != 0x0 ){
2319  valFunc= fFPileUpRejectV0MTPCout->Eval(((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfTPCoutTracks());
2320  if (multV0M < valFunc ) isPileUpV0MTPCout=1;
2321  }
2322 
2323  return isPileUpV0MTPCout;
2324 
2325 }
2326 //________________________________________________________________________
2328  // returns number of contributors to the vertex
2329 
2330  AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
2331  if(fESDEvent){
2332  if (fESDEvent->GetPrimaryVertex() != NULL){
2333  if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
2334  // cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
2335  return fESDEvent->GetPrimaryVertex()->GetNContributors();
2336  }
2337  }
2338 
2339  if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
2340  if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
2341  // cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
2342  return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
2343  }else {
2344  AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
2345  // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
2346  return 0;
2347  }
2348  }
2349  }
2350 
2351  AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
2352  if(fAODEvent){
2353  if (fAODEvent->GetPrimaryVertex() != NULL){
2354  if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
2355  return fAODEvent->GetPrimaryVertex()->GetNContributors();
2356  }
2357  }
2358  if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
2359  if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
2360  return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
2361  } else {
2362  AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
2363  return 0;
2364  }
2365  }
2366  }
2367  // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
2368  return 0;
2369 }
2370 
2371 //________________________________________________________________________
2372 // Analysing Jet-Jet MC's
2373 //________________________________________________________________________
2375  AliGenCocktailEventHeader *cHeader = 0x0;
2376  Bool_t headerFound = kFALSE;
2377  weight = -1;
2378  fMaxPtJetMC = 0;
2379 
2380  if ( fPeriodEnum != kLHC17g8a && // LHC16qt pPb 5TeV JetJet MC's
2381  fPeriodEnum != kLHC17g8b && fPeriodEnum != kLHC17g8c && // LHC16sr pPb 8TeV JetJet MC's
2382  fPeriodEnum != kLHC16P1JJ && fPeriodEnum != kLHC16P1JJLowB && // LHC16X Jet Jet MC's
2383  fPeriodEnum != kLHC16h3 && // LHC15n Jet Jet MC's
2384  fPeriodEnum != kLHC15a3a && fPeriodEnum != kLHC15a3a_plus && fPeriodEnum != kLHC15a3b && // LHC13g Jet Jet MC's
2385  fPeriodEnum != kLHC15g1a && fPeriodEnum != kLHC15g1b && // LHC11a Jet Jet MC's
2386  fPeriodEnum != kLHC13b4_fix && fPeriodEnum != kLHC13b4_plus && // LHC13 pPb Jet Jet MC's
2387  fPeriodEnum != kLHC16c3a && fPeriodEnum != kLHC16c3b && fPeriodEnum != kLHC16c3c && // LHC13 pPb Jet Jet MC's
2388  fPeriodEnum != kLHC16c2 && fPeriodEnum != kLHC16c2_plus // LHC12 JetJet MC
2389  ){
2390 
2391  weight = 1;
2392  return kTRUE;
2393  }
2394 
2395  if(mcEvent){
2396  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(mcEvent->GenEventHeader());
2397  if(cHeader) headerFound = kTRUE;
2398  }else{
2399  //no mcEvent available -> not running on MC
2400  weight = 1;
2401  return kTRUE;
2402  }
2403 
2404  if(headerFound){
2405  TList *genHeaders = 0x0;
2406  if(cHeader) genHeaders = cHeader->GetHeaders();
2407  AliGenEventHeader* gh = 0;
2408  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
2409  gh = (AliGenEventHeader*)genHeaders->At(i);
2410  TString GeneratorName = gh->GetName();
2411  if (GeneratorName.CompareTo("AliGenPythiaEventHeader") == 0 || GeneratorName.Contains("Pythia8Jets")){
2412  Bool_t eventAccepted = kTRUE;
2413  TParticle * jet = 0;
2414  Int_t nTriggerJets = dynamic_cast<AliGenPythiaEventHeader*>(gh)->NTriggerJets();
2415  Float_t ptHard = dynamic_cast<AliGenPythiaEventHeader*>(gh)->GetPtHard();
2416  Float_t tmpjet[]={0,0,0,0};
2417  for(Int_t ijet = 0; ijet< nTriggerJets; ijet++){
2418  dynamic_cast<AliGenPythiaEventHeader*>(gh)->TriggerJet(ijet, tmpjet);
2419  jet = new TParticle(94, 21, -1, -1, -1, -1, tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3], 0,0,0,0);
2420  //Compare jet pT and pt Hard
2421  if(jet->Pt() > fMaxFacPtHard * ptHard){
2422  eventAccepted= kFALSE;
2423  }
2424  if (jet->Pt() > fMaxPtJetMC) fMaxPtJetMC = jet->Pt();
2425  }
2426  if (jet) delete jet;
2427  if (mcEvent){
2428  for(Long_t i = 0; i < mcEvent->GetNumberOfPrimaries(); i++) {
2429  TParticle* particle = (TParticle *)mcEvent->Particle(i);
2430  if (!particle) continue;
2431  if (TMath::Abs(particle->GetPdgCode()) == 111 || TMath::Abs(particle->GetPdgCode()) == 221){
2432  if (particle->Pt() > fMaxFacPtHardSingleParticle*ptHard){
2433  eventAccepted= kFALSE;
2434  }
2435  }
2436 
2437  }
2438  }
2439 
2440  if ( fPeriodEnum == kLHC16P1JJLowB) {
2441  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2442  21, 28, 36, 45, 57,
2443  70, 85, 99, 115, 132,
2444  150, 169, 190, 212, 235,
2445  1000000};
2446  Double_t weightsBins[20] = { 43.7553, 13.5848, 6.788, 2.67826, 0.975255,
2447  0.39069, 0.127342, 0.0465597, 0.0206539, 0.00750243,
2448  0.00319118, 0.00122291, 0.000641232, 0.000321437, 0.000168273,
2449  9.17033e-05, 5.34755e-05, 3.01354e-05, 1.74518e-05, 2.8004e-05};
2450  Int_t bin = 0;
2451  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2452  if (bin < 20) weight = weightsBins[bin];
2453 
2454  } else if ( fPeriodEnum == kLHC16P1JJ ){
2455  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2456  21, 28, 36, 45, 57,
2457  70, 85, 99, 115, 132,
2458  150, 169, 190, 212, 235,
2459  1000000};
2460  Double_t weightsBins[20] = { 43.8654, 13.6215, 6.79856, 2.67526, 0.978794,
2461  0.390797, 0.127769, 0.0465714, 0.0206173, 0.00750282,
2462  0.00318773, 0.00122533, 0.000644385, 0.000321225, 0.00016846,
2463  9.18305e-05, 5.33507e-05, 3.00677e-05, 1.74608e-05, 2.80823e-05};
2464 
2465  Int_t bin = 0;
2466  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2467  if (bin < 20) weight = weightsBins[bin];
2468 
2469  } else if ( fPeriodEnum == kLHC16h3 ){
2470  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2471  21, 28, 36, 45, 57,
2472  70, 85, 99, 115, 132,
2473  150, 169, 190, 212, 235,
2474  1000000};
2475  Double_t weightsBins[20] = { 16.0869, 4.61169, 2.14976, 0.782544, 0.264854,
2476  9.7619E-02, 2.92747E-02, 9.89515E-03, 4.05152E-03, 1.35393E-03,
2477  5.29864E-04, 1.88317E-04, 9.23E-05, 4.29E-05, 2.09E-05,
2478  1.06E-05, 5.76E-06, 3.00E-06, 1.62E-06, 2.10E-06 };
2479  Int_t bin = 0;
2480  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2481  if (bin < 20) weight = weightsBins[bin];
2482 
2483 
2484  } else if ( fPeriodEnum == kLHC15a3b || fPeriodEnum == kLHC15g1b ){
2485  Double_t ptHardBinRanges[13] = { 5, 7, 9, 12, 16,
2486  21, 28, 36, 45, 57,
2487  70, 85, 1000};
2488  Double_t weightsBins[12] = { 7.858393e-03, 4.718691e-03, 4.077575e-03, 2.814527e-03, 1.669625e-03,
2489  1.007535e-03, 4.536554e-04, 2.111041e-04, 1.094840e-04, 4.404973e-05,
2490  1.933238e-05, 1.562895e-05};
2491  Int_t bin = 0;
2492  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2493  if (bin < 12) weight = weightsBins[bin];
2494 
2495  } else if ( fPeriodEnum == kLHC15g1a ){
2496  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2497  84, 117, 152, 191, 1000000,
2498  5, 7, 9, 12, 16,
2499  21, 28, 36, 45, 57 };
2500  Double_t weightsBins[19] = { 4.43629 , 0.49523, 0.0394921, 0.00383174, 0.000446559,
2501  6.37374e-05, 1.03134e-05, 2.27012e-06, 7.59281e-07, 0,
2502  2.62906, 1.12884, 0.656873, 0.262822, 0.0876732,
2503  0.0307759, 0.0087083, 0.0027664, 0.00106203};
2504 
2505  Int_t bin = 0;
2506  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2507  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2508  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2509  if (bin < 19) weight = weightsBins[bin];
2510 
2511  } else if ( fPeriodEnum == kLHC15a3a || fPeriodEnum == kLHC15a3a_plus ) {
2512  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2513  84, 117, 152, 191, 1000000,
2514  5, 7, 9, 12, 16,
2515  21, 28, 36, 45, 57 };
2516  // LHC15a3a
2517  Double_t weightsBins[19] = { 4.43897 , 0.495766, 0.039486, 0.00383011, 0.000447104,
2518  6.37277e-05, 1.03166e-05, 2.26971e-06, 7.59023e-07, 0,
2519  2.63331, 1.12815, 0.657034, 0.262756, 0.0877227,
2520  0.0307638, 0.00870635, 0.00276658, 0.00106229};
2521  Int_t bin = 0;
2522  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2523  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2524  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2525  if (bin < 19) weight = weightsBins[bin];
2526 
2527  } else if ( fPeriodEnum == kLHC16c2 || fPeriodEnum == kLHC16c2_plus ){
2528  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2529  21, 28, 36, 45, 57,
2530  70, 85, 99, 115, 132,
2531  150, 169, 190, 212, 235,
2532  1000000};
2533  Double_t weightsBins[20] = { 28.3084, 8.43277, 4.07753, 1.54359, 0.543318,
2534  0.208394, 0.0652349, 0.0186904, 0.00834528, 0.00301414,
2535  0.00125939, 0.000474403, 0.000244052, 0.00011924, 6.09838e-05,
2536  3.24148e-05, 1.84314e-05, 1.00926e-05, 5.68632e-06, 8.38092e-06};
2537  Int_t bin = 0;
2538  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2539  if (bin < 20) weight = weightsBins[bin];
2540 
2541  } else if ( fPeriodEnum == kLHC16c3a ){
2542  Double_t ptHardBinRanges[6] = { 7, 9, 12, 16, 21, 1000};
2543  Double_t weightsBins[5] = { 0.00672445, 0.00799158, 0.00678934, 0.00463908, 0.00600068}; //preliminary estimates
2544  Int_t bin = 0;
2545  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2546  if (bin < 5) weight = weightsBins[bin];
2547 
2548  } else if (fPeriodEnum == kLHC16c3b ){
2549  Double_t ptHardBinRanges[7] = { 14, 19, 26, 35, 48, 66, 1000};
2550  Double_t weightsBins[6] = { 0.00608281, 0.00393646, 0.00200138, 0.000986267, 0.000389051, 0.0001863}; //preliminary estimates
2551  Int_t bin = 0;
2552  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2553  if (bin < 6) weight = weightsBins[bin];
2554 
2555  } else if (fPeriodEnum == kLHC16c3c ){
2556  Double_t ptHardBinRanges[8] = { 0, 5, 11, 21, 36, 57, 84, 1000};
2557  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
2558  Int_t bin = 0;
2559  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2560  if (bin < 7) weight = weightsBins[bin];
2561 
2562  } else if ( fPeriodEnum == kLHC13b4_fix || fPeriodEnum == kLHC13b4_plus ){
2563  Double_t ptHardBinRanges[11] = { 5, 11, 21, 36, 57,
2564  84, 117, 152, 191, 234,
2565  1000};
2566  Double_t weightsBins[10] = { 2.24185e-6 , 2.48463e-7, 2.23171e-8, 2.43667e-9, 3.29934e-10,
2567  5.34592e-11, 1.00937e-11, 2.6493e-12, 8.53912e-13, 5.43077e-13};
2568  Int_t bin = 0;
2569  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2570  if (bin < 10) weight = weightsBins[bin];
2571 
2572  } else if ( fPeriodEnum == kLHC17g8b ){ // preliminary weights obtained from local running
2573  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16, 21, 28, 36, 45, 57, 70, 85, 99, 115, 132, 150, 169, 190, 212, 235, 10000};
2574  Double_t weightsBins[20] = {2.648510E+01, 7.963350E+00, 3.926460E+00, 1.535630E+00, 5.125940E-01, 1.982910E-01, 6.705810E-02, 2.214220E-02, 9.872830E-03, 3.460430E-03, 1.426840E-03, 5.212990E-04, 2.534030E-04, 1.157210E-04, 6.609650E-05, 3.424850E-05, 1.833500E-05, 1.022650E-05, 5.878600E-06, 8.550350E-06};
2575  Int_t bin = 0;
2576  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2577  if (bin < 20) weight = weightsBins[bin];
2578  } else if ( fPeriodEnum == kLHC17g8c ){ // preliminary weights obtained from local running
2579  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16, 21, 28, 36, 45, 57, 70, 85, 99, 115, 132, 150, 169, 190, 212, 235, 10000};
2580  Double_t weightsBins[20] = {2.638850E+01, 8.160880E+00, 3.937510E+00, 1.485000E+00, 5.382460E-01, 2.034610E-01, 6.293600E-02, 2.206170E-02, 9.319700E-03, 3.354230E-03, 1.392300E-03, 5.023470E-04, 2.645860E-04, 1.299660E-04, 6.415310E-05, 3.469890E-05, 1.816550E-05, 1.047480E-05, 5.728760E-06, 8.547820E-06};
2581  Int_t bin = 0;
2582  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2583  if (bin < 20) weight = weightsBins[bin];
2584 
2585  } else {
2586  weight = 1;
2587  }
2588 
2589  if (weight == -1) return kFALSE;
2590  else return eventAccepted;
2591 
2592  }
2593  }
2594  } else {
2595  AliGenEventHeader * eventHeader = mcEvent->GenEventHeader();
2596  TString eventHeaderName = eventHeader->ClassName();
2597  if (eventHeaderName.CompareTo("AliGenPythiaEventHeader") == 0 || eventHeaderName.Contains("Pythia8Jets")){
2598  Bool_t eventAccepted = kTRUE;
2599  TParticle * jet = 0;
2600  Int_t nTriggerJets = dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->NTriggerJets();
2601  Float_t ptHard = dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->GetPtHard();
2602  Float_t tmpjet[]={0,0,0,0};
2603  for(Int_t ijet = 0; ijet< nTriggerJets; ijet++){
2604  dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->TriggerJet(ijet, tmpjet);
2605  jet = new TParticle(94, 21, -1, -1, -1, -1, tmpjet[0],tmpjet[1],tmpjet[2],tmpjet[3], 0,0,0,0);
2606  //Compare jet pT and pt Hard
2607  if(jet->Pt() > fMaxFacPtHard * ptHard){
2608  eventAccepted= kFALSE;
2609  }
2610  if (jet->Pt() > fMaxPtJetMC) fMaxPtJetMC = jet->Pt();
2611  }
2612  if (mcEvent){
2613  for(Long_t i = 0; i < mcEvent->GetNumberOfPrimaries(); i++) {
2614  TParticle* particle = (TParticle *)mcEvent->Particle(i);
2615  if (!particle) continue;
2616  if (TMath::Abs(particle->GetPdgCode()) == 111 || TMath::Abs(particle->GetPdgCode()) == 221){
2617  if (particle->Pt() > fMaxFacPtHardSingleParticle*ptHard){
2618  eventAccepted= kFALSE;
2619  }
2620  }
2621 
2622  }
2623  }
2624 
2625  if ( fPeriodEnum == kLHC16P1JJLowB) {
2626  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2627  21, 28, 36, 45, 57,
2628  70, 85, 99, 115, 132,
2629  150, 169, 190, 212, 235,
2630  1000000};
2631  Double_t weightsBins[20] = { 43.7553, 13.5848, 6.788, 2.67826, 0.975255,
2632  0.39069, 0.127342, 0.0465597, 0.0206539, 0.00750243,
2633  0.00319118, 0.00122291, 0.000641232, 0.000321437, 0.000168273,
2634  9.17033e-05, 5.34755e-05, 3.01354e-05, 1.74518e-05, 2.8004e-05};
2635  Int_t bin = 0;
2636  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2637  if (bin < 20) weight = weightsBins[bin];
2638 
2639  } else if ( fPeriodEnum == kLHC16P1JJ ){
2640  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2641  21, 28, 36, 45, 57,
2642  70, 85, 99, 115, 132,
2643  150, 169, 190, 212, 235,
2644  1000000};
2645  Double_t weightsBins[20] = { 43.8654, 13.6215, 6.79856, 2.67526, 0.978794,
2646  0.390797, 0.127769, 0.0465714, 0.0206173, 0.00750282,
2647  0.00318773, 0.00122533, 0.000644385, 0.000321225, 0.00016846,
2648  9.18305e-05, 5.33507e-05, 3.00677e-05, 1.74608e-05, 2.80823e-05};
2649 
2650  Int_t bin = 0;
2651  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2652  if (bin < 20) weight = weightsBins[bin];
2653 
2654  } else if ( fPeriodEnum == kLHC16h3 ){
2655  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2656  21, 28, 36, 45, 57,
2657  70, 85, 99, 115, 132,
2658  150, 169, 190, 212, 235,
2659  1000000};
2660  Double_t weightsBins[20] = { 16.0869, 4.61169, 2.14976, 0.782544, 0.264854,
2661  9.7619E-02, 2.92747E-02, 9.89515E-03, 4.05152E-03, 1.35393E-03,
2662  5.29864E-04, 1.88317E-04, 9.23E-05, 4.29E-05, 2.09E-05,
2663  1.06E-05, 5.76E-06, 3.00E-06, 1.62E-06, 2.10E-06 };
2664  Int_t bin = 0;
2665  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2666  if (bin < 20) weight = weightsBins[bin];
2667 
2668 
2669  } else if ( fPeriodEnum == kLHC15a3b || fPeriodEnum == kLHC15g1b ){
2670  Double_t ptHardBinRanges[13] = { 5, 7, 9, 12, 16,
2671  21, 28, 36, 45, 57,
2672  70, 85, 1000};
2673  Double_t weightsBins[12] = { 7.858393e-03, 4.718691e-03, 4.077575e-03, 2.814527e-03, 1.669625e-03,
2674  1.007535e-03, 4.536554e-04, 2.111041e-04, 1.094840e-04, 4.404973e-05,
2675  1.933238e-05, 1.562895e-05};
2676  Int_t bin = 0;
2677  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2678  if (bin < 12) weight = weightsBins[bin];
2679 
2680  } else if ( fPeriodEnum == kLHC15g1a ){
2681  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2682  84, 117, 152, 191, 1000000,
2683  5, 7, 9, 12, 16,
2684  21, 28, 36, 45, 57 };
2685  Double_t weightsBins[19] = { 4.43629 , 0.49523, 0.0394921, 0.00383174, 0.000446559,
2686  6.37374e-05, 1.03134e-05, 2.27012e-06, 7.59281e-07, 0,
2687  2.62906, 1.12884, 0.656873, 0.262822, 0.0876732,
2688  0.0307759, 0.0087083, 0.0027664, 0.00106203};
2689 
2690  Int_t bin = 0;
2691  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2692  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2693  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2694  if (bin < 19) weight = weightsBins[bin];
2695 
2696  } else if ( fPeriodEnum == kLHC15a3a || fPeriodEnum == kLHC15a3a_plus ) {
2697  Double_t ptHardBinRanges[20] = { 5, 11, 21, 36, 57,
2698  84, 117, 152, 191, 1000000,
2699  5, 7, 9, 12, 16,
2700  21, 28, 36, 45, 57 };
2701  // LHC15a3a
2702  Double_t weightsBins[19] = { 4.43897 , 0.495766, 0.039486, 0.00383011, 0.000447104,
2703  6.37277e-05, 1.03166e-05, 2.26971e-06, 7.59023e-07, 0,
2704  2.63331, 1.12815, 0.657034, 0.262756, 0.0877227,
2705  0.0307638, 0.00870635, 0.00276658, 0.00106229};
2706  Int_t bin = 0;
2707  Int_t binFromFile = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPtHardFromFile();
2708  if (binFromFile != -1 && binFromFile >9 && ptHard < 57) bin = 9;
2709  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2710  if (bin < 19) weight = weightsBins[bin];
2711 
2712  } else if ( fPeriodEnum == kLHC16c2 || fPeriodEnum == kLHC16c2_plus ){
2713  Double_t ptHardBinRanges[21] = { 5, 7, 9, 12, 16,
2714  21, 28, 36, 45, 57,
2715  70, 85, 99, 115, 132,
2716  150, 169, 190, 212, 235,
2717  1000000};
2718  Double_t weightsBins[20] = { 28.3084, 8.43277, 4.07753, 1.54359, 0.543318,
2719  0.208394, 0.0652349, 0.0186904, 0.00834528, 0.00301414,
2720  0.00125939, 0.000474403, 0.000244052, 0.00011924, 6.09838e-05,
2721  3.24148e-05, 1.84314e-05, 1.00926e-05, 5.68632e-06, 8.38092e-06};
2722  Int_t bin = 0;
2723  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2724  if (bin < 20) weight = weightsBins[bin];
2725 
2726  } else if ( fPeriodEnum == kLHC16c3a ){
2727  Double_t ptHardBinRanges[6] = { 7, 9, 12, 16, 21, 1000};
2728  Double_t weightsBins[5] = { 0.00672445, 0.00799158, 0.00678934, 0.00463908, 0.00600068}; //preliminary estimates
2729  Int_t bin = 0;
2730  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2731  if (bin < 5) weight = weightsBins[bin];
2732 
2733  } else if (fPeriodEnum == kLHC16c3b ){
2734  Double_t ptHardBinRanges[7] = { 14, 19, 26, 35, 48, 66, 1000};
2735  Double_t weightsBins[6] = { 0.00608281, 0.00393646, 0.00200138, 0.000986267, 0.000389051, 0.0001863}; //preliminary estimates
2736  Int_t bin = 0;
2737  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2738  if (bin < 6) weight = weightsBins[bin];
2739 
2740  } else if (fPeriodEnum == kLHC16c3c ){
2741  Double_t ptHardBinRanges[8] = { 0, 5, 11, 21, 36, 57, 84, 1000};
2742  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
2743  Int_t bin = 0;
2744  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2745  if (bin < 7) weight = weightsBins[bin];
2746 
2747  } else if ( fPeriodEnum == kLHC13b4_fix || fPeriodEnum == kLHC13b4_plus ){
2748  Double_t ptHardBinRanges[11] = { 5, 11, 21, 36, 57,
2749  84, 117, 152, 191, 234,
2750  1000};
2751  Double_t weightsBins[10] = { 2.24185e-6 , 2.48463e-7, 2.23171e-8, 2.43667e-9, 3.29934e-10,
2752  5.34592e-11, 1.00937e-11, 2.6493e-12, 8.53912e-13, 5.43077e-13};
2753  Int_t bin = 0;
2754  while (!((ptHard< ptHardBinRanges[bin+1] && ptHard > ptHardBinRanges[bin]) || (ptHard == ptHardBinRanges[bin]) ) )bin++;
2755  if (bin < 10) weight = weightsBins[bin];
2756  } else {
2757  weight = 1;
2758  }
2759 
2760  if (weight == -1) return kFALSE;
2761  else return eventAccepted;
2762 
2763  } else {
2764  return kFALSE;
2765  }
2766  }
2767 
2768  return kFALSE;
2769 }
2770 
2771 //________________________________________________________________________
2772 // Analysing Jet-Jet MC's
2773 //________________________________________________________________________
2774 void AliConvEventCuts::GetXSectionAndNTrials(AliMCEvent *mcEvent, Float_t &XSection, Float_t &NTrials){
2775 
2776  AliGenCocktailEventHeader *cHeader = 0x0;
2777  Bool_t headerFound = kFALSE;
2778 
2779  if ( fPeriodEnum != kLHC17g8a && // LHC16qt pPb 5TeV JetJet MC's
2780  fPeriodEnum != kLHC17g8b && fPeriodEnum != kLHC17g8c && // LHC16sr pPb 8TeV JetJet MC's
2781  fPeriodEnum != kLHC16P1JJ && fPeriodEnum != kLHC16P1JJLowB && // LHC16X Jet Jet MC's
2782  fPeriodEnum != kLHC16h3 && // LHC15n Jet Jet MC's
2783  fPeriodEnum != kLHC15a3a && fPeriodEnum != kLHC15a3a_plus && fPeriodEnum != kLHC15a3b && // LHC13g Jet Jet MC's
2784  fPeriodEnum != kLHC15g1a && fPeriodEnum != kLHC15g1b && // LHC11a Jet Jet MC's
2785  fPeriodEnum != kLHC13b4_fix && fPeriodEnum != kLHC13b4_plus && // LHC13 pPb Jet Jet MC's
2786  fPeriodEnum != kLHC16c3a && fPeriodEnum != kLHC16c3b && fPeriodEnum != kLHC16c3c && // LHC13 pPb Jet Jet MC's
2787  fPeriodEnum != kLHC16c2 && fPeriodEnum != kLHC16c2_plus // LHC12 JetJet MC
2788  ){
2789  NTrials = -1;
2790  XSection = -1;
2791  return;
2792  }
2793 
2794  if(mcEvent){
2795  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(mcEvent->GenEventHeader());
2796  if(cHeader) headerFound = kTRUE;
2797  }else{
2798  //no mcEvent available -> not running on MC
2799  NTrials = -1;
2800  XSection = -1;
2801  return;
2802  }
2803 
2804  if(headerFound){
2805  TList *genHeaders = 0x0;
2806  if(cHeader) genHeaders = cHeader->GetHeaders();
2807  AliGenEventHeader* gh = 0;
2808  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
2809  gh = (AliGenEventHeader*)genHeaders->At(i);
2810  TString GeneratorName = gh->GetName();
2811  if (GeneratorName.CompareTo("AliGenPythiaEventHeader") == 0 || GeneratorName.Contains("Pythia8Jets")){
2812  AliGenPythiaEventHeader* gPythia = dynamic_cast<AliGenPythiaEventHeader*>(gh);
2813  NTrials = gPythia->Trials();
2814  XSection = gPythia->GetXsection();
2815  return;
2816  }
2817  }
2818  } else {
2819  AliGenEventHeader * eventHeader = mcEvent->GenEventHeader();
2820  if(eventHeader){
2821  TString eventHeaderName = eventHeader->ClassName();
2822  if (eventHeaderName.CompareTo("AliGenPythiaEventHeader") == 0 || eventHeaderName.Contains("Pythia8Jets")){
2823  AliGenPythiaEventHeader* gPythia = dynamic_cast<AliGenPythiaEventHeader*>(eventHeader);
2824  NTrials = gPythia->Trials();
2825  XSection = gPythia->GetXsection();
2826  return;
2827  }
2828  }
2829  }
2830 
2831  NTrials = -1;
2832  XSection = -1;
2833  return;
2834 }
2835 
2836 
2837 //________________________________________________________________________
2838 // Analysing Jet-Jet MC's
2839 //________________________________________________________________________
2841  AliGenCocktailEventHeader *cHeader = 0x0;
2842  Bool_t headerFound = kFALSE;
2843 
2844  if ( fPeriodEnum != kLHC17g8a && // LHC16qt pPb 5TeV JetJet MC's
2845  fPeriodEnum != kLHC17g8b && fPeriodEnum != kLHC17g8c && // LHC16sr pPb 8TeV JetJet MC's
2846  fPeriodEnum != kLHC16P1JJ && fPeriodEnum != kLHC16P1JJLowB && // LHC16X Jet Jet MC's
2847  fPeriodEnum != kLHC16h3 && // LHC15n Jet Jet MC's
2848  fPeriodEnum != kLHC15a3a && fPeriodEnum != kLHC15a3a_plus && fPeriodEnum != kLHC15a3b && // LHC13g Jet Jet MC's
2849  fPeriodEnum != kLHC15g1a && fPeriodEnum != kLHC15g1b && // LHC11a Jet Jet MC's
2850  fPeriodEnum != kLHC13b4_fix && fPeriodEnum != kLHC13b4_plus && // LHC13 pPb Jet Jet MC's
2851  fPeriodEnum != kLHC16c3a && fPeriodEnum != kLHC16c3b && fPeriodEnum != kLHC16c3c && // LHC13 pPb Jet Jet MC's
2852  fPeriodEnum != kLHC16c2 && fPeriodEnum != kLHC16c2_plus // LHC12 JetJet MC
2853  ) return -1;
2854 
2855  if(mcEvent){
2856  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(mcEvent->GenEventHeader());
2857  if(cHeader) headerFound = kTRUE;
2858  }else{
2859  //no mcEvent available -> not running on MC
2860  return -1;
2861  }
2862 
2863  if(headerFound){
2864  TList *genHeaders = 0x0;
2865  if(cHeader) genHeaders = cHeader->GetHeaders();
2866  AliGenEventHeader* gh = 0;
2867  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
2868  gh = (AliGenEventHeader*)genHeaders->At(i);
2869  TString GeneratorName = gh->GetName();
2870  if (GeneratorName.CompareTo("AliGenPythiaEventHeader") == 0 || GeneratorName.Contains("Pythia8Jets")){
2871  return dynamic_cast<AliGenPythiaEventHeader*>(gh)->GetPtHard();
2872  }
2873  }
2874  } else {
2875  AliGenEventHeader * eventHeader = mcEvent->GenEventHeader();
2876  if(eventHeader){
2877  TString eventHeaderName = eventHeader->ClassName();
2878  if (eventHeaderName.CompareTo("AliGenPythiaEventHeader") == 0 || eventHeaderName.Contains("Pythia8Jets")){
2879  return dynamic_cast<AliGenPythiaEventHeader*>(eventHeader)->GetPtHard();
2880  }
2881  }
2882  }
2883 
2884  return -1;
2885 }
2886 
2887 
2888 //________________________________________________________________________
2890  // abort if mimicing not enabled
2891 
2892  if (!fMimicTrigger) return kTRUE;
2893 
2894  Int_t runRangesEMCalL0 [35] = { 144871, 145288, 146375, 146382, // LHC11a
2895  146502, 148522, // LHC11a
2896  150209, 153056, 153911, 153915, // LHC11b,c,d
2897  158135, 158136, 158178, 158182, 160683,
2898  160764, 161139, 161256, 161379, 161457,
2899  161525, 161556, 161558, 161609, 161630,
2900  161724, // LHC11d,e
2901  173731, 177144, 177147, 177653, 177724, 178327,
2902  195180, // LHC13b-f
2903  197469, 197692 // LHC13g
2904  };
2905 
2906  Double_t thresholdEMCalL0[34] = { 2.11, 3.43, 1.71, 2.05, // LHC11a 7 TeV
2907  3.43, // LHC11a 2.76TeV
2908  1.94, 3.39, 4.01, 5.25, 5.5, // LHC11b, LHC11c, LHC11d
2909  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,
2910  2.01, 1.75, 1.52, 2.01, 1.52, 1.85,
2911  3.2,
2912  /*2.01*/1.8
2913  };
2914  Double_t spreadEMCalL0[34] = { 0., 0., 0, 0, // LHC11a 7TeV
2915  /*0.7*/0.65, // LHC11a 2.76TeV
2916  0., 0., 0., 0., 0., // LHC11b, LHC11c, LHC11d
2917  0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
2918  0., 0., 0., 0., 0.2, 0.2,/*0.,0.,*/
2919  0.1,
2920  /*0.1*/0.12
2921  };
2922 
2923  Int_t runRangesEMCalL1[4] = { 179796, // LHC12c-i
2924  195180, // LHC13b-f
2925  197469, 197692 // LHC13g
2926  };
2927 
2928  Double_t thresholdEMCalL1[3] = { 9.5/*8.398*/, 11.5, /*6.*/5.5};
2929  Double_t spreadEMCalL1[3] = { 1.0/*0.*/, 0.5, /*0.4*/0.6};
2930 
2931  Int_t runRangesEMCalL1G2[3] = { 195180, // LHC13b-f
2932  197469, 197692 // LHC13g
2933  };
2934 
2935  Double_t thresholdEMCalL1G2[2] = { 7.2, /*3.9*/3.75};
2936  Double_t spreadEMCalL1G2[2] = { 0.3, /*0.2*/0.25};
2937 
2938  Int_t runnumber = event->GetRunNumber();
2939 
2940  if (fSpecialTrigger == 5 ){
2941  if (runnumber < runRangesEMCalL0[0]) return kTRUE;
2942  Int_t binRun = 0;
2943  while (!(runnumber >= runRangesEMCalL0[binRun] && runnumber < runRangesEMCalL0[binRun+1] ) && binRun < 34 ){
2944 // cout << runnumber << "\t" << binRun << "\t" << runRangesEMCalL0[binRun] << "\t" << runRangesEMCalL0[binRun+1] << endl;
2945  binRun++;
2946  }
2947  if (binRun==34) return kFALSE;
2948  Double_t threshold = thresholdEMCalL0[binRun];
2949 
2950  if (isMC && spreadEMCalL0[binRun] != 0.){
2951  TF1* triggerSmearing = new TF1("triggerSmearing","[0]*exp(-0.5*((x-[1])/[2])**2)",0,15);
2952  triggerSmearing->SetParameter(0, 1/(spreadEMCalL0[binRun]*TMath::Sqrt(TMath::Pi()*2)));
2953  triggerSmearing->SetParameter(1, thresholdEMCalL0[binRun]);
2954  triggerSmearing->SetParameter(2, spreadEMCalL0[binRun]);
2955  threshold = triggerSmearing->GetRandom();
2956  delete triggerSmearing;
2957  }
2958 
2959 // cout << runnumber << "\t"<< binRun << "\t"<< threshold << endl;
2960 
2961  Int_t nclus = 0;
2962  nclus = event->GetNumberOfCaloClusters();
2963 
2964  if(nclus == 0) return kFALSE;
2965 
2966  // Loop over EMCal clusters
2967  Bool_t eventIsAccepted = kFALSE;
2968  for(Int_t i = 0; i < nclus; i++){
2969  AliVCluster* clus = NULL;
2970  clus = event->GetCaloCluster(i);
2971  if (!clus) continue;
2972  if (!clus->IsEMCAL()) continue;
2973  if (clus->GetM02()<0.1) continue;
2974  if (clus->GetNCells()<2) continue;
2975  if (clus->E() > threshold ){
2976 // cout << "found L0" << endl;
2977  eventIsAccepted = kTRUE;
2978  }
2979  }
2980  return eventIsAccepted;
2981 
2982  } else if (fSpecialTrigger == 6 ) {
2983 
2984  return kTRUE;
2985  } else if (fSpecialTrigger == 8 ) {
2986  if (fSpecialSubTriggerName.CompareTo("7EGA")==0 || fSpecialSubTriggerName.CompareTo("8EGA")==0 || fSpecialSubTriggerName.CompareTo("7EG1")==0 ||fSpecialSubTriggerName.CompareTo("8EG1")==0 ){
2987  if (runnumber < runRangesEMCalL1[0]) return kTRUE;
2988  Int_t binRun = 0;
2989  while (!(runnumber >= runRangesEMCalL1[binRun] && runnumber < runRangesEMCalL1[binRun+1] ) && binRun < 3 ){
2990  // cout << runnumber << "\t" << binRun << "\t" << runRangesEMCalL0[binRun] << "\t" << runRangesEMCalL0[binRun+1] << endl;
2991  binRun++;
2992  }
2993  if (binRun==3) return kFALSE;
2994  Double_t threshold = thresholdEMCalL1[binRun];
2995 
2996  if (isMC && spreadEMCalL1[binRun] != 0.){
2997  TF1* triggerSmearing = new TF1("triggerSmearing","[0]*exp(-0.5*((x-[1])/[2])**2)",0,15);
2998  triggerSmearing->SetParameter(0, 1/(spreadEMCalL1[binRun]*TMath::Sqrt(TMath::Pi()*2)));
2999  triggerSmearing->SetParameter(1, thresholdEMCalL1[binRun]);
3000  triggerSmearing->SetParameter(2, spreadEMCalL1[binRun]);
3001  threshold = triggerSmearing->GetRandom();
3002  delete triggerSmearing;
3003  }
3004 
3005 // cout << runnumber << "\t"<< binRun << "\t L1 \t"<< threshold << endl;
3006 
3007  Int_t nclus = 0;
3008  nclus = event->GetNumberOfCaloClusters();
3009 
3010  if(nclus == 0) return kFALSE;
3011 
3012  // Loop over EMCal clusters
3013  Bool_t eventIsAccepted = kFALSE;
3014  for(Int_t i = 0; i < nclus; i++){
3015  AliVCluster* clus = NULL;
3016  clus = event->GetCaloCluster(i);
3017  if (!clus) continue;
3018  if (!clus->IsEMCAL()) continue;
3019  if (clus->GetM02()<0.1) continue;
3020  if (clus->GetNCells()<2) continue;
3021  if (clus->E() > threshold ){
3022 // cout << "found L1G1" << endl;
3023  eventIsAccepted = kTRUE;
3024  }
3025  }
3026  return eventIsAccepted;
3027  } else if ( fSpecialSubTriggerName.CompareTo("7EG2")==0 ||fSpecialSubTriggerName.CompareTo("8EG2")==0 ){
3028  if (runnumber < runRangesEMCalL1G2[0]) return kTRUE;
3029  Int_t binRun = 0;
3030  while (!(runnumber >= runRangesEMCalL1G2[binRun] && runnumber < runRangesEMCalL1G2[binRun+1] ) && binRun < 2 ){
3031  // cout << runnumber << "\t" << binRun << "\t" << runRangesEMCalL0[binRun] << "\t" << runRangesEMCalL0[binRun+1] << endl;
3032  binRun++;
3033  }
3034  if (binRun==2) return kFALSE;
3035  Double_t threshold = thresholdEMCalL1G2[binRun];
3036  if (isMC && spreadEMCalL1G2[binRun] != 0.){
3037  TF1* triggerSmearing = new TF1("triggerSmearing","[0]*exp(-0.5*((x-[1])/[2])**2)",0,15);
3038  triggerSmearing->SetParameter(0, 1/(spreadEMCalL1G2[binRun]*TMath::Sqrt(TMath::Pi()*2)));
3039  triggerSmearing->SetParameter(1, thresholdEMCalL1G2[binRun]);
3040  triggerSmearing->SetParameter(2, spreadEMCalL1G2[binRun]);
3041  threshold = triggerSmearing->GetRandom();
3042  delete triggerSmearing;
3043  }
3044 // cout << runnumber << "\t"<< binRun << "\t L2 \t"<< threshold << endl;
3045 
3046  Int_t nclus = 0;
3047  nclus = event->GetNumberOfCaloClusters();
3048 
3049  if(nclus == 0) return kFALSE;
3050 
3051  // Loop over EMCal clusters
3052  Bool_t eventIsAccepted = kFALSE;
3053  for(Int_t i = 0; i < nclus; i++){
3054  AliVCluster* clus = NULL;
3055  clus = event->GetCaloCluster(i);
3056  if (!clus) continue;
3057  if (!clus->IsEMCAL()) continue;
3058  if (clus->GetM02()<0.1) continue;
3059  if (clus->GetNCells()<2) continue;
3060  if (clus->E() > threshold ){
3061 // cout << "found L1G2" << endl;
3062  eventIsAccepted = kTRUE;
3063  }
3064  }
3065  return eventIsAccepted;
3066  }
3067  return kTRUE;
3068  } else if (fSpecialTrigger == 9 ) {
3069  return kTRUE;
3070  } else {
3071  return kTRUE;
3072  }
3073 
3074  return kTRUE;
3075 }
3076 
3077 
3078 //________________________________________________________________________
3080 {
3081 
3082  AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
3083 
3084 
3085  UInt_t isSelected = AliVEvent::kAny;
3086 
3087  if (fInputHandler==NULL) return kFALSE;
3088  if( fInputHandler->GetEventSelection() || event->IsA()==AliAODEvent::Class()) {
3089 
3090  TString firedTrigClass = event->GetFiredTriggerClasses();
3091  // if no trigger has been selected manually, select kAny in case of presel (also important for AOD filtering!)
3092  // in other cases select standards depending on system
3094  if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
3095  else {
3096  if (fIsHeavyIon == 1){
3097  fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
3098  } else if (fIsHeavyIon == 2){
3099  fOfflineTriggerMask = AliVEvent::kINT7;
3100  } else {
3101  fOfflineTriggerMask = AliVEvent::kMB;
3102  }
3103  }
3104  }
3105 
3106  // in case of MC switch to kAny if no MB/INT7/INT8 has been selected
3107  if(isMC){
3108  if( fIsHeavyIon == 0){
3109  if( fOfflineTriggerMask != AliVEvent::kMB && fOfflineTriggerMask != AliVEvent::kINT7 && fOfflineTriggerMask != AliVEvent::kINT8 ){
3110  fOfflineTriggerMask = AliVEvent::kAny;
3111  }
3112  }else{
3113  fOfflineTriggerMask = AliVEvent::kAny;
3114  }
3115  }
3116 
3117  if (fOfflineTriggerMask){
3118  isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
3119  if (isSelected && !fPreSelCut){
3120 // cout << firedTrigClass.Data() << endl;
3121 // cout << "Special trigger: "<< fSpecialTrigger << " initialized " << fEMCALTrigInitialized << endl;
3122 // if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
3123 // if (!fEMCALTrigInitialized ) InitializeEMCALTrigger(event);
3124 // fTriggersEMCAL= GetTriggerList();
3125 // }
3126  if (fSpecialSubTrigger>0 && !isMC){
3127  if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
3128  if (fRejectTriggerOverlap){
3129  // trigger rejection EMC1,7,8
3130  if (fSpecialTrigger == 5 && fSpecialSubTriggerName.CompareTo("CEMC7") == 0){
3131  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3132  } else if (fSpecialTrigger == 5 && fSpecialSubTriggerName.CompareTo("CEMC1") == 0){
3133  if (fInputHandler->IsEventSelected() & AliVEvent::kMB) isSelected = 0;
3134  } else if (fSpecialTrigger == 5 && fSpecialSubTriggerName.CompareTo("CEMC8") == 0){
3135  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3136  }
3137  // trigger rejection EGA
3138  if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EGA") == 0){
3139  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3140  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3141  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EGA") == 0){
3142  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3143  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3144  }
3145  // trigger rejection EG1 & EG2
3146  if (fPeriodEnum == kLHC13g){
3147  // EG1 is the trigger with the highest threshold
3148  if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG1") == 0){
3149 // cout << firedTrigClass.Data() << endl;
3150  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3151 // cout << "INT7? " << isSelected << endl;
3152  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3153 // cout << "CEM7? " << isSelected << endl;
3154  if (firedTrigClass.Contains("7EG2")) isSelected = 0;
3155 // cout << "7EG2? " << isSelected << endl;
3156  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG1") == 0){
3157  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3158  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3159  if (firedTrigClass.Contains("8EG2")) isSelected = 0;
3160  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG2") == 0){
3161 // cout << firedTrigClass.Data() << endl;
3162  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3163 // cout << "INT7? " << isSelected << endl;
3164  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3165 // cout << "CEM7? " << isSelected << endl;
3166  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG2") == 0){
3167  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3168  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3169  }
3170  } else {
3171  // EG2 is the trigger with the highest threshold
3172  if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG2") == 0){
3173  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3174  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3175  if (firedTrigClass.Contains("7EG1")) isSelected = 0;
3176  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG2") == 0){
3177  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8) isSelected = 0;
3178  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3179  if (firedTrigClass.Contains("8EG1")) isSelected = 0;
3180  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("7EG1") == 0){
3181  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3182  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3183  } else if (fSpecialTrigger == 8 && fSpecialSubTriggerName.CompareTo("8EG1") == 0){
3184  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7) isSelected = 0;
3185  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7) isSelected = 0;
3186  }
3187  }
3188  }
3189  if (isSelected != 0 ){
3190 // cout << "I am here" << " :" << fSpecialSubTriggerName.Data() <<endl;
3191  if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9 ){
3193  if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassesCorrelated->Fill(0);
3194  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassesCorrelated->Fill(1);
3195  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassesCorrelated->Fill(2);
3196  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassesCorrelated->Fill(3);
3197  if (firedTrigClass.Contains("7EJE") || firedTrigClass.Contains("8EJE")) hTriggerClassesCorrelated->Fill(4);
3198  if (firedTrigClass.Contains("7EJ1") || firedTrigClass.Contains("8EJ1")) hTriggerClassesCorrelated->Fill(5);
3199  if (firedTrigClass.Contains("7EJ2") || firedTrigClass.Contains("8EJ2")) hTriggerClassesCorrelated->Fill(6);
3200  if (firedTrigClass.Contains("7EGA") || firedTrigClass.Contains("8EGA")) hTriggerClassesCorrelated->Fill(7);
3201  if (firedTrigClass.Contains("7EG1") || firedTrigClass.Contains("8EG1")) hTriggerClassesCorrelated->Fill(8);
3202  if (firedTrigClass.Contains("7EG2") || firedTrigClass.Contains("8EG2")) hTriggerClassesCorrelated->Fill(9);
3203  }
3204  }
3205  }
3206 
3207  } else if (isMC){
3208  if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
3209 // isSelected = 0;
3210 // if (fTriggersEMCAL > 0)cout << "Special Trigger " << fSpecialTrigger << " triggers: " << fTriggersEMCAL << " selected triggers: " << fTriggersEMCALSelected << " run number: " <<event->GetRunNumber()<<endl;
3211 // if (fTriggersEMCAL&fTriggersEMCALSelected){
3212 // cout << "accepted ++++++++++++++++++++" << endl;
3213  isSelected = 1;
3214 // }
3215  }
3216  }
3217  //if for specific centrality trigger selection
3218  if(fSpecialSubTrigger == 1){
3219  if(fSpecialSubTriggerName.Contains("|") && GetCentrality(event) <= 10.){
3220  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("|");
3221  for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
3222  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3223  if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
3224  }
3225  } else if(fSpecialSubTriggerName.Contains("%")){
3226  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("%");
3227  for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
3228  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3229  if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
3230  }
3231  } else if(fSpecialSubTriggerName.Contains("@")){
3232  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("@");
3233  for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
3234  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3235  if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
3236  }
3237  } else if(fSpecialSubTriggerName.Contains("&")){ //logic AND of two classes
3238  TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("&");
3239  TString CheckClass = "";
3240  for (Int_t i=0; i<ClassesList->GetEntriesFast(); i++){
3241  TObjString *NameClass = (TObjString*)ClassesList->At(i);
3242  if (firedTrigClass.Contains(NameClass->GetString())) CheckClass+="1";
3243  else CheckClass+="0";
3244  }
3245  if(CheckClass.Contains("0")) isSelected = 0;
3246  }
3247  else if(firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 1;
3248  }
3249  }
3250  }
3251  }
3252  fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
3253 
3254  Bool_t mimickedTrigger = kTRUE;
3255  if (fMimicTrigger) mimickedTrigger = MimicTrigger(event, isMC);
3256 // cout << "mimicked decision \t" << mimickedTrigger << "expect decision? "<< fMimicTrigger<< endl;
3257 
3258  // Fill Histogram
3259  if(hTriggerClass){
3260  if (fIsSDDFired) hTriggerClass->Fill(33);
3261  if (mimickedTrigger){
3262  if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
3263  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
3264  if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
3265  if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
3266  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
3267  if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
3268  if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
3269  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
3270  if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
3271  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
3272  if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
3273  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
3274  if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
3275  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
3276  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
3277  // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
3278  if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
3279  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
3280  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
3281  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
3282  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
3283  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
3284  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
3285  if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
3286  if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
3287  if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
3288  if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
3289  if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
3290  // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
3291  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
3292  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
3293  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
3294  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
3295  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
3296  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
3297  if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
3298  if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
3299  if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
3300  if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
3301  if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
3302  if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
3303  }
3304  if (mimickedTrigger && fMimicTrigger) hTriggerClass->Fill(35);
3305  }
3306 
3307  if(hTriggerClassSelected && isSelected){
3308  if (mimickedTrigger){
3309  if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
3310  if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
3311  if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
3312  if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
3313  if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
3314  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
3315  if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
3316  if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
3317  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
3318  if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
3319  // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
3320  if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
3321  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
3322  if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
3323  // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
3324  if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
3325  // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
3326  if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
3327  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
3328  if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
3329  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
3330  // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
3331  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
3332  if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
3333  if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
3334  if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
3335  if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
3336  if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
3337  if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
3338  // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
3339  if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
3340  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
3341  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
3342  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
3343  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
3344  if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
3345  if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
3346  if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
3347  if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
3348  if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
3349  if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
3350  }
3351  if (mimickedTrigger && fMimicTrigger) hTriggerClassSelected->Fill(34);
3352  }
3353 
3354  if(!isSelected)return kFALSE;
3355  if (fMimicTrigger)
3356  if (!mimickedTrigger ) return kFALSE;
3357  return kTRUE;
3358 
3359 }
3360 
3361 //________________________________________________________________________
3363  // returns TString with current cut number
3364  return fCutStringRead;
3365 }
3366 
3367 //________________________________________________________________________
3368 void AliConvEventCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *event){
3369 
3370  if(fNotRejectedStart){
3371  delete[] fNotRejectedStart;
3372  fNotRejectedStart = NULL;
3373  }
3374  if(fNotRejectedEnd){
3375  delete[] fNotRejectedEnd;
3376  fNotRejectedEnd = NULL;
3377  }
3378  if(fGeneratorNames){
3379  delete[] fGeneratorNames;
3380  fGeneratorNames = NULL;
3381  }
3382 
3383  if(rejection == 0) return; // No Rejection
3384 
3385  AliGenCocktailEventHeader *cHeader = 0x0;
3386  AliAODMCHeader *cHeaderAOD = 0x0;
3387  Bool_t headerFound = kFALSE;
3388  AliMCEvent *fMCEvent = 0x0;
3389  TClonesArray *fMCEventAOD = 0x0;
3390  if(event->IsA()==AliMCEvent::Class()){
3391  if(dynamic_cast<AliMCEvent*>(event)){
3392  cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(event)->GenEventHeader());
3393  fMCEvent = dynamic_cast<AliMCEvent*>(event);
3394  if(cHeader) headerFound = kTRUE;
3395  }
3396  }
3397  if(event->IsA()==AliAODEvent::Class()){ // event is a AODEvent in case of AOD
3398  cHeaderAOD = dynamic_cast<AliAODMCHeader*>(event->FindListObject(AliAODMCHeader::StdBranchName()));
3399  fMCEventAOD = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
3400  if(cHeaderAOD) headerFound = kTRUE;
3401  }
3402 
3403  if (fDebugLevel > 0 ) cout << "event starts here" << endl;
3404  if(headerFound){
3405  TList *genHeaders = 0x0;
3406  if(cHeader) genHeaders = cHeader->GetHeaders();
3407  if(cHeaderAOD){
3408  genHeaders = cHeaderAOD->GetCocktailHeaders();
3409  if(genHeaders->GetEntries()==1){
3411  return;
3412  }
3413  }
3414  AliGenEventHeader* gh = 0;
3415  fnHeaders = 0;
3416  Int_t firstindexA = 0;
3417  Int_t lastindexA = -1;
3418  if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
3419  if(rejection == 2){ // TList of Headers Names
3420  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
3421  gh = (AliGenEventHeader*)genHeaders->At(i);
3422  TString GeneratorName = gh->GetName();
3423  lastindexA = lastindexA + gh->NProduced();
3424 // if (fDebugLevel > 0 ) cout << i << "\t" << GeneratorName.Data() << endl;
3425  for(Int_t j = 0; j<HeaderList->GetEntries();j++){
3426  TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
3427 // if (fDebugLevel > 0 ) cout << GeneratorInList.Data() << endl;
3428  if(GeneratorName.CompareTo(GeneratorInList) == 0){
3429 // if (fDebugLevel > 0 ) cout << "accepted" << endl;
3430  if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
3431  if(fMCEvent){
3432  if (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c ){
3433  if (fMCEvent->Particle(firstindexA)->GetPdgCode() == fAddedSignalPDGCode ) {
3434  if (gh->NProduced() > 10 && fMCEvent->Particle(firstindexA+10)->GetPdgCode() == fAddedSignalPDGCode ){
3435 // if (fDebugLevel > 0 ) cout << "cond 1: "<< fnHeaders << endl;
3436  fnHeaders++;
3437  continue;
3438  }
3439  continue;
3440  }
3441  } else {
3442 // if (fDebugLevel > 0 ) cout << "cond 2: " << fnHeaders << endl;
3443  fnHeaders++;
3444  continue;
3445  }
3446  }
3447  if ( fMCEventAOD){
3448  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindexA));
3449  if (aodMCParticle && (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c) ){
3450  if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
3451  if (gh->NProduced() > 10){
3452  AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindexA+10));
3453  if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
3454 // if (fDebugLevel > 0 ) cout << "cond 1: " << fnHeaders << endl;
3455  fnHeaders++;
3456  continue;
3457  }
3458  }
3459  continue;
3460  }
3461  } else {
3462 // if (fDebugLevel > 0 ) cout << "cond 2: " << fnHeaders << endl;
3463  fnHeaders++;
3464  continue;
3465  }
3466  }
3467  continue;
3468  }
3469 // if (fDebugLevel > 0 ) cout << "cond 3: "<< fnHeaders << endl;
3470  fnHeaders++;
3471  continue;
3472  }
3473  }
3474  firstindexA = firstindexA + gh->NProduced();
3475  }
3476  }
3477  if (fDebugLevel > 0 ) cout << "number of headers: " <<fnHeaders << endl;
3478 
3482 
3483  if(rejection == 1 || rejection == 3){
3484  fNotRejectedStart[0] = 0;
3485  fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
3486  fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
3487  if (fDebugLevel > 0 ) cout << 0 << "\t" <<fGeneratorNames[0] << "\t" << fNotRejectedStart[0] << "\t" <<fNotRejectedEnd[0] << endl;
3488  return;
3489  }
3490 
3491  Int_t firstindex = 0;
3492  Int_t lastindex = -1;
3493  Int_t number = 0;
3494 
3495  for(Int_t i = 0; i<genHeaders->GetEntries();i++){
3496  gh = (AliGenEventHeader*)genHeaders->At(i);
3497  TString GeneratorName = gh->GetName();
3498  lastindex = lastindex + gh->NProduced();
3499  if (fDebugLevel > 0 ) cout << i << "\t" << GeneratorName.Data() << endl;
3500  for(Int_t j = 0; j<HeaderList->GetEntries();j++){
3501  TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
3502  if(GeneratorName.CompareTo(GeneratorInList) == 0){
3503  if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
3504  if(fMCEvent){
3505  if (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c ){
3506  if (fMCEvent->Particle(firstindex)->GetPdgCode() == fAddedSignalPDGCode ) {
3507 // if (fDebugLevel > 0 ) cout << "produced " << gh->NProduced() << " with box generator" << endl;
3508  if (gh->NProduced() > 10 && fMCEvent->Particle(firstindex+10)->GetPdgCode() == fAddedSignalPDGCode){
3509 // if (fDebugLevel > 0 ) cout << "one of them was a pi0 or eta" << endl;
3510  fNotRejectedStart[number] = firstindex;
3511  fNotRejectedEnd[number] = lastindex;
3512  fGeneratorNames[number] = GeneratorName;
3513  number++;
3514 // if (fDebugLevel > 0 ) cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
3515  continue;
3516  }
3517  }
3518  } else {
3519  fNotRejectedStart[number] = firstindex;
3520  fNotRejectedEnd[number] = lastindex;
3521  fGeneratorNames[number] = GeneratorName;
3522  number++;
3523  continue;
3524  }
3525  }
3526  if ( fMCEventAOD){
3527  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindex));
3528  if (fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c ){
3529  if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
3530  if (gh->NProduced() > 10) {
3531  AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCEventAOD->At(firstindex+10));
3532  if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
3533  fNotRejectedEnd[number] = lastindex;
3534  fNotRejectedStart[number] = firstindex;
3535  fGeneratorNames[number] = GeneratorName;
3536  number++;
3537  }
3538  continue;
3539  }
3540  }
3541  } else {
3542  fNotRejectedStart[number] = firstindex;
3543  fNotRejectedEnd[number] = lastindex;
3544  fGeneratorNames[number] = GeneratorName;
3545  number++;
3546  continue;
3547  }
3548  }
3549  continue;
3550  } else {
3551  fNotRejectedStart[number] = firstindex;
3552  fNotRejectedEnd[number] = lastindex;
3553  fGeneratorNames[number] = GeneratorName;
3554 // if (fDebugLevel > 0 ) cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
3555  number++;
3556  continue;
3557  }
3558 
3559  }
3560  }
3561  firstindex = firstindex + gh->NProduced();
3562  }
3563  if (fDebugLevel > 0 ) {
3564  for (Int_t i = 0; i < number; i++){
3565  cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
3566  }
3567  }
3568  } else { // No Cocktail Header Found
3569  fNotRejectedStart = new Int_t[1];
3570  fNotRejectedEnd = new Int_t[1];
3571 
3572  fnHeaders = 1;
3573  fNotRejectedStart[0] = 0;
3574  fNotRejectedEnd[0] = static_cast<AliMCEvent*>(event)->GetNumberOfPrimaries()-1;
3575  if (rejection > 1){
3576  fNotRejectedStart[0] = -1;
3577  fNotRejectedEnd[0] = -1;
3578  }
3579 
3580  fGeneratorNames = new TString[1];
3581  fGeneratorNames[0] = "NoCocktailGeneratorFound";
3582 // SetRejectExtraSignalsCut(0);
3583  }
3584 
3585 }
3586 
3587 //_________________________________________________________________________
3588 Int_t AliConvEventCuts::IsParticleFromBGEvent(Int_t index, AliMCEvent *mcEvent, AliVEvent *InputEvent, Int_t debug ){
3589 
3590  // if (debug > 2 ) cout << index << endl;
3591  if(index < 0) return 0; // No Particle
3592 
3593  Int_t accepted = 0;
3594  if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
3595  if(!mcEvent) return 0; // no mcEvent available, return 0
3596  if(index >= mcEvent->GetNumberOfPrimaries()){ // initial particle is secondary particle
3597  if( ((TParticle*)mcEvent->Particle(index))->GetMother(0) < 0) return 0; // material particle, return 0
3598  return IsParticleFromBGEvent(((TParticle*)mcEvent->Particle(index))->GetMother(0),mcEvent,InputEvent, debug);
3599  }
3600  for(Int_t i = 0;i<fnHeaders;i++){
3601  // if (debug > 2 ) cout << "header " << fGeneratorNames[i].Data() << ":"<< fNotRejectedStart[i] << "\t" << fNotRejectedEnd[i] << endl;
3602  if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
3603  if (debug > 1 ) cout << "accepted:" << index << "\t header " << fGeneratorNames[i].Data() << ": "<< fNotRejectedStart[i] << "\t" << fNotRejectedEnd[i] << endl;
3604  accepted = 1;
3605  if(i == 0) accepted = 2; // MB Header
3606  }
3607  }
3608  if (debug > 1 && !accepted) cout << "rejected:" << index << endl;
3609  }
3610  else if(InputEvent->IsA()==AliAODEvent::Class()){
3611  TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
3612  if (AODMCTrackArray){
3613  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
3614  if(!aodMCParticle) return 0; // no particle
3615  if(!aodMCParticle->IsPrimary()){
3616  if( aodMCParticle->GetMother() < 0) return 0;// material particle, return 0
3617  return IsParticleFromBGEvent(aodMCParticle->GetMother(),mcEvent,InputEvent, debug);
3618  }
3619  index = TMath::Abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
3620  for(Int_t i = 0;i<fnHeaders;i++){
3621  if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
3622  accepted = 1;
3623  if(i == 0) accepted = 2; // MB Header
3624  }
3625  }
3626  }
3627  }
3628 
3629  return accepted;
3630 }
3631 
3632 //_________________________________________________________________________
3633 Int_t AliConvEventCuts::IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *event, AliMCEvent *mcEvent, Int_t isHeavyIon, Bool_t isEMCALAnalysis){
3634 
3635  Bool_t isMC = kFALSE;
3636  if (mcEvent){isMC = kTRUE;}
3637 
3638  if ( !IsTriggerSelected(event, isMC) )
3639  return 3;
3640 
3641  if( !(IsCentralitySelected(event,mcEvent)))
3642  return 1; // Check Centrality --> Not Accepted => eventQuality = 1
3643 
3644  Bool_t hasV0And = ReaderCuts->HasV0AND();
3645  Bool_t isSDDFired = ReaderCuts->IsSDDFired();
3646 
3647  if( ( (IsSpecialTrigger() == 0 && IsSpecialSubTrigger() == 1) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !isSDDFired && !mcEvent)
3648  //if V0OR with SDD requested or V0AND with SDD request but the SDD has not fired
3649  return 7; // V0 with SDD requested but no fired
3650 
3651  if( ( (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 0) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !hasV0And)
3652  //if V0AND (only) or V0AND with SDD requested but V0AND requested but no fired
3653  return 8; // V0AND requested but no fired
3654 
3655 
3656  if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !mcEvent)
3657  return 7; // With SDD requested but no fired
3658 
3659  if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
3660  return 8; // V0AND requested but no fired
3661 
3662  // Special EMCAL checks due to hardware issues in LHC11a
3663  if (isEMCALAnalysis || IsSpecialTrigger() == 5 || IsSpecialTrigger() == 8 || IsSpecialTrigger() == 9 ){
3664  Int_t runnumber = event->GetRunNumber();
3665  if ((runnumber>=144871) && (runnumber<=146860)) {
3666 
3667  AliVCaloCells *cells = event->GetEMCALCells();
3668  const Short_t nCells = cells->GetNumberOfCells();
3669 
3670  if (event->IsA()==AliESDEvent::Class()) AliAnalysisManager::GetAnalysisManager()->LoadBranch("EMCALCells.");
3671 
3672  AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
3673  if (!fInputHandler) return 3;
3674 
3675  // count cells above threshold
3676  Int_t nCellCount[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
3677  for(Int_t iCell=0; iCell<nCells; ++iCell) {
3678  Short_t cellId = cells->GetCellNumber(iCell);
3679  Double_t cellE = cells->GetCellAmplitude(cellId);
3680  Int_t sm = cellId / (24*48);
3681  if (cellE>0.1) ++nCellCount[sm];
3682  }
3683 
3684  Bool_t fIsLedEvent = kFALSE;
3685  if (nCellCount[4] > 100) {
3686  fIsLedEvent = kTRUE;
3687  } else {
3688  if ((runnumber>=146858) && (runnumber<=146860)) {
3689  if ((fInputHandler->IsEventSelected() & AliVEvent::kMB) && (nCellCount[3]>=21))
3690  fIsLedEvent = kTRUE;
3691  else if ((fInputHandler->IsEventSelected() & AliVEvent::kEMC1) && (nCellCount[3]>=35))
3692  fIsLedEvent = kTRUE;
3693  }
3694  }
3695  if (fIsLedEvent) {
3696  return 9;
3697  }
3698  }
3699  }
3700 
3701  // SPD clusters vs tracklets to check for pileup/background
3702  Int_t nClustersLayer0 = event->GetNumberOfITSClusters(0);
3703  Int_t nClustersLayer1 = event->GetNumberOfITSClusters(1);
3704  Int_t nTracklets = event->GetMultiplicity()->GetNumberOfTracklets();
3705  if(hSPDClusterTrackletBackgroundBefore) hSPDClusterTrackletBackgroundBefore->Fill(nTracklets, (nClustersLayer0 + nClustersLayer1));
3706 
3707 
3708  Double_t distZMax = 0;
3709  if(event->IsA()==AliESDEvent::Class()){
3710  Int_t nPileVert = ((AliESDEvent*)event)->GetNumberOfPileupVerticesSPD();
3711  if (hNPileupVertices) hNPileupVertices->Fill(nPileVert);
3712  if (nPileVert > 0){
3713  for(Int_t i=0; i<nPileVert;i++){
3714  const AliESDVertex* pv= ((AliESDEvent*)event)->GetPileupVertexSPD(i);
3715  Int_t nc2 = pv->GetNContributors();
3716  if(nc2>=3){
3717  Double_t z1 = ((AliESDEvent*)event)->GetPrimaryVertexSPD()->GetZ();
3718  Double_t z2 = pv->GetZ();
3719  Double_t distZ = z2-z1;
3720  if (TMath::Abs(distZMax) < TMath::Abs(distZ) ){
3721  distZMax = distZ;
3722  }
3723  }
3724  }
3725  if (hPileupVertexToPrimZ) hPileupVertexToPrimZ->Fill(distZMax);
3726  }
3727  }
3728  if(GetPastFutureLowBC()!=0 && GetPastFutureHighBC()!=0 ){
3729  if(IsOutOfBunchPileupPastFuture(event))
3730  return 12;
3731  }
3732 
3733  if( isHeavyIon != 2 && GetIsFromPileup()){
3734  if(event->IsPileupFromSPD(3,0.8,3.,2.,5.) ){
3736  return 6; // Check Pileup --> Not Accepted => eventQuality = 6
3737  }
3738  if (fUtils->IsSPDClusterVsTrackletBG(event)){
3740  return 11; // Check Pileup --> Not Accepted => eventQuality = 11
3741  }
3742  }
3743  if(isHeavyIon == 2 && GetIsFromPileup()){
3744  if(fUtils->IsPileUpEvent(event) ){
3746  return 6; // Check Pileup --> Not Accepted => eventQuality = 6
3747  }
3748  if (fUtils->IsSPDClusterVsTrackletBG(event)){
3750  return 11; // Check Pileup --> Not Accepted => eventQuality = 11
3751  }
3752  }
3753 
3755  if( IsPileUpV0MTPCout(event) ){
3756  return 13;
3757  }
3758  }
3759 
3760  if(hCentrality)hCentrality->Fill(GetCentrality(event));
3761 
3762  if(hVertexZ)hVertexZ->Fill(event->GetPrimaryVertex()->GetZ());
3763 // if(hCentralityVsNumberOfPrimaryTracks)
3764 // hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(event),
3765 // ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
3766 // ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
3767 
3768  if(fIsHeavyIon == 1){
3769  AliEventplane *EventPlane = event->GetEventplane();
3770  fEventPlaneAngle = EventPlane->GetEventplane("V0",event,2);
3771  if(hEventPlaneAngle)hEventPlaneAngle->Fill(TMath::Abs(fEventPlaneAngle));
3772  }
3773  if(hSPDClusterTrackletBackground) hSPDClusterTrackletBackground->Fill(nTracklets, (nClustersLayer0 + nClustersLayer1));
3774 
3775  return 0;
3776 }
3777 
3778 
3779 //_________________________________________________________________________
3781 
3782  AliInfo("Inside the GetWeightForCentralityFlattening function");
3783  Double_t centrality = 0.;
3784  //obtain centrality for ESD or AOD
3785  if(!event || event->IsA()==AliESDEvent::Class()){
3786  AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
3787  if(esdEvent){
3788  AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
3789  if(fDetectorCentrality==0 && fIsHeavyIon==1){
3790  centrality = fESDCentrality->GetCentralityPercentile("V0M"); // default for PbPb
3791  }
3792  }
3793  } else if(event->IsA()==AliAODEvent::Class()){
3794  AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
3795  if(aodEvent){
3796  if(aodEvent->GetHeader()){
3797  centrality = ((AliVAODHeader*)aodEvent->GetHeader())->GetCentrality();
3798  }
3799  }
3800  }
3801 
3802  //Get the maximum vlaue from the reference distribution and interpolated value
3803  Float_t GetValueForWeight = 1.;
3804  Float_t maximum = 1.;
3805  Double_t weightCentrality = 1.;
3806  Bool_t CorrCentrLoop = kFALSE;
3807 
3808  //depending on the value of the flag, flattening in different cent. range
3809  if ( fDoCentralityFlat == 1 && (centrality >= 0. && centrality <= 10.) ){
3810  GetValueForWeight = hCentralityNotFlat->Interpolate(centrality);
3811  maximum = hCentralityNotFlat->GetMaximum();
3812  CorrCentrLoop = kTRUE;
3813  } else if ( fDoCentralityFlat == 2 && (centrality >=10. && centrality <= 20.) ){
3814  GetValueForWeight = hCentralityNotFlat->Interpolate(centrality);
3815  maximum = hCentralityNotFlat->GetMaximum();
3816  CorrCentrLoop = kTRUE;
3817  } else if ( fDoCentralityFlat == 8 ){
3818  GetValueForWeight = hCentralityNotFlat->Interpolate(centrality);
3819  maximum = hCentralityNotFlat->GetMaximum();
3820  CorrCentrLoop = kTRUE;
3821  } else {
3822  CorrCentrLoop = kFALSE;
3823  }
3824 
3825  if (CorrCentrLoop && GetValueForWeight != 0. && maximum !=0. && isfinite(GetValueForWeight) && isfinite(maximum) ){
3826  weightCentrality = maximum/GetValueForWeight;
3827  if (!isfinite(GetValueForWeight)) weightCentrality = 1.;
3828  if (!isfinite(weightCentrality)) weightCentrality = 1.;
3829  }
3830 
3831  return weightCentrality;
3832 }
3833 
3834 //_________________________________________________________________________
3836 
3837  Double_t weightMult = 1.;
3838 
3839  Float_t valueMultData = -1.;
3840  Float_t valueMultMC = -1.;
3841 
3842  if (hReweightMultData == NULL || hReweightMultMC == NULL ) return weightMult;
3843 
3844  valueMultData = hReweightMultData->Interpolate(mult);
3845  valueMultMC = hReweightMultMC->Interpolate(mult);
3846 
3847  Float_t relativeErrorMC = hReweightMultMC->GetBinError(hReweightMultMC->FindBin(mult))/hReweightMultMC->GetBinContent(hReweightMultMC->FindBin(mult));
3848  Float_t relativeErrorData = hReweightMultData->GetBinError(hReweightMultData->FindBin(mult))/hReweightMultData->GetBinContent(hReweightMultData->FindBin(mult));
3849 
3850  if (relativeErrorData < 0.2 && relativeErrorMC < 0.2 ){
3851  if (isfinite(valueMultData) && isfinite(valueMultMC) ){
3852  weightMult = valueMultData/valueMultMC;
3853  }
3854  }
3855 
3856  return weightMult;
3857 }
3858 
3859 
3860 
3861 //_________________________________________________________________________
3862 Float_t AliConvEventCuts::GetWeightForMeson(Int_t index, AliMCEvent *mcEvent, AliVEvent *event){
3863  if (!( fPeriodEnum == kLHC13d2 || fPeriodEnum == kLHC13d2b || // LHC10h MCs
3864  fPeriodEnum == kLHC14a1a || fPeriodEnum == kLHC14a1b || fPeriodEnum == kLHC14a1c || // LHC11h MCs
3865  fPeriodEnum == kLHC13e7 || fPeriodEnum == kLHC13b2_efix || fPeriodEnum == kLHC14b2 || // LHC13bc MCs
3866  fPeriodEnum == kLHC14e2a || fPeriodEnum == kLHC14e2b || fPeriodEnum == kLHC14e2c || // LHC12[a-i] pass 1 MCs
3867  fPeriodEnum == kLHC12f1a || fPeriodEnum == kLHC12f1b || fPeriodEnum == kLHC12i3 // LHC11a MCs
3868  ) ) return 1.;
3869  Int_t kCaseGen = 0;
3870 
3871  if(index < 0) return 0; // No Particle
3872 
3873  if (IsParticleFromBGEvent(index, mcEvent, event)){
3876  kCaseGen = 1;
3877  }
3878  }
3879  if (kCaseGen == 0) return 1;
3880 
3881  Double_t mesonPt = 0;
3882  //Double_t mesonMass = 0;
3883  Int_t PDGCode = 0;
3884  if(!event || event->IsA()==AliESDEvent::Class()){
3885  mesonPt = ((TParticle*)mcEvent->Particle(index))->Pt();
3886  //mesonMass = ((TParticle*)mcEvent->Particle(index))->GetCalcMass();
3887  PDGCode = ((TParticle*)mcEvent->Particle(index))->GetPdgCode();
3888  } else if(event->IsA()==AliAODEvent::Class()){
3889  TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
3890  if (AODMCTrackArray){
3891  AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
3892  mesonPt = aodMCParticle->Pt();
3893  //mesonMass = aodMCParticle->GetCalcMass();
3894  PDGCode = aodMCParticle->GetPdgCode();
3895  } else {
3896  return 1;
3897  }
3898  }
3899 
3900  Float_t functionResultMC = 1.;
3901  if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
3902  functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
3903  }
3904  if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
3905  functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
3906  }
3907  if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
3908  functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
3909  }
3910 
3911  Float_t functionResultData = 1;
3912  if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
3913  functionResultData = fFitDataPi0->Eval(mesonPt);
3914  }
3915  if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
3916  functionResultData = fFitDataEta->Eval(mesonPt);
3917  }
3918  if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
3919  functionResultData = fFitDataK0s->Eval(mesonPt);
3920  }
3921 
3922  Double_t weight = 1;
3923  if (PDGCode == 111 || PDGCode == 221){
3924  if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
3925  weight = functionResultData/functionResultMC;
3926  if ( kCaseGen == 3){
3927  if (PDGCode == 111){
3928  if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
3929  weight = 1.;
3930  }
3931  }
3932  if (PDGCode == 221){
3933  if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
3934  weight = 1.;
3935  }
3936  }
3937  }
3938  if (!isfinite(functionResultData)) weight = 1.;
3939  if (!isfinite(weight)) weight = 1.;
3940  }
3941  } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
3942  weight = functionResultMC;
3943  }
3944  return weight;
3945 }
3946 
3947 
3950 
3951  if( fPeriodEnum == kLHC13bc || // mainly minimum bias
3952  fPeriodEnum == kLHC13de || // mainly triggered
3953  fPeriodEnum == kLHC13b4_fix || fPeriodEnum == kLHC13b4_plus || // MC Pythia 6 (Jet-Jet), anchor LHC13b-e
3954  fPeriodEnum == kLHC13b2_efix || //MC DPMJET, anchr LHC13b+c
3955  fPeriodEnum == kLHC13e7 || //MC HIJING, anchr LHC13b+c
3956  fPeriodEnum == kLHC14b2 //MC HIJING, anchr LHC13b+c
3957  ){
3958  printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
3959  SetEtaShift(-0.465);
3960  } else if( fPeriodEnum == kLHC13f ) {
3961  printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
3962  SetEtaShift(+0.465);
3963  }
3964  else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
3965 }
3966 
3967 //________________________________________________________________________
3968 AliEMCALTriggerPatchInfo* AliConvEventCuts::GetMainTriggerPatch()
3969 {
3970  //get main trigger match; if not known yet, look for it and cache
3971 
3973  return fMainTriggerPatchEMCAL;
3974 
3975  if (!fTriggerPatchInfo) {
3976  AliError(Form("%s: fTriggerPatchInfo not available",GetName()));
3977  return 0;
3978  }
3979 
3980  //number of patches in event
3981  Int_t nPatch = fTriggerPatchInfo->GetEntries();
3982 
3983  //extract main trigger patch
3984  AliEMCALTriggerPatchInfo *patch;
3985  for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
3986  patch = (AliEMCALTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
3987  if (patch->IsMainTrigger()) {
3988  fMainTriggerPatchEMCAL = patch;
3989  break;
3990  }
3991  }
3992 
3993  return fMainTriggerPatchEMCAL;
3994 }
3995 
3996 
3997 //________________________________________________________________________
3999 {
4000 // cout << "entered EMCAL trigger initialization" << endl;
4001 
4002  // Init the analysis.
4003  if (fCaloTriggersName.IsNull()){
4004  if (event->IsA()==AliESDEvent::Class()){
4005  fCaloTriggersName = "EMCALTrigger";
4006  } else {
4007  fCaloTriggersName = "emcalTrigger";
4008  }
4009  }
4010 
4011  if (!fCaloTriggersName.IsNull() && !fCaloTriggers) {
4012  fCaloTriggers = dynamic_cast<AliVCaloTrigger*>(event->FindListObject(fCaloTriggersName));
4013  if (!fCaloTriggers) {
4014  AliError(Form("%s: Could not retrieve calo triggers %s!", GetName(), fCaloTriggersName.Data()));
4015  return;
4016  }
4017  }
4018 
4019  if (fCaloTriggerPatchInfoName.IsNull()){
4020  if (event->IsA()==AliESDEvent::Class()){
4021  fCaloTriggerPatchInfoName = "EmcalTriggers";
4022  } else {
4023  fCaloTriggerPatchInfoName = "EmcalTriggers";
4024  }
4025  }
4026 
4027  if (!fCaloTriggerPatchInfoName.IsNull() && !fTriggerPatchInfo) {
4028  fTriggerPatchInfo = GetArrayFromEvent(event, fCaloTriggerPatchInfoName.Data(), "AliEMCALTriggerPatchInfo");
4029  if (!fTriggerPatchInfo) {
4030  AliError(Form("%s: Could not retrieve calo trigger patch info %s!", GetName(), fCaloTriggerPatchInfoName.Data()));
4031  return;
4032  }
4033 
4034  }
4035 
4036  fEMCALTrigInitialized = kTRUE;
4037 }
4038 
4039 //________________________________________________________________________
4041  if (!fTriggerPatchInfo)
4042  return 0;
4043  //number of patches in event
4044  Int_t nPatch = fTriggerPatchInfo->GetEntries();
4045 
4046  //loop over patches to define trigger type of event
4047  Int_t nG1 = 0;
4048  Int_t nG2 = 0;
4049  Int_t nJ1 = 0;
4050  Int_t nJ2 = 0;
4051  Int_t nL0 = 0;
4052  AliEMCALTriggerPatchInfo *patch;
4053 // if (nPatch> 0) {cout << "NEW Triggers in this event*********************************" << endl;}
4054  for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
4055  patch = (AliEMCALTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
4056 // cout << "Patch energy: "<<patch->GetPatchE() << "\t ADC counts: " << patch->GetADCAmp() << endl;
4057 // cout << "Phi: " << patch->GetPhiMin() << " - " << patch->GetPhiMax() << " delta phi: " <<TMath::Abs(patch->GetPhiMin()-patch->GetPhiMax())<< endl;
4058 // cout << "Eta: " << patch->GetEtaMin() << " - " << patch->GetEtaMax() << " delta eta: " <<TMath::Abs(patch->GetEtaMin()-patch->GetEtaMax())<< endl;
4059  if (patch->IsGammaHigh()){
4060 // cout << "fired L1GA high" << endl;
4061  nG1++;
4062  }
4063  if (patch->IsGammaLow()){
4064 // cout << "fired L1GA low" << endl;
4065  nG2++;
4066  }
4067  if (patch->IsJetHigh()){
4068 // cout << "fired L1JE high" << endl;
4069  nJ1++;
4070  }
4071  if (patch->IsJetLow()){
4072 // cout << "fired L1JE low" << endl;
4073  nJ2++;
4074  }
4075  if (patch->IsLevel0()){
4076 // cout << "fired L0" << endl;
4077  nL0++;
4078  }
4079 // cout << patch->GetPatchE() << "\t" << patch->GetADCAmp() << "\t" << patch->IsGammaHigh() << "\t" << patch->IsGammaLow()
4080 // << "\t" << patch->IsJetHigh() << "\t" << patch->IsJetLow() << "\t" << patch->IsLevel0()
4081 // << "\t" << patch->GetPhiMin() << "\t" << patch->GetPhiMax() << "\t" << TMath::Abs(patch->GetPhiMin()-patch->GetPhiMax())
4082 // << "\t" << patch->GetEtaMin() << "\t" << patch->GetEtaMax() << "\t" << TMath::Abs(patch->GetEtaMin()-patch->GetEtaMax()) << endl;
4083  }
4084 
4085  if (nPatch > 0){
4086  AliDebug(2, "Patch summary: ");
4087  AliDebug(2, Form("Number of patches: %d", nPatch));
4088  AliDebug(2, Form("Level0: [%d]" ,nL0));
4089  AliDebug(2, Form("Jet: low[%d], high[%d]" ,nJ2, nJ1));
4090  AliDebug(2, Form("Gamma: low[%d], high[%d]" ,nG2, nG1));
4091  }
4092 
4093 // if (nPatch > 0){
4094 // cout << Form("Number of patches: %d", nPatch) << endl;
4095 // cout << Form("Level0: [%d]" ,nL0) << endl;
4096 // cout << Form("Jet: low[%d], high[%d]" ,nJ2, nJ1) << endl;
4097 // cout << Form("Gamma: low[%d], high[%d]" ,nG2, nG1) << endl;
4098 // }
4099 
4100  ULong_t triggers(0);
4101  if (nG1>0)
4102  SETBIT(triggers, kG1);
4103  if (nG2>0)
4104  SETBIT(triggers, kG2);
4105  if (nJ1>0)
4106  SETBIT(triggers, kJ1);
4107  if (nJ2>0)
4108  SETBIT(triggers, kJ2);
4109  if (nL0>0)
4110  SETBIT(triggers, kL0);
4111  return triggers;
4112 }
4113 
4114 //________________________________________________________________________
4116  // Check if event has a given trigger type
4117  if(t == kND){
4118  return fTriggersEMCAL == 0;
4119  }
4120  return TESTBIT(fTriggersEMCAL, int(t));
4121 }
4122 
4123 
4124 //________________________________________________________________________
4125 TClonesArray *AliConvEventCuts::GetArrayFromEvent(AliVEvent* event, const char *name, const char *clname)
4126 {
4127  // Get array from event.
4128 
4129  TClonesArray *arr = 0;
4130  TString sname(name);
4131  if (!sname.IsNull()) {
4132  arr = dynamic_cast<TClonesArray*>(event->FindListObject(sname));
4133  if (!arr) {
4134  AliWarning(Form("%s: Could not retrieve array with name %s!", GetName(), name));
4135  return 0;
4136  }
4137  } else {
4138  return 0;
4139  }
4140 
4141  if (!clname)
4142  return arr;
4143 
4144  TString objname(arr->GetClass()->GetName());
4145  TClass cls(objname);
4146  if (!cls.InheritsFrom(clname)) {
4147  AliWarning(Form("%s: Objects of type %s in %s are not inherited from %s!",
4148  GetName(), cls.GetName(), name, clname));
4149  return 0;
4150  }
4151  return arr;
4152 }
4153 
4154 //_________________________________________________________________________
4155 Bool_t AliConvEventCuts::IsConversionPrimaryESD( AliMCEvent *mcEvent, Long_t eventpos, Double_t prodVtxX, Double_t prodVtxY, Double_t prodVtxZ){
4156 
4157  if (eventpos < 0) return kFALSE;
4158  TParticle* particle = (TParticle *)mcEvent->Particle(eventpos);
4159  if (!particle) return kFALSE;
4160  if (TMath::Abs(particle->GetPdgCode()) == 11 ){
4161  if (particle->GetMother(0) != -1){
4162  TParticle* particleMother = (TParticle *)mcEvent->Particle(particle->GetMother(0));
4163  if (particleMother){
4164  if (TMath::Abs(particleMother->GetPdgCode()) == 22)
4165  particle = particleMother;
4166  }
4167  }
4168  }
4169  if (particle->GetMother(0) != -1){
4170  Double_t deltaX = particle->Vx() - prodVtxX;
4171  Double_t deltaY = particle->Vy() - prodVtxY;
4172  Double_t deltaZ = particle->Vz() - prodVtxZ;
4173 
4174  //Double_t realRadius2D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY);
4175  Double_t realRadius3D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ);
4176 
4177 
4178  Bool_t dalitzCand = kFALSE;
4179 
4180  TParticle* firstmother = (TParticle *)mcEvent->Particle(particle->GetMother(0));
4181  if (!firstmother) return kFALSE;
4182  Int_t pdgCodeFirstMother = firstmother->GetPdgCode();
4183  Bool_t intDecay = kFALSE;
4184  if ( pdgCodeFirstMother == 111 || pdgCodeFirstMother == 221 ) intDecay = kTRUE;
4185  if ( intDecay && TMath::Abs(particle->GetPdgCode()) == 11 ){
4186  dalitzCand = kTRUE;
4187 // cout << "dalitz candidate found" << endl;
4188  }
4189 
4190  Long_t source = particle->GetMother(0);
4191  Bool_t foundExcludedPart = kFALSE;
4192  Bool_t foundShower = kFALSE;
4193  Int_t pdgCodeMotherPrev = 0;
4194  Int_t pdgCodeMotherPPrevMother = 0;
4195  Int_t depth = 0;
4196  if (dalitzCand || realRadius3D < fSecProdBoundary ){
4197 // if (particle->GetPdgCode() == 22){
4198 // cout << endl << endl << "new particle: " << eventpos <<endl;
4199 // cout << particle->GetPdgCode() << "\t" << particle->R() << "\t" << realRadius2D << "\t" << realRadius3D << endl;
4200 // }
4201  while (depth < 20){
4202  TParticle* mother = (TParticle *)mcEvent->Particle(source);
4203  source = mother->GetMother(0);
4204 // if (particle->GetPdgCode() == 22)cout << "eventposition: "<< source << endl;
4205  Int_t pdgCodeMother = mother->GetPdgCode();
4206 // if (particle->GetPdgCode() == 22)cout << "Previous mothers: " << pdgCodeMother << "\t"<< pdgCodeMotherPrev<< "\t" << pdgCodeMotherPPrevMother << endl;
4207  if (pdgCodeMother == pdgCodeMotherPrev && pdgCodeMother == pdgCodeMotherPPrevMother) depth = 20;
4208  if (TMath::Abs(pdgCodeMother) == 11 && TMath::Abs(pdgCodeMotherPrev) == 22 && TMath::Abs(pdgCodeMotherPPrevMother) == 11 ){
4209  foundShower = kTRUE;
4210  depth =20;
4211  }
4212  if (TMath::Abs(pdgCodeMother) == 22 && TMath::Abs(pdgCodeMotherPrev) == 11 && TMath::Abs(pdgCodeMotherPPrevMother) == 22 ){
4213  foundShower = kTRUE;
4214  depth =20;
4215  }
4216 
4217  // particles to be excluded:
4218  // K0s - 310
4219  // K0l - 130
4220  // K+/- - 321
4221  // Lambda - 3122
4222  // Sigma0 - 3212
4223  // Sigma+/- - 3222, 3112
4224  // Cascades - 3322, 3312
4225  if (TMath::Abs(pdgCodeMother) == 310 || TMath::Abs(pdgCodeMother) == 130 || TMath::Abs(pdgCodeMother) == 321 ||
4226  TMath::Abs(pdgCodeMother) == 3122 || TMath::Abs(pdgCodeMother) == 3212 || TMath::Abs(pdgCodeMother) == 3222 ||
4227  TMath::Abs(pdgCodeMother) == 3112 || TMath::Abs(pdgCodeMother) == 3322 || TMath::Abs(pdgCodeMother) == 3312
4228  ) {
4229  foundExcludedPart = kTRUE;
4230  }
4231 // if (particle->GetPdgCode() == 22)cout << mother->GetPdgCode() << "\t" << source << "\t" << foundExcludedPart<< endl;
4232  pdgCodeMotherPPrevMother = pdgCodeMotherPrev;
4233  pdgCodeMotherPrev = pdgCodeMother;
4234  if (source == -1) depth = 20;
4235 
4236 // if (particle->GetPdgCode() == 22)cout << depth << endl;
4237  depth++;
4238  }
4239  }
4240  if (foundExcludedPart){
4241 // if (particle->GetPdgCode() == 22)cout << "This is definitely a secondary, manually excluded" << endl;
4242  return kFALSE;
4243  } else if (dalitzCand && realRadius3D < fSecProdBoundary ){
4244 // if (particle->GetPdgCode() == 22)cout << "This was a decay via a virtual photon" << endl;
4245  return kTRUE;
4246  } else if (foundShower){
4247 // if (particle->GetPdgCode() == 22)cout << "This is a shower" << endl;
4248  return kFALSE;
4249  } else if (realRadius3D >= fSecProdBoundary){
4250 // cout << "This is a secondary, to large production radius" << endl;
4251  return kFALSE;
4252  }
4253  }
4254 
4255  return kTRUE;
4256 }
4257 
4258 //_________________________________________________________________________
4259 Bool_t AliConvEventCuts::IsConversionPrimaryAOD(AliVEvent *event, AliAODMCParticle* AODMCParticle, Double_t prodVtxX, Double_t prodVtxY, Double_t prodVtxZ){
4260 
4261  TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(event->FindListObject(AliAODMCParticle::StdBranchName()));
4262  if (AODMCTrackArray == NULL) return kFALSE;
4263  AliAODMCParticle* currentParticle = AODMCParticle;
4264  if (TMath::Abs(currentParticle->GetPdgCode()) == 11 ){
4265  if (currentParticle->GetMother() != -1){
4266  AliAODMCParticle* particleMother = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(currentParticle->GetMother()));
4267  if (particleMother){
4268  if (TMath::Abs(particleMother->GetPdgCode()) == 22)
4269  currentParticle = particleMother;
4270  }
4271  }
4272  }
4273  if (currentParticle->GetMother() > -1){
4274  Double_t deltaX = currentParticle->Xv() - prodVtxX;
4275  Double_t deltaY = currentParticle->Yv() - prodVtxY;
4276  Double_t deltaZ = currentParticle->Zv() - prodVtxZ;
4277 
4278  //Double_t realRadius2D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY);
4279  Double_t realRadius3D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ);
4280 
4281  Bool_t dalitzCand = kFALSE;
4282 
4283  AliAODMCParticle* firstmother = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(currentParticle->GetMother()));
4284  if (!firstmother) return kFALSE;
4285  Int_t pdgCodeFirstMother = firstmother->GetPdgCode();
4286  Bool_t intDecay = kFALSE;
4287  if ( pdgCodeFirstMother == 111 || pdgCodeFirstMother == 221 ) intDecay = kTRUE;
4288  if ( intDecay && TMath::Abs(currentParticle->GetPdgCode()) == 11 ){
4289  dalitzCand = kTRUE;
4290 // cout << "dalitz candidate found" << endl;
4291  }
4292 
4293  Long_t source = currentParticle->GetMother();
4294  Bool_t foundExcludedPart = kFALSE;
4295  Bool_t foundShower = kFALSE;
4296  Int_t pdgCodeMotherPrev = 0;
4297  Int_t pdgCodeMotherPPrevMother = 0;
4298  Int_t depth = 0;
4299  if (dalitzCand || realRadius3D < fSecProdBoundary ){
4300 // if (currentParticle->GetPdgCode() == 22){
4301 // cout << endl << endl << "new particle: " << eventpos <<endl;
4302 // cout << currentParticle->GetPdgCode() << "\t" << currentParticle->R() << "\t" << realRadius2D << "\t" << realRadius3D << endl;
4303 // }
4304  while (depth < 20){
4305  AliAODMCParticle* mother = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(source));
4306  source = mother->GetMother();
4307 // if (currentParticle->GetPdgCode() == 22)cout << "eventposition: "<< source << endl;
4308  Int_t pdgCodeMother = mother->GetPdgCode();
4309 // if (currentParticle->GetPdgCode() == 22)cout << "Previous mothers: " << pdgCodeMother << "\t"<< pdgCodeMotherPrev<< "\t" << pdgCodeMotherPPrevMother << endl;
4310  if (pdgCodeMother == pdgCodeMotherPrev && pdgCodeMother == pdgCodeMotherPPrevMother) depth = 20;
4311  if (TMath::Abs(pdgCodeMother) == 11 && TMath::Abs(pdgCodeMotherPrev) == 22 && TMath::Abs(pdgCodeMotherPPrevMother) == 11 ){
4312  foundShower = kTRUE;
4313  depth =20;
4314  }
4315  if (TMath::Abs(pdgCodeMother) == 22 && TMath::Abs(pdgCodeMotherPrev) == 11 && TMath::Abs(pdgCodeMotherPPrevMother) == 22 ){
4316  foundShower = kTRUE;
4317  depth =20;
4318  }
4319 
4320  // particles to be excluded:
4321  // K0s - 310
4322  // K0l - 130
4323  // K+/- - 321
4324  // Lambda - 3122
4325  // Sigma0 - 3212
4326  // Sigma+/- - 3222, 3112
4327  // Cascades - 3322, 3312
4328  if (TMath::Abs(pdgCodeMother) == 310 || TMath::Abs(pdgCodeMother) == 130 || TMath::Abs(pdgCodeMother) == 321 ||
4329  TMath::Abs(pdgCodeMother) == 3122 || TMath::Abs(pdgCodeMother) == 3212 || TMath::Abs(pdgCodeMother) == 3222 ||
4330  TMath::Abs(pdgCodeMother) == 3112 || TMath::Abs(pdgCodeMother) == 3322 || TMath::Abs(pdgCodeMother) == 3312)
4331  {
4332  foundExcludedPart = kTRUE;
4333  }
4334 // if (currentParticle->GetPdgCode() == 22)cout << mother->GetPdgCode() << "\t" << source << "\t" << foundExcludedPart<< endl;
4335  pdgCodeMotherPPrevMother = pdgCodeMotherPrev;
4336  pdgCodeMotherPrev = pdgCodeMother;
4337  if (source == -1) depth = 20;
4338 
4339 // if (currentParticle->GetPdgCode() == 22)cout << depth << endl;
4340  depth++;
4341  }
4342  }
4343  if (foundExcludedPart){
4344 // if (currentParticle->GetPdgCode() == 22)cout << "This is definitely a secondary, manually excluded" << endl;
4345  return kFALSE;
4346  } else if (dalitzCand && realRadius3D < fSecProdBoundary ){
4347 // if (currentParticle->GetPdgCode() == 22)cout << "This was a decay via a virtual photon" << endl;
4348  return kTRUE;
4349  } else if (foundShower){
4350 // if (currentParticle->GetPdgCode() == 22)cout << "This is a shower" << endl;
4351  return kFALSE;
4352  } else if (realRadius3D >= fSecProdBoundary){
4353 // cout << "This is a secondary, too large production radius" << endl;
4354  return kFALSE;
4355  }
4356  }
4357 
4358  return kTRUE;
4359 }
4360 
4361 
4362 //________________________________________________________________________
4363 Int_t AliConvEventCuts::SecondaryClassificationPhoton( TParticle *particle, AliMCEvent* mcEvent, Bool_t isConversion ){
4364  if (particle != NULL && mcEvent != NULL){
4365  Int_t pdgSecondary = 0;
4366  if (!isConversion){
4367  //Bool_t hasMother = kFALSE;
4368  //Bool_t hasGrandMother = kFALSE;
4369  Long_t motherID = particle->GetMother(0);
4370  Long_t grandMotherID = -1;
4371  // is the photon a direct photons, without a mother?
4372  if (motherID > -1){
4373  //hasMother = kTRUE;
4374  grandMotherID = mcEvent->Particle(motherID)->GetMother(0);
4375  // is the meson a primary?
4376  if (grandMotherID > -1){
4377  //hasGrandMother = kTRUE;
4378  pdgSecondary = mcEvent->Particle(grandMotherID)->GetPdgCode();
4379  }
4380  }
4381  } else {
4382  //Bool_t hasMother = kFALSE;
4383  //Bool_t hasGrandMother = kFALSE;
4384  //Bool_t hasGreatGrandMother = kFALSE;
4385  Long_t motherID = particle->GetMother(0);
4386  Long_t grandMotherID = -1;
4387  Long_t greatGrandMotherID = -1;
4388  // is the electron a direct electron, without a mother?
4389  if (motherID > -1){
4390  //hasMother = kTRUE;
4391  grandMotherID = mcEvent->Particle(motherID)->GetMother(0);
4392  // is the photon a direct photons, without a mother?
4393  if (grandMotherID > -1){
4394  //hasGrandMother = kTRUE;
4395  greatGrandMotherID = mcEvent->Particle(grandMotherID)->GetMother(0);
4396  // is the meson a primary?
4397  if (greatGrandMotherID > -1){
4398  //hasGreatGrandMother = kTRUE;
4399  pdgSecondary = mcEvent->Particle(greatGrandMotherID)->GetPdgCode();
4400  }
4401  }
4402  }
4403  }
4404  // is the secondary photon from a lambda
4405  if (TMath::Abs(pdgSecondary) == 3122 )
4406  return 3;
4407  // is the secondary photon from a K0s
4408  else if ( TMath::Abs(pdgSecondary) == 310 )
4409  return 2;
4410  // is the secondary photon from a K0l
4411  else if ( TMath::Abs(pdgSecondary) == 130 )
4412  return 5;
4413  // is the secondary photon from a eta
4414  else if ( TMath::Abs(pdgSecondary) == 221 )
4415  return 4;
4416  // is the secondary photon from something else
4417  else if ( TMath::Abs(pdgSecondary) != 0 )
4418  return 1;
4419 
4420  }
4421 
4422  return 0;
4423 }
4424 
4425 //________________________________________________________________________
4426 Int_t AliConvEventCuts::SecondaryClassificationPhotonAOD( AliAODMCParticle *particle, TClonesArray *aodmcArray, Bool_t isConversion ){
4427  if (particle != NULL && aodmcArray != NULL){
4428  Int_t pdgSecondary = 0;
4429  if (!isConversion){
4430  //Bool_t hasMother = kFALSE;
4431  //Bool_t hasGrandMother = kFALSE;
4432  Long_t motherID = particle->GetMother();
4433  Long_t grandMotherID = -1;
4434  // is the photon a direct photons, without a mother?
4435  if (motherID > -1){
4436  //hasMother = kTRUE;
4437  grandMotherID = ((AliAODMCParticle*)aodmcArray->At(motherID))->GetMother();
4438  // is the meson a primary?
4439  if (grandMotherID > -1){
4440  //hasGrandMother = kTRUE;
4441  pdgSecondary = ((AliAODMCParticle*)aodmcArray->At(grandMotherID))->GetPdgCode();
4442  }
4443  }
4444  } else {
4445  //Bool_t hasMother = kFALSE;
4446  //Bool_t hasGrandMother = kFALSE;
4447  //Bool_t hasGreatGrandMother = kFALSE;
4448  Long_t motherID = particle->GetMother();
4449  Long_t grandMotherID = -1;
4450  Long_t greatGrandMotherID = -1;
4451  // is the electron a direct electron, without a mother?
4452  if (motherID > -1){
4453  //hasMother = kTRUE;
4454  grandMotherID = ((AliAODMCParticle*)aodmcArray->At(motherID))->GetMother();
4455  // is the photon a direct photons, without a mother?
4456  if (grandMotherID > -1){
4457  //hasGrandMother = kTRUE;
4458  greatGrandMotherID = ((AliAODMCParticle*)aodmcArray->At(grandMotherID))->GetMother();
4459  // is the meson a primary?
4460  if (greatGrandMotherID > -1){
4461  //hasGreatGrandMother = kTRUE;
4462  pdgSecondary = ((AliAODMCParticle*)aodmcArray->At(greatGrandMotherID))->GetPdgCode();
4463  }
4464  }
4465  }
4466  }
4467  // is the secondary photon from a lambda
4468  if (TMath::Abs(pdgSecondary) == 3122 )
4469  return 3;
4470  // is the secondary photon from a K0s
4471  else if ( TMath::Abs(pdgSecondary) == 310 )
4472  return 2;
4473  // is the secondary photon from a K0l
4474  else if ( TMath::Abs(pdgSecondary) == 130 )
4475  return 5;
4476  // is the secondary photon from a eta
4477  else if ( TMath::Abs(pdgSecondary) == 221 )
4478  return 4;
4479  // is the secondary photon from something else
4480  else if ( TMath::Abs(pdgSecondary) != 0 )
4481  return 1;
4482 
4483  }
4484 
4485  return 0;
4486 }
4487 
4489 
4490  if (periodName.CompareTo("") == 0){
4491  periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
4492  }
4493  if (periodName.CompareTo("") == 0) {
4495  fEnergyEnum = kUnset;
4496  AliError("No correct period could be set, periodName string empty");
4497  return;
4498  }
4499 
4500  // Data
4501  if (periodName.CompareTo("LHC10b") == 0 || periodName.CompareTo("LHC10c") == 0 || periodName.CompareTo("LHC10d") == 0 || periodName.CompareTo("LHC10e") == 0 ||
4502  periodName.CompareTo("LHC10f") == 0 || periodName.CompareTo("LHC10g") == 0 || periodName.CompareTo("LHC10bg") == 0
4503  ){
4505  fEnergyEnum = k7TeV;
4506  } else if (periodName.CompareTo("LHC10h") == 0) {
4507  fPeriodEnum = kLHC10h;
4509  } else if (periodName.CompareTo("LHC11a") == 0) {
4510  fPeriodEnum = kLHC11a;
4512  } else if (periodName.CompareTo("LHC11b") == 0) {
4513  fPeriodEnum = kLHC11b;
4514  fEnergyEnum = k7TeV;
4515  } else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 ||
4516  periodName.CompareTo("LHC11g") == 0
4517  ) {
4519  fEnergyEnum = k7TeV;
4520  } else if (periodName.CompareTo("LHC11h") == 0) {
4521  fPeriodEnum = kLHC11h;
4523  } else if (periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 ||
4524  periodName.CompareTo("LHC12e") == 0 || periodName.CompareTo("LHC12f") == 0 || periodName.CompareTo("LHC12g") == 0 || periodName.CompareTo("LHC12h") == 0 ||
4525  periodName.CompareTo("LHC12i") == 0 || periodName.CompareTo("LHC12ai") == 0
4526  ) {
4527  fPeriodEnum = kLHC12;
4528  fEnergyEnum = k8TeV;
4529  } else if (periodName.CompareTo("LHC13b") == 0 || periodName.CompareTo("LHC13c") == 0 || periodName.CompareTo("LHC13bc") == 0){
4532  } else if (periodName.CompareTo("LHC13d") == 0 || periodName.CompareTo("LHC13e") == 0 || periodName.CompareTo("LHC13de") == 0){
4535  } else if (periodName.CompareTo("LHC13f") == 0 ){
4536  fPeriodEnum = kLHC13f;
4538  } else if (periodName.CompareTo("LHC13g") == 0 ){
4539  fPeriodEnum = kLHC13g;
4541  } else if ( periodName.CompareTo("LHC15f") == 0 || periodName.CompareTo("LHC15g") == 0 || periodName.CompareTo("LHC15h") == 0 || periodName.CompareTo("LHC15i") == 0 ||
4542  periodName.CompareTo("LHC15j") == 0 || periodName.CompareTo("LHC15k") == 0 || periodName.CompareTo("LHC15l") == 0 || periodName.CompareTo("LHC15m") == 0 ||
4543  periodName.CompareTo("LHC15fm") == 0
4544  ) {
4546  fEnergyEnum = k13TeV;
4547  } else if (periodName.CompareTo("LHC15n") == 0 ){
4548  fPeriodEnum = kLHC15n;
4549  fEnergyEnum = k5TeV;
4550  } else if (periodName.CompareTo("LHC15o") == 0 ){
4551  fPeriodEnum = kLHC15o;
4553  } else if ( periodName.CompareTo("LHC16d") == 0 || periodName.CompareTo("LHC16e") == 0 || periodName.CompareTo("LHC16g") == 0 || periodName.CompareTo("LHC16h") == 0 ||
4554  periodName.CompareTo("LHC16i") == 0 || periodName.CompareTo("LHC16j") == 0 || periodName.CompareTo("LHC16k") == 0 || periodName.CompareTo("LHC16l") == 0 ||
4555  periodName.CompareTo("LHC16m") == 0 || periodName.CompareTo("LHC16n") == 0 || periodName.CompareTo("LHC16o") == 0 || periodName.CompareTo("LHC16p") == 0){
4557  fEnergyEnum = k13TeV;
4558  } else if (periodName.CompareTo("LHC16f") == 0 ){
4561  } else if (periodName.CompareTo("LHC16q") == 0 ){
4562  fPeriodEnum = kLHC16q;
4564  } else if (periodName.CompareTo("LHC16r") == 0 ){
4565  fPeriodEnum = kLHC16r;
4567  } else if (periodName.CompareTo("LHC16s") == 0 ){
4568  fPeriodEnum = kLHC16s;
4570  } else if (periodName.CompareTo("LHC16t") == 0 ){
4571  fPeriodEnum = kLHC16t;
4573  } else if ( periodName.CompareTo("LHC17c") == 0 || periodName.CompareTo("LHC17d") == 0 || periodName.CompareTo("LHC17e") == 0 || periodName.CompareTo("LHC17f") == 0 ||
4574  periodName.CompareTo("LHC17h") == 0 || periodName.CompareTo("LHC17i") == 0 || periodName.CompareTo("LHC17j") == 0 || periodName.CompareTo("LHC17k") == 0 ||
4575  periodName.CompareTo("LHC17l") == 0 || periodName.CompareTo("LHC17m") == 0 || periodName.CompareTo("LHC17o") == 0 ){
4577  fEnergyEnum = k13TeV;
4578  } else if ( periodName.CompareTo("LHC17g") == 0 ){
4581  } else if ( periodName.CompareTo("LHC17n") == 0 ){
4582  fPeriodEnum = kLHC17n;
4584  } else if ( periodName.CompareTo("LHC17p") == 0 ){
4585  fPeriodEnum = kLHC17p;
4586  fEnergyEnum = k5TeV;
4587  } else if ( periodName.CompareTo("LHC17q") == 0 ){
4588  fPeriodEnum = kLHC17q;
4589  fEnergyEnum = k5TeV;
4590 
4591  // LHC10x anchored MCs
4592  } else if (periodName.CompareTo("LHC10d1") == 0){
4594  fEnergyEnum = k7TeV;
4595  } else if (periodName.CompareTo("LHC10d2") == 0){
4597  fEnergyEnum = k7TeV;
4598  } else if (periodName.CompareTo("LHC10d4a") == 0){
4600  fEnergyEnum = k7TeV;
4601  } else if (periodName.CompareTo("LHC10d4") == 0){
4603  fEnergyEnum = k7TeV;
4604  } else if (periodName.CompareTo("LHC10e12") == 0){
4606  fEnergyEnum = k900GeV;
4607  } else if (periodName.CompareTo("LHC10e13") == 0){
4609  fEnergyEnum = k900GeV;
4610  } else if (periodName.CompareTo("LHC10e20") == 0){
4612  fEnergyEnum = k7TeV;
4613  } else if (periodName.CompareTo("LHC10e21") == 0){
4615  fEnergyEnum = k7TeV;
4616  } else if (periodName.CompareTo("LHC10f6a") == 0){
4618  fEnergyEnum = k7TeV;
4619  } else if (periodName.CompareTo("LHC10f6") == 0){
4621  fEnergyEnum = k7TeV;
4622  } else if (periodName.Contains("LHC14j4")){
4624  fEnergyEnum = k7TeV;
4625  } else if (periodName.CompareTo("LHC13d2") == 0){
4628  } else if (periodName.CompareTo("LHC13d2b") == 0){
4631  } else if (periodName.CompareTo("LHC12a11a") == 0){
4634  } else if (periodName.CompareTo("LHC12a11b") == 0){
4637  } else if (periodName.CompareTo("LHC12a11c") == 0){
4640  } else if (periodName.CompareTo("LHC12a11d") == 0){
4643  } else if (periodName.CompareTo("LHC12a11e") == 0){
4646  } else if (periodName.CompareTo("LHC12a11f") == 0){
4649  // LHC11x anchored MCs
4650  } else if (periodName.CompareTo("LHC12a15c") == 0){
4653  } else if (periodName.Contains("LHC12f1a") ){
4656  } else if (periodName.Contains("LHC12f1b") ){
4659  } else if (periodName.Contains("LHC12i3") ){
4662  } else if (periodName.CompareTo("LHC15g1a") == 0){
4665  } else if (periodName.CompareTo("LHC15g1b") == 0){
4668  } else if (periodName.CompareTo("LHC13e4") == 0){
4670  fEnergyEnum = k7TeV;
4671  } else if (periodName.CompareTo("LHC13e5") == 0){
4673  fEnergyEnum = k7TeV;
4674  } else if (periodName.CompareTo("LHC14k1a") == 0){
4676  fEnergyEnum = k7TeV;
4677  } else if (periodName.CompareTo("LHC14k1b") == 0){
4679  fEnergyEnum = k7TeV;
4680  } else if (periodName.CompareTo("LHC12a15f") == 0){
4682  fEnergyEnum = k7TeV;
4683  } else if (periodName.CompareTo("LHC12a15g") == 0){
4685  fEnergyEnum = k7TeV;
4686  } else if (periodName.CompareTo("LHC12f2a") == 0){
4688  fEnergyEnum = k7TeV;
4689  } else if (periodName.CompareTo("LHC14a1a") == 0){
4692  } else if (periodName.CompareTo("LHC14a1b") == 0){
4695  } else if (periodName.CompareTo("LHC14a1c") == 0){
4698  // LHC12x anchored MCs
4699  } else if (periodName.CompareTo("LHC14e2a") == 0){
4701  fEnergyEnum = k8TeV;
4702  } else if (periodName.CompareTo("LHC14e2b") == 0){
4704  fEnergyEnum = k8TeV;
4705  } else if (periodName.CompareTo("LHC14e2c") == 0){
4707  fEnergyEnum = k8TeV;
4708  } else if (periodName.Contains("LHC15h1")){
4710  fEnergyEnum = k8TeV;
4711  } else if (periodName.Contains("LHC15h2")){
4713  fEnergyEnum = k8TeV;
4714  } else if (periodName.CompareTo("LHC16c2") == 0){
4716  fEnergyEnum = k8TeV;
4717  } else if (periodName.CompareTo("LHC16c2_plus") == 0){
4719  fEnergyEnum = k8TeV;
4720  // LHC13x anchored MCs
4721  } else if (periodName.Contains("LHC13b2_efix")){
4724  } else if (periodName.CompareTo("LHC13e7") == 0){
4727  } else if (periodName.CompareTo("LHC14b2") == 0){
4730  } else if (periodName.CompareTo("LHC13b4_fix") == 0){
4733  } else if (periodName.CompareTo("LHC13b4_plus") == 0){
4736  } else if (periodName.CompareTo("LHC16c3a") == 0){
4739  } else if (periodName.CompareTo("LHC16c3b") == 0){
4742  } else if (periodName.CompareTo("LHC16c3c") == 0){
4745  } else if (periodName.CompareTo("LHC15g2") == 0){
4748  } else if (periodName.CompareTo("LHC15a3a") == 0){
4751  } else if (periodName.CompareTo("LHC15a3a_plus") == 0){
4754  } else if (periodName.CompareTo("LHC15a3b") == 0){
4757  } else if (periodName.CompareTo("LHC15d3a") == 0){
4760  } else if (periodName.CompareTo("LHC15d3b") == 0){
4763  // LHC15x anchored MCs
4764  } else if (periodName.CompareTo("LHC15g3a3") == 0){
4766  fEnergyEnum = k13TeV;
4767  } else if (periodName.CompareTo("LHC15g3a") == 0){
4769  fEnergyEnum = k13TeV;
4770  } else if (periodName.CompareTo("LHC15g3c2") == 0){
4772  fEnergyEnum = k13TeV;
4773  } else if (periodName.CompareTo("LHC15g3c3") == 0){
4775  fEnergyEnum = k13TeV;
4776  } else if (periodName.CompareTo("LHC15g3") == 0){
4778  fEnergyEnum = k13TeV;
4779  } else if (periodName.CompareTo("LHC16a2a") == 0){
4781  fEnergyEnum = k13TeV;
4782  } else if (periodName.CompareTo("LHC16a2b") == 0){
4784  fEnergyEnum = k13TeV;
4785  } else if (periodName.CompareTo("LHC16a2c") == 0){
4787  fEnergyEnum = k13TeV;
4788  } else if (periodName.CompareTo("LHC16d3") == 0){
4790  fEnergyEnum = k13TeV; //LHC15f
4791  } else if (periodName.CompareTo("LHC17i4") == 0){
4793  fEnergyEnum = k13TeV; //LHC15i
4794  } else if (periodName.CompareTo("LHC17g7") == 0){
4796  fEnergyEnum = k13TeV; //LHC15h
4797  } else if (periodName.CompareTo("LHC15l1a2") == 0){
4799  fEnergyEnum = k5TeV;
4800  } else if (periodName.CompareTo("LHC15l1b2") == 0){
4802  fEnergyEnum = k5TeV;
4803  } else if (periodName.CompareTo("LHC16h3") == 0){
4805  fEnergyEnum = k5TeV;
4806  } else if (periodName.CompareTo("LHC16h8a") == 0){
4808  fEnergyEnum = k5TeV;
4809  } else if (periodName.CompareTo("LHC16h8b") == 0){
4811  fEnergyEnum = k5TeV;
4812  } else if (periodName.CompareTo("LHC16k5a") == 0){
4814  fEnergyEnum = k5TeV;
4815  } else if (periodName.CompareTo("LHC16k5b") == 0){
4817  fEnergyEnum = k5TeV;
4818  } else if (periodName.CompareTo("LHC16k3a") == 0){
4820  fEnergyEnum = k5TeV;
4821  } else if (periodName.CompareTo("LHC16k3a2") == 0){
4823  fEnergyEnum = k5TeV;
4824  } else if (periodName.CompareTo("LHC17e2") == 0){
4826  fEnergyEnum = k5TeV;
4827  } else if (periodName.Contains("LHC15k1a1")){
4830  } else if (periodName.Contains("LHC15k1a2")){
4833  } else if (periodName.Contains("LHC15k1a3")){
4836  } else if (periodName.Contains("LHC16j7")){
4839  } else if (periodName.Contains("LHC16g1")){
4842  } else if (periodName.Contains("LHC16g1a")){
4845  } else if (periodName.Contains("LHC16g1b")){
4848  } else if (periodName.Contains("LHC16g1c")){
4851  } else if (periodName.Contains("LHC16g2")){
4854  } else if (periodName.Contains("LHC16g3")){
4857  } else if (periodName.Contains("LHC16h4")){
4860  } else if (periodName.Contains("LHC16i1a")){
4863  } else if (periodName.Contains("LHC16i1b")){
4866  } else if (periodName.Contains("LHC16i1c")){
4869  } else if (periodName.Contains("LHC16i2a")){
4872  } else if (periodName.Contains("LHC16i2b")){
4875  } else if (periodName.Contains("LHC16i2c")){
4878  } else if (periodName.Contains("LHC16i3a")){
4881  } else if (periodName.Contains("LHC16i3b")){
4884  } else if (periodName.Contains("LHC16i3c")){
4887  } else if (periodName.Contains("LHC16h2a")){
4890  } else if (periodName.Contains("LHC16h2b")){
4893  } else if (periodName.Contains("LHC16h2c")){
4896  } else if (periodName.CompareTo("LHC16k3b") == 0){
4899  } else if (periodName.CompareTo("LHC16k3b2") == 0){
4902  } else if ( periodName.CompareTo("LHC15k5a") == 0 || periodName.CompareTo("LHC15k5a2") == 0){
4904  fEnergyEnum = k13TeV;
4905  } else if ( periodName.CompareTo("LHC15k5b") == 0 || periodName.CompareTo("LHC15k5b2") == 0){
4907  fEnergyEnum = k13TeV;
4908  } else if ( periodName.CompareTo("LHC15k5c") == 0 || periodNam