24 # include <TApplication.h> 25 # include <TStopwatch.h> 26 # include <AliAnalysisManager.h> 27 # include <AliVEvent.h> 28 # include <AliVEventHandler.h> 29 # include <AliPhysicsSelection.h> 30 # include <AliPhysicsSelectionTask.h> 31 # include <AliCentralitySelectionTask.h> 32 # include <AliESDInputHandler.h> 33 # include <AliESDInputHandlerRP.h> 34 # include <AliAODInputHandler.h> 35 # include <AliAODHandler.h> 36 # include <AliMCEventHandler.h> 45 class AliVEventHandler;
47 class AliInputEventHandler;
81 fOptions.
Add(
"date",
"YYYY-MM-DD HH:MM",
"Set date",
"now");
82 fOptions.
Add(
"ps",
"MODE",
"Physics selection mode",
"");
83 fOptions.
Add(
"verbose",
"LEVEL",
"Set verbosity level", 0);
84 fOptions.
Add(
"url",
"URL",
"Job location & input URL",
"");
86 fOptions.
Add(
"events",
"N",
"Number of events to analyse",-1);
87 fOptions.
Add(
"type",
"ESD|AOD|USER",
"Input data stype",
"");
89 fOptions.
Add(
"branches",
"Load only requested branches",
false);
90 fOptions.
Add(
"version",
"Print version and exit",
false);
91 fOptions.
Add(
"tender",
"WHICH",
"Specify tender supplies",
"");
92 fOptions.
Add(
"ocdb",
"(TENDER_SNAPSHOT)",
"Enable OCDB",
"");
93 fOptions.
Add(
"friends",
"(AOD_FRIENDS)",
"Enable friends (list of files)",
"");
94 fOptions.
Add(
"cent-oadb",
"PERIOD",
"Alternative OADB for centrality",
"");
95 fOptions.
Add(
"no-link",
"Do not make symlink to output",
false);
96 fOptions.
Add(
"old-cent",
"Add old centrality task to train",
false);
97 fOptions.
Add(
"aod-cent",
"Recalculate centrality in AODs",
false);
122 if (&o ==
this)
return *
this;
149 Info(
"Init",
"Running with TrainSetup version %d",
kVersion);
157 Error(
"Init",
"Failed to make the worker for URL %s", url.Data());
166 if (it.EqualTo(
"ESD",TString::kIgnoreCase)) type =
Railway::kESD;
167 else if (it.EqualTo(
"AOD",TString::kIgnoreCase)) type =
Railway::kAOD;
168 else if (it.EqualTo(
"user",TString::kIgnoreCase))
199 if (verbose > 0) mgr->SetDebugLevel(verbose);
200 mgr->SetAutoBranchLoading(!
fOptions.
Has(
"branches"));
202 mgr->SetUseProgressBar(kTRUE, 100);
206 if (inputHandler) mgr->SetInputEventHandler(inputHandler);
210 if (mcHandler) mgr->SetMCtruthEventHandler(mcHandler);
214 if (outputHandler) mgr->SetOutputEventHandler(outputHandler);
217 gROOT->SetMacroPath(Form(
"%s:%s:$ALICE_ROOT/ANALYSIS/macros:" 218 "$ALICE_PHYSICS/OADB/macros",
219 cwd.Data(), gROOT->GetMacroPath()));
224 if (!supplies.IsNull()) {
249 TIter next(mgr->GetTasks());
251 while ((sub = static_cast<AliAnalysisTask*>(next()))) {
254 se->SetDebugLevel(verbose);
262 if (!mgr->InitAnalysis()) {
263 gSystem->ChangeDirectory(cwd.Data());
264 Error(
"Init",
"Failed to initialise train");
270 mgr->SetUseProgressBar(
true, 100);
278 TIter next(mgr->GetTasks());
280 while ((sub = static_cast<AliAnalysisTask*>(next()))) {
299 Info(where,
"took %4d:%02d:%06.3f", h, m, t);
313 if (!
Init())
throw TString(
"Failed to intialize the train");
320 throw TString(
"Only did setup, no running");
331 gSystem->ChangeDirectory(cwd.Data());
334 if (ret < 0)
throw TString(
"Analysis failed");
339 if (status) Warning(
"Run",
"%s", e.Data());
340 else Error(
"Run",
"%s", e.Data());
347 gSystem->Exec(Form(
"rm -f last_%s", escaped.Data()));
348 gSystem->Exec(Form(
"ln -sf %s last_%s",
384 o <<
"TrainSetup version " <<
kVersion << std::endl;
400 o <<
"Usage: RunTrain(NAME, CLASS, OPTIONS)";
402 o <<
"\n\nTrain Options:\n";
418 o <<
"Possible URL forms:\n\n";
451 throw TString(
"No class name specified");
453 throw TString(
"No train name specified");
455 mkLib.ReplaceAll(
"-std=c++14",
"-std=c++98");
457 gSystem->SetMakeSharedLib(mkLib);
459 gROOT->ProcessLine(
"gSystem->RedirectOutput(\"build.log\",\"w\");");
461 Int_t r1 = gROOT->LoadMacro(Form(
"%s.C+g", cls.Data()), &error);
462 gROOT->ProcessLine(
"gSystem->RedirectOutput(0);");
464 throw TString::Format(
"Failed to load setup %s: %d - see build.log",
468 TString create = TString::Format(
"new %s(\"%s\")",
469 cls.Data(), name.Data());
470 gROOT->ProcessLine(
"gSystem->RedirectOutput(\"build.log\",\"a\");");
471 Long_t retP = gROOT->ProcessLine(create, &error);
472 gROOT->ProcessLine(
"gSystem->RedirectOutput(0);");
474 throw TString::Format(
"Failed to make object of class %s " 475 "(see build.log): 0x%08lx/%d\n\t%s",
476 cls.Data(), retP, error, create.Data());
481 if (!train->Options().Parse(opts))
482 throw TString(
"Failed to parse options");
487 if (!train->Help(std::cout, asProg)) {
492 if (!train->Version(std::cout)) {
501 if (!e.IsNull()) Error(
"Main",
"%s", e.Data());
505 if (gApplication && asProg) {
508 gApplication->Terminate(ret ? 0 : 1);
540 Bool_t esdRecPoints=
false)
542 Info(
"CreateInputHandler",
"Making handler for %d (%d)",
544 AliVEventHandler* ret = 0;
547 AliESDInputHandler* input = 0;
548 if (!esdRecPoints) input =
new AliESDInputHandler();
550 Info(
"CreateInputHandler",
"Special handler for rec-points");
551 AliESDInputHandlerRP* esd =
new AliESDInputHandlerRP();
561 AliAODInputHandler* input =
new AliAODInputHandler();
566 while ((ofr = nfr())) input->AddFriend(const_cast<char*>(ofr->GetName()));
586 AliMCEventHandler* mcHandler =
new AliMCEventHandler();
587 mcHandler->SetReadTR(
true);
599 AliAODHandler* ret =
new AliAODHandler();
602 ret->SetOutputFileName(
"AliAOD.root");
605 ret->SetOutputFileName(
"AliAOD.pass2.root");
699 if (opt.EqualTo(
"NONE",TString::kIgnoreCase))
return;
704 AliPhysicsSelection* ps = 0;
705 AliInputEventHandler* input =
706 dynamic_cast<AliInputEventHandler*
> (mgr->GetInputEventHandler());
710 if (opt.Contains(
"BARE",TString::kIgnoreCase)) {
712 ps =
new AliPhysicsSelection();
713 if (mc) ps->SetAnalyzeMC();
715 input->SetEventSelection(ps);
719 CoupleSECar(
"AddTaskPhysicsSelection.C", Form(
"%d", mc), AliVEvent::kAny);
720 mgr->RegisterExtraFile(
"event_stat.root");
724 ps =
dynamic_cast<AliPhysicsSelection*
>(input->GetEventSelection());
726 if (opt.Contains(
"CUSTOM",TString::kIgnoreCase)) {
729 Int_t eq = opt.Index(
"custom=",7,0,TString::kIgnoreCase);
731 Int_t end = opt.Index(
".C",2,eq+7,TString::kIgnoreCase);
733 macro =
opt(eq+7,end+2-eq-7);
738 if (rmacro.IsNull()) {
739 Error(
"CreatePhysicsSelection",
"Custom PS script %s not found",
743 Info(
"CreatePhysicsSelection",
"Loading custom PS from %s",rmacro.Data());
745 gROOT->Macro(Form(
"%s((AliPhysicsSelection*)%p)", base.Data(), ps));
748 if (opt.Contains(
"ALL",TString::kIgnoreCase)) {
751 Info(
"CreatePhysicsSelection",
"Skipping trigger selection");
752 ps->SetSkipTriggerClassSelection(
true);
763 AliVEventHandler* inp = mgr->GetInputEventHandler();
765 Warning(
"CreateCentralitySelection",
"No input handler");
771 Bool_t isAOD = inp->IsA()->InheritsFrom(AliAODInputHandler::Class());
773 Info(
"CreateCentralitySelection",
774 "No multiplicity selection for AOD input");
781 gROOT->SetMacroPath(Form(
"$ALICE_PHYSICS/OADB/COMMON/MULTIPLICITY/macros" 782 ":%s", gROOT->GetMacroPath()));
784 FromOption(task,
"AlternateOADBforEstimators",
"cent-oadb",
"");
787 if (centOADB.EndsWith(
".root")) {
790 per.ReplaceAll(
"OADB-",
"");
791 per.ReplaceAll(
".root",
"");
792 SetOnTask(task,
"AlternateOADBforEstimators", per);
795 SetOnTask(task,
"AlternateOADBFullManualBypassMC", base);
797 SetOnTask(task,
"AlternateOADBFullManualBypas", base);
800 if (!task->HasBranches()) {
803 task->SetBranches(
"ESD:AliESDRun.,AliESDHeader.,AliESDZDC.," 804 "AliESDVZERO.,AliESDTZERO.,TPCVertex.," 805 "SPDVertex.,PrimaryVertex.,AliMultiplicity." 806 "SPDPileupVertices,TrkPileupVertices," 808 "AOD:header,vertices,AliAODTZERO,AliAODVZERO," 809 "AliAODZDC,AliAODAD");
815 Form(
"true,%s", isAOD ?
"true" :
"false"));
816 AliCentralitySelectionTask* ctask =
817 dynamic_cast<AliCentralitySelectionTask*
>(task);
819 if (mc) ctask->SetMCInput();
846 Error(
"CoupleCar",
"Macro %s not found", macro.Data());
851 cmd.Append(TString::Format(
"(%s)", args.Data()));
852 Info(
"CoupleCar",
"Execute %s", cmd.Data());
854 Long_t ret = gROOT->Macro(cmd.Data(), &err,
false);
856 Error(
"CoupleCar",
"Failed to execute %s (%ld)", cmd.Data(), ret);
890 if (mask > 0) task->SelectCollisionCandidates(mask);
917 Bool_t verbose=
true)
const 921 ::Warning(
"FindCar",
"No manager defined");
925 if (!task && verbose)
926 ::Warning(
"FindCar",
"Task \"%s\" not found in train",
950 Long_t ret = gROOT->ProcessLine(
"new AliTaskCDBconnect(\"cdb\")");
952 Fatal(
"AddOCDBConnect",
"Failed to add OCDB connection task");
956 if (!task->HasBranches()) task->SetBranches(
"ESD:AliESDRun. AOD:header");
960 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
991 if (flag == 0)
return 0;
996 case kTenderV0: n =
"VZERO"; c =
"VZERO";
break;
998 case kTenderPtFix: n =
"TrackFix"; c =
"PtInvFix";
break;
999 case kTenderT0: n =
"T0"; c =
"TZERO";
break;
1000 case kTenderTOF: n =
"TOF"; c =
"TOF";
break;
1001 case kTenderTRD: n =
"TRD"; c =
"TRD";
break;
1004 case kTenderPID: n =
"PID"; c =
"PID";
break;
1008 Warning(
"AddTenderSupply",
"Unknown tender flag: 0x%08x", flag);
1013 case kTenderV0: m = Form(
"s->SetDebug(%d);", debug);
break;
1018 case kTenderTRD: m = Form(
"s->SetDebugLevel(%d);", debug);
break;
1021 TString cls(Form(
"Ali%sTenderSupply", c.Data()));
1023 gROOT->ProcessLine(Form(
"{ %s* s = new %s(\"%s\");" 1024 "((AliTender*)%p)->AddSupply(s);%s" 1031 void* ptr =
reinterpret_cast<void*
>(ret);
1032 Info(
"AddTenderSupply",
"Adding supply %s (an %s object): %p",
1033 n.Data(), cls.Data(), ptr);
1046 if (supplies.Contains(
"V0") ||
1047 supplies.Contains(
"VZERO")) which |=
kTenderV0 ;
1048 if (supplies.Contains(
"TPC")) which |=
kTenderTPC ;
1049 if (supplies.Contains(
"PTFIX")) which |=
kTenderPtFix ;
1050 if (supplies.Contains(
"T0")) which |=
kTenderT0 ;
1051 if (supplies.Contains(
"TOF")) which |=
kTenderTOF ;
1052 if (supplies.Contains(
"TRD")) which |=
kTenderTRD ;
1053 if (supplies.Contains(
"VTX")) which |=
kTenderVTX ;
1054 if (supplies.Contains(
"EMCAL")) which |=
kTenderEMCAL ;
1055 if (supplies.Contains(
"PID")) which |=
kTenderPID ;
1066 if (which == 0)
return;
1073 Long_t ret = gROOT->ProcessLine(
"new AliTender(\"Tender\")");
1075 Warning(
"AddTender",
"Failed to make tender");
1078 void* tender =
reinterpret_cast<void*
>(ret);
1079 gROOT->ProcessLine(Form(
"((AliTender*)%p)->SetCheckEventSelection(%d)",
1081 gROOT->ProcessLine(Form(
"((AliTender*)%p)->SetDebugLevel(%d)",
1088 else if (ocdb.EndsWith(
".root")) {
1091 gROOT->ProcessLine(Form(
"AliCDBManager::Instance()->" 1092 "SetSnapshotMode(\"%s\");",
1096 gROOT->ProcessLine(Form(
"((AliTender*)%p)->SetDefaultCDBStorage(\"%s\")",
1097 tender, ocdb.Data()));
1109 gROOT->ProcessLine(Form(
"((AliTender*)%p)->GetSupplies()->Print()",tender));
1114 AliAnalysisDataContainer* cnt =
1115 mgr->CreateContainer(
"tender_event",
1116 AliESDEvent::Class(),
1117 AliAnalysisManager::kExchangeContainer,
1119 mgr->ConnectInput (tsk, 0, mgr->GetCommonInputContainer());
1120 mgr->ConnectOutput(tsk, 1, cnt);
1218 const char* cls = task->ClassName();
1220 gROOT->ProcessLine(Form(
"((%s*)%p)->Set%s(%s)",cls,task,what,val));
1328 if (!mgr)
return false;
1329 return mgr->GetMCtruthEventHandler() != 0;
1344 Warning(
"CreateMonitors",
"Monitoring not supported yet (%s)", name.Data());
1370 char c[] = {
' ',
'/',
'@', 0 };
1373 char tmp[] = { *p,
'\0' };
1374 escaped.ReplaceAll(tmp,
"_");
1377 if (!datimeStr.IsNull() &&
1378 !datimeStr.EqualTo(
"none", TString::kIgnoreCase)) {
1380 if (datimeStr.EqualTo(
"now", TString::kIgnoreCase))
1385 const char* formats[] = {
"%Ec",
1392 const char** f = formats;
1394 while (*f && !found) {
1402 if (strptime(datimeStr.Data(), *f, &t) != 0) found =
true;
1407 datime.Set(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, 0);
1410 if (datime.GetYear() <= 1995 ||
1411 datime.GetMonth() == 0 ||
1412 datime.GetDay() == 0)
return escaped;
1413 datimeStr = Form(
"%04d%02d%02d_%02d%02d",
1418 datime.GetMinute());
1419 escaped.Append(Form(
"_%s", datimeStr.Data()));
1436 Error(
"SetupWorkingDirectory",
"File/directory %s does not exists",
1443 if (!overwrite && exists) {
1444 Error(
"SetupWorkingDirectory",
"File/directory %s already exists",
1451 if (
gSystem->MakeDirectory(nam.Data())) {
1452 Error(
"SetupWorkingDirectory",
"Failed to make directory '%s'",
1459 if (!
gSystem->ChangeDirectory(nam.Data())) {
1460 Error(
"SetupWorkingDirectory",
"Failed to change directory to %s",
1483 if (tmp.
Find(
"overwrite")) tmp.
Set(
"overwrite");
1507 std::ofstream o(Form(
"%s.sh", out.Data()));
1510 tmp.
Set(
"url",
"${url}");
1511 o <<
"#!/bin/bash\n\n" 1512 <<
"class=\"" << cls <<
"\"\n" 1513 <<
"name=\"" << name <<
"\"\n" 1514 <<
"url=\"" << url <<
"\"\n\n" 1515 <<
"# Available options\n" 1517 tmp.
Help(o,
"# --");
1520 <<
"# Available URI options\n" 1522 uopts->
Help(o,
"# ");
1525 <<
"opts=(--class=$class \\\n" 1527 tmp.
Store(o,
" \\\n --",
"",
true);
1529 <<
"echo \"Running runTrain ${opts[@]} $@\"\n" 1530 <<
"runTrain \"${opts[@]}\" $@\n\n" 1531 <<
"# EOF" << std::endl;
1533 gSystem->Exec(Form(
"chmod a+x %s.sh", out.Data()));
1551 std::ofstream o(Form(
"%s.C", out.Data()));
1552 o <<
"// Available options:\n" 1557 <<
"// Available URI options\n";
1558 uopts->
Help(o,
"// ");
1561 <<
"Bool_t " << out <<
"()\n" 1563 <<
" TString name(\"" << name <<
"\");\n" 1564 <<
" TString cls(\"" << cls <<
"\");\n" 1565 <<
" TUrl uri(\"" << opts.
Get(
"url") <<
"\");\n" 1567 <<
" TString opts(";
1568 tmp.
Store(o,
"\"",
",\"\n ",
false);
1570 <<
" TString path(";
1571 TString path(gROOT->GetMacroPath());
1572 TObjArray* elements = path.Tokenize(
":");
1573 TObjString* element = 0;
1574 TIter next(elements);
1575 while ((element = static_cast<TObjString*>(next()))) {
1576 if (element->String().IsNull())
continue;
1577 o <<
"\n \"" << element->GetName() <<
":\"";
1581 <<
" path.Append(\"$ALICE_PHYSICS/PWGLF/FORWARD/trains\");\n" 1582 <<
" gROOT->SetMacroPath(path);\n\n" 1583 <<
" gROOT->LoadMacro(\"RunTrain.C\");\n\n" 1584 <<
" return RunTrain(name, cls, uri, opts);\n" 1588 <<
"//" << std::endl;
1606 o <<
" echo \"Nothing to do for " <<
ClassName()
1607 <<
" train\"" << std::endl;
1627 std::ofstream f(
"post.sh");
1629 Error(
"SavePostAll",
"Failed to open post.sh script");
1632 f <<
"#!/bin/bash\n" 1633 <<
"# Generated by " <<
ClassName() <<
"\n" 1644 <<
"if test ! -f Download.C ;then\n" 1649 <<
"if test ! -f .download ; then\n" 1650 <<
" aliroot -l -b -q Download.C\\(1\\)\n" 1651 <<
" touch .download\n" 1655 <<
"for i in root_archive_*.zip ; do\n" 1656 <<
" d=`basename $i .zip` \n" 1657 <<
" if test ! -d $d ; then\n" 1658 <<
" echo \"Directory $d missing\"\n" 1662 <<
" (cd $d && doall)\n" 1667 gSystem->Exec(
"chmod a+x post.sh");
Double_t AsDouble(const TString &name, Double_t def=0) const
virtual void CreateCentralitySelection(Bool_t mc)
virtual void CreateMonitors()
void SetOnTaskGeneric(AliAnalysisTaskSE *task, const char *what, const char *val)
virtual AliVEventHandler * CreateInputHandler(UShort_t type, Bool_t esdRecPoints=false)
void Help(std::ostream &o, const char *prefix=" ") const
void SavePostShellScript()
void FromOption(AliAnalysisTaskSE *task, const char *what, const char *opt, Bool_t)
static Railway * Create(const TUrl &url, Int_t verbose=0)
Bool_t Help(std::ostream &o=std::cout, bool asProg=false)
Option * Find(const TString &name) const
virtual void AddOCDBConnect()
void FromOption(AliAnalysisTaskSE *task, const char *what, const char *opt, const char *defval)
Bool_t AsBool(const TString &name) const
virtual Bool_t LoadAliPhysics()
virtual Long64_t Run(Long64_t nEvents=-1)=0
virtual AliAnalysisTask * FindCar(const TString &name, Bool_t verbose=true) const
virtual void Print(Option_t *="") const
void SetOnTask(AliAnalysisTaskSE *task, const char *what, const char *val)
virtual const Char_t * UrlHelp() const =0
void Store(std::ostream &o, const char *prefix="", const char *delim=",", bool quote=true, bool onlySet=false) const
virtual void AddTender(UShort_t which)
virtual AliVEventHandler * CreateMCHandler(UShort_t, bool mc)
Int_t AsInt(const TString &name, Int_t def=0) const
virtual void AuxSave(const TString &, Bool_t)
const char * AsString(const TString &name, const TString &def="") const
virtual Bool_t LoadAliROOT()
static void SaveSetupShell(const TString &out, const TString &cls, const TString &name, const OptionList &opts, const OptionList *uopts)
static TString EscapeName(const char *name, TString &datimeStr)
virtual const char * Desc() const =0
void SetOnTask(AliAnalysisTaskSE *task, const char *what, Bool_t val)
virtual AliAnalysisTaskSE * CoupleSECar(const TString ¯o, UInt_t mask=0)
void FromOption(AliAnalysisTaskSE *task, const char *what, const char *opt, Int_t defval)
virtual AliVEventHandler * CreateOutputHandler(UShort_t type)
virtual Bool_t LoadROOT()
Long64_t AsLong(const TString &name, Long64_t def=0) const
const TString & Get(const TString &name) const
virtual Bool_t PreSetup()=0
virtual AliAnalysisTask * CoupleCar(const TString ¯o)
static void ShowUrlHelp(const TString &cl)
virtual UShort_t Mode() const =0
Bool_t Has(const TString &name) const
void Print(Option_t *="") const
virtual void CreateTasks(AliAnalysisManager *mgr)=0
TrainSetup(const TrainSetup &o)
virtual Bool_t PostSetup()=0
const OptionList & Options() const
virtual AliAnalysisManager * CreateAnalysisManager(const char *name)
void Set(const TString &name, const TString &value)
void PrintTimer(TStopwatch &timer, const char *where)
virtual Bool_t IsMC() const
TrainSetup & operator=(const TrainSetup &o)
Double_t nEvents
plot quality messages
virtual Short_t InputType() const
void SetOnTask(AliAnalysisTaskSE *task, const char *what, Int_t val)
void LoadOADB(Bool_t asPar=false)
void FromOption(AliAnalysisTaskSE *task, const char *what, const char *opt, Long64_t defval)
Option * Add(const TString &name, const TString &arg, const TString &desc, const TString &val="")
TrainSetup(const TString &name)
void SetOnTask(AliAnalysisTaskSE *task, const char *what, Double_t val)
virtual void SaveSetup(Bool_t asShellScript)
virtual Bool_t LoadAux(const TString &name, Bool_t copy=false)
Bool_t SetupWorkingDirectory()
Base class for analysis helpers.
void FromOption(AliAnalysisTaskSE *task, const char *what, const char *opt, Double_t defval)
virtual void * AddTenderSupply(void *tender, UShort_t flag, Int_t debug)
virtual Bool_t HasMCHandler() const
virtual UShort_t Operation() const
void Show(std::ostream &o, const char *prefix=" ") const
virtual const Char_t * ClassName() const =0
virtual void UsePar(Bool_t &use)
static Bool_t Main(const TString &name, const TString &cls, const TCollection *opts, Bool_t asProg=true, Bool_t spawn=false)
void SetOnTask(AliAnalysisTaskSE *task, const char *what, Long64_t val)
virtual AliAnalysisTask * CoupleCar(const TString ¯o, const TString &args)
virtual void AddMonitor(const TString &name)
Bool_t Version(std::ostream &o=std::cout)
virtual void AddTender(const TString &sup)
virtual void PostShellCode(std::ostream &o)
virtual void CreatePhysicsSelection(Bool_t mc, AliAnalysisManager *mgr)
virtual AliAnalysisTaskSE * CoupleSECar(const TString ¯o, const TString &args, UInt_t mask=0)
virtual Bool_t LoadLibrary(const TString &name, Bool_t slave=true, Bool_t forcePar=false)=0
void Remove(const TString &name)
static void SaveSetupROOT(const TString &out, const TString &cls, const TString &name, const OptionList &opts, const OptionList *uopts)
void SetOnTask(AliAnalysisTaskSE *task, const char *what, UInt_t val)