6 #include <AliAnalysisManager.h> 7 #include <AliAnalysisDataSlot.h> 8 #include <AliAnalysisDataContainer.h> 10 #include <AliAODEvent.h> 13 #include <TInterpreter.h> 21 fTriggerMask(0xFFFFFFFF),
60 SetTitle(title && title[0] !=
'\0' ? title : this->ClassName());
63 DefineOutput(1, TList::Class());
64 DefineOutput(2, TList::Class());
72 TString macroPath(gROOT->GetMacroPath());
73 if (!macroPath.Contains(
"$(ALICE_PHYSICS)/PWGLF/FORWARD/analysis2")) {
74 macroPath.Append(
":$(ALICE_PHYSICS)/PWGLF/FORWARD/analysis2");
75 gROOT->SetMacroPath(macroPath);
79 const char* config =
gSystem->Which(gROOT->GetMacroPath(), mac.Data());
81 AliWarningF(
"%s not found in %s", mac.Data(), gROOT->GetMacroPath());
87 AliInfoF(
"Loading configuration of '%s' from %s", ClassName(), config);
88 gROOT->Macro(Form(
"%s((%s*)%p)", config, GetTitle(),
this));
90 Info(
"Configure",
"Unloading configuration script");
91 gInterpreter->UnloadFile(config);
107 DGUARD(fDebug,3,
"Set the trigger mask: %s", mask);
114 DGUARD(fDebug,3,
"Set the trigger mask: 0x%0x", mask);
127 DGUARD(fDebug,3,
"Set the filter mask: %s", mask);
134 DGUARD(fDebug,3,
"Set the filter mask: 0x%0x", mask);
140 if (title && title[0] !=
'\0') axis.SetTitle(title);
141 axis. SetNdivisions(210);
142 axis. SetLabelFont(42);
143 axis. SetLabelSize(0.03);
144 axis. SetLabelOffset(0.005);
145 axis. SetLabelColor(kBlack);
146 axis. SetTitleOffset(1);
147 axis. SetTitleFont(42);
148 axis. SetTitleSize(0.04);
149 axis. SetTitleColor(kBlack);
150 axis. SetTickLength(0.03);
151 axis. SetAxisColor(kBlack);
156 axis.Set(n, borders);
165 Bool_t isRange =
false, isUnit =
false;
166 if (s[0] ==
'r' || s[0] ==
'R') {
170 if (s[0] ==
'u' || s[0] ==
'U') {
175 TArrayD bins(tokens->GetEntries());
176 TObjString* token = 0;
179 while ((token = static_cast<TObjString*>(next()))) {
180 Double_t v = token->String().Atof();
186 if (bins.GetSize() > 1)
187 SetAxis(axis,
Int_t(bins[1]-bins[0]), bins[0], bins[1]);
193 if (bins.GetSize() > 2)
194 SetAxis(axis, nBins, bins[1], bins[2]);
199 SetAxis(axis, bins.GetSize()-1,bins.GetArray());
213 SetAxis(axis, n, -TMath::Abs(m), +TMath::Abs(m));
220 gROOT->IndentLevel();
221 TString tit(alt ? alt : axis.GetTitle());
222 tit.Append(
" axis:");
223 printf(
" %-26s ", tit.Data());
224 if (axis.GetXbins() && axis.GetXbins()->GetArray()) {
225 printf(
"%.*f", nSig, axis.GetBinLowEdge(1));
226 for (
Int_t i = 1; i <= axis.GetNbins(); i++)
227 printf(
":%.*f", nSig, axis.GetBinUpEdge(i));
230 printf(
"%d bins between %.*f and %.*f",
231 axis.GetNbins(), nSig, axis.GetXmin(),nSig,axis.GetXmax());
239 DGUARD(fDebug,3,
"Set centrality axis, %d bins", n);
242 dbins[i] = (bins[i] == 100 ? 100.1 : bins[i]);
250 DGUARD(fDebug,3,
"Set centrality axis: %s", bins);
251 if (!bins || bins[0] ==
'\0')
return;
254 if (spec.EqualTo(
"none", TString::kIgnoreCase))
258 if (spec.EqualTo(
"default", TString::kIgnoreCase) ||
259 spec.EqualTo(
"pbpb", TString::kIgnoreCase)) {
261 Double_t tmp[] = { 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
265 if (spec.EqualTo(
"ppb", TString::kIgnoreCase) ||
266 spec.EqualTo(
"pbp", TString::kIgnoreCase)) {
268 Double_t tmp[] = { 0, 5, 10, 20, 40, 60, 80, 100 };
280 DGUARD(fDebug,3,
"Set centrality axis, %d bins", n);
298 Error(
"AddTaskForwardMult",
"No analysis manager to connect to.");
305 AliError(
"Cannot proceed without and AOD handler");
310 AliError(
"The relevant task wasn't added to the train");
320 if (sumFile && sumFile[0] !=
'\0') sumOut = sumFile;
321 if (resFile && resFile[0] !=
'\0') resOut = resFile;
322 else if (sumFile && sumFile[0] !=
'\0') resOut = sumFile;
323 if (sumOut.IsNull()) sumOut = AliAnalysisManager::GetCommonFileName();
324 if (resOut.IsNull()) resOut = AliAnalysisManager::GetCommonFileName();
326 AliAnalysisDataContainer* sumCon =
327 mgr->CreateContainer(Form(
"%sSums", GetName()), TList::Class(),
328 AliAnalysisManager::kOutputContainer, sumOut);
329 AliAnalysisDataContainer* resCon =
330 mgr->CreateContainer(Form(
"%sResults", GetName()), TList::Class(),
331 AliAnalysisManager::kParamContainer, resOut);
332 mgr->ConnectInput(
this, 0, mgr->GetCommonInputContainer());
333 mgr->ConnectOutput(
this, 1, sumCon);
334 mgr->ConnectOutput(
this, 2, resCon);
346 DGUARD(fDebug,1,
"Create user ouput");
348 fSums->SetName(Form(
"%sSums", GetName()));
349 fSums->SetOwner(
true);
361 fVertex =
new TH1D(
"vertex",
"IP_{z} of all events",
362 vA->GetNbins(), vA->GetXbins()->GetArray());
363 fVertex->SetXTitle(
"IP_{z} [cm]");
371 fAccVertex->SetTitle(
"IP_{z} of accepted events");
378 1000,-2,2,1000,-2,2);
384 fCent =
new TH1D(
"cent",
"Centrality of all events",102, -1, 101);
385 fCent->SetXTitle(
"Centrality [%]");
386 fCent->SetYTitle(
"Events");
387 fCent->SetFillColor(kRed+2);
388 fCent->SetFillStyle(3002);
389 fCent->SetLineColor(kRed+2);
390 fCent->SetDirectory(0);
393 fAccCent->SetTitle(
"Centrality of accepted events");
408 cH->SetBinContent(1,1);
409 cH->GetXaxis()->SetTitle(
fCentAxis.GetTitle());
410 cH->GetXaxis()->SetName(
fCentAxis.GetName());
424 if (!
Book()) AliFatalF(
"Failed to book output objects for %s", GetName());
437 if (mc) obj = aod.FindListObject(
"ForwardMC");
438 else obj = aod.FindListObject(
"Forward");
440 if (verb) AliWarning(
"No forward object found");
451 TObject* obj = aod.FindListObject(
"MultClass");
453 if (verb) AliWarning(
"No multiplicity event class object found");
468 if (cent < 0) { cent = -.5; qual = 0xFFFF; }
469 if (cent > max) { cent = TMath::Max(max+.1,100.5); qual = 198; }
497 AliVVertex* gen = aod.GetPrimaryVertex();
498 AliVVertex* vtx[] = { aod.GetPrimaryVertexSPD(),
499 aod.GetPrimaryVertexTPC(),
502 for (
Int_t i = 0; i < 3; i++) {
503 if (!vtx[i] || (vtx[i] != gen && !vtx[i]->IsFromVertexer3D()))
520 if (mc) obj = aod.FindListObject(
"CentralClustersMC");
521 else obj = aod.FindListObject(
"CentralClusters");
523 if (verb) AliWarning(
"No central object found");
533 TObject* obj = aod.FindListObject(
"primary");
535 TH2D* ret =
static_cast<TH2D*
>(obj);
550 DGUARD(fDebug,1,
"Analyse the AOD event in UserExec");
558 if (!forward)
return;
630 AliAnalysisDataSlot* slot = GetOutputSlot(no);
632 AliWarningF(
"No output slot # %d defined", no);
636 AliAnalysisDataContainer* cont = slot->GetContainer();
638 AliWarningF(
"Output slot # %d has no container", no);
642 TFile*
file = cont->GetFile();
644 AliWarningF(
"Container of output slot %d has no file", no);
647 if (!file->IsWritable()) {
648 AliWarningF(
"File (%s) associated with output slot # %d not writable",
649 file->GetName(), no);
653 TDirectory* save = gDirectory;
655 AliAnalysisManager::GetAnalysisManager()->GetName());
658 AliInfoF(
"Wrote train name (%s) to output file %s",
659 tag->GetTitle(), file->GetName());
669 TList* list =
dynamic_cast<TList*
>(GetOutputData(1));
671 AliError(Form(
"No output list defined (%p)", GetOutputData(1)));
672 if (GetOutputData(1)) GetOutputData(1)->Print();
680 TString resName(Form(
"%sResults", GetName()));
691 AliErrorF(
"Failed to finalize this task (%s)", GetName());
698 AliAnalysisManager::GetAnalysisManager()
704 #define PF(N,V,...) \ 705 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__) 706 #define PFB(N,FLAG) \ 708 AliForwardUtil::PrintName(N); \ 709 std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \ 711 #define PFV(N,VALUE) \ 713 AliForwardUtil::PrintName(N); \ 714 std::cout << (VALUE) << std::endl; } while(false) 726 gROOT->IncreaseDirLevel();
732 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 StoreTrainName(Int_t no)
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)
TFile * file
TList with histograms for a given trigger.
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)