]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/AddRsnTask.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddRsnTask.C
1 #ifndef __CINT__
2 #include <TString.h>
3 #include <AliAnalysisManager.h>
4 #include <AliRsnAnalysisTask.h>
5 #include <AliRsnDaughterSelector.h>
6 #include <AliRsnMiniAnalysisTask.h>
7 #endif
8 AliAnalysisTaskSE *AddRsnTask(TString rsnPart,TString rsnCut,TString postfix="")
9 {
10    // Analysis Manager
11    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
12    if (!mgr) { Printf("Error [AddRsnTaskTrain%s] : mgr is null !!!",postfix.Data()); return 0;}
13
14    // initialize task with all available slots, even if not all of them will be used:
15    AliAnalysisTaskSE *task = 0;
16
17    Bool_t valid;
18    Int_t useMC = AliRsnTrainManager::GetGlobalInt("IsMC",valid);
19    Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
20    Int_t physSelBit = AliRsnTrainManager::GetGlobalInt("RsnPhysSelFilterBit",valid);
21    Int_t isMixing = AliRsnTrainManager::GetGlobalInt("IsMixing",valid);
22    Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid);
23    Int_t isAOD049 = AliRsnTrainManager::GetGlobalInt("RsnUseAOD049Patch",valid);
24
25    if (isRsnMini) {
26       postfix.Prepend("Mini");
27       AliRsnMiniAnalysisTask *taskRsnMini = new AliRsnMiniAnalysisTask(TString::Format("Rsn%s",postfix.Data()).Data(),useMC);
28       Int_t refreshPrint = AliRsnTrainManager::GetGlobalInt("RsnMixPrintRefresh",valid);
29       if (valid) taskRsnMini->SetMixPrintRefresh(refreshPrint);
30       task = (AliAnalysisTaskSE *) taskRsnMini;
31    }
32    else {
33       AliRsnAnalysisTask *taskRsn = new AliRsnAnalysisTask(TString::Format("Rsn%s",postfix.Data()).Data());
34       task = (AliAnalysisTaskSE *) taskRsn;
35    }
36
37    postfix.Append(TString::Format("_%s_%s",rsnPart.Data(),rsnCut.Data()).Data());
38
39    if (physSelBit>=0) task->SelectCollisionCandidates((AliVEvent::EOfflineTriggerTypes)physSelBit);
40
41    AliRsnInputHandler *rsnIH=0;
42    // TODO this is tmp hack
43    if (!rsnIH) rsnIH = new AliRsnInputHandler();
44
45
46    TList *listRsn = new TList();
47    listRsn->Add(new TNamed(rsnPart.Data(),rsnCut.Data()));
48
49    if (!RsnLoadMacroTask("RsnConfig.C")) return 0;
50    if (!RsnConfig(task,rsnIH,listRsn)) {
51       Printf("Error in RsnConfig.C");
52       return 0;
53    }
54
55    // setup Event Mixing
56    if (isMixing) AddEventMixingSettings(task);
57
58    if (isAOD049 && (!useMC) && (collisionType==1)) {
59       if (isRsnMini) taskRsnMini->SetUseCentralityPatch(kTRUE);
60    }
61
62    // add the task to manager
63    mgr->AddTask(task);
64
65    AliRsnDaughterSelector *sel = 0;
66
67    if (!isRsnMini) {
68       sel = rsnIH->GetSelector();
69       sel->Init();
70    }
71
72    // connect input container according to source choice
73    mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
74
75    // create paths for the output in the common file
76    TString commonPath = AliAnalysisManager::GetCommonFileName();
77
78    //just small fix to replace ':' by '_' (easier to read)
79    postfix.ReplaceAll(":","_");
80    // create containers for output
81    AliAnalysisDataContainer *output = mgr->CreateContainer(TString::Format("RsnHist%s", postfix.Data()).Data(), TList::Class(), AliAnalysisManager::kOutputContainer, commonPath.Data());
82
83 //   // big outout (expert only)
84 //   Int_t useBigOutput = 0;
85 //   if (useBigOutput) {
86 //      Printf("Using Big output ...");
87 //      task->UseBigOutput();
88 //      output->SetSpecialOutput();
89 //      mgr->SetSpecialOutputLocation("root://lx000.saske.sk:21094//tmp/mvala/");
90 //   }
91
92    mgr->ConnectOutput(task, 1, output);
93
94    return task;
95 }
96
97 void AddEventMixingSettings(AliAnalysisTaskSE *task) {
98
99    Bool_t valid = kTRUE;
100    Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid);
101    Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
102    Int_t mixNum = AliRsnTrainManager::GetGlobalInt("RsnNumMix",valid);
103
104    Double_t mixDiffMult = AliRsnTrainManager::GetGlobalInt("RsnMixDiffMult",valid);
105    Double_t mixDiffVz = AliRsnTrainManager::GetGlobalInt("RsnMixDiffVz",valid);
106    Double_t mixDiffAngle = AliRsnTrainManager::GetGlobalInt("RsnMixDiffAngle",valid);
107
108    if (isRsnMini) {
109       AliRsnMiniAnalysisTask *taskRsn = (AliRsnMiniAnalysisTask *) task;
110       if (collisionType == 0) {
111          //         taskRsn->UseMultiplicity("TRACKS");
112          taskRsn->UseMultiplicity("QUALITY");
113       } else {
114          taskRsn->UseCentrality("V0M");
115       }
116       if (mixDiffMult>0.0) taskRsn->SetMaxDiffMult(mixDiffMult);
117
118       // set mixing
119       taskRsn->UseContinuousMix();
120       //task->UseBinnedMix();
121       taskRsn->SetNMix(mixNum);
122
123       if (mixDiffVz>0.0) taskRsn->SetMaxDiffVz(mixDiffVz);
124       if (mixDiffAngle>0.0) taskRsn->SetMaxDiffAngle(mixDiffAngle);
125       // 30.0 * TMath::DegToRad()
126    }
127    // TODO RSN non Mini
128
129 }
130
131 Bool_t RsnLoadMacroTask(TString macro,TString path="") {
132
133    Bool_t valid;
134    TString lego_path = AliAnalysisManager::GetGlobalStr("RsnLegoTrainPath",valid);
135    if (!valid) lego_path = "$ALICE_ROOT/PWGLF/RESONANCES/macros/lego_train";
136
137    if (!gSystem->AccessPathName(macro.Data())) {
138       gROOT->LoadMacro(macro.Data());
139       Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
140       return kTRUE;
141    }
142
143    if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
144       gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
145       Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
146       return kTRUE;
147    }
148
149    Printf("Error loading %s",macro.Data());
150
151    return kFALSE;
152 }