]>
Commit | Line | Data |
---|---|---|
221dc8d3 | 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); | |
ae15a5ec | 21 | Int_t isMixing = AliRsnTrainManager::GetGlobalInt("IsMixing",valid); |
22 | Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid); | |
23 | Int_t isAOD049 = AliRsnTrainManager::GetGlobalInt("RsnUseAOD049Patch",valid); | |
221dc8d3 | 24 | |
25 | if (isRsnMini) { | |
26 | postfix.Prepend("Mini"); | |
a9d94049 | 27 | AliRsnMiniAnalysisTask *taskRsnMini = new AliRsnMiniAnalysisTask(TString::Format("Rsn%s",postfix.Data()).Data(),useMC); |
221dc8d3 | 28 | Int_t refreshPrint = AliRsnTrainManager::GetGlobalInt("RsnMixPrintRefresh",valid); |
29 | if (valid) taskRsnMini->SetMixPrintRefresh(refreshPrint); | |
30 | task = (AliAnalysisTaskSE *) taskRsnMini; | |
31 | } | |
32 | else { | |
a9d94049 | 33 | AliRsnAnalysisTask *taskRsn = new AliRsnAnalysisTask(TString::Format("Rsn%s",postfix.Data()).Data()); |
221dc8d3 | 34 | task = (AliAnalysisTaskSE *) taskRsn; |
35 | } | |
ae15a5ec | 36 | |
a9d94049 | 37 | postfix.Append(TString::Format("_%s_%s",rsnPart.Data(),rsnCut.Data()).Data()); |
221dc8d3 | 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 | ||
b68f0fc1 | 49 | if (!RsnLoadMacroTask("RsnConfig.C")) return 0; |
221dc8d3 | 50 | if (!RsnConfig(task,rsnIH,listRsn)) { |
51 | Printf("Error in RsnConfig.C"); | |
52 | return 0; | |
53 | } | |
54 | ||
ae15a5ec | 55 | // setup Event Mixing |
56 | if (isMixing) AddEventMixingSettings(task); | |
57 | ||
58 | if (isAOD049 && (!useMC) && (collisionType==1)) { | |
59 | task->SetUseCentralityPatch(kTRUE); | |
60 | } | |
61 | ||
221dc8d3 | 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 | // create containers for output | |
79 | AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnHist%s", postfix.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, commonPath.Data()); | |
80 | ||
81 | // // big outout (expert only) | |
82 | // Int_t useBigOutput = 0; | |
83 | // if (useBigOutput) { | |
84 | // Printf("Using Big output ..."); | |
85 | // task->UseBigOutput(); | |
86 | // output->SetSpecialOutput(); | |
87 | // mgr->SetSpecialOutputLocation("root://lx000.saske.sk:21094//tmp/mvala/"); | |
88 | // } | |
89 | ||
90 | mgr->ConnectOutput(task, 1, output); | |
91 | ||
92 | return task; | |
93 | } | |
b68f0fc1 | 94 | |
ae15a5ec | 95 | void AddEventMixingSettings(AliAnalysisTaskSE *task) { |
96 | ||
97 | Bool_t valid = kTRUE; | |
98 | Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid); | |
99 | Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid); | |
100 | Int_t mixNum = AliRsnTrainManager::GetGlobalInt("RsnNumMix",valid); | |
101 | ||
102 | Int_t isMixDiffMult = AliRsnTrainManager::GetGlobalInt("RsnMixDiffMult",valid); | |
103 | Int_t isMixDiffVz = AliRsnTrainManager::GetGlobalInt("RsnMixDiffVz",valid); | |
104 | Int_t isMixDiffAngle = AliRsnTrainManager::GetGlobalInt("RsnMixDiffAngle",valid); | |
105 | ||
106 | if (isRsnMini) { | |
107 | AliRsnMiniAnalysisTask *taskRsn = (AliRsnMiniAnalysisTask *) task; | |
108 | if (collisionType == 0) { | |
109 | // taskRsn->UseMultiplicity("TRACKS"); | |
110 | taskRsn->UseMultiplicity("QUALITY"); | |
111 | if (isMixDiffMult) taskRsn->SetMaxDiffMult(10); | |
112 | } else { | |
113 | taskRsn->UseCentrality("V0M"); | |
114 | if (isMixDiffMult) taskRsn->SetMaxDiffMult(1); | |
115 | } | |
116 | // set mixing | |
117 | taskRsn->UseContinuousMix(); | |
118 | //task->UseBinnedMix(); | |
119 | taskRsn->SetNMix(mixNum); | |
120 | ||
121 | if (isMixDiffVz) taskRsn->SetMaxDiffVz(1); | |
122 | if (isMixDiffAngle) taskRsn->SetMaxDiffAngle(30.0 * TMath::DegToRad()); | |
123 | } | |
124 | // TODO RSN non Mini | |
125 | ||
126 | } | |
127 | ||
b68f0fc1 | 128 | Bool_t RsnLoadMacroTask(TString macro,TString path="") { |
129 | ||
130 | Bool_t valid; | |
131 | TString lego_path = AliAnalysisManager::GetGlobalStr("RsnLegoTrainPath",valid); | |
132 | if (!valid) lego_path = "$ALICE_ROOT/PWGLF/RESONANCES/macros/lego_train"; | |
133 | ||
134 | if (!gSystem->AccessPathName(macro.Data())) { | |
135 | gROOT->LoadMacro(macro.Data()); | |
136 | Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data()); | |
137 | return kTRUE; | |
138 | } | |
139 | ||
140 | if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) { | |
141 | gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data()))); | |
142 | Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data()))); | |
143 | return kTRUE; | |
144 | } | |
145 | ||
146 | Printf("Error loading %s",macro.Data()); | |
147 | ||
148 | return kFALSE; | |
149 | } |