6 #include <AliAnalysisManager.h>
8 #include <AliAODEvent.h>
11 #include <TInterpreter.h>
18 fTriggerMask(0xFFFFFFFF),
40 fTriggerMask(0xFFFFFFFF),
57 SetTitle(title && title[0] !=
'\0' ? title : this->ClassName());
60 DefineOutput(1, TList::Class());
61 DefineOutput(2, TList::Class());
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);
76 const char* config =
gSystem->Which(gROOT->GetMacroPath(), mac.Data());
78 AliWarningF(
"%s not found in %s", mac.Data(), gROOT->GetMacroPath());
84 AliInfoF(
"Loading configuration of '%s' from %s", ClassName(), config);
85 gROOT->Macro(Form(
"%s((%s*)%p)", config, GetTitle(),
this));
87 Info(
"Configure",
"Unloading configuration script");
88 gInterpreter->UnloadFile(config);
104 DGUARD(fDebug,3,
"Set the trigger mask: %s", mask);
111 DGUARD(fDebug,3,
"Set the trigger mask: 0x%0x", mask);
124 DGUARD(fDebug,3,
"Set the filter mask: %s", mask);
131 DGUARD(fDebug,3,
"Set the filter mask: 0x%0x", mask);
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);
153 axis.Set(n, borders);
162 Bool_t isRange =
false, isUnit =
false;
163 if (s[0] ==
'r' || s[0] ==
'R') {
167 if (s[0] ==
'u' || s[0] ==
'U') {
172 TArrayD bins(tokens->GetEntries());
173 TObjString* token = 0;
176 while ((token = static_cast<TObjString*>(next()))) {
177 Double_t v = token->String().Atof();
183 if (bins.GetSize() > 1)
184 SetAxis(axis,
Int_t(bins[1]-bins[0]), bins[0], bins[1]);
190 if (bins.GetSize() > 2)
191 SetAxis(axis, nBins, bins[1], bins[2]);
196 SetAxis(axis, bins.GetSize()-1,bins.GetArray());
210 SetAxis(axis, n, -TMath::Abs(m), +TMath::Abs(m));
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));
227 printf(
"%d bins between %.*f and %.*f",
228 axis.GetNbins(), nSig, axis.GetXmin(),nSig,axis.GetXmax());
236 DGUARD(fDebug,3,
"Set centrality axis, %d bins", n);
239 dbins[i] = (bins[i] == 100 ? 100.1 : bins[i]);
247 DGUARD(fDebug,3,
"Set centrality axis: %s", bins);
248 if (!bins || bins[0] ==
'\0')
return;
251 if (spec.EqualTo(
"none", TString::kIgnoreCase))
255 if (spec.EqualTo(
"default", TString::kIgnoreCase) ||
256 spec.EqualTo(
"pbpb", TString::kIgnoreCase)) {
258 Double_t tmp[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
262 else if (spec.EqualTo(
"ppb", TString::kIgnoreCase) ||
263 spec.EqualTo(
"pbp", TString::kIgnoreCase)) {
265 Double_t tmp[] = { 0, 5, 10, 20, 40, 60, 80, 100 };
276 DGUARD(fDebug,3,
"Set centrality axis, %d bins", n);
294 Error(
"AddTaskForwardMult",
"No analysis manager to connect to.");
301 AliError(
"Cannot proceed without and AOD handler");
306 AliError(
"The relevant task wasn't added to the train");
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();
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);
342 DGUARD(fDebug,1,
"Create user ouput");
344 fSums->SetName(Form(
"%sSums", GetName()));
345 fSums->SetOwner(
true);
357 fVertex =
new TH1D(
"vertex",
"IP_{z} of all events",
358 vA->GetNbins(), vA->GetXbins()->GetArray());
359 fVertex->SetXTitle(
"IP_{z} [cm]");
367 fAccVertex->SetTitle(
"IP_{z} of accepted events");
374 1000,-2,2,1000,-2,2);
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);
389 fAccCent->SetTitle(
"Centrality of accepted events");
404 cH->SetBinContent(1,1);
405 cH->GetXaxis()->SetTitle(
fCentAxis.GetTitle());
406 cH->GetXaxis()->SetName(
fCentAxis.GetName());
420 if (!
Book()) AliFatalF(
"Failed to book output objects for %s", GetName());
433 if (mc) obj = aod.FindListObject(
"ForwardMC");
434 else obj = aod.FindListObject(
"Forward");
436 if (verb) AliWarning(
"No forward object found");
447 TObject* obj = aod.FindListObject(
"MultClass");
449 if (verb) AliWarning(
"No multiplicity event class object found");
464 if (cent < 0) { cent = -.5; qual = 0xFFFF; }
465 if (cent > max) { cent = TMath::Max(max+.1,100.5); qual = 198; }
493 AliVVertex* gen = aod.GetPrimaryVertex();
494 AliVVertex* vtx[] = { aod.GetPrimaryVertexSPD(),
495 aod.GetPrimaryVertexTPC(),
498 for (
Int_t i = 0; i < 3; i++) {
499 if (!vtx[i] || (vtx[i] != gen && !vtx[i]->IsFromVertexer3D()))
516 if (mc) obj = aod.FindListObject(
"CentralClustersMC");
517 else obj = aod.FindListObject(
"CentralClusters");
519 if (verb) AliWarning(
"No central object found");
529 TObject* obj = aod.FindListObject(
"primary");
531 TH2D* ret =
static_cast<TH2D*
>(obj);
546 DGUARD(fDebug,1,
"Analyse the AOD event in UserExec");
554 if (!forward)
return;
628 AliError(Form(
"No output list defined (%p)", GetOutputData(1)));
629 if (GetOutputData(1)) GetOutputData(1)->Print();
637 TString resName(Form(
"%sResults", GetName()));
648 AliErrorF(
"Failed to finalize this task (%s)", GetName());
655 #define PF(N,V,...) \
656 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)
657 #define PFB(N,FLAG) \
659 AliForwardUtil::PrintName(N); \
660 std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \
662 #define PFV(N,VALUE) \
664 AliForwardUtil::PrintName(N); \
665 std::cout << (VALUE) << std::endl; } while(false)
677 gROOT->IncreaseDirLevel();
683 gROOT->DecreaseDirLevel();
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="&")
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)
void SetTriggerMask(UInt_t mask)
static TH1I * MakeTriggerHistogram(const char *name="triggers", UInt_t mask=0)
virtual void UserCreateOutputObjects()
static AliAODEvent * GetAODEvent(AliAnalysisTaskSE *task)
virtual Bool_t GetIpXY(AliAODEvent &aod, Double_t &x, Double_t &y)
void SetFilterMask(UInt_t mask)
virtual Bool_t PostEvent()
Various utilities used in PWGLF/FORWARD.
virtual Bool_t Configure(const char *macro="-default-")
void Print(Option_t *option="") const
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
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
virtual void StoreInformation(AliAODForwardMult &forward)
void SetCentralityAxis(UShort_t n, Short_t *bins)
Float_t GetCentrality() const
TH2D * GetPrimary(const AliAODEvent &aod)
virtual const char * DefaultConfig() const
AliAODCentralMult * GetCentral(const AliAODEvent &aod, Bool_t mc=false, Bool_t verb=true)
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
virtual void UserExec(Option_t *option)
Bool_t HasCentrality() const
virtual Double_t GetIpZ(AliAODEvent &event, AliAODForwardMult *forward)