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 if (fSpecialSubTrigger == 0){
669 printf("\t only events triggered by V0OR will be analysed \n");
670 } else if (fSpecialSubTrigger == 1){
671 printf("\t only events where SDD was present will be analysed \n");
673 } else if (fSpecialTrigger == 1){
674 if (fSpecialSubTrigger == 0){
675 printf("\t only events triggered by V0AND will be analysed \n");
676 } else if(fSpecialSubTrigger == 1){
677 printf("\t only events where SDD was present will be analysed and triggered by VOAND\n");
679 } else if (fSpecialTrigger > 1){
680 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
682 } else if (fIsHeavyIon == 1){
683 printf("Running in PbPb mode \n");
684 if (fDetectorCentrality == 0){
685 printf("\t centrality selection based on V0M \n");
686 } else if (fDetectorCentrality == 1){
687 printf("\t centrality selection based on Cl1 \n");
689 if (fModCentralityClass == 0){
690 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
691 } else if ( fModCentralityClass == 1){
692 printf("\t %d - %d \n", fCentralityMin*5, fCentralityMax*5);
693 } else if ( fModCentralityClass == 2){
694 printf("\t %d - %d \n", fCentralityMin*5+45, fCentralityMax*5+45);
695 } else if (fModCentralityClass == 3){
696 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*10, fCentralityMax*10);
697 } else if ( fModCentralityClass == 4){
698 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5, fCentralityMax*5);
699 } else if ( fModCentralityClass == 5){
700 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5+45, fCentralityMax*5+45);
702 if (fSpecialTrigger == 0){
703 printf("\t only events triggered by kMB, kCentral, kSemiCentral will be analysed \n");
704 } else if (fSpecialTrigger > 1){
705 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
706 printf("\n\t SpecialTrigger is: %s\n", fSpecialTriggerName.Data());
707 printf("\t SpecialSubTrigger is: %s\n\n", fSpecialSubTriggerName.Data());
709 } else if (fIsHeavyIon == 2){
710 printf("Running in pPb mode \n");
711 if (fDetectorCentrality == 0){
712 printf("\t centrality selection based on V0A \n");
713 } else if (fDetectorCentrality == 1){
714 printf("\t centrality selection based on Cl1 \n");
716 if (fModCentralityClass == 0){
717 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
719 if (fSpecialTrigger == 0){
720 printf("\t only events triggered by kINT7 will be analysed \n");
721 } else if (fSpecialTrigger > 1){
722 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
725 printf("MC event cuts: \n");
726 if (fRejectExtraSignals == 0) printf("\t no rejection was applied \n");
727 else if (fRejectExtraSignals == 1) printf("\t only MB header will be inspected \n");
728 else if (fRejectExtraSignals > 1) printf("\t special header have been selected \n");
731 ///________________________________________________________________________
732 Bool_t AliConvEventCuts::SetIsHeavyIon(Int_t isHeavyIon)
740 fDetectorCentrality=0;
744 fDetectorCentrality=1;
746 case 3: //allows to select centrality 0-45% in steps of 5% for V0 Multiplicity
748 fDetectorCentrality=0;
749 fModCentralityClass=1;
751 case 4: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
753 fDetectorCentrality=0;
754 fModCentralityClass=2;
756 case 5: //strict cut on v0 tracks for MC
758 fDetectorCentrality=0;
759 fModCentralityClass=3;
761 case 6: //allows to select centrality 0-45% in steps of 5% for track mult
762 //strict cut on v0 tracks for MC
764 fDetectorCentrality=0;
765 fModCentralityClass=4;
767 case 7: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
768 //strict cut on v0 tracks for MC
770 fDetectorCentrality=0;
771 fModCentralityClass=5;
775 fDetectorCentrality=0;
779 fDetectorCentrality=1;
782 AliError(Form("SetHeavyIon not defined %d",isHeavyIon));
788 //___________________________________________________________________
789 Bool_t AliConvEventCuts::SetCentralityMin(Int_t minCentrality)
792 if(minCentrality<0||minCentrality>9){
793 AliError(Form("minCentrality not defined %d",minCentrality));
797 fCentralityMin=minCentrality;
801 //___________________________________________________________________
802 Bool_t AliConvEventCuts::SetCentralityMax(Int_t maxCentrality)
805 if(maxCentrality<0||maxCentrality>9){
806 AliError(Form("maxCentrality not defined %d",maxCentrality));
809 fCentralityMax=maxCentrality;
813 ///________________________________________________________________________
814 Bool_t AliConvEventCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
817 switch(selectSpecialTrigger){
819 fSpecialTrigger=0; // V0OR
822 fSpecialTrigger=1; // V0AND
825 // fSpecialTrigger=2; //
828 fSpecialTrigger=3; //specific centrality trigger selection
829 fSpecialTriggerName="AliVEvent::kCentral/kSemiCentral/kMB";
832 fSpecialTrigger=4; // trigger alias kTRD
833 fOfflineTriggerMask=AliVEvent::kTRD;
834 fTriggerSelectedManually = kTRUE;
835 fSpecialTriggerName="AliVEvent::kTRD";
838 fSpecialTrigger=5; // trigger alias kEMC
839 fOfflineTriggerMask=AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMC1 ;
840 fTriggerSelectedManually = kTRUE;
841 fTriggersEMCALSelected= 0;
842 SETBIT(fTriggersEMCALSelected, kL0);
843 fSpecialTriggerName="AliVEvent::kEMC7/kEMC8/kEMC1";
846 fSpecialTrigger=6; // trigger alias kPHI
847 fOfflineTriggerMask=AliVEvent::kPHI7 | AliVEvent::kPHI1 | AliVEvent::kPHI8 | AliVEvent::kPHOSPb;
848 fTriggerSelectedManually = kTRUE;
849 fSpecialTriggerName="AliVEvent::kPHI7/kPHI1/kPHI8/kPHOSPb";
852 fSpecialTrigger=7; // trigger alias kHighMult
853 fOfflineTriggerMask=AliVEvent::kHighMult;
854 fTriggerSelectedManually = kTRUE;
855 fSpecialTriggerName="AliVEvent::kHighMult";
858 fSpecialTrigger=8; // trigger alias kEMCEGA
859 fOfflineTriggerMask=AliVEvent::kEMCEGA;
860 fTriggerSelectedManually = kTRUE;
861 fTriggersEMCALSelected= 0;
862 SETBIT(fTriggersEMCALSelected, kG2);
863 fSpecialTriggerName="AliVEvent::kEMCEGA";
866 fSpecialTrigger=9; // trigger alias kEMCEJE
867 fOfflineTriggerMask=AliVEvent::kEMCEJE;
868 fTriggerSelectedManually = kTRUE;
869 fTriggersEMCALSelected= 0;
870 SETBIT(fTriggersEMCALSelected, kJ2);
871 fSpecialTriggerName="AliVEvent::kEMCEJE";
874 AliError("Warning: Special Trigger Not known");
880 ///________________________________________________________________________
881 Bool_t AliConvEventCuts::SetSelectSubTriggerClass(Int_t selectSpecialSubTriggerClass)
884 if (fSpecialTrigger == 0){ //OR
885 switch(selectSpecialSubTriggerClass){
888 fSpecialSubTrigger=0;
889 // AliInfo("Info: Nothing to be done");
891 case 3: //V0OR with SDD requested (will only work with LHC11a dataset)
892 fSpecialSubTrigger=1;
893 cout << "V0OR with SDD requested" << endl;
896 AliError("Warning: Special Subtrigger Class Not known");
899 } else if (fSpecialTrigger == 1){ //AND with different detectors
900 switch(selectSpecialSubTriggerClass){
901 case 0: //with VZERO general implementation of V0AND (periods LHC11c onwards)
903 fSpecialSubTrigger=0;
904 fOfflineTriggerMask=AliVEvent::kINT7;
905 fTriggerSelectedManually = kTRUE;
906 fSpecialTriggerName="AliVEvent::kINT7";
910 fSpecialSubTrigger=0;
911 fOfflineTriggerMask=AliVEvent::kINT8;
912 fTriggerSelectedManually = kTRUE;
913 fSpecialTriggerName="AliVEvent::kINT8";
915 case 2: //with VZERO (will only work with LHC11a dataset)
917 fSpecialSubTrigger=0;
918 // AliInfo("Info: Nothing to be done");
920 case 3: //V0AND with SDD requested (will only work with LHC11a dataset)
922 fSpecialSubTrigger=1;
925 AliError("Warning: Special Subtrigger Class Not known");
928 } else if (fSpecialTrigger == 3){ // Selecting kCentral and kSemiCentral from trigger classes, not aliases
929 switch(selectSpecialSubTriggerClass){
930 case 0: // all together
931 fSpecialSubTrigger=0;
932 fSpecialSubTriggerName="";
933 // AliInfo("Info: Nothing to be done");
935 case 1: // kCentral - no vertex restriction
936 fSpecialSubTrigger=1;
937 fNSpecialSubTriggerOptions=1;
938 fSpecialSubTriggerName="CVHN";
939 cout << "kCentralOpen" << endl;
941 case 2: // kCentral - T00 +- 10 cm
942 fSpecialSubTrigger=1;
943 fNSpecialSubTriggerOptions=1;
944 fSpecialSubTriggerName="CCENT";
945 cout << "kCentralVertex" << endl;
947 case 3: // kCentral - both
948 fSpecialSubTrigger=1;
949 fNSpecialSubTriggerOptions=1;
950 fSpecialSubTriggerName="CVHN|CCENT";
951 cout << "kCentral both" << endl;
953 case 4: // kSemiCentral - no vertex restriction
954 fSpecialSubTrigger=1;
955 fNSpecialSubTriggerOptions=1;
956 fSpecialSubTriggerName="CVLN";
957 cout << "kSemiCentralOpen" << endl;
959 case 5: // kSemiCentral - T00 +- 10 cm
960 fSpecialSubTrigger=1;
961 fNSpecialSubTriggerOptions=1;
962 fSpecialSubTriggerName="CSEMI";
963 cout << "kSemiCentralVertex" << endl;
965 case 6: // kSemiCentral - both
966 fSpecialSubTrigger=1;
967 fNSpecialSubTriggerOptions=1;
968 fSpecialSubTriggerName="CSEMI%CVLN";
969 cout << "kSemiCentral both" << endl;
972 fSpecialSubTrigger=1;
973 fNSpecialSubTriggerOptions=1;
974 fSpecialSubTriggerName="CPBI1_|CPBI1-";
975 cout << "kMB 1" << endl;
978 fSpecialSubTrigger=1;
979 fNSpecialSubTriggerOptions=1;
980 fSpecialSubTriggerName="CPBI2_|CPBI2-";
981 cout << "kMB 2" << endl;
984 AliError("Warning: Special Subtrigger Class Not known");
987 } else if (fSpecialTrigger == 4){ // Subdivision of TRD trigger classes
988 switch(selectSpecialSubTriggerClass){
989 case 0: // all together
990 fSpecialSubTrigger=0;
991 fSpecialSubTriggerName="";
992 // AliInfo("Info: Nothing to be done");
994 case 1: // 7WUHSH - V0AND with single electron in TRD & EMCAL
995 fSpecialSubTrigger=1;
996 fNSpecialSubTriggerOptions=1;
997 fSpecialSubTriggerName="7WUHEE";
999 case 2: // 8WUHSH - T0AND with single electron in TRD & EMCAL
1000 fSpecialSubTrigger=1;
1001 fNSpecialSubTriggerOptions=1;
1002 fSpecialSubTriggerName="8WUHEE";
1004 case 3: // 7WUHSE - V0AND with single high pt electron in TRD
1005 fSpecialSubTrigger=1;
1006 fNSpecialSubTriggerOptions=1;
1007 fSpecialSubTriggerName="7WUHSE";
1009 case 4: // 8WUHSE - T0AND with single high pt electron in TRD
1010 fSpecialSubTrigger=1;
1011 fNSpecialSubTriggerOptions=1;
1012 fSpecialSubTriggerName="8WUHSE";
1014 case 5: // 7WUHJE - V0AND with jet in TRD
1015 fSpecialSubTrigger=1;
1016 fNSpecialSubTriggerOptions=1;
1017 fSpecialSubTriggerName="7WUHJT";
1019 case 6: // 8WUHJE - T0AND with jet in TRD
1020 fSpecialSubTrigger=1;
1021 fNSpecialSubTriggerOptions=1;
1022 fSpecialSubTriggerName="8WUHJT";
1024 case 7: // 7WUHQU - V0AND with dielectron pair in TRD
1025 fSpecialSubTrigger=1;
1026 fNSpecialSubTriggerOptions=1;
1027 fSpecialSubTriggerName="7WUHQU";
1029 case 8: // 8WUHQU - T0AND with dielectron pair in TRD
1030 fSpecialSubTrigger=1;
1031 fNSpecialSubTriggerOptions=1;
1032 fSpecialSubTriggerName="8WUHQU";
1035 AliError("Warning: Special Subtrigger Class Not known");
1038 } else if (fSpecialTrigger == 5){ // Subdivision of kEMC 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: // CEMC1 - V0OR and EMCAL fired
1046 fOfflineTriggerMask=AliVEvent::kEMC1;
1047 fSpecialTriggerName="AliVEvent::kEMC1";
1048 fSpecialSubTrigger=1;
1049 fNSpecialSubTriggerOptions=1;
1050 fSpecialSubTriggerName="CEMC1";
1052 case 2: // CEMC7 - V0AND and EMCAL fired
1053 fSpecialSubTrigger=1;
1054 fOfflineTriggerMask=AliVEvent::kEMC7;
1055 fSpecialTriggerName="AliVEvent::kEMC7";
1056 fNSpecialSubTriggerOptions=1;
1057 fSpecialSubTriggerName="CEMC7";
1059 case 3: // CEMC8 - T0OR and EMCAL fired
1060 fOfflineTriggerMask=AliVEvent::kEMC8;
1061 fSpecialTriggerName="AliVEvent::kEMC8";
1062 fSpecialSubTrigger=1;
1063 fNSpecialSubTriggerOptions=1;
1064 fSpecialSubTriggerName="CEMC8";
1067 AliError("Warning: Special Subtrigger Class Not known");
1070 } else if (fSpecialTrigger == 6){ // Subdivision of kPHI trigger classes
1071 switch(selectSpecialSubTriggerClass){
1072 case 0: // all together
1073 fSpecialSubTrigger=0;
1074 fSpecialSubTriggerName="";
1075 // AliInfo("Info: Nothing to be done");
1077 case 1: // CEMC1 - V0OR and EMCAL fired
1078 fOfflineTriggerMask=AliVEvent::kPHI1;
1079 fSpecialTriggerName="AliVEvent::kPHI1";
1080 fSpecialSubTrigger=1;
1081 fNSpecialSubTriggerOptions=1;
1082 fSpecialSubTriggerName="CPHI1";
1084 case 2: // CEMC7 - V0AND and EMCAL fired
1085 fSpecialSubTrigger=1;
1086 fOfflineTriggerMask=AliVEvent::kPHI7;
1087 fSpecialTriggerName="AliVEvent::kPHI7";
1088 fNSpecialSubTriggerOptions=1;
1089 fSpecialSubTriggerName="CPHI7";
1091 case 3: // CEMC8 - T0OR and EMCAL fired
1092 fOfflineTriggerMask=AliVEvent::kPHI8;
1093 fSpecialTriggerName="AliVEvent::kPHI8";
1094 fSpecialSubTrigger=1;
1095 fNSpecialSubTriggerOptions=1;
1096 fSpecialSubTriggerName="CPHI8";
1099 AliError("Warning: Special Subtrigger Class Not known");
1102 } else if (fSpecialTrigger == 7){ // Subdivision of kHighMult trigger classes
1103 switch(selectSpecialSubTriggerClass){
1104 case 0: // all together
1105 fSpecialSubTrigger=0;
1106 fSpecialSubTriggerName="";
1107 // AliInfo("Info: Nothing to be done");
1109 case 1: // CSHM1 - V0OR and high mult fired
1110 fSpecialSubTrigger=1;
1111 fNSpecialSubTriggerOptions=1;
1112 fSpecialSubTriggerName="CSHM1";
1114 case 2: // CSHM7 - V0AND and high mult fired
1115 fSpecialSubTrigger=1;
1116 fNSpecialSubTriggerOptions=1;
1117 fSpecialSubTriggerName="CSHM7";
1119 case 3: // CSHM8 - T0OR and high mult fired
1120 fSpecialSubTrigger=1;
1121 fNSpecialSubTriggerOptions=1;
1122 fSpecialSubTriggerName="CSHM8";
1125 AliError("Warning: Special Subtrigger Class Not known");
1128 } else if (fSpecialTrigger == 8){ // Subdivision of kEMCEGA trigger classes
1129 switch(selectSpecialSubTriggerClass){
1130 case 0: // all together
1131 fSpecialSubTrigger=0;
1132 fSpecialSubTriggerName="";
1133 // AliInfo("Info: Nothing to be done");
1135 case 1: // 7EGA - CINT7 EGA
1136 fSpecialSubTrigger=1;
1137 fNSpecialSubTriggerOptions=1;
1138 fSpecialSubTriggerName="7EGA";
1139 fTriggersEMCALSelected= 0;
1140 SETBIT(fTriggersEMCALSelected, kG2);
1142 case 2: // 8EGA - CINT8 EGA
1143 fSpecialSubTrigger=1;
1144 fNSpecialSubTriggerOptions=1;
1145 fSpecialSubTriggerName="8EGA";
1146 fTriggersEMCALSelected= 0;
1147 SETBIT(fTriggersEMCALSelected, kG2);
1149 case 3: // 7EG1 - CINT7 EG1
1150 fSpecialSubTrigger=1;
1151 fNSpecialSubTriggerOptions=1;
1152 fSpecialSubTriggerName="7EG1";
1153 fTriggersEMCALSelected= 0;
1154 SETBIT(fTriggersEMCALSelected, kG1);
1156 case 4: // 8EG1 - CINT8 EG1
1157 fSpecialSubTrigger=1;
1158 fNSpecialSubTriggerOptions=1;
1159 fSpecialSubTriggerName="8EG1";
1160 fTriggersEMCALSelected= 0;
1161 SETBIT(fTriggersEMCALSelected, kG1);
1163 case 5: // 7EG2 - CINT7 EG2
1164 fSpecialSubTrigger=1;
1165 fNSpecialSubTriggerOptions=1;
1166 fSpecialSubTriggerName="7EG2";
1167 fTriggersEMCALSelected= 0;
1168 SETBIT(fTriggersEMCALSelected, kG2);
1170 case 6: // 8EG2 - CINT8 EG2
1171 fSpecialSubTrigger=1;
1172 fNSpecialSubTriggerOptions=1;
1173 fSpecialSubTriggerName="8EG2";
1174 fTriggersEMCALSelected= 0;
1175 SETBIT(fTriggersEMCALSelected, kG2);
1178 AliError("Warning: Special Subtrigger Class Not known");
1181 } else if (fSpecialTrigger == 9){ // Subdivision of kEMCEGA trigger classes
1182 switch(selectSpecialSubTriggerClass){
1183 case 0: // all together
1184 fSpecialSubTrigger=0;
1185 fSpecialSubTriggerName="";
1186 // AliInfo("Info: Nothing to be done");
1188 case 1: // 7EJE - CINT7 EJE
1189 fSpecialSubTrigger=1;
1190 fNSpecialSubTriggerOptions=1;
1191 fSpecialSubTriggerName="7EJE";
1192 fTriggersEMCALSelected= 0;
1193 SETBIT(fTriggersEMCALSelected, kJ2);
1195 case 2: // 8EJE - CINT8 EJE
1196 fSpecialSubTrigger=1;
1197 fNSpecialSubTriggerOptions=1;
1198 fSpecialSubTriggerName="8EJE";
1199 fTriggersEMCALSelected= 0;
1200 SETBIT(fTriggersEMCALSelected, kJ2);
1202 case 3: // 7EJ1 - CINT7 EJ1
1203 fSpecialSubTrigger=1;
1204 fNSpecialSubTriggerOptions=1;
1205 fSpecialSubTriggerName="7EJ1";
1206 fTriggersEMCALSelected= 0;
1207 SETBIT(fTriggersEMCALSelected, kJ1);
1209 case 4: // 8EJ1 - CINT8 EJ1
1210 fSpecialSubTrigger=1;
1211 fNSpecialSubTriggerOptions=1;
1212 fSpecialSubTriggerName="8EJ1";
1213 fTriggersEMCALSelected= 0;
1214 SETBIT(fTriggersEMCALSelected, kJ1);
1216 case 5: // 7EJ2 - CINT7 EJ2
1217 fSpecialSubTrigger=1;
1218 fNSpecialSubTriggerOptions=1;
1219 fSpecialSubTriggerName="7EJ2";
1220 fTriggersEMCALSelected= 0;
1221 SETBIT(fTriggersEMCALSelected, kJ2);
1223 case 6: // 8EJ2 - CINT8 EJ2
1224 fSpecialSubTrigger=1;
1225 fNSpecialSubTriggerOptions=1;
1226 fSpecialSubTriggerName="8EJ2";
1227 fTriggersEMCALSelected= 0;
1228 SETBIT(fTriggersEMCALSelected, kJ2);
1231 AliError("Warning: Special Subtrigger Class Not known");
1238 ///________________________________________________________________________
1239 Bool_t AliConvEventCuts::SetMultiplicityMethod(Int_t multiplicityMethod)
1242 fMultiplicityMethod=multiplicityMethod;
1244 // 0 Photon Multiplicity
1245 // 1 TPC Track multiplicity
1252 ///________________________________________________________________________
1253 Bool_t AliConvEventCuts::SetRemovePileUp(Int_t removePileUp)
1255 switch(removePileUp){
1257 fRemovePileUp=kFALSE;
1260 fRemovePileUp=kTRUE;
1263 AliError("RemovePileUpCut not defined");
1269 ///________________________________________________________________________
1270 Bool_t AliConvEventCuts::SetRejectExtraSignalsCut(Int_t extraSignal) {
1272 switch(extraSignal){
1274 fRejectExtraSignals = 0;
1275 break; // No Rejection
1277 fRejectExtraSignals = 1;
1278 break; // MinBias Header
1280 fRejectExtraSignals = 2;
1281 break; // User String Array
1283 fRejectExtraSignals = 3;
1284 break; // Rejection for Gamma Correction only
1286 AliError(Form("Extra Signal Rejection not defined %d",extraSignal));
1292 //-------------------------------------------------------------
1293 Double_t AliConvEventCuts::GetCentrality(AliVEvent *event)
1294 { // Get Event Centrality
1296 AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
1298 AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
1299 if(fDetectorCentrality==0){
1300 if (fIsHeavyIon==2){
1301 return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
1303 return fESDCentrality->GetCentralityPercentile("V0M"); // default
1306 if(fDetectorCentrality==1){
1307 return fESDCentrality->GetCentralityPercentile("CL1");
1311 AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
1313 if(aodEvent->GetHeader()){return aodEvent->GetHeader()->GetCentrality();}
1319 //_____________________________________________________________________________________
1320 Bool_t AliConvEventCuts::IsCentralitySelected(AliVEvent *event, AliVEvent *fMCEvent)
1321 { // Centrality Selection
1322 if(!fIsHeavyIon)return kTRUE;
1324 if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
1325 else if(fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-100%
1327 Double_t centrality=GetCentrality(event);
1328 if(centrality<0)return kFALSE;
1330 Int_t centralityC=0;
1331 if (fModCentralityClass == 0){
1332 centralityC= Int_t(centrality/10);
1333 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1337 else if (fModCentralityClass ==1){
1338 centralityC= Int_t(centrality);
1339 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1341 } else return kFALSE;
1343 else if (fModCentralityClass ==2){
1344 centralityC= Int_t(centrality);
1345 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1350 Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
1351 Int_t PrimaryTracks10[10][2] =
1364 Int_t PrimaryTracks5a[10][2] =
1377 Int_t PrimaryTracks5b[10][2] =
1391 if(event->IsA()==AliESDEvent::Class()) column = 0;
1392 if(event->IsA()==AliAODEvent::Class()) column = 1;
1394 if (fModCentralityClass == 3){
1396 if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
1401 centralityC= Int_t(centrality/10);
1402 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1407 else if (fModCentralityClass ==4){
1409 if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
1414 centralityC= Int_t(centrality);
1415 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1417 } else return kFALSE;
1420 else if (fModCentralityClass ==5){
1422 if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
1427 centralityC= Int_t(centrality);
1428 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1437 ///________________________________________________________________________
1438 Bool_t AliConvEventCuts::VertexZCut(AliVEvent *event){
1439 // Cut on z position of primary vertex
1440 Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
1441 Double_t fVertexZSPD = 0;
1442 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1444 fVertexZSPD = fESDEvent->GetPrimaryVertexSPD()->GetZ();
1446 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1448 fVertexZSPD = fAODEvent->GetPrimaryVertexSPD()->GetZ();
1451 if(abs(fVertexZ)>fMaxVertexZ)return kFALSE;
1453 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
1454 ->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1455 if (periodName.CompareTo("LHC11h")==0){
1456 if (abs(fVertexZ-fVertexZSPD) > 0.1) return kFALSE;
1458 if (fIsHeavyIon == 2){
1459 if(fUtils->IsFirstEventInChunk(event)) return kFALSE;
1460 if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
1461 if(fUtils->IsPileUpEvent(event)) return kFALSE;
1467 ///________________________________________________________________________
1468 Int_t AliConvEventCuts::GetNumberOfContributorsVtx(AliVEvent *event){
1469 // returns number of contributors to the vertex
1471 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1473 if (fESDEvent->GetPrimaryVertex() != NULL){
1474 if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
1475 // cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
1476 return fESDEvent->GetPrimaryVertex()->GetNContributors();
1480 if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
1481 if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1482 // cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
1483 return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
1485 AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
1486 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1492 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1494 if (fAODEvent->GetPrimaryVertex() != NULL){
1495 if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
1496 return fAODEvent->GetPrimaryVertex()->GetNContributors();
1499 if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
1500 if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1501 return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
1503 AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
1508 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1513 ///________________________________________________________________________
1514 Bool_t AliConvEventCuts::IsTriggerSelected(AliVEvent *fInputEvent, Bool_t isMC)
1517 AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1520 UInt_t isSelected = AliVEvent::kAny;
1521 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1522 // cout << periodName.Data() << endl;
1524 if (fInputHandler==NULL) return kFALSE;
1525 if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
1527 TString firedTrigClass = fInputEvent->GetFiredTriggerClasses();
1528 if (!fTriggerSelectedManually){
1529 if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
1531 if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
1532 else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
1533 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 ) {
1534 fOfflineTriggerMask = AliVEvent::kINT7;
1535 // cout << "will take kINT7 as trigger mask" << endl;
1537 else fOfflineTriggerMask = AliVEvent::kMB;
1540 // Get the actual offline trigger mask for the event and AND it with the
1541 // requested mask. If no mask requested select by default the event.
1542 // if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
1543 // else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
1545 if (isMC) fOfflineTriggerMask = AliVEvent::kAny;
1547 if (fOfflineTriggerMask){
1548 isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
1550 if (isSelected && !fPreSelCut){
1551 // cout << "Special trigger: "<< fSpecialTrigger << " initialized " << fEMCALTrigInitialized << endl;
1552 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1553 if (!fEMCALTrigInitialized ) InitializeEMCALTrigger(fInputEvent);
1554 fTriggersEMCAL= GetTriggerList();
1556 if (fSpecialSubTrigger>0 && !isMC){
1557 if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
1559 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1561 // if (fTriggersEMCAL > 0)cout << "Special Trigger " << fSpecialTrigger << " triggers: " << fTriggersEMCAL << " selected triggers: " << fTriggersEMCALSelected << " run number: " <<fInputEvent->GetRunNumber()<<endl;
1562 if (fTriggersEMCAL&fTriggersEMCALSelected){
1563 // cout << "accepted ++++++++++++++++++++" << endl;
1568 //if for specif centrality trigger selection
1569 if(fSpecialSubTrigger == 1){
1570 if(fSpecialSubTriggerName.Contains("|")){
1571 TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("|");
1572 for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
1573 TObjString *NameClass = (TObjString*)ClassesList->At(i);
1574 if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
1575 // cout << "|||||||| \t" << NameClass->GetString() << "\t ||||||||" << endl;
1577 } else if(fSpecialSubTriggerName.Contains("%")){
1578 TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("%");
1579 for (Int_t i=0; i<ClassesList->GetEntriesFast();++i){
1580 TObjString *NameClass = (TObjString*)ClassesList->At(i);
1581 if (firedTrigClass.Contains(NameClass->GetString())) isSelected = 1;
1582 // cout << "|||||||| \t" << NameClass->GetString() << "\t ||||||||" << endl;
1584 } else if(fSpecialSubTriggerName.Contains("&")){
1585 TObjArray *ClassesList = fSpecialSubTriggerName.Tokenize("&");
1586 TString CheckClass = "";
1587 for (Int_t i=0; i<ClassesList->GetEntriesFast(); i++){
1588 TObjString *NameClass = (TObjString*)ClassesList->At(i);
1589 if (firedTrigClass.Contains(NameClass->GetString())) CheckClass+="1";
1590 else CheckClass+="0";
1592 if(CheckClass.Contains("0")) isSelected = 0;
1593 // cout << "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&" << endl;
1595 else if(firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 1;
1600 fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
1604 if (fIsSDDFired) hTriggerClass->Fill(33);
1605 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
1606 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
1607 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
1608 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
1609 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
1610 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
1611 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
1612 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
1613 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
1614 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
1615 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
1616 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
1617 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
1618 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
1619 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
1620 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
1621 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
1622 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
1623 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
1624 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
1625 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
1626 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
1627 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
1628 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
1629 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
1630 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
1631 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
1632 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
1633 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
1634 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
1635 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
1636 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
1637 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
1638 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
1639 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
1640 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
1641 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
1642 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
1643 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
1644 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
1645 if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
1648 if(hTriggerClassSelected && isSelected){
1649 if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
1650 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
1651 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
1652 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
1653 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
1654 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
1655 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
1656 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
1657 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
1658 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
1659 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
1660 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
1661 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
1662 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
1663 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
1664 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
1665 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
1666 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
1667 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
1668 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
1669 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
1670 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
1671 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
1672 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
1673 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
1674 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
1675 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
1676 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
1677 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
1678 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
1679 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
1680 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
1681 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
1682 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
1683 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
1684 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
1685 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
1686 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
1687 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
1688 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
1689 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
1692 if(!isSelected)return kFALSE;
1697 ///________________________________________________________________________
1698 TString AliConvEventCuts::GetCutNumber(){
1699 // returns TString with current cut number
1701 for(Int_t ii=0;ii<kNCuts;ii++){
1702 a.Append(Form("%d",fCuts[ii]));
1707 ///________________________________________________________________________
1708 void AliConvEventCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent){
1710 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
1713 if(fNotRejectedStart){
1714 delete[] fNotRejectedStart;
1715 fNotRejectedStart = NULL;
1717 if(fNotRejectedEnd){
1718 delete[] fNotRejectedEnd;
1719 fNotRejectedEnd = NULL;
1721 if(fGeneratorNames){
1722 delete[] fGeneratorNames;
1723 fGeneratorNames = NULL;
1726 if(rejection == 0) return; // No Rejection
1728 AliGenCocktailEventHeader *cHeader = 0x0;
1729 AliAODMCHeader *cHeaderAOD = 0x0;
1730 Bool_t headerFound = kFALSE;
1731 AliStack *fMCStack = 0x0;
1732 TClonesArray *fMCStackAOD = 0x0;
1733 if(MCEvent->IsA()==AliMCEvent::Class()){
1734 cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1735 if(cHeader) headerFound = kTRUE;
1736 if(dynamic_cast<AliMCEvent*>(MCEvent))fMCStack = dynamic_cast<AliStack*>(dynamic_cast<AliMCEvent*>(MCEvent)->Stack());
1738 if(MCEvent->IsA()==AliAODEvent::Class()){ // MCEvent is a AODEvent in case of AOD
1739 cHeaderAOD = dynamic_cast<AliAODMCHeader*>(MCEvent->FindListObject(AliAODMCHeader::StdBranchName()));
1740 fMCStackAOD = dynamic_cast<TClonesArray*>(MCEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1743 if(cHeaderAOD) headerFound = kTRUE;
1747 TList *genHeaders = 0x0;
1748 if(cHeader) genHeaders = cHeader->GetHeaders();
1750 genHeaders = cHeaderAOD->GetCocktailHeaders();
1751 if(genHeaders->GetEntries()==1){
1752 SetRejectExtraSignalsCut(0);
1756 AliGenEventHeader* gh = 0;
1758 Int_t firstindexA = 0;
1759 Int_t lastindexA = -1;
1760 if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
1761 if(rejection == 2){ // TList of Headers Names
1762 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1763 gh = (AliGenEventHeader*)genHeaders->At(i);
1764 TString GeneratorName = gh->GetName();
1765 lastindexA = lastindexA + gh->NProduced();
1766 // cout << i << "\t" << GeneratorName.Data() << endl;
1767 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1768 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
1769 // cout << GeneratorInList.Data() << endl;
1770 if(GeneratorName.CompareTo(GeneratorInList) == 0){
1771 // cout << "accepted" << endl;
1772 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1774 if (fMCStack->Particle(firstindexA)->GetPdgCode() == fAddedSignalPDGCode ) {
1775 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1776 if (gh->NProduced() > 10 && fMCStack->Particle(firstindexA+10)->GetPdgCode() == fAddedSignalPDGCode ){
1777 // cout << "cond 1: "<< fnHeaders << endl;
1783 // cout << "cond 2: " << fnHeaders << endl;
1790 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA));
1791 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1792 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1793 if (gh->NProduced() > 10){
1794 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA+10));
1795 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1796 // cout << "cond 1: " << fnHeaders << endl;
1803 // cout << "cond 2: " << fnHeaders << endl;
1811 // cout << "cond 3: "<< fnHeaders << endl;
1816 firstindexA = firstindexA + gh->NProduced();
1819 // cout << "number of headers: " <<fnHeaders << endl;
1821 fNotRejectedStart = new Int_t[fnHeaders];
1822 fNotRejectedEnd = new Int_t[fnHeaders];
1823 fGeneratorNames = new TString[fnHeaders];
1825 if(rejection == 1 || rejection == 3){
1826 fNotRejectedStart[0] = 0;
1827 fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
1828 fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
1832 Int_t firstindex = 0;
1833 Int_t lastindex = -1;
1836 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1837 gh = (AliGenEventHeader*)genHeaders->At(i);
1838 TString GeneratorName = gh->GetName();
1839 lastindex = lastindex + gh->NProduced();
1840 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1841 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
1842 // cout << i << "\t" << GeneratorName.Data() << endl;
1843 if(GeneratorName.CompareTo(GeneratorInList) == 0){
1844 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1846 if (fMCStack->Particle(firstindex)->GetPdgCode() == fAddedSignalPDGCode ) {
1847 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1848 // cout << "produced " << gh->NProduced() << " with box generator" << endl;
1849 if (gh->NProduced() > 10 && fMCStack->Particle(firstindex+10)->GetPdgCode() == fAddedSignalPDGCode){
1850 // cout << "one of them was a pi0 or eta" << endl;
1851 fNotRejectedStart[number] = firstindex;
1852 fNotRejectedEnd[number] = lastindex;
1853 fGeneratorNames[number] = GeneratorName;
1855 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1859 fNotRejectedStart[number] = firstindex;
1860 fNotRejectedEnd[number] = lastindex;
1861 fGeneratorNames[number] = GeneratorName;
1868 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex));
1869 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1870 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1871 if (gh->NProduced() > 10) {
1872 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex+10));
1873 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1874 fNotRejectedEnd[number] = lastindex;
1875 fNotRejectedStart[number] = firstindex;
1876 fGeneratorNames[number] = GeneratorName;
1882 fNotRejectedStart[number] = firstindex;
1883 fNotRejectedEnd[number] = lastindex;
1884 fGeneratorNames[number] = GeneratorName;
1892 fNotRejectedStart[number] = firstindex;
1893 fNotRejectedEnd[number] = lastindex;
1894 fGeneratorNames[number] = GeneratorName;
1895 // cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1902 firstindex = firstindex + gh->NProduced();
1904 // for (Int_t i = 0; i < number; i++){
1905 // cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
1908 } else { // No Cocktail Header Found
1909 fNotRejectedStart = new Int_t[1];
1910 fNotRejectedEnd = new Int_t[1];
1913 fNotRejectedStart[0] = 0;
1914 fNotRejectedEnd[0] = static_cast<AliMCEvent*>(MCEvent)->Stack()->GetNprimary()-1;
1915 fGeneratorNames = new TString[1];
1916 fGeneratorNames[0] = "NoCocktailGeneratorFound";
1918 AliGenPythiaEventHeader *mcHeaderPythia = dynamic_cast<AliGenPythiaEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1919 if (mcHeaderPythia) fGeneratorNames[0] = "NoCocktailGeneratorFound_Pythia";
1920 AliGenDPMjetEventHeader *mcHeaderPhojet = dynamic_cast<AliGenDPMjetEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1921 if (mcHeaderPhojet) fGeneratorNames[0] = "NoCocktailGeneratorFound_Phojet";
1922 AliGenHijingEventHeader *mcHeaderHijing = dynamic_cast<AliGenHijingEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1923 if (mcHeaderHijing) fGeneratorNames[0] = "NoCocktailGeneratorFound_Hijing";
1925 SetRejectExtraSignalsCut(0);
1930 //_________________________________________________________________________
1931 Int_t AliConvEventCuts::IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
1933 // Not Accepted == kFALSE == 0
1934 // Accepted == kTRUE == 1
1935 // FirstHeader == kTRUE == 3
1936 if(index < 0) return 0; // No Particle
1938 // if (index == 100){
1939 // cout << "possible headers" << endl;
1940 // for(Int_t i = 0;i<fnHeaders;i++){
1941 // cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
1945 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
1946 if( index >= MCStack->GetNprimary()){ // Secondary Particle
1947 if( ((TParticle*)MCStack->Particle(index))->GetMother(0) < 0) return 1; // Secondary Particle without Mother??
1948 return IsParticleFromBGEvent(((TParticle*)MCStack->Particle(index))->GetMother(0),MCStack,InputEvent);
1950 for(Int_t i = 0;i<fnHeaders;i++){
1951 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1953 if(i == 0) accepted = 2; // MB Header
1957 else if(InputEvent->IsA()==AliAODEvent::Class()){
1958 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1959 if (AODMCTrackArray){
1960 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
1961 if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
1962 if(!aodMCParticle->IsPrimary()){
1963 if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
1964 return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
1966 index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
1967 for(Int_t i = 0;i<fnHeaders;i++){
1968 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1970 if(i == 0) accepted = 2; // MB Header
1979 //_________________________________________________________________________
1980 Int_t AliConvEventCuts::IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon){
1982 Bool_t isMC = kFALSE;
1983 if (MCEvent){isMC = kTRUE;}
1985 if ( !IsTriggerSelected(InputEvent, isMC) )
1988 if(isHeavyIon != 0 && !(IsCentralitySelected(InputEvent,MCEvent)))
1989 return 1; // Check Centrality --> Not Accepted => eventQuality = 1
1991 if(isHeavyIon == 0 && GetIsFromPileup()){
1992 if(InputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
1993 return 6; // Check Pileup --> Not Accepted => eventQuality = 6
1997 Bool_t hasV0And = ReaderCuts->HasV0AND();
1998 Bool_t isSDDFired = ReaderCuts->IsSDDFired();
2000 if( ( (IsSpecialTrigger() == 0 && IsSpecialSubTrigger() == 1) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !isSDDFired && !MCEvent)
2001 //if V0OR with SDD requested or V0AND with SDD request but the SDD has not fired
2002 return 7; // V0 with SDD requested but no fired
2004 if( ( (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 0) || (IsSpecialTrigger() == 1 && IsSpecialSubTrigger() == 1) ) && !hasV0And)
2005 //if V0AND (only) or V0AND with SDD requested but V0AND requested but no fired
2006 return 8; // V0AND requested but no fired
2010 if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !MCEvent)
2011 return 7; // With SDD requested but no fired
2013 if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
2014 return 8; // V0AND requested but no fired
2016 if(hCentrality)hCentrality->Fill(GetCentrality(InputEvent));
2017 if(hCentralityVsNumberOfPrimaryTracks)
2018 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(InputEvent),
2019 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
2020 ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
2025 //_________________________________________________________________________
2026 Float_t AliConvEventCuts::GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
2027 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") ||
2028 period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.CompareTo("LHC14b2") == 0 )) return 1.;
2031 for (Int_t i = 0; i < fnHeaders; i++){
2032 if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
2033 if (fGeneratorNames[i].CompareTo("Pythia") == 0){
2035 } else if (fGeneratorNames[i].CompareTo("DPMJET") == 0){
2037 } else if (fGeneratorNames[i].CompareTo("HIJING") == 0 ||
2038 fGeneratorNames[i].CompareTo("Hijing") == 0 ||
2039 fGeneratorNames[i].Contains("hijing")){
2041 } else if (fGeneratorNames[i].CompareTo("BOX") == 0){
2043 } else if (fGeneratorNames[i].CompareTo("PARAM") == 0){
2045 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound") == 0){
2047 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Pythia") == 0){
2049 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Phojet") == 0){
2051 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Hijing") == 0){
2054 if (period.Contains("LHC13d2") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.Contains("LHC14a1") || period.CompareTo("LHC14b2") == 0 ){
2059 if (kCaseGen == 0) return 1;
2062 Double_t mesonPt = 0;
2063 Double_t mesonMass = 0;
2065 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
2066 mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
2067 mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
2068 PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
2070 else if(InputEvent->IsA()==AliAODEvent::Class()){
2071 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2072 if (AODMCTrackArray){
2073 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
2074 mesonPt = aodMCParticle->Pt();
2075 mesonMass = aodMCParticle->GetCalcMass();
2076 PDGCode = aodMCParticle->GetPdgCode();
2082 Float_t functionResultMC = 1.;
2083 if (kCaseGen == 1){ // Pythia 6
2084 Float_t dNdyMC = 2.1462;
2085 Float_t nMC = 7.06055;
2086 Float_t tMC = 0.12533;
2087 if ( PDGCode == 111){
2091 } else if ( PDGCode == 221){
2096 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);
2097 } else if (kCaseGen == 2){ // Phojet
2098 Float_t dNdyMC = 2.35978;
2099 Float_t nMC = 6.81795;
2100 Float_t tMC = 0.11492;
2101 if ( PDGCode == 111){
2105 } else if ( PDGCode == 221){
2110 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);
2111 } else if (kCaseGen == 4){ // BOX generators pp
2112 // functionResultMC = 1./sqrt(1.-mesonMass*mesonMass/((mesonMass*mesonMass+mesonPt*mesonPt)*cosh(mesonY)*cosh(mesonY)));
2113 Float_t a = 0.23437;
2115 Float_t c = -1430.5863;
2116 Float_t d = -0.6966624;
2117 Float_t e = 252.3742;
2118 if ( PDGCode == 111){
2124 } else if ( PDGCode == 221){
2131 functionResultMC = a*TMath::Power(mesonPt,-1.*(b+c/(TMath::Power(mesonPt,d)+e)))*1./mesonPt *1./1.6 *1./(2.* TMath::Pi());
2132 // cout << functionResultMC << endl;
2133 } else if (kCaseGen == 3 ){ // HIJING
2134 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
2135 functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
2137 if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
2138 functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
2140 if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
2141 functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
2145 Float_t functionResultData = 1;
2146 if (kCaseGen == 1 || kCaseGen == 2 || kCaseGen == 4 ){
2147 Float_t dNdyData = 2.2328;
2148 Float_t nData = 7.1473;
2149 Float_t tData = 0.1346;
2150 if ( PDGCode == 111){
2154 } else if ( PDGCode == 221){
2155 dNdyData = 0.38992; //be careful this fit is not optimal, eta in data still has problems
2159 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);
2160 // cout << functionResultData << endl;
2162 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
2163 functionResultData = fFitDataPi0->Eval(mesonPt);
2165 if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
2166 functionResultData = fFitDataEta->Eval(mesonPt);
2168 if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
2169 functionResultData = fFitDataK0s->Eval(mesonPt);
2174 Double_t weight = 1;
2175 if (PDGCode == 111 || PDGCode == 221){
2176 if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
2177 weight = functionResultData/functionResultMC;
2178 if ( kCaseGen == 3){
2179 if (PDGCode == 111){
2180 if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
2184 if (PDGCode == 221){
2185 if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
2190 if (!isfinite(functionResultData)) weight = 1.;
2191 if (!isfinite(weight)) weight = 1.;
2193 } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
2194 weight = functionResultMC;
2197 // if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6 && PDGCode == 111){
2198 // cout << period.Data() << "\t" << kCaseGen << "\t" <<fModCentralityClass<< "\t" <<fCentralityMin<< "\t" <<fCentralityMax << "\t" << mesonPt << "\t" <<mesonMass<< "\t"<<functionResultData << "\t"<< functionResultMC << "\t" << weight <<endl;
2204 ///________________________________________________________________________
2205 void AliConvEventCuts::GetCorrectEtaShiftFromPeriod(TString periodName){
2207 if(periodName.CompareTo("LHC12g") == 0 || //pilot run 2012
2208 periodName.CompareTo("LHC13b") == 0 || //mainly minimum bias
2209 periodName.CompareTo("LHC13c") == 0 || //mainly minimum bias
2210 periodName.CompareTo("LHC13d") == 0 || //mainly triggered
2211 periodName.CompareTo("LHC13e") == 0 || //mainly triggered
2212 periodName.CompareTo("LHC13c3") == 0 || //MC Starlight, anchor LHC13d+e
2213 periodName.CompareTo("LHC13c2") == 0 || //MC Starlight, coherent J/Psi, UPC muon anchor LHC13d+e
2214 periodName.CompareTo("LHC13b4") == 0 || //MC Pythia 6 (Jet-Jet), anchor LHC13b
2215 periodName.CompareTo("LHC13b2_fix_1") == 0 || //MC DPMJET, anchr LHC13b+c
2216 periodName.CompareTo("LHC13b2_efix_p1") == 0 || //MC DPMJET, anchr LHC13b+c
2217 periodName.CompareTo("LHC13b2_efix_p2") == 0 || //MC DPMJET, anchr LHC13b+c
2218 periodName.CompareTo("LHC13b2_efix_p3") == 0 || //MC DPMJET, anchr LHC13b+c
2219 periodName.CompareTo("LHC13b2_efix_p4") == 0 || //MC DPMJET, anchr LHC13b+c
2220 periodName.CompareTo("LHC13e7") == 0 || //MC DPMJET, anchr LHC13b+c
2221 periodName.CompareTo("LHC13b3") == 0 || //MC HIJING, weighted to number of events per run, anchor LHC13b
2222 periodName.CompareTo("LHC13b2") == 0 || // MC DPMJET, wrong energy, anchor LHC13b
2223 periodName.CompareTo("LHC13b2_plus") == 0 || // MC DPMJET, weighted to number event per run, anchor LHC13b
2224 periodName.CompareTo("LHC13c1_bis") == 0 || // MC AMPT fast generation, pT hardbin, anchor ?
2225 periodName.CompareTo("LHC13c1") == 0 || // MC AMPT fast generation, anchor ?
2226 periodName.CompareTo("LHC13b1") == 0 || // MC DPMJET, fragments, with fixed label 0, anchor LHC12g
2227 periodName.CompareTo("LHC12g4b_fix") == 0 || // MC DPMJET, with fixed label 0, anchor LHC12g
2228 periodName.CompareTo("LHC12g1_fix") == 0 || // MC ?, with fixed label 0, anchor LHC12g
2229 periodName.CompareTo("LHC12g4c") == 0 || // MC DPMJET, shifted vertex runs, anchor LHC12g
2230 periodName.CompareTo("LHC12h6") == 0 || // MC muon cocktail, anchor LHC12g
2231 periodName.CompareTo("LHC12g4b") == 0 || // MC DPMJET 3rd iteration, anchor LHC12g
2232 periodName.CompareTo("LHC12g4a") == 0 || // MC DPMJET improved, anchor LHC12g
2233 periodName.CompareTo("LHC12g4") == 0 || // MC DPMJET, anchor LHC12g
2234 periodName.CompareTo("LHC12g5") == 0 || // MC PHOJET, anchor LHC12g
2235 periodName.CompareTo("LHC12g2") == 0 || // MC Starlight background, anchor LHC12g
2236 periodName.CompareTo("LHC12g1") == 0 ) // MC ?, anchor LHC12g
2238 printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
2239 SetEtaShift(-0.465);
2241 else if(periodName.CompareTo("LHC13f") == 0 ||
2242 periodName.CompareTo("LHC13c6b") == 0 ||// MC Jpsi -> mumu, anchor LHC13f
2243 periodName.CompareTo("LHC13c5") == 0 || //MC Starlight, gamma gamma UPC muon, anchor LHC13f
2244 periodName.CompareTo("LHC13c4") == 0 )//MC Starlight, coherent JPsi, UPC muon, anchor LHC13f
2246 printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
2247 SetEtaShift(+0.465);
2249 else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
2252 //________________________________________________________________________
2253 AliEmcalTriggerPatchInfo* AliConvEventCuts::GetMainTriggerPatch()
2255 //get main trigger match; if not known yet, look for it and cache
2257 if (fMainTriggerPatchEMCAL)
2258 return fMainTriggerPatchEMCAL;
2260 if (!fTriggerPatchInfo) {
2261 AliError(Form("%s: fTriggerPatchInfo not available",GetName()));
2265 //number of patches in event
2266 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2268 //extract main trigger patch
2269 AliEmcalTriggerPatchInfo *patch;
2270 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2271 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2272 if (patch->IsMainTrigger()) {
2273 fMainTriggerPatchEMCAL = patch;
2278 return fMainTriggerPatchEMCAL;
2282 //________________________________________________________________________
2283 void AliConvEventCuts::InitializeEMCALTrigger(AliVEvent *fInputEvent)
2285 // cout << "entered EMCAL trigger initialization" << endl;
2287 // Init the analysis.
2288 if (fCaloTriggersName.IsNull()){
2289 if (fInputEvent->IsA()==AliESDEvent::Class()){
2290 fCaloTriggersName = "EMCALTrigger";
2292 fCaloTriggersName = "emcalTrigger";
2296 if (!fCaloTriggersName.IsNull() && !fCaloTriggers) {
2297 fCaloTriggers = dynamic_cast<AliVCaloTrigger*>(fInputEvent->FindListObject(fCaloTriggersName));
2298 if (!fCaloTriggers) {
2299 AliError(Form("%s: Could not retrieve calo triggers %s!", GetName(), fCaloTriggersName.Data()));
2304 if (fCaloTriggerPatchInfoName.IsNull()){
2305 if (fInputEvent->IsA()==AliESDEvent::Class()){
2306 fCaloTriggerPatchInfoName = "EmcalTriggers";
2308 fCaloTriggerPatchInfoName = "EmcalTriggers";
2312 if (!fCaloTriggerPatchInfoName.IsNull() && !fTriggerPatchInfo) {
2313 fTriggerPatchInfo = GetArrayFromEvent(fInputEvent, fCaloTriggerPatchInfoName.Data(), "AliEmcalTriggerPatchInfo");
2314 if (!fTriggerPatchInfo) {
2315 AliError(Form("%s: Could not retrieve calo trigger patch info %s!", GetName(), fCaloTriggerPatchInfoName.Data()));
2321 fEMCALTrigInitialized = kTRUE;
2324 //________________________________________________________________________
2325 ULong_t AliConvEventCuts::GetTriggerList(){
2326 if (!fTriggerPatchInfo)
2328 //number of patches in event
2329 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2331 //loop over patches to define trigger type of event
2337 AliEmcalTriggerPatchInfo *patch;
2338 // if (nPatch> 0) {cout << "NEW Triggers in this event*********************************" << endl;}
2339 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2340 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2341 // cout << "Patch energy: "<<patch->GetPatchE() << "\t ADC counts: " << patch->GetADCAmp() << endl;
2342 // cout << "Phi: " << patch->GetPhiMin() << " - " << patch->GetPhiMax() << " delta phi: " <<abs(patch->GetPhiMin()-patch->GetPhiMax())<< endl;
2343 // cout << "Eta: " << patch->GetEtaMin() << " - " << patch->GetEtaMax() << " delta eta: " <<abs(patch->GetEtaMin()-patch->GetEtaMax())<< endl;
2344 if (patch->IsGammaHigh()){
2345 // cout << "fired L1GA high" << endl;
2348 if (patch->IsGammaLow()){
2349 // cout << "fired L1GA low" << endl;
2352 if (patch->IsJetHigh()){
2353 // cout << "fired L1JE high" << endl;
2356 if (patch->IsJetLow()){
2357 // cout << "fired L1JE low" << endl;
2360 if (patch->IsLevel0()){
2361 // cout << "fired L0" << endl;
2364 // cout << patch->GetPatchE() << "\t" << patch->GetADCAmp() << "\t" << patch->IsGammaHigh() << "\t" << patch->IsGammaLow()
2365 // << "\t" << patch->IsJetHigh() << "\t" << patch->IsJetLow() << "\t" << patch->IsLevel0()
2366 // << "\t" << patch->GetPhiMin() << "\t" << patch->GetPhiMax() << "\t" << abs(patch->GetPhiMin()-patch->GetPhiMax())
2367 // << "\t" << patch->GetEtaMin() << "\t" << patch->GetEtaMax() << "\t" << abs(patch->GetEtaMin()-patch->GetEtaMax()) << endl;
2371 AliDebug(2, "Patch summary: ");
2372 AliDebug(2, Form("Number of patches: %d", nPatch));
2373 AliDebug(2, Form("Level0: [%d]" ,nL0));
2374 AliDebug(2, Form("Jet: low[%d], high[%d]" ,nJ2, nJ1));
2375 AliDebug(2, Form("Gamma: low[%d], high[%d]" ,nG2, nG1));
2379 // cout << Form("Number of patches: %d", nPatch) << endl;
2380 // cout << Form("Level0: [%d]" ,nL0) << endl;
2381 // cout << Form("Jet: low[%d], high[%d]" ,nJ2, nJ1) << endl;
2382 // cout << Form("Gamma: low[%d], high[%d]" ,nG2, nG1) << endl;
2385 ULong_t triggers(0);
2387 SETBIT(triggers, kG1);
2389 SETBIT(triggers, kG2);
2391 SETBIT(triggers, kJ1);
2393 SETBIT(triggers, kJ2);
2395 SETBIT(triggers, kL0);
2399 //________________________________________________________________________
2400 Bool_t AliConvEventCuts::HasTriggerType(TriggerTypeEMCAL t){
2401 // Check if event has a given trigger type
2403 return fTriggersEMCAL == 0;
2405 return TESTBIT(fTriggersEMCAL, int(t));
2409 //________________________________________________________________________
2410 TClonesArray *AliConvEventCuts::GetArrayFromEvent(AliVEvent* fInputEvent, const char *name, const char *clname)
2412 // Get array from event.
2414 TClonesArray *arr = 0;
2415 TString sname(name);
2416 if (!sname.IsNull()) {
2417 arr = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(sname));
2419 AliWarning(Form("%s: Could not retrieve array with name %s!", GetName(), name));
2429 TString objname(arr->GetClass()->GetName());
2430 TClass cls(objname);
2431 if (!cls.InheritsFrom(clname)) {
2432 AliWarning(Form("%s: Objects of type %s in %s are not inherited from %s!",
2433 GetName(), cls.GetName(), name, clname));