]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/AddAMRsn.C
Updated lego_train macros and PWG2 -> PWGLF (M.Vala)
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddAMRsn.C
1 Bool_t AddAMRsn(TString analysisSource = "proof", TString analysisMode = "test",TString input="aod",TString inputMC="", TString postfix = "",TString idStr="0")
2 {
3
4    analysisSource.ToLower();analysisMode.ToLower();
5
6    if (!RsnLoadMacro("RsnManager.C")) return kFALSE;
7    TList *listRsn = RsnManager();
8
9    Bool_t useMC = !inputMC.CompareTo("mc");
10    Bool_t valid;
11
12    Int_t eventMixinPar = AliAnalysisManager::GetGlobalInt("rsnUseEventMixingPar",valid);
13    Int_t rsnPar = AliAnalysisManager::GetGlobalInt("rsnUseRSNPar",valid);
14    if (eventMixinPar) rsnPar = 1;
15
16    Int_t pidResponse = AliAnalysisManager::GetGlobalInt("rsnUsePIDResponse",valid);
17    Int_t useRsnIH = AliAnalysisManager::GetGlobalInt("rsnUseRsnInputHandler",valid);
18    Int_t physSel = AliAnalysisManager::GetGlobalInt("rsnUsePhysSel",valid);
19    Int_t splitMgrByTask = AliAnalysisManager::GetGlobalInt("rsnSplitMgrByTasks",valid);
20
21    Int_t useMixing = AliAnalysisManager::GetGlobalInt("rsnUseMixing",valid);
22
23    Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
24    Int_t mixNum = AliAnalysisManager::GetGlobalInt("rsnNumMix",valid);
25
26    // ALICE stuff
27    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
28    if (!mgr) { Printf("Error[AddAMRsn] mgr is null !!!"); return kFALSE; }
29
30    AliAnalysisGrid *analysisPlugin = mgr->GetGridHandler();
31    if (!analysisPlugin) { Printf("Error[AddAMRsn] : analysisPlugin is null !!!"); return kFALSE; }
32
33    TString myAdditionalLibs;
34    if (eventMixinPar) { AliAnalysisAlien::SetupPar("EventMixing"); myAdditionalLibs += " EventMixing.par"; }
35    else { gSystem->Load("libEventMixing.so"); myAdditionalLibs += " libEventMixing.so"; }
36
37    TString rsnLibName = "PWGLFresonances";
38    if (gSystem->Getenv("ALICE_ROOT")) {
39       TString alirootVersion = gSystem->GetFromPipe("aliroot --version | awk '{print $3}'");
40       if (alirootVersion<"v5-02-19-AN" && alirootVersion.CompareTo("trunk")) rsnLibName = "PWG2resonances";
41       if (rsnPar) { AliAnalysisAlien::SetupPar(rsnLibName.Data()); myAdditionalLibs += Form(" %s.par",rsnLibName.Data()); }
42       else { gSystem->Load(Form("lib%s.so",rsnLibName.Data())); myAdditionalLibs += Form(" lib%s.so",rsnLibName.Data()); }
43    }
44    analysisPlugin->SetAdditionalLibs(myAdditionalLibs.Data());
45
46    AliMultiInputEventHandler *multiInputHandler = mgr->GetInputEventHandler();
47    AliRsnInputHandler *rsnIH=0;
48
49    if (pidResponse) {
50       // add PID Response Handler
51       if (!RsnLoadMacro("AddPIDResponseInputHandler.C")) return kFALSE;
52       AddPIDResponseInputHandler(multiInputHandler);
53    }
54
55    if (useRsnIH) {
56       // add Rsn input handler (it has to be after ESD,MC,Tender input handler, but before Mixing)
57       AliRsnInputHandler *rsnIH = new AliRsnInputHandler();
58       multiInputHandler->AddInputEventHandler(rsnIH);
59    }
60
61    if (physSel) {
62       gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
63       AddTaskPhysicsSelection(useMC);
64
65       // maybe we can put it in $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C
66       AliMultiInputEventHandler *multiIH = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
67       if (multiIH) {
68          AliESDInputHandler *esdIH = dynamic_cast<AliESDInputHandler *>(multiIH->GetFirstInputEventHandler());
69          if (esdIH) esdIH->SetEventSelection(multiIH->GetEventSelection());
70          AliAODInputHandler *aodIH = dynamic_cast<AliAODInputHandler *>(multiIH->GetFirstInputEventHandler());
71          if (aodIH) aodIH->SetEventSelection(multiIH->GetEventSelection());
72       }
73    }
74
75
76    // load and run AddTask macro
77    if (!RsnLoadMacro("AddRsnAnalysisTask.C")) return kFALSE;
78    if (!RsnLoadMacro("RsnConfig.C")) return kFALSE;
79    if (!RsnLoadMacro("AddMixingHandler.C")) return kFALSE;
80    if (!analysisSource.CompareTo("grid")) {
81       if (!RsnLoadMacro("RsnGirdPlugin.C")) return kFALSE;
82       RsnGridPlugin();
83    }
84
85    if (splitMgrByTask) {
86       Int_t iTask=0;
87       TList *l=0;
88       TNamed *rsnObj = 0;
89       AliAnalysisTaskSE *task=0;
90       TString rsnName,rsnCutName;
91       TIter next(listRsn);
92       while ((rsnObj = (TNamed *)next())) {
93          l = new TList();
94          Printf("Adding task for RSN:%s CUT:%s ",rsnObj->GetName(),rsnObj->GetTitle());
95          l->Add(new TNamed(*rsnObj));
96          task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,l,Form("%s_%d",postfix.Data(),iTask++));
97          if (useMixing) {
98             // add mixing handler (uncomment to turn on Mixnig)
99             AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
100          }
101       }
102    } else {
103       task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,listRsn,postfix);
104       if (useMixing) {
105          // add mixing handler (uncomment to turn on Mixnig)
106          AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
107       }
108    }
109
110    return kTRUE;
111 }
112
113 Bool_t RsnLoadMacro(TString macro,TString path="") {
114
115    Bool_t valid;
116    TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
117    if (!valid) lego_path = "$ALICE_ROOT/PWG2/RESONANCES/macros/lego_train";
118
119    if (!gSystem->AccessPathName(macro.Data())) {
120       gROOT->LoadMacro(macro.Data());
121       Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
122       return kTRUE;
123    }
124
125    if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
126       gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
127       Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
128       return kTRUE;
129    }
130
131    Printf("Error loading %s",macro.Data());
132
133    return kFALSE;
134 }