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