AliPhysics  b43479f (b43479f)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskCounter.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
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 #include <TSystem.h>
17 #include <TFile.h>
18 #include <TKey.h>
19 #include <TH2F.h>
20 #include <TProfile.h>
21 #include <TProfile2D.h>
22 #include <TList.h>
23 #include <TClonesArray.h>
24 #include <TGeoGlobalMagField.h>
25 #include "AliAODHeader.h"
26 //#include "AliTriggerAnalysis.h"
27 #include "AliESDEvent.h"
28 #include "AliAODEvent.h"
29 #include "AliESDtrackCuts.h"
30 #include "AliAnalysisManager.h"
31 #include "AliInputEventHandler.h"
32 #include "AliMultSelection.h"
33 
34 #include "AliAnalysisTaskCounter.h"
35 
39 
40 //______________________________________________________________
42 //______________________________________________________________
44 : AliAnalysisTaskSE(name),
45  fAcceptFastCluster(kTRUE),
46  fZVertexCut(10.),
47  fTrackMultEtaCut(0.8),
48  fAvgTrials(-1),
49  fOutputContainer(0x0),
50  fESDtrackCuts(AliESDtrackCuts::GetStandardITSTPCTrackCuts2010()),
51  //fTriggerAnalysis (new AliTriggerAnalysis),
52  fCurrFileName(0), fCheckMCCrossSection(kFALSE),
53  fUseAliCentrality(kFALSE), fCentralityClass("V0M"),
54  fhNEvents(0),
55  fhXVertex(0), fhYVertex(0), fhZVertex(0),
56  fhXGoodVertex(0),fhYGoodVertex(0),fhZGoodVertex(0),
57  fhCentrality(0), fhEventPlaneAngle(0),
58  fh1Xsec(0), fh1Trials(0)
59 {
60  DefineOutput(1, TList::Class());
61 }
62 
63 //______________________________________________
65 //_______________________________________________
67  : AliAnalysisTaskSE("DefaultAnalysis_AliAnalysisTaskCounter"),
68  fAcceptFastCluster(kTRUE),
69  fZVertexCut(10.),
70  fTrackMultEtaCut(0.8),
71  fAvgTrials(-1),
72  fOutputContainer(0x0),
73  fESDtrackCuts(AliESDtrackCuts::GetStandardITSTPCTrackCuts2010()),
74  //fTriggerAnalysis (new AliTriggerAnalysis),
75  fCurrFileName(0), fCheckMCCrossSection(kFALSE),
76  fUseAliCentrality(kFALSE), fCentralityClass("V0M"),
77  fhNEvents(0),
78  fhXVertex(0), fhYVertex(0), fhZVertex(0),
79  fhXGoodVertex(0),fhYGoodVertex(0),fhZGoodVertex(0),
80  fhCentrality(0), fhEventPlaneAngle(0),
81  fh1Xsec(0), fh1Trials(0)
82 {
83 }
84 
85 //_______________________________________________
87 //_______________________________________________
89 {
90  if (AliAnalysisManager::GetAnalysisManager()->IsProofMode()) return;
91 
93  {
94  fOutputContainer->Delete() ;
95  delete fOutputContainer ;
96  }
97 
98  if(fESDtrackCuts) delete fESDtrackCuts;
99  //if(fTriggerAnalysis) delete fTriggerAnalysis;
100 
101 }
102 
103 
104 //____________________________________________________
106 //____________________________________________________
108 {
109  fOutputContainer = new TList();
110 
112  {
113  fh1Xsec = new TH1F("hXsec","xsec from pyxsec.root",1,0,1);
114  fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
116 
117  fh1Trials = new TH1F("hTrials","trials root file",1,0,1);
118  fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
120  }
121 
122  fhZVertex = new TH1F("hZVertex", " Z vertex distribution" , 200 , -50 , 50 ) ;
123  fhZVertex->SetXTitle("v_{z} (cm)");
125 
126  fhZGoodVertex = new TH1F("hZGoodVertex", " Good Z vertex distribution" , 200 , -50 , 50 ) ;
127  fhZGoodVertex->SetXTitle("v_{z} (cm)");
129 
130  fhXVertex = new TH1F("hXVertex", " X vertex distribution" , 200 , -2 , 2 ) ;
131  fhXVertex->SetXTitle("v_{x} (cm)");
133 
134  fhXGoodVertex = new TH1F("hXGoodVertex", " Good X vertex distribution" , 200 , -2 , 2 ) ;
135  fhXGoodVertex->SetXTitle("v_{x} (cm)");
137 
138  fhYVertex = new TH1F("hYVertex", " Y vertex distribution" , 200 , -2 , 2 ) ;
139  fhYVertex->SetXTitle("v_{y} (cm)");
141 
142  fhYGoodVertex = new TH1F("hYGoodVertex", " Good Y vertex distribution" , 200 , -2 , 2 ) ;
143  fhYGoodVertex->SetXTitle("v_{y} (cm)");
145 
146  fhCentrality = new TH1F("hCentrality","Number of events in centrality bin, |vz|<10 cm, method <V0M> ",100,0.,100.) ;
147  fhCentrality->SetXTitle("Centrality bin");
149 
150  fhEventPlaneAngle=new TH1F("hEventPlaneAngle","Number of events in event plane, |vz|<10 cm, method <V0> ",100,0.,TMath::Pi()) ;
151  fhEventPlaneAngle->SetXTitle("EP angle (rad)");
153 
154  fhNEvents = new TH1I("hNEvents", "Number of analyzed events", 21, 0, 21) ;
155  //fhNEvents->SetXTitle("Selection");
156  fhNEvents->SetYTitle("# events");
157  fhNEvents->GetXaxis()->SetBinLabel(1 ,"1 = PS");
158  fhNEvents->GetXaxis()->SetBinLabel(2 ,"2 = 1 & ESD");
159  fhNEvents->GetXaxis()->SetBinLabel(3 ,"3 = 2 & |Z|<10");
160  fhNEvents->GetXaxis()->SetBinLabel(4 ,"4 = 2 & !track?");
161  fhNEvents->GetXaxis()->SetBinLabel(5 ,"5 = 3 & 4");
162  fhNEvents->GetXaxis()->SetBinLabel(6 ,"6 = 2 & V0AND");
163  fhNEvents->GetXaxis()->SetBinLabel(7 ,"7 = 3 & 6");
164  fhNEvents->GetXaxis()->SetBinLabel(8 ,"8 = 4 & 6");
165  fhNEvents->GetXaxis()->SetBinLabel(9 ,"9 = 5 & 6");
166  fhNEvents->GetXaxis()->SetBinLabel(10,"10 = 2 & not pileup");
167  fhNEvents->GetXaxis()->SetBinLabel(11,"11 = 2 & good vertex");
168  fhNEvents->GetXaxis()->SetBinLabel(12,"12 = 3 & 11");
169  fhNEvents->GetXaxis()->SetBinLabel(13,"13 = 4 & 11");
170  fhNEvents->GetXaxis()->SetBinLabel(14,"14 = 6 & 11");
171  fhNEvents->GetXaxis()->SetBinLabel(15,"15 = 9 & 11");
172  fhNEvents->GetXaxis()->SetBinLabel(16,"16 = 10 & 11");
173  fhNEvents->GetXaxis()->SetBinLabel(17,"17 = 6 & 10");
174  fhNEvents->GetXaxis()->SetBinLabel(18,"18 = Reject EMCAL 1");
175  fhNEvents->GetXaxis()->SetBinLabel(19,"19 = 18 & 3");
176  fhNEvents->GetXaxis()->SetBinLabel(20,"20 = Reject EMCAL 2");
177  fhNEvents->GetXaxis()->SetBinLabel(21,"21 = 20 & 3");
178 
180 
181  fOutputContainer->SetOwner(kTRUE);
182 
183  PostData(1,fOutputContainer);
184 
185 }
186 
187 //_______________________________________________
192 //_______________________________________________
194 {
195  //printf("___ Event __ %d __\n",(Int_t)Entry());
196 
197  Notify();
198 
199  fhNEvents->Fill(0.5);
200 
201  AliVEvent * event = InputEvent();
202  AliESDEvent * esdevent = dynamic_cast<AliESDEvent*> (event);
203  AliAODEvent * aodevent = dynamic_cast<AliAODEvent*> (event);
204 
205  // Init mag field for tracks in case of ESDs, needed, not clear why
206  if (!TGeoGlobalMagField::Instance()->GetField() && esdevent) esdevent->InitMagneticField();
207 
208  TString triggerclasses = event->GetFiredTriggerClasses();
209 
210  //printf("Trigger class fired: %s \n",event->GetFiredTriggerClasses().Data());
211 
212  if (triggerclasses.Contains("FAST") && !triggerclasses.Contains("ALL") && !fAcceptFastCluster)
213  {
214  //printf("Do not count events from fast cluster, trigger name %s\n",triggerclasses.Data());
215  return;
216  }
217 
218  fhNEvents->Fill(1.5);
219 
220  //Initialize bools
221  Bool_t bSelectVZ = kFALSE;
222  Bool_t bV0AND = kFALSE;
223  Bool_t bPileup = kFALSE;
224  Bool_t bGoodV = kFALSE;
225  Bool_t bSelectTrack = kFALSE;
226  Int_t trackMult = 0;
227 
228  //---------------------------------
229  //Get the primary vertex, cut on Z
230  //---------------------------------
231  Double_t v[3];
232  event->GetPrimaryVertex()->GetXYZ(v) ;
233  fhXVertex->Fill(v[0]);
234  fhYVertex->Fill(v[1]);
235  fhZVertex->Fill(v[2]);
236 
237  if(TMath::Abs(v[2]) < fZVertexCut)
238  {
239  bSelectVZ=kTRUE;
240  fhNEvents->Fill(2.5);
241  }
242  //else printf("Vertex out %f \n",v[2]);
243 
244  //--------------------------------------------------
245  //Count tracks, cut on number of tracks in eta < 0.8
246  //--------------------------------------------------
247  Int_t nTracks = event->GetNumberOfTracks() ;
248  for (Int_t itrack = 0; itrack < nTracks; itrack++)
249  {
250  AliVTrack * track = (AliVTrack*)event->GetTrack(itrack) ; // retrieve track from esd
251 
252  //ESDs
253  if(esdevent && !fESDtrackCuts->AcceptTrack((AliESDtrack*)track)) continue;
254 
255  //AODs
256  if(aodevent && !((AliAODTrack*)track)->IsHybridGlobalConstrainedGlobal()) continue ;
257 
258  //Do not count tracks out of acceptance cut
259  if(TMath::Abs(track->Eta())< fTrackMultEtaCut) trackMult++;
260  }
261 
262  //printf("AliAnalysisTaskCounter::UserExec() - Track Mult %d \n",trackMult);
263 
264  //--------------------------------------------------
265  // At least one track
266  //--------------------------------------------------
267  if (trackMult > 0)
268  {
269  bSelectTrack = kTRUE;
270  fhNEvents->Fill(3.5);
271  if(bSelectVZ) fhNEvents->Fill(4.5);
272  }
273 
274  //---------------------------------
275  // V0AND
276  //---------------------------------
277 
278  //if(esdevent) bV0AND = fTriggerAnalysis->IsOfflineTriggerFired(esdevent, AliTriggerAnalysis::kV0AND);
279  AliVVZERO* v0 = fInputEvent->GetVZEROData();
280  bV0AND = ((v0->GetV0ADecision()==1) && (v0->GetV0CDecision()==1));
281 
282  if(bV0AND)
283  {
284  fhNEvents->Fill(5.5);
285  if (bSelectVZ) fhNEvents->Fill(6.5);
286  if (bSelectTrack) fhNEvents->Fill(7.5);
287  if (bSelectVZ && bSelectTrack) fhNEvents->Fill(8.5);
288  }
289 
290  //---------------------------------
291  // Pileup
292  //---------------------------------
293  bPileup = event->IsPileupFromSPD(3, 0.8, 3., 2., 5.); //Default values, if not it does not compile
294  //bPileup = event->IsPileupFromSPD();
295 
296  if (!bPileup)
297  {
298  fhNEvents->Fill(9.5);
299  if(bV0AND) fhNEvents->Fill(16.5);
300  }
301 
302  //---------------------------------
303  // Good vertex
304  //---------------------------------
305  bGoodV = CheckForPrimaryVertex();
306 
307  //Remove events with vertex (0,0,0), bad vertex reconstruction
308  if(TMath::Abs(v[0]) < 1.e-6 &&
309  TMath::Abs(v[1]) < 1.e-6 &&
310  TMath::Abs(v[2]) < 1.e-6) bGoodV = kFALSE;
311 
312  if(bGoodV)
313  {
314  fhXGoodVertex->Fill(v[0]);
315  fhYGoodVertex->Fill(v[1]);
316  fhZGoodVertex->Fill(v[2]);
317 
318  fhNEvents->Fill(10.5);
319  if(bSelectVZ) fhNEvents->Fill(11.5);
320  if(bSelectTrack) fhNEvents->Fill(12.5);
321  if(bV0AND) fhNEvents->Fill(13.5);
322  if(bSelectVZ && bSelectTrack && bV0AND)
323  fhNEvents->Fill(14.5);
324  if(!bPileup) fhNEvents->Fill(15.5);
325 
326  if(TMath::Abs(v[2]) < 10.)
327  {
329  {
330  if(InputEvent()->GetCentrality() && fUseAliCentrality)
331  fhCentrality->Fill(InputEvent()->GetCentrality()->GetCentralityPercentile(fCentralityClass)) ;
332  }
333  else
334  {
335  AliMultSelection* multSelection = (AliMultSelection * ) fInputEvent->FindListObject("MultSelection") ;
336  if(multSelection) fhCentrality->Fill(multSelection->GetMultiplicityPercentile(fCentralityClass, kTRUE));
337  }
338 
339  if(InputEvent()->GetEventplane())
340  {
341  Float_t ep = InputEvent()->GetEventplane()->GetEventplane("V0", InputEvent());
342 
343  ep+=TMath::Pi()/2.; // put same range as for <Q> method, [0,pi]
344 
345  fhEventPlaneAngle->Fill(ep);
346  }
347  }
348 
349  }
350 
351  //printf("AliAnalysisTaskCounter::UserExec() : z vertex %d, good vertex %d, v0and %d, pile up %d, track mult %d\n ", bSelectVZ, bGoodV, bV0AND, bPileup, trackMult);
352 
353  // Events that could be rejected in EMCAL
354  // LHC11a, SM4 and some SM3 events cut with this
355  Bool_t bEMCALRejected = kFALSE;
356  for (Int_t i = 0; i < InputEvent()->GetNumberOfCaloClusters(); i++)
357  {
358  AliVCluster *clus = InputEvent()->GetCaloCluster(i);
359  if(clus->IsEMCAL())
360  {
361  if ((clus->E() > 500 && clus->GetNCells() > 200 ) || clus->GetNCells() > 200)
362  {
363 
364  //printf("Counter: Reject event with cluster: E %f, ncells %d\n",clus->E(),clus->GetNCells());
365 
366  fhNEvents->Fill(17.5);
367  if(bSelectVZ) fhNEvents->Fill(18.5);
368  bEMCALRejected = kTRUE;
369  break;
370  }
371  }
372  }
373 
374  //LHC11a, 3 last runs, cut with this
375  if(!bEMCALRejected)
376  {
377  // Count number of cells in SM3 with energy larger than 0.1, cut on this number
378  Int_t ncellsSM3 = 0;
379  Int_t ncellsSM4 = 0;
380  for(Int_t icell = 0; icell < event->GetEMCALCells()->GetNumberOfCells(); icell++)
381  {
382  if(event->GetEMCALCells()->GetAmplitude(icell) > 0.1 && event->GetEMCALCells()->GetCellNumber(icell)/(24*48)==3) ncellsSM3++;
383  if(event->GetEMCALCells()->GetAmplitude(icell) > 0.1 && event->GetEMCALCells()->GetCellNumber(icell)/(24*48)==4) ncellsSM4++;
384  }
385 
386  Int_t ncellcut = 21;
387  if(triggerclasses.Contains("EMC")) ncellcut = 35;
388 
389  if( ncellsSM3 >= ncellcut || ncellsSM4 >= 100 )
390  {
391  //printf("Counter: reject event with ncells in SM3: ncells %d\n",ncells);
392 
393  fhNEvents->Fill(19.5);
394  if(bSelectVZ) fhNEvents->Fill(20.5);
395  }
396 
397  }
398 
399  PostData(1,fOutputContainer);
400 
401 }
402 
403 //____________________________________________________
406 //____________________________________________________
408 {
409 
410  AliESDEvent * esdevent = dynamic_cast<AliESDEvent*> (InputEvent());
411  AliAODEvent * aodevent = dynamic_cast<AliAODEvent*> (InputEvent());
412 
413  if(esdevent)
414  {
415  if(esdevent->GetPrimaryVertex()->GetNContributors() > 0)
416  {
417  return kTRUE;
418  }
419 
420  if(esdevent->GetPrimaryVertex()->GetNContributors() < 1)
421  {
422  // SPD vertex
423  if(esdevent->GetPrimaryVertexSPD()->GetNContributors() > 0)
424  {
425  return kTRUE;
426 
427  }
428  if(esdevent->GetPrimaryVertexSPD()->GetNContributors() < 1)
429  {
430  return kFALSE;
431  }
432  }
433  }
434  else if(aodevent)
435  {
436  if (aodevent->GetPrimaryVertex() != NULL)
437  {
438  if(aodevent->GetPrimaryVertex()->GetNContributors() > 0)
439  {
440  return kTRUE;
441  }
442  }
443 
444  if(aodevent->GetPrimaryVertexSPD() != NULL)
445  {
446  if(aodevent->GetPrimaryVertexSPD()->GetNContributors() > 0)
447  {
448  return kTRUE;
449  }
450  else
451  {
452  AliWarning(Form("Number of contributors from bad vertex type:: %s",aodevent->GetPrimaryVertex()->GetName()));
453  return kFALSE;
454  }
455  }
456  }
457  else return kTRUE;
458 
459  return kFALSE;
460 
461 }
462 
463 //_____________________________________________
465 //_____________________________________________
467 {
468  AliAnalysisManager *am = AliAnalysisManager::GetAnalysisManager();
469  AliInputEventHandler *inputH = dynamic_cast<AliInputEventHandler*>(am->GetInputEventHandler());
470  if (!inputH) return;
471  TH2F *histStat = dynamic_cast<TH2F*>(inputH->GetStatistics());
472  TH2F *histBin0 = dynamic_cast<TH2F*>(inputH->GetStatistics("BIN0"));
473 
474  if(histStat)
475  fOutputContainer->Add(histStat);
476  else AliInfo("Stat histogram not available check, \n if ESDs, that AliPhysicsSelection was on, \n if AODs, if EventStat_temp.root exists");
477 
478  if(histBin0)
479  fOutputContainer->Add(histBin0);
480 
481 }
482 
483 //_____________________________________
487 //_____________________________________
489 {
490  if(!fCheckMCCrossSection) return kTRUE;
491 
492  // Fetch the aod also from the input in,
493  // have todo it in notify
494 
495  Float_t xsection = 0;
496  Float_t trials = 1;
497  fAvgTrials = -1;
498 
499  TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
500  if(!tree) return kFALSE;
501 
502  TFile *curfile = tree->GetCurrentFile();
503 
504  if(!curfile) return kFALSE;
505 
506  if(fCurrFileName == curfile->GetName()) return kFALSE;
507 
508  fCurrFileName = TString(curfile->GetName());
509 
510  if(!fh1Xsec||!fh1Trials)
511  {
512  AliInfo(Form("%s%d No Histogram fh1Xsec",(char*)__FILE__,__LINE__));
513  return kFALSE;
514  }
515 
516  Bool_t ok = PythiaInfoFromFile(fCurrFileName,xsection,trials);
517 
518  if(!ok) return kFALSE;
519 
520  fh1Xsec->Fill("<#sigma>",xsection);
521 
522  // average trials per event
523  Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
524 
525  if(trials >= nEntries && nEntries > 0.) fAvgTrials = trials/nEntries;
526 
527  fh1Trials->Fill("#sum{ntrials}",trials);
528 
529  AliInfo(Form("xs %f, trial %f, avg trials %f\n",xsection,trials, fAvgTrials));
530 
531  AliDebug(1,Form("Reading File %s",fInputHandler->GetTree()->GetCurrentFile()->GetName()));
532 
533  return kTRUE;
534 }
535 
536 //_____________________________________________________________________________________________
543 //_____________________________________________________________________________________________
544 Bool_t AliAnalysisTaskCounter::PythiaInfoFromFile(TString file,Float_t & xsec,Float_t & trials)
545 {
546  xsec = 0;
547  trials = 1;
548 
549  if(file.Contains("root_archive.zip#"))
550  {
551  Ssiz_t pos1 = file.Index("root_archive",12,0,TString::kExact);
552  Ssiz_t pos = file.Index("#",1,pos1,TString::kExact);
553  Ssiz_t pos2 = file.Index(".root",5,TString::kExact);
554  file.Replace(pos+1,pos2-pos1,"");
555  }
556  else
557  {
558  // not an archive take the basename....
559  file.ReplaceAll(gSystem->BaseName(file.Data()),"");
560  }
561 
562  //Printf("%s",file.Data());
563 
564  TFile *fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec.root")); // problem that we cannot really test the existance of a file in a archive so we have to lvie with open error message from root
565  if(!fxsec)
566  {
567  // next trial fetch the histgram file
568  fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec_hists.root"));
569  if(!fxsec)
570  {
571  // not a severe condition but inciate that we have no information
572  return kFALSE;
573  }
574  else
575  {
576  // find the tlist we want to be independtent of the name so use the Tkey
577  TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0);
578  if(!key)
579  {
580  fxsec->Close();
581  return kFALSE;
582  }
583 
584  TList *list = dynamic_cast<TList*>(key->ReadObj());
585  if(!list)
586  {
587  fxsec->Close();
588  return kFALSE;
589  }
590 
591  xsec = ((TProfile*)list->FindObject("h1Xsec")) ->GetBinContent(1);
592  trials = ((TH1F*) list->FindObject("h1Trials"))->GetBinContent(1);
593  fxsec->Close();
594  }
595  } // no tree pyxsec.root
596  else
597  {
598  TTree *xtree = (TTree*)fxsec->Get("Xsection");
599  if(!xtree)
600  {
601  fxsec->Close();
602  return kFALSE;
603  }
604 
605  UInt_t ntrials = 0;
606  Double_t xsection = 0;
607  xtree->SetBranchAddress("xsection",&xsection);
608  xtree->SetBranchAddress("ntrials",&ntrials);
609  xtree->GetEntry(0);
610  trials = ntrials;
611  xsec = xsection;
612  fxsec->Close();
613  }
614 
615  return kTRUE;
616 }
617 
virtual void UserExec(Option_t *option)
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
Count events with different selection criteria.
virtual void UserCreateOutputObjects()
Init histogram pointers and add them to container.
TH1F * fhXGoodVertex
! X Vertex distribution, after event selection.
TSystem * gSystem
TList * list
virtual void FinishTaskOutput()
Put in the output some event summary histograms.
static Bool_t PythiaInfoFromFile(TString currFile, Float_t &xsec, Float_t &trials)
TH1F * fhZVertex
! Z Vertex distribution.
TString fCurrFileName
Current file path name.
TH1F * fhCentrality
! Centrality.
Bool_t fAcceptFastCluster
Accept events from fast cluster, exclude these events for LHC11a.
Float_t fZVertexCut
Z vertex cut.
Float_t fTrackMultEtaCut
Track multiplicity eta cut.
TString fCentralityClass
Multiplicity percentile/centrality estimator, for ex. V0M.
TH1F * fhZGoodVertex
! Z Vertex distribution, after event selection.
AliESDtrackCuts * fESDtrackCuts
Track cut.
AliAnalysisTaskCounter()
Default Constructor.
virtual ~AliAnalysisTaskCounter()
Destructor.
Bool_t fCheckMCCrossSection
Retrieve from the pyxsec.root file only if requested.
TH1F * fh1Xsec
! Cross section in PYTHIA.
TH1F * fhYVertex
! Y Vertex distribution.
TH1I * fhNEvents
! Events that delivers the analysis frame after different assumptions.
TList * fOutputContainer
! Histogram container.
TH1F * fhYGoodVertex
! Y Vertex distribution, after event selection.
TFile * file
Bool_t fUseAliCentrality
Use the centrality estimator from AliCentrality or AliMultSelection.
TH1F * fhXVertex
! X Vertex distribution.
TH1F * fh1Trials
! Number of event trials in PYTHIA.
TH1F * fhEventPlaneAngle
! Event plane angle.
Float_t fAvgTrials
Average number of event trials.