--- /dev/null
+//
+// This macro sets all the aspects of configuration of an Analysis Train run
+// which are always the same for all kinds of analysis (local, PROOF, AliEn)
+//
+// Inputs:
+//
+// - taskList = a string containin all the 'add-task' macros to be used
+// - options = a set of keywords which drive some configurations
+// - outputFileName = name of file produced by train
+// - configPath = a path where all required config macros are stored
+//
+// Notes:
+//
+// - in case the source is an ESD, and if inputs are a MC production
+// the MC input handler is created by default
+//
+Bool_t AnalysisSetup
+(
+ Bool_t isMC,
+ const char *options,
+ const char *outputFileName,
+ const char *configPath
+)
+{
+ //
+ // === EXAMINE OPTIONS ==========================================================================
+ //
+
+ // this is done using the utility 'RsnOptions.C'
+ // which provides a unique way to interpret them
+
+ TString opt(options);
+ opt.ToUpper();
+ opt.ReplaceAll(" ", "");
+
+ Bool_t isMix = opt.Contains("MIX");
+ Bool_t isESD = opt.Contains("ESD");
+ Bool_t isAOD = opt.Contains("AOD");
+ Bool_t central = opt.Contains("CEN");
+ Bool_t peripheral = opt.Contains("PER");
+ Bool_t useTender = opt.Contains("TENDER");
+ Bool_t usePhysSel = opt.Contains("PHYS");
+ Bool_t noV0 = opt.Contains("NOV0");
+
+ //
+ // === LOAD LIBRARIES ===========================================================================
+ //
+
+ gSystem->Load("libVMC.so");
+ gSystem->Load("libTree.so");
+ gSystem->Load("libPhysics.so");
+ gSystem->Load("libMatrix.so");
+ gSystem->Load("libMinuit.so");
+ gSystem->Load("libXMLParser.so");
+ gSystem->Load("libGui.so");
+ gSystem->Load("libSTEERBase.so");
+ gSystem->Load("libESD.so");
+ gSystem->Load("libAOD.so");
+ gSystem->Load("libANALYSIS.so");
+ gSystem->Load("libANALYSISalice.so");
+ gSystem->Load("libEventMixing.so");
+ gSystem->Load("libCORRFW.so");
+
+ if (useTender) {
+ ::Info("AnalysisSetup", "Loading tender libraries");
+ gSystem->Load("libTENDER.so");
+ gSystem->Load("libTENDERSupplies.so");
+ }
+
+ if (!AliAnalysisAlien::SetupPar("PWG2resonances.par")) return kFALSE;
+
+ //
+ // === ANALYSIS MANAGER CONFIGURATION ===========================================================
+ //
+
+ // create analysis manager
+ AliAnalysisManager *mgr = new AliAnalysisManager("RsnAnalysisManager");
+ mgr->SetCommonFileName(outputFileName);
+ ::Info("AnalysisSetup", "Common file name: %s", outputFileName);
+
+ //
+ // === INPUT / OUTPUT HANDLER CONFIGURATION =====================================================
+ //
+
+ // create input handler
+ // since there is an exit point above if the job
+ // isn't either ESD or AOD, here we don't recheck that
+ if (isESD) {
+ ::Info("AnalysisSetup", "Configuring for ESD");
+ AliESDInputHandler *esdHandler = new AliESDInputHandler();
+ mgr->SetInputEventHandler(esdHandler);
+ // if possible, create also MC handler
+ if (isMC) {
+ ::Info("AnalysisSetup", "Creating MC handler");
+ AliMCEventHandler *mcHandler = new AliMCEventHandler();
+ mgr->SetMCtruthEventHandler(mcHandler);
+ }
+ } else if (isAOD) {
+ ::Info("AnalysisSetup", "Configuring for AOD");
+ AliAODInputHandler *aodHandler = new AliAODInputHandler();
+ mgr->SetInputEventHandler(aodHandler);
+ } else {
+ ::Error("AnalysisSetup", "Require ESD or AOD");
+ return kFALSE;
+ }
+
+ //
+ // === CONFIGURE AND INSERT PHYSICS SELECTION & TENDER SUPPLY ===================================
+ //
+
+ // add event selection for data if running ESD
+ if (isESD) {
+ // add tender supply for TOF
+ if (useTender) {
+ ::Info("AnalysisSetup", "options '%s' require to add tender", options);
+ gROOT->LoadMacro(Form("%s/AddTenderSupplies.C", configPath));
+ AddTenderSupplies(100.0, kTRUE, kFALSE);
+ }
+
+ // add event selection for data
+ // and swtich off VZERO if tender is not used
+ if (usePhysSel) {
+ ::Info("AnalysisSetup", "options '%s' require to add physics selection", options);
+ gROOT->LoadMacro("$(ALICE_ROOT)/ANALYSIS/macros/AddTaskPhysicsSelection.C");
+ AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(isMC);
+ if (noV0) {
+ ::Info("AnalysisSetup", "options '%s' require to skip V0 info", options);
+ physSelTask->GetPhysicsSelection()->SetSkipV0(kTRUE);
+ }
+ }
+ }
+
+ ::Info("AnalysisSetup", "Setup successful");
+ return kTRUE;
+}