]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliConvEventCuts.cxx
added correct trigger selection for EMCAL triggers in MC
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliConvEventCuts.cxx
CommitLineData
344100c4 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Authors: Svein Lindal, Daniel Lohner *
5 * Version 1.0 *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16////////////////////////////////////////////////
17//---------------------------------------------
18// Class handling all kinds of selection cuts for
19// Gamma Conversion analysis
20//---------------------------------------------
21////////////////////////////////////////////////
22
23#include "AliConvEventCuts.h"
24
25#include "AliAODTrack.h"
26#include "AliESDtrack.h"
27#include "AliAnalysisManager.h"
28#include "AliInputEventHandler.h"
29#include "AliMCEventHandler.h"
30#include "AliAODHandler.h"
31#include "TH1.h"
32#include "TH2.h"
33#include "TF1.h"
34#include "AliStack.h"
35#include "TObjString.h"
36#include "AliAODEvent.h"
37#include "AliESDEvent.h"
38#include "AliCentrality.h"
39#include "TList.h"
40#include "TFile.h"
41#include "AliLog.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"
50
51class iostream;
52
53using namespace std;
54
55ClassImp(AliConvEventCuts)
56
57
58const char* AliConvEventCuts::fgkCutNames[AliConvEventCuts::kNCuts] = {
59 "HeavyIon", //0
60 "CentralityMin", //1
61 "CentralityMax", //2
62 "SelectSpecialTrigger", //3
63 "SelectSpecialSubTriggerClass", //4
64 "RemovePileUp", //5
65 "RejectExtraSignals", //6
66};
67
68
69//________________________________________________________________________
70AliConvEventCuts::AliConvEventCuts(const char *name,const char *title) :
dc729816 71 AliAnalysisCuts(name,title),
72 fHistograms(NULL),
73 fHeaderList(NULL),
74 fEventQuality(-1),
75 fIsHeavyIon(0),
76 fDetectorCentrality(0),
77 fModCentralityClass(0),
78 fMaxVertexZ(10),
79 fCentralityMin(0),
80 fCentralityMax(0),
81 fMultiplicityMethod(0),
82 fSpecialTrigger(0),
83 fSpecialSubTrigger(0),
84 fRemovePileUp(kFALSE),
85 fRejectExtraSignals(0),
86 fOfflineTriggerMask(0),
87 fHasV0AND(kTRUE),
88 fIsSDDFired(kTRUE),
89 fRandom(0),
90 fnHeaders(0),
91 fNotRejectedStart(NULL),
92 fNotRejectedEnd(NULL),
93 fGeneratorNames(NULL),
94 fCutString(NULL),
95 fUtils(NULL),
96 fEtaShift(0.0),
97 fDoEtaShift(kFALSE),
98 fDoReweightHistoMCPi0(kFALSE),
99 fDoReweightHistoMCEta(kFALSE),
100 fDoReweightHistoMCK0s(kFALSE),
101 fPathTrFReweighting(""),
102 fNameHistoReweightingPi0(""),
103 fNameHistoReweightingEta(""),
104 fNameHistoReweightingK0s(""),
105 fNameFitDataPi0(""),
106 fNameFitDataEta(""),
107 fNameFitDataK0s(""),
108 fHistoEventCuts(NULL),
109 hCentrality(NULL),
110 hCentralityVsNumberOfPrimaryTracks(NULL),
111 hVertexZ(NULL),
112 hTriggerClass(NULL),
113 hTriggerClassSelected(NULL),
114 hReweightMCHistPi0(NULL),
115 hReweightMCHistEta(NULL),
116 hReweightMCHistK0s(NULL),
117 fFitDataPi0(NULL),
118 fFitDataEta(NULL),
119 fFitDataK0s(NULL),
120 fAddedSignalPDGCode(0),
121 fPreSelCut(kFALSE),
122 fTriggerSelectedManually(kFALSE),
123 fSpecialTriggerName(""),
124 fSpecialSubTriggerName(""),
125 fNSpecialSubTriggerOptions(0),
126 fV0ReaderName(""),
127 fCaloTriggers(NULL),
128 fTriggerPatchInfo(NULL),
129 fMainTriggerPatchEMCAL(NULL),
130 fCaloTriggersName(""),
131 fCaloTriggerPatchInfoName(""),
132 fTriggersEMCAL(0),
133 fTriggersEMCALSelected(-1),
134 fEMCALTrigInitialized(kFALSE)
135
344100c4 136{
137 for(Int_t jj=0;jj<kNCuts;jj++){fCuts[jj]=0;}
138 fCutString=new TObjString((GetCutNumber()).Data());
139
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);
143
144
145}
146
147//________________________________________________________________________
148AliConvEventCuts::AliConvEventCuts(const AliConvEventCuts &ref) :
dc729816 149 AliAnalysisCuts(ref),
150 fHistograms(NULL),
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),
172 fCutString(NULL),
173 fUtils(NULL),
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),
187 hCentrality(NULL),
188 hCentralityVsNumberOfPrimaryTracks(NULL),
189 hVertexZ(NULL),
190 hTriggerClass(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),
205 fCaloTriggers(NULL),
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)
344100c4 213{
214 // Copy Constructor
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())
219
220}
221
222
223//________________________________________________________________________
224AliConvEventCuts::~AliConvEventCuts() {
225 // Destructor
226 //Deleting fHistograms leads to seg fault it it's added to output collection of a task
227 // if(fHistograms)
228 // delete fHistograms;
229 // fHistograms = NULL;
230 if(fCutString != NULL){
231 delete fCutString;
232 fCutString = NULL;
233 }
234 if(fNotRejectedStart){
235 delete[] fNotRejectedStart;
236 fNotRejectedStart = NULL;
237 }
238 if(fNotRejectedEnd){
239 delete[] fNotRejectedEnd;
240 fNotRejectedEnd = NULL;
241 }
242 if(fGeneratorNames){
243 delete[] fGeneratorNames;
244 fGeneratorNames = NULL;
245 }
246 if(fUtils){
247 delete fUtils;
248 fUtils = NULL;
249 }
250
251}
252
253//________________________________________________________________________
254void AliConvEventCuts::InitCutHistograms(TString name, Bool_t preCut){
255
256 // Initialize Cut Histograms for QA (only initialized and filled if function is called)
257 TH1::AddDirectory(kFALSE);
258
259 if(fHistograms != NULL){
260 delete fHistograms;
261 fHistograms=NULL;
262 }
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()));
268 }
269
270 if (hReweightMCHistPi0){
271 hReweightMCHistPi0->SetName("MCInputForWeightingPi0");
272 fHistograms->Add(hReweightMCHistPi0);
273 }
274 if (hReweightMCHistEta){
275 hReweightMCHistEta->SetName("MCInputForWeightingEta");
276 fHistograms->Add(hReweightMCHistEta);
277 }
278 if (hReweightMCHistK0s){
279 hReweightMCHistK0s->SetName("MCInputForWeightingK0s");
280 fHistograms->Add(hReweightMCHistK0s);
281 }
282
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);
287
288 // Event Cuts and Info
289 if(preCut){
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);
299
300 hVertexZ=new TH1F(Form("VertexZ %s",GetCutNumber().Data()),"VertexZ",1000,-50,50);
301 fHistograms->Add(hVertexZ);
302
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);
340 }
341 if(!preCut){
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);
378
379 }
380 TH1::AddDirectory(kTRUE);
381}
382
383///________________________________________________________________________
384Bool_t AliConvEventCuts::EventIsSelected(AliVEvent *fInputEvent, AliVEvent *fMCEvent){
385 // Process Event Selection
386
387 Int_t cutindex=0;
388 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
389 cutindex++;
390
391 // Check for MC event
dc729816 392 Bool_t isMC = kFALSE;
344100c4 393 if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){
394 // Check if MC event is correctly loaded
395 AliMCEventHandler* mcHandler = dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler());
396 if (!mcHandler){
397 fEventQuality = 2;
398 return kFALSE;
399 }
400 if (!mcHandler->InitOk() ){
401 fEventQuality = 2;
402 return kFALSE;
403 }
404 if (!mcHandler->TreeK() ){
405 fEventQuality = 2;
406 return kFALSE;
407 }
408 if (!mcHandler->TreeTR() ) {
409 fEventQuality = 2;
410 return kFALSE;
411 }
dc729816 412 isMC = kTRUE;
344100c4 413 }
414
dc729816 415
416
344100c4 417 // Event Trigger
418// cout << "before event trigger" << endl;
dc729816 419 if(!IsTriggerSelected(fInputEvent, isMC )){
344100c4 420 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
421 fEventQuality = 3;
422 return kFALSE;
423 }
424 cutindex++;
425
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);
430 }
431// cout << "event number " << ((AliESDEvent*)fInputEvent)->GetEventNumberInFile() << " entered"<< endl;
432
433
434 // Number of Contributors Cut
435 if(GetNumberOfContributorsVtx(fInputEvent)<=0) {
436 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
437 fEventQuality = 5;
438 return kFALSE;
439 }
440 cutindex++;
441
442 // Z Vertex Position Cut
443 if(!VertexZCut(fInputEvent)){
444 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
445 fEventQuality = 4;
446 return kFALSE;
447 }
448 cutindex++;
449
450 // Pile Up Rejection
451
452 if(fRemovePileUp){
453 if(fInputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
454 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
455 fEventQuality = 6;
456 return kFALSE;
457 }
458 }
459 cutindex++;
460
461 // Centrality Selection
462 if(!IsCentralitySelected(fInputEvent,fMCEvent)){
463 if(fHistoEventCuts)fHistoEventCuts->Fill(cutindex);
464 fEventQuality = 1;
465 return kFALSE;
466 }
467 cutindex++;
468
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()
d9e819f6 476 ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
344100c4 477 fEventQuality = 0;
478 return kTRUE;
479}
480
481///________________________________________________________________________
482Bool_t AliConvEventCuts::UpdateCutString() {
483 ///Update the cut string (if it has been created yet)
484
485 if(fCutString && fCutString->GetString().Length() == kNCuts) {
486 fCutString->SetString(GetCutNumber());
487 } else {
488 return kFALSE;
489 }
490 return kTRUE;
491}
492
493///________________________________________________________________________
494void AliConvEventCuts::LoadReweightingHistosMCFromFile() {
495
496 AliInfo("Entering loading of histograms for weighting");
497 TFile *f = TFile::Open(fPathTrFReweighting.Data());
498 if(!f){
499 AliError(Form("file for weighting %s not found",fPathTrFReweighting.Data()));
500 return;
501 }
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);
509 }
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() ));
516 }
517
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);
525 }
526
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() ));
533
534 }
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);
542 }
543
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() ));
550 }
551 f->Close();
552 delete f;
553}
554
555
556///________________________________________________________________________
557Bool_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();
562 }
563
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));
567 return kFALSE;
568 }
569 if(!analysisCutSelection.IsDigit()){
570 AliError("Cut selection contains characters");
571 return kFALSE;
572 }
573
d9e819f6 574 if (fV0ReaderName.CompareTo("") == 0){
575 fV0ReaderName = "V0ReaderV1";
576 }
344100c4 577 const char *cutSelection = analysisCutSelection.Data();
578 #define ASSIGNARRAY(i) fCuts[i] = cutSelection[i] - '0'
579 for(Int_t ii=0;ii<kNCuts;ii++){
580 ASSIGNARRAY(ii);
581 }
582
583 // Set Individual Cuts
584 for(Int_t ii=0;ii<kNCuts;ii++){
585 if(!SetCut(cutIds(ii),fCuts[ii]))return kFALSE;
586 }
587
588 PrintCutsWithValues();
589
590 return kTRUE;
591}
592
593///________________________________________________________________________
594Bool_t AliConvEventCuts::SetCut(cutIds cutID, const Int_t value) {
595 ///Set individual cut ID
596
597 switch (cutID) {
598 case kremovePileUp:
599 if( SetRemovePileUp(value)) {
600 fCuts[kremovePileUp] = value;
601 UpdateCutString();
602 return kTRUE;
603 } else return kFALSE;
604 case kSelectSpecialTriggerAlias:
605 if( SetSelectSpecialTrigger(value)) {
606 fCuts[kSelectSpecialTriggerAlias] = value;
607 UpdateCutString();
608 return kTRUE;
609 } else return kFALSE;
610 case kSelectSubTriggerClass:
611 if( SetSelectSubTriggerClass(value)) {
612 fCuts[kSelectSubTriggerClass] = value;
613 UpdateCutString();
614 return kTRUE;
615 } else return kFALSE;
616 case kisHeavyIon:
617 if( SetIsHeavyIon(value)) {
618 fCuts[kisHeavyIon] = value;
619 UpdateCutString();
620 return kTRUE;
621 } else return kFALSE;
622 case kCentralityMin:
623 if( SetCentralityMin(value)) {
624 fCuts[kCentralityMin] = value;
625 UpdateCutString();
626 return kTRUE;
627 } else return kFALSE;
628 case kCentralityMax:
629 if( SetCentralityMax(value)) {
630 fCuts[kCentralityMax] = value;
631 UpdateCutString();
632 return kTRUE;
633 } else return kFALSE;
634 case kExtraSignals:
635 if( SetRejectExtraSignalsCut(value)) {
636 fCuts[kExtraSignals] = value;
637 UpdateCutString();
638 return kTRUE;
639 } else return kFALSE;
640 case kNCuts:
641 AliError("Cut id out of range");
642 return kFALSE;
643 }
644
645 AliError("Cut id %d not recognized");
646 return kFALSE;
647}
648
649///________________________________________________________________________
650void 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]);
654 }
655}
656
657void 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]);
662 }
663 printf("\n\n");
664
665 if (fIsHeavyIon == 0) {
666 printf("Running in pp mode \n");
667 if (fSpecialTrigger == 0){
668 printf("\t only events triggered by V0OR will be analysed \n");
669 } else if (fSpecialTrigger == 1){
670 printf("\t only events triggered by V0AND will be analysed \n");
671 } else if (fSpecialTrigger == 2){
672 printf("\t only events where SDD was present will be analysed \n");
673 } else if (fSpecialTrigger == 3){
674 printf("\t only events where SDD was present will be analysed and triggered by VOAND\n");
675 } else if (fSpecialTrigger > 3){
676 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
677 }
678 } else if (fIsHeavyIon == 1){
679 printf("Running in PbPb mode \n");
680 if (fDetectorCentrality == 0){
681 printf("\t centrality selection based on V0M \n");
682 } else if (fDetectorCentrality == 1){
683 printf("\t centrality selection based on Cl1 \n");
684 }
685 if (fModCentralityClass == 0){
686 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
687 } else if ( fModCentralityClass == 1){
688 printf("\t %d - %d \n", fCentralityMin*5, fCentralityMax*5);
689 } else if ( fModCentralityClass == 2){
690 printf("\t %d - %d \n", fCentralityMin*5+45, fCentralityMax*5+45);
691 } else if (fModCentralityClass == 3){
692 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*10, fCentralityMax*10);
693 } else if ( fModCentralityClass == 4){
694 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5, fCentralityMax*5);
695 } else if ( fModCentralityClass == 5){
696 printf("\t %d - %d, with Track mult in MC as data \n", fCentralityMin*5+45, fCentralityMax*5+45);
697 }
698 if (fSpecialTrigger == 0){
699 printf("\t only events triggered by kMB, kCentral, kSemiCentral will be analysed \n");
700 } else if (fSpecialTrigger > 4){
701 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
702 }
703 } else if (fIsHeavyIon == 2){
704 printf("Running in pPb mode \n");
705 if (fDetectorCentrality == 0){
706 printf("\t centrality selection based on V0A \n");
707 } else if (fDetectorCentrality == 1){
708 printf("\t centrality selection based on Cl1 \n");
709 }
710 if (fModCentralityClass == 0){
711 printf("\t %d - %d \n", fCentralityMin*10, fCentralityMax*10);
712 }
713 if (fSpecialTrigger == 0){
714 printf("\t only events triggered by kINT7 will be analysed \n");
715 } else if (fSpecialTrigger > 4){
716 printf("\t only events triggered by %s %s\n", fSpecialTriggerName.Data(), fSpecialSubTriggerName.Data());
717 }
718 }
719 printf("MC event cuts: \n");
720 if (fRejectExtraSignals == 0) printf("\t no rejection was applied \n");
721 else if (fRejectExtraSignals == 1) printf("\t only MB header will be inspected \n");
722 else if (fRejectExtraSignals > 1) printf("\t special header have been selected \n");
723}
724
725///________________________________________________________________________
726Bool_t AliConvEventCuts::SetIsHeavyIon(Int_t isHeavyIon)
727{ // Set Cut
728 switch(isHeavyIon){
729 case 0:
730 fIsHeavyIon=0;
731 break;
732 case 1:
733 fIsHeavyIon=1;
734 fDetectorCentrality=0;
735 break;
736 case 2:
737 fIsHeavyIon=1;
738 fDetectorCentrality=1;
739 break;
740 case 3: //allows to select centrality 0-45% in steps of 5% for V0 Multiplicity
741 fIsHeavyIon=1;
742 fDetectorCentrality=0;
743 fModCentralityClass=1;
744 break;
745 case 4: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
746 fIsHeavyIon=1;
747 fDetectorCentrality=0;
748 fModCentralityClass=2;
749 break;
750 case 5: //strict cut on v0 tracks for MC
751 fIsHeavyIon=1;
752 fDetectorCentrality=0;
753 fModCentralityClass=3;
754 break;
755 case 6: //allows to select centrality 0-45% in steps of 5% for track mult
756 //strict cut on v0 tracks for MC
757 fIsHeavyIon=1;
758 fDetectorCentrality=0;
759 fModCentralityClass=4;
760 break;
761 case 7: //allows to select centrality 45-90% in steps of 5% for V0 Multiplicity
762 //strict cut on v0 tracks for MC
763 fIsHeavyIon=1;
764 fDetectorCentrality=0;
765 fModCentralityClass=5;
766 break;
767 case 8:
768 fIsHeavyIon=2;
769 fDetectorCentrality=0;
770 break;
771 case 9:
772 fIsHeavyIon=2;
773 fDetectorCentrality=1;
774 break;
775 default:
776 AliError(Form("SetHeavyIon not defined %d",isHeavyIon));
777 return kFALSE;
778 }
779 return kTRUE;
780}
781
782//___________________________________________________________________
783Bool_t AliConvEventCuts::SetCentralityMin(Int_t minCentrality)
784{
785 // Set Cut
786 if(minCentrality<0||minCentrality>9){
787 AliError(Form("minCentrality not defined %d",minCentrality));
788 return kFALSE;
789 }
790
791 fCentralityMin=minCentrality;
792 return kTRUE;
793}
794
795//___________________________________________________________________
796Bool_t AliConvEventCuts::SetCentralityMax(Int_t maxCentrality)
797{
798 // Set Cut
799 if(maxCentrality<0||maxCentrality>9){
800 AliError(Form("maxCentrality not defined %d",maxCentrality));
801 return kFALSE;
802 }
803 fCentralityMax=maxCentrality;
804 return kTRUE;
805}
806
807///________________________________________________________________________
808Bool_t AliConvEventCuts::SetSelectSpecialTrigger(Int_t selectSpecialTrigger)
809{// Set Cut
810
811 switch(selectSpecialTrigger){
812 case 0:
813 fSpecialTrigger=0; // dont care
814 break;
815 case 1:
816 fSpecialTrigger=1; // V0AND
817 break;
818 case 2:
819 fSpecialTrigger=2; // with SDD requested
820 break;
821 case 3:
822 fSpecialTrigger=3; // V0AND plus with SDD requested
823 break;
824 // allows to run MB & 6 other different trigger classes in parallel with the same photon cut
825 case 4:
826 fSpecialTrigger=4; // trigger alias kTRD
827 fOfflineTriggerMask=AliVEvent::kTRD;
828 fTriggerSelectedManually = kTRUE;
829 fSpecialTriggerName="AliVEvent::kTRD";
830 break;
831 case 5:
832 fSpecialTrigger=5; // trigger alias kEMC
833 fOfflineTriggerMask=AliVEvent::kEMC7 | AliVEvent::kEMC8 | AliVEvent::kEMC1 ;
834 fTriggerSelectedManually = kTRUE;
dc729816 835 fTriggersEMCALSelected= 0;
836 SETBIT(fTriggersEMCALSelected, kL0);
344100c4 837 fSpecialTriggerName="AliVEvent::kEMC7/kEMC8/kEMC1";
838 break;
839 case 6:
840 fSpecialTrigger=6; // trigger alias kPHI
841 fOfflineTriggerMask=AliVEvent::kPHI7 | AliVEvent::kPHI1 | AliVEvent::kPHI8 | AliVEvent::kPHOSPb;
842 fTriggerSelectedManually = kTRUE;
843 fSpecialTriggerName="AliVEvent::kPHI7/kPHI1/kPHI8/kPHOSPb";
844 break;
845 case 7:
846 fSpecialTrigger=7; // trigger alias kHighMult
847 fOfflineTriggerMask=AliVEvent::kHighMult;
848 fTriggerSelectedManually = kTRUE;
849 fSpecialTriggerName="AliVEvent::kHighMult";
850 break;
851 case 8:
852 fSpecialTrigger=8; // trigger alias kEMCEGA
853 fOfflineTriggerMask=AliVEvent::kEMCEGA;
854 fTriggerSelectedManually = kTRUE;
dc729816 855 fTriggersEMCALSelected= 0;
856 SETBIT(fTriggersEMCALSelected, kG2);
344100c4 857 fSpecialTriggerName="AliVEvent::kEMCEGA";
858 break;
859 case 9:
860 fSpecialTrigger=9; // trigger alias kEMCEJE
861 fOfflineTriggerMask=AliVEvent::kEMCEJE;
862 fTriggerSelectedManually = kTRUE;
dc729816 863 fTriggersEMCALSelected= 0;
864 SETBIT(fTriggersEMCALSelected, kJ2);
344100c4 865 fSpecialTriggerName="AliVEvent::kEMCEJE";
866 break;
867 default:
868 AliError("Warning: Special Trigger Not known");
869 return 0;
870 }
871 return 1;
872}
873
874///________________________________________________________________________
875Bool_t AliConvEventCuts::SetSelectSubTriggerClass(Int_t selectSpecialSubTriggerClass)
876{// Set Cut
877
878 if (fSpecialTrigger == 1){ //V0AND with different detectors
879 switch(selectSpecialSubTriggerClass){
880 case 0: //with VZERO
881 fSpecialTrigger=1;
882 fSpecialSubTrigger=0;
883// AliInfo("Info: Nothing to be done");
884 break;
885 case 1: //with TZERO
886 fSpecialTrigger=0;
887 fSpecialSubTrigger=0;
888 fOfflineTriggerMask=AliVEvent::kINT8;
889 fTriggerSelectedManually = kTRUE;
890 fSpecialTriggerName="AliVEvent::kINT8";
891 break;
892 default:
893 AliError("Warning: Special Subtrigger Class Not known");
894 return 0;
895 }
896
897 } else if (fSpecialTrigger == 4){ // Subdivision of TRD trigger classes
898 switch(selectSpecialSubTriggerClass){
899 case 0: // all together
900 fSpecialSubTrigger=0;
901 fSpecialSubTriggerName="";
902// AliInfo("Info: Nothing to be done");
903 break;
904 case 1: // 7WUHSH - V0AND with single electron in TRD & EMCAL
905 fSpecialSubTrigger=1;
906 fNSpecialSubTriggerOptions=1;
907 fSpecialSubTriggerName="7WUHEE";
908 break;
909 case 2: // 8WUHSH - T0AND with single electron in TRD & EMCAL
910 fSpecialSubTrigger=1;
911 fNSpecialSubTriggerOptions=1;
912 fSpecialSubTriggerName="8WUHEE";
913 break;
914 case 3: // 7WUHSE - V0AND with single high pt electron in TRD
915 fSpecialSubTrigger=1;
916 fNSpecialSubTriggerOptions=1;
917 fSpecialSubTriggerName="7WUHSE";
918 break;
919 case 4: // 8WUHSE - T0AND with single high pt electron in TRD
920 fSpecialSubTrigger=1;
921 fNSpecialSubTriggerOptions=1;
922 fSpecialSubTriggerName="8WUHSE";
923 break;
924 case 5: // 7WUHJE - V0AND with jet in TRD
925 fSpecialSubTrigger=1;
926 fNSpecialSubTriggerOptions=1;
927 fSpecialSubTriggerName="7WUHJT";
928 break;
929 case 6: // 8WUHJE - T0AND with jet in TRD
930 fSpecialSubTrigger=1;
931 fNSpecialSubTriggerOptions=1;
932 fSpecialSubTriggerName="8WUHJT";
933 break;
934 case 7: // 7WUHQU - V0AND with dielectron pair in TRD
935 fSpecialSubTrigger=1;
936 fNSpecialSubTriggerOptions=1;
937 fSpecialSubTriggerName="7WUHQU";
938 break;
939 case 8: // 8WUHQU - T0AND with dielectron pair in TRD
940 fSpecialSubTrigger=1;
941 fNSpecialSubTriggerOptions=1;
942 fSpecialSubTriggerName="8WUHQU";
943 break;
944 default:
945 AliError("Warning: Special Subtrigger Class Not known");
946 return 0;
947 }
948 } else if (fSpecialTrigger == 5){ // Subdivision of kEMC trigger classes
949 switch(selectSpecialSubTriggerClass){
950 case 0: // all together
951 fSpecialSubTrigger=0;
952 fSpecialSubTriggerName="";
953// AliInfo("Info: Nothing to be done");
954 break;
955 case 1: // CEMC1 - V0OR and EMCAL fired
956 fOfflineTriggerMask=AliVEvent::kEMC1;
957 fSpecialTriggerName="AliVEvent::kEMC1";
958 fSpecialSubTrigger=1;
959 fNSpecialSubTriggerOptions=1;
960 fSpecialSubTriggerName="CEMC1";
961 break;
962 case 2: // CEMC7 - V0AND and EMCAL fired
963 fSpecialSubTrigger=1;
964 fOfflineTriggerMask=AliVEvent::kEMC7;
965 fSpecialTriggerName="AliVEvent::kEMC7";
966 fNSpecialSubTriggerOptions=1;
967 fSpecialSubTriggerName="CEMC7";
968 break;
969 case 3: // CEMC8 - T0OR and EMCAL fired
970 fOfflineTriggerMask=AliVEvent::kEMC8;
971 fSpecialTriggerName="AliVEvent::kEMC8";
972 fSpecialSubTrigger=1;
973 fNSpecialSubTriggerOptions=1;
974 fSpecialSubTriggerName="CEMC8";
975 break;
976 default:
977 AliError("Warning: Special Subtrigger Class Not known");
978 return 0;
979 }
980 } else if (fSpecialTrigger == 6){ // Subdivision of kPHI trigger classes
981 switch(selectSpecialSubTriggerClass){
982 case 0: // all together
983 fSpecialSubTrigger=0;
984 fSpecialSubTriggerName="";
985// AliInfo("Info: Nothing to be done");
986 break;
987 case 1: // CEMC1 - V0OR and EMCAL fired
988 fOfflineTriggerMask=AliVEvent::kPHI1;
989 fSpecialTriggerName="AliVEvent::kPHI1";
990 fSpecialSubTrigger=1;
991 fNSpecialSubTriggerOptions=1;
992 fSpecialSubTriggerName="CPHI1";
993 break;
994 case 2: // CEMC7 - V0AND and EMCAL fired
995 fSpecialSubTrigger=1;
996 fOfflineTriggerMask=AliVEvent::kPHI7;
997 fSpecialTriggerName="AliVEvent::kPHI7";
998 fNSpecialSubTriggerOptions=1;
999 fSpecialSubTriggerName="CPHI7";
1000 break;
1001 case 3: // CEMC8 - T0OR and EMCAL fired
1002 fOfflineTriggerMask=AliVEvent::kPHI8;
1003 fSpecialTriggerName="AliVEvent::kPHI8";
1004 fSpecialSubTrigger=1;
1005 fNSpecialSubTriggerOptions=1;
1006 fSpecialSubTriggerName="CPHI8";
1007 break;
1008 default:
1009 AliError("Warning: Special Subtrigger Class Not known");
1010 return 0;
1011 }
1012 } else if (fSpecialTrigger == 7){ // Subdivision of kHighMult trigger classes
1013 switch(selectSpecialSubTriggerClass){
1014 case 0: // all together
1015 fSpecialSubTrigger=0;
1016 fSpecialSubTriggerName="";
1017// AliInfo("Info: Nothing to be done");
1018 break;
1019 case 1: // CSHM1 - V0OR and high mult fired
1020 fSpecialSubTrigger=1;
1021 fNSpecialSubTriggerOptions=1;
1022 fSpecialSubTriggerName="CSHM1";
1023 break;
1024 case 2: // CSHM7 - V0AND and high mult fired
1025 fSpecialSubTrigger=1;
1026 fNSpecialSubTriggerOptions=1;
1027 fSpecialSubTriggerName="CSHM7";
1028 break;
1029 case 3: // CSHM8 - T0OR and high mult fired
1030 fSpecialSubTrigger=1;
1031 fNSpecialSubTriggerOptions=1;
1032 fSpecialSubTriggerName="CSHM8";
1033 break;
1034 default:
1035 AliError("Warning: Special Subtrigger Class Not known");
1036 return 0;
1037 }
1038 } else if (fSpecialTrigger == 8){ // Subdivision of kEMCEGA trigger classes
1039 switch(selectSpecialSubTriggerClass){
1040 case 0: // all together
1041 fSpecialSubTrigger=0;
1042 fSpecialSubTriggerName="";
1043// AliInfo("Info: Nothing to be done");
1044 break;
1045 case 1: // 7EGA - CINT7 EGA
1046 fSpecialSubTrigger=1;
1047 fNSpecialSubTriggerOptions=1;
1048 fSpecialSubTriggerName="7EGA";
dc729816 1049 fTriggersEMCALSelected= 0;
1050 SETBIT(fTriggersEMCALSelected, kG2);
344100c4 1051 break;
1052 case 2: // 8EGA - CINT8 EGA
1053 fSpecialSubTrigger=1;
1054 fNSpecialSubTriggerOptions=1;
1055 fSpecialSubTriggerName="8EGA";
dc729816 1056 fTriggersEMCALSelected= 0;
1057 SETBIT(fTriggersEMCALSelected, kG2);
344100c4 1058 break;
1059 case 3: // 7EG1 - CINT7 EG1
1060 fSpecialSubTrigger=1;
1061 fNSpecialSubTriggerOptions=1;
1062 fSpecialSubTriggerName="7EG1";
dc729816 1063 fTriggersEMCALSelected= 0;
1064 SETBIT(fTriggersEMCALSelected, kG1);
344100c4 1065 break;
1066 case 4: // 8EG1 - CINT8 EG1
1067 fSpecialSubTrigger=1;
1068 fNSpecialSubTriggerOptions=1;
1069 fSpecialSubTriggerName="8EG1";
dc729816 1070 fTriggersEMCALSelected= 0;
1071 SETBIT(fTriggersEMCALSelected, kG1);
344100c4 1072 break;
1073 case 5: // 7EG2 - CINT7 EG2
1074 fSpecialSubTrigger=1;
1075 fNSpecialSubTriggerOptions=1;
1076 fSpecialSubTriggerName="7EG2";
dc729816 1077 fTriggersEMCALSelected= 0;
1078 SETBIT(fTriggersEMCALSelected, kG2);
344100c4 1079 break;
1080 case 6: // 8EG2 - CINT8 EG2
1081 fSpecialSubTrigger=1;
1082 fNSpecialSubTriggerOptions=1;
1083 fSpecialSubTriggerName="8EG2";
dc729816 1084 fTriggersEMCALSelected= 0;
1085 SETBIT(fTriggersEMCALSelected, kG2);
344100c4 1086 break;
1087 default:
1088 AliError("Warning: Special Subtrigger Class Not known");
1089 return 0;
1090 }
1091 } else if (fSpecialTrigger == 9){ // Subdivision of kEMCEGA trigger classes
1092 switch(selectSpecialSubTriggerClass){
1093 case 0: // all together
1094 fSpecialSubTrigger=0;
1095 fSpecialSubTriggerName="";
1096// AliInfo("Info: Nothing to be done");
1097 break;
1098 case 1: // 7EJE - CINT7 EJE
1099 fSpecialSubTrigger=1;
1100 fNSpecialSubTriggerOptions=1;
1101 fSpecialSubTriggerName="7EJE";
dc729816 1102 fTriggersEMCALSelected= 0;
1103 SETBIT(fTriggersEMCALSelected, kJ2);
344100c4 1104 break;
1105 case 2: // 8EJE - CINT8 EJE
1106 fSpecialSubTrigger=1;
1107 fNSpecialSubTriggerOptions=1;
1108 fSpecialSubTriggerName="8EJE";
dc729816 1109 fTriggersEMCALSelected= 0;
1110 SETBIT(fTriggersEMCALSelected, kJ2);
344100c4 1111 break;
1112 case 3: // 7EJ1 - CINT7 EJ1
1113 fSpecialSubTrigger=1;
1114 fNSpecialSubTriggerOptions=1;
1115 fSpecialSubTriggerName="7EJ1";
dc729816 1116 fTriggersEMCALSelected= 0;
1117 SETBIT(fTriggersEMCALSelected, kJ1);
344100c4 1118 break;
1119 case 4: // 8EJ1 - CINT8 EJ1
1120 fSpecialSubTrigger=1;
1121 fNSpecialSubTriggerOptions=1;
1122 fSpecialSubTriggerName="8EJ1";
dc729816 1123 fTriggersEMCALSelected= 0;
1124 SETBIT(fTriggersEMCALSelected, kJ1);
344100c4 1125 break;
1126 case 5: // 7EJ2 - CINT7 EJ2
1127 fSpecialSubTrigger=1;
1128 fNSpecialSubTriggerOptions=1;
1129 fSpecialSubTriggerName="7EJ2";
dc729816 1130 fTriggersEMCALSelected= 0;
1131 SETBIT(fTriggersEMCALSelected, kJ2);
344100c4 1132 break;
1133 case 6: // 8EJ2 - CINT8 EJ2
1134 fSpecialSubTrigger=1;
1135 fNSpecialSubTriggerOptions=1;
1136 fSpecialSubTriggerName="8EJ2";
dc729816 1137 fTriggersEMCALSelected= 0;
1138 SETBIT(fTriggersEMCALSelected, kJ2);
344100c4 1139 break;
1140 default:
1141 AliError("Warning: Special Subtrigger Class Not known");
1142 return 0;
1143 }
1144 }
1145 return 1;
1146}
1147
1148///________________________________________________________________________
1149Bool_t AliConvEventCuts::SetMultiplicityMethod(Int_t multiplicityMethod)
1150{
1151 // Set Cut
1152 fMultiplicityMethod=multiplicityMethod;
1153
1154 // 0 Photon Multiplicity
1155 // 1 TPC Track multiplicity
1156 // 2 V0 Mult
1157 // 3 SPD Mult
1158
1159 return kTRUE;
1160}
1161
1162///________________________________________________________________________
1163Bool_t AliConvEventCuts::SetRemovePileUp(Int_t removePileUp)
1164{// Set Cut
1165 switch(removePileUp){
1166 case 0:
1167 fRemovePileUp=kFALSE;
1168 break;
1169 case 1:
1170 fRemovePileUp=kTRUE;
1171 break;
1172 default:
1173 AliError("RemovePileUpCut not defined");
1174 return kFALSE;
1175 }
1176 return kTRUE;
1177}
1178
1179///________________________________________________________________________
1180Bool_t AliConvEventCuts::SetRejectExtraSignalsCut(Int_t extraSignal) {
1181
1182 switch(extraSignal){
1183 case 0:
1184 fRejectExtraSignals = 0;
1185 break; // No Rejection
1186 case 1:
1187 fRejectExtraSignals = 1;
1188 break; // MinBias Header
1189 case 2:
1190 fRejectExtraSignals = 2;
1191 break; // User String Array
1192 case 3:
1193 fRejectExtraSignals = 3;
1194 break; // Rejection for Gamma Correction only
1195 default:
1196 AliError(Form("Extra Signal Rejection not defined %d",extraSignal));
1197 return kFALSE;
1198 }
1199 return kTRUE;
1200}
1201
1202//-------------------------------------------------------------
1203Double_t AliConvEventCuts::GetCentrality(AliVEvent *event)
1204{ // Get Event Centrality
1205
1206 AliESDEvent *esdEvent=dynamic_cast<AliESDEvent*>(event);
1207 if(esdEvent){
1208 AliCentrality *fESDCentrality=(AliCentrality*)esdEvent->GetCentrality();
1209 if(fDetectorCentrality==0){
1210 if (fIsHeavyIon==2){
1211 return fESDCentrality->GetCentralityPercentile("V0A"); // default for pPb
1212 } else{
1213 return fESDCentrality->GetCentralityPercentile("V0M"); // default
1214 }
1215 }
1216 if(fDetectorCentrality==1){
1217 return fESDCentrality->GetCentralityPercentile("CL1");
1218 }
1219 }
1220
1221 AliAODEvent *aodEvent=dynamic_cast<AliAODEvent*>(event);
1222 if(aodEvent){
1223 if(aodEvent->GetHeader()){return aodEvent->GetHeader()->GetCentrality();}
1224 }
1225
1226 return -1;
1227}
1228
1229//_____________________________________________________________________________________
1230Bool_t AliConvEventCuts::IsCentralitySelected(AliVEvent *event, AliVEvent *fMCEvent)
1231{ // Centrality Selection
1232 if(!fIsHeavyIon)return kTRUE;
1233
1234 if(fCentralityMin == fCentralityMax ) return kTRUE;//0-100%
1235 else if(fCentralityMax==0) fCentralityMax=10; //CentralityRange = fCentralityMin-100%
1236
1237 Double_t centrality=GetCentrality(event);
1238 if(centrality<0)return kFALSE;
1239
1240 Int_t centralityC=0;
1241 if (fModCentralityClass == 0){
1242 centralityC= Int_t(centrality/10);
1243 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1244 return kTRUE;
1245 else return kFALSE;
1246 }
1247 else if (fModCentralityClass ==1){
1248 centralityC= Int_t(centrality);
1249 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1250 return kTRUE;
1251 } else return kFALSE;
1252 }
1253 else if (fModCentralityClass ==2){
1254 centralityC= Int_t(centrality);
1255 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1256 return kTRUE;
1257 else return kFALSE;
1258 }
1259
d9e819f6 1260 Int_t nprimaryTracks = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks();
344100c4 1261 Int_t PrimaryTracks10[10][2] =
1262 {
1263 {9999,9999}, // 0
1264 {1210, 928}, // 10
1265 { 817, 658}, // 20
1266 { 536, 435}, // 30
1267 { 337, 276}, // 40
1268 { 197, 162}, // 50
1269 { 106, 100}, // 60
1270 { 51, 44}, // 70
1271 { 21, 18}, // 80
1272 { 0, 0} // 90
1273 };
1274 Int_t PrimaryTracks5a[10][2] =
1275 {
1276 {9999,9999}, // 0
1277 {1485,1168}, // 5
1278 {1210, 928}, // 10
1279 { 995, 795}, // 15
1280 { 817, 658}, // 20
1281 { 666, 538}, // 25
1282 { 536, 435}, // 30
1283 { 428, 350}, // 35
1284 { 337, 276}, // 40
1285 { 260, 214} // 45
1286 };
1287 Int_t PrimaryTracks5b[10][2] =
1288 {
1289 { 260, 214}, // 45
1290 { 197, 162}, // 50
1291 { 147, 125}, // 55
1292 { 106, 100}, // 60
1293 { 75, 63}, // 65
1294 { 51, 44}, // 70
1295 { 34, 29}, // 75
1296 { 21, 18}, // 80
1297 { 13, 11}, // 85
1298 { 0, 0} // 90
1299 };
1300 Int_t column = 0;
1301 if(event->IsA()==AliESDEvent::Class()) column = 0;
1302 if(event->IsA()==AliAODEvent::Class()) column = 1;
1303
1304 if (fModCentralityClass == 3){
1305 if(fMCEvent){
1306 if(nprimaryTracks > PrimaryTracks10[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks10[fCentralityMin][column])
1307 return kTRUE;
1308 else return kFALSE;
1309 }
1310 else{
1311 centralityC= Int_t(centrality/10);
1312 if(centralityC >= fCentralityMin && centralityC < fCentralityMax)
1313 return kTRUE;
1314 else return kFALSE;
1315 }
1316 }
1317 else if (fModCentralityClass ==4){
1318 if(fMCEvent){
1319 if(nprimaryTracks > PrimaryTracks5a[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5a[fCentralityMin][column])
1320 return kTRUE;
1321 else return kFALSE;
1322 }
1323 else{
1324 centralityC= Int_t(centrality);
1325 if(centralityC >= fCentralityMin*5 && centralityC < fCentralityMax*5){
1326 return kTRUE;
1327 } else return kFALSE;
1328 }
1329 }
1330 else if (fModCentralityClass ==5){
1331 if(fMCEvent){
1332 if(nprimaryTracks > PrimaryTracks5b[fCentralityMax][column] && nprimaryTracks <= PrimaryTracks5b[fCentralityMin][column])
1333 return kTRUE;
1334 else return kFALSE;
1335 }
1336 else{
1337 centralityC= Int_t(centrality);
1338 if(centralityC >= ((fCentralityMin*5)+45) && centralityC < ((fCentralityMax*5)+45))
1339 return kTRUE;
1340 else return kFALSE;
1341 }
1342 }
1343
1344 return kFALSE;
1345}
1346
1347///________________________________________________________________________
1348Bool_t AliConvEventCuts::VertexZCut(AliVEvent *event){
1349 // Cut on z position of primary vertex
1350 Double_t fVertexZ=event->GetPrimaryVertex()->GetZ();
1351 Double_t fVertexZSPD = 0;
1352 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1353 if(fESDEvent){
1354 fVertexZSPD = fESDEvent->GetPrimaryVertexSPD()->GetZ();
1355 }
1356 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1357 if(fAODEvent){
1358 fVertexZSPD = fAODEvent->GetPrimaryVertexSPD()->GetZ();
1359 }
1360
1361 if(abs(fVertexZ)>fMaxVertexZ)return kFALSE;
1362
1363 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
d9e819f6 1364 ->GetTask(fV0ReaderName.Data()))->GetPeriodName();
344100c4 1365 if (periodName.CompareTo("LHC11h")==0){
1366 if (abs(fVertexZ-fVertexZSPD) > 0.1) return kFALSE;
1367 }
1368 if (fIsHeavyIon == 2){
1369 if(fUtils->IsFirstEventInChunk(event)) return kFALSE;
1370 if(!fUtils->IsVertexSelected2013pA(event)) return kFALSE;
1371 if(fUtils->IsPileUpEvent(event)) return kFALSE;
1372 }
1373
1374 return kTRUE;
1375}
1376
1377///________________________________________________________________________
1378Int_t AliConvEventCuts::GetNumberOfContributorsVtx(AliVEvent *event){
1379 // returns number of contributors to the vertex
1380
1381 AliESDEvent *fESDEvent=dynamic_cast<AliESDEvent*>(event);
1382 if(fESDEvent){
1383 if (fESDEvent->GetPrimaryVertex() != NULL){
1384 if(fESDEvent->GetPrimaryVertex()->GetNContributors()>0) {
1385 // cout << "accepted global" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertex()->GetNContributors() << endl;
1386 return fESDEvent->GetPrimaryVertex()->GetNContributors();
1387 }
1388 }
1389
1390 if(fESDEvent->GetPrimaryVertexSPD() !=NULL){
1391 if(fESDEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1392 // cout << "accepted SPD" << fESDEvent->GetEventNumberInFile() << " with NCont: " << fESDEvent->GetPrimaryVertexSPD()->GetNContributors() << endl;
1393 return fESDEvent->GetPrimaryVertexSPD()->GetNContributors();
1394 } else {
1395 AliWarning(Form("Number of contributors from bad vertex type:: %s",fESDEvent->GetPrimaryVertex()->GetName()));
1396 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1397 return 0;
1398 }
1399 }
1400 }
1401
1402 AliAODEvent *fAODEvent=dynamic_cast<AliAODEvent*>(event);
1403 if(fAODEvent){
1404 if (fAODEvent->GetPrimaryVertex() != NULL){
1405 if(fAODEvent->GetPrimaryVertex()->GetNContributors()>0) {
1406 return fAODEvent->GetPrimaryVertex()->GetNContributors();
1407 }
1408 }
1409 if(fAODEvent->GetPrimaryVertexSPD() !=NULL){
1410 if(fAODEvent->GetPrimaryVertexSPD()->GetNContributors()>0) {
1411 return fAODEvent->GetPrimaryVertexSPD()->GetNContributors();
1412 } else {
1413 AliWarning(Form("Number of contributors from bad vertex type:: %s",fAODEvent->GetPrimaryVertex()->GetName()));
1414 return 0;
1415 }
1416 }
1417 }
1418 // cout << "rejected " << fESDEvent->GetEventNumberInFile() << endl;
1419 return 0;
1420}
1421
1422
1423///________________________________________________________________________
dc729816 1424Bool_t AliConvEventCuts::IsTriggerSelected(AliVEvent *fInputEvent, Bool_t isMC)
344100c4 1425{
1426
1427 AliInputEventHandler *fInputHandler=(AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler());
1428
1429 UInt_t isSelected = AliVEvent::kAny;
d9e819f6 1430 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
344100c4 1431 // cout << periodName.Data() << endl;
1432
1433 if (fInputHandler==NULL) return kFALSE;
1434 if( fInputHandler->GetEventSelection() || fInputEvent->IsA()==AliAODEvent::Class()) {
1435
1436 TString firedTrigClass = fInputEvent->GetFiredTriggerClasses();
1437 if (!fTriggerSelectedManually){
1438 if (fPreSelCut) fOfflineTriggerMask = AliVEvent::kAny;
1439 else {
1440 if (fIsHeavyIon == 1) fOfflineTriggerMask = AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral;
1441 else if (fIsHeavyIon == 2) fOfflineTriggerMask = AliVEvent::kINT7;
1442 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 ) {
1443 fOfflineTriggerMask = AliVEvent::kINT7;
1444 // cout << "will take kINT7 as trigger mask" << endl;
1445 }
1446 else fOfflineTriggerMask = AliVEvent::kMB;
1447 }
1448 }
1449 // Get the actual offline trigger mask for the event and AND it with the
1450 // requested mask. If no mask requested select by default the event.
1451 // if (fPreSelCut) cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask for Precut: " << fOfflineTriggerMask << endl;
1452 // else cout << "Trigger selected from outside: "<< fTriggerSelectedManually <<"\t Offline Trigger mask: " << fOfflineTriggerMask << endl;
1453
1454 if (fOfflineTriggerMask){
1455 isSelected = fOfflineTriggerMask & fInputHandler->IsEventSelected();
dc729816 1456
344100c4 1457 if (isSelected && !fPreSelCut){
dc729816 1458// cout << "Special trigger: "<< fSpecialTrigger << " initialized " << fEMCALTrigInitialized << endl;
1459 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1460 if (!fEMCALTrigInitialized ) InitializeEMCALTrigger(fInputEvent);
1461 fTriggersEMCAL= GetTriggerList();
1462 }
1463 if (fSpecialSubTrigger>0 && !isMC){
344100c4 1464 if (!firedTrigClass.Contains(fSpecialSubTriggerName.Data())) isSelected = 0;
dc729816 1465 } else if (fSpecialSubTrigger>0 && isMC){
1466 if (fSpecialTrigger == 5 || fSpecialTrigger == 8 || fSpecialTrigger == 9){ // EMCAL triggers
1467 isSelected = 0;
1468// cout << "triggers: " << fTriggersEMCAL << " selected triggers: " << fTriggersEMCALSelected << endl;
1469 if (fTriggersEMCAL&fTriggersEMCALSelected){
1470// cout << "accepted ++++++++++++++++++++" << endl;
1471 isSelected = 1;
1472 }
1473 }
1474 }
344100c4 1475 }
1476 }
1477 }
1478 fIsSDDFired = !(fInputHandler->IsEventSelected() & AliVEvent::kFastOnly);
1479
1480 // Fill Histogram
1481 if(hTriggerClass){
1482 if (fIsSDDFired) hTriggerClass->Fill(33);
1483 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClass->Fill(0);
1484 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClass->Fill(1);
1485 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClass->Fill(2);
1486 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClass->Fill(3);
1487 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClass->Fill(4);
1488 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClass->Fill(5);
1489 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClass->Fill(6);
1490 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClass->Fill(6);
1491 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClass->Fill(7);
1492 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClass->Fill(7);
1493 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClass->Fill(8);
1494 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClass->Fill(8);
1495 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClass->Fill(9);
1496 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClass->Fill(9);
1497 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClass->Fill(10);
1498 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClass->Fill(10);
1499 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClass->Fill(11);
1500 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClass->Fill(12);
1501 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClass->Fill(13);
1502 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClass->Fill(13);
1503 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClass->Fill(13);
1504 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClass->Fill(14);
1505 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClass->Fill(15);
1506 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClass->Fill(16);
1507 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClass->Fill(17);
1508 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClass->Fill(18);
1509 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClass->Fill(19);
1510 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClass->Fill(20);
1511 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClass->Fill(20);
1512 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClass->Fill(21);
1513 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClass->Fill(22);
1514 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClass->Fill(23);
1515 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClass->Fill(24);
1516 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClass->Fill(25);
1517 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClass->Fill(26);
1518 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClass->Fill(27);
1519 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClass->Fill(28);
1520 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClass->Fill(29);
1521 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClass->Fill(30);
1522 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClass->Fill(31);
1523 if (!fInputHandler->IsEventSelected()) hTriggerClass->Fill(34);
1524 }
1525
1526 if(hTriggerClassSelected && isSelected){
1527 if (!fIsSDDFired) hTriggerClassSelected->Fill(33);
1528 if (fInputHandler->IsEventSelected() & AliVEvent::kMB)hTriggerClassSelected->Fill(0);
1529 if (fInputHandler->IsEventSelected() & AliVEvent::kINT7)hTriggerClassSelected->Fill(1);
1530 if (fInputHandler->IsEventSelected() & AliVEvent::kMUON)hTriggerClassSelected->Fill(2);
1531 if (fInputHandler->IsEventSelected() & AliVEvent::kHighMult)hTriggerClassSelected->Fill(3);
1532 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC1)hTriggerClassSelected->Fill(4);
1533 if (fInputHandler->IsEventSelected() & AliVEvent::kCINT5)hTriggerClassSelected->Fill(5);
1534 if (fInputHandler->IsEventSelected() & AliVEvent::kCMUS5)hTriggerClassSelected->Fill(6);
1535 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSPB)hTriggerClassSelected->Fill(6);
1536 if (fInputHandler->IsEventSelected() & AliVEvent::kMUSH7)hTriggerClassSelected->Fill(7);
1537 // if (fInputHandler->IsEventSelected() & AliVEvent::kMUSHPB)hTriggerClassSelected->Fill(7);
1538 if (fInputHandler->IsEventSelected() & AliVEvent::kMUL7)hTriggerClassSelected->Fill(8);
1539 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikePB)hTriggerClassSelected->Fill(8);
1540 if (fInputHandler->IsEventSelected() & AliVEvent::kMUU7)hTriggerClassSelected->Fill(9);
1541 // if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikePB)hTriggerClassSelected->Fill(9);
1542 if (fInputHandler->IsEventSelected() & AliVEvent::kEMC7)hTriggerClassSelected->Fill(10);
1543 // if (fInputHandler->IsEventSelected() & AliVEvent::kEMC8)hTriggerClassSelected->Fill(10);
1544 if (fInputHandler->IsEventSelected() & AliVEvent::kMUS7)hTriggerClassSelected->Fill(11);
1545 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI1)hTriggerClassSelected->Fill(12);
1546 if (fInputHandler->IsEventSelected() & AliVEvent::kPHI7)hTriggerClassSelected->Fill(13);
1547 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHI8)hTriggerClassSelected->Fill(13);
1548 // if (fInputHandler->IsEventSelected() & AliVEvent::kPHOSPb)hTriggerClassSelected->Fill(13);
1549 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEJE)hTriggerClassSelected->Fill(14);
1550 if (fInputHandler->IsEventSelected() & AliVEvent::kEMCEGA)hTriggerClassSelected->Fill(15);
1551 if (fInputHandler->IsEventSelected() & AliVEvent::kCentral)hTriggerClassSelected->Fill(16);
1552 if (fInputHandler->IsEventSelected() & AliVEvent::kSemiCentral)hTriggerClassSelected->Fill(17);
1553 if (fInputHandler->IsEventSelected() & AliVEvent::kDG5)hTriggerClassSelected->Fill(18);
1554 if (fInputHandler->IsEventSelected() & AliVEvent::kZED)hTriggerClassSelected->Fill(19);
1555 if (fInputHandler->IsEventSelected() & AliVEvent::kSPI7)hTriggerClassSelected->Fill(20);
1556 // if (fInputHandler->IsEventSelected() & AliVEvent::kSPI)hTriggerClassSelected->Fill(20);
1557 if (fInputHandler->IsEventSelected() & AliVEvent::kINT8)hTriggerClassSelected->Fill(21);
1558 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleLowPt8)hTriggerClassSelected->Fill(22);
1559 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonSingleHighPt8)hTriggerClassSelected->Fill(23);
1560 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonLikeLowPt8)hTriggerClassSelected->Fill(24);
1561 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt8)hTriggerClassSelected->Fill(25);
1562 if (fInputHandler->IsEventSelected() & AliVEvent::kMuonUnlikeLowPt0)hTriggerClassSelected->Fill(26);
1563 if (fInputHandler->IsEventSelected() & AliVEvent::kUserDefined)hTriggerClassSelected->Fill(27);
1564 if (fInputHandler->IsEventSelected() & AliVEvent::kTRD)hTriggerClassSelected->Fill(28);
1565 if (fInputHandler->IsEventSelected() & AliVEvent::kFastOnly)hTriggerClassSelected->Fill(29);
1566 if (fInputHandler->IsEventSelected() & AliVEvent::kAnyINT)hTriggerClassSelected->Fill(30);
1567 if (fInputHandler->IsEventSelected() & AliVEvent::kAny)hTriggerClassSelected->Fill(31);
1568 }
1569
1570 if(!isSelected)return kFALSE;
1571 return kTRUE;
1572
1573}
1574
1575///________________________________________________________________________
1576TString AliConvEventCuts::GetCutNumber(){
1577 // returns TString with current cut number
1578 TString a(kNCuts);
1579 for(Int_t ii=0;ii<kNCuts;ii++){
1580 a.Append(Form("%d",fCuts[ii]));
1581 }
1582 return a;
1583}
1584
1585///________________________________________________________________________
1586void AliConvEventCuts::GetNotRejectedParticles(Int_t rejection, TList *HeaderList, AliVEvent *MCEvent){
1587
d9e819f6 1588 TString periodName = ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask(fV0ReaderName.Data()))->GetPeriodName();
344100c4 1589
1590
1591 if(fNotRejectedStart){
1592 delete[] fNotRejectedStart;
1593 fNotRejectedStart = NULL;
1594 }
1595 if(fNotRejectedEnd){
1596 delete[] fNotRejectedEnd;
1597 fNotRejectedEnd = NULL;
1598 }
1599 if(fGeneratorNames){
1600 delete[] fGeneratorNames;
1601 fGeneratorNames = NULL;
1602 }
1603
1604 if(rejection == 0) return; // No Rejection
1605
1606 AliGenCocktailEventHeader *cHeader = 0x0;
1607 AliAODMCHeader *cHeaderAOD = 0x0;
1608 Bool_t headerFound = kFALSE;
1609 AliStack *fMCStack = 0x0;
1610 TClonesArray *fMCStackAOD = 0x0;
1611 if(MCEvent->IsA()==AliMCEvent::Class()){
1612 cHeader = dynamic_cast<AliGenCocktailEventHeader*>(dynamic_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1613 if(cHeader) headerFound = kTRUE;
1614 if(dynamic_cast<AliMCEvent*>(MCEvent))fMCStack = dynamic_cast<AliStack*>(dynamic_cast<AliMCEvent*>(MCEvent)->Stack());
1615 }
1616 if(MCEvent->IsA()==AliAODEvent::Class()){ // MCEvent is a AODEvent in case of AOD
1617 cHeaderAOD = dynamic_cast<AliAODMCHeader*>(MCEvent->FindListObject(AliAODMCHeader::StdBranchName()));
1618 fMCStackAOD = dynamic_cast<TClonesArray*>(MCEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1619
1620
1621 if(cHeaderAOD) headerFound = kTRUE;
1622 }
1623
1624 if(headerFound){
1625 TList *genHeaders = 0x0;
1626 if(cHeader) genHeaders = cHeader->GetHeaders();
1627 if(cHeaderAOD){
1628 genHeaders = cHeaderAOD->GetCocktailHeaders();
1629 if(genHeaders->GetEntries()==1){
1630 SetRejectExtraSignalsCut(0);
1631 return;
1632 }
1633 }
1634 AliGenEventHeader* gh = 0;
1635 fnHeaders = 0;
1636 Int_t firstindexA = 0;
1637 Int_t lastindexA = -1;
1638 if(rejection == 1 || rejection == 3) fnHeaders = 1; // MinBiasHeader
1639 if(rejection == 2){ // TList of Headers Names
1640 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1641 gh = (AliGenEventHeader*)genHeaders->At(i);
1642 TString GeneratorName = gh->GetName();
1643 lastindexA = lastindexA + gh->NProduced();
1644// cout << i << "\t" << GeneratorName.Data() << endl;
1645 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1646 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
b5d519c0 1647// cout << GeneratorInList.Data() << endl;
344100c4 1648 if(GeneratorName.CompareTo(GeneratorInList) == 0){
b5d519c0 1649// cout << "accepted" << endl;
344100c4 1650 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1651 if(fMCStack){
1652 if (fMCStack->Particle(firstindexA)->GetPdgCode() == fAddedSignalPDGCode ) {
1653 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1654 if (gh->NProduced() > 10 && fMCStack->Particle(firstindexA+10)->GetPdgCode() == fAddedSignalPDGCode ){
1655// cout << "cond 1: "<< fnHeaders << endl;
1656 fnHeaders++;
1657 continue;
1658 }
1659 continue;
1660 } else {
1661// cout << "cond 2: " << fnHeaders << endl;
1662 fnHeaders++;
1663 continue;
1664 }
1665 }
1666 }
1667 if ( fMCStackAOD){
1668 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA));
1669 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1670 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1671 if (gh->NProduced() > 10){
1672 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindexA+10));
1673 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1674// cout << "cond 1: " << fnHeaders << endl;
1675 fnHeaders++;
1676 continue;
1677 }
1678 }
1679 continue;
1680 } else {
1681// cout << "cond 2: " << fnHeaders << endl;
1682 fnHeaders++;
1683 continue;
1684 }
1685 }
1686 }
1687 continue;
1688 }
1689// cout << "cond 3: "<< fnHeaders << endl;
1690 fnHeaders++;
1691 continue;
1692 }
1693 }
1694 firstindexA = firstindexA + gh->NProduced();
1695 }
1696 }
1697// cout << "number of headers: " <<fnHeaders << endl;
1698
1699 fNotRejectedStart = new Int_t[fnHeaders];
1700 fNotRejectedEnd = new Int_t[fnHeaders];
1701 fGeneratorNames = new TString[fnHeaders];
1702
1703 if(rejection == 1 || rejection == 3){
1704 fNotRejectedStart[0] = 0;
1705 fNotRejectedEnd[0] = ((AliGenEventHeader*)genHeaders->At(0))->NProduced()-1;
1706 fGeneratorNames[0] = ((AliGenEventHeader*)genHeaders->At(0))->GetName();
1707 return;
1708 }
1709
1710 Int_t firstindex = 0;
1711 Int_t lastindex = -1;
1712 Int_t number = 0;
1713
1714 for(Int_t i = 0; i<genHeaders->GetEntries();i++){
1715 gh = (AliGenEventHeader*)genHeaders->At(i);
1716 TString GeneratorName = gh->GetName();
1717 lastindex = lastindex + gh->NProduced();
1718 for(Int_t j = 0; j<HeaderList->GetEntries();j++){
1719 TString GeneratorInList = ((TObjString*)HeaderList->At(j))->GetString();
1720// cout << i << "\t" << GeneratorName.Data() << endl;
1721 if(GeneratorName.CompareTo(GeneratorInList) == 0){
1722 if (GeneratorInList.CompareTo("PARAM") == 0 || GeneratorInList.CompareTo("BOX") == 0 ){
1723 if(fMCStack){
1724 if (fMCStack->Particle(firstindex)->GetPdgCode() == fAddedSignalPDGCode ) {
1725 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1726// cout << "produced " << gh->NProduced() << " with box generator" << endl;
1727 if (gh->NProduced() > 10 && fMCStack->Particle(firstindex+10)->GetPdgCode() == fAddedSignalPDGCode){
1728// cout << "one of them was a pi0 or eta" << endl;
1729 fNotRejectedStart[number] = firstindex;
1730 fNotRejectedEnd[number] = lastindex;
1731 fGeneratorNames[number] = GeneratorName;
1732 number++;
1733// cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1734 continue;
1735 }
1736 } else {
1737 fNotRejectedStart[number] = firstindex;
1738 fNotRejectedEnd[number] = lastindex;
1739 fGeneratorNames[number] = GeneratorName;
1740 number++;
1741 continue;
1742 }
1743 }
1744 }
1745 if ( fMCStackAOD){
1746 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex));
1747 if ( aodMCParticle->GetPdgCode() == fAddedSignalPDGCode ){
1748 if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0 ){
1749 if (gh->NProduced() > 10) {
1750 AliAODMCParticle *aodMCParticle2 = static_cast<AliAODMCParticle*>(fMCStackAOD->At(firstindex+10));
1751 if ( aodMCParticle2->GetPdgCode() == fAddedSignalPDGCode ){
1752 fNotRejectedEnd[number] = lastindex;
1753 fNotRejectedStart[number] = firstindex;
1754 fGeneratorNames[number] = GeneratorName;
1755 number++;
1756 }
1757 continue;
1758 }
1759 } else {
1760 fNotRejectedStart[number] = firstindex;
1761 fNotRejectedEnd[number] = lastindex;
1762 fGeneratorNames[number] = GeneratorName;
1763 number++;
1764 continue;
1765 }
1766 }
1767 }
1768 continue;
1769 } else {
1770 fNotRejectedStart[number] = firstindex;
1771 fNotRejectedEnd[number] = lastindex;
1772 fGeneratorNames[number] = GeneratorName;
1773// cout << "Number of particles produced for: " << i << "\t" << GeneratorName.Data() << "\t" << lastindex-firstindex+1 << endl;
1774 number++;
1775 continue;
1776 }
1777
1778 }
1779 }
1780 firstindex = firstindex + gh->NProduced();
1781 }
1782// for (Int_t i = 0; i < number; i++){
1783// cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
1784// }
1785
1786 } else { // No Cocktail Header Found
1787 fNotRejectedStart = new Int_t[1];
1788 fNotRejectedEnd = new Int_t[1];
1789
1790 fnHeaders = 1;
1791 fNotRejectedStart[0] = 0;
1792 fNotRejectedEnd[0] = static_cast<AliMCEvent*>(MCEvent)->Stack()->GetNprimary()-1;
1793 fGeneratorNames = new TString[1];
1794 fGeneratorNames[0] = "NoCocktailGeneratorFound";
1795
1796 AliGenPythiaEventHeader *mcHeaderPythia = dynamic_cast<AliGenPythiaEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1797 if (mcHeaderPythia) fGeneratorNames[0] = "NoCocktailGeneratorFound_Pythia";
1798 AliGenDPMjetEventHeader *mcHeaderPhojet = dynamic_cast<AliGenDPMjetEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1799 if (mcHeaderPhojet) fGeneratorNames[0] = "NoCocktailGeneratorFound_Phojet";
1800 AliGenHijingEventHeader *mcHeaderHijing = dynamic_cast<AliGenHijingEventHeader*>(static_cast<AliMCEvent*>(MCEvent)->GenEventHeader());
1801 if (mcHeaderHijing) fGeneratorNames[0] = "NoCocktailGeneratorFound_Hijing";
1802
1803 SetRejectExtraSignalsCut(0);
1804 }
1805
1806}
1807
1808//_________________________________________________________________________
1809Int_t AliConvEventCuts::IsParticleFromBGEvent(Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
1810
1811 // Not Accepted == kFALSE == 0
1812 // Accepted == kTRUE == 1
1813 // FirstHeader == kTRUE == 3
1814 if(index < 0) return 0; // No Particle
1815
1816// if (index == 100){
1817// cout << "possible headers" << endl;
1818// for(Int_t i = 0;i<fnHeaders;i++){
1819// cout << i << "\t" <<fGeneratorNames[i] << "\t" << fNotRejectedStart[i] << "\t" <<fNotRejectedEnd[i] << endl;
1820// }
1821// }
1822 Int_t accepted = 0;
1823 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
1824 if( index >= MCStack->GetNprimary()){ // Secondary Particle
1825 if( ((TParticle*)MCStack->Particle(index))->GetMother(0) < 0) return 1; // Secondary Particle without Mother??
1826 return IsParticleFromBGEvent(((TParticle*)MCStack->Particle(index))->GetMother(0),MCStack,InputEvent);
1827 }
1828 for(Int_t i = 0;i<fnHeaders;i++){
1829 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1830 accepted = 1;
1831 if(i == 0) accepted = 2; // MB Header
1832 }
1833 }
1834 }
1835 else if(InputEvent->IsA()==AliAODEvent::Class()){
1836 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1837 if (AODMCTrackArray){
1838 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
1839 if(!aodMCParticle) return 1; // Photon Without a Mother ? --> Accepted
1840 if(!aodMCParticle->IsPrimary()){
1841 if( aodMCParticle->GetMother() < 0) return 1;// Secondary Particle without Mother??
1842 return IsParticleFromBGEvent(aodMCParticle->GetMother(),MCStack,InputEvent);
1843 }
1844 index = abs(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index))->GetLabel());
1845 for(Int_t i = 0;i<fnHeaders;i++){
1846 if(index >= fNotRejectedStart[i] && index <= fNotRejectedEnd[i]){
1847 accepted = 1;
1848 if(i == 0) accepted = 2; // MB Header
1849 }
1850 }
1851 }
1852 }
1853
1854 return accepted;
1855}
1856
1857//_________________________________________________________________________
1858Int_t AliConvEventCuts::IsEventAcceptedByCut(AliConvEventCuts *ReaderCuts, AliVEvent *InputEvent, AliMCEvent *MCEvent, Int_t isHeavyIon){
1859
dc729816 1860 Bool_t isMC = kFALSE;
1861 if (MCEvent){isMC = kTRUE;}
1862
1863 if ( !IsTriggerSelected(InputEvent, isMC) )
344100c4 1864 return 3;
1865
1866 if(isHeavyIon != 0 && !(IsCentralitySelected(InputEvent,MCEvent)))
1867 return 1; // Check Centrality --> Not Accepted => eventQuality = 1
1868
1869 if(isHeavyIon == 0 && GetIsFromPileup()){
1870 if(InputEvent->IsPileupFromSPD(3,0.8,3.,2.,5.)){
1871 return 6; // Check Pileup --> Not Accepted => eventQuality = 6
1872 }
1873 }
1874
1875 Bool_t hasV0And = ReaderCuts->HasV0AND();
1876 Bool_t isSDDFired = ReaderCuts->IsSDDFired();
1877 if( (IsSpecialTrigger() == 2 || IsSpecialTrigger() == 3) && !isSDDFired && !MCEvent)
1878 return 7; // With SDD requested but no fired
1879
1880 if( (IsSpecialTrigger() == 1 || IsSpecialTrigger() == 3) && !hasV0And)
1881 return 8; // V0AND requested but no fired
1882
1883 if(hCentrality)hCentrality->Fill(GetCentrality(InputEvent));
1884 if(hCentralityVsNumberOfPrimaryTracks)
1885 hCentralityVsNumberOfPrimaryTracks->Fill(GetCentrality(InputEvent),
1886 ((AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()
d9e819f6 1887 ->GetTask(fV0ReaderName.Data()))->GetNumberOfPrimaryTracks());
344100c4 1888
1889 return 0;
1890}
1891
1892//_________________________________________________________________________
1893Float_t AliConvEventCuts::GetWeightForMeson(TString period, Int_t index, AliStack *MCStack, AliVEvent *InputEvent){
1894 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") ||
1895 period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.CompareTo("LHC14b2") == 0 )) return 1.;
1896
1897 Int_t kCaseGen = 0;
1898 for (Int_t i = 0; i < fnHeaders; i++){
1899 if (index >= fNotRejectedStart[i] && index < fNotRejectedEnd[i]+1){
1900 if (fGeneratorNames[i].CompareTo("Pythia") == 0){
1901 kCaseGen = 1;
1902 } else if (fGeneratorNames[i].CompareTo("DPMJET") == 0){
1903 kCaseGen = 2;
1904 } else if (fGeneratorNames[i].CompareTo("HIJING") == 0 ||
1905 fGeneratorNames[i].CompareTo("Hijing") == 0 ||
1906 fGeneratorNames[i].Contains("hijing")){
1907 kCaseGen = 3;
1908 } else if (fGeneratorNames[i].CompareTo("BOX") == 0){
1909 kCaseGen = 4;
1910 } else if (fGeneratorNames[i].CompareTo("PARAM") == 0){
1911 kCaseGen = 5;
1912 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound") == 0){
1913 kCaseGen = 6;
1914 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Pythia") == 0){
1915 kCaseGen = 1;
1916 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Phojet") == 0){
1917 kCaseGen = 2;
1918 } else if (fGeneratorNames[i].CompareTo("NoCocktailGeneratorFound_Hijing") == 0){
1919 kCaseGen = 3;
1920 }
1921 if (period.Contains("LHC13d2") || period.CompareTo("LHC13e7") == 0 || period.Contains("LHC13b2_efix") || period.Contains("LHC14a1") || period.CompareTo("LHC14b2") == 0 ){
1922 kCaseGen = 3;
1923 }
1924 }
1925 }
1926 if (kCaseGen == 0) return 1;
1927
1928
1929 Double_t mesonPt = 0;
1930 Double_t mesonMass = 0;
1931 Int_t PDGCode = 0;
1932 if(!InputEvent || InputEvent->IsA()==AliESDEvent::Class()){
1933 mesonPt = ((TParticle*)MCStack->Particle(index))->Pt();
1934 mesonMass = ((TParticle*)MCStack->Particle(index))->GetCalcMass();
1935 PDGCode = ((TParticle*)MCStack->Particle(index))->GetPdgCode();
1936 }
1937 else if(InputEvent->IsA()==AliAODEvent::Class()){
1938 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(InputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1939 if (AODMCTrackArray){
1940 AliAODMCParticle *aodMCParticle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(index));
1941 mesonPt = aodMCParticle->Pt();
1942 mesonMass = aodMCParticle->GetCalcMass();
1943 PDGCode = aodMCParticle->GetPdgCode();
1944 } else {
1945 return 1;
1946 }
1947 }
1948
1949 Float_t functionResultMC = 1.;
1950 if (kCaseGen == 1){ // Pythia 6
1951 Float_t dNdyMC = 2.1462;
1952 Float_t nMC = 7.06055;
1953 Float_t tMC = 0.12533;
1954 if ( PDGCode == 111){
1955 dNdyMC = 2.1462;
1956 nMC = 7.06055;
1957 tMC = 0.12533;
1958 } else if ( PDGCode == 221){
1959 dNdyMC = 0.2357;
1960 nMC = 5.9105;
1961 tMC = 0.1525;
1962 }
1963 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);
1964 } else if (kCaseGen == 2){ // Phojet
1965 Float_t dNdyMC = 2.35978;
1966 Float_t nMC = 6.81795;
1967 Float_t tMC = 0.11492;
1968 if ( PDGCode == 111){
1969 dNdyMC = 2.35978;
1970 nMC = 6.81795;
1971 tMC = 0.11492;
1972 } else if ( PDGCode == 221){
1973 dNdyMC = 0.3690;
1974 nMC = 5.55809;
1975 tMC = 0.13387;
1976 }
1977 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);
1978 } else if (kCaseGen == 4){ // BOX generators pp
1979 // functionResultMC = 1./sqrt(1.-mesonMass*mesonMass/((mesonMass*mesonMass+mesonPt*mesonPt)*cosh(mesonY)*cosh(mesonY)));
1980 Float_t a = 0.23437;
1981 Float_t b = 5.6661;
1982 Float_t c = -1430.5863;
1983 Float_t d = -0.6966624;
1984 Float_t e = 252.3742;
1985 if ( PDGCode == 111){
1986 a = 0.23437;
1987 b = 5.6661;
1988 c = -1430.5863;
1989 d = -0.6966624;
1990 e = 252.3742;
1991 } else if ( PDGCode == 221){
1992 a = 0.10399;
1993 b = 4.35311;
1994 c = -12.17723;
1995 d = -0.01172;
1996 e =1.85140;
1997 }
1998 functionResultMC = a*TMath::Power(mesonPt,-1.*(b+c/(TMath::Power(mesonPt,d)+e)))*1./mesonPt *1./1.6 *1./(2.* TMath::Pi());
1999 // cout << functionResultMC << endl;
2000 } else if (kCaseGen == 3 ){ // HIJING
2001 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0){
2002 functionResultMC = hReweightMCHistPi0->Interpolate(mesonPt);
2003 }
2004 if ( PDGCode == 221 && fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0){
2005 functionResultMC = hReweightMCHistEta->Interpolate(mesonPt);
2006 }
2007 if ( PDGCode == 310 && fDoReweightHistoMCK0s && hReweightMCHistK0s!= 0x0){
2008 functionResultMC = hReweightMCHistK0s->Interpolate(mesonPt);
2009 }
2010 }
2011
2012 Float_t functionResultData = 1;
2013 if (kCaseGen == 1 || kCaseGen == 2 || kCaseGen == 4 ){
2014 Float_t dNdyData = 2.2328;
2015 Float_t nData = 7.1473;
2016 Float_t tData = 0.1346;
2017 if ( PDGCode == 111){
2018 dNdyData = 2.2328;
2019 nData = 7.1473;
2020 tData = 0.1346;
2021 } else if ( PDGCode == 221){
2022 dNdyData = 0.38992; //be careful this fit is not optimal, eta in data still has problems
2023 nData = 5.72778;
2024 tData = 0.13835;
2025 }
2026 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);
2027 // cout << functionResultData << endl;
2028 } else {
2029 if ( PDGCode == 111 && fDoReweightHistoMCPi0 && fFitDataPi0!= 0x0){
2030 functionResultData = fFitDataPi0->Eval(mesonPt);
2031 }
2032 if ( PDGCode == 221 && fDoReweightHistoMCEta && fFitDataEta!= 0x0){
2033 functionResultData = fFitDataEta->Eval(mesonPt);
2034 }
2035 if ( PDGCode == 310 && fDoReweightHistoMCK0s && fFitDataK0s!= 0x0){
2036 functionResultData = fFitDataK0s->Eval(mesonPt);
2037 }
2038
2039 }
2040
2041 Double_t weight = 1;
2042 if (PDGCode == 111 || PDGCode == 221){
2043 if (functionResultData != 0. && functionResultMC != 0. && isfinite(functionResultData) && isfinite(functionResultMC)){
2044 weight = functionResultData/functionResultMC;
2045 if ( kCaseGen == 3){
2046 if (PDGCode == 111){
2047 if (!(fDoReweightHistoMCPi0 && hReweightMCHistPi0!= 0x0 && PDGCode == 111)){
2048 weight = 1.;
2049 }
2050 }
2051 if (PDGCode == 221){
2052 if (!(fDoReweightHistoMCEta && hReweightMCHistEta!= 0x0 && PDGCode == 221)){
2053 weight = 1.;
2054 }
2055 }
2056 }
2057 if (!isfinite(functionResultData)) weight = 1.;
2058 if (!isfinite(weight)) weight = 1.;
2059 }
2060 } else if (PDGCode == 310 && functionResultMC != 0 && isfinite(functionResultMC)){
2061 weight = functionResultMC;
2062 }
2063
2064 // if (fModCentralityClass == 0 && fCentralityMin == 4 && fCentralityMax == 6 && PDGCode == 111){
2065 // cout << period.Data() << "\t" << kCaseGen << "\t" <<fModCentralityClass<< "\t" <<fCentralityMin<< "\t" <<fCentralityMax << "\t" << mesonPt << "\t" <<mesonMass<< "\t"<<functionResultData << "\t"<< functionResultMC << "\t" << weight <<endl;
2066 // }
2067 return weight;
2068}
2069
2070
2071///________________________________________________________________________
2072void AliConvEventCuts::GetCorrectEtaShiftFromPeriod(TString periodName){
2073
2074 if(periodName.CompareTo("LHC12g") == 0 || //pilot run 2012
2075 periodName.CompareTo("LHC13b") == 0 || //mainly minimum bias
2076 periodName.CompareTo("LHC13c") == 0 || //mainly minimum bias
2077 periodName.CompareTo("LHC13d") == 0 || //mainly triggered
2078 periodName.CompareTo("LHC13e") == 0 || //mainly triggered
2079 periodName.CompareTo("LHC13c3") == 0 || //MC Starlight, anchor LHC13d+e
2080 periodName.CompareTo("LHC13c2") == 0 || //MC Starlight, coherent J/Psi, UPC muon anchor LHC13d+e
2081 periodName.CompareTo("LHC13b4") == 0 || //MC Pythia 6 (Jet-Jet), anchor LHC13b
2082 periodName.CompareTo("LHC13b2_fix_1") == 0 || //MC DPMJET, anchr LHC13b+c
2083 periodName.CompareTo("LHC13b2_efix_p1") == 0 || //MC DPMJET, anchr LHC13b+c
2084 periodName.CompareTo("LHC13b2_efix_p2") == 0 || //MC DPMJET, anchr LHC13b+c
2085 periodName.CompareTo("LHC13b2_efix_p3") == 0 || //MC DPMJET, anchr LHC13b+c
2086 periodName.CompareTo("LHC13b2_efix_p4") == 0 || //MC DPMJET, anchr LHC13b+c
2087 periodName.CompareTo("LHC13e7") == 0 || //MC DPMJET, anchr LHC13b+c
2088 periodName.CompareTo("LHC13b3") == 0 || //MC HIJING, weighted to number of events per run, anchor LHC13b
2089 periodName.CompareTo("LHC13b2") == 0 || // MC DPMJET, wrong energy, anchor LHC13b
2090 periodName.CompareTo("LHC13b2_plus") == 0 || // MC DPMJET, weighted to number event per run, anchor LHC13b
2091 periodName.CompareTo("LHC13c1_bis") == 0 || // MC AMPT fast generation, pT hardbin, anchor ?
2092 periodName.CompareTo("LHC13c1") == 0 || // MC AMPT fast generation, anchor ?
2093 periodName.CompareTo("LHC13b1") == 0 || // MC DPMJET, fragments, with fixed label 0, anchor LHC12g
2094 periodName.CompareTo("LHC12g4b_fix") == 0 || // MC DPMJET, with fixed label 0, anchor LHC12g
2095 periodName.CompareTo("LHC12g1_fix") == 0 || // MC ?, with fixed label 0, anchor LHC12g
2096 periodName.CompareTo("LHC12g4c") == 0 || // MC DPMJET, shifted vertex runs, anchor LHC12g
2097 periodName.CompareTo("LHC12h6") == 0 || // MC muon cocktail, anchor LHC12g
2098 periodName.CompareTo("LHC12g4b") == 0 || // MC DPMJET 3rd iteration, anchor LHC12g
2099 periodName.CompareTo("LHC12g4a") == 0 || // MC DPMJET improved, anchor LHC12g
2100 periodName.CompareTo("LHC12g4") == 0 || // MC DPMJET, anchor LHC12g
2101 periodName.CompareTo("LHC12g5") == 0 || // MC PHOJET, anchor LHC12g
2102 periodName.CompareTo("LHC12g2") == 0 || // MC Starlight background, anchor LHC12g
2103 periodName.CompareTo("LHC12g1") == 0 ) // MC ?, anchor LHC12g
2104 {
2105 printf(" Gamma Conversion Cuts %s :: pPb Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),-0.465);
2106 SetEtaShift(-0.465);
2107 }
2108 else if(periodName.CompareTo("LHC13f") == 0 ||
2109 periodName.CompareTo("LHC13c6b") == 0 ||// MC Jpsi -> mumu, anchor LHC13f
2110 periodName.CompareTo("LHC13c5") == 0 || //MC Starlight, gamma gamma UPC muon, anchor LHC13f
2111 periodName.CompareTo("LHC13c4") == 0 )//MC Starlight, coherent JPsi, UPC muon, anchor LHC13f
2112 {
2113 printf(" Gamma Conversion Cuts %s :: Pbp Run doing Eta Shift of %f \n\n",(GetCutNumber()).Data(),0.465);
2114 SetEtaShift(+0.465);
2115 }
2116 else printf(" Gamma Conversion Cuts %s :: Automatic Eta Shift requested but Period is not known -> No Shift \n\n",(GetCutNumber()).Data());
2117}
2118
dc729816 2119//________________________________________________________________________
2120AliEmcalTriggerPatchInfo* AliConvEventCuts::GetMainTriggerPatch()
2121{
2122 //get main trigger match; if not known yet, look for it and cache
2123
2124 if (fMainTriggerPatchEMCAL)
2125 return fMainTriggerPatchEMCAL;
2126
2127 if (!fTriggerPatchInfo) {
2128 AliError(Form("%s: fTriggerPatchInfo not available",GetName()));
2129 return 0;
2130 }
2131
2132 //number of patches in event
2133 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2134
2135 //extract main trigger patch
2136 AliEmcalTriggerPatchInfo *patch;
2137 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2138 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2139 if (patch->IsMainTrigger()) {
2140 fMainTriggerPatchEMCAL = patch;
2141 break;
2142 }
2143 }
2144
2145 return fMainTriggerPatchEMCAL;
2146}
2147
2148
2149//________________________________________________________________________
2150void AliConvEventCuts::InitializeEMCALTrigger(AliVEvent *fInputEvent)
2151{
2152// cout << "entered EMCAL trigger initialization" << endl;
2153
2154 // Init the analysis.
2155 if (fCaloTriggersName.IsNull()){
2156 if (fInputEvent->IsA()==AliESDEvent::Class()){
2157 fCaloTriggersName = "EMCALTrigger";
2158 } else {
2159 fCaloTriggersName = "emcalTrigger";
2160 }
2161 }
2162
2163 if (!fCaloTriggersName.IsNull() && !fCaloTriggers) {
2164 fCaloTriggers = dynamic_cast<AliVCaloTrigger*>(fInputEvent->FindListObject(fCaloTriggersName));
2165 if (!fCaloTriggers) {
2166 AliError(Form("%s: Could not retrieve calo triggers %s!", GetName(), fCaloTriggersName.Data()));
2167 return;
2168 }
2169 }
2170
2171 if (fCaloTriggerPatchInfoName.IsNull()){
2172 if (fInputEvent->IsA()==AliESDEvent::Class()){
2173 fCaloTriggerPatchInfoName = "EmcalTriggers";
2174 } else {
2175 fCaloTriggerPatchInfoName = "EmcalTriggers";
2176 }
2177 }
2178
2179 if (!fCaloTriggerPatchInfoName.IsNull() && !fTriggerPatchInfo) {
2180 fTriggerPatchInfo = GetArrayFromEvent(fInputEvent, fCaloTriggerPatchInfoName.Data(), "AliEmcalTriggerPatchInfo");
2181 if (!fTriggerPatchInfo) {
2182 AliError(Form("%s: Could not retrieve calo trigger patch info %s!", GetName(), fCaloTriggerPatchInfoName.Data()));
2183 return;
2184 }
2185
2186 }
2187
2188 fEMCALTrigInitialized = kTRUE;
2189}
2190
2191//________________________________________________________________________
2192ULong_t AliConvEventCuts::GetTriggerList(){
2193 if (!fTriggerPatchInfo)
2194 return 0;
2195 //number of patches in event
2196 Int_t nPatch = fTriggerPatchInfo->GetEntries();
2197
2198 //loop over patches to define trigger type of event
2199 Int_t nG1 = 0;
2200 Int_t nG2 = 0;
2201 Int_t nJ1 = 0;
2202 Int_t nJ2 = 0;
2203 Int_t nL0 = 0;
2204 AliEmcalTriggerPatchInfo *patch;
2205 for (Int_t iPatch = 0; iPatch < nPatch; iPatch++) {
2206 patch = (AliEmcalTriggerPatchInfo*)fTriggerPatchInfo->At( iPatch );
2207 if (patch->IsGammaHigh()) nG1++;
2208 if (patch->IsGammaLow()) nG2++;
2209 if (patch->IsJetHigh()) nJ1++;
2210 if (patch->IsJetLow()) nJ2++;
2211 if (patch->IsLevel0()) nL0++;
2212 }
2213
2214// AliDebug(2, "Patch summary: ");
2215// AliDebug(2, Form("Number of patches: %d", nPatch));
2216// AliDebug(2, Form("Level0: [%d]" ,nL0));
2217// AliDebug(2, Form("Jet: low[%d], high[%d]" ,nJ2, nJ1));
2218// AliDebug(2, Form("Gamma: low[%d], high[%d]" ,nG2, nG1));
2219
2220// if (nPatch > 0){
2221// cout << Form("Number of patches: %d", nPatch) << endl;
2222// cout << Form("Level0: [%d]" ,nL0) << endl;
2223// cout << Form("Jet: low[%d], high[%d]" ,nJ2, nJ1) << endl;
2224// cout << Form("Gamma: low[%d], high[%d]" ,nG2, nG1) << endl;
2225// }
2226
2227 ULong_t triggers(0);
2228 if (nG1>0)
2229 SETBIT(triggers, kG1);
2230 if (nG2>0)
2231 SETBIT(triggers, kG2);
2232 if (nJ1>0)
2233 SETBIT(triggers, kJ1);
2234 if (nJ2>0)
2235 SETBIT(triggers, kJ2);
2236 if (nL0>0)
2237 SETBIT(triggers, kL0);
2238 return triggers;
2239}
2240
2241//________________________________________________________________________
2242Bool_t AliConvEventCuts::HasTriggerType(TriggerTypeEMCAL t){
2243 // Check if event has a given trigger type
2244 if(t == kND){
2245 return fTriggersEMCAL == 0;
2246 }
2247 return TESTBIT(fTriggersEMCAL, int(t));
2248}
2249
2250
2251//________________________________________________________________________
2252TClonesArray *AliConvEventCuts::GetArrayFromEvent(AliVEvent* fInputEvent, const char *name, const char *clname)
2253{
2254 // Get array from event.
2255
2256 TClonesArray *arr = 0;
2257 TString sname(name);
2258 if (!sname.IsNull()) {
2259 arr = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(sname));
2260 if (!arr) {
2261 AliWarning(Form("%s: Could not retrieve array with name %s!", GetName(), name));
2262 return 0;
2263 }
2264 } else {
2265 return 0;
2266 }
2267
2268 if (!clname)
2269 return arr;
2270
2271 TString objname(arr->GetClass()->GetName());
2272 TClass cls(objname);
2273 if (!cls.InheritsFrom(clname)) {
2274 AliWarning(Form("%s: Objects of type %s in %s are not inherited from %s!",
2275 GetName(), cls.GetName(), name, clname));
2276 return 0;
2277 }
2278 return arr;
2279}