AliPhysics  781d0c7 (781d0c7)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliBaseAODTask.cxx
Go to the documentation of this file.
1 #include "AliBaseAODTask.h"
2 #include "AliForwardUtil.h"
3 #include "AliAODForwardMult.h"
4 #include "AliAODCentralMult.h"
5 #include "AliAODMultEventClass.h"
6 #include <AliAnalysisManager.h>
7 #include <AliLog.h>
8 #include <AliAODEvent.h>
9 #include <TROOT.h>
10 #include <TSystem.h>
11 #include <TInterpreter.h>
12 #include <TH2.h>
13 #include <iostream>
14 
15 //____________________________________________________________________
18  fTriggerMask(0xFFFFFFFF),
19  fFilterMask(AliAODForwardMult::kDefaultFilter),
20  fCentAxis(0, 0, -1),
21  fAbsMinCent(-1),
22  fIPzAxis(1,-10,10),
23  fTriggers(0),
24  fEventStatus(0),
25  fVertex(0),
26  fCent(0),
27  fAccVertex(0),
28  fAccVertexXY(0),
29  fAccCent(0),
30  fFirstEvent(true),
31  fCloneList(false),
32  fSums(0),
33  fResults(0)
34 {
35 }
36 //____________________________________________________________________
38  const char* title)
39  : AliAnalysisTaskSE(name),
40  fTriggerMask(0xFFFFFFFF),
41  fFilterMask(AliAODForwardMult::kDefaultFilter),
42  fCentAxis(0, 0, -1),
43  fAbsMinCent(-1),
44  fIPzAxis(1,-10,10),
45  fTriggers(0),
46  fEventStatus(0),
47  fVertex(0),
48  fCent(0),
49  fAccVertex(0),
50  fAccVertexXY(0),
51  fAccCent(0),
52  fFirstEvent(true),
53  fCloneList(false),
54  fSums(0),
55  fResults(0)
56 {
57  SetTitle(title && title[0] != '\0' ? title : this->ClassName());
58  fCentAxis.SetName("centAxis");
59  fCentAxis.SetTitle("Centrality [%]");
60  DefineOutput(1, TList::Class());
61  DefineOutput(2, TList::Class());
62 }
63 
64 //____________________________________________________________________
65 Bool_t
66 AliBaseAODTask::Configure(const char* macro)
67 {
68  // --- Configure the task ------------------------------------------
69  TString macroPath(gROOT->GetMacroPath());
70  if (!macroPath.Contains("$(ALICE_PHYSICS)/PWGLF/FORWARD/analysis2")) {
71  macroPath.Append(":$(ALICE_PHYSICS)/PWGLF/FORWARD/analysis2");
72  gROOT->SetMacroPath(macroPath);
73  }
74  TString mac(macro);
75  if (mac.EqualTo("-default-")) mac = DefaultConfig();
76  const char* config = gSystem->Which(gROOT->GetMacroPath(), mac.Data());
77  if (!config) {
78  AliWarningF("%s not found in %s", mac.Data(), gROOT->GetMacroPath());
79  return false;
80  }
81  // if (gInterpreter->IsLoaded(config))
82  // gInterpreter->UnloadFile(config);
83 
84  AliInfoF("Loading configuration of '%s' from %s", ClassName(), config);
85  gROOT->Macro(Form("%s((%s*)%p)", config, GetTitle(), this));
86 
87  Info("Configure", "Unloading configuration script");
88  gInterpreter->UnloadFile(config);
89  delete config;
90 
91  return true;
92 }
93 
94 //________________________________________________________________________
95 void
97 {
98  //
99  // Set the trigger maskl
100  //
101  // Parameters:
102  // mask Trigger mask
103  //
104  DGUARD(fDebug,3,"Set the trigger mask: %s", mask);
106 }
107 //________________________________________________________________________
108 void
110 {
111  DGUARD(fDebug,3,"Set the trigger mask: 0x%0x", mask);
112  fTriggerMask = mask;
113 }
114 //________________________________________________________________________
115 void
117 {
118  //
119  // Set the trigger maskl
120  //
121  // Parameters:
122  // mask Trigger mask
123  //
124  DGUARD(fDebug,3,"Set the filter mask: %s", mask);
126 }
127 //________________________________________________________________________
128 void
130 {
131  DGUARD(fDebug,3,"Set the filter mask: 0x%0x", mask);
132  fFilterMask = mask;
133 }
134 //====================================================================
135 void AliBaseAODTask::FixAxis(TAxis& axis, const char* title)
136 {
137  if (title && title[0] != '\0') axis.SetTitle(title);
138  axis. SetNdivisions(210);
139  axis. SetLabelFont(42);
140  axis. SetLabelSize(0.03);
141  axis. SetLabelOffset(0.005);
142  axis. SetLabelColor(kBlack);
143  axis. SetTitleOffset(1);
144  axis. SetTitleFont(42);
145  axis. SetTitleSize(0.04);
146  axis. SetTitleColor(kBlack);
147  axis. SetTickLength(0.03);
148  axis. SetAxisColor(kBlack);
149 }
150 //____________________________________________________________________
151 void AliBaseAODTask::SetAxis(TAxis& axis, Int_t n, Double_t* borders)
152 {
153  axis.Set(n, borders);
154  FixAxis(axis);
155 }
156 //____________________________________________________________________
158  const TString& spec,
159  const char* sep)
160 {
161  TString s(spec);
162  Bool_t isRange = false, isUnit = false;
163  if (s[0] == 'r' || s[0] == 'R') {
164  isRange = true;
165  s.Remove(0,1);
166  }
167  if (s[0] == 'u' || s[0] == 'U') {
168  isUnit = true;
169  s.Remove(0,1);
170  }
171  TObjArray* tokens = s.Tokenize(sep);
172  TArrayD bins(tokens->GetEntries());
173  TObjString* token = 0;
174  TIter next(tokens);
175  Int_t i = 0;
176  while ((token = static_cast<TObjString*>(next()))) {
177  Double_t v = token->String().Atof();
178  bins[i] = v;
179  i++;
180  }
181  delete tokens;
182  if (isUnit) {
183  if (bins.GetSize() > 1)
184  SetAxis(axis, Int_t(bins[1]-bins[0]), bins[0], bins[1]);
185  else
186  SetAxis(axis, 2*Int_t(bins[0]), bins[0]);
187  }
188  else if (isRange) {
189  Int_t nBins = Int_t(bins[0]);
190  if (bins.GetSize() > 2)
191  SetAxis(axis, nBins, bins[1], bins[2]);
192  else
193  SetAxis(axis, nBins, bins[1]);
194  }
195  else
196  SetAxis(axis, bins.GetSize()-1,bins.GetArray());
197 }
198 //____________________________________________________________________
200  Int_t n,
201  Double_t l,
202  Double_t h)
203 {
204  axis.Set(n, l, h);
205  FixAxis(axis);
206 }
207 //____________________________________________________________________
209 {
210  SetAxis(axis, n, -TMath::Abs(m), +TMath::Abs(m));
211 }
212 //____________________________________________________________________
214  Int_t nSig,
215  const char* alt)
216 {
217  gROOT->IndentLevel();
218  TString tit(alt ? alt : axis.GetTitle());
219  tit.Append(" axis:");
220  printf(" %-26s ", tit.Data());
221  if (axis.GetXbins() && axis.GetXbins()->GetArray()) {
222  printf("%.*f", nSig, axis.GetBinLowEdge(1));
223  for (Int_t i = 1; i <= axis.GetNbins(); i++)
224  printf(":%.*f", nSig, axis.GetBinUpEdge(i));
225  }
226  else
227  printf("%d bins between %.*f and %.*f",
228  axis.GetNbins(), nSig, axis.GetXmin(),nSig,axis.GetXmax());
229  printf("\n");
230 }
231 
232 //________________________________________________________________________
233 void
235 {
236  DGUARD(fDebug,3,"Set centrality axis, %d bins", n);
237  TArrayD dbins(n+1);
238  for (UShort_t i = 0; i <= n; i++)
239  dbins[i] = (bins[i] == 100 ? 100.1 : bins[i]);
240  SetAxis(fCentAxis, n, dbins.GetArray());
241 }
242 
243 //________________________________________________________________________
244 void
246 {
247  DGUARD(fDebug,3,"Set centrality axis: %s", bins);
248  if (!bins || bins[0] == '\0') return;
249 
250  TString spec(bins);
251  if (spec.EqualTo("none", TString::kIgnoreCase))
252  return;
253 
254  TArrayD edges;
255  if (spec.EqualTo("default", TString::kIgnoreCase) ||
256  spec.EqualTo("pbpb", TString::kIgnoreCase)) {
257  // 1 2 3 4 5 6 7 8 9 10 11 12
258  Double_t tmp[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
259  SetAxis(fCentAxis,11,tmp);
260  return;
261  }
262  else if (spec.EqualTo("ppb", TString::kIgnoreCase) ||
263  spec.EqualTo("pbp", TString::kIgnoreCase)) {
264  // 1 2 3 4 5 6 7 8
265  Double_t tmp[] = { 0, 5, 10, 20, 40, 60, 80, 100 };
266  SetAxis(fCentAxis,7, tmp);
267  return;
268  }
269  SetAxis(fCentAxis,bins);
270 }
271 
272 //________________________________________________________________________
273 void
275 {
276  DGUARD(fDebug,3,"Set centrality axis, %d bins", n);
277  SetAxis(fCentAxis, n, bins);
278 }
279 //________________________________________________________________________
280 void
282 {
283  Short_t a[] = { low, high };
284  SetAxis(fCentAxis, (high-low), low, high);
285 }
286 
287 //____________________________________________________________________
288 Bool_t
289 AliBaseAODTask::Connect(const char* sumFile,
290  const char* resFile)
291 {
292  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
293  if (!mgr) {
294  Error("AddTaskForwardMult", "No analysis manager to connect to.");
295  return false;
296  }
297 
298  // --- Check that we have an AOD input handler ---------------------
299  UShort_t aodInput = 0;
300  if (!(aodInput = AliForwardUtil::CheckForAOD())) {
301  AliError("Cannot proceed without and AOD handler");
302  return false;
303  }
304  if (aodInput == 2 &&
305  !AliForwardUtil::CheckForTask("AliForwardMultiplicityBase")) {
306  AliError("The relevant task wasn't added to the train");
307  return false;
308  }
309 
310  // Add to the manager
311  mgr->AddTask(this);
312 
313  // Create and connect output containers
314  TString sumOut;
315  TString resOut;
316  if (sumFile && sumFile[0] != '\0') sumOut = sumFile;
317  if (resFile && resFile[0] != '\0') resOut = resFile;
318  else if (sumFile && sumFile[0] != '\0') resOut = sumFile;
319  if (sumOut.IsNull()) sumOut = AliAnalysisManager::GetCommonFileName();
320  if (resOut.IsNull()) resOut = AliAnalysisManager::GetCommonFileName();
321 
322  AliAnalysisDataContainer* sumCon =
323  mgr->CreateContainer(Form("%sSums", GetName()), TList::Class(),
324  AliAnalysisManager::kOutputContainer, sumOut);
325  AliAnalysisDataContainer* resCon =
326  mgr->CreateContainer(Form("%sResults", GetName()), TList::Class(),
327  AliAnalysisManager::kParamContainer, resOut);
328  mgr->ConnectInput(this, 0, mgr->GetCommonInputContainer());
329  mgr->ConnectOutput(this, 1, sumCon);
330  mgr->ConnectOutput(this, 2, resCon);
331 
332  return true;
333 }
334 //____________________________________________________________________
335 void
337 {
338  //
339  // Create output objects
340  //
341  //
342  DGUARD(fDebug,1,"Create user ouput");
343  fSums = new TList;
344  fSums->SetName(Form("%sSums", GetName()));
345  fSums->SetOwner(true);
346 
348  fTriggers->SetDirectory(0);
349 
351  fEventStatus->SetDirectory(0);
352 
353  fSums->Add(fTriggers);
354  fSums->Add(fEventStatus);
355 
357  fVertex = new TH1D("vertex", "IP_{z} of all events",
358  vA->GetNbins(), vA->GetXbins()->GetArray());
359  fVertex->SetXTitle("IP_{z} [cm]");
360  fVertex->SetYTitle("Events");
361  fVertex->SetDirectory(0);
362  fVertex->SetFillColor(kRed+2);
363  fVertex->SetFillStyle(3002);
364  fVertex->SetLineColor(kRed+2);
365  fSums->Add(fVertex);
366  fAccVertex = static_cast<TH1D*>(fVertex->Clone("vertexAcc"));
367  fAccVertex->SetTitle("IP_{z} of accepted events");
368  fAccVertex->SetDirectory(0);
369  fAccVertex->SetFillColor(kGreen+2);
370  fAccVertex->SetLineColor(kGreen+2);
371  fSums->Add(fAccVertex);
372 
373  fAccVertexXY = new TH2D("vertexAccXY", "IP_{x,y} of accepted events",
374  1000,-2,2,1000,-2,2);
375  fAccVertexXY->SetXTitle("IP_{x} [cm]");
376  fAccVertexXY->SetYTitle("IP_{y} [cm]");
377  fAccVertexXY->SetDirectory(0);
378  fSums->Add(fAccVertexXY);
379 
380  fCent = new TH1D("cent","Centrality of all events",102, -1, 101);
381  fCent->SetXTitle("Centrality [%]");
382  fCent->SetYTitle("Events");
383  fCent->SetFillColor(kRed+2);
384  fCent->SetFillStyle(3002);
385  fCent->SetLineColor(kRed+2);
386  fCent->SetDirectory(0);
387  fSums->Add(fCent);
388  fAccCent = static_cast<TH1D*>(fCent->Clone("centAcc"));
389  fAccCent->SetTitle("Centrality of accepted events");
390  fAccCent->SetDirectory(0);
391  fAccCent->SetFillColor(kGreen+2);
392  fAccCent->SetLineColor(kGreen+2);
393  fSums->Add(fAccCent);
394 
395  // Store centrality axis as a histogram - which can be merged
396  TH1* cH = 0;
397  if (fCentAxis.GetXbins() && fCentAxis.GetXbins()->GetSize() > 0)
398  cH = new TH1I(fCentAxis.GetName(), fCentAxis.GetTitle(),
399  fCentAxis.GetNbins(), fCentAxis.GetXbins()->GetArray());
400  else
401  cH = new TH1I(fCentAxis.GetName(), fCentAxis.GetTitle(),
402  fCentAxis.GetNbins(), fCentAxis.GetXmin(),
403  fCentAxis.GetXmax());
404  cH->SetBinContent(1,1);
405  cH->GetXaxis()->SetTitle(fCentAxis.GetTitle());
406  cH->GetXaxis()->SetName(fCentAxis.GetName());
407 
408  fSums->Add(cH);
409 
412  fSums->Add(AliForwardUtil::MakeParameter("count", 1));
413  fSums->Add(AliForwardUtil::MakeParameter("alirootRev",
415  fSums->Add(AliForwardUtil::MakeParameter("alirootBranch",
417 
418 
419 
420  if (!Book()) AliFatalF("Failed to book output objects for %s", GetName());
421 
422  Print();
423 
424  PostData(1, fSums);
425 }
426 
427 //____________________________________________________________________
430 {
431  // Get the forward object that contains our event selection stuff
432  TObject* obj = 0;
433  if (mc) obj = aod.FindListObject("ForwardMC");
434  else obj = aod.FindListObject("Forward");
435  if (!obj) {
436  if (verb) AliWarning("No forward object found");
437  return 0;
438  }
439  AliAODForwardMult* forward = static_cast<AliAODForwardMult*>(obj);
440  return forward;
441 }
442 //____________________________________________________________________
445 {
446  // Get the forward object that contains our event selection stuff
447  TObject* obj = aod.FindListObject("MultClass");
448  if (!obj) {
449  if (verb) AliWarning("No multiplicity event class object found");
450  return 0;
451  }
452  AliAODMultEventClass* multClass = static_cast<AliAODMultEventClass*>(obj);
453  return multClass;
454 }
455 //____________________________________________________________________
456 Double_t
458  AliAODForwardMult* forward,
459  Int_t& qual)
460 {
461  qual = 0;
462  Double_t cent = forward->GetCentrality();
463  Double_t max = (HasCentrality() ? fCentAxis.GetXmax() : 100);
464  if (cent < 0) { cent = -.5; qual = 0xFFFF; }
465  if (cent > max) { cent = TMath::Max(max+.1,100.5); qual = 198; }
466  return cent;
467 }
468 //____________________________________________________________________
469 Double_t
471  AliAODForwardMult* forward)
472 {
473  Int_t qual = 0;
474  Double_t cent = GetCentrality(event, forward, qual);
475  if (qual > 0) forward->SetTriggerBits(AliAODForwardMult::kCentNoCalib);
476  return cent;
477 }
478 
479 //____________________________________________________________________
480 Double_t
482  AliAODForwardMult* forward)
483 {
484  return forward->GetIpZ();
485 }
486 //____________________________________________________________________
487 Bool_t
489 
490 {
491  x = -10000;
492  y = -10000;
493  AliVVertex* gen = aod.GetPrimaryVertex();
494  AliVVertex* vtx[] = { aod.GetPrimaryVertexSPD(),
495  aod.GetPrimaryVertexTPC(),
496  gen };
497  Bool_t ret = false;
498  for (Int_t i = 0; i < 3; i++) {
499  if (!vtx[i] || (vtx[i] != gen && !vtx[i]->IsFromVertexer3D()))
500  continue;
501 
502  x = vtx[i]->GetX();
503  y = vtx[i]->GetY();
504  ret = true;
505  break;
506  }
507  return ret;
508 }
509 
510 //____________________________________________________________________
513 {
514  // Get the central object that contains our event selection stuff
515  TObject* obj = 0;
516  if (mc) obj = aod.FindListObject("CentralClustersMC");
517  else obj = aod.FindListObject("CentralClusters");
518  if (!obj) {
519  if (verb) AliWarning("No central object found");
520  return 0;
521  }
522  AliAODCentralMult* central = static_cast<AliAODCentralMult*>(obj);
523  return central;
524 }
525 //____________________________________________________________________
526 TH2D*
528 {
529  TObject* obj = aod.FindListObject("primary");
530  if (!obj) return 0;
531  TH2D* ret = static_cast<TH2D*>(obj);
532  return ret;
533 }
534 
535 //____________________________________________________________________
536 void
538 {
539  //
540  // Process a single event
541  //
542  // Parameters:
543  // option Not used
544  //
545  // Main loop
546  DGUARD(fDebug,1,"Analyse the AOD event in UserExec");
547  if (!PreEvent()) return;
548 
550  if (!aod) return;
551 
552  // Get the forward object that contains our event selection stuff
553  AliAODForwardMult* forward = GetForward(*aod);
554  if (!forward) return;
555 
556  if (fFirstEvent) {
557  if (!PreData()) return;
558  StoreInformation(*forward);
559  fFirstEvent = false;
560  }
561 
562  // Get our ip_z and centrality
563  Double_t vtx = GetIpZ(*aod, forward);
564  Float_t cent = GetCentrality(*aod, forward);
565  fVertex->Fill(vtx);
566  fCent->Fill(cent);
567  if (HasCentrality() && fAbsMinCent >= 0 && cent < fAbsMinCent) return;
568 
569  // Now check our event selectio up front
570  if (!CheckEvent(*forward)) return;
571 
572  // Let user defined code do the job
573  Bool_t taken = Event(*aod);
574 
575  // Fill our histograms
576  if (taken) {
577  fAccVertex->Fill(vtx);
578  fAccCent->Fill(cent);
579 
580  Double_t ipX, ipY;
581  GetIpXY(*aod, ipX, ipY);
582  fAccVertexXY->Fill(ipX, ipY);
583  }
584 
585  PostData(1, fSums);
586 
587  PostEvent();
588 }
589 
590 //____________________________________________________________________
591 Bool_t
593 {
594  if (HasCentrality()) {
595  return forward.CheckEvent(fTriggerMask,
596  fIPzAxis.GetXmin(),
597  fIPzAxis.GetXmax(),
598  fCentAxis.GetXmin(),
599  fCentAxis.GetXmax(),
600  fTriggers,
601  fEventStatus,
602  fFilterMask);
603 }
604  return forward.CheckEvent(fTriggerMask,
605  fIPzAxis.GetXmin(),
606  fIPzAxis.GetXmax(),
607  0,
608  0,
609  fTriggers,
610  fEventStatus,
611  fFilterMask);
612 }
613 
614 //____________________________________________________________________
615 void
617 {
618  fSums->Add(AliForwardUtil::MakeParameter("sNN", forward.GetSNN()));
619  fSums->Add(AliForwardUtil::MakeParameter("sys", forward.GetSystem()));
620 }
621 
622 //____________________________________________________________________
623 void
625 {
626  TList* list = dynamic_cast<TList*>(GetOutputData(1));
627  if (!list) {
628  AliError(Form("No output list defined (%p)", GetOutputData(1)));
629  if (GetOutputData(1)) GetOutputData(1)->Print();
630  return;
631  }
632 
633  // Assign to our internal variable for use by sub-classes
634  fSums = list;
635 
636  // Create our output container
637  TString resName(Form("%sResults", GetName()));
638  if (fCloneList)
639  fResults = static_cast<TList*>(fSums->Clone(resName.Data()));
640  else {
641  fResults = new TList;
642  fResults->SetName(resName.Data());
643  }
644  fResults->SetOwner(true);
645 
646  // Now call user defined routines
647  if (!Finalize()) {
648  AliErrorF("Failed to finalize this task (%s)", GetName());
649  return;
650  }
651 
652  PostData(2, fResults);
653 }
654 
655 #define PF(N,V,...) \
656  AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)
657 #define PFB(N,FLAG) \
658  do { \
659  AliForwardUtil::PrintName(N); \
660  std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \
661  } while(false)
662 #define PFV(N,VALUE) \
663  do { \
664  AliForwardUtil::PrintName(N); \
665  std::cout << (VALUE) << std::endl; } while(false)
666 
667 //____________________________________________________________________
668 void
669 AliBaseAODTask::Print(Option_t* /*option=""*/) const
670 {
677  gROOT->IncreaseDirLevel();
680  PFV("Abs.least cent", fAbsMinCent);
681  PrintAxis(fIPzAxis, 1, "IP z");
682  PrintAxis(fCentAxis, 0, "Centraltiy");
683  gROOT->DecreaseDirLevel();
684 }
685 //
686 // EOF
687 //
virtual Bool_t CheckEvent(const AliAODForwardMult &forward)
virtual void Terminate(Option_t *option)
UShort_t GetSystem() const
static UInt_t MakeTriggerMask(const char *what, const char *sep="&")
double Double_t
Definition: External.C:58
static TAxis * MakeFullIpZAxis(Int_t nCenter=20)
void SetTriggerBits(UInt_t bits)
virtual Bool_t PreEvent()
static void SetAxis(TAxis &axis, Int_t n, Double_t *borders)
const char * title
Definition: MakeQAPdf.C:26
void SetTriggerMask(UInt_t mask)
TSystem * gSystem
virtual Bool_t PreData()
TList * list
static TH1I * MakeTriggerHistogram(const char *name="triggers", UInt_t mask=0)
virtual void UserCreateOutputObjects()
static AliAODEvent * GetAODEvent(AliAnalysisTaskSE *task)
Float_t GetIpZ() const
virtual Bool_t GetIpXY(AliAODEvent &aod, Double_t &x, Double_t &y)
UShort_t GetSNN() const
void SetFilterMask(UInt_t mask)
Int_t cH
Definition: Combine.C:26
Per-event per bin.
int Int_t
Definition: External.C:63
Definition: External.C:204
unsigned int UInt_t
Definition: External.C:33
Double_t fAbsMinCent
float Float_t
Definition: External.C:68
virtual Bool_t PostEvent()
Various utilities used in PWGLF/FORWARD.
virtual Bool_t Configure(const char *macro="-default-")
Definition: External.C:228
Definition: External.C:212
#define PFV(N, VALUE)
void Print(Option_t *option="") const
unsigned long ULong_t
Definition: External.C:38
static void PrintAxis(const TAxis &axis, Int_t nSig=2, const char *alt=0)
static const Char_t * GetTriggerString(UInt_t mask, const char *sep="&")
#define DGUARD(L, N, F,...)
static void PrintTask(const TObject &o)
virtual Bool_t Event(AliAODEvent &aod)=0
short Short_t
Definition: External.C:23
static TObject * MakeParameter(const char *name, UShort_t value)
static TH1I * MakeStatusHistogram(const char *name="status")
virtual Bool_t Connect(const char *sumFile=0, const char *resFile=0)
static void FixAxis(TAxis &axis, const char *title=0)
static UShort_t CheckForAOD()
AliAODMultEventClass * GetMultClass(const AliAODEvent &aod, Bool_t verb=true)
AliAODForwardMult * GetForward(const AliAODEvent &aod, Bool_t mc=false, Bool_t verb=true)
static ULong_t AliROOTBranch()
virtual Bool_t Finalize()=0
unsigned short UShort_t
Definition: External.C:28
virtual void StoreInformation(AliAODForwardMult &forward)
void SetCentralityAxis(UShort_t n, Short_t *bins)
Float_t GetCentrality() const
const char Option_t
Definition: External.C:48
virtual Bool_t Book()=0
TH2D * GetPrimary(const AliAODEvent &aod)
virtual const char * DefaultConfig() const
AliAODCentralMult * GetCentral(const AliAODEvent &aod, Bool_t mc=false, Bool_t verb=true)
bool Bool_t
Definition: External.C:53
static Bool_t CheckForTask(const char *clsOrName, Bool_t cls=true)
static ULong_t AliROOTRevision()
virtual Double_t GetCentrality(AliAODEvent &event, AliAODForwardMult *forward, Int_t &qual)
Bool_t CheckEvent(UInt_t triggerMask=kInel, Double_t vzMin=-10, Double_t vzMax=10, Double_t cMin=0, Double_t cMax=100, TH1 *hist=0, TH1 *status=0, UInt_t filterMask=kDefaultFilter) const
Definition: External.C:196
virtual void UserExec(Option_t *option)
Bool_t HasCentrality() const
virtual Double_t GetIpZ(AliAODEvent &event, AliAODForwardMult *forward)