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