6 #include <AliAnalysisManager.h>
7 #include <AliAODHandler.h>
9 #include <AliESDEvent.h>
12 #include <TInterpreter.h>
22 fNeededCorrections(0),
35 fNeededCorrections(0),
44 SetTitle(title && title[0] !=
'\0' ? title :
"");
49 "ESD:AliESDRun.,AliESDHeader.,AliMultiplicity.,"
50 "AliESDFMD.,SPDVertex.,TPCVertex.,PrimaryVertex.";
52 DefineOutput(1, TList::Class());
53 DefineOutput(2, TList::Class());
63 Error(
"AddTaskForwardMult",
"No analysis manager to connect to.");
73 if (sumFile && sumFile[0] !=
'\0') sumOut = sumFile;
74 if (resFile && resFile[0] !=
'\0') resOut = resFile;
75 else if (sumFile && sumFile[0] !=
'\0') resOut = sumFile;
77 if (sumOut.IsNull() || sumOut.EqualTo(
"default", TString::kIgnoreCase))
78 sumOut = AliAnalysisManager::GetCommonFileName();
80 if (resOut.IsNull() || resOut.EqualTo(
"default", TString::kIgnoreCase))
81 resOut = AliAnalysisManager::GetCommonFileName();
84 mgr->ConnectInput(
this, 0, mgr->GetCommonInputContainer());
87 if (!sumOut.EqualTo(
"none", TString::kIgnoreCase)) {
88 TString sumName(Form(
"%s%s", old ?
"Forward" : GetName(),
90 AliAnalysisDataContainer* sumCon =
91 mgr->CreateContainer(sumName, TList::Class(),
92 AliAnalysisManager::kOutputContainer, sumOut);
93 mgr->ConnectOutput(
this, 1, sumCon);
96 if (!resOut.EqualTo(
"none", TString::kIgnoreCase)) {
97 TString resName(Form(
"%sResults", GetName()));
98 AliAnalysisDataContainer* resCon =
99 mgr->CreateContainer(resName, TList::Class(),
100 AliAnalysisManager::kParamContainer, resOut);
101 mgr->ConnectOutput(
this, 2, resCon);
144 else if (s.Contains(
"disp") || s.Contains(
"sat"))
147 AliWarningF(
"Unknown IPz method: %s, using normal", str);
156 TString macroPath(gROOT->GetMacroPath());
157 if (!macroPath.Contains(
"$(ALICE_PHYSICS)/PWGLF/FORWARD/analysis2")) {
158 macroPath.Append(
":$(ALICE_PHYSICS)/PWGLF/FORWARD/analysis2");
159 gROOT->SetMacroPath(macroPath);
163 const char* config =
gSystem->Which(gROOT->GetMacroPath(), mac.Data());
165 AliWarningF(
"%s not found in %s", mac.Data(), gROOT->GetMacroPath());
168 if (fTitle.IsNull()) fTitle = this->ClassName();
170 AliInfoF(
"Loading configuration of '%s' from %s", ClassName(), config);
171 gROOT->Macro(Form(
"%s((%s*)%p)", config, GetTitle(),
this));
173 AliInfoF(
"Unloading configuration script %s", config);
174 gInterpreter->UnloadFile(config);
186 DGUARD(fDebug,1,
"Doing local initialization");
198 DGUARD(fDebug,1,
"Create user ouput");
200 fList->SetName(Form(
"%sSums", GetName()));
205 dynamic_cast<AliAODHandler*
>(am->GetOutputEventHandler());
211 if (!
Book()) AliFatalF(
"Failed to book output objects for %s", GetName());
251 AliError(Form(
"No output list defined (%p)", GetOutputData(1)));
252 if (GetOutputData(1)) GetOutputData(1)->Print();
260 TString resName(Form(
"%sResults", GetName()));
271 AliErrorF(
"Failed to finalize this task (%s)", GetName());
300 DGUARD(fDebug,1,
"Checking corrections 0x%x", what);
301 if (what == 0)
return true;
305 AliErrorF(
"Check corrections=0x%x not null, "
306 "but no correction manager defined!",
326 DGUARD(fDebug,1,
"Read corrections 0x%x", what);
330 AliErrorF(
"Needed/extra corrections=0x%x/0x%x not null, "
331 "but no correction manager defined!",
349 AliWarning(
"Failed to read in some corrections, making task zombie");
377 DGUARD(fDebug,1,
"Get the ESD event");
380 if (IsZombie())
return 0;
385 AliWarning(
"No ESD event found for input event");
398 AliInfoF(
"Initializing with parameters from the ESD:\n"
399 " AliESDEvent::GetBeamEnergy() ->%f\n"
400 " AliESDEvent::GetBeamType() ->%s\n"
401 " AliESDEvent::GetCurrentL3() ->%f\n"
402 " AliESDEvent::GetMagneticField()->%f\n"
403 " AliESDEvent::GetRunNumber() ->%d",
404 esd->GetBeamEnergy(),
407 esd->GetMagneticField(),
408 esd->GetRunNumber());
420 AliError(
"Failed to read corrections, making this a zombie");
424 Printf(
"Vertex axis: %p Eta axis: %p", pv, pe);
425 if (!pv) AliFatal(
"No vertex axis defined");
426 if (!pe) AliFatal(
"No eta axis defined");
433 AliError(
"Failed to initialize sub-algorithms, making this a zombie");
448 DGUARD(fDebug,3,
"Mark AOD event for storage");
451 dynamic_cast<AliAODHandler*
>(am->GetOutputEventHandler());
452 if (ah) ah->SetFillAOD(kTRUE);
454 #define PF(N,V,...) \
455 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__)
456 #define PFB(N,FLAG) \
458 AliForwardUtil::PrintName(N); \
459 std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \
461 #define PFV(N,VALUE) \
463 AliForwardUtil::PrintName(N); \
464 std::cout << (VALUE) << std::endl; } while(false)
476 std::cout << std::setfill(
'=') << std::setw(75) <<
"="
477 << std::setfill(
' ') << std::endl;
479 gROOT->IncreaseDirLevel();
480 PF(
"Off-line trigger mask",
"0x%0x", fOfflineTriggerMask);
482 else PF(
"No correction manager",
"");
485 gROOT->DecreaseDirLevel();
virtual Bool_t IsMC() const
return jsonbuilder str().c_str()
virtual Bool_t ReadCorrections(const TAxis *&pe, const TAxis *&pv, Bool_t mc=false, Bool_t sat=false)
virtual Bool_t Event(AliESDEvent &esd)=0
virtual AliCorrectionManagerBase * GetManager() const
static TAxis * MakeFullIpZAxis(Int_t nCenter=20)
virtual void CreateBranches(AliAODHandler *)
virtual Bool_t Connect(const char *sumFile=0, const char *resFile=0)
virtual void Print(Option_t *option="") const
virtual void EnableCorrections(UInt_t what)
Bool_t InitCorrections(ULong_t run, UShort_t sys, UShort_t sNN, Short_t fld, Bool_t mc, Bool_t sat, Bool_t force=false)
virtual void MarkEventForStore() const
void SetIPzMethod(const char *str)
virtual Bool_t PostEvent()
Bool_t ReadRunDetails(const AliESDEvent *esd)
void Terminate(Option_t *option)
virtual TAxis * DefaultVertexAxis() const
virtual AliFMDEventInspector & GetEventInspector()=0
Various utilities used in PWGLF/FORWARD.
void SetVertexMethod(EVtxType t)
virtual Bool_t Configure(const char *macro="-default-")
virtual Bool_t CheckCorrections(UInt_t what, Bool_t verbose=true) const
void SetMC(Bool_t isMC=true)
virtual Bool_t CheckCorrections(UInt_t what) const
void UserCreateOutputObjects()
virtual void SetDebug(Int_t dbg)
void CreateOutputObjects(TList *dir)
AliCorrectionManagerBase * fCorrManager
#define DGUARD(L, N, F,...)
virtual Bool_t PreData(const TAxis &vertex, const TAxis &eta)
static void PrintTask(const TObject &o)
virtual Bool_t Finalize()
virtual const TAxis * GetEtaAxis() const
virtual void Print(Option_t *option="") const
void Print(Option_t *option="") const
virtual void PreCorrections(const AliESDEvent *esd)
virtual Bool_t PreEvent()
void UserExec(Option_t *option)
Int_t GetRunNumber(TString)
virtual AliESDEvent * GetESDEvent()
virtual TAxis * DefaultEtaAxis() const
UInt_t fNeededCorrections
virtual const char * DefaultConfig() const
void SetDebug(Int_t dbg=1)
virtual const TAxis * GetVertexAxis() const
virtual void SetupForData(const TAxis &vtxAxis)