2 /**************************************************************************
3 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5 * Author: The ALICE Off-line Project. *
6 * Contributors are mentioned in the code where appropriate. *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
19 //-----------------------------------------------------------------------------
20 /// \class AliAnalysisTaskNorm
21 /// Analysis task for muon trigger normalization
22 /// The output is a list of histograms and collections of counters.
23 /// The macro class can run on AODs or ESDs.
25 /// \author Cynthia Hadjidakis
26 //-----------------------------------------------------------------------------
28 #include "Riostream.h"
35 #include "AliVEvent.h"
38 #include "AliAODEvent.h"
39 #include "AliESDEvent.h"
40 #include "AliInputEventHandler.h"
41 #include "AliCentrality.h"
42 #include "AliAODTracklets.h"
43 #include "AliCounterCollection.h"
44 #include "AliTriggerConfiguration.h"
47 #include "AliAnalysisManager.h"
48 #include "AliAnalysisUtils.h"
51 #include "AliMuonEventCuts.h"
54 #include "AliAnalysisTriggerScalers.h"
56 #include "AliAnalysisTaskNorm.h"
61 ClassImp(AliAnalysisTaskNorm)
63 //________________________________________________________________________
64 AliAnalysisTaskNorm::AliAnalysisTaskNorm(const char *name) // All data members should be initialised here
65 : AliAnalysisTaskSE(name),
74 fMuonEventCuts(new AliMuonEventCuts("stdEventCuts","stdEventCuts")),
84 // Define input and output slots here (never in the dummy constructor)
85 // Input slot #0 works with a TChain - it is connected to the default input container
86 DefineInput(0, TChain::Class());
87 // Output slot #1 writes into a AliCounterCollection
88 DefineOutput(1, AliCounterCollection::Class());
89 // Output slot #2 writes into a AliCounterCollection
90 DefineOutput(2, AliCounterCollection::Class());
91 // Output slot #3 writes into a TObjArray
92 DefineOutput(3, TObjArray::Class());
93 // Output slot #4 writes into a TObjArray
94 DefineOutput(4, TObjArray::Class());
95 // Output slot #5 writes into a TObjArray
96 DefineOutput(5, TObjArray::Class());
100 //_____________________________________________________________________________
101 AliAnalysisTaskNorm::~AliAnalysisTaskNorm()
103 // Destructor. Clean-up the output list, but not the histograms that are put inside
104 // (the list is owner and will clean-up these histograms). Protect in PROOF case.
105 if ( !AliAnalysisManager::GetAnalysisManager()->IsProofMode() ) {
106 if (fEventCounters) delete fEventCounters;
107 if (fRunCounters) delete fRunCounters;
108 if (fListVertex) delete fListVertex;
109 if (fListV0A) delete fListV0A;
110 if (fListZN) delete fListZN;
113 if (fSCentEst) delete fSCentEst;
114 if (fSCentBin) delete fSCentBin;
115 if (fSTrackletsBin) delete fSTrackletsBin;
116 if (fSV0AMultBin) delete fSV0AMultBin;
118 delete fMuonEventCuts;
121 //_____________________________________________________________________________
122 void AliAnalysisTaskNorm::UserCreateOutputObjects()
125 //initialize centrality bins and estimators
126 TString centEst[] = {"CL1","V0A","ZN","any"};//,"V0C","ZNA","ZNC"};//,"ZNA","ZNC","ZPA","ZPC"};
127 Int_t nCentEst = sizeof(centEst)/sizeof(centEst[0]);
128 TString listOfCentEst = "";
130 fSCentEst = new TObjArray(nCentEst);
131 fSCentEst->SetOwner(kTRUE);
132 for (Int_t iCentEst = 0; iCentEst < nCentEst; iCentEst++) {
133 TObjString *obj = new TObjString(centEst[iCentEst].Data());
134 fSCentEst->AddAt(obj,iCentEst);
135 listOfCentEst += Form("%s",centEst[iCentEst].Data());
136 if ( iCentEst < nCentEst - 1 ) listOfCentEst += Form("/");
139 Int_t centTabBin[] = {0,1,5,10,20,40,60,80,100};
140 Int_t nCentBin = sizeof(centTabBin)/sizeof(centTabBin[0]);
142 fCentBin.Set(nCentBin+1, centTabBin);
144 fSCentBin = new TObjArray(nCentBin);
145 fSCentBin->SetOwner(kTRUE);
147 Int_t min = 0 , max = 0;
148 for ( Int_t iBin = 0; iBin < nCentBin+1; iBin++ ) {
149 max = (Int_t)centTabBin[iBin];
151 TObjString *sobj = new TObjString(Form("%d-%d",min,max));
152 fSCentBin->AddAt(sobj,iBin-1);
154 min = (Int_t) centTabBin[iBin];
157 TString listOfCentBin = "";
158 for (Int_t iBin = 0; iBin < nCentBin; iBin++) {
159 TObjString *obj = (TObjString*) fSCentBin->At(iBin);
161 listOfCentBin += Form("%s/",(obj->GetString()).Data());
164 listOfCentBin += "other/";
165 listOfCentBin += "any";
168 // Int_t trTabBin[] = {0,1,30,42,56,72,300};
169 Int_t trTabBin[] = {0,1,15,30,35,40,45,50,60,70,100,300};
170 Int_t nTrBin = sizeof(trTabBin)/sizeof(trTabBin[0]);
172 fTrackletsBin.Set(nTrBin+1,trTabBin);
174 fSTrackletsBin = new TObjArray(nTrBin);
175 fSTrackletsBin->SetOwner(kTRUE);
178 for ( Int_t iBin = 0; iBin < nTrBin+1; iBin++ ) {
179 max = trTabBin[iBin];
181 TObjString *sobj = new TObjString(Form("%d-%d",min,max));
182 fSTrackletsBin->AddAt(sobj,iBin-1);
184 min = trTabBin[iBin];
186 TString listOfTrackletsBin = "";
187 for (Int_t iBin = 0; iBin < nTrBin; iBin++) {
188 TObjString *obj = (TObjString*) fSTrackletsBin->At(iBin);
190 listOfTrackletsBin += Form("%s/",(obj->GetString()).Data());
193 listOfTrackletsBin += "other";
195 // printf("%s\n",listOfTrackletsBin.Data());
196 Int_t v0AMultTabBin[] = {0,15,40,80,140,200,280,400,500,700};
197 Int_t nV0AMultBin = sizeof(v0AMultTabBin)/sizeof(v0AMultTabBin[0]);
199 fV0AMultBin.Set(nV0AMultBin+1,v0AMultTabBin);
201 fSV0AMultBin = new TObjArray(nV0AMultBin);
202 fSV0AMultBin->SetOwner(kTRUE);
205 for ( Int_t iBin = 0; iBin < nV0AMultBin+1; iBin++ ) {
206 max = v0AMultTabBin[iBin];
208 TObjString *sobj = new TObjString(Form("%d-%d",min,max));
209 fSV0AMultBin->AddAt(sobj,iBin-1);
211 min = v0AMultTabBin[iBin];
213 TString listOfV0AMultBin = "";
214 for (Int_t iBin = 0; iBin < nV0AMultBin; iBin++) {
215 TObjString *obj = (TObjString*) fSV0AMultBin->At(iBin);
217 listOfV0AMultBin += Form("%s/",(obj->GetString()).Data());
220 listOfV0AMultBin += "other";
222 // printf("%s\n",listOfV0AMultBin.Data());
224 //create event counters
225 fEventCounters = new AliCounterCollection("eventCounters");
226 fEventCounters->AddRubric("run",1000000);
227 fEventCounters->AddRubric("trigger",1000000);
228 fEventCounters->AddRubric("norm", "MBinMB/MSLinMSL/MULinMUL/MSLinMB/MULinMSL/MULinMB/other/any");
229 fEventCounters->AddRubric("physsel", "yes/no");
230 fEventCounters->AddRubric("isspdpu", "n3d6/n3d8/n4d6/n4d8/n5d6/n5d8/n6d6/n6d8/multbinstd/mv/any");
231 // fEventCounters->AddRubric("ntracklets",listOfTrackletsBin.Data());
232 //fEventCounters->AddRubric("v0amult",listOfV0AMultBin.Data());
233 // fEventCounters->AddRubric("outofbunchpileup", "yes/no");
234 // fEventCounters->AddRubric("spdpu", "yes/no");
235 fEventCounters->AddRubric("centest",listOfCentEst.Data());
236 fEventCounters->AddRubric("centbin", listOfCentBin.Data());
237 fEventCounters->AddRubric("vertex", "yes/no");
238 fEventCounters->AddRubric("vertexcut", "abszb10/zbm10/zap10");
240 fEventCounters->Init();
242 //create run counters
243 fRunCounters = new AliCounterCollection("runCounters");
244 fRunCounters->AddRubric("run",1000000);
245 // fRunCounters->AddRubric("L0b",1000000);
246 fRunCounters->AddRubric("l0brate",1000000);
247 fRunCounters->AddRubric("l2a",1000000);
248 fRunCounters->AddRubric("ncoll",1000000);
249 fRunCounters->AddRubric("trigger",1000000);
251 fRunCounters->Init();
253 //histograms for vertex
254 fListVertex = new TObjArray(2000);
255 fListVertex->SetOwner();
258 Int_t nzbin = 1000, ncbin=150;
261 TH1F* hVZMB = new TH1F("hVZMB"," primary vertex z (cm) for MB trigger",nzbin,-zrange,zrange);
262 fListVertex->AddAtAndExpand(hVZMB, kVZMB);
263 TH1F* hPileupVZMB = new TH1F("hPileupVZMB"," pile-up vertices z (cm) for MB trigger",nzbin,-zrange,zrange);
264 fListVertex->AddAtAndExpand(hPileupVZMB, kPileupVZMB);
265 TH1F* hVnMB = new TH1F("hVnMB"," number of vertex contributors for MB trigger",ncbin,0,ncbin);
266 fListVertex->AddAtAndExpand(hVnMB, kVnCMB);
267 TH1F* hNPileupMB = new TH1F("hNPileupMB"," number of pileup vertices for MB trigger",npileup,0,npileup);
268 fListVertex->AddAtAndExpand(hNPileupMB, kNPileupMB);
269 TH1F* hPileupVnMB = new TH1F("hPileupVnMB"," number of pileup vertices contributors for MB trigger",ncbin,0,ncbin);
270 fListVertex->AddAtAndExpand(hPileupVnMB, kPileupnCMB);
271 TH1F* hDeltaZMB = new TH1F("hDeltaZMB"," distance between primary vertex z and secondary vertices (cm) for MB trigger",nzbin,-zrange,zrange);
272 fListVertex->AddAtAndExpand(hDeltaZMB, kDeltaZMB);
274 TH1F* hVZMUL = new TH1F("hVZMUL"," primary vertex z (cm) for MUL trigger",nzbin,-zrange,zrange);
275 fListVertex->AddAtAndExpand(hVZMUL, kVZMUL);
276 TH1F* hPileupVZMUL = new TH1F("hPileupVZMUL"," pile-up vertices z (cm) for MUL trigger",nzbin,-zrange,zrange);
277 fListVertex->AddAtAndExpand(hPileupVZMUL, kPileupVZMUL);
278 TH1F* hVnMUL = new TH1F("hVnMUL"," number of contributors for MUL trigger",ncbin,0,ncbin);
279 fListVertex->AddAtAndExpand(hVnMUL, kVnCMUL);
280 TH1F* hNPileupMUL = new TH1F("hNPileupMUL"," number of pileup vertices for MUL trigger",npileup,0,npileup);
281 fListVertex->AddAtAndExpand(hNPileupMUL, kNPileupMUL);
282 TH1F* hPileupVnMUL = new TH1F("hPileupVnMUL"," number of pileup vertices contributors for MUL trigger",ncbin,0,ncbin);
283 fListVertex->AddAtAndExpand(hPileupVnMUL, kPileupnCMUL);
284 TH1F* hDeltaZMUL = new TH1F("hDeltaZMUL"," distance between primary vertex z and secondary vertices (cm) for MUL trigger",nzbin,-zrange,zrange);
285 fListVertex->AddAtAndExpand(hDeltaZMUL, kDeltaZMUL);
287 // histograms for V0A multiplicty
288 fListV0A = new TObjArray(2000);
289 fListV0A->SetOwner();
292 Float_t v0AMin = 0 , v0AMax = 700;
293 Float_t centTabBin2[] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105};
294 Int_t nCentBin2 = sizeof(centTabBin2)/sizeof(centTabBin2[0]);
296 Int_t nV0ACentBin = 105;
297 Float_t v0ACentMin = 0, v0ACentMax = 105;
299 TH1F* hV0AMultMB = new TH1F("hV0AMultMB"," V0A mutliplicity for CINT7 trigger",nV0Abin,v0AMin,v0AMax);
300 fListV0A->AddAtAndExpand(hV0AMultMB, kV0AMB);
301 TH1F* hV0AMultMUL = new TH1F("hV0AMultMUL"," V0A mutliplicity for CMUL7 trigger",nV0Abin,v0AMin,v0AMax);
302 fListV0A->AddAtAndExpand(hV0AMultMUL, kV0AMUL);
303 TH1F* hV0ACentMB = new TH1F("hV0ACentMB"," V0A centrality for CINT7 trigger",nV0ACentBin,v0ACentMin,v0ACentMax);
304 fListV0A->AddAtAndExpand(hV0ACentMB, kV0ACentMB);
305 TH1F* hV0ACentMUL = new TH1F("hV0ACentMUL"," V0A centrality for CMUL7 trigger",nV0ACentBin,v0ACentMin,v0ACentMax);
306 fListV0A->AddAtAndExpand(hV0ACentMUL, kV0ACentMUL);
307 TH2F* hV0AMultvsCentMB = new TH2F("hV0AMultvsCentMB"," V0A centrality vs multiplicity for CINT7 trigger",nV0Abin,v0AMin,v0AMax,200,0,200);
308 fListV0A->AddAtAndExpand(hV0AMultvsCentMB, kV0AMultvsCentMB);
309 TH2F* hV0ACentvsV0CCentMUL = new TH2F("hV0ACentvsV0CCentMUL"," V0A vs V0C centrality for CMUL7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//,centMin,centMax,nCent,centMin,centMax);
310 hV0ACentvsV0CCentMUL->SetXTitle("V0A Event Multiplicity");
311 hV0ACentvsV0CCentMUL->SetYTitle("V0C Event Multiplicity");
312 fListV0A->AddAtAndExpand(hV0ACentvsV0CCentMUL, kV0ACentvsV0CCentMUL);
313 TH2F* hV0ACentvsV0CCentMB = new TH2F("hV0ACentvsV0CCentMB"," V0A vs V0C centrality for CINT7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//,centMin,centMax,nCent,centMin,centMax);
314 hV0ACentvsV0CCentMB->SetXTitle("V0A Event Multiplicity");
315 hV0ACentvsV0CCentMB->SetYTitle("V0C Event Multiplicity");
316 fListV0A->AddAtAndExpand(hV0ACentvsV0CCentMB, kV0ACentvsV0CCentMB);
317 TH2F* hV0ACentvsCL1CentMUL = new TH2F("hV0ACentvsCL1CentMUL"," V0A vs CL1 centrality for CMUL7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//nCent,centMin,centMax,nCent,centMin,centMax);
318 hV0ACentvsCL1CentMUL->SetXTitle("V0A Event Multiplicity");
319 hV0ACentvsCL1CentMUL->SetYTitle("CL1 Event Multiplicity");
320 fListV0A->AddAtAndExpand(hV0ACentvsCL1CentMUL, kV0ACentvsCL1CentMUL);
321 TH2F* hV0ACentvsCL1CentMB = new TH2F("hV0ACentvsCL1CentMB"," V0A vs CL1 centrality for CINT7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//nCent,centMin,centMax,nCent,centMin,centMax);
322 hV0ACentvsCL1CentMB->SetXTitle("V0A Event Multiplicity");
323 hV0ACentvsCL1CentMB->SetYTitle("CL1 Event Multiplicity");
324 fListV0A->AddAtAndExpand(hV0ACentvsCL1CentMB, kV0ACentvsCL1CentMB);
325 TH2F* hV0CCentvsCL1CentMB = new TH2F("hV0CCentvsCL1CentMB"," V0C vs CL1 centrality for CINT7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//nCent,centMin,centMax,nCent,centMin,centMax);
326 hV0CCentvsCL1CentMB->SetXTitle("V0C Event Multiplicity");
327 hV0CCentvsCL1CentMB->SetYTitle("CL1 Event Multiplicity");
328 fListV0A->AddAtAndExpand(hV0CCentvsCL1CentMB, kV0CCentvsCL1CentMB);
331 // histograms for ZN multiplicity
332 fListZN = new TObjArray(2000);
336 Float_t zNMin = -100 , zNMax = 2000;
337 Int_t nZNCentBin = 105;
338 Float_t zNCentMin = 0, zNCentMax = 105;
340 TH1F* hZNMultMB = new TH1F("hZNMultMB"," ZN mutliplicity for CINT7 trigger",nZNbin,zNMin,zNMax);
341 fListZN->AddAtAndExpand(hZNMultMB, kZNMB);
342 TH1F* hZNMultMUL = new TH1F("hZNMultMUL"," ZN mutliplicity for CMUL7 trigger",nZNbin,zNMin,zNMax);
343 fListZN->AddAtAndExpand(hZNMultMUL, kZNMUL);
344 TH1F* hZNCentMB = new TH1F("hZNCentMB"," ZN centrality distribution for CINT7 trigger",nZNCentBin,zNCentMin,zNCentMax);
345 fListZN->AddAtAndExpand(hZNCentMB, kZNCentMB);
346 TH1F* hZNCentMUL = new TH1F("hZNCentMUL"," ZN centrality distribution for CMUL7 trigger",nZNCentBin,zNCentMin,zNCentMax);
347 fListZN->AddAtAndExpand(hZNCentMUL, kZNCentMUL);
348 TH2F* hZNMultvsCentMB = new TH2F("hZNMultvsCentMB"," ZN centrality vs multiplicity for CINT7 trigger",nZNbin,zNMin,zNMax,250,-50,200);
349 fListZN->AddAtAndExpand(hZNMultvsCentMB, kZNMultvsCentMB);
352 PostData(1,fEventCounters);
353 PostData(2,fRunCounters);
354 PostData(3,fListVertex);
355 PostData(4,fListV0A);
360 //________________________________________________________________________
361 Bool_t AliAnalysisTaskNorm::IsAODEvent ( const AliVEvent* event )
363 /// Check if event is from ESD or AOD
364 return ( event->IsA() == AliAODEvent::Class() );
367 //________________________________________________________________________
368 TString AliAnalysisTaskNorm::GetFiredTriggerClasses ( const AliVEvent* event )
370 /// Check if track is from ESD or AOD
371 return ( IsAODEvent(event) ) ? static_cast<const AliAODEvent*>(event)->GetFiredTriggerClasses() : static_cast<const AliESDEvent*>(event)->GetFiredTriggerClasses();
374 //_____________________________________________________________________________
375 void AliAnalysisTaskNorm::UserExec(Option_t *)
378 Bool_t keepEvent = fMuonEventCuts->IsSelected(fInputHandler);
379 TString sListOfTrig = GetFiredTriggerClasses(InputEvent());
381 if ( DebugLevel() > 0 ) {
382 AliInfo(Form("keepEvent %d - isEsd=%d - isMC=%d - beam conf = %s List of trigger=%s",keepEvent,fIsESD,fIsMC,fBeamConf.Data(),sListOfTrig.Data()));
383 fMuonEventCuts->Print();
386 if(!keepEvent) return;
388 const TObjArray* selectedTrigClasses = fMuonEventCuts->GetSelectedTrigClassesInEvent(InputEvent());
390 AliAODEvent *aod = 0;
391 AliESDEvent *esd = 0;
393 aod = static_cast<AliAODEvent *>(InputEvent());
396 esd = dynamic_cast<AliESDEvent *>(InputEvent());
399 AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
403 AliCentrality *centrality = ( fIsESD ) ? esd->GetCentrality() : aod->GetCentrality();
405 //Get list of normalization factor
406 TList* normFactorList = BuildListOfNormFactor(selectedTrigClasses);
407 //Get list of all triggers
408 TList* triggerList = BuildListOfTrigger(selectedTrigClasses);
409 //Get list of all centrality estimators + bins
410 TList* centralityList = BuildListOfCentrality(centrality);
411 //Get list of spd pile-up cases
412 TList* spdPileUpList = BuildListOfPileUp((AliVEvent*)InputEvent());
413 //Get list of ntracklets
414 TList* trackletsList = BuildListOfTracklets((AliVEvent*)InputEvent());
415 //Get list of V0A multiplicity bin
416 TList* v0AMultList = BuildListOfV0AMult((AliVEvent*)InputEvent());
418 if ( DebugLevel() > 0 ){
420 cout<<"Trigger List"<<endl;
421 triggerList->Print();
422 cout<<"Norm factor List"<<endl;
423 normFactorList->Print();
424 cout<<"Centrality List"<<endl;
425 centralityList->Print();
426 cout<<"Spd Pile-Up List"<<endl;
427 spdPileUpList->Print();
428 cout<<"Tracklet List"<<endl;
429 trackletsList->Print();
430 cout<<"V0AMult List"<<endl;
431 v0AMultList->Print();
432 cout<<"Trigger Mask "<<(InputEvent())->GetTriggerMask()<<endl;
436 Int_t runNr = ( (AliVEvent*) InputEvent() )->GetRunNumber();
439 Bool_t physSel = kFALSE;
440 UInt_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected());
441 if (isSelected) physSel = kTRUE;
443 //Get out-of-bunch pile-up
444 Bool_t outofbcpileup = kFALSE;
445 AliAnalysisUtils analysisUtils;
446 outofbcpileup = analysisUtils.IsOutOfBunchPileUp((AliVEvent*)InputEvent());
449 Bool_t isVertex = kFALSE;
450 TString sVertexCut = "";
451 Int_t nVertexContributors = (((AliVEvent*) InputEvent() )->GetPrimaryVertex())->GetNContributors();
452 if (nVertexContributors > 0) isVertex = kTRUE;
453 Double_t zVertex = (((AliVEvent*) InputEvent() )->GetPrimaryVertex())->GetZ();
454 if (TMath::Abs(zVertex) <= 10) sVertexCut = "vertexcut:abszb10";
455 else if (zVertex < -10) sVertexCut = "vertexcut:zbm10";
456 else if (zVertex > +10) sVertexCut = "vertexcut:zap10";
459 //Fill some histograms for the vertex (primary and secondary)
460 if (physSel && isVertex && sVertexCut.Contains("abszb10") ) FillHistoPileUpVertices((AliVEvent*)InputEvent(),selectedTrigClasses);
462 //Fill some control histograms for the multiplicity
463 if (physSel) FillHistoMult((AliVEvent*)InputEvent(),selectedTrigClasses);
465 //Fill event counters
466 // FillEventCounters(runNr,triggerList,normFactorList,physSel,t0pileup,bgID);
467 FillEventCounters(runNr,triggerList,normFactorList,centralityList,spdPileUpList,trackletsList,v0AMultList,physSel,isVertex,sVertexCut,outofbcpileup);
470 //DO NOT clean selectedTrigClasses, it is a constant
471 delete normFactorList;
473 delete centralityList;
474 delete spdPileUpList;
475 delete trackletsList;
478 PostData(1, fEventCounters);
479 PostData(2, fRunCounters);
480 PostData(3, fListVertex);
481 PostData(4, fListV0A);
482 PostData(5, fListZN);
489 //_____________________________________________________________________________
490 void AliAnalysisTaskNorm::Terminate(Option_t *)
493 fEventCounters = dynamic_cast<AliCounterCollection *>(GetOutputData(1));
494 if (!fEventCounters) { AliError("Could not retrieve AliCounterCollection* fEventCounters"); return; }
496 fRunCounters = dynamic_cast<AliCounterCollection *>(GetOutputData(2));
497 if (!fRunCounters) { AliError("Could not retrieve AliCounterCollection* fRunCounters"); return; }
499 fListVertex = dynamic_cast<TObjArray *>(GetOutputData(3));
500 if (!fListVertex) { AliError("Could not retrieve TObjArray* fListVertex"); return; }
502 fListV0A = dynamic_cast<TObjArray *>(GetOutputData(4));
503 if (!fListV0A) { AliError("Could not retrieve TObjArray* fListV0A"); return; }
505 fListZN = dynamic_cast<TObjArray *>(GetOutputData(5));
506 if (!fListZN) { AliError("Could not retrieve TObjArray* fListZN"); return; }
512 //_____________________________________________________________________________
513 void AliAnalysisTaskNorm::Print(Option_t *) const
516 cout << ClassName() << " - " << GetName() << " - " << fIsESD <<" - "<< fIsMC << endl;
521 //_____________________________________________________________________________
522 void AliAnalysisTaskNorm::Print(TObjArray *obj) const
527 for ( Int_t itrig=0; itrig<obj->GetEntries(); ++itrig ) {
528 TString sName = ((TObjString*)obj->At(itrig))->GetString();
535 //________________________________________________________________________
536 void AliAnalysisTaskNorm::FillHistoPileUpVertices(const AliVEvent *event, const TObjArray *trigClass)
539 Bool_t isMB = kFALSE;
540 Bool_t isMUL = kFALSE;
542 for ( Int_t itrig = 0; itrig < trigClass->GetEntries(); itrig++ ) {
543 TString sTrigClassName = ((TObjString*)trigClass->At(itrig))->GetString();
544 if ( sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD") ) isMB = kTRUE;
545 if ( sTrigClassName.Contains("CMUL7-B-NOPF-MUON") || sTrigClassName.Contains("CMUL7-B-NOPF-ALLNOTRD") ) isMUL = kTRUE;
548 // fill histo related to pileup vertices
549 const AliAODEvent *aod = 0;
550 const AliESDEvent *esd = 0;
553 aod = static_cast<const AliAODEvent *>(event);
556 esd = dynamic_cast<const AliESDEvent *>(event);
559 AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
567 AliVVertex *primaryVertex = (fIsESD) ? (AliVVertex*) esd->GetPrimaryVertexSPD() : (AliVVertex*) aod->GetPrimaryVertexSPD();
570 zPV = primaryVertex->GetZ();
571 nContrPV = primaryVertex->GetNContributors();
572 //printf("primary vertex: z= %.2f ncontr = %d\n",zPV,nContrPV);
575 ((TH1F*)fListVertex->UncheckedAt(kVZMB))->Fill(zPV);
576 ((TH1F*)fListVertex->UncheckedAt(kVnCMB))->Fill(nContrPV);
579 ((TH1F*)fListVertex->UncheckedAt(kVZMUL))->Fill(zPV);
580 ((TH1F*)fListVertex->UncheckedAt(kVnCMUL))->Fill(nContrPV);
584 Int_t nPileUpVertices = (fIsESD) ? esd->GetNumberOfPileupVerticesSPD() : aod->GetNumberOfPileupVerticesSPD();
585 AliVVertex *pileupVertex = 0;
587 if(isMB) ((TH1F*)fListVertex->UncheckedAt(kNPileupMB))->Fill(nPileUpVertices);
588 if(isMUL) ((TH1F*)fListVertex->UncheckedAt(kNPileupMUL))->Fill(nPileUpVertices);
593 for (Int_t iV = 0; iV < nPileUpVertices; iV++) {
596 pileupVertex = (fIsESD) ? (AliVVertex*) esd->GetPileupVertexSPD(iV) : (AliVVertex*) aod->GetPileupVertexSPD(iV);
597 if (!pileupVertex) continue;
598 zV = pileupVertex->GetZ();
599 nContr = pileupVertex->GetNContributors();
600 //printf("pile-up vertex nr %d/%d: z= %.2f ncontr = %d\n",iV,nPileUpVertices,zV,nContr);
602 ((TH1F*)fListVertex->UncheckedAt(kPileupVZMB))->Fill(zV);
603 ((TH1F*)fListVertex->UncheckedAt(kPileupnCMB))->Fill(nContr);
604 ((TH1F*)fListVertex->UncheckedAt(kDeltaZMB))->Fill(zPV-zV);
607 ((TH1F*)fListVertex->UncheckedAt(kPileupVZMUL))->Fill(zV);
608 ((TH1F*)fListVertex->UncheckedAt(kPileupnCMUL))->Fill(nContr);
609 ((TH1F*)fListVertex->UncheckedAt(kDeltaZMUL))->Fill(zPV-zV);
616 //________________________________________________________________________
617 void AliAnalysisTaskNorm::FillHistoMult(const AliVEvent *event, const TObjArray *trigClass)
620 Bool_t isMB = kFALSE;
621 Bool_t isMUL = kFALSE;
623 for ( Int_t itrig = 0; itrig < trigClass->GetEntries(); itrig++ ) {
624 TString sTrigClassName = ((TObjString*)trigClass->At(itrig))->GetString();
625 if ( sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD") ) isMB = kTRUE;
626 if ( sTrigClassName.Contains("CMUL7-B-NOPF-MUON") ) isMUL = kTRUE;
629 // fill histo related to V0A multiplicity
630 AliAODEvent *aod = 0;
631 AliESDEvent *esd = 0;
634 aod = static_cast<AliAODEvent *> (const_cast<AliVEvent*> (event) );
637 esd = dynamic_cast<AliESDEvent *> (const_cast<AliVEvent*> (event) );
640 AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
644 AliVVZERO *v0Data = (fIsESD) ? (AliVVZERO*) esd->GetVZEROData() : (AliVVZERO*) aod->GetVZEROData();
645 if ( !v0Data ) return;
648 for (Int_t i = 0 ; i < 32 ; i++) v0AMult += v0Data->GetMultiplicityV0A(i);
650 AliCentrality *centrality = dynamic_cast<AliCentrality*> ( ( fIsESD ) ? esd->GetCentrality() : aod->GetCentrality() );
651 Float_t centVal = centrality->GetCentralityPercentileUnchecked("V0A");
652 Float_t centValV0C = centrality->GetCentralityPercentileUnchecked("V0C");
653 Float_t centValCL1 = centrality->GetCentralityPercentileUnchecked("CL1");
656 ((TH1F*)fListV0A->UncheckedAt(kV0AMB))->Fill(v0AMult);
657 ((TH1F*)fListV0A->UncheckedAt(kV0ACentMB))->Fill(centVal);
658 ((TH2F*)fListV0A->UncheckedAt(kV0AMultvsCentMB))->Fill(v0AMult,centVal);
659 ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsV0CCentMB))->Fill(centVal,centValV0C);
660 ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsCL1CentMB))->Fill(centVal,centValCL1);
661 ((TH2F*)fListV0A->UncheckedAt(kV0CCentvsCL1CentMB))->Fill(centValV0C,centValCL1);
664 ((TH1F*)fListV0A->UncheckedAt(kV0AMUL))->Fill(v0AMult);
665 ((TH1F*)fListV0A->UncheckedAt(kV0ACentMUL))->Fill(centVal);
666 ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsV0CCentMUL))->Fill(centVal,centValV0C);
667 ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsCL1CentMUL))->Fill(centVal,centValCL1);
670 //Fill histo related to ZN multiplicity
671 Double_t znaTower = 0.; // common PMT of ZNA
672 Double_t zncTower = 0.; // common PMT of ZNC
673 Bool_t znaFired = kFALSE;
674 Bool_t zncFired = kFALSE;
677 AliESDZDC *esdZDC = esd->GetESDZDC();
679 for (Int_t j = 0; j < 4; ++j)
680 if (esdZDC->GetZDCTDCData(12,j) != 0)
683 for (Int_t j = 0; j < 4; ++j)
684 if (esdZDC->GetZDCTDCData(10,j) != 0)
687 const Double_t *ZNAtower = esdZDC->GetZN2TowerEnergy();
688 const Double_t *ZNCtower = esdZDC->GetZN1TowerEnergy();
689 if (znaFired) znaTower = ZNAtower[0];
690 if (zncFired) zncTower = ZNCtower[0];
694 AliAODZDC *aodZDC = aod->GetZDCData();
696 //this works only on full AOD
697 const Double_t *ZNAtower = aodZDC->GetZNATowerEnergy();
698 const Double_t *ZNCtower = aodZDC->GetZNCTowerEnergy();
699 znaTower = ZNAtower[0];
700 zncTower = ZNCtower[0];
706 if ( !fBeamConf.CompareTo("p-Pb") ) zNE = znaTower;
710 if ( !fBeamConf.CompareTo("p-Pb") ) centVal = centrality->GetCentralityPercentileUnchecked("ZNA");
711 else centVal = centrality->GetCentralityPercentileUnchecked("ZNC");
713 // AliInfo(Form("ZN energy %.2f centrality %.2f ",zNE,centVal));
716 ((TH1F*)fListZN->UncheckedAt(kZNMB))->Fill(zNE);
717 ((TH1F*)fListZN->UncheckedAt(kZNCentMB))->Fill(centVal);
718 ((TH2F*)fListZN->UncheckedAt(kZNMultvsCentMB))->Fill(zNE,centVal);
721 ((TH1F*)fListZN->UncheckedAt(kZNMUL))->Fill(zNE);
722 ((TH1F*)fListZN->UncheckedAt(kZNCentMUL))->Fill(centVal);
728 //________________________________________________________________________
729 TList* AliAnalysisTaskNorm::BuildListOfPileUp(const AliVEvent *event)
731 /// build the list of different cases of spd pileup (different options)
732 /// returned TList must be deleted by user
734 TList* list = new TList();
738 list->AddLast(new TObjString("isspdpu:any"));
740 //Get SPD pile-up (same bunch pile-up)
741 const AliAODEvent *aod = 0;
742 const AliESDEvent *esd = 0;
745 aod = static_cast<const AliAODEvent *>(event);
748 esd = dynamic_cast<const AliESDEvent *>(event);
751 AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
755 const Int_t nSpdPileUp = 10;
756 Bool_t spdpileup[nSpdPileUp] = {kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE};
757 TString sSpdPileUp[nSpdPileUp] = {"n3d6","n3d8","n4d6","n4d8","n5d6","n5d8","n6d6","n6d8","multbinstd","mv"};
758 spdpileup[0] = ( fIsESD ) ? esd->IsPileupFromSPD(3,0.6,3.,2.,5.) : aod->IsPileupFromSPD(3,0.6,3.,2.,5.);
759 spdpileup[1] = ( fIsESD ) ? esd->IsPileupFromSPD(3,0.8,3.,2.,5.) : aod->IsPileupFromSPD(3,0.8,3.,2.,5.);
760 spdpileup[2] = ( fIsESD ) ? esd->IsPileupFromSPD(4,0.6,3.,2.,5.) : aod->IsPileupFromSPD(4,0.6,3.,2.,5.);
761 spdpileup[3] = ( fIsESD ) ? esd->IsPileupFromSPD(4,0.8,3.,2.,5.) : aod->IsPileupFromSPD(4,0.8,3.,2.,5.);
762 spdpileup[4] = ( fIsESD ) ? esd->IsPileupFromSPD(5,0.6,3.,2.,5.) : aod->IsPileupFromSPD(5,0.6,3.,2.,5.);
763 spdpileup[5] = ( fIsESD ) ? esd->IsPileupFromSPD(5,0.8,3.,2.,5.) : aod->IsPileupFromSPD(5,0.8,3.,2.,5.);
764 spdpileup[6] = ( fIsESD ) ? esd->IsPileupFromSPD(6,0.6,3.,2.,5.) : aod->IsPileupFromSPD(6,0.6,3.,2.,5.);
765 spdpileup[7] = ( fIsESD ) ? esd->IsPileupFromSPD(6,0.8,3.,2.,5.) : aod->IsPileupFromSPD(6,0.8,3.,2.,5.);
766 spdpileup[8] = kFALSE;
767 AliAODTracklets *tracklets = dynamic_cast<AliAODTracklets*> ((fIsESD) ? 0 : aod->GetTracklets());
769 spdpileup[8] = ( fIsESD ) ? esd->IsPileupFromSPDInMultBins() : aod->IsPileupFromSPDInMultBins();
772 AliAnalysisUtils analysis;
773 spdpileup[9] = analysis.IsPileUpMV( const_cast<AliVEvent*> (event) );
775 // local SPDInMultBins function
776 // spdpileup[9] = IsPileupFromSPDInMultBins(event);
778 for ( Int_t iSpdPileUp = 0; iSpdPileUp < nSpdPileUp; iSpdPileUp++ ) {
779 if (spdpileup[iSpdPileUp]) list->AddLast(new TObjString(Form("isspdpu:%s",sSpdPileUp[iSpdPileUp].Data())));
786 //________________________________________________________________________
787 Bool_t AliAnalysisTaskNorm::IsPileupFromSPDInMultBins(const AliVEvent *event) const {
789 const AliAODEvent *aod = 0;
790 const AliESDEvent *esd = 0;
793 aod = static_cast<const AliAODEvent *>(event);
796 esd = dynamic_cast<const AliESDEvent *>(event);
799 AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
803 AliAODTracklets *tracklets = dynamic_cast<AliAODTracklets*> ((fIsESD) ? 0 : aod->GetTracklets());
804 if ( !tracklets) return kFALSE;
806 Int_t nTracklets = (fIsESD) ? 0 : tracklets->GetNumberOfTracklets();
807 if(nTracklets<40) return (fIsESD) ? esd->IsPileupFromSPD(3,0.8) : aod->IsPileupFromSPD(3,0.8);
808 else return (fIsESD) ? esd->IsPileupFromSPD(5,0.8) : aod->IsPileupFromSPD(5,0.8);
812 //________________________________________________________________________
813 TList* AliAnalysisTaskNorm::BuildListOfCentrality(AliCentrality *centrality)
815 /// build the list of centrality bins for each estimator
816 /// returned TList must be deleted by user
818 TList* list = new TList();
822 for ( Int_t iMethod = 0; iMethod < fSCentEst->GetEntriesFast(); iMethod++ ) {
824 TString sMethod = ((TObjString*)fSCentEst->At(iMethod))->GetString();
825 TString sMethodCentrality;
827 if ( !sMethod.CompareTo("any") ) {
828 list->AddLast(new TObjString(Form("centest:any/centbin:any")));
833 if ( !sMethod.CompareTo("ZN") ) {
834 if ( !fBeamConf.CompareTo("p-Pb") ) sMethodCentrality = "ZNA";
835 else sMethodCentrality = "ZNC";
837 else sMethodCentrality = sMethod;
839 Float_t centVal = centrality->GetCentralityPercentileUnchecked( sMethodCentrality.Data() );
840 // if (centVal == 0) centVal = -1; Now centval==0 goes to bin 0-5
841 if ( !sMethod.CompareTo("ZN") && centVal == 101 ) centVal = 100;
844 while (centBin == -1 && index < fCentBin.GetSize()-1 ) {
846 if ( centVal >= 0 && centVal <= fCentBin.At(index) ) centBin = index - 1;
849 if(DebugLevel() > 0) {
851 TString sCentBin = ((TObjString*)fSCentBin->At(centBin))->GetString();
852 printf("test method %s-%s centrality %f bin found %d bin from centrality table %s\n",sMethod.Data(),sMethodCentrality.Data(),centVal,centBin, sCentBin.Data());
855 printf("test method %s centrality %f centbin:other \n",sMethod.Data(),centVal);
859 printf("test method %s centrality %f centbin:other \n",sMethod.Data(),centVal);
860 list->AddLast(new TObjString(Form("centest:%s/centbin:other",sMethod.Data() )));
861 list->AddLast(new TObjString(Form("centest:%s/centbin:any",sMethod.Data())));
864 //Add specific event centrality estimator and bin
865 TString sCentBin = ((TObjString*)fSCentBin->At(centBin))->GetString();
866 list->AddLast(new TObjString(Form("centest:%s/centbin:%s",sMethod.Data(),sCentBin.Data())));
867 list->AddLast(new TObjString(Form("centest:%s/centbin:any",sMethod.Data())));
877 //________________________________________________________________________
878 TList* AliAnalysisTaskNorm::BuildListOfV0AMult(const AliVEvent *event) {
879 /// build the list of V0A multiplicity bins
880 /// returned TList must be deleted by user
882 TList* list = new TList();
885 const AliAODEvent *aod = 0;
886 const AliESDEvent *esd = 0;
889 aod = static_cast<const AliAODEvent *>(event);
892 esd = dynamic_cast<const AliESDEvent *>(event);
895 AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
896 list->AddLast(new TObjString(Form("v0amult:other")));
900 AliVVZERO *v0Data = (fIsESD) ? (AliVVZERO*) esd->GetVZEROData() : (AliVVZERO*) aod->GetVZEROData();
902 list->AddLast(new TObjString(Form("v0amult:other")));
907 for (Int_t i = 0 ; i < 32 ; i++) v0AMult += v0Data->GetMultiplicityV0A(i);
909 Int_t bin = -1, index = -1;
911 while (bin == -1 && index < fV0AMultBin.GetSize()-1 ) {
913 if ( v0AMult >= 0 && v0AMult < fV0AMultBin.At(index) ) bin = index - 1;
916 if(DebugLevel() > 0) {
918 TString sBin = ((TObjString*)fSV0AMultBin->At(bin))->GetString();
919 printf("test v0Amult %.2f bin found %d bin from v0AMult table %s\n",v0AMult,bin, sBin.Data());
922 printf("test v0AMult %.2f no bin\n",v0AMult);
926 list->AddLast(new TObjString(Form("v0amult:other")));
929 //Add specific event centrality estimator and bin
930 TString sBin = ((TObjString*)fSV0AMultBin->At(bin))->GetString();
931 list->AddLast(new TObjString(Form("v0amult:%s",sBin.Data())));
939 //________________________________________________________________________
940 TList* AliAnalysisTaskNorm::BuildListOfTracklets(const AliVEvent *event) {
941 /// build the list of tracklets multiplicity bins
942 /// returned TList must be deleted by user
944 TList* list = new TList();
947 const AliAODEvent *aod = 0;
948 const AliESDEvent *esd = 0;
951 aod = static_cast<const AliAODEvent *>(event);
954 esd = dynamic_cast<const AliESDEvent *>(event);
957 AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
958 list->AddLast(new TObjString(Form("ntracklets:other")));
962 AliAODTracklets *tracklets = dynamic_cast<AliAODTracklets*> ((fIsESD) ? 0 : aod->GetTracklets());
964 list->AddLast(new TObjString(Form("ntracklets:other")));
968 Int_t nTracklets = (fIsESD) ? 0 : tracklets->GetNumberOfTracklets();
969 Int_t trBin = -1, index = -1;
971 while (trBin == -1 && index < fTrackletsBin.GetSize()-1 ) {
973 if ( nTracklets >= 0 && nTracklets < fTrackletsBin.At(index) ) trBin = index - 1;
976 if(DebugLevel() > 0) {
978 TString sTrBin = ((TObjString*)fSTrackletsBin->At(trBin))->GetString();
979 printf("test ntracklets %d bin found %d bin from ntracklets table %s\n",nTracklets,trBin, sTrBin.Data());
982 printf("test ntracklets %d no bin\n",nTracklets);
986 list->AddLast(new TObjString(Form("ntracklets:other")));
989 //Add specific event centrality estimator and bin
990 TString sTrBin = ((TObjString*)fSTrackletsBin->At(trBin))->GetString();
991 list->AddLast(new TObjString(Form("ntracklets:%s",sTrBin.Data())));
999 //________________________________________________________________________
1000 TList* AliAnalysisTaskNorm::BuildListOfTrigger(const TObjArray *obj)
1002 /// build the list of trigger for the counters from the selected trigger objarray
1003 /// returned TList must be deleted by user
1005 TList* list = new TList();
1009 list->AddLast(new TObjString("trigger:any"));
1012 for ( Int_t itrig = 0; itrig<obj->GetEntries(); itrig++ ) {
1013 TString sTrigClassName = ((TObjString*)obj->At(itrig))->GetString();
1014 //Add specific trigger
1015 list->AddLast(new TObjString(Form("trigger:%s",sTrigClassName.Data())));
1019 // add case other if no specific trigger was found
1020 if (list->GetSize() == 1) list->AddLast(new TObjString("trigger:other"));
1026 //_____________________________________________________________________________
1027 Bool_t AliAnalysisTaskNorm::CheckPattern ( TString trigName, TObjArray* keepArray, TObjArray* rejectArray )
1029 for ( Int_t ipat=0; ipat<rejectArray->GetEntries(); ++ipat ) {
1030 if ( trigName.Contains(rejectArray->At(ipat)->GetName() ) ) return kFALSE;
1031 } // loop on reject pattern
1033 for ( Int_t ipat=0; ipat<keepArray->GetEntries(); ++ipat ) {
1034 if ( trigName.Contains(keepArray->At(ipat)->GetName() ) ) return kTRUE;
1035 } // loop on keep pattern
1037 return ( keepArray->GetEntries() == 0 ) ? kTRUE : kFALSE;
1041 //_____________________________________________________________________________
1042 TObjArray* AliAnalysisTaskNorm::BuildArrayOfTrigger ( const TObjArray* triggerArray, TString keepPattern, TString rejectPattern )
1045 /// build the selected list of trigger from the trigger objarray
1046 /// returned TObjArray must be deleted by user
1048 TObjArray* selectedList = new TObjArray();
1049 selectedList->SetOwner();
1050 TObjArray* rejectArray = rejectPattern.Tokenize(",");
1051 TObjArray* keepArray = keepPattern.Tokenize(",");
1053 for ( Int_t iTrig = 0; iTrig < triggerArray->GetEntries(); iTrig++ ){
1054 TString currTrigName = ((TObjString*)triggerArray->At(iTrig))->GetName();
1055 if ( CheckPattern(currTrigName, keepArray, rejectArray) ) selectedList->AddLast(new TObjString(currTrigName.Data()));
1061 return selectedList;
1065 //________________________________________________________________________
1066 TList* AliAnalysisTaskNorm::BuildListOfNormFactor(const TObjArray *trig ) {
1067 // returned TList must be deleted by user
1068 TList *list = new TList();
1071 //fEventCounters->AddRubric("norm", "MBinMB/MSLinMSL/MULinMUL/MSLinMB/MULinMSL/MULinMB/any");
1074 list->AddLast(new TObjString("norm:any"));
1078 Bool_t isMUL = kFALSE, isMSL = kFALSE, isMB = kFALSE;
1079 Bool_t isMULInMSL = kFALSE, isMSLInMB = kFALSE, isMULInMB = kFALSE;
1082 for ( Int_t itrig=0; itrig< trig->GetEntries(); itrig++ ) {
1083 TString sTrigClassName = ((TObjString*) trig->At(itrig))->GetString();
1084 if (sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD")) isMB = kTRUE;
1085 if (sTrigClassName.Contains("CMUL7-B-NOPF-MUON")) isMUL = kTRUE;
1086 if (sTrigClassName.Contains("CMSL7-B-NOPF-MUON")) isMSL = kTRUE;
1087 if (sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD&0MSL")) isMSLInMB = kTRUE;
1088 if (sTrigClassName.Contains("CMSL7-B-NOPF-MUON&0MUL")) isMULInMSL = kTRUE;
1089 if (sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD&0MUL")) isMULInMB = kTRUE;
1094 list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
1098 list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
1102 list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
1106 list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
1110 list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
1114 list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
1117 // add case other if no specific trigger was found
1118 if ( list->GetSize() == 1 ) list->AddLast(new TObjString("norm:other"));
1126 //_____________________________________________________________________________
1127 void AliAnalysisTaskNorm::FillEventCounters( Int_t runNr, TList *triggerList, TList *normFactorList, TList *centralityList, TList *spdPileUpList, TList *trackletsList, TList *v0AMultList, Bool_t physsel, Bool_t isVertex, TString sVertexCut, Bool_t outofbunchpileup) {
1129 TIter nextTriggerKey(triggerList);
1130 TObjString *triggerKey = 0x0;
1132 TIter nextNormFactorKey(normFactorList);
1133 TObjString *normFactorKey = 0x0;
1135 TIter nextCentralityKey(centralityList);
1136 TObjString *centralityKey = 0x0;
1138 TIter nextSpdPileUpKey(spdPileUpList);
1139 TObjString *spdPileUpKey = 0x0;
1141 TIter nextTrackletsKey(trackletsList);
1142 //TObjString *trackletsKey = 0x0;
1144 TIter nextV0AMultKey(v0AMultList);
1145 //TObjString *v0AMultKey = 0x0;
1148 selected = (physsel) ? "physsel:yes" : "physsel:no";
1149 selected += (isVertex) ? "/vertex:yes" : "/vertex:no";
1150 selected += Form("/%s",sVertexCut.Data());
1153 selected2 = (outofbunchpileup) ? "/outofbunchpileup:yes" : "/outofbunchpileup:no";
1155 //Loop over triggerList
1156 while ( ( triggerKey = (TObjString*) nextTriggerKey() ) ) {
1158 //Loop over normFactor List
1159 nextNormFactorKey.Reset();
1160 while ( ( normFactorKey = (TObjString*) nextNormFactorKey() ) ) {
1162 //Loop over centrality List
1163 nextCentralityKey.Reset();
1164 while ( ( centralityKey = (TObjString*) nextCentralityKey() ) ) {
1166 //Loop over spd pileup list
1167 nextSpdPileUpKey.Reset();
1168 while ( ( spdPileUpKey = (TObjString*) nextSpdPileUpKey() ) ) {
1170 //Loop over ntracklets list
1171 //nextTrackletsKey.Reset();
1172 //while ( ( trackletsKey = (TObjString*) nextTrackletsKey() ) ) {
1174 //Loop over V0Amult list
1175 //nextV0AMultKey.Reset();
1176 //while ( ( v0AMultKey = (TObjString*) nextV0AMultKey() ) ) {
1178 TString sEventCounters;
1179 //sEventCounters = Form("run:%d/%s/%s/%s/%s/%s/%s/%s",runNr,selected.Data(),triggerKey->GetName(),normFactorKey->GetName(),centralityKey->GetName(),spdPileUpKey->GetName(),trackletsKey->GetName(),v0AMultKey->GetName());
1180 sEventCounters = Form("run:%d/%s/%s/%s/%s/%s",runNr,selected.Data(),triggerKey->GetName(),normFactorKey->GetName(),centralityKey->GetName(),spdPileUpKey->GetName());
1181 fEventCounters->Count(sEventCounters);
1182 // printf("event counters = %s\n",sEventCounters.Data());
1184 // }//end loop on V0A multiplcity list
1185 // }//end loop on ntracklets list
1186 }// end loop on spd pile up list
1187 }//end loop on centrality list
1188 }//end loop on normfactor list
1189 }//end loop on triggerList