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 "AliVCaloCells.h"
49 #include "AliAODMCParticle.h"
50 #include "AliAODMCHeader.h"
56 ClassImp(AliConvEventCuts)
59 const char* AliConvEventCuts::fgkCutNames[AliConvEventCuts::kNCuts] = {
63 "SelectSpecialTrigger", //3
64 "SelectSpecialSubTriggerClass", //4
66 "RejectExtraSignals", //6
70 //________________________________________________________________________
71 AliConvEventCuts::AliConvEventCuts(const char *name,const char *title) :
72 AliAnalysisCuts(name,title),
77 fDetectorCentrality(0),
78 fModCentralityClass(0),
82 fMultiplicityMethod(0),
84 fSpecialSubTrigger(0),
85 fRemovePileUp(kFALSE),
86 fRejectExtraSignals(0),
87 fOfflineTriggerMask(0),
92 fNotRejectedStart(NULL),
93 fNotRejectedEnd(NULL),
94 fGeneratorNames(NULL),
99 fDoReweightHistoMCPi0(kFALSE),
100 fDoReweightHistoMCEta(kFALSE),
101 fDoReweightHistoMCK0s(kFALSE),
102 fPathTrFReweighting(""),
103 fNameHistoReweightingPi0(""),
104 fNameHistoReweightingEta(""),
105 fNameHistoReweightingK0s(""),
109 fHistoEventCuts(NULL),
111 hCentralityVsNumberOfPrimaryTracks(NULL),
114 hTriggerClassSelected(NULL),
115 hReweightMCHistPi0(NULL),
116 hReweightMCHistEta(NULL),
117 hReweightMCHistK0s(NULL),
121 fAddedSignalPDGCode(0),
123 fTriggerSelectedManually(kFALSE),
124 fSpecialTriggerName(""),
125 fSpecialSubTriggerName(""),
126 fNSpecialSubTriggerOptions(0),
129 fTriggerPatchInfo(NULL),
130 fMainTriggerPatchEMCAL(NULL),
131 fCaloTriggersName(""),
132 fCaloTriggerPatchInfoName(""),
134 fTriggersEMCALSelected(-1),
135 fEMCALTrigInitialized(kFALSE),
136 fSecProdBoundary(1.0)
138 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
139 fCutString=new TObjString((GetCutNumber()).Data());
141 fUtils = new AliAnalysisUtils();
142 //if you do not want to apply the cut on the distance between the SPD and TRK vertex:
143 //fUtils->SetCutOnZVertexSPD(kFALSE);
148 //________________________________________________________________________
149 AliConvEventCuts::AliConvEventCuts(const AliConvEventCuts &ref) :
150 AliAnalysisCuts(ref),
152 fHeaderList(ref.fHeaderList),
153 fEventQuality(ref.fEventQuality),
154 fIsHeavyIon(ref.fIsHeavyIon),
155 fDetectorCentrality(ref.fDetectorCentrality),
156 fModCentralityClass(ref.fModCentralityClass),
157 fMaxVertexZ(ref.fMaxVertexZ),
158 fCentralityMin(ref.fCentralityMin),
159 fCentralityMax(ref.fCentralityMax),
160 fMultiplicityMethod(ref.fMultiplicityMethod),
161 fSpecialTrigger(ref.fSpecialTrigger),
162 fSpecialSubTrigger(ref.fSpecialSubTrigger),
163 fRemovePileUp(ref.fRemovePileUp),
164 fRejectExtraSignals(ref.fRejectExtraSignals),
165 fOfflineTriggerMask(ref.fOfflineTriggerMask),
166 fHasV0AND(ref.fHasV0AND),
167 fIsSDDFired(ref.fIsSDDFired),
168 fRandom(ref.fRandom),
169 fnHeaders(ref.fnHeaders),
170 fNotRejectedStart(NULL),
171 fNotRejectedEnd(NULL),
172 fGeneratorNames(ref.fGeneratorNames),
175 fEtaShift(ref.fEtaShift),
176 fDoEtaShift(ref.fDoEtaShift),
177 fDoReweightHistoMCPi0(ref.fDoReweightHistoMCPi0),
178 fDoReweightHistoMCEta(ref.fDoReweightHistoMCEta),
179 fDoReweightHistoMCK0s(ref.fDoReweightHistoMCK0s),
180 fPathTrFReweighting(ref.fPathTrFReweighting),
181 fNameHistoReweightingPi0(ref.fNameHistoReweightingPi0),
182 fNameHistoReweightingEta(ref.fNameHistoReweightingEta),
183 fNameHistoReweightingK0s(ref.fNameHistoReweightingK0s),
184 fNameFitDataPi0(ref.fNameFitDataPi0),
185 fNameFitDataEta(ref.fNameFitDataEta),
186 fNameFitDataK0s(ref.fNameFitDataK0s),
187 fHistoEventCuts(NULL),
189 hCentralityVsNumberOfPrimaryTracks(NULL),
192 hTriggerClassSelected(NULL),
193 hReweightMCHistPi0(ref.hReweightMCHistPi0),
194 hReweightMCHistEta(ref.hReweightMCHistEta),
195 hReweightMCHistK0s(ref.hReweightMCHistK0s),
196 fFitDataPi0(ref.fFitDataPi0),
197 fFitDataEta(ref.fFitDataEta),
198 fFitDataK0s(ref.fFitDataK0s),
199 fAddedSignalPDGCode(ref.fAddedSignalPDGCode),
200 fPreSelCut(ref.fPreSelCut),
201 fTriggerSelectedManually(ref.fTriggerSelectedManually),
202 fSpecialTriggerName(ref.fSpecialTriggerName),
203 fSpecialSubTriggerName(ref.fSpecialSubTriggerName),
204 fNSpecialSubTriggerOptions(ref.fNSpecialSubTriggerOptions),
205 fV0ReaderName(ref.fV0ReaderName),
207 fTriggerPatchInfo(NULL),
208 fMainTriggerPatchEMCAL(NULL),
209 fCaloTriggersName(ref.fCaloTriggersName),
210 fCaloTriggerPatchInfoName(ref.fCaloTriggerPatchInfoName),
211 fTriggersEMCAL(ref.fTriggersEMCAL),
212 fTriggersEMCALSelected(ref.fTriggersEMCALSelected),
213 fEMCALTrigInitialized(kFALSE),
214 fSecProdBoundary(ref.fSecProdBoundary)
217 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=ref.fCuts[jj];}
218 fCutString=new TObjString((GetCutNumber()).Data());
219 fUtils = new AliAnalysisUtils();
220 // dont copy histograms (if you like histograms, call InitCutHistograms())
225 //________________________________________________________________________
226 AliConvEventCuts::~AliConvEventCuts() {
228 //Deleting fHistograms leads to seg fault it it's added to output collection of a task
230 // delete fHistograms;
231 // fHistograms = NULL;
232 if(fCutString != NULL){
236 if(fNotRejectedStart){
237 delete[] fNotRejectedStart;
238 fNotRejectedStart = NULL;
241 delete[] fNotRejectedEnd;
242 fNotRejectedEnd = NULL;
245 delete[] fGeneratorNames;
246 fGeneratorNames = NULL;
255 //________________________________________________________________________
256 void AliConvEventCuts::InitCutHistograms(TString name, Bool_t preCut){
258 // Initialize Cut Histograms for QA (only initialized and filled if function is called)
259 TH1::AddDirectory(kFALSE);
261 if(fHistograms != NULL){
265 if(fHistograms==NULL){
266 fHistograms=new TList();
267 fHistograms->SetOwner(kTRUE);
268 if(name=="")fHistograms->SetName(Form("ConvEventCuts_%s",GetCutNumber().Data()));
269 else fHistograms->SetName(Form("%s_%s",name.Data(),GetCutNumber().Data()));
272 if (hReweightMCHistPi0){
273 hReweightMCHistPi0->SetName("MCInputForWeightingPi0");
274 fHistograms->Add(hReweightMCHistPi0);
276 if (hReweightMCHistEta){
277 hReweightMCHistEta->SetName("MCInputForWeightingEta");
278 fHistograms->Add(hReweightMCHistEta);
280 if (hReweightMCHistK0s){
281 hReweightMCHistK0s->SetName("MCInputForWeightingK0s");
282 fHistograms->Add(hReweightMCHistK0s);
285 hCentrality=new TH1F(Form("Centrality %s",GetCutNumber().Data()),"Centrality",100,0,100);
286 fHistograms->Add(hCentrality);
287 hCentralityVsNumberOfPrimaryTracks=new TH2F(Form("Centrality vs Primary Tracks %s",GetCutNumber().Data()),"Centrality vs Primary Tracks ",100,0,100,4000,0,4000);
288 fHistograms->Add(hCentralityVsNumberOfPrimaryTracks);
290 // Event Cuts and Info
292 fHistoEventCuts=new TH1F(Form("ESD_EventCuts %s",GetCutNumber().Data()),"Event Cuts",7,-0.5,6.5);
293 fHistoEventCuts->GetXaxis()->SetBinLabel(1,"in");
294 fHistoEventCuts->GetXaxis()->SetBinLabel(2,"OfflineTrigger");
295 fHistoEventCuts->GetXaxis()->SetBinLabel(3,"nvtxcontr");
296 fHistoEventCuts->GetXaxis()->SetBinLabel(4,"VertexZ");
297 fHistoEventCuts->GetXaxis()->SetBinLabel(5,"pileup");
298 fHistoEventCuts->GetXaxis()->SetBinLabel(6,"centrsel");
299 fHistoEventCuts->GetXaxis()->SetBinLabel(7,"out");
300 fHistograms->Add(fHistoEventCuts);
302 hVertexZ=new TH1F(Form("VertexZ %s",GetCutNumber().Data()),"VertexZ",1000,-50,50);
303 fHistograms->Add(hVertexZ);
305 hTriggerClass= new TH1F(Form("OfflineTrigger %s",GetCutNumber().Data()),"OfflineTrigger",35,-0.5,34.5);
306 hTriggerClass->GetXaxis()->SetBinLabel( 1,"kMB");
307 hTriggerClass->GetXaxis()->SetBinLabel( 2,"kINT7");
308 hTriggerClass->GetXaxis()->SetBinLabel( 3,"kMUON");
309 hTriggerClass->GetXaxis()->SetBinLabel( 4,"kHighMult");
310 hTriggerClass->GetXaxis()->SetBinLabel( 5,"kKEMC1");
311 hTriggerClass->GetXaxis()->SetBinLabel( 6,"kCINT5");
312 hTriggerClass->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
313 hTriggerClass->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
314 hTriggerClass->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
315 hTriggerClass->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
316 hTriggerClass->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
317 hTriggerClass->GetXaxis()->SetBinLabel(12,"kMUS7");
318 hTriggerClass->GetXaxis()->SetBinLabel(13,"kPHI1");
319 hTriggerClass->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
320 hTriggerClass->GetXaxis()->SetBinLabel(15,"kEMCEJE");
321 hTriggerClass->GetXaxis()->SetBinLabel(16,"kEMCEGA");
322 hTriggerClass->GetXaxis()->SetBinLabel(17,"kCentral");
323 hTriggerClass->GetXaxis()->SetBinLabel(18,"kSemiCentral");
324 hTriggerClass->GetXaxis()->SetBinLabel(19,"kDG5");
325 hTriggerClass->GetXaxis()->SetBinLabel(20,"kZED");
326 hTriggerClass->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
327 hTriggerClass->GetXaxis()->SetBinLabel(22,"kINT8");
328 hTriggerClass->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
329 hTriggerClass->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
330 hTriggerClass->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
331 hTriggerClass->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
332 hTriggerClass->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
333 hTriggerClass->GetXaxis()->SetBinLabel(28,"kUserDefined");
334 hTriggerClass->GetXaxis()->SetBinLabel(29,"kTRD");
335 hTriggerClass->GetXaxis()->SetBinLabel(30,"kFastOnly");
336 hTriggerClass->GetXaxis()->SetBinLabel(31,"kAnyINT");
337 hTriggerClass->GetXaxis()->SetBinLabel(32,"kAny");
338 hTriggerClass->GetXaxis()->SetBinLabel(33,"V0AND");
339 hTriggerClass->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
340 hTriggerClass->GetXaxis()->SetBinLabel(35,"failed Physics Selection");
341 fHistograms->Add(hTriggerClass);
344 hTriggerClassSelected= new TH1F(Form("OfflineTriggerSelected %s",GetCutNumber().Data()),"OfflineTriggerSelected",34,-0.5,33.5);
345 hTriggerClassSelected->GetXaxis()->SetBinLabel( 1,"kMB");
346 hTriggerClassSelected->GetXaxis()->SetBinLabel( 2,"kINT7");
347 hTriggerClassSelected->GetXaxis()->SetBinLabel( 3,"kMUON");
348 hTriggerClassSelected->GetXaxis()->SetBinLabel( 4,"kHighMult");
349 hTriggerClassSelected->GetXaxis()->SetBinLabel( 5,"kKEMC1");
350 hTriggerClassSelected->GetXaxis()->SetBinLabel( 6,"kCINT5");
351 hTriggerClassSelected->GetXaxis()->SetBinLabel( 7,"kCMUS5/kMUSPB");
352 hTriggerClassSelected->GetXaxis()->SetBinLabel( 8,"kMUSH7/kMUSHPB");
353 hTriggerClassSelected->GetXaxis()->SetBinLabel( 9,"kMUL7/kMuonLikePB");
354 hTriggerClassSelected->GetXaxis()->SetBinLabel(10,"kMUU7/kMuonUnlikePB");
355 hTriggerClassSelected->GetXaxis()->SetBinLabel(11,"kEMC7/kEMC8");
356 hTriggerClassSelected->GetXaxis()->SetBinLabel(12,"kMUS7");
357 hTriggerClassSelected->GetXaxis()->SetBinLabel(13,"kPHI1");
358 hTriggerClassSelected->GetXaxis()->SetBinLabel(14,"kPHI7/kPHI8/kPHOSPb");
359 hTriggerClassSelected->GetXaxis()->SetBinLabel(15,"kEMCEJE");
360 hTriggerClassSelected->GetXaxis()->SetBinLabel(16,"kEMCEGA");
361 hTriggerClassSelected->GetXaxis()->SetBinLabel(17,"kCentral");
362 hTriggerClassSelected->GetXaxis()->SetBinLabel(18,"kSemiCentral");
363 hTriggerClassSelected->GetXaxis()->SetBinLabel(19,"kDG5");
364 hTriggerClassSelected->GetXaxis()->SetBinLabel(20,"kZED");
365 hTriggerClassSelected->GetXaxis()->SetBinLabel(21,"kSPI7/kSPI");
366 hTriggerClassSelected->GetXaxis()->SetBinLabel(22,"kINT8");
367 hTriggerClassSelected->GetXaxis()->SetBinLabel(23,"kMuonSingleLowPt8");
368 hTriggerClassSelected->GetXaxis()->SetBinLabel(24,"kMuonSingleHighPt8");
369 hTriggerClassSelected->GetXaxis()->SetBinLabel(25,"kMuonLikeLowPt8");
370 hTriggerClassSelected->GetXaxis()->SetBinLabel(26,"kMuonUnlikeLowPt8");
371 hTriggerClassSelected->GetXaxis()->SetBinLabel(27,"kMuonUnlikeLowPt0");
372 hTriggerClassSelected->GetXaxis()->SetBinLabel(28,"kUserDefined");
373 hTriggerClassSelected->GetXaxis()->SetBinLabel(29,"kTRD");
374 hTriggerClassSelected->GetXaxis()->SetBinLabel(30,"kFastOnly");
375 hTriggerClassSelected->GetXaxis()->SetBinLabel(31,"kAnyINT");
376 hTriggerClassSelected->GetXaxis()->SetBinLabel(32,"kAny");
377 hTriggerClassSelected->GetXaxis()->SetBinLabel(33,"V0AND");
378 hTriggerClassSelected->GetXaxis()->SetBinLabel(34,"NOT kFastOnly");
379 fHistograms->Add(hTriggerClassSelected);
382 TH1::AddDirectory(kTRUE);
385 ///________________________________________________________________________
386 Bool_t AliConvEventCuts::EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent){
387 // Process Event Selection
390 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
393 // Check for MC event
394 Bool_t isMC = kFALSE;
395 if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
396 // Check if MC event is correctly loaded
397 AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
402 if (!mcHandler->InitOk() ){
406 if (!mcHandler->TreeK() ){
410 if (!mcHandler->TreeTR() ) {
420 // cout << "before event trigger" << endl;
421 if(!IsTriggerSelected(fInputEvent, isMC )){
422 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
428 if(fInputEvent->IsA()==AliESDEvent::Class()){
429 AliTriggerAnalysis fTriggerAnalysis;// = new AliTriggerAnalysis;
430 fHasV0AND = fTriggerAnalysis.IsOfflineTriggerFired((AliESDEvent*)fInputEvent, AliTriggerAnalysis::kV0AND);
431 if(fHasV0AND&&hTriggerClass)hTriggerClass->Fill(32);
433 // cout << "event number " << ((AliESDEvent*)fInputEvent)->GetEventNumberInFile() << " entered"<< endl;
436 // Number of Contributors Cut
437 if(GetNumberOfContributorsVtx(fInputEvent)<=0) {
438 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
444 // Z Vertex Position Cut
445 if(!VertexZCut(fInputEvent)){
446 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
455 if(fInputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
456 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
463 // Centrality Selection
464 if(!IsCentralitySelected(fInputEvent,fMCEvent)){
465 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
471 // Fill Event Histograms
472 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
473 if(hVertexZ)hVertexZ->Fill(fInputEvent->GetPrimaryVertex()->GetZ());
474 if(hCentrality)hCentrality->Fill(GetCentrality(fInputEvent));
475 if(hCentralityVsNumberOfPrimaryTracks)
476 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(fInputEvent),
477 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
478 ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
483 ///________________________________________________________________________
484 Bool_t AliConvEventCuts::UpdateCutString() {
485 ///Update the cut string (if it has been created yet)
487 if(fCutString && fCutString->GetString().Length() == kNCuts) {
488 fCutString->SetString(GetCutNumber());
495 ///________________________________________________________________________
496 void AliConvEventCuts::LoadReweightingHistosMCFromFile() {
498 AliInfo("Entering loading of histograms for weighting");
499 TFile *f = TFile::Open(fPathTrFReweighting.Data());
501 AliError(Form("file for weighting %s not found",fPathTrFReweighting.Data()));
504 if (fNameHistoReweightingPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
505 cout << "I have to find: " << fNameHistoReweightingPi0.Data() << endl;
506 TH1D *hReweightMCHistPi0temp = (TH1D*)f->Get(fNameHistoReweightingPi0.Data());
507 hReweightMCHistPi0 = new TH1D(*hReweightMCHistPi0temp);
508 if (hReweightMCHistPi0) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingPi0.Data(),fPathTrFReweighting.Data() ));
509 else AliWarning(Form("%s not found in %s", fNameHistoReweightingPi0.Data() ,fPathTrFReweighting.Data()));
510 hReweightMCHistPi0->SetDirectory(0);
512 if (fNameFitDataPi0.CompareTo("") != 0 && fDoReweightHistoMCPi0 ){
513 cout << "I have to find: " << fNameFitDataPi0.Data() << endl;
514 TF1 *fFitDataPi0temp = (TF1*)f->Get(fNameFitDataPi0.Data());
515 fFitDataPi0 = new TF1(*fFitDataPi0temp);
516 if (fFitDataPi0) AliInfo(Form("%s has been loaded from %s", fNameFitDataPi0.Data(),fPathTrFReweighting.Data() ));
517 else AliWarning(Form("%s not found in %s",fPathTrFReweighting.Data(), fNameFitDataPi0.Data() ));
520 if (fNameHistoReweightingEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
521 cout << "I have to find: " << fNameHistoReweightingEta.Data() << endl;
522 TH1D *hReweightMCHistEtatemp = (TH1D*)f->Get(fNameHistoReweightingEta.Data());
523 hReweightMCHistEta = new TH1D(*hReweightMCHistEtatemp);
524 if (hReweightMCHistEta) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
525 else AliWarning(Form("%s not found in %s", fNameHistoReweightingEta.Data(),fPathTrFReweighting.Data() ));
526 hReweightMCHistEta->SetDirectory(0);
529 if (fNameFitDataEta.CompareTo("") != 0 && fDoReweightHistoMCEta){
530 cout << "I have to find: " << fNameFitDataEta.Data() << endl;
531 TF1 *fFitDataEtatemp = (TF1*)f->Get(fNameFitDataEta.Data());
532 fFitDataEta = new TF1(*fFitDataEtatemp);
533 if (fFitDataEta) AliInfo(Form("%s has been loaded from %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
534 else AliWarning(Form("%s not found in %s", fNameFitDataEta.Data(),fPathTrFReweighting.Data() ));
537 if (fNameHistoReweightingK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
538 cout << "I have to find: " << fNameHistoReweightingK0s.Data() << endl;
539 TH1D *hReweightMCHistK0stemp = (TH1D*)f->Get(fNameHistoReweightingK0s.Data());
540 hReweightMCHistK0s = new TH1D(*hReweightMCHistK0stemp);
541 if (hReweightMCHistK0s) AliInfo(Form("%s has been loaded from %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
542 else AliWarning(Form("%s not found in %s", fNameHistoReweightingK0s.Data(),fPathTrFReweighting.Data() ));
543 hReweightMCHistK0s->SetDirectory(0);
546 if (fNameFitDataK0s.CompareTo("") != 0 && fDoReweightHistoMCK0s){
547 cout << "I have to find: " << fNameFitDataK0s.Data() << endl;
548 TF1 *fFitDataK0stemp = (TF1*)f->Get(fNameFitDataK0s.Data());
549 fFitDataK0s = new TF1(*fFitDataK0stemp);
550 if (fFitDataK0s) AliInfo(Form("%s has been loaded from %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
551 else AliWarning(Form("%s not found in %s", fNameFitDataK0s.Data(),fPathTrFReweighting.Data() ));
558 ///________________________________________________________________________
559 Bool_t AliConvEventCuts::InitializeCutsFromCutString(const TString analysisCutSelection ) {
560 // Initialize Cuts from a given Cut string
561 if(fDoReweightHistoMCPi0 || fDoReweightHistoMCEta || fDoReweightHistoMCK0s) {
562 AliInfo("Weighting was enabled");
563 LoadReweightingHistosMCFromFile();
566 AliInfo(Form("Set Event Cut Number: %s",analysisCutSelection.Data()));
567 if(analysisCutSelection.Length()!=kNCuts) {
568 AliError(Form("Cut selection has the wrong length! size is %d, number of cuts is %d", analysisCutSelection.Length(), kNCuts));
571 if(!analysisCutSelection.IsDigit()){
572 AliError("Cut selection contains characters");
576 if (fV0ReaderName.CompareTo("") == 0){
577 fV0ReaderName = "V0ReaderV1";
579 const char *cutSelection = analysisCutSelection.Data();
580 #define ASSIGNARRAY(i) fCuts[i] = cutSelection[i] - '0'
581 for(Int_t ii=0;ii<kNCuts;ii++){
585 // Set Individual Cuts
586 for(Int_t ii=0;ii<kNCuts;ii++){
587 if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
590 PrintCutsWithValues();
595 ///________________________________________________________________________
596 Bool_t AliConvEventCuts::SetCut(cutIds cutID, const Int_t value) {
597 ///Set individual cut ID
601 if( SetRemovePileUp(value)) {
602 fCuts[kremovePileUp] = value;
605 } else return kFALSE;
606 case kSelectSpecialTriggerAlias:
607 if( SetSelectSpecialTrigger(value)) {
608 fCuts[kSelectSpecialTriggerAlias] = value;
611 } else return kFALSE;
612 case kSelectSubTriggerClass:
613 if( SetSelectSubTriggerClass(value)) {
614 fCuts[kSelectSubTriggerClass] = value;
617 } else return kFALSE;
619 if( SetIsHeavyIon(value)) {
620 fCuts[kisHeavyIon] = value;
623 } else return kFALSE;
625 if( SetCentralityMin(value)) {
626 fCuts[kCentralityMin] = value;
629 } else return kFALSE;
631 if( SetCentralityMax(value)) {
632 fCuts[kCentralityMax] = value;
635 } else return kFALSE;
637 if( SetRejectExtraSignalsCut(value)) {
638 fCuts[kExtraSignals] = value;
641 } else return kFALSE;
643 AliError("Cut id out of range");
647 AliError("Cut id %d not recognized");
651 ///________________________________________________________________________
652 void AliConvEventCuts::PrintCuts() {
653 // Print out current Cut Selection
654 for(Int_t ic = 0; ic < kNCuts; ic++) {
655 printf("%-30s : %d \n", fgkCutNames[ic], fCuts[ic]);
659 void AliConvEventCuts::PrintCutsWithValues() {
660 // Print out current Cut Selection with value
661 printf("\nEvent cutnumber \n");
662 for(Int_t ic = 0; ic < kNCuts; ic++) {
663 printf("%d",fCuts[ic]);
667 if (fIsHeavyIon == 0) {
668 printf("Running in pp mode \n");
669 if (fSpecialTrigger == 0){
670 if (fSpecialSubTrigger == 0){
671 printf("\t only events triggered by V0OR will be analysed \n");
672 } else if (fSpecialSubTrigger == 1){
673 printf("\t only events where SDD was present will be analysed \n");
675 } else if (fSpecialTrigger == 1){
676 if (fSpecialSubTrigger == 0){
677 printf("\t only events triggered by V0AND will be analysed \n");
678 } else if(fSpecialSubTrigger == 1){
679 printf("\t only events where SDD was present will be analysed and triggered by VOAND\n");
681 } else if (fSpecialTrigger > 1){
682 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
684 } else if (fIsHeavyIon == 1){
685 printf("Running in PbPb mode \n");
686 if (fDetectorCentrality == 0){
687 printf("\t centrality selection based on V0M \n");
688 } else if (fDetectorCentrality == 1){
689 printf("\t centrality selection based on Cl1 \n");
691 if (fModCentralityClass == 0){
692 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
693 } else if ( fModCentralityClass == 1){
694 printf("\t %d - %d \n", fCentralityMin*5, fCentralityMax*5);
695 } else if ( fModCentralityClass == 2){
696 printf("\t %d - %d \n", fCentralityMin*5+45, fCentralityMax*5+45);
697 } else if (fModCentralityClass == 3){
698 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*10, fCentralityMax*10);
699 } else if ( fModCentralityClass == 4){
700 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5, fCentralityMax*5);
701 } else if ( fModCentralityClass == 5){
702 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5+45, fCentralityMax*5+45);
704 if (fSpecialTrigger == 0){
705 printf("\t only events triggered by kMB, kCentral, kSemiCentral will be analysed \n");
706 } else if (fSpecialTrigger > 1){
707 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
708 printf("\n\t SpecialTrigger is: %s\n", fSpecialTriggerName.Data());
709 printf("\t SpecialSubTrigger is: %s\n\n", fSpecialSubTriggerName.Data());
711 } else if (fIsHeavyIon == 2){
712 printf("Running in pPb mode \n");
713 if (fDetectorCentrality == 0){
714 printf("\t centrality selection based on V0A \n");
715 } else if (fDetectorCentrality == 1){
716 printf("\t centrality selection based on Cl1 \n");
718 if (fModCentralityClass == 0){
719 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
721 if (fSpecialTrigger == 0){
722 printf("\t only events triggered by kINT7 will be analysed \n");
723 } else if (fSpecialTrigger > 1){
724 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
727 printf("MC event cuts: \n");
728 if (fRejectExtraSignals == 0) printf("\t no rejection was applied \n");
729 else if (fRejectExtraSignals == 1) printf("\t only MB header will be inspected \n");
730 else if (fRejectExtraSignals > 1) printf("\t special header have been selected \n");
733 ///________________________________________________________________________
734 Bool_t AliConvEventCuts::SetIsHeavyIon(Int_t isHeavyIon)
742 fDetectorCentrality=0;
746 fDetectorCentrality=1;
748 case 3: //allows to select centrality 0-45% in steps of 5% for V0 Multiplicity
750 fDetectorCentrality=0;
751 fModCentralityClass=1;
753 case 4: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
755 fDetectorCentrality=0;
756 fModCentralityClass=2;
758 case 5: //strict cut on v0 tracks for MC
760 fDetectorCentrality=0;
761 fModCentralityClass=3;
763 case 6: //allows to select centrality 0-45% in steps of 5% for track mult
764 //strict cut on v0 tracks for MC
766 fDetectorCentrality=0;
767 fModCentralityClass=4;
769 case 7: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
770 //strict cut on v0 tracks for MC
772 fDetectorCentrality=0;
773 fModCentralityClass=5;
777 fDetectorCentrality=0;
781 fDetectorCentrality=1;
784 AliError(Form("SetHeavyIon not defined %d",isHeavyIon));
790 //___________________________________________________________________
791 Bool_t AliConvEventCuts::SetCentralityMin(Int_t minCentrality)
794 if(minCentrality<0||minCentrality>9){
795 AliError(Form("minCentrality not defined %d",minCentrality));
799 fCentralityMin=minCentrality;
803 //___________________________________________________________________
804 Bool_t AliConvEventCuts::SetCentralityMax(Int_t maxCentrality)
807 if(maxCentrality<0||maxCentrality>9){
808 AliError(Form("maxCentrality not defined %d",maxCentrality));
811 fCentralityMax=maxCentrality;
815 ///________________________________________________________________________
816 Bool_t AliConvEventCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
819 switch(selectSpecialTrigger){
821 fSpecialTrigger=0; // V0OR
824 fSpecialTrigger=1; // V0AND
827 // fSpecialTrigger=2; //
830 fSpecialTrigger=3; //specific centrality trigger selection
831 fSpecialTriggerName="AliVEvent::kCentral/kSemiCentral/kMB";
834 fSpecialTrigger=4; // trigger alias kTRD
835 fOfflineTriggerMask=AliVEvent::kTRD;
836 fTriggerSelectedManually = kTRUE;
837 fSpecialTriggerName="AliVEvent::kTRD";
840 fSpecialTrigger=5; // trigger alias kEMC
841 fOfflineTriggerMask=AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMC1 ;
842 fTriggerSelectedManually = kTRUE;
843 fTriggersEMCALSelected= 0;
844 SETBIT(fTriggersEMCALSelected, kL0);
845 fSpecialTriggerName="AliVEvent::kEMC7/kEMC8/kEMC1";
848 fSpecialTrigger=6; // trigger alias kPHI
849 fOfflineTriggerMask=AliVEvent::kPHI7 | AliVEvent::kPHI1 | AliVEvent::kPHI8 | AliVEvent::kPHOSPb;
850 fTriggerSelectedManually = kTRUE;
851 fSpecialTriggerName="AliVEvent::kPHI7/kPHI1/kPHI8/kPHOSPb";
854 fSpecialTrigger=7; // trigger alias kHighMult
855 fOfflineTriggerMask=AliVEvent::kHighMult;
856 fTriggerSelectedManually = kTRUE;
857 fSpecialTriggerName="AliVEvent::kHighMult";
860 fSpecialTrigger=8; // trigger alias kEMCEGA
861 fOfflineTriggerMask=AliVEvent::kEMCEGA;
862 fTriggerSelectedManually = kTRUE;
863 fTriggersEMCALSelected= 0;
864 SETBIT(fTriggersEMCALSelected, kG2);
865 fSpecialTriggerName="AliVEvent::kEMCEGA";
868 fSpecialTrigger=9; // trigger alias kEMCEJE
869 fOfflineTriggerMask=AliVEvent::kEMCEJE;
870 fTriggerSelectedManually = kTRUE;
871 fTriggersEMCALSelected= 0;
872 SETBIT(fTriggersEMCALSelected, kJ2);
873 fSpecialTriggerName="AliVEvent::kEMCEJE";
876 AliError("Warning: Special Trigger Not known");
882 ///________________________________________________________________________
883 Bool_t AliConvEventCuts::SetSelectSubTriggerClass(Int_t selectSpecialSubTriggerClass)
886 if (fSpecialTrigger == 0){ //OR
887 switch(selectSpecialSubTriggerClass){
890 fSpecialSubTrigger=0;
891 // AliInfo("Info: Nothing to be done");
893 case 3: //V0OR with SDD requested (will only work with LHC11a dataset)
894 fSpecialSubTrigger=1;
895 cout << "V0OR with SDD requested" << endl;
898 AliError("Warning: Special Subtrigger Class Not known");
901 } else if (fSpecialTrigger == 1){ //AND with different detectors
902 switch(selectSpecialSubTriggerClass){
903 case 0: //with VZERO general implementation of V0AND (periods LHC11c onwards)
905 fSpecialSubTrigger=0;
906 fOfflineTriggerMask=AliVEvent::kINT7;
907 fTriggerSelectedManually = kTRUE;
908 fSpecialTriggerName="AliVEvent::kINT7";
912 fSpecialSubTrigger=0;
913 fOfflineTriggerMask=AliVEvent::kINT8;
914 fTriggerSelectedManually = kTRUE;
915 fSpecialTriggerName="AliVEvent::kINT8";
917 case 2: //with VZERO (will only work with LHC11a dataset)
919 fSpecialSubTrigger=0;
920 // AliInfo("Info: Nothing to be done");
922 case 3: //V0AND with SDD requested (will only work with LHC11a dataset)
924 fSpecialSubTrigger=1;
927 AliError("Warning: Special Subtrigger Class Not known");
930 } else if (fSpecialTrigger == 3){ // Selecting kCentral and kSemiCentral from trigger classes, not aliases
931 switch(selectSpecialSubTriggerClass){
932 case 0: // all together
933 fSpecialSubTrigger=0;
934 fSpecialSubTriggerName="";
935 // AliInfo("Info: Nothing to be done");
937 case 1: // kCentral - no vertex restriction
938 fSpecialSubTrigger=1;
939 fNSpecialSubTriggerOptions=1;
940 fSpecialSubTriggerName="CVHN";
941 cout << "kCentralOpen" << endl;
943 case 2: // kCentral - T00 +- 10 cm
944 fSpecialSubTrigger=1;
945 fNSpecialSubTriggerOptions=1;
946 fSpecialSubTriggerName="CCENT";
947 cout << "kCentralVertex" << endl;
949 case 3: // kCentral - both
950 fSpecialSubTrigger=1;
951 fNSpecialSubTriggerOptions=1;
952 fSpecialSubTriggerName="CVHN|CCENT";
953 cout << "kCentral both" << endl;
955 case 4: // kSemiCentral - no vertex restriction
956 fSpecialSubTrigger=1;
957 fNSpecialSubTriggerOptions=1;
958 fSpecialSubTriggerName="CVLN";
959 cout << "kSemiCentralOpen" << endl;
961 case 5: // kSemiCentral - T00 +- 10 cm
962 fSpecialSubTrigger=1;
963 fNSpecialSubTriggerOptions=1;
964 fSpecialSubTriggerName="CSEMI";
965 cout << "kSemiCentralVertex" << endl;
967 case 6: // kSemiCentral - both
968 fSpecialSubTrigger=1;
969 fNSpecialSubTriggerOptions=1;
970 fSpecialSubTriggerName="CSEMI%CVLN";
971 cout << "kSemiCentral both" << endl;
974 fSpecialSubTrigger=1;
975 fNSpecialSubTriggerOptions=1;
976 fSpecialSubTriggerName="CPBI1_|CPBI1-";
977 cout << "kMB 1" << endl;
980 fSpecialSubTrigger=1;
981 fNSpecialSubTriggerOptions=1;
982 fSpecialSubTriggerName="CPBI2_|CPBI2-";
983 cout << "kMB 2" << endl;
986 AliError("Warning: Special Subtrigger Class Not known");
989 } else if (fSpecialTrigger == 4){ // Subdivision of TRD trigger classes
990 switch(selectSpecialSubTriggerClass){
991 case 0: // all together
992 fSpecialSubTrigger=0;
993 fSpecialSubTriggerName="";
994 // AliInfo("Info: Nothing to be done");
996 case 1: // 7WUHSH - V0AND with single electron in TRD & EMCAL
997 fSpecialSubTrigger=1;
998 fNSpecialSubTriggerOptions=1;
999 fSpecialSubTriggerName="7WUHEE";
1001 case 2: // 8WUHSH - T0AND with single electron in TRD & EMCAL
1002 fSpecialSubTrigger=1;
1003 fNSpecialSubTriggerOptions=1;
1004 fSpecialSubTriggerName="8WUHEE";
1006 case 3: // 7WUHSE - V0AND with single high pt electron in TRD
1007 fSpecialSubTrigger=1;
1008 fNSpecialSubTriggerOptions=1;
1009 fSpecialSubTriggerName="7WUHSE";
1011 case 4: // 8WUHSE - T0AND with single high pt electron in TRD
1012 fSpecialSubTrigger=1;
1013 fNSpecialSubTriggerOptions=1;
1014 fSpecialSubTriggerName="8WUHSE";
1016 case 5: // 7WUHJE - V0AND with jet in TRD
1017 fSpecialSubTrigger=1;
1018 fNSpecialSubTriggerOptions=1;
1019 fSpecialSubTriggerName="7WUHJT";
1021 case 6: // 8WUHJE - T0AND with jet in TRD
1022 fSpecialSubTrigger=1;
1023 fNSpecialSubTriggerOptions=1;
1024 fSpecialSubTriggerName="8WUHJT";
1026 case 7: // 7WUHQU - V0AND with dielectron pair in TRD
1027 fSpecialSubTrigger=1;
1028 fNSpecialSubTriggerOptions=1;
1029 fSpecialSubTriggerName="7WUHQU";
1031 case 8: // 8WUHQU - T0AND with dielectron pair in TRD
1032 fSpecialSubTrigger=1;
1033 fNSpecialSubTriggerOptions=1;
1034 fSpecialSubTriggerName="8WUHQU";
1037 AliError("Warning: Special Subtrigger Class Not known");
1040 } else if (fSpecialTrigger == 5){ // Subdivision of kEMC trigger classes
1041 switch(selectSpecialSubTriggerClass){
1042 case 0: // all together
1043 fSpecialSubTrigger=0;
1044 fSpecialSubTriggerName="";
1045 // AliInfo("Info: Nothing to be done");
1047 case 1: // CEMC1 - V0OR and EMCAL fired
1048 fOfflineTriggerMask=AliVEvent::kEMC1;
1049 fSpecialTriggerName="AliVEvent::kEMC1";
1050 fSpecialSubTrigger=1;
1051 fNSpecialSubTriggerOptions=1;
1052 fSpecialSubTriggerName="CEMC1";
1054 case 2: // CEMC7 - V0AND and EMCAL fired
1055 fSpecialSubTrigger=1;
1056 fOfflineTriggerMask=AliVEvent::kEMC7;
1057 fSpecialTriggerName="AliVEvent::kEMC7";
1058 fNSpecialSubTriggerOptions=1;
1059 fSpecialSubTriggerName="CEMC7";
1061 case 3: // CEMC8 - T0OR and EMCAL fired
1062 fOfflineTriggerMask=AliVEvent::kEMC8;
1063 fSpecialTriggerName="AliVEvent::kEMC8";
1064 fSpecialSubTrigger=1;
1065 fNSpecialSubTriggerOptions=1;
1066 fSpecialSubTriggerName="CEMC8";
1069 AliError("Warning: Special Subtrigger Class Not known");
1072 } else if (fSpecialTrigger == 6){ // Subdivision of kPHI trigger classes
1073 switch(selectSpecialSubTriggerClass){
1074 case 0: // all together
1075 fSpecialSubTrigger=0;
1076 fSpecialSubTriggerName="";
1077 // AliInfo("Info: Nothing to be done");
1079 case 1: // CEMC1 - V0OR and EMCAL fired
1080 fOfflineTriggerMask=AliVEvent::kPHI1;
1081 fSpecialTriggerName="AliVEvent::kPHI1";
1082 fSpecialSubTrigger=1;
1083 fNSpecialSubTriggerOptions=1;
1084 fSpecialSubTriggerName="CPHI1";
1086 case 2: // CEMC7 - V0AND and EMCAL fired
1087 fSpecialSubTrigger=1;
1088 fOfflineTriggerMask=AliVEvent::kPHI7;
1089 fSpecialTriggerName="AliVEvent::kPHI7";
1090 fNSpecialSubTriggerOptions=1;
1091 fSpecialSubTriggerName="CPHI7";
1093 case 3: // CEMC8 - T0OR and EMCAL fired
1094 fOfflineTriggerMask=AliVEvent::kPHI8;
1095 fSpecialTriggerName="AliVEvent::kPHI8";
1096 fSpecialSubTrigger=1;
1097 fNSpecialSubTriggerOptions=1;
1098 fSpecialSubTriggerName="CPHI8";
1101 AliError("Warning: Special Subtrigger Class Not known");
1104 } else if (fSpecialTrigger == 7){ // Subdivision of kHighMult trigger classes
1105 switch(selectSpecialSubTriggerClass){
1106 case 0: // all together
1107 fSpecialSubTrigger=0;
1108 fSpecialSubTriggerName="";
1109 // AliInfo("Info: Nothing to be done");
1111 case 1: // CSHM1 - V0OR and high mult fired
1112 fSpecialSubTrigger=1;
1113 fNSpecialSubTriggerOptions=1;
1114 fSpecialSubTriggerName="CSHM1";
1116 case 2: // CSHM7 - V0AND and high mult fired
1117 fSpecialSubTrigger=1;
1118 fNSpecialSubTriggerOptions=1;
1119 fSpecialSubTriggerName="CSHM7";
1121 case 3: // CSHM8 - T0OR and high mult fired
1122 fSpecialSubTrigger=1;
1123 fNSpecialSubTriggerOptions=1;
1124 fSpecialSubTriggerName="CSHM8";
1127 AliError("Warning: Special Subtrigger Class Not known");
1130 } else if (fSpecialTrigger == 8){ // Subdivision of kEMCEGA trigger classes
1131 switch(selectSpecialSubTriggerClass){
1132 case 0: // all together
1133 fSpecialSubTrigger=0;
1134 fSpecialSubTriggerName="";
1135 // AliInfo("Info: Nothing to be done");
1137 case 1: // 7EGA - CINT7 EGA
1138 fSpecialSubTrigger=1;
1139 fNSpecialSubTriggerOptions=1;
1140 fSpecialSubTriggerName="7EGA";
1141 fTriggersEMCALSelected= 0;
1142 SETBIT(fTriggersEMCALSelected, kG2);
1144 case 2: // 8EGA - CINT8 EGA
1145 fSpecialSubTrigger=1;
1146 fNSpecialSubTriggerOptions=1;
1147 fSpecialSubTriggerName="8EGA";
1148 fTriggersEMCALSelected= 0;
1149 SETBIT(fTriggersEMCALSelected, kG2);
1151 case 3: // 7EG1 - CINT7 EG1
1152 fSpecialSubTrigger=1;
1153 fNSpecialSubTriggerOptions=1;
1154 fSpecialSubTriggerName="7EG1";
1155 fTriggersEMCALSelected= 0;
1156 SETBIT(fTriggersEMCALSelected, kG1);
1158 case 4: // 8EG1 - CINT8 EG1
1159 fSpecialSubTrigger=1;
1160 fNSpecialSubTriggerOptions=1;
1161 fSpecialSubTriggerName="8EG1";
1162 fTriggersEMCALSelected= 0;
1163 SETBIT(fTriggersEMCALSelected, kG1);
1165 case 5: // 7EG2 - CINT7 EG2
1166 fSpecialSubTrigger=1;
1167 fNSpecialSubTriggerOptions=1;
1168 fSpecialSubTriggerName="7EG2";
1169 fTriggersEMCALSelected= 0;
1170 SETBIT(fTriggersEMCALSelected, kG2);
1172 case 6: // 8EG2 - CINT8 EG2
1173 fSpecialSubTrigger=1;
1174 fNSpecialSubTriggerOptions=1;
1175 fSpecialSubTriggerName="8EG2";
1176 fTriggersEMCALSelected= 0;
1177 SETBIT(fTriggersEMCALSelected, kG2);
1180 AliError("Warning: Special Subtrigger Class Not known");
1183 } else if (fSpecialTrigger == 9){ // Subdivision of kEMCEGA trigger classes
1184 switch(selectSpecialSubTriggerClass){
1185 case 0: // all together
1186 fSpecialSubTrigger=0;
1187 fSpecialSubTriggerName="";
1188 // AliInfo("Info: Nothing to be done");
1190 case 1: // 7EJE - CINT7 EJE
1191 fSpecialSubTrigger=1;
1192 fNSpecialSubTriggerOptions=1;
1193 fSpecialSubTriggerName="7EJE";
1194 fTriggersEMCALSelected= 0;
1195 SETBIT(fTriggersEMCALSelected, kJ2);
1197 case 2: // 8EJE - CINT8 EJE
1198 fSpecialSubTrigger=1;
1199 fNSpecialSubTriggerOptions=1;
1200 fSpecialSubTriggerName="8EJE";
1201 fTriggersEMCALSelected= 0;
1202 SETBIT(fTriggersEMCALSelected, kJ2);
1204 case 3: // 7EJ1 - CINT7 EJ1
1205 fSpecialSubTrigger=1;
1206 fNSpecialSubTriggerOptions=1;
1207 fSpecialSubTriggerName="7EJ1";
1208 fTriggersEMCALSelected= 0;
1209 SETBIT(fTriggersEMCALSelected, kJ1);
1211 case 4: // 8EJ1 - CINT8 EJ1
1212 fSpecialSubTrigger=1;
1213 fNSpecialSubTriggerOptions=1;
1214 fSpecialSubTriggerName="8EJ1";
1215 fTriggersEMCALSelected= 0;
1216 SETBIT(fTriggersEMCALSelected, kJ1);
1218 case 5: // 7EJ2 - CINT7 EJ2
1219 fSpecialSubTrigger=1;
1220 fNSpecialSubTriggerOptions=1;
1221 fSpecialSubTriggerName="7EJ2";
1222 fTriggersEMCALSelected= 0;
1223 SETBIT(fTriggersEMCALSelected, kJ2);
1225 case 6: // 8EJ2 - CINT8 EJ2
1226 fSpecialSubTrigger=1;
1227 fNSpecialSubTriggerOptions=1;
1228 fSpecialSubTriggerName="8EJ2";
1229 fTriggersEMCALSelected= 0;
1230 SETBIT(fTriggersEMCALSelected, kJ2);
1233 AliError("Warning: Special Subtrigger Class Not known");
1240 ///________________________________________________________________________
1241 Bool_t AliConvEventCuts::SetMultiplicityMethod(Int_t multiplicityMethod)
1244 fMultiplicityMethod=multiplicityMethod;
1246 // 0 Photon Multiplicity
1247 // 1 TPC Track multiplicity
1254 ///________________________________________________________________________
1255 Bool_t AliConvEventCuts::SetRemovePileUp(Int_t removePileUp)
1257 switch(removePileUp){
1259 fRemovePileUp=kFALSE;
1262 fRemovePileUp=kTRUE;
1265 AliError("RemovePileUpCut not defined");
1271 ///________________________________________________________________________
1272 Bool_t AliConvEventCuts::SetRejectExtraSignalsCut(Int_t extraSignal) {
1274 switch(extraSignal){
1276 fRejectExtraSignals = 0;
1277 break; // No Rejection
1279 fRejectExtraSignals = 1;
1280 break; // MinBias Header
1282 fRejectExtraSignals = 2;
1283 break; // User String Array
1285 fRejectExtraSignals = 3;
1286 break; // Rejection for Gamma Correction only
1288 AliError(Form("Extra Signal Rejection not defined %d",extraSignal));
1294 //-------------------------------------------------------------
1295 Double_t AliConvEventCuts::GetCentrality(AliVEvent *event)
1296 { // Get Event Centrality
1298 AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
1300 AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
1301 if(fDetectorCentrality==0){
1302 if (fIsHeavyIon==2){
1303 return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
1305 return fESDCentrality->GetCentralityPercentile("V0M"); // default
1308 if(fDetectorCentrality==1){
1309 return fESDCentrality->GetCentralityPercentile("CL1");
1313 AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
1315 if(aodEvent->GetHeader()){return ((AliVAODHeader*)aodEvent->GetHeader())->GetCentrality();}
1321 //_____________________________________________________________________________________
1322 Bool_t AliConvEventCuts::IsCentralitySelected(AliVEvent *event, AliVEvent *fMCEvent)
1323 { // Centrality Selection
1324 if(!fIsHeavyIon)return kTRUE;
1326 if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
1327 else if ( fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-10*multfactor
1328 Double_t centrality=GetCentrality(event);
1329 if(centrality<0)return kFALSE;
1331 Int_t centralityC=0;
1332 if (fModCentralityClass == 0){
1333 centralityC= Int_t(centrality/10);
1334 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1338 else if (fModCentralityClass ==1){
1339 centralityC= Int_t(centrality);
1340 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1342 } else return kFALSE;
1344 else if (fModCentralityClass ==2){
1345 centralityC= Int_t(centrality);
1346 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1351 Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
1352 Int_t PrimaryTracks10[11][2] =
1364 { 0, 0} // 100 // only max accessible
1366 Int_t PrimaryTracks5a[11][2] =
1378 { 0, 162} // 50 only max accessible
1380 Int_t PrimaryTracks5b[11][2] =
1392 { 0, 0} // 100 only max accessible
1395 if(event->IsA()==AliESDEvent::Class()) column = 0;
1396 if(event->IsA()==AliAODEvent::Class()) column = 1;
1398 if (fModCentralityClass == 3){
1400 if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
1405 centralityC= Int_t(centrality/10);
1406 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1411 else if (fModCentralityClass ==4){
1413 if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
1418 centralityC= Int_t(centrality);
1419 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1421 } else return kFALSE;
1424 else if (fModCentralityClass ==5){
1426 if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
1431 centralityC= Int_t(centrality);
1432 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1441 ///________________________________________________________________________
1442 Bool_t AliConvEventCuts::VertexZCut(AliVEvent *event){
1443 // Cut on z position of primary vertex
1444 Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
1445 Double_t fVertexZSPD = 0;
1446 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1448 fVertexZSPD = fESDEvent->GetPrimaryVertexSPD()->GetZ();
1450 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1452 fVertexZSPD = fAODEvent->GetPrimaryVertexSPD()->GetZ();
1455 if(abs(fVertexZ)>fMaxVertexZ)return kFALSE;
1457 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
1458 ->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1459 if (periodName.CompareTo("LHC11h")==0){
1460 if (abs(fVertexZ-fVertexZSPD) > 0.1) return kFALSE;
1462 if (fIsHeavyIon == 2){
1463 if(fUtils->IsFirstEventInChunk(event)) return kFALSE;
1464 if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
1465 if(fUtils->IsPileUpEvent(event)) return kFALSE;
1471 ///________________________________________________________________________
1472 Int_t AliConvEventCuts::GetNumberOfContributorsVtx(AliVEvent *event){
1473 // returns number of contributors to the vertex
1475 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1477 if (fESDEvent->GetPrimaryVertex() != NULL){
1478 if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
1479 // cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
1480 return fESDEvent->GetPrimaryVertex()->GetNContributors();
1484 if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
1485 if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1486 // cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
1487 return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
1489 AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
1490 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1496 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1498 if (fAODEvent->GetPrimaryVertex() != NULL){
1499 if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
1500 return fAODEvent->GetPrimaryVertex()->GetNContributors();
1503 if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
1504 if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1505 return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
1507 AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
1512 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1517 ///________________________________________________________________________
1518 Bool_t AliConvEventCuts::IsTriggerSelected(AliVEvent *fInputEvent, Bool_t isMC)
1521 AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1524 UInt_t isSelected = AliVEvent::kAny;
1525 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1526 // cout << periodName.Data() << endl;
1528 if (fInputHandler==NULL) return kFALSE;
1529 if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
1531 TString firedTrigClass = fInputEvent->GetFiredTriggerClasses();
1532 if (!fTriggerSelectedManually){
1533 if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
1535 if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
1536 else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
1537 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 ) {
1538 fOfflineTriggerMask = AliVEvent::kINT7;
1539 // cout << "will take kINT7 as trigger mask" << endl;
1541 else fOfflineTriggerMask = AliVEvent::kMB;
1544 // Get the actual offline trigger mask for the event and AND it with the
1545 // requested mask. If no mask requested select by default the event.
1546 // if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
1547 // else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
1549 if (isMC) fOfflineTriggerMask = AliVEvent::kAny;
1551 if (fOfflineTriggerMask){
1552 isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
1554 if (isSelected && !fPreSelCut){
1555 // cout << "Special trigger: "<< fSpecialTrigger << " initialized " << fEMCALTrigInitialized << endl;
1556 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1557 if (!fEMCALTrigInitialized ) InitializeEMCALTrigger(fInputEvent);
1558 fTriggersEMCAL= GetTriggerList();
1560 if (fSpecialSubTrigger>0 && !isMC){
1561 if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
1563 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1565 // if (fTriggersEMCAL > 0)cout << "Special Trigger " << fSpecialTrigger << " triggers: " << fTriggersEMCAL << " selected triggers: " << fTriggersEMCALSelected << " run number: " <<fInputEvent->GetRunNumber()<<endl;
1566 if (fTriggersEMCAL&fTriggersEMCALSelected){
1567 // cout << "accepted ++++++++++++++++++++" << endl;
1572 //if for specif centrality trigger selection
1573 if(fSpecialSubTrigger == 1){
1574 if(fSpecialSubTriggerName.Contains("|")){
1575 TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("|");
1576 for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
1577 TObjString *NameClass = (TObjString*)ClassesList->At(i);
1578 if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
1579 // cout << "|||||||| \t" << NameClass->GetString() << "\t ||||||||" << endl;
1581 } else if(fSpecialSubTriggerName.Contains("%")){
1582 TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("%");
1583 for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
1584 TObjString *NameClass = (TObjString*)ClassesList->At(i);
1585 if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
1586 // cout << "|||||||| \t" << NameClass->GetString() << "\t ||||||||" << endl;
1588 } else if(fSpecialSubTriggerName.Contains("&")){
1589 TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("&");
1590 TString CheckClass = "";
1591 for (Int_t i=0; i<ClassesList->GetEntriesFast(); i++){
1592 TObjString *NameClass = (TObjString*)ClassesList->At(i);
1593 if (firedTrigClass.Contains(NameClass->GetString())) CheckClass+="1";
1594 else CheckClass+="0";
1596 if(CheckClass.Contains("0")) isSelected = 0;
1597 // cout << "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&" << endl;
1599 else if(firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 1;
1604 fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
1608 if (fIsSDDFired) hTriggerClass->Fill(33);
1609 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
1610 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
1611 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
1612 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
1613 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
1614 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
1615 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
1616 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
1617 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
1618 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
1619 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
1620 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
1621 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
1622 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
1623 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
1624 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
1625 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
1626 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
1627 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
1628 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
1629 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
1630 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
1631 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
1632 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
1633 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
1634 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
1635 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
1636 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
1637 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
1638 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
1639 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
1640 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
1641 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
1642 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
1643 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
1644 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
1645 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
1646 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
1647 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
1648 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
1649 if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
1652 if(hTriggerClassSelected && isSelected){
1653 if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
1654 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
1655 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
1656 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
1657 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
1658 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
1659 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
1660 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
1661 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
1662 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
1663 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
1664 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
1665 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
1666 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
1667 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
1668 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
1669 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
1670 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
1671 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
1672 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
1673 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
1674 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
1675 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
1676 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
1677 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
1678 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
1679 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
1680 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
1681 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
1682 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
1683 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
1684 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
1685 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
1686 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
1687 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
1688 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
1689 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
1690 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
1691 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
1692 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
1693 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
1696 if(!isSelected)return kFALSE;
1701 ///________________________________________________________________________
1702 TString AliConvEventCuts::GetCutNumber(){
1703 // returns TString with current cut number
1705 for(Int_t ii=0;ii<kNCuts;ii++){
1706 a.Append(Form("%d",fCuts[ii]));
1711 ///________________________________________________________________________
1712 void AliConvEventCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent){
1714 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1716 if(fNotRejectedStart){
1717 delete[] fNotRejectedStart;
1718 fNotRejectedStart = NULL;
1720 if(fNotRejectedEnd){
1721 delete[] fNotRejectedEnd;
1722 fNotRejectedEnd = NULL;
1724 if(fGeneratorNames){
1725 delete[] fGeneratorNames;
1726 fGeneratorNames = NULL;
1729 if(rejection == 0) return; // No Rejection
1731 AliGenCocktailEventHeader *cHeader = 0x0;
1732 AliAODMCHeader *cHeaderAOD = 0x0;
1733 Bool_t headerFound = kFALSE;
1734 AliStack *fMCStack = 0x0;
1735 TClonesArray *fMCStackAOD = 0x0;
1736 if(MCEvent->IsA()==AliMCEvent::Class()){
1737 if(dynamic_cast<AliMCEvent*>(MCEvent)){
1738 cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1739 if(cHeader) headerFound = kTRUE;
1740 fMCStack = dynamic_cast<AliStack*>(dynamic_cast<AliMCEvent*>(MCEvent)->Stack());
1743 if(MCEvent->IsA()==AliAODEvent::Class()){ // MCEvent is a AODEvent in case of AOD
1744 cHeaderAOD = dynamic_cast<AliAODMCHeader*>(MCEvent->FindListObject(AliAODMCHeader::StdBranchName()));
1745 fMCStackAOD = dynamic_cast<TClonesArray*>(MCEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1746 if(cHeaderAOD) headerFound = kTRUE;
1749 // cout << "event starts here" << endl;
1751 TList *genHeaders = 0x0;
1752 if(cHeader) genHeaders = cHeader->GetHeaders();
1754 genHeaders = cHeaderAOD->GetCocktailHeaders();
1755 if(genHeaders->GetEntries()==1){
1756 SetRejectExtraSignalsCut(0);
1760 AliGenEventHeader* gh = 0;
1762 Int_t firstindexA = 0;
1763 Int_t lastindexA = -1;
1764 if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
1765 if(rejection == 2){ // TList of Headers Names
1766 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1767 gh = (AliGenEventHeader*)genHeaders->At(i);
1768 TString GeneratorName = gh->GetName();
1769 lastindexA = lastindexA + gh->NProduced();
1770 // cout << i << "\t" << GeneratorName.Data() << endl;
1771 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1772 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
1773 // cout << GeneratorInList.Data() << endl;
1774 if(GeneratorName.CompareTo(GeneratorInList) == 0){
1775 // cout << "accepted" << endl;
1776 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1778 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1779 if (fMCStack->Particle(firstindexA)->GetPdgCode() == fAddedSignalPDGCode ) {
1780 if (gh->NProduced() > 10 && fMCStack->Particle(firstindexA+10)->GetPdgCode() == fAddedSignalPDGCode ){
1781 // cout << "cond 1: "<< fnHeaders << endl;
1788 // cout << "cond 2: " << fnHeaders << endl;
1795 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA));
1796 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1797 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1798 if (gh->NProduced() > 10){
1799 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA+10));
1800 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1801 // cout << "cond 1: " << fnHeaders << endl;
1809 // cout << "cond 2: " << fnHeaders << endl;
1816 // cout << "cond 3: "<< fnHeaders << endl;
1821 firstindexA = firstindexA + gh->NProduced();
1824 // cout << "number of headers: " <<fnHeaders << endl;
1826 fNotRejectedStart = new Int_t[fnHeaders];
1827 fNotRejectedEnd = new Int_t[fnHeaders];
1828 fGeneratorNames = new TString[fnHeaders];
1830 if(rejection == 1 || rejection == 3){
1831 fNotRejectedStart[0] = 0;
1832 fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
1833 fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
1837 Int_t firstindex = 0;
1838 Int_t lastindex = -1;
1841 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1842 gh = (AliGenEventHeader*)genHeaders->At(i);
1843 TString GeneratorName = gh->GetName();
1844 lastindex = lastindex + gh->NProduced();
1845 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1846 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
1847 // cout << i << "\t" << GeneratorName.Data() << endl;
1848 if(GeneratorName.CompareTo(GeneratorInList) == 0){
1849 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1851 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1852 if (fMCStack->Particle(firstindex)->GetPdgCode() == fAddedSignalPDGCode ) {
1853 cout << "produced " << gh->NProduced() << " with box generator" << endl;
1854 if (gh->NProduced() > 10 && fMCStack->Particle(firstindex+10)->GetPdgCode() == fAddedSignalPDGCode){
1855 // cout << "one of them was a pi0 or eta" << endl;
1856 fNotRejectedStart[number] = firstindex;
1857 fNotRejectedEnd[number] = lastindex;
1858 fGeneratorNames[number] = GeneratorName;
1860 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1865 fNotRejectedStart[number] = firstindex;
1866 fNotRejectedEnd[number] = lastindex;
1867 fGeneratorNames[number] = GeneratorName;
1873 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex));
1874 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1875 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1876 if (gh->NProduced() > 10) {
1877 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex+10));
1878 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1879 fNotRejectedEnd[number] = lastindex;
1880 fNotRejectedStart[number] = firstindex;
1881 fGeneratorNames[number] = GeneratorName;
1888 fNotRejectedStart[number] = firstindex;
1889 fNotRejectedEnd[number] = lastindex;
1890 fGeneratorNames[number] = GeneratorName;
1897 fNotRejectedStart[number] = firstindex;
1898 fNotRejectedEnd[number] = lastindex;
1899 fGeneratorNames[number] = GeneratorName;
1900 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1907 firstindex = firstindex + gh->NProduced();
1909 // for (Int_t i = 0; i < number; i++){
1910 // cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
1913 } else { // No Cocktail Header Found
1914 fNotRejectedStart = new Int_t[1];
1915 fNotRejectedEnd = new Int_t[1];
1918 fNotRejectedStart[0] = 0;
1919 fNotRejectedEnd[0] = static_cast<AliMCEvent*>(MCEvent)->Stack()->GetNprimary()-1;
1920 fGeneratorNames = new TString[1];
1921 fGeneratorNames[0] = "NoCocktailGeneratorFound";
1922 SetRejectExtraSignalsCut(0);
1927 //_________________________________________________________________________
1928 Int_t AliConvEventCuts::IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
1930 if(index < 0) return 0; // No Particle
1933 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
1934 if( index >= MCStack->GetNprimary()){ // Secondary Particle
1935 if( ((TParticle*)MCStack->Particle(index))->GetMother(0) < 0) return 1; // Secondary Particle without Mother??
1936 return IsParticleFromBGEvent(((TParticle*)MCStack->Particle(index))->GetMother(0),MCStack,InputEvent);
1938 for(Int_t i = 0;i<fnHeaders;i++){
1939 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1941 if(i == 0) accepted = 2; // MB Header
1945 else if(InputEvent->IsA()==AliAODEvent::Class()){
1946 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1947 if (AODMCTrackArray){
1948 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
1949 if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
1950 if(!aodMCParticle->IsPrimary()){
1951 if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
1952 return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
1954 index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
1955 for(Int_t i = 0;i<fnHeaders;i++){
1956 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1958 if(i == 0) accepted = 2; // MB Header
1967 //_________________________________________________________________________
1968 Int_t AliConvEventCuts::IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon, Bool_t isEMCALAnalysis){
1970 Bool_t isMC = kFALSE;
1971 if (MCEvent){isMC = kTRUE;}
1973 if ( !IsTriggerSelected(InputEvent, isMC) )
1976 if(isHeavyIon != 0 && !(IsCentralitySelected(InputEvent,MCEvent)))
1977 return 1; // Check Centrality --> Not Accepted => eventQuality = 1
1979 if(isHeavyIon == 0 && GetIsFromPileup()){
1980 if(InputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
1981 return 6; // Check Pileup --> Not Accepted => eventQuality = 6
1985 Bool_t hasV0And = ReaderCuts->HasV0AND();
1986 Bool_t isSDDFired = ReaderCuts->IsSDDFired();
1988 if( ( (IsSpecialTrigger() == 0 && IsSpecialSubTrigger() == 1) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !isSDDFired && !MCEvent)
1989 //if V0OR with SDD requested or V0AND with SDD request but the SDD has not fired
1990 return 7; // V0 with SDD requested but no fired
1992 if( ( (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 0) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !hasV0And)
1993 //if V0AND (only) or V0AND with SDD requested but V0AND requested but no fired
1994 return 8; // V0AND requested but no fired
1997 if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !MCEvent)
1998 return 7; // With SDD requested but no fired
2000 if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
2001 return 8; // V0AND requested but no fired
2003 // Special EMCAL checks due to hardware issues in LHC11a
2004 if (isEMCALAnalysis || IsSpecialTrigger() == 5 || IsSpecialTrigger() == 8 || IsSpecialTrigger() == 9 ){
2005 Int_t runnumber = InputEvent->GetRunNumber();
2006 if ((runnumber>=144871) && (runnumber<=146860)) {
2008 AliVCaloCells *cells = InputEvent->GetEMCALCells();
2009 const Short_t nCells = cells->GetNumberOfCells();
2011 if (InputEvent->IsA()==AliESDEvent::Class()) AliAnalysisManager::GetAnalysisManager()->LoadBranch("EMCALCells.");
2013 AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
2014 if (!fInputHandler) return 3;
2016 // count cells above threshold
2017 Int_t nCellCount[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
2018 for(Int_t iCell=0; iCell<nCells; ++iCell) {
2019 Short_t cellId = cells->GetCellNumber(iCell);
2020 Double_t cellE = cells->GetCellAmplitude(cellId);
2021 Int_t sm = cellId / (24*48);
2022 if (cellE>0.1) ++nCellCount[sm];
2025 Bool_t fIsLedEvent = kFALSE;
2026 if (nCellCount[4] > 100) {
2027 fIsLedEvent = kTRUE;
2029 if ((runnumber>=146858) && (runnumber<=146860)) {
2030 if ((fInputHandler->IsEventSelected() & AliVEvent::kMB) && (nCellCount[3]>=21))
2031 fIsLedEvent = kTRUE;
2032 else if ((fInputHandler->IsEventSelected() & AliVEvent::kEMC1) && (nCellCount[3]>=35))
2033 fIsLedEvent = kTRUE;
2042 if(hCentrality)hCentrality->Fill(GetCentrality(InputEvent));
2043 if(hCentralityVsNumberOfPrimaryTracks)
2044 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(InputEvent),
2045 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
2046 ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
2051 //_________________________________________________________________________
2052 Float_t AliConvEventCuts::GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
2053 if (!( period.Contains("LHC13d2") || period.Contains("LHC14a1") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") ||
2054 period.CompareTo("LHC14b2") == 0 || period.Contains("LHC14e2") || period.CompareTo("LHC12f1a") == 0 || period.CompareTo("LHC12f1b") == 0 ||
2055 period.CompareTo("LHC12i3") == 0)) return 1.;
2057 for (Int_t i = 0; i < fnHeaders; i++){
2058 if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
2059 if (period.Contains("LHC13d2") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.Contains("LHC14a1") ||
2060 period.CompareTo("LHC14b2") == 0 || period.Contains("LHC14e2") || period.CompareTo("LHC12f1a") == 0 || period.CompareTo("LHC12f1b") == 0 ||
2061 period.CompareTo("LHC12i3") == 0){
2066 if (kCaseGen == 0) return 1;
2068 Double_t mesonPt = 0;
2069 Double_t mesonMass = 0;
2071 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
2072 mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
2073 mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
2074 PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
2075 } else if(InputEvent->IsA()==AliAODEvent::Class()){
2076 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2077 if (AODMCTrackArray){
2078 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
2079 mesonPt = aodMCParticle->Pt();
2080 mesonMass = aodMCParticle->GetCalcMass();
2081 PDGCode = aodMCParticle->GetPdgCode();
2087 Float_t functionResultMC = 1.;
2088 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
2089 functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
2091 if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
2092 functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
2094 if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
2095 functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
2098 Float_t functionResultData = 1;
2099 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
2100 functionResultData = fFitDataPi0->Eval(mesonPt);
2102 if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
2103 functionResultData = fFitDataEta->Eval(mesonPt);
2105 if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
2106 functionResultData = fFitDataK0s->Eval(mesonPt);
2109 Double_t weight = 1;
2110 if (PDGCode == 111 || PDGCode == 221){
2111 if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
2112 weight = functionResultData/functionResultMC;
2113 if ( kCaseGen == 3){
2114 if (PDGCode == 111){
2115 if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
2119 if (PDGCode == 221){
2120 if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
2125 if (!isfinite(functionResultData)) weight = 1.;
2126 if (!isfinite(weight)) weight = 1.;
2128 } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
2129 weight = functionResultMC;
2135 ///________________________________________________________________________
2136 void AliConvEventCuts::GetCorrectEtaShiftFromPeriod(TString periodName){
2138 if(periodName.CompareTo("LHC12g") == 0 || //pilot run 2012
2139 periodName.CompareTo("LHC13b") == 0 || //mainly minimum bias
2140 periodName.CompareTo("LHC13c") == 0 || //mainly minimum bias
2141 periodName.CompareTo("LHC13d") == 0 || //mainly triggered
2142 periodName.CompareTo("LHC13e") == 0 || //mainly triggered
2143 periodName.CompareTo("LHC13c3") == 0 || //MC Starlight, anchor LHC13d+e
2144 periodName.CompareTo("LHC13c2") == 0 || //MC Starlight, coherent J/Psi, UPC muon anchor LHC13d+e
2145 periodName.CompareTo("LHC13b4") == 0 || //MC Pythia 6 (Jet-Jet), anchor LHC13b
2146 periodName.CompareTo("LHC13b2_fix_1") == 0 || //MC DPMJET, anchr LHC13b+c
2147 periodName.CompareTo("LHC13b2_efix_p1") == 0 || //MC DPMJET, anchr LHC13b+c
2148 periodName.CompareTo("LHC13b2_efix_p2") == 0 || //MC DPMJET, anchr LHC13b+c
2149 periodName.CompareTo("LHC13b2_efix_p3") == 0 || //MC DPMJET, anchr LHC13b+c
2150 periodName.CompareTo("LHC13b2_efix_p4") == 0 || //MC DPMJET, anchr LHC13b+c
2151 periodName.CompareTo("LHC13e7") == 0 || //MC DPMJET, anchr LHC13b+c
2152 periodName.CompareTo("LHC13b3") == 0 || //MC HIJING, weighted to number of events per run, anchor LHC13b
2153 periodName.CompareTo("LHC13b2") == 0 || // MC DPMJET, wrong energy, anchor LHC13b
2154 periodName.CompareTo("LHC13b2_plus") == 0 || // MC DPMJET, weighted to number event per run, anchor LHC13b
2155 periodName.CompareTo("LHC13c1_bis") == 0 || // MC AMPT fast generation, pT hardbin, anchor ?
2156 periodName.CompareTo("LHC13c1") == 0 || // MC AMPT fast generation, anchor ?
2157 periodName.CompareTo("LHC13b1") == 0 || // MC DPMJET, fragments, with fixed label 0, anchor LHC12g
2158 periodName.CompareTo("LHC12g4b_fix") == 0 || // MC DPMJET, with fixed label 0, anchor LHC12g
2159 periodName.CompareTo("LHC12g1_fix") == 0 || // MC ?, with fixed label 0, anchor LHC12g
2160 periodName.CompareTo("LHC12g4c") == 0 || // MC DPMJET, shifted vertex runs, anchor LHC12g
2161 periodName.CompareTo("LHC12h6") == 0 || // MC muon cocktail, anchor LHC12g
2162 periodName.CompareTo("LHC12g4b") == 0 || // MC DPMJET 3rd iteration, anchor LHC12g
2163 periodName.CompareTo("LHC12g4a") == 0 || // MC DPMJET improved, anchor LHC12g
2164 periodName.CompareTo("LHC12g4") == 0 || // MC DPMJET, anchor LHC12g
2165 periodName.CompareTo("LHC12g5") == 0 || // MC PHOJET, anchor LHC12g
2166 periodName.CompareTo("LHC12g2") == 0 || // MC Starlight background, anchor LHC12g
2167 periodName.CompareTo("LHC12g1") == 0 ) // MC ?, anchor LHC12g
2169 printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
2170 SetEtaShift(-0.465);
2172 else if(periodName.CompareTo("LHC13f") == 0 ||
2173 periodName.CompareTo("LHC13c6b") == 0 ||// MC Jpsi -> mumu, anchor LHC13f
2174 periodName.CompareTo("LHC13c5") == 0 || //MC Starlight, gamma gamma UPC muon, anchor LHC13f
2175 periodName.CompareTo("LHC13c4") == 0 )//MC Starlight, coherent JPsi, UPC muon, anchor LHC13f
2177 printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
2178 SetEtaShift(+0.465);
2180 else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
2183 //________________________________________________________________________
2184 AliEmcalTriggerPatchInfo* AliConvEventCuts::GetMainTriggerPatch()
2186 //get main trigger match; if not known yet, look for it and cache
2188 if (fMainTriggerPatchEMCAL)
2189 return fMainTriggerPatchEMCAL;
2191 if (!fTriggerPatchInfo) {
2192 AliError(Form("%s: fTriggerPatchInfo not available",GetName()));
2196 //number of patches in event
2197 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2199 //extract main trigger patch
2200 AliEmcalTriggerPatchInfo *patch;
2201 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2202 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2203 if (patch->IsMainTrigger()) {
2204 fMainTriggerPatchEMCAL = patch;
2209 return fMainTriggerPatchEMCAL;
2213 //________________________________________________________________________
2214 void AliConvEventCuts::InitializeEMCALTrigger(AliVEvent *fInputEvent)
2216 // cout << "entered EMCAL trigger initialization" << endl;
2218 // Init the analysis.
2219 if (fCaloTriggersName.IsNull()){
2220 if (fInputEvent->IsA()==AliESDEvent::Class()){
2221 fCaloTriggersName = "EMCALTrigger";
2223 fCaloTriggersName = "emcalTrigger";
2227 if (!fCaloTriggersName.IsNull() && !fCaloTriggers) {
2228 fCaloTriggers = dynamic_cast<AliVCaloTrigger*>(fInputEvent->FindListObject(fCaloTriggersName));
2229 if (!fCaloTriggers) {
2230 AliError(Form("%s: Could not retrieve calo triggers %s!", GetName(), fCaloTriggersName.Data()));
2235 if (fCaloTriggerPatchInfoName.IsNull()){
2236 if (fInputEvent->IsA()==AliESDEvent::Class()){
2237 fCaloTriggerPatchInfoName = "EmcalTriggers";
2239 fCaloTriggerPatchInfoName = "EmcalTriggers";
2243 if (!fCaloTriggerPatchInfoName.IsNull() && !fTriggerPatchInfo) {
2244 fTriggerPatchInfo = GetArrayFromEvent(fInputEvent, fCaloTriggerPatchInfoName.Data(), "AliEmcalTriggerPatchInfo");
2245 if (!fTriggerPatchInfo) {
2246 AliError(Form("%s: Could not retrieve calo trigger patch info %s!", GetName(), fCaloTriggerPatchInfoName.Data()));
2252 fEMCALTrigInitialized = kTRUE;
2255 //________________________________________________________________________
2256 ULong_t AliConvEventCuts::GetTriggerList(){
2257 if (!fTriggerPatchInfo)
2259 //number of patches in event
2260 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2262 //loop over patches to define trigger type of event
2268 AliEmcalTriggerPatchInfo *patch;
2269 // if (nPatch> 0) {cout << "NEW Triggers in this event*********************************" << endl;}
2270 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2271 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2272 // cout << "Patch energy: "<<patch->GetPatchE() << "\t ADC counts: " << patch->GetADCAmp() << endl;
2273 // cout << "Phi: " << patch->GetPhiMin() << " - " << patch->GetPhiMax() << " delta phi: " <<abs(patch->GetPhiMin()-patch->GetPhiMax())<< endl;
2274 // cout << "Eta: " << patch->GetEtaMin() << " - " << patch->GetEtaMax() << " delta eta: " <<abs(patch->GetEtaMin()-patch->GetEtaMax())<< endl;
2275 if (patch->IsGammaHigh()){
2276 // cout << "fired L1GA high" << endl;
2279 if (patch->IsGammaLow()){
2280 // cout << "fired L1GA low" << endl;
2283 if (patch->IsJetHigh()){
2284 // cout << "fired L1JE high" << endl;
2287 if (patch->IsJetLow()){
2288 // cout << "fired L1JE low" << endl;
2291 if (patch->IsLevel0()){
2292 // cout << "fired L0" << endl;
2295 // cout << patch->GetPatchE() << "\t" << patch->GetADCAmp() << "\t" << patch->IsGammaHigh() << "\t" << patch->IsGammaLow()
2296 // << "\t" << patch->IsJetHigh() << "\t" << patch->IsJetLow() << "\t" << patch->IsLevel0()
2297 // << "\t" << patch->GetPhiMin() << "\t" << patch->GetPhiMax() << "\t" << abs(patch->GetPhiMin()-patch->GetPhiMax())
2298 // << "\t" << patch->GetEtaMin() << "\t" << patch->GetEtaMax() << "\t" << abs(patch->GetEtaMin()-patch->GetEtaMax()) << endl;
2302 AliDebug(2, "Patch summary: ");
2303 AliDebug(2, Form("Number of patches: %d", nPatch));
2304 AliDebug(2, Form("Level0: [%d]" ,nL0));
2305 AliDebug(2, Form("Jet: low[%d], high[%d]" ,nJ2, nJ1));
2306 AliDebug(2, Form("Gamma: low[%d], high[%d]" ,nG2, nG1));
2310 // cout << Form("Number of patches: %d", nPatch) << endl;
2311 // cout << Form("Level0: [%d]" ,nL0) << endl;
2312 // cout << Form("Jet: low[%d], high[%d]" ,nJ2, nJ1) << endl;
2313 // cout << Form("Gamma: low[%d], high[%d]" ,nG2, nG1) << endl;
2316 ULong_t triggers(0);
2318 SETBIT(triggers, kG1);
2320 SETBIT(triggers, kG2);
2322 SETBIT(triggers, kJ1);
2324 SETBIT(triggers, kJ2);
2326 SETBIT(triggers, kL0);
2330 //________________________________________________________________________
2331 Bool_t AliConvEventCuts::HasTriggerType(TriggerTypeEMCAL t){
2332 // Check if event has a given trigger type
2334 return fTriggersEMCAL == 0;
2336 return TESTBIT(fTriggersEMCAL, int(t));
2340 //________________________________________________________________________
2341 TClonesArray *AliConvEventCuts::GetArrayFromEvent(AliVEvent* fInputEvent, const char *name, const char *clname)
2343 // Get array from event.
2345 TClonesArray *arr = 0;
2346 TString sname(name);
2347 if (!sname.IsNull()) {
2348 arr = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(sname));
2350 AliWarning(Form("%s: Could not retrieve array with name %s!", GetName(), name));
2360 TString objname(arr->GetClass()->GetName());
2361 TClass cls(objname);
2362 if (!cls.InheritsFrom(clname)) {
2363 AliWarning(Form("%s: Objects of type %s in %s are not inherited from %s!",
2364 GetName(), cls.GetName(), name, clname));
2370 //_________________________________________________________________________
2371 Bool_t AliConvEventCuts::IsConversionPrimaryESD( AliStack *MCStack, Int_t stackpos, Double_t prodVtxX, Double_t prodVtxY, Double_t prodVtxZ){
2373 TParticle* particle = (TParticle *)MCStack->Particle(stackpos);
2374 if (!particle) return kFALSE;
2375 if (particle->GetMother(0) != -1){
2376 Double_t deltaX = particle->Vx() - prodVtxX;
2377 Double_t deltaY = particle->Vy() - prodVtxY;
2378 Double_t deltaZ = particle->Vz() - prodVtxZ;
2380 Double_t realRadius2D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY);
2381 Double_t realRadius3D = TMath::Sqrt(deltaX*deltaX+deltaY*deltaY+deltaZ*deltaZ);
2384 Bool_t dalitzCand = kFALSE;
2386 TParticle* firstmother = (TParticle *)MCStack->Particle(particle->GetMother(0));
2387 Int_t pdgCodeFirstMother = firstmother->GetPdgCode();
2388 Bool_t intDecay = kFALSE;
2389 if ( pdgCodeFirstMother == 111 || pdgCodeFirstMother == 221 ) intDecay = kTRUE;
2390 if ( intDecay && abs(particle->GetPdgCode()) == 11 ){
2392 // cout << "dalitz candidate found" << endl;
2395 Int_t source = particle->GetMother(0);
2396 Bool_t foundExcludedPart = kFALSE;
2397 Bool_t foundShower = kFALSE;
2398 Int_t pdgCodeMotherPrev = 0;
2399 Int_t pdgCodeMotherPPrevMother = 0;
2401 if (dalitzCand || realRadius3D < fSecProdBoundary ){
2402 // if (particle->GetPdgCode() == 22){
2403 // cout << endl << endl << "new particle: " << stackpos <<endl;
2404 // cout << particle->GetPdgCode() << "\t" << particle->R() << "\t" << realRadius2D << "\t" << realRadius3D << endl;
2407 TParticle* mother = (TParticle *)MCStack->Particle(source);
2408 source = mother->GetMother(0);
2409 // if (particle->GetPdgCode() == 22)cout << "Stackposition: "<< source << endl;
2410 Int_t pdgCodeMother = mother->GetPdgCode();
2411 // if (particle->GetPdgCode() == 22)cout << "Previous mothers: " << pdgCodeMother << "\t"<< pdgCodeMotherPrev<< "\t" << pdgCodeMotherPPrevMother << endl;
2412 if (pdgCodeMother == pdgCodeMotherPrev && pdgCodeMother == pdgCodeMotherPPrevMother) depth = 20;
2413 if (abs(pdgCodeMother) == 11 && abs(pdgCodeMotherPrev) == 22 && abs(pdgCodeMotherPPrevMother) == 11 ){
2414 foundShower = kTRUE;
2417 if (abs(pdgCodeMother) == 22 && abs(pdgCodeMotherPrev) == 11 && abs(pdgCodeMotherPPrevMother) == 22 ){
2418 foundShower = kTRUE;
2422 // particles to be excluded:
2428 // Sigma+/- - 3222, 3112
2429 // Cascades - 3322, 3312
2430 if (abs(pdgCodeMother) == 310 || abs(pdgCodeMother) == 130 || abs(pdgCodeMother) == 321 ||
2431 abs(pdgCodeMother) == 3122 || abs(pdgCodeMother) == 3212 || abs(pdgCodeMother) == 3222 ||
2432 abs(pdgCodeMother) == 3112 || abs(pdgCodeMother) == 3322 || abs(pdgCodeMother) == 3312
2434 foundExcludedPart = kTRUE;
2436 // if (particle->GetPdgCode() == 22)cout << mother->GetPdgCode() << "\t" << source << "\t" << foundExcludedPart<< endl;
2437 pdgCodeMotherPPrevMother = pdgCodeMotherPrev;
2438 pdgCodeMotherPrev = pdgCodeMother;
2439 if (source == -1) depth = 20;
2441 // if (particle->GetPdgCode() == 22)cout << depth << endl;
2445 if (foundExcludedPart){
2446 // if (particle->GetPdgCode() == 22)cout << "This is definitely a secondary, manually excluded" << endl;
2448 } else if (dalitzCand){
2449 // if (particle->GetPdgCode() == 22)cout << "This was a decay via a virtual photon" << endl;
2451 } else if (foundShower){
2452 // if (particle->GetPdgCode() == 22)cout << "This is a shower" << endl;
2454 } else if (realRadius3D > fSecProdBoundary){
2455 // cout << "This is a secondary, to large production radius" << endl;