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);
138 DGUARD(fDebug,3,
"Set centrality axis, %d bins", n);
141 dbins[i] = (bins[i] == 100 ? 100.1 : bins[i]);
157 for (
Int_t i=1; i<spec.Length(); i++) {
158 if (spec[i] ==
'-' || spec[i] ==
':') {
160 if (cnt > 0 && c < tmp[cnt-1]) {
161 Warning(
"ExtractBins",
162 "Invalid edge @ %d: %f (< %f)", cnt, c, tmp[cnt-1]);
172 if (start+1 != spec.Length()) {
173 Double_t c = GetEdge(spec, start, spec.Length());
177 edges.Set(cnt, tmp.GetArray());
186 DGUARD(fDebug,3,
"Set centrality axis: %s", bins);
187 if (!bins || bins[0] ==
'\0')
return;
190 if (spec.EqualTo(
"none", TString::kIgnoreCase))
194 if (spec.EqualTo(
"default", TString::kIgnoreCase) ||
195 spec.EqualTo(
"pbpb", TString::kIgnoreCase)) {
197 Double_t tmp[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 100 };
200 else if (spec.EqualTo(
"ppb", TString::kIgnoreCase) ||
201 spec.EqualTo(
"pbp", TString::kIgnoreCase)) {
203 Double_t tmp[] = { 0, 5, 10, 20, 40, 60, 80, 100 };
207 ExtractBins(spec, edges);
216 DGUARD(fDebug,3,
"Set centrality axis, %d bins", n);
234 Error(
"AddTaskForwardMult",
"No analysis manager to connect to.");
241 AliError(
"Cannot proceed without and AOD handler");
246 AliError(
"The relevant task wasn't added to the train");
256 if (sumFile && sumFile[0] !=
'\0') sumOut = sumFile;
257 if (resFile && resFile[0] !=
'\0') resOut = resFile;
258 else if (sumFile && sumFile[0] !=
'\0') resOut = sumFile;
259 if (sumOut.IsNull()) sumOut = AliAnalysisManager::GetCommonFileName();
260 if (resOut.IsNull()) resOut = AliAnalysisManager::GetCommonFileName();
262 AliAnalysisDataContainer* sumCon =
263 mgr->CreateContainer(Form(
"%sSums", GetName()), TList::Class(),
264 AliAnalysisManager::kOutputContainer, sumOut);
265 AliAnalysisDataContainer* resCon =
266 mgr->CreateContainer(Form(
"%sResults", GetName()), TList::Class(),
267 AliAnalysisManager::kParamContainer, resOut);
268 mgr->ConnectInput(
this, 0, mgr->GetCommonInputContainer());
269 mgr->ConnectOutput(
this, 1, sumCon);
270 mgr->ConnectOutput(
this, 2, resCon);
282 DGUARD(fDebug,1,
"Create user ouput");
284 fSums->SetName(Form(
"%sSums", GetName()));
285 fSums->SetOwner(
true);
297 fVertex =
new TH1D(
"vertex",
"IP_{z} of all events",
298 vA->GetNbins(), vA->GetXbins()->GetArray());
299 fVertex->SetXTitle(
"IP_{z} [cm]");
307 fAccVertex->SetTitle(
"IP_{z} of accepted events");
314 1000,-2,2,1000,-2,2);
320 fCent =
new TH1D(
"cent",
"Centrality of all events",102, -1, 101);
321 fCent->SetXTitle(
"Centrality [%]");
322 fCent->SetYTitle(
"Events");
323 fCent->SetFillColor(kRed+2);
324 fCent->SetFillStyle(3002);
325 fCent->SetLineColor(kRed+2);
326 fCent->SetDirectory(0);
329 fAccCent->SetTitle(
"Centrality of accepted events");
344 cH->SetBinContent(1,1);
345 cH->GetXaxis()->SetTitle(
fCentAxis.GetTitle());
346 cH->GetXaxis()->SetName(
fCentAxis.GetName());
360 if (!
Book()) AliFatalF(
"Failed to book output objects for %s", GetName());
373 if (mc) obj = aod.FindListObject(
"ForwardMC");
374 else obj = aod.FindListObject(
"Forward");
376 if (verb) AliWarning(
"No forward object found");
387 TObject* obj = aod.FindListObject(
"MultClass");
389 if (verb) AliWarning(
"No multiplicity event class object found");
404 if (cent < 0) { cent = -.5; qual = 0xFFFF; }
405 if (cent > max) { cent = TMath::Max(max+.1,100.5); qual = 198; }
433 AliVVertex* gen = aod.GetPrimaryVertex();
434 AliVVertex* vtx[] = { aod.GetPrimaryVertexSPD(),
435 aod.GetPrimaryVertexTPC(),
438 for (
Int_t i = 0; i < 3; i++) {
439 if (!vtx[i] || (vtx[i] != gen && !vtx[i]->IsFromVertexer3D()))
456 if (mc) obj = aod.FindListObject(
"CentralClustersMC");
457 else obj = aod.FindListObject(
"CentralClusters");
459 if (verb) AliWarning(
"No central object found");
469 TObject* obj = aod.FindListObject(
"primary");
471 TH2D* ret =
static_cast<TH2D*
>(obj);
486 DGUARD(fDebug,1,
"Analyse the AOD event in UserExec");
494 if (!forward)
return;
559 AliError(Form(
"No output list defined (%p)", GetOutputData(1)));
560 if (GetOutputData(1)) GetOutputData(1)->Print();
568 TString resName(Form(
"%sResults", GetName()));
579 AliErrorF(
"Failed to finalize this task (%s)", GetName());
586 #define PF(N,V,...) \
587 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)
588 #define PFB(N,FLAG) \
590 AliForwardUtil::PrintName(N); \
591 std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \
593 #define PFV(N,VALUE) \
595 AliForwardUtil::PrintName(N); \
596 std::cout << (VALUE) << std::endl; } while(false)
608 gROOT->IncreaseDirLevel();
613 gROOT->IndentLevel();
617 for (
Int_t i = 0; i <= nBins; i++)
618 std::cout << (i==0 ?
" " :
"-") << bins[i];
619 std::cout << std::endl;
621 gROOT->DecreaseDirLevel();
virtual Bool_t CheckEvent(const AliAODForwardMult &forward)
virtual void Terminate(Option_t *option)
return jsonbuilder str().c_str()
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()
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 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 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)