2 #include <AliAnalysisManager.h>
6 Bool_t AddAMRsn(TString analysisSource = "proof", TString analysisMode = "test",TString input="aod",TString inputMC="", TString postfix = "",TString idStr="0")
9 analysisSource.ToLower(); analysisMode.ToLower();
11 if (!RsnLoadMacro("RsnManager.C")) return kFALSE;
12 TList *listRsn = RsnManager();
14 Bool_t useMC = !inputMC.CompareTo("mc");
18 Int_t eventMixinPar = AliAnalysisManager::GetGlobalInt("rsnUseEventMixingPar",valid);
19 Int_t rsnPar = AliAnalysisManager::GetGlobalInt("rsnUseRSNPar",valid);
20 Int_t rsnParDev = AliAnalysisManager::GetGlobalInt("rsnUseRSNParDev",valid);
21 if (eventMixinPar) rsnPar = 1;
22 if (rsnPar&&rsnParDev>=0) rsnParDev=1;
24 Int_t pidResponse = AliAnalysisManager::GetGlobalInt("rsnUsePIDResponse",valid);
25 Int_t useRsnIH = AliAnalysisManager::GetGlobalInt("rsnUseRsnInputHandler",valid);
26 Int_t physSel = AliAnalysisManager::GetGlobalInt("rsnUsePhysSel",valid);
27 Int_t useCentralityTask = AliAnalysisManager::GetGlobalInt("rsnUseCentralityTask",valid);
28 Int_t useEventPlaneTask = AliAnalysisManager::GetGlobalInt("rsnUseEventPlaneTask",valid);
29 Int_t usePIDqa = AliAnalysisManager::GetGlobalInt("rsnUsePIDqa",valid);
30 Int_t splitMgrByTask = AliAnalysisManager::GetGlobalInt("rsnSplitMgrByTasks",valid);
32 Int_t useMixing = AliAnalysisManager::GetGlobalInt("rsnUseMixing",valid);
34 Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
35 Int_t mixNum = AliAnalysisManager::GetGlobalInt("rsnNumMix",valid);
38 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
39 if (!mgr) { Printf("Error[AddAMRsn] mgr is null !!!"); return kFALSE; }
41 AliAnalysisGrid *analysisPlugin = mgr->GetGridHandler();
42 if (!analysisPlugin) { Printf("Error[AddAMRsn] : analysisPlugin is null !!!"); return kFALSE; }
44 TString myAdditionalLibs;
45 if (eventMixinPar) { AliAnalysisAlien::SetupPar("EventMixing"); myAdditionalLibs += " EventMixing.par"; }
46 else { gSystem->Load("libEventMixing"); myAdditionalLibs += " libEventMixing.so"; }
48 TString rsnLibName = "PWGLFresonances";
49 if (gSystem->Getenv("ALICE_ROOT")) {
50 TString alirootVersion = gSystem->GetFromPipe("aliroot --version | awk '{print $3}'");
51 if (alirootVersion<"v5-02-19-AN" && alirootVersion.CompareTo("trunk")) rsnLibName = "PWG2resonances";
52 if (rsnPar) { AliAnalysisAlien::SetupPar(rsnLibName.Data()); myAdditionalLibs += Form(" %s.par",rsnLibName.Data()); }
53 else { gSystem->Load(Form("lib%s",rsnLibName.Data())); myAdditionalLibs += Form(" lib%s.so",rsnLibName.Data()); }
57 if (rsnParDev) { AliAnalysisAlien::SetupPar("PWGLFresonancesdev"); myAdditionalLibs += " PWGLFresonancesdev.par"; }
58 else { gSystem->Load("libPWGLFresonancesdev"); myAdditionalLibs += " libPWGLFresonancesdev.so"; }
60 analysisPlugin->SetAdditionalLibs(myAdditionalLibs.Data());
62 AliMultiInputEventHandler *multiInputHandler = 0;
63 AliInputEventHandler *inputHandler = mgr->GetInputEventHandler();
65 TString className = inputHandler->ClassName();
66 if (!className.CompareTo("AliMultiInputEventHandler")) {
67 multiInputHandler = (AliMultiInputEventHandler *)inputHandler;
70 AliRsnInputHandler *rsnIH=0;
73 if (multiInputHandler) {
74 // add PID Response Handler
75 if (!RsnLoadMacro("AddPIDResponseInputHandler.C")) return kFALSE;
76 AddPIDResponseInputHandler(multiInputHandler,useMC);
78 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
79 AddTaskPIDResponse(useMC);
83 if (multiInputHandler && useRsnIH) {
84 // add Rsn input handler (it has to be after ESD,MC,Tender input handler, but before Mixing)
85 rsnIH = new AliRsnInputHandler();
86 multiInputHandler->AddInputEventHandler(rsnIH);
90 if (!input.CompareTo("esd")) {
91 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C");
92 AddTaskPhysicsSelection(useMC);
95 // maybe we can put it in $ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C
96 if (multiInputHandler) {
97 AliInputEventHandler *ih = multiInputHandler->GetFirstInputEventHandler();
98 ih->SetEventSelection(multiInputHandler->GetEventSelection());
102 if (useCentralityTask) {
103 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
104 AliCentralitySelectionTask *centralityTask = AddTaskCentrality(kFALSE);
107 if (useEventPlaneTask) {
108 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskEventplane.C");
109 AliEPSelectionTask *eventPlaneTask = AddTaskEventplane();
113 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDqa.C");
117 // load and run AddTask macro
118 if (!RsnLoadMacro("AddRsnAnalysisTask.C")) return kFALSE;
119 if (!RsnLoadMacro("RsnConfig.C")) return kFALSE;
120 if (!RsnLoadMacro("AddMixingHandler.C")) return kFALSE;
121 if (!analysisSource.CompareTo("grid")) {
122 if (!RsnLoadMacro("RsnGridPlugin.C")) return kFALSE;
123 RsnGridPlugin(analysisMode);
126 if (splitMgrByTask) {
130 AliAnalysisTaskSE *task=0;
131 TString rsnName,rsnCutName;
133 while ((rsnObj = (TNamed *)next())) {
135 Printf("Adding task for RSN:%s CUT:%s ",rsnObj->GetName(),rsnObj->GetTitle());
136 l->Add(new TNamed(*rsnObj));
137 task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,l,Form("%s_%d",postfix.Data(),iTask++));
139 // add mixing handler (uncomment to turn on Mixnig)
140 AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
144 task = AddRsnAnalysisTask(input, useMC, useMixing,rsnIH,listRsn,postfix);
146 // add mixing handler (uncomment to turn on Mixnig)
147 AddMixingHandler(multiInputHandler,task, input, useMC,isRsnMini, mixNum,postfix);
151 // mgr->AddClassDebug("AliRsnCutTrackQuality",AliLog::kDebug+3);
156 Bool_t RsnLoadMacro(TString macro,TString path="") {
159 TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
160 if (!valid) lego_path = "$ALICE_ROOT/PWG2/RESONANCES/macros/lego_train";
162 if (!gSystem->AccessPathName(macro.Data())) {
163 gROOT->LoadMacro(macro.Data());
164 Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
168 if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
169 gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
170 Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
174 Printf("Error loading %s",macro.Data());