1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Authors: Svein Lindal, Daniel Lohner *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 ////////////////////////////////////////////////
17 //---------------------------------------------
18 // Class handling all kinds of selection cuts for
19 // Gamma Conversion analysis
20 //---------------------------------------------
21 ////////////////////////////////////////////////
23 #include "AliConvEventCuts.h"
25 #include "AliAODTrack.h"
26 #include "AliESDtrack.h"
27 #include "AliAnalysisManager.h"
28 #include "AliInputEventHandler.h"
29 #include "AliMCEventHandler.h"
30 #include "AliAODHandler.h"
35 #include "TObjString.h"
36 #include "AliAODEvent.h"
37 #include "AliESDEvent.h"
38 #include "AliCentrality.h"
42 #include "AliGenCocktailEventHeader.h"
43 #include "AliGenDPMjetEventHeader.h"
44 #include "AliGenPythiaEventHeader.h"
45 #include "AliGenHijingEventHeader.h"
46 #include "AliTriggerAnalysis.h"
47 #include "AliV0ReaderV1.h"
48 #include "AliAODMCParticle.h"
49 #include "AliAODMCHeader.h"
55 ClassImp(AliConvEventCuts)
58 const char* AliConvEventCuts::fgkCutNames[AliConvEventCuts::kNCuts] = {
62 "SelectSpecialTrigger", //3
63 "SelectSpecialSubTriggerClass", //4
65 "RejectExtraSignals", //6
69 //________________________________________________________________________
70 AliConvEventCuts::AliConvEventCuts(const char *name,const char *title) :
71 AliAnalysisCuts(name,title),
76 fDetectorCentrality(0),
77 fModCentralityClass(0),
81 fMultiplicityMethod(0),
83 fSpecialSubTrigger(0),
84 fRemovePileUp(kFALSE),
85 fRejectExtraSignals(0),
86 fOfflineTriggerMask(0),
91 fNotRejectedStart(NULL),
92 fNotRejectedEnd(NULL),
93 fGeneratorNames(NULL),
98 fDoReweightHistoMCPi0(kFALSE),
99 fDoReweightHistoMCEta(kFALSE),
100 fDoReweightHistoMCK0s(kFALSE),
101 fPathTrFReweighting(""),
102 fNameHistoReweightingPi0(""),
103 fNameHistoReweightingEta(""),
104 fNameHistoReweightingK0s(""),
108 fHistoEventCuts(NULL),
110 hCentralityVsNumberOfPrimaryTracks(NULL),
113 hTriggerClassSelected(NULL),
114 hReweightMCHistPi0(NULL),
115 hReweightMCHistEta(NULL),
116 hReweightMCHistK0s(NULL),
120 fAddedSignalPDGCode(0),
122 fTriggerSelectedManually(kFALSE),
123 fSpecialTriggerName(""),
124 fSpecialSubTriggerName(""),
125 fNSpecialSubTriggerOptions(0),
128 fTriggerPatchInfo(NULL),
129 fMainTriggerPatchEMCAL(NULL),
130 fCaloTriggersName(""),
131 fCaloTriggerPatchInfoName(""),
133 fTriggersEMCALSelected(-1),
134 fEMCALTrigInitialized(kFALSE)
137 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
138 fCutString=new TObjString((GetCutNumber()).Data());
140 fUtils = new AliAnalysisUtils();
141 //if you do not want to apply the cut on the distance between the SPD and TRK vertex:
142 //fUtils->SetCutOnZVertexSPD(kFALSE);
147 //________________________________________________________________________
148 AliConvEventCuts::AliConvEventCuts(const AliConvEventCuts &ref) :
149 AliAnalysisCuts(ref),
151 fHeaderList(ref.fHeaderList),
152 fEventQuality(ref.fEventQuality),
153 fIsHeavyIon(ref.fIsHeavyIon),
154 fDetectorCentrality(ref.fDetectorCentrality),
155 fModCentralityClass(ref.fModCentralityClass),
156 fMaxVertexZ(ref.fMaxVertexZ),
157 fCentralityMin(ref.fCentralityMin),
158 fCentralityMax(ref.fCentralityMax),
159 fMultiplicityMethod(ref.fMultiplicityMethod),
160 fSpecialTrigger(ref.fSpecialTrigger),
161 fSpecialSubTrigger(ref.fSpecialSubTrigger),
162 fRemovePileUp(ref.fRemovePileUp),
163 fRejectExtraSignals(ref.fRejectExtraSignals),
164 fOfflineTriggerMask(ref.fOfflineTriggerMask),
165 fHasV0AND(ref.fHasV0AND),
166 fIsSDDFired(ref.fIsSDDFired),
167 fRandom(ref.fRandom),
168 fnHeaders(ref.fnHeaders),
169 fNotRejectedStart(NULL),
170 fNotRejectedEnd(NULL),
171 fGeneratorNames(ref.fGeneratorNames),
174 fEtaShift(ref.fEtaShift),
175 fDoEtaShift(ref.fDoEtaShift),
176 fDoReweightHistoMCPi0(ref.fDoReweightHistoMCPi0),
177 fDoReweightHistoMCEta(ref.fDoReweightHistoMCEta),
178 fDoReweightHistoMCK0s(ref.fDoReweightHistoMCK0s),
179 fPathTrFReweighting(ref.fPathTrFReweighting),
180 fNameHistoReweightingPi0(ref.fNameHistoReweightingPi0),
181 fNameHistoReweightingEta(ref.fNameHistoReweightingEta),
182 fNameHistoReweightingK0s(ref.fNameHistoReweightingK0s),
183 fNameFitDataPi0(ref.fNameFitDataPi0),
184 fNameFitDataEta(ref.fNameFitDataEta),
185 fNameFitDataK0s(ref.fNameFitDataK0s),
186 fHistoEventCuts(NULL),
188 hCentralityVsNumberOfPrimaryTracks(NULL),
191 hTriggerClassSelected(NULL),
192 hReweightMCHistPi0(ref.hReweightMCHistPi0),
193 hReweightMCHistEta(ref.hReweightMCHistEta),
194 hReweightMCHistK0s(ref.hReweightMCHistK0s),
195 fFitDataPi0(ref.fFitDataPi0),
196 fFitDataEta(ref.fFitDataEta),
197 fFitDataK0s(ref.fFitDataK0s),
198 fAddedSignalPDGCode(ref.fAddedSignalPDGCode),
199 fPreSelCut(ref.fPreSelCut),
200 fTriggerSelectedManually(ref.fTriggerSelectedManually),
201 fSpecialTriggerName(ref.fSpecialTriggerName),
202 fSpecialSubTriggerName(ref.fSpecialSubTriggerName),
203 fNSpecialSubTriggerOptions(ref.fNSpecialSubTriggerOptions),
204 fV0ReaderName(ref.fV0ReaderName),
206 fTriggerPatchInfo(NULL),
207 fMainTriggerPatchEMCAL(NULL),
208 fCaloTriggersName(ref.fCaloTriggersName),
209 fCaloTriggerPatchInfoName(ref.fCaloTriggerPatchInfoName),
210 fTriggersEMCAL(ref.fTriggersEMCAL),
211 fTriggersEMCALSelected(ref.fTriggersEMCALSelected),
212 fEMCALTrigInitialized(kFALSE)
215 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=ref.fCuts[jj];}
216 fCutString=new TObjString((GetCutNumber()).Data());
217 fUtils = new AliAnalysisUtils();
218 // dont copy histograms (if you like histograms, call InitCutHistograms())
223 //________________________________________________________________________
224 AliConvEventCuts::~AliConvEventCuts() {
226 //Deleting fHistograms leads to seg fault it it's added to output collection of a task
228 // delete fHistograms;
229 // fHistograms = NULL;
230 if(fCutString != NULL){
234 if(fNotRejectedStart){
235 delete[] fNotRejectedStart;
236 fNotRejectedStart = NULL;
239 delete[] fNotRejectedEnd;
240 fNotRejectedEnd = NULL;
243 delete[] fGeneratorNames;
244 fGeneratorNames = NULL;
253 //________________________________________________________________________
254 void AliConvEventCuts::InitCutHistograms(TString name, Bool_t preCut){
256 // Initialize Cut Histograms for QA (only initialized and filled if function is called)
257 TH1::AddDirectory(kFALSE);
259 if(fHistograms != NULL){
263 if(fHistograms==NULL){
264 fHistograms=new TList();
265 fHistograms->SetOwner(kTRUE);
266 if(name=="")fHistograms->SetName(Form("ConvEventCuts_%s",GetCutNumber().Data()));
267 else fHistograms->SetName(Form("%s_%s",name.Data(),GetCutNumber().Data()));
270 if (hReweightMCHistPi0){
271 hReweightMCHistPi0->SetName("MCInputForWeightingPi0");
272 fHistograms->Add(hReweightMCHistPi0);
274 if (hReweightMCHistEta){
275 hReweightMCHistEta->SetName("MCInputForWeightingEta");
276 fHistograms->Add(hReweightMCHistEta);
278 if (hReweightMCHistK0s){
279 hReweightMCHistK0s->SetName("MCInputForWeightingK0s");
280 fHistograms->Add(hReweightMCHistK0s);
283 hCentrality=new TH1F(Form("Centrality %s",GetCutNumber().Data()),"Centrality",100,0,100);
284 fHistograms->Add(hCentrality);
285 hCentralityVsNumberOfPrimaryTracks=new TH2F(Form("Centrality vs Primary Tracks %s",GetCutNumber().Data()),"Centrality vs Primary Tracks ",100,0,100,4000,0,4000);
286 fHistograms->Add(hCentralityVsNumberOfPrimaryTracks);
288 // Event Cuts and Info
290 fHistoEventCuts=new TH1F(Form("ESD_EventCuts %s",GetCutNumber().Data()),"Event Cuts",7,-0.5,6.5);
291 fHistoEventCuts->GetXaxis()->SetBinLabel(1,"in");
292 fHistoEventCuts->GetXaxis()->SetBinLabel(2,"OfflineTrigger");
293 fHistoEventCuts->GetXaxis()->SetBinLabel(3,"nvtxcontr");
294 fHistoEventCuts->GetXaxis()->SetBinLabel(4,"VertexZ");
295 fHistoEventCuts->GetXaxis()->SetBinLabel(5,"pileup");
296 fHistoEventCuts->GetXaxis()->SetBinLabel(6,"centrsel");
297 fHistoEventCuts->GetXaxis()->SetBinLabel(7,"out");
298 fHistograms->Add(fHistoEventCuts);
300 hVertexZ=new TH1F(Form("VertexZ %s",GetCutNumber().Data()),"VertexZ",1000,-50,50);
301 fHistograms->Add(hVertexZ);
303 hTriggerClass= new TH1F(Form("OfflineTrigger %s",GetCutNumber().Data()),"OfflineTrigger",35,-0.5,34.5);
304 hTriggerClass->GetXaxis()->SetBinLabel( 1,"kMB");
305 hTriggerClass->GetXaxis()->SetBinLabel( 2,"kINT7");
306 hTriggerClass->GetXaxis()->SetBinLabel( 3,"kMUON");
307 hTriggerClass->GetXaxis()->SetBinLabel( 4,"kHighMult");
308 hTriggerClass->GetXaxis()->SetBinLabel( 5,"kKEMC1");
309 hTriggerClass->GetXaxis()->SetBinLabel( 6,"kCINT5");
310 hTriggerClass->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
311 hTriggerClass->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
312 hTriggerClass->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
313 hTriggerClass->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
314 hTriggerClass->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
315 hTriggerClass->GetXaxis()->SetBinLabel(12,"kMUS7");
316 hTriggerClass->GetXaxis()->SetBinLabel(13,"kPHI1");
317 hTriggerClass->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
318 hTriggerClass->GetXaxis()->SetBinLabel(15,"kEMCEJE");
319 hTriggerClass->GetXaxis()->SetBinLabel(16,"kEMCEGA");
320 hTriggerClass->GetXaxis()->SetBinLabel(17,"kCentral");
321 hTriggerClass->GetXaxis()->SetBinLabel(18,"kSemiCentral");
322 hTriggerClass->GetXaxis()->SetBinLabel(19,"kDG5");
323 hTriggerClass->GetXaxis()->SetBinLabel(20,"kZED");
324 hTriggerClass->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
325 hTriggerClass->GetXaxis()->SetBinLabel(22,"kINT8");
326 hTriggerClass->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
327 hTriggerClass->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
328 hTriggerClass->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
329 hTriggerClass->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
330 hTriggerClass->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
331 hTriggerClass->GetXaxis()->SetBinLabel(28,"kUserDefined");
332 hTriggerClass->GetXaxis()->SetBinLabel(29,"kTRD");
333 hTriggerClass->GetXaxis()->SetBinLabel(30,"kFastOnly");
334 hTriggerClass->GetXaxis()->SetBinLabel(31,"kAnyINT");
335 hTriggerClass->GetXaxis()->SetBinLabel(32,"kAny");
336 hTriggerClass->GetXaxis()->SetBinLabel(33,"V0AND");
337 hTriggerClass->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
338 hTriggerClass->GetXaxis()->SetBinLabel(35,"failed Physics Selection");
339 fHistograms->Add(hTriggerClass);
342 hTriggerClassSelected= new TH1F(Form("OfflineTriggerSelected %s",GetCutNumber().Data()),"OfflineTriggerSelected",34,-0.5,33.5);
343 hTriggerClassSelected->GetXaxis()->SetBinLabel( 1,"kMB");
344 hTriggerClassSelected->GetXaxis()->SetBinLabel( 2,"kINT7");
345 hTriggerClassSelected->GetXaxis()->SetBinLabel( 3,"kMUON");
346 hTriggerClassSelected->GetXaxis()->SetBinLabel( 4,"kHighMult");
347 hTriggerClassSelected->GetXaxis()->SetBinLabel( 5,"kKEMC1");
348 hTriggerClassSelected->GetXaxis()->SetBinLabel( 6,"kCINT5");
349 hTriggerClassSelected->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
350 hTriggerClassSelected->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
351 hTriggerClassSelected->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
352 hTriggerClassSelected->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
353 hTriggerClassSelected->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
354 hTriggerClassSelected->GetXaxis()->SetBinLabel(12,"kMUS7");
355 hTriggerClassSelected->GetXaxis()->SetBinLabel(13,"kPHI1");
356 hTriggerClassSelected->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
357 hTriggerClassSelected->GetXaxis()->SetBinLabel(15,"kEMCEJE");
358 hTriggerClassSelected->GetXaxis()->SetBinLabel(16,"kEMCEGA");
359 hTriggerClassSelected->GetXaxis()->SetBinLabel(17,"kCentral");
360 hTriggerClassSelected->GetXaxis()->SetBinLabel(18,"kSemiCentral");
361 hTriggerClassSelected->GetXaxis()->SetBinLabel(19,"kDG5");
362 hTriggerClassSelected->GetXaxis()->SetBinLabel(20,"kZED");
363 hTriggerClassSelected->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
364 hTriggerClassSelected->GetXaxis()->SetBinLabel(22,"kINT8");
365 hTriggerClassSelected->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
366 hTriggerClassSelected->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
367 hTriggerClassSelected->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
368 hTriggerClassSelected->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
369 hTriggerClassSelected->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
370 hTriggerClassSelected->GetXaxis()->SetBinLabel(28,"kUserDefined");
371 hTriggerClassSelected->GetXaxis()->SetBinLabel(29,"kTRD");
372 hTriggerClassSelected->GetXaxis()->SetBinLabel(30,"kFastOnly");
373 hTriggerClassSelected->GetXaxis()->SetBinLabel(31,"kAnyINT");
374 hTriggerClassSelected->GetXaxis()->SetBinLabel(32,"kAny");
375 hTriggerClassSelected->GetXaxis()->SetBinLabel(33,"V0AND");
376 hTriggerClassSelected->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
377 fHistograms->Add(hTriggerClassSelected);
380 TH1::AddDirectory(kTRUE);
383 ///________________________________________________________________________
384 Bool_t AliConvEventCuts::EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent){
385 // Process Event Selection
388 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
391 // Check for MC event
392 Bool_t isMC = kFALSE;
393 if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
394 // Check if MC event is correctly loaded
395 AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
400 if (!mcHandler->InitOk() ){
404 if (!mcHandler->TreeK() ){
408 if (!mcHandler->TreeTR() ) {
418 // cout << "before event trigger" << endl;
419 if(!IsTriggerSelected(fInputEvent, isMC )){
420 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
426 if(fInputEvent->IsA()==AliESDEvent::Class()){
427 AliTriggerAnalysis fTriggerAnalysis;// = new AliTriggerAnalysis;
428 fHasV0AND = fTriggerAnalysis.IsOfflineTriggerFired((AliESDEvent*)fInputEvent, AliTriggerAnalysis::kV0AND);
429 if(fHasV0AND&&hTriggerClass)hTriggerClass->Fill(32);
431 // cout << "event number " << ((AliESDEvent*)fInputEvent)->GetEventNumberInFile() << " entered"<< endl;
434 // Number of Contributors Cut
435 if(GetNumberOfContributorsVtx(fInputEvent)<=0) {
436 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
442 // Z Vertex Position Cut
443 if(!VertexZCut(fInputEvent)){
444 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
453 if(fInputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
454 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
461 // Centrality Selection
462 if(!IsCentralitySelected(fInputEvent,fMCEvent)){
463 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
469 // Fill Event Histograms
470 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
471 if(hVertexZ)hVertexZ->Fill(fInputEvent->GetPrimaryVertex()->GetZ());
472 if(hCentrality)hCentrality->Fill(GetCentrality(fInputEvent));
473 if(hCentralityVsNumberOfPrimaryTracks)
474 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(fInputEvent),
475 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
476 ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
481 ///________________________________________________________________________
482 Bool_t AliConvEventCuts::UpdateCutString() {
483 ///Update the cut string (if it has been created yet)
485 if(fCutString && fCutString->GetString().Length() == kNCuts) {
486 fCutString->SetString(GetCutNumber());
493 ///________________________________________________________________________
494 void AliConvEventCuts::LoadReweightingHistosMCFromFile() {
496 AliInfo("Entering loading of histograms for weighting");
497 TFile *f = TFile::Open(fPathTrFReweighting.Data());
499 AliError(Form("file for weighting %s not found",fPathTrFReweighting.Data()));
502 if (fNameHistoReweightingPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
503 cout << "I have to find: " << fNameHistoReweightingPi0.Data() << endl;
504 TH1D *hReweightMCHistPi0temp = (TH1D*)f->Get(fNameHistoReweightingPi0.Data());
505 hReweightMCHistPi0 = new TH1D(*hReweightMCHistPi0temp);
506 if (hReweightMCHistPi0) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingPi0.Data(),fPathTrFReweighting.Data() ));
507 else AliWarning(Form("%s not found in %s", fNameHistoReweightingPi0.Data() ,fPathTrFReweighting.Data()));
508 hReweightMCHistPi0->SetDirectory(0);
510 if (fNameFitDataPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
511 cout << "I have to find: " << fNameFitDataPi0.Data() << endl;
512 TF1 *fFitDataPi0temp = (TF1*)f->Get(fNameFitDataPi0.Data());
513 fFitDataPi0 = new TF1(*fFitDataPi0temp);
514 if (fFitDataPi0) AliInfo(Form("%s has been loaded from %s", fNameFitDataPi0.Data(),fPathTrFReweighting.Data() ));
515 else AliWarning(Form("%s not found in %s",fPathTrFReweighting.Data(), fNameFitDataPi0.Data() ));
518 if (fNameHistoReweightingEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
519 cout << "I have to find: " << fNameHistoReweightingEta.Data() << endl;
520 TH1D *hReweightMCHistEtatemp = (TH1D*)f->Get(fNameHistoReweightingEta.Data());
521 hReweightMCHistEta = new TH1D(*hReweightMCHistEtatemp);
522 if (hReweightMCHistEta) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
523 else AliWarning(Form("%s not found in %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
524 hReweightMCHistEta->SetDirectory(0);
527 if (fNameFitDataEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
528 cout << "I have to find: " << fNameFitDataEta.Data() << endl;
529 TF1 *fFitDataEtatemp = (TF1*)f->Get(fNameFitDataEta.Data());
530 fFitDataEta = new TF1(*fFitDataEtatemp);
531 if (fFitDataEta) AliInfo(Form("%s has been loaded from %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
532 else AliWarning(Form("%s not found in %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
535 if (fNameHistoReweightingK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
536 cout << "I have to find: " << fNameHistoReweightingK0s.Data() << endl;
537 TH1D *hReweightMCHistK0stemp = (TH1D*)f->Get(fNameHistoReweightingK0s.Data());
538 hReweightMCHistK0s = new TH1D(*hReweightMCHistK0stemp);
539 if (hReweightMCHistK0s) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
540 else AliWarning(Form("%s not found in %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
541 hReweightMCHistK0s->SetDirectory(0);
544 if (fNameFitDataK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
545 cout << "I have to find: " << fNameFitDataK0s.Data() << endl;
546 TF1 *fFitDataK0stemp = (TF1*)f->Get(fNameFitDataK0s.Data());
547 fFitDataK0s = new TF1(*fFitDataK0stemp);
548 if (fFitDataK0s) AliInfo(Form("%s has been loaded from %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
549 else AliWarning(Form("%s not found in %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
556 ///________________________________________________________________________
557 Bool_t AliConvEventCuts::InitializeCutsFromCutString(const TString analysisCutSelection ) {
558 // Initialize Cuts from a given Cut string
559 if(fDoReweightHistoMCPi0 || fDoReweightHistoMCEta || fDoReweightHistoMCK0s) {
560 AliInfo("Weighting was enabled");
561 LoadReweightingHistosMCFromFile();
564 AliInfo(Form("Set Event Cut Number: %s",analysisCutSelection.Data()));
565 if(analysisCutSelection.Length()!=kNCuts) {
566 AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));
569 if(!analysisCutSelection.IsDigit()){
570 AliError("Cut selection contains characters");
574 if (fV0ReaderName.CompareTo("") == 0){
575 fV0ReaderName = "V0ReaderV1";
577 const char *cutSelection = analysisCutSelection.Data();
578 #define ASSIGNARRAY(i) fCuts[i] = cutSelection[i] - '0'
579 for(Int_t ii=0;ii<kNCuts;ii++){
583 // Set Individual Cuts
584 for(Int_t ii=0;ii<kNCuts;ii++){
585 if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
588 PrintCutsWithValues();
593 ///________________________________________________________________________
594 Bool_t AliConvEventCuts::SetCut(cutIds cutID, const Int_t value) {
595 ///Set individual cut ID
599 if( SetRemovePileUp(value)) {
600 fCuts[kremovePileUp] = value;
603 } else return kFALSE;
604 case kSelectSpecialTriggerAlias:
605 if( SetSelectSpecialTrigger(value)) {
606 fCuts[kSelectSpecialTriggerAlias] = value;
609 } else return kFALSE;
610 case kSelectSubTriggerClass:
611 if( SetSelectSubTriggerClass(value)) {
612 fCuts[kSelectSubTriggerClass] = value;
615 } else return kFALSE;
617 if( SetIsHeavyIon(value)) {
618 fCuts[kisHeavyIon] = value;
621 } else return kFALSE;
623 if( SetCentralityMin(value)) {
624 fCuts[kCentralityMin] = value;
627 } else return kFALSE;
629 if( SetCentralityMax(value)) {
630 fCuts[kCentralityMax] = value;
633 } else return kFALSE;
635 if( SetRejectExtraSignalsCut(value)) {
636 fCuts[kExtraSignals] = value;
639 } else return kFALSE;
641 AliError("Cut id out of range");
645 AliError("Cut id %d not recognized");
649 ///________________________________________________________________________
650 void AliConvEventCuts::PrintCuts() {
651 // Print out current Cut Selection
652 for(Int_t ic = 0; ic < kNCuts; ic++) {
653 printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]);
657 void AliConvEventCuts::PrintCutsWithValues() {
658 // Print out current Cut Selection with value
659 printf("\nEvent cutnumber \n");
660 for(Int_t ic = 0; ic < kNCuts; ic++) {
661 printf("%d",fCuts[ic]);
665 if (fIsHeavyIon == 0) {
666 printf("Running in pp mode \n");
667 if (fSpecialTrigger == 0){
668 printf("\t only events triggered by V0OR will be analysed \n");
669 } else if (fSpecialTrigger == 1){
670 printf("\t only events triggered by V0AND will be analysed \n");
671 } else if (fSpecialTrigger == 2){
672 printf("\t only events where SDD was present will be analysed \n");
673 } else if (fSpecialTrigger == 3){
674 printf("\t only events where SDD was present will be analysed and triggered by VOAND\n");
675 } else if (fSpecialTrigger > 3){
676 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
678 } else if (fIsHeavyIon == 1){
679 printf("Running in PbPb mode \n");
680 if (fDetectorCentrality == 0){
681 printf("\t centrality selection based on V0M \n");
682 } else if (fDetectorCentrality == 1){
683 printf("\t centrality selection based on Cl1 \n");
685 if (fModCentralityClass == 0){
686 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
687 } else if ( fModCentralityClass == 1){
688 printf("\t %d - %d \n", fCentralityMin*5, fCentralityMax*5);
689 } else if ( fModCentralityClass == 2){
690 printf("\t %d - %d \n", fCentralityMin*5+45, fCentralityMax*5+45);
691 } else if (fModCentralityClass == 3){
692 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*10, fCentralityMax*10);
693 } else if ( fModCentralityClass == 4){
694 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5, fCentralityMax*5);
695 } else if ( fModCentralityClass == 5){
696 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5+45, fCentralityMax*5+45);
698 if (fSpecialTrigger == 0){
699 printf("\t only events triggered by kMB, kCentral, kSemiCentral will be analysed \n");
700 } else if (fSpecialTrigger > 4){
701 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
703 } else if (fIsHeavyIon == 2){
704 printf("Running in pPb mode \n");
705 if (fDetectorCentrality == 0){
706 printf("\t centrality selection based on V0A \n");
707 } else if (fDetectorCentrality == 1){
708 printf("\t centrality selection based on Cl1 \n");
710 if (fModCentralityClass == 0){
711 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
713 if (fSpecialTrigger == 0){
714 printf("\t only events triggered by kINT7 will be analysed \n");
715 } else if (fSpecialTrigger > 4){
716 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
719 printf("MC event cuts: \n");
720 if (fRejectExtraSignals == 0) printf("\t no rejection was applied \n");
721 else if (fRejectExtraSignals == 1) printf("\t only MB header will be inspected \n");
722 else if (fRejectExtraSignals > 1) printf("\t special header have been selected \n");
725 ///________________________________________________________________________
726 Bool_t AliConvEventCuts::SetIsHeavyIon(Int_t isHeavyIon)
734 fDetectorCentrality=0;
738 fDetectorCentrality=1;
740 case 3: //allows to select centrality 0-45% in steps of 5% for V0 Multiplicity
742 fDetectorCentrality=0;
743 fModCentralityClass=1;
745 case 4: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
747 fDetectorCentrality=0;
748 fModCentralityClass=2;
750 case 5: //strict cut on v0 tracks for MC
752 fDetectorCentrality=0;
753 fModCentralityClass=3;
755 case 6: //allows to select centrality 0-45% in steps of 5% for track mult
756 //strict cut on v0 tracks for MC
758 fDetectorCentrality=0;
759 fModCentralityClass=4;
761 case 7: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
762 //strict cut on v0 tracks for MC
764 fDetectorCentrality=0;
765 fModCentralityClass=5;
769 fDetectorCentrality=0;
773 fDetectorCentrality=1;
776 AliError(Form("SetHeavyIon not defined %d",isHeavyIon));
782 //___________________________________________________________________
783 Bool_t AliConvEventCuts::SetCentralityMin(Int_t minCentrality)
786 if(minCentrality<0||minCentrality>9){
787 AliError(Form("minCentrality not defined %d",minCentrality));
791 fCentralityMin=minCentrality;
795 //___________________________________________________________________
796 Bool_t AliConvEventCuts::SetCentralityMax(Int_t maxCentrality)
799 if(maxCentrality<0||maxCentrality>9){
800 AliError(Form("maxCentrality not defined %d",maxCentrality));
803 fCentralityMax=maxCentrality;
807 ///________________________________________________________________________
808 Bool_t AliConvEventCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
811 switch(selectSpecialTrigger){
813 fSpecialTrigger=0; // dont care
816 fSpecialTrigger=1; // V0AND
819 fSpecialTrigger=2; // with SDD requested
822 fSpecialTrigger=3; // V0AND plus with SDD requested
824 // allows to run MB & 6 other different trigger classes in parallel with the same photon cut
826 fSpecialTrigger=4; // trigger alias kTRD
827 fOfflineTriggerMask=AliVEvent::kTRD;
828 fTriggerSelectedManually = kTRUE;
829 fSpecialTriggerName="AliVEvent::kTRD";
832 fSpecialTrigger=5; // trigger alias kEMC
833 fOfflineTriggerMask=AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMC1 ;
834 fTriggerSelectedManually = kTRUE;
835 fTriggersEMCALSelected= 0;
836 SETBIT(fTriggersEMCALSelected, kL0);
837 fSpecialTriggerName="AliVEvent::kEMC7/kEMC8/kEMC1";
840 fSpecialTrigger=6; // trigger alias kPHI
841 fOfflineTriggerMask=AliVEvent::kPHI7 | AliVEvent::kPHI1 | AliVEvent::kPHI8 | AliVEvent::kPHOSPb;
842 fTriggerSelectedManually = kTRUE;
843 fSpecialTriggerName="AliVEvent::kPHI7/kPHI1/kPHI8/kPHOSPb";
846 fSpecialTrigger=7; // trigger alias kHighMult
847 fOfflineTriggerMask=AliVEvent::kHighMult;
848 fTriggerSelectedManually = kTRUE;
849 fSpecialTriggerName="AliVEvent::kHighMult";
852 fSpecialTrigger=8; // trigger alias kEMCEGA
853 fOfflineTriggerMask=AliVEvent::kEMCEGA;
854 fTriggerSelectedManually = kTRUE;
855 fTriggersEMCALSelected= 0;
856 SETBIT(fTriggersEMCALSelected, kG2);
857 fSpecialTriggerName="AliVEvent::kEMCEGA";
860 fSpecialTrigger=9; // trigger alias kEMCEJE
861 fOfflineTriggerMask=AliVEvent::kEMCEJE;
862 fTriggerSelectedManually = kTRUE;
863 fTriggersEMCALSelected= 0;
864 SETBIT(fTriggersEMCALSelected, kJ2);
865 fSpecialTriggerName="AliVEvent::kEMCEJE";
868 AliError("Warning: Special Trigger Not known");
874 ///________________________________________________________________________
875 Bool_t AliConvEventCuts::SetSelectSubTriggerClass(Int_t selectSpecialSubTriggerClass)
878 if (fSpecialTrigger == 1){ //V0AND with different detectors
879 switch(selectSpecialSubTriggerClass){
882 fSpecialSubTrigger=0;
883 // AliInfo("Info: Nothing to be done");
887 fSpecialSubTrigger=0;
888 fOfflineTriggerMask=AliVEvent::kINT8;
889 fTriggerSelectedManually = kTRUE;
890 fSpecialTriggerName="AliVEvent::kINT8";
893 AliError("Warning: Special Subtrigger Class Not known");
897 } else if (fSpecialTrigger == 4){ // Subdivision of TRD trigger classes
898 switch(selectSpecialSubTriggerClass){
899 case 0: // all together
900 fSpecialSubTrigger=0;
901 fSpecialSubTriggerName="";
902 // AliInfo("Info: Nothing to be done");
904 case 1: // 7WUHSH - V0AND with single electron in TRD & EMCAL
905 fSpecialSubTrigger=1;
906 fNSpecialSubTriggerOptions=1;
907 fSpecialSubTriggerName="7WUHEE";
909 case 2: // 8WUHSH - T0AND with single electron in TRD & EMCAL
910 fSpecialSubTrigger=1;
911 fNSpecialSubTriggerOptions=1;
912 fSpecialSubTriggerName="8WUHEE";
914 case 3: // 7WUHSE - V0AND with single high pt electron in TRD
915 fSpecialSubTrigger=1;
916 fNSpecialSubTriggerOptions=1;
917 fSpecialSubTriggerName="7WUHSE";
919 case 4: // 8WUHSE - T0AND with single high pt electron in TRD
920 fSpecialSubTrigger=1;
921 fNSpecialSubTriggerOptions=1;
922 fSpecialSubTriggerName="8WUHSE";
924 case 5: // 7WUHJE - V0AND with jet in TRD
925 fSpecialSubTrigger=1;
926 fNSpecialSubTriggerOptions=1;
927 fSpecialSubTriggerName="7WUHJT";
929 case 6: // 8WUHJE - T0AND with jet in TRD
930 fSpecialSubTrigger=1;
931 fNSpecialSubTriggerOptions=1;
932 fSpecialSubTriggerName="8WUHJT";
934 case 7: // 7WUHQU - V0AND with dielectron pair in TRD
935 fSpecialSubTrigger=1;
936 fNSpecialSubTriggerOptions=1;
937 fSpecialSubTriggerName="7WUHQU";
939 case 8: // 8WUHQU - T0AND with dielectron pair in TRD
940 fSpecialSubTrigger=1;
941 fNSpecialSubTriggerOptions=1;
942 fSpecialSubTriggerName="8WUHQU";
945 AliError("Warning: Special Subtrigger Class Not known");
948 } else if (fSpecialTrigger == 5){ // Subdivision of kEMC trigger classes
949 switch(selectSpecialSubTriggerClass){
950 case 0: // all together
951 fSpecialSubTrigger=0;
952 fSpecialSubTriggerName="";
953 // AliInfo("Info: Nothing to be done");
955 case 1: // CEMC1 - V0OR and EMCAL fired
956 fOfflineTriggerMask=AliVEvent::kEMC1;
957 fSpecialTriggerName="AliVEvent::kEMC1";
958 fSpecialSubTrigger=1;
959 fNSpecialSubTriggerOptions=1;
960 fSpecialSubTriggerName="CEMC1";
962 case 2: // CEMC7 - V0AND and EMCAL fired
963 fSpecialSubTrigger=1;
964 fOfflineTriggerMask=AliVEvent::kEMC7;
965 fSpecialTriggerName="AliVEvent::kEMC7";
966 fNSpecialSubTriggerOptions=1;
967 fSpecialSubTriggerName="CEMC7";
969 case 3: // CEMC8 - T0OR and EMCAL fired
970 fOfflineTriggerMask=AliVEvent::kEMC8;
971 fSpecialTriggerName="AliVEvent::kEMC8";
972 fSpecialSubTrigger=1;
973 fNSpecialSubTriggerOptions=1;
974 fSpecialSubTriggerName="CEMC8";
977 AliError("Warning: Special Subtrigger Class Not known");
980 } else if (fSpecialTrigger == 6){ // Subdivision of kPHI trigger classes
981 switch(selectSpecialSubTriggerClass){
982 case 0: // all together
983 fSpecialSubTrigger=0;
984 fSpecialSubTriggerName="";
985 // AliInfo("Info: Nothing to be done");
987 case 1: // CEMC1 - V0OR and EMCAL fired
988 fOfflineTriggerMask=AliVEvent::kPHI1;
989 fSpecialTriggerName="AliVEvent::kPHI1";
990 fSpecialSubTrigger=1;
991 fNSpecialSubTriggerOptions=1;
992 fSpecialSubTriggerName="CPHI1";
994 case 2: // CEMC7 - V0AND and EMCAL fired
995 fSpecialSubTrigger=1;
996 fOfflineTriggerMask=AliVEvent::kPHI7;
997 fSpecialTriggerName="AliVEvent::kPHI7";
998 fNSpecialSubTriggerOptions=1;
999 fSpecialSubTriggerName="CPHI7";
1001 case 3: // CEMC8 - T0OR and EMCAL fired
1002 fOfflineTriggerMask=AliVEvent::kPHI8;
1003 fSpecialTriggerName="AliVEvent::kPHI8";
1004 fSpecialSubTrigger=1;
1005 fNSpecialSubTriggerOptions=1;
1006 fSpecialSubTriggerName="CPHI8";
1009 AliError("Warning: Special Subtrigger Class Not known");
1012 } else if (fSpecialTrigger == 7){ // Subdivision of kHighMult trigger classes
1013 switch(selectSpecialSubTriggerClass){
1014 case 0: // all together
1015 fSpecialSubTrigger=0;
1016 fSpecialSubTriggerName="";
1017 // AliInfo("Info: Nothing to be done");
1019 case 1: // CSHM1 - V0OR and high mult fired
1020 fSpecialSubTrigger=1;
1021 fNSpecialSubTriggerOptions=1;
1022 fSpecialSubTriggerName="CSHM1";
1024 case 2: // CSHM7 - V0AND and high mult fired
1025 fSpecialSubTrigger=1;
1026 fNSpecialSubTriggerOptions=1;
1027 fSpecialSubTriggerName="CSHM7";
1029 case 3: // CSHM8 - T0OR and high mult fired
1030 fSpecialSubTrigger=1;
1031 fNSpecialSubTriggerOptions=1;
1032 fSpecialSubTriggerName="CSHM8";
1035 AliError("Warning: Special Subtrigger Class Not known");
1038 } else if (fSpecialTrigger == 8){ // Subdivision of kEMCEGA trigger classes
1039 switch(selectSpecialSubTriggerClass){
1040 case 0: // all together
1041 fSpecialSubTrigger=0;
1042 fSpecialSubTriggerName="";
1043 // AliInfo("Info: Nothing to be done");
1045 case 1: // 7EGA - CINT7 EGA
1046 fSpecialSubTrigger=1;
1047 fNSpecialSubTriggerOptions=1;
1048 fSpecialSubTriggerName="7EGA";
1049 fTriggersEMCALSelected= 0;
1050 SETBIT(fTriggersEMCALSelected, kG2);
1052 case 2: // 8EGA - CINT8 EGA
1053 fSpecialSubTrigger=1;
1054 fNSpecialSubTriggerOptions=1;
1055 fSpecialSubTriggerName="8EGA";
1056 fTriggersEMCALSelected= 0;
1057 SETBIT(fTriggersEMCALSelected, kG2);
1059 case 3: // 7EG1 - CINT7 EG1
1060 fSpecialSubTrigger=1;
1061 fNSpecialSubTriggerOptions=1;
1062 fSpecialSubTriggerName="7EG1";
1063 fTriggersEMCALSelected= 0;
1064 SETBIT(fTriggersEMCALSelected, kG1);
1066 case 4: // 8EG1 - CINT8 EG1
1067 fSpecialSubTrigger=1;
1068 fNSpecialSubTriggerOptions=1;
1069 fSpecialSubTriggerName="8EG1";
1070 fTriggersEMCALSelected= 0;
1071 SETBIT(fTriggersEMCALSelected, kG1);
1073 case 5: // 7EG2 - CINT7 EG2
1074 fSpecialSubTrigger=1;
1075 fNSpecialSubTriggerOptions=1;
1076 fSpecialSubTriggerName="7EG2";
1077 fTriggersEMCALSelected= 0;
1078 SETBIT(fTriggersEMCALSelected, kG2);
1080 case 6: // 8EG2 - CINT8 EG2
1081 fSpecialSubTrigger=1;
1082 fNSpecialSubTriggerOptions=1;
1083 fSpecialSubTriggerName="8EG2";
1084 fTriggersEMCALSelected= 0;
1085 SETBIT(fTriggersEMCALSelected, kG2);
1088 AliError("Warning: Special Subtrigger Class Not known");
1091 } else if (fSpecialTrigger == 9){ // Subdivision of kEMCEGA trigger classes
1092 switch(selectSpecialSubTriggerClass){
1093 case 0: // all together
1094 fSpecialSubTrigger=0;
1095 fSpecialSubTriggerName="";
1096 // AliInfo("Info: Nothing to be done");
1098 case 1: // 7EJE - CINT7 EJE
1099 fSpecialSubTrigger=1;
1100 fNSpecialSubTriggerOptions=1;
1101 fSpecialSubTriggerName="7EJE";
1102 fTriggersEMCALSelected= 0;
1103 SETBIT(fTriggersEMCALSelected, kJ2);
1105 case 2: // 8EJE - CINT8 EJE
1106 fSpecialSubTrigger=1;
1107 fNSpecialSubTriggerOptions=1;
1108 fSpecialSubTriggerName="8EJE";
1109 fTriggersEMCALSelected= 0;
1110 SETBIT(fTriggersEMCALSelected, kJ2);
1112 case 3: // 7EJ1 - CINT7 EJ1
1113 fSpecialSubTrigger=1;
1114 fNSpecialSubTriggerOptions=1;
1115 fSpecialSubTriggerName="7EJ1";
1116 fTriggersEMCALSelected= 0;
1117 SETBIT(fTriggersEMCALSelected, kJ1);
1119 case 4: // 8EJ1 - CINT8 EJ1
1120 fSpecialSubTrigger=1;
1121 fNSpecialSubTriggerOptions=1;
1122 fSpecialSubTriggerName="8EJ1";
1123 fTriggersEMCALSelected= 0;
1124 SETBIT(fTriggersEMCALSelected, kJ1);
1126 case 5: // 7EJ2 - CINT7 EJ2
1127 fSpecialSubTrigger=1;
1128 fNSpecialSubTriggerOptions=1;
1129 fSpecialSubTriggerName="7EJ2";
1130 fTriggersEMCALSelected= 0;
1131 SETBIT(fTriggersEMCALSelected, kJ2);
1133 case 6: // 8EJ2 - CINT8 EJ2
1134 fSpecialSubTrigger=1;
1135 fNSpecialSubTriggerOptions=1;
1136 fSpecialSubTriggerName="8EJ2";
1137 fTriggersEMCALSelected= 0;
1138 SETBIT(fTriggersEMCALSelected, kJ2);
1141 AliError("Warning: Special Subtrigger Class Not known");
1148 ///________________________________________________________________________
1149 Bool_t AliConvEventCuts::SetMultiplicityMethod(Int_t multiplicityMethod)
1152 fMultiplicityMethod=multiplicityMethod;
1154 // 0 Photon Multiplicity
1155 // 1 TPC Track multiplicity
1162 ///________________________________________________________________________
1163 Bool_t AliConvEventCuts::SetRemovePileUp(Int_t removePileUp)
1165 switch(removePileUp){
1167 fRemovePileUp=kFALSE;
1170 fRemovePileUp=kTRUE;
1173 AliError("RemovePileUpCut not defined");
1179 ///________________________________________________________________________
1180 Bool_t AliConvEventCuts::SetRejectExtraSignalsCut(Int_t extraSignal) {
1182 switch(extraSignal){
1184 fRejectExtraSignals = 0;
1185 break; // No Rejection
1187 fRejectExtraSignals = 1;
1188 break; // MinBias Header
1190 fRejectExtraSignals = 2;
1191 break; // User String Array
1193 fRejectExtraSignals = 3;
1194 break; // Rejection for Gamma Correction only
1196 AliError(Form("Extra Signal Rejection not defined %d",extraSignal));
1202 //-------------------------------------------------------------
1203 Double_t AliConvEventCuts::GetCentrality(AliVEvent *event)
1204 { // Get Event Centrality
1206 AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
1208 AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
1209 if(fDetectorCentrality==0){
1210 if (fIsHeavyIon==2){
1211 return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
1213 return fESDCentrality->GetCentralityPercentile("V0M"); // default
1216 if(fDetectorCentrality==1){
1217 return fESDCentrality->GetCentralityPercentile("CL1");
1221 AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
1223 if(aodEvent->GetHeader()){return aodEvent->GetHeader()->GetCentrality();}
1229 //_____________________________________________________________________________________
1230 Bool_t AliConvEventCuts::IsCentralitySelected(AliVEvent *event, AliVEvent *fMCEvent)
1231 { // Centrality Selection
1232 if(!fIsHeavyIon)return kTRUE;
1234 if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
1235 else if(fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-100%
1237 Double_t centrality=GetCentrality(event);
1238 if(centrality<0)return kFALSE;
1240 Int_t centralityC=0;
1241 if (fModCentralityClass == 0){
1242 centralityC= Int_t(centrality/10);
1243 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1247 else if (fModCentralityClass ==1){
1248 centralityC= Int_t(centrality);
1249 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1251 } else return kFALSE;
1253 else if (fModCentralityClass ==2){
1254 centralityC= Int_t(centrality);
1255 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1260 Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
1261 Int_t PrimaryTracks10[10][2] =
1274 Int_t PrimaryTracks5a[10][2] =
1287 Int_t PrimaryTracks5b[10][2] =
1301 if(event->IsA()==AliESDEvent::Class()) column = 0;
1302 if(event->IsA()==AliAODEvent::Class()) column = 1;
1304 if (fModCentralityClass == 3){
1306 if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
1311 centralityC= Int_t(centrality/10);
1312 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1317 else if (fModCentralityClass ==4){
1319 if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
1324 centralityC= Int_t(centrality);
1325 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1327 } else return kFALSE;
1330 else if (fModCentralityClass ==5){
1332 if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
1337 centralityC= Int_t(centrality);
1338 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1347 ///________________________________________________________________________
1348 Bool_t AliConvEventCuts::VertexZCut(AliVEvent *event){
1349 // Cut on z position of primary vertex
1350 Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
1351 Double_t fVertexZSPD = 0;
1352 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1354 fVertexZSPD = fESDEvent->GetPrimaryVertexSPD()->GetZ();
1356 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1358 fVertexZSPD = fAODEvent->GetPrimaryVertexSPD()->GetZ();
1361 if(abs(fVertexZ)>fMaxVertexZ)return kFALSE;
1363 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
1364 ->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1365 if (periodName.CompareTo("LHC11h")==0){
1366 if (abs(fVertexZ-fVertexZSPD) > 0.1) return kFALSE;
1368 if (fIsHeavyIon == 2){
1369 if(fUtils->IsFirstEventInChunk(event)) return kFALSE;
1370 if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
1371 if(fUtils->IsPileUpEvent(event)) return kFALSE;
1377 ///________________________________________________________________________
1378 Int_t AliConvEventCuts::GetNumberOfContributorsVtx(AliVEvent *event){
1379 // returns number of contributors to the vertex
1381 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1383 if (fESDEvent->GetPrimaryVertex() != NULL){
1384 if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
1385 // cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
1386 return fESDEvent->GetPrimaryVertex()->GetNContributors();
1390 if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
1391 if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1392 // cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
1393 return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
1395 AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
1396 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1402 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1404 if (fAODEvent->GetPrimaryVertex() != NULL){
1405 if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
1406 return fAODEvent->GetPrimaryVertex()->GetNContributors();
1409 if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
1410 if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1411 return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
1413 AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
1418 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1423 ///________________________________________________________________________
1424 Bool_t AliConvEventCuts::IsTriggerSelected(AliVEvent *fInputEvent, Bool_t isMC)
1427 AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1430 UInt_t isSelected = AliVEvent::kAny;
1431 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1432 // cout << periodName.Data() << endl;
1434 if (fInputHandler==NULL) return kFALSE;
1435 if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
1437 TString firedTrigClass = fInputEvent->GetFiredTriggerClasses();
1438 if (!fTriggerSelectedManually){
1439 if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
1441 if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
1442 else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
1443 else if (periodName.CompareTo("LHC11c") == 0 || periodName.CompareTo("LHC11d") == 0 || periodName.CompareTo("LHC11e") == 0 || periodName.CompareTo("LHC11f") == 0 || periodName.CompareTo("LHC11g") == 0 || periodName.CompareTo("LHC12a") == 0 || periodName.CompareTo("LHC12b") == 0 || periodName.CompareTo("LHC12c") == 0 || periodName.CompareTo("LHC12d") == 0 || periodName.CompareTo("LHC12f") == 0 || periodName.CompareTo("LHC12g") == 0 || periodName.CompareTo("LHC12h") == 0 || periodName.CompareTo("LHC12i") == 0 ||periodName.CompareTo("LHC13g") == 0 ) {
1444 fOfflineTriggerMask = AliVEvent::kINT7;
1445 // cout << "will take kINT7 as trigger mask" << endl;
1447 else fOfflineTriggerMask = AliVEvent::kMB;
1450 // Get the actual offline trigger mask for the event and AND it with the
1451 // requested mask. If no mask requested select by default the event.
1452 // if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
1453 // else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
1455 if (isMC) fOfflineTriggerMask = AliVEvent::kAny;
1457 if (fOfflineTriggerMask){
1458 isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
1460 if (isSelected && !fPreSelCut){
1461 // cout << "Special trigger: "<< fSpecialTrigger << " initialized " << fEMCALTrigInitialized << endl;
1462 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1463 if (!fEMCALTrigInitialized ) InitializeEMCALTrigger(fInputEvent);
1464 fTriggersEMCAL= GetTriggerList();
1466 if (fSpecialSubTrigger>0 && !isMC){
1467 if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
1469 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1471 // if (fTriggersEMCAL > 0)cout << "Special Trigger " << fSpecialTrigger << " triggers: " << fTriggersEMCAL << " selected triggers: " << fTriggersEMCALSelected << " run number: " <<fInputEvent->GetRunNumber()<<endl;
1472 if (fTriggersEMCAL&fTriggersEMCALSelected){
1473 // cout << "accepted ++++++++++++++++++++" << endl;
1481 fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
1485 if (fIsSDDFired) hTriggerClass->Fill(33);
1486 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
1487 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
1488 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
1489 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
1490 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
1491 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
1492 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
1493 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
1494 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
1495 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
1496 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
1497 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
1498 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
1499 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
1500 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
1501 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
1502 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
1503 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
1504 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
1505 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
1506 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
1507 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
1508 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
1509 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
1510 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
1511 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
1512 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
1513 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
1514 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
1515 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
1516 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
1517 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
1518 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
1519 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
1520 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
1521 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
1522 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
1523 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
1524 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
1525 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
1526 if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
1529 if(hTriggerClassSelected && isSelected){
1530 if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
1531 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
1532 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
1533 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
1534 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
1535 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
1536 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
1537 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
1538 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
1539 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
1540 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
1541 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
1542 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
1543 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
1544 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
1545 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
1546 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
1547 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
1548 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
1549 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
1550 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
1551 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
1552 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
1553 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
1554 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
1555 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
1556 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
1557 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
1558 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
1559 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
1560 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
1561 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
1562 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
1563 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
1564 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
1565 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
1566 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
1567 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
1568 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
1569 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
1570 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
1573 if(!isSelected)return kFALSE;
1578 ///________________________________________________________________________
1579 TString AliConvEventCuts::GetCutNumber(){
1580 // returns TString with current cut number
1582 for(Int_t ii=0;ii<kNCuts;ii++){
1583 a.Append(Form("%d",fCuts[ii]));
1588 ///________________________________________________________________________
1589 void AliConvEventCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent){
1591 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1594 if(fNotRejectedStart){
1595 delete[] fNotRejectedStart;
1596 fNotRejectedStart = NULL;
1598 if(fNotRejectedEnd){
1599 delete[] fNotRejectedEnd;
1600 fNotRejectedEnd = NULL;
1602 if(fGeneratorNames){
1603 delete[] fGeneratorNames;
1604 fGeneratorNames = NULL;
1607 if(rejection == 0) return; // No Rejection
1609 AliGenCocktailEventHeader *cHeader = 0x0;
1610 AliAODMCHeader *cHeaderAOD = 0x0;
1611 Bool_t headerFound = kFALSE;
1612 AliStack *fMCStack = 0x0;
1613 TClonesArray *fMCStackAOD = 0x0;
1614 if(MCEvent->IsA()==AliMCEvent::Class()){
1615 cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1616 if(cHeader) headerFound = kTRUE;
1617 if(dynamic_cast<AliMCEvent*>(MCEvent))fMCStack = dynamic_cast<AliStack*>(dynamic_cast<AliMCEvent*>(MCEvent)->Stack());
1619 if(MCEvent->IsA()==AliAODEvent::Class()){ // MCEvent is a AODEvent in case of AOD
1620 cHeaderAOD = dynamic_cast<AliAODMCHeader*>(MCEvent->FindListObject(AliAODMCHeader::StdBranchName()));
1621 fMCStackAOD = dynamic_cast<TClonesArray*>(MCEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1624 if(cHeaderAOD) headerFound = kTRUE;
1628 TList *genHeaders = 0x0;
1629 if(cHeader) genHeaders = cHeader->GetHeaders();
1631 genHeaders = cHeaderAOD->GetCocktailHeaders();
1632 if(genHeaders->GetEntries()==1){
1633 SetRejectExtraSignalsCut(0);
1637 AliGenEventHeader* gh = 0;
1639 Int_t firstindexA = 0;
1640 Int_t lastindexA = -1;
1641 if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
1642 if(rejection == 2){ // TList of Headers Names
1643 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1644 gh = (AliGenEventHeader*)genHeaders->At(i);
1645 TString GeneratorName = gh->GetName();
1646 lastindexA = lastindexA + gh->NProduced();
1647 // cout << i << "\t" << GeneratorName.Data() << endl;
1648 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1649 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
1650 // cout << GeneratorInList.Data() << endl;
1651 if(GeneratorName.CompareTo(GeneratorInList) == 0){
1652 // cout << "accepted" << endl;
1653 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1655 if (fMCStack->Particle(firstindexA)->GetPdgCode() == fAddedSignalPDGCode ) {
1656 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1657 if (gh->NProduced() > 10 && fMCStack->Particle(firstindexA+10)->GetPdgCode() == fAddedSignalPDGCode ){
1658 // cout << "cond 1: "<< fnHeaders << endl;
1664 // cout << "cond 2: " << fnHeaders << endl;
1671 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA));
1672 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1673 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1674 if (gh->NProduced() > 10){
1675 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA+10));
1676 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1677 // cout << "cond 1: " << fnHeaders << endl;
1684 // cout << "cond 2: " << fnHeaders << endl;
1692 // cout << "cond 3: "<< fnHeaders << endl;
1697 firstindexA = firstindexA + gh->NProduced();
1700 // cout << "number of headers: " <<fnHeaders << endl;
1702 fNotRejectedStart = new Int_t[fnHeaders];
1703 fNotRejectedEnd = new Int_t[fnHeaders];
1704 fGeneratorNames = new TString[fnHeaders];
1706 if(rejection == 1 || rejection == 3){
1707 fNotRejectedStart[0] = 0;
1708 fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
1709 fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
1713 Int_t firstindex = 0;
1714 Int_t lastindex = -1;
1717 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1718 gh = (AliGenEventHeader*)genHeaders->At(i);
1719 TString GeneratorName = gh->GetName();
1720 lastindex = lastindex + gh->NProduced();
1721 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1722 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
1723 // cout << i << "\t" << GeneratorName.Data() << endl;
1724 if(GeneratorName.CompareTo(GeneratorInList) == 0){
1725 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1727 if (fMCStack->Particle(firstindex)->GetPdgCode() == fAddedSignalPDGCode ) {
1728 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1729 // cout << "produced " << gh->NProduced() << " with box generator" << endl;
1730 if (gh->NProduced() > 10 && fMCStack->Particle(firstindex+10)->GetPdgCode() == fAddedSignalPDGCode){
1731 // cout << "one of them was a pi0 or eta" << endl;
1732 fNotRejectedStart[number] = firstindex;
1733 fNotRejectedEnd[number] = lastindex;
1734 fGeneratorNames[number] = GeneratorName;
1736 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1740 fNotRejectedStart[number] = firstindex;
1741 fNotRejectedEnd[number] = lastindex;
1742 fGeneratorNames[number] = GeneratorName;
1749 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex));
1750 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1751 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1752 if (gh->NProduced() > 10) {
1753 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex+10));
1754 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1755 fNotRejectedEnd[number] = lastindex;
1756 fNotRejectedStart[number] = firstindex;
1757 fGeneratorNames[number] = GeneratorName;
1763 fNotRejectedStart[number] = firstindex;
1764 fNotRejectedEnd[number] = lastindex;
1765 fGeneratorNames[number] = GeneratorName;
1773 fNotRejectedStart[number] = firstindex;
1774 fNotRejectedEnd[number] = lastindex;
1775 fGeneratorNames[number] = GeneratorName;
1776 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1783 firstindex = firstindex + gh->NProduced();
1785 // for (Int_t i = 0; i < number; i++){
1786 // cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
1789 } else { // No Cocktail Header Found
1790 fNotRejectedStart = new Int_t[1];
1791 fNotRejectedEnd = new Int_t[1];
1794 fNotRejectedStart[0] = 0;
1795 fNotRejectedEnd[0] = static_cast<AliMCEvent*>(MCEvent)->Stack()->GetNprimary()-1;
1796 fGeneratorNames = new TString[1];
1797 fGeneratorNames[0] = "NoCocktailGeneratorFound";
1799 AliGenPythiaEventHeader *mcHeaderPythia = dynamic_cast<AliGenPythiaEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1800 if (mcHeaderPythia) fGeneratorNames[0] = "NoCocktailGeneratorFound_Pythia";
1801 AliGenDPMjetEventHeader *mcHeaderPhojet = dynamic_cast<AliGenDPMjetEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1802 if (mcHeaderPhojet) fGeneratorNames[0] = "NoCocktailGeneratorFound_Phojet";
1803 AliGenHijingEventHeader *mcHeaderHijing = dynamic_cast<AliGenHijingEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1804 if (mcHeaderHijing) fGeneratorNames[0] = "NoCocktailGeneratorFound_Hijing";
1806 SetRejectExtraSignalsCut(0);
1811 //_________________________________________________________________________
1812 Int_t AliConvEventCuts::IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
1814 // Not Accepted == kFALSE == 0
1815 // Accepted == kTRUE == 1
1816 // FirstHeader == kTRUE == 3
1817 if(index < 0) return 0; // No Particle
1819 // if (index == 100){
1820 // cout << "possible headers" << endl;
1821 // for(Int_t i = 0;i<fnHeaders;i++){
1822 // cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
1826 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
1827 if( index >= MCStack->GetNprimary()){ // Secondary Particle
1828 if( ((TParticle*)MCStack->Particle(index))->GetMother(0) < 0) return 1; // Secondary Particle without Mother??
1829 return IsParticleFromBGEvent(((TParticle*)MCStack->Particle(index))->GetMother(0),MCStack,InputEvent);
1831 for(Int_t i = 0;i<fnHeaders;i++){
1832 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1834 if(i == 0) accepted = 2; // MB Header
1838 else if(InputEvent->IsA()==AliAODEvent::Class()){
1839 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1840 if (AODMCTrackArray){
1841 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
1842 if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
1843 if(!aodMCParticle->IsPrimary()){
1844 if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
1845 return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
1847 index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
1848 for(Int_t i = 0;i<fnHeaders;i++){
1849 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1851 if(i == 0) accepted = 2; // MB Header
1860 //_________________________________________________________________________
1861 Int_t AliConvEventCuts::IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon){
1863 Bool_t isMC = kFALSE;
1864 if (MCEvent){isMC = kTRUE;}
1866 if ( !IsTriggerSelected(InputEvent, isMC) )
1869 if(isHeavyIon != 0 && !(IsCentralitySelected(InputEvent,MCEvent)))
1870 return 1; // Check Centrality --> Not Accepted => eventQuality = 1
1872 if(isHeavyIon == 0 && GetIsFromPileup()){
1873 if(InputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
1874 return 6; // Check Pileup --> Not Accepted => eventQuality = 6
1878 Bool_t hasV0And = ReaderCuts->HasV0AND();
1879 Bool_t isSDDFired = ReaderCuts->IsSDDFired();
1880 if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !MCEvent)
1881 return 7; // With SDD requested but no fired
1883 if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
1884 return 8; // V0AND requested but no fired
1886 if(hCentrality)hCentrality->Fill(GetCentrality(InputEvent));
1887 if(hCentralityVsNumberOfPrimaryTracks)
1888 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(InputEvent),
1889 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
1890 ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
1895 //_________________________________________________________________________
1896 Float_t AliConvEventCuts::GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
1897 if (!(period.CompareTo("LHC12f1a") == 0 || period.CompareTo("LHC12f1b") == 0 || period.CompareTo("LHC12i3") == 0 || period.CompareTo("LHC11a10a") == 0 || period.CompareTo("LHC11a10b") == 0 || period.CompareTo("LHC11a10b_bis") == 0 || period.CompareTo("LHC11a10a_bis") == 0 || period.CompareTo("LHC11a10b_plus") == 0 || period.Contains("LHC13d2")|| period.Contains("LHC14a1") ||
1898 period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.CompareTo("LHC14b2") == 0 )) return 1.;
1901 for (Int_t i = 0; i < fnHeaders; i++){
1902 if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
1903 if (fGeneratorNames[i].CompareTo("Pythia") == 0){
1905 } else if (fGeneratorNames[i].CompareTo("DPMJET") == 0){
1907 } else if (fGeneratorNames[i].CompareTo("HIJING") == 0 ||
1908 fGeneratorNames[i].CompareTo("Hijing") == 0 ||
1909 fGeneratorNames[i].Contains("hijing")){
1911 } else if (fGeneratorNames[i].CompareTo("BOX") == 0){
1913 } else if (fGeneratorNames[i].CompareTo("PARAM") == 0){
1915 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound") == 0){
1917 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Pythia") == 0){
1919 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Phojet") == 0){
1921 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Hijing") == 0){
1924 if (period.Contains("LHC13d2") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.Contains("LHC14a1") || period.CompareTo("LHC14b2") == 0 ){
1929 if (kCaseGen == 0) return 1;
1932 Double_t mesonPt = 0;
1933 Double_t mesonMass = 0;
1935 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
1936 mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
1937 mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
1938 PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
1940 else if(InputEvent->IsA()==AliAODEvent::Class()){
1941 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1942 if (AODMCTrackArray){
1943 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
1944 mesonPt = aodMCParticle->Pt();
1945 mesonMass = aodMCParticle->GetCalcMass();
1946 PDGCode = aodMCParticle->GetPdgCode();
1952 Float_t functionResultMC = 1.;
1953 if (kCaseGen == 1){ // Pythia 6
1954 Float_t dNdyMC = 2.1462;
1955 Float_t nMC = 7.06055;
1956 Float_t tMC = 0.12533;
1957 if ( PDGCode == 111){
1961 } else if ( PDGCode == 221){
1966 functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
1967 } else if (kCaseGen == 2){ // Phojet
1968 Float_t dNdyMC = 2.35978;
1969 Float_t nMC = 6.81795;
1970 Float_t tMC = 0.11492;
1971 if ( PDGCode == 111){
1975 } else if ( PDGCode == 221){
1980 functionResultMC = dNdyMC / ( 2 * TMath::Pi())*(nMC-1.)*(nMC-2.) / (nMC*tMC*(nMC*tMC+mesonMass*(nMC-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nMC*tMC), -nMC);
1981 } else if (kCaseGen == 4){ // BOX generators pp
1982 // functionResultMC = 1./sqrt(1.-mesonMass*mesonMass/((mesonMass*mesonMass+mesonPt*mesonPt)*cosh(mesonY)*cosh(mesonY)));
1983 Float_t a = 0.23437;
1985 Float_t c = -1430.5863;
1986 Float_t d = -0.6966624;
1987 Float_t e = 252.3742;
1988 if ( PDGCode == 111){
1994 } else if ( PDGCode == 221){
2001 functionResultMC = a*TMath::Power(mesonPt,-1.*(b+c/(TMath::Power(mesonPt,d)+e)))*1./mesonPt *1./1.6 *1./(2.* TMath::Pi());
2002 // cout << functionResultMC << endl;
2003 } else if (kCaseGen == 3 ){ // HIJING
2004 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
2005 functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
2007 if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
2008 functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
2010 if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
2011 functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
2015 Float_t functionResultData = 1;
2016 if (kCaseGen == 1 || kCaseGen == 2 || kCaseGen == 4 ){
2017 Float_t dNdyData = 2.2328;
2018 Float_t nData = 7.1473;
2019 Float_t tData = 0.1346;
2020 if ( PDGCode == 111){
2024 } else if ( PDGCode == 221){
2025 dNdyData = 0.38992; //be careful this fit is not optimal, eta in data still has problems
2029 functionResultData = dNdyData / ( 2 * TMath::Pi())*(nData-1.)*(nData-2.) / (nData*tData*(nData*tData+mesonMass*(nData-2.))) * TMath::Power(1.+(TMath::Sqrt(mesonPt*mesonPt+mesonMass*mesonMass)-mesonMass)/(nData*tData), -nData);
2030 // cout << functionResultData << endl;
2032 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
2033 functionResultData = fFitDataPi0->Eval(mesonPt);
2035 if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
2036 functionResultData = fFitDataEta->Eval(mesonPt);
2038 if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
2039 functionResultData = fFitDataK0s->Eval(mesonPt);
2044 Double_t weight = 1;
2045 if (PDGCode == 111 || PDGCode == 221){
2046 if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
2047 weight = functionResultData/functionResultMC;
2048 if ( kCaseGen == 3){
2049 if (PDGCode == 111){
2050 if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
2054 if (PDGCode == 221){
2055 if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
2060 if (!isfinite(functionResultData)) weight = 1.;
2061 if (!isfinite(weight)) weight = 1.;
2063 } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
2064 weight = functionResultMC;
2067 // if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6 && PDGCode == 111){
2068 // cout << period.Data() << "\t" << kCaseGen << "\t" <<fModCentralityClass<< "\t" <<fCentralityMin<< "\t" <<fCentralityMax << "\t" << mesonPt << "\t" <<mesonMass<< "\t"<<functionResultData << "\t"<< functionResultMC << "\t" << weight <<endl;
2074 ///________________________________________________________________________
2075 void AliConvEventCuts::GetCorrectEtaShiftFromPeriod(TString periodName){
2077 if(periodName.CompareTo("LHC12g") == 0 || //pilot run 2012
2078 periodName.CompareTo("LHC13b") == 0 || //mainly minimum bias
2079 periodName.CompareTo("LHC13c") == 0 || //mainly minimum bias
2080 periodName.CompareTo("LHC13d") == 0 || //mainly triggered
2081 periodName.CompareTo("LHC13e") == 0 || //mainly triggered
2082 periodName.CompareTo("LHC13c3") == 0 || //MC Starlight, anchor LHC13d+e
2083 periodName.CompareTo("LHC13c2") == 0 || //MC Starlight, coherent J/Psi, UPC muon anchor LHC13d+e
2084 periodName.CompareTo("LHC13b4") == 0 || //MC Pythia 6 (Jet-Jet), anchor LHC13b
2085 periodName.CompareTo("LHC13b2_fix_1") == 0 || //MC DPMJET, anchr LHC13b+c
2086 periodName.CompareTo("LHC13b2_efix_p1") == 0 || //MC DPMJET, anchr LHC13b+c
2087 periodName.CompareTo("LHC13b2_efix_p2") == 0 || //MC DPMJET, anchr LHC13b+c
2088 periodName.CompareTo("LHC13b2_efix_p3") == 0 || //MC DPMJET, anchr LHC13b+c
2089 periodName.CompareTo("LHC13b2_efix_p4") == 0 || //MC DPMJET, anchr LHC13b+c
2090 periodName.CompareTo("LHC13e7") == 0 || //MC DPMJET, anchr LHC13b+c
2091 periodName.CompareTo("LHC13b3") == 0 || //MC HIJING, weighted to number of events per run, anchor LHC13b
2092 periodName.CompareTo("LHC13b2") == 0 || // MC DPMJET, wrong energy, anchor LHC13b
2093 periodName.CompareTo("LHC13b2_plus") == 0 || // MC DPMJET, weighted to number event per run, anchor LHC13b
2094 periodName.CompareTo("LHC13c1_bis") == 0 || // MC AMPT fast generation, pT hardbin, anchor ?
2095 periodName.CompareTo("LHC13c1") == 0 || // MC AMPT fast generation, anchor ?
2096 periodName.CompareTo("LHC13b1") == 0 || // MC DPMJET, fragments, with fixed label 0, anchor LHC12g
2097 periodName.CompareTo("LHC12g4b_fix") == 0 || // MC DPMJET, with fixed label 0, anchor LHC12g
2098 periodName.CompareTo("LHC12g1_fix") == 0 || // MC ?, with fixed label 0, anchor LHC12g
2099 periodName.CompareTo("LHC12g4c") == 0 || // MC DPMJET, shifted vertex runs, anchor LHC12g
2100 periodName.CompareTo("LHC12h6") == 0 || // MC muon cocktail, anchor LHC12g
2101 periodName.CompareTo("LHC12g4b") == 0 || // MC DPMJET 3rd iteration, anchor LHC12g
2102 periodName.CompareTo("LHC12g4a") == 0 || // MC DPMJET improved, anchor LHC12g
2103 periodName.CompareTo("LHC12g4") == 0 || // MC DPMJET, anchor LHC12g
2104 periodName.CompareTo("LHC12g5") == 0 || // MC PHOJET, anchor LHC12g
2105 periodName.CompareTo("LHC12g2") == 0 || // MC Starlight background, anchor LHC12g
2106 periodName.CompareTo("LHC12g1") == 0 ) // MC ?, anchor LHC12g
2108 printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
2109 SetEtaShift(-0.465);
2111 else if(periodName.CompareTo("LHC13f") == 0 ||
2112 periodName.CompareTo("LHC13c6b") == 0 ||// MC Jpsi -> mumu, anchor LHC13f
2113 periodName.CompareTo("LHC13c5") == 0 || //MC Starlight, gamma gamma UPC muon, anchor LHC13f
2114 periodName.CompareTo("LHC13c4") == 0 )//MC Starlight, coherent JPsi, UPC muon, anchor LHC13f
2116 printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
2117 SetEtaShift(+0.465);
2119 else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
2122 //________________________________________________________________________
2123 AliEmcalTriggerPatchInfo* AliConvEventCuts::GetMainTriggerPatch()
2125 //get main trigger match; if not known yet, look for it and cache
2127 if (fMainTriggerPatchEMCAL)
2128 return fMainTriggerPatchEMCAL;
2130 if (!fTriggerPatchInfo) {
2131 AliError(Form("%s: fTriggerPatchInfo not available",GetName()));
2135 //number of patches in event
2136 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2138 //extract main trigger patch
2139 AliEmcalTriggerPatchInfo *patch;
2140 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2141 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2142 if (patch->IsMainTrigger()) {
2143 fMainTriggerPatchEMCAL = patch;
2148 return fMainTriggerPatchEMCAL;
2152 //________________________________________________________________________
2153 void AliConvEventCuts::InitializeEMCALTrigger(AliVEvent *fInputEvent)
2155 // cout << "entered EMCAL trigger initialization" << endl;
2157 // Init the analysis.
2158 if (fCaloTriggersName.IsNull()){
2159 if (fInputEvent->IsA()==AliESDEvent::Class()){
2160 fCaloTriggersName = "EMCALTrigger";
2162 fCaloTriggersName = "emcalTrigger";
2166 if (!fCaloTriggersName.IsNull() && !fCaloTriggers) {
2167 fCaloTriggers = dynamic_cast<AliVCaloTrigger*>(fInputEvent->FindListObject(fCaloTriggersName));
2168 if (!fCaloTriggers) {
2169 AliError(Form("%s: Could not retrieve calo triggers %s!", GetName(), fCaloTriggersName.Data()));
2174 if (fCaloTriggerPatchInfoName.IsNull()){
2175 if (fInputEvent->IsA()==AliESDEvent::Class()){
2176 fCaloTriggerPatchInfoName = "EmcalTriggers";
2178 fCaloTriggerPatchInfoName = "EmcalTriggers";
2182 if (!fCaloTriggerPatchInfoName.IsNull() && !fTriggerPatchInfo) {
2183 fTriggerPatchInfo = GetArrayFromEvent(fInputEvent, fCaloTriggerPatchInfoName.Data(), "AliEmcalTriggerPatchInfo");
2184 if (!fTriggerPatchInfo) {
2185 AliError(Form("%s: Could not retrieve calo trigger patch info %s!", GetName(), fCaloTriggerPatchInfoName.Data()));
2191 fEMCALTrigInitialized = kTRUE;
2194 //________________________________________________________________________
2195 ULong_t AliConvEventCuts::GetTriggerList(){
2196 if (!fTriggerPatchInfo)
2198 //number of patches in event
2199 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2201 //loop over patches to define trigger type of event
2207 AliEmcalTriggerPatchInfo *patch;
2208 // if (nPatch> 0) {cout << "NEW Triggers in this event*********************************" << endl;}
2209 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2210 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2211 // cout << "Patch energy: "<<patch->GetPatchE() << "\t ADC counts: " << patch->GetADCAmp() << endl;
2212 // cout << "Phi: " << patch->GetPhiMin() << " - " << patch->GetPhiMax() << " delta phi: " <<abs(patch->GetPhiMin()-patch->GetPhiMax())<< endl;
2213 // cout << "Eta: " << patch->GetEtaMin() << " - " << patch->GetEtaMax() << " delta eta: " <<abs(patch->GetEtaMin()-patch->GetEtaMax())<< endl;
2214 if (patch->IsGammaHigh()){
2215 // cout << "fired L1GA high" << endl;
2218 if (patch->IsGammaLow()){
2219 // cout << "fired L1GA low" << endl;
2222 if (patch->IsJetHigh()){
2223 // cout << "fired L1JE high" << endl;
2226 if (patch->IsJetLow()){
2227 // cout << "fired L1JE low" << endl;
2230 if (patch->IsLevel0()){
2231 // cout << "fired L0" << endl;
2234 // cout << patch->GetPatchE() << "\t" << patch->GetADCAmp() << "\t" << patch->IsGammaHigh() << "\t" << patch->IsGammaLow()
2235 // << "\t" << patch->IsJetHigh() << "\t" << patch->IsJetLow() << "\t" << patch->IsLevel0()
2236 // << "\t" << patch->GetPhiMin() << "\t" << patch->GetPhiMax() << "\t" << abs(patch->GetPhiMin()-patch->GetPhiMax())
2237 // << "\t" << patch->GetEtaMin() << "\t" << patch->GetEtaMax() << "\t" << abs(patch->GetEtaMin()-patch->GetEtaMax()) << endl;
2241 AliDebug(2, "Patch summary: ");
2242 AliDebug(2, Form("Number of patches: %d", nPatch));
2243 AliDebug(2, Form("Level0: [%d]" ,nL0));
2244 AliDebug(2, Form("Jet: low[%d], high[%d]" ,nJ2, nJ1));
2245 AliDebug(2, Form("Gamma: low[%d], high[%d]" ,nG2, nG1));
2249 // cout << Form("Number of patches: %d", nPatch) << endl;
2250 // cout << Form("Level0: [%d]" ,nL0) << endl;
2251 // cout << Form("Jet: low[%d], high[%d]" ,nJ2, nJ1) << endl;
2252 // cout << Form("Gamma: low[%d], high[%d]" ,nG2, nG1) << endl;
2255 ULong_t triggers(0);
2257 SETBIT(triggers, kG1);
2259 SETBIT(triggers, kG2);
2261 SETBIT(triggers, kJ1);
2263 SETBIT(triggers, kJ2);
2265 SETBIT(triggers, kL0);
2269 //________________________________________________________________________
2270 Bool_t AliConvEventCuts::HasTriggerType(TriggerTypeEMCAL t){
2271 // Check if event has a given trigger type
2273 return fTriggersEMCAL == 0;
2275 return TESTBIT(fTriggersEMCAL, int(t));
2279 //________________________________________________________________________
2280 TClonesArray *AliConvEventCuts::GetArrayFromEvent(AliVEvent* fInputEvent, const char *name, const char *clname)
2282 // Get array from event.
2284 TClonesArray *arr = 0;
2285 TString sname(name);
2286 if (!sname.IsNull()) {
2287 arr = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(sname));
2289 AliWarning(Form("%s: Could not retrieve array with name %s!", GetName(), name));
2299 TString objname(arr->GetClass()->GetName());
2300 TClass cls(objname);
2301 if (!cls.InheritsFrom(clname)) {
2302 AliWarning(Form("%s: Objects of type %s in %s are not inherited from %s!",
2303 GetName(), cls.GetName(), name, clname));