]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/AddAMRsn.C
PWG2/SPECTRA -> PWGLF/SPECTRA migration
[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    if (rsnPar) { AliAnalysisAlien::SetupPar("PWG2resonances"); myAdditionalLibs += " PWG2resonances.par"; }
38    else { gSystem->Load("libPWG2resonances.so"); myAdditionalLibs += " libPWG2resonances.so"; }
39
40    analysisPlugin->SetAdditionalLibs(myAdditionalLibs.Data());
41
42
43    AliMultiInputEventHandler *multiInputHandler = mgr->GetInputEventHandler();
44    AliRsnInputHandler *rsnIH=0;
45
46    if (pidResponse) {
47       // add PID Response Handler
48       if (!RsnLoadMacro("AddPIDResponseInputHandler.C")) return kFALSE;
49       AddPIDResponseInputHandler(multiInputHandler);
50    }
51
52    if (useRsnIH) {
53       // add Rsn input handler (it has to be after ESD,MC,Tender input handler, but before Mixing)
54       AliRsnInputHandler *rsnIH = new AliRsnInputHandler();
55       multiInputHandler->AddInputEventHandler(rsnIH);
56    }
57
58    if (physSel) {
59       gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
60       AddTaskPhysicsSelection(useMC);
61
62       // maybe we can put it in $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C
63       AliMultiInputEventHandler *multiIH = dynamic_cast<AliMultiInputEventHandler *>(mgr->GetInputEventHandler());
64       if (multiIH) {
65          AliESDInputHandler *esdIH = dynamic_cast<AliESDInputHandler *>(multiIH->GetFirstInputEventHandler());
66          if (esdIH) esdIH->SetEventSelection(multiIH->GetEventSelection());
67          AliAODInputHandler *aodIH = dynamic_cast<AliAODInputHandler *>(multiIH->GetFirstInputEventHandler());
68          if (aodIH) aodIH->SetEventSelection(multiIH->GetEventSelection());
69       }
70    }
71
72
73    // load and run AddTask macro
74    if (!RsnLoadMacro("AddRsnAnalysisTask.C")) return kFALSE;
75    if (!RsnLoadMacro("RsnConfig.C")) return kFALSE;
76    if (!RsnLoadMacro("AddMixingHandler.C")) return kFALSE;
77    if (!analysisSource.CompareTo("grid")) {
78       if (!RsnLoadMacro("RsnGirdPlugin.C")) return kFALSE;
79       RsnGridPlugin();
80    }
81
82    if (splitMgrByTask) {
83       Int_t iTask=0;
84       TList *l=0;
85       TNamed *rsnObj = 0;
86       AliAnalysisTaskSE *task=0;
87       TString rsnName,rsnCutName;
88       TIter next(listRsn);
89       while ((rsnObj = (TNamed *)next())) {
90          l = new TList();
91          Printf("Adding task for RSN:%s CUT:%s ",rsnObj->GetName(),rsnObj->GetTitle());
92          l->Add(new TNamed(*rsnObj));
93          task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,l,Form("%s_%d",postfix.Data(),iTask++));
94          if (useMixing) {
95             // add mixing handler (uncomment to turn on Mixnig)
96             AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
97          }
98       }
99    } else {
100       task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,listRsn,postfix);
101       if (useMixing) {
102          // add mixing handler (uncomment to turn on Mixnig)
103          AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
104       }
105    }
106
107    return kTRUE;
108 }
109
110 Bool_t RsnLoadMacro(TString macro,TString path="") {
111
112    Bool_t valid;
113    TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
114    if (!valid) lego_path = "$ALICE_ROOT/PWG2/RESONANCES/macros/lego_train";
115
116    if (!gSystem->AccessPathName(macro.Data())) {
117       gROOT->LoadMacro(macro.Data());
118       Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
119       return kTRUE;
120    }
121
122    if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
123       gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
124       Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
125       return kTRUE;
126    }
127
128    Printf("Error loading %s",macro.Data());
129
130    return kFALSE;
131 }