]>
Commit | Line | Data |
---|---|---|
221dc8d3 | 1 | #ifndef __CINT__ |
2 | #include <AliAnalysisManager.h> | |
3 | #include <PWGLF/RESONANCES/AliRsnCutPrimaryVertex.h> | |
4 | #include <PWGLF/RESONANCES/AliRsnValuePair.h> | |
5 | #include <PWGLF/RESONANCES/AliRsnListOutput.h> | |
6 | #include <PWGLF/RESONANCES/AliRsnPairDef.h> | |
7 | #include <PWGLF/RESONANCES/AliRsnLoopPair.h> | |
8 | #include <PWGLF/RESONANCES/AliRsnAnalysisTask.h> | |
9 | #include <PWGLF/RESONANCES/AliRsnLoopDaughter.h> | |
10 | #include <PWGLF/RESONANCES/AliRsnValueDaughter.h> | |
11 | #include <PWGLF/RESONANCES/AliRsnMiniAnalysisTask.h> | |
12 | #include <PWGLF/RESONANCES/AliRsnCutMiniPair.h> | |
13 | #include <PWGLF/RESONANCES/AliRsnInputHandler.h> | |
14 | #include <PWGLF/RESONANCES/AliRsnMiniMonitor.h> | |
15 | #include <PWGLF/RESONANCES/AliRsnValueEvent.h> | |
16 | #include <AliRsnMiniMonitorTask.h> | |
17 | #include <TROOT.h> | |
18 | #endif | |
19 | ||
20 | Bool_t RsnConfig(AliAnalysisTaskSE *task,AliRsnInputHandler *rsnIH=0,TList *listRsn=0) { | |
21 | // ,Bool_t isMC,Bool_t isMixing,AliRsnInputHandler *rsnIH=0,TList *listRsn=0) { | |
22 | ||
23 | if (!task) return kFALSE; | |
24 | ||
25 | if (!listRsn) { | |
26 | return kFALSE; | |
27 | } | |
28 | Bool_t valid; | |
29 | Int_t isMC = AliRsnTrainManager::GetGlobalInt("IsMC",valid); | |
30 | Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid); | |
31 | Int_t isMixing = AliRsnTrainManager::GetGlobalInt("IsMixing",valid); | |
32 | // TODO | |
33 | TString rsnCutOptCommon = AliRsnTrainManager::GetGlobalStr("RsnLegoTrainCommonCutOption",valid); | |
34 | ||
35 | ||
36 | Int_t cutIndex = 0; | |
37 | Int_t numOfCuts = 0; | |
38 | ||
39 | // set commol eventCuts | |
40 | ||
41 | if (!RsnLoadMacroFromConfig("AddRsnCommonEventCuts.C")) return kFALSE; | |
42 | AliRsnCutSet *commonEventCuts = AddRsnCommonEventCuts(task); | |
43 | ||
44 | if (!RsnLoadMacroFromConfig("AddRsnCommonPairCuts.C")) return kFALSE; | |
45 | AliRsnCutSet *commonPairCuts = AddRsnCommonPairCuts(); | |
46 | ||
47 | TIter next(listRsn); | |
48 | TNamed *rsnObj=0; | |
49 | TString rsnName,rsnNameOpt,rsnNameOptFull,rsnCutName,rsnCutOpt,rsnCutNameOptFull; | |
50 | while ((rsnObj = (TNamed *)next())) { | |
51 | GetOptionFromString(rsnObj->GetName(),rsnName,rsnNameOpt); | |
52 | rsnNameOptFull=rsnName; | |
53 | if (!rsnNameOpt.IsNull()) rsnNameOptFull += Form("_%s",rsnNameOpt.Data()); | |
54 | ||
55 | GetOptionFromString(rsnObj->GetTitle(),rsnCutName,rsnCutOpt); | |
56 | rsnCutNameOptFull=rsnCutName; | |
57 | if (!rsnCutOpt.IsNull())rsnCutNameOptFull += Form("_%s",rsnCutOpt.Data()); | |
58 | ||
59 | if (!rsnCutOptCommon.IsNull()) { | |
60 | if (!rsnCutOpt.IsNull()) rsnCutOpt += "_"; | |
61 | rsnCutOpt += rsnCutOptCommon.Data(); | |
62 | } | |
63 | ||
64 | if (!RsnLoadMacroFromConfig(Form("AddRsnDaughterCuts%s.C",rsnCutName.Data()))) return kFALSE; | |
65 | if (!RsnLoadMacroFromConfig(Form("AddRsnPairs%s.C",rsnName.Data()))) return kFALSE; | |
66 | ||
67 | rsnNameOptFull.ToLower(); | |
68 | rsnName.ToLower(); | |
69 | // add cuts | |
70 | if (!rsnName.CompareTo("phi")) { | |
71 | numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kKaon,AliPID::kKaon,\"%s\",(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),rsnIH, task)); | |
72 | if (numOfCuts) { | |
73 | if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_K",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
74 | AddRsnPairsPhi(task,isMC,isMixing,AliPID::kKaon,cutIndex,AliPID::kKaon,cutIndex,commonEventCuts,commonPairCuts,Form("%s.%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
75 | cutIndex+=numOfCuts; | |
76 | } | |
77 | } else if (!rsnName.CompareTo("kstar")) { | |
78 | numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kKaon,AliPID::kPion,\"%s\",(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),rsnIH,task)); | |
79 | if (numOfCuts) { | |
80 | if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_K",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
81 | if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s_%s_pi",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
82 | AddRsnPairsKStar(task,isMC,isMixing,AliPID::kKaon,cutIndex,AliPID::kPion,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s.%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
83 | cutIndex+=numOfCuts; | |
84 | } | |
85 | } else if (!rsnName.CompareTo("rho")) { | |
86 | numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kPion,AliPID::kPion,\"%s\",(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),rsnIH,task)); | |
87 | if (numOfCuts) { | |
88 | if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_pi",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
89 | AddRsnPairsRho(task,isMC,isMixing,AliPID::kPion,cutIndex,AliPID::kPion,cutIndex,commonEventCuts,commonPairCuts,Form("%s.%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
90 | cutIndex+=numOfCuts; | |
91 | } | |
92 | } else if (!rsnName.CompareTo("lambda")) { | |
93 | numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kProton,AliPID::kKaon,\"%s\",(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),rsnIH,task)); | |
94 | if (numOfCuts) { | |
95 | if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_p",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
96 | if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s_%s_K",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
97 | AddRsnPairsLambda(task,isMC,isMixing,AliPID::kProton,cutIndex,AliPID::kKaon,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s.%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data())); | |
98 | cutIndex+=numOfCuts; | |
99 | } | |
100 | } else { | |
101 | Printf("Error : Particle %s is not supported !!!!",rsnName.Data()); | |
102 | return kFALSE; | |
103 | } | |
104 | ||
105 | } | |
106 | ||
107 | return kTRUE; | |
108 | } | |
109 | ||
110 | Bool_t RsnLoadMacroFromConfig(TString macro,TString path="") { | |
111 | ||
112 | Bool_t valid; | |
113 | TString lego_path = AliAnalysisManager::GetGlobalStr("RsnLegoTrainPath",valid); | |
114 | if (!valid) lego_path = "$ALICE_ROOT/PWGLF/RESONANCES/macros/lego_train"; | |
115 | ||
116 | if (!gSystem->AccessPathName(macro.Data())) { | |
117 | Int_t ret = gROOT->LoadMacro(macro.Data()); | |
118 | Printf("Macro loaded from %s/%s [%d]...",gSystem->pwd(),macro.Data(),ret); | |
119 | return kTRUE; | |
120 | } | |
121 | ||
a9d94049 | 122 | if (!gSystem->AccessPathName(gSystem->ExpandPathName(TString::Format("%s/%s",lego_path.Data(),macro.Data()).Data()))) { |
430f811f | 123 | Printf("Loading macro %s ...",gSystem->ExpandPathName(TString::Format("%s/%s",lego_path.Data(),macro.Data()).Data())); |
a9d94049 | 124 | gROOT->LoadMacro(gSystem->ExpandPathName(TString::Format("%s/%s",lego_path.Data(),macro.Data()).Data())); |
125 | Printf("Macro loaded from %s ...",gSystem->ExpandPathName(TString::Format("%s/%s",lego_path.Data(),macro.Data()).Data())); | |
221dc8d3 | 126 | return kTRUE; |
127 | } | |
128 | ||
129 | Printf("Error loading %s",macro.Data()); | |
130 | ||
131 | return kFALSE; | |
132 | } | |
133 | ||
134 | void GetOptionFromString(TString str,TString &outStr1,TString &outStr2,TString d=":") { | |
135 | // TStringO | |
136 | TObjArray *tokens = str.Tokenize(d.Data()); | |
137 | TObjString *objStr = (TObjString *)tokens->At(0); | |
138 | if (!objStr) { | |
139 | outStr1 = "err"; | |
140 | outStr2 = ""; | |
141 | return; | |
142 | } | |
143 | outStr1 = objStr->GetString(); | |
144 | ||
145 | objStr = (TObjString *) tokens->At(1); | |
146 | if (!objStr) { | |
147 | outStr2 = ""; | |
148 | return; | |
149 | } | |
150 | outStr2 = objStr->GetString(); | |
151 | ||
152 | } | |
153 | ||
154 | Bool_t AddPair(AliAnalysisTaskSE *task, Bool_t isMC,Bool_t isMixing, AliPID::EParticleType pType1,Int_t listID1, AliPID::EParticleType pType2,Int_t listID2, Int_t pdgMother,Double_t massMother, AliRsnCutSet *commonEventCuts=0,AliRsnCutSet *commonPairCuts=0, TString name = "") { | |
155 | ||
156 | Bool_t valid; | |
157 | Int_t useMCMomentum = AliRsnTrainManager::GetGlobalInt("RsnUseMCMomentum",valid); | |
158 | Bool_t typeSame = (pType1 == pType2); | |
159 | ||
160 | Printf("------------- id1=%d id2=%d",pType1,pType2); | |
161 | ||
162 | TList *listLoops = new TList; | |
163 | ||
164 | // pair definition | |
165 | AliRsnPairDef *pairDefPM = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '+', (AliRsnDaughter::ESpecies)pType2, '-', pdgMother, massMother); | |
166 | AliRsnPairDef *pairDefMP = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '-', (AliRsnDaughter::ESpecies)pType2, '+', pdgMother, massMother); | |
167 | AliRsnPairDef *pairDefPP = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '+', (AliRsnDaughter::ESpecies)pType2, '+', pdgMother, massMother); | |
168 | AliRsnPairDef *pairDefMM = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '-', (AliRsnDaughter::ESpecies)pType2, '-', pdgMother, massMother); | |
169 | ||
170 | // loop object creation | |
171 | AliRsnLoopPair *lp = 0; | |
172 | ||
173 | // sets +- | |
174 | lp = new AliRsnLoopPair(Form("%s.RecPM", name.Data()), pairDefPM, kFALSE); | |
175 | listLoops->Add(lp); | |
176 | ||
177 | if (!typeSame) { | |
178 | lp = new AliRsnLoopPair(Form("%s.RecMP", name.Data()), pairDefMP, kFALSE); | |
179 | listLoops->Add(lp); | |
180 | } | |
181 | ||
182 | // sets +- TRUE pairs | |
183 | if (isMC) { | |
184 | lp = new AliRsnLoopPair(Form("%s.RecPM_RecMother", name.Data()), pairDefPM, kFALSE); | |
185 | lp->SetOnlyTrue(kTRUE); | |
186 | lp->SetCheckDecay(kTRUE); | |
187 | listLoops->Add(lp); | |
188 | if (!typeSame) { | |
189 | lp = new AliRsnLoopPair(Form("%s.RecMP_RecMother", name.Data()), pairDefMP, kFALSE); | |
190 | lp->SetOnlyTrue(kTRUE); | |
191 | lp->SetCheckDecay(kTRUE); | |
192 | listLoops->Add(lp); | |
193 | } | |
194 | // sets +- TRUE paris (MC is used for momentum) | |
195 | lp = new AliRsnLoopPair(Form("%s.GenPM_RecMother", name.Data()), pairDefPM, kFALSE); | |
196 | lp->SetTrueMC(kTRUE); | |
197 | listLoops->Add(lp); | |
198 | if (!typeSame) { | |
199 | // sets +- TRUE paris (MC is used for momentum) | |
200 | lp = new AliRsnLoopPair(Form("%s.GenMP_RecMother", name.Data()), pairDefMP, kFALSE); | |
201 | lp->SetTrueMC(kTRUE); | |
202 | listLoops->Add(lp); | |
203 | } | |
204 | } | |
205 | ||
206 | // sets ++ | |
207 | lp = new AliRsnLoopPair(Form("%s.RecPP", name.Data()), pairDefPP, kFALSE); | |
208 | listLoops->Add(lp); | |
209 | ||
210 | // sets -- | |
211 | lp = new AliRsnLoopPair(Form("%s.RecMM", name.Data()), pairDefMM, kFALSE); | |
212 | listLoops->Add(lp); | |
213 | ||
214 | if (isMixing) { | |
215 | // sets +- Mixing (NOT mini) | |
216 | lp = new AliRsnLoopPair(Form("%s.RecPM_mix", name.Data()), pairDefPM, kTRUE); | |
217 | listLoops->Add(lp); | |
218 | ||
219 | // sets -+ Mixing (NOT mini) | |
220 | lp = new AliRsnLoopPair(Form("%s.RecMP_mix", name.Data()), pairDefMP, kTRUE); | |
221 | listLoops->Add(lp); | |
222 | ||
223 | // sets ++ Mixing (NOT mini) | |
224 | lp = new AliRsnLoopPair(Form("%s.RecPP_mix", name.Data()), pairDefPP, kTRUE); | |
225 | listLoops->Add(lp); | |
226 | ||
227 | // sets -- Mixing (NOT mini) | |
228 | lp = new AliRsnLoopPair(Form("%s.RecMM_mix", name.Data()), pairDefMM, kTRUE); | |
229 | listLoops->Add(lp); | |
230 | } | |
231 | ||
232 | ||
233 | // loops over all AliRsnLoops and sets everything (don't touch it if you don't know what you are doing) | |
234 | TIter next(listLoops); | |
235 | while ((lp = (AliRsnLoopPair *)next.Next())) { | |
236 | lp->SetListID(0, listID1); | |
237 | lp->SetListID(1, listID2); | |
238 | lp->SetMCRefInfo(useMCMomentum); | |
239 | if (commonPairCuts) lp->SetPairCuts(commonPairCuts); | |
240 | if (commonEventCuts) lp->SetEventCuts(commonEventCuts); | |
241 | if (name.Contains("phi")) AddPairOutputPhi(lp); | |
242 | else if (name.Contains("kstar")) AddPairOutputKStar(lp); | |
243 | else if (name.Contains("rho")) AddPairOutputRho(lp); | |
244 | else if (name.Contains("lambda")) AddPairOutputLambda(lp); | |
245 | else if (name.Contains("sigma")) AddPairOutputSigma(lp); | |
246 | else continue; | |
247 | ((AliRsnAnalysisTask *)task)->AddLoop(lp); | |
248 | } | |
249 | return kTRUE; | |
250 | } | |
251 | ||
252 | void AddMonitorOutput(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *lm=0) | |
253 | { | |
254 | ||
255 | Bool_t valid; | |
256 | Int_t useMCMon = AliRsnTrainManager::GetGlobalInt("RsnUseMCMonitoring",valid); | |
257 | // if (useMCMon) return; | |
258 | ||
259 | // dEdx tpc | |
260 | AliRsnValueDaughter *axisMomTPC = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc); | |
261 | AliRsnValueDaughter *axisSigTPC = new AliRsnValueDaughter("sTPC", AliRsnValueDaughter::kTPCsignal); | |
262 | //axisMomTPC->SetBins(0.0,5.0,0.01); | |
263 | axisMomTPC->SetBins(0.0,12.0,0.05); | |
264 | axisSigTPC->SetBins(0.0,500.0,2.0); | |
265 | ||
266 | // output: 2D histogram of TPC signal vs. TPC momentum | |
267 | AliRsnListOutput *outMonitordEdxTPC = new AliRsnListOutput("dEdx", AliRsnListOutput::kHistoDefault); | |
268 | outMonitordEdxTPC->AddValue(axisMomTPC); | |
269 | outMonitordEdxTPC->AddValue(axisSigTPC); | |
270 | ||
271 | // add outputs to loop | |
272 | if (mon) mon->Add(outMonitordEdxTPC); | |
273 | if (lm) lm->AddOutput(outMonitordEdxTPC); | |
274 | ||
275 | // dEdx tpc | |
276 | AliRsnValueDaughter *axisMomTPCForTOF = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc); | |
277 | AliRsnValueDaughter *axisSigTOF = new AliRsnValueDaughter("sTOF", AliRsnValueDaughter::kTOFsignal); | |
278 | //axisMomTPCForTOF->SetBins(0.0,5.0,0.01); | |
279 | //axisSigTOF->SetBins(0.0,500.0,2.0); | |
280 | axisMomTPCForTOF->SetBins(0.0,12.0,0.05); | |
281 | axisSigTOF->SetBins(0.0,5.e5,1.e3); | |
282 | ||
283 | // output: 2D histogram of TPC signal vs. TPC momentum | |
284 | AliRsnListOutput *outMonitordEdxTOF = new AliRsnListOutput("TOF", AliRsnListOutput::kHistoDefault); | |
285 | outMonitordEdxTOF->AddValue(axisMomTPCForTOF); | |
286 | outMonitordEdxTOF->AddValue(axisSigTOF); | |
287 | ||
288 | // add outputs to loop | |
289 | if (mon) mon->Add(outMonitordEdxTOF); | |
290 | if (lm) lm->AddOutput(outMonitordEdxTOF); | |
291 | ||
292 | ||
293 | // Momentum | |
294 | AliRsnValueDaughter *axisMomP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kP); | |
295 | //axisMomP->SetBins(0.0,5.0,0.01); | |
296 | axisMomP->SetBins(0.0,12.0,0.05); | |
297 | ||
298 | // output: 2D histogram of TPC signal vs. TPC momentum | |
299 | AliRsnListOutput *outMonitorP = new AliRsnListOutput("P", AliRsnListOutput::kHistoDefault); | |
300 | outMonitorP->AddValue(axisMomP); | |
301 | ||
302 | // add outputs to loop | |
303 | if (mon) mon->Add(outMonitorP); | |
304 | if (lm) lm->AddOutput(outMonitorP); | |
305 | ||
306 | ||
307 | if (useMCMon) { | |
308 | AliRsnValueDaughter *axisMomPMC = new AliRsnValueDaughter("pMC", AliRsnValueDaughter::kP); | |
309 | axisMomPMC->SetUseMCInfo(kTRUE); | |
310 | //axisMomPMC->SetBins(0.0,5.0,0.01); | |
311 | axisMomPMC->SetBins(0.0,12.0,0.05); | |
312 | ||
313 | // output: 2D histogram of TPC signal vs. TPC momentum | |
314 | AliRsnListOutput *outMonitorPMC = new AliRsnListOutput("PMC", AliRsnListOutput::kHistoDefault); | |
315 | outMonitorPMC->AddValue(axisMomPMC); | |
316 | ||
317 | // add outputs to loop | |
318 | if (mon) mon->Add(outMonitorPMC); | |
319 | if (lm) lm->AddOutput(outMonitorPMC); | |
320 | } | |
321 | ||
322 | ||
323 | // Momentum Pt | |
324 | AliRsnValueDaughter *axisMomPt = new AliRsnValueDaughter("pt", AliRsnValueDaughter::kPt); | |
325 | //axisMomPt->SetBins(0.0,5.0,0.01); | |
326 | axisMomPt->SetBins(0.0,12.0,0.05); | |
327 | ||
328 | // output: 2D histogram of TPC signal vs. TPC momentum | |
329 | AliRsnListOutput *outMonitorPt = new AliRsnListOutput("Pt", AliRsnListOutput::kHistoDefault); | |
330 | outMonitorPt->AddValue(axisMomPt); | |
331 | ||
332 | // add outputs to loop | |
333 | if (mon) mon->Add(outMonitorPt); | |
334 | if (lm) lm->AddOutput(outMonitorPt); | |
335 | if (useMCMon) { | |
336 | // Momentum Pt | |
337 | AliRsnValueDaughter *axisMomPtMC = new AliRsnValueDaughter("ptMC", AliRsnValueDaughter::kPt); | |
338 | axisMomPtMC->SetUseMCInfo(kTRUE); | |
339 | //axisMomPtMC->SetBins(0.0,5.0,0.01); | |
340 | axisMomPtMC->SetBins(0.0,12.0,0.05); | |
341 | ||
342 | // output: 2D histogram of TPC signal vs. TPC momentum | |
343 | AliRsnListOutput *outMonitorPtMC = new AliRsnListOutput("PtMC", AliRsnListOutput::kHistoDefault); | |
344 | outMonitorPtMC->AddValue(axisMomPtMC); | |
345 | ||
346 | // add outputs to loop | |
347 | if (mon) mon->Add(outMonitorPtMC); | |
348 | if (lm) lm->AddOutput(outMonitorPtMC); | |
349 | } | |
350 | ||
351 | // Eta | |
352 | AliRsnValueDaughter *axisMomEta = new AliRsnValueDaughter("eta", AliRsnValueDaughter::kEta); | |
353 | axisMomEta->SetBins(-1.0,1.0,0.01); | |
354 | ||
355 | // output: 2D histogram of TPC signal vs. TPC momentum | |
356 | AliRsnListOutput *outMonitorEta = new AliRsnListOutput("Eta", AliRsnListOutput::kHistoDefault); | |
357 | outMonitorEta->AddValue(axisMomEta); | |
358 | ||
359 | // add outputs to loop | |
360 | if (mon) mon->Add(outMonitorEta); | |
361 | if (lm) lm->AddOutput(outMonitorEta); | |
362 | ||
363 | if (useMCMon) { | |
364 | // Eta | |
365 | AliRsnValueDaughter *axisMomEtaMC = new AliRsnValueDaughter("etaMC", AliRsnValueDaughter::kEta); | |
366 | axisMomEtaMC->SetUseMCInfo(kTRUE); | |
367 | axisMomEtaMC->SetBins(-1.0,1.0,0.01); | |
368 | ||
369 | // output: 2D histogram of TPC signal vs. TPC momentum | |
370 | AliRsnListOutput *outMonitorEtaMC = new AliRsnListOutput("EtaMC", AliRsnListOutput::kHistoDefault); | |
371 | outMonitorEtaMC->AddValue(axisMomEtaMC); | |
372 | ||
373 | // add outputs to loop | |
374 | if (mon) mon->Add(outMonitorEtaMC); | |
375 | if (lm) lm->AddOutput(outMonitorEtaMC); | |
376 | } | |
377 | ||
378 | AliRsnValueDaughter *axisPtBig = new AliRsnValueDaughter("pt", AliRsnValueDaughter::kPt); | |
379 | axisPtBig->SetBins(0.0,12.0,0.5); | |
380 | ||
381 | // kTOFnsigmaK | |
382 | AliRsnValueDaughter *axisTPCnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTPCnsigmaK); | |
383 | axisTPCnsigmaK->SetBins(1001,-100,100); | |
384 | ||
385 | // output: 2D histogram of TPC signal vs. TPC momentum | |
386 | AliRsnListOutput *outMonitorTPCnsigmaK = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault); | |
387 | outMonitorTPCnsigmaK->AddValue(axisTPCnsigmaK); | |
388 | outMonitorTPCnsigmaK->AddValue(axisPtBig); | |
389 | ||
390 | // add outputs to loop | |
391 | if (mon) mon->Add(outMonitorTPCnsigmaK); | |
392 | if (lm) lm->AddOutput(outMonitorTPCnsigmaK); | |
393 | ||
394 | // kTPCnsigmaPi | |
395 | AliRsnValueDaughter *axisTPCnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTPCnsigmaPi); | |
396 | axisTPCnsigmaPi->SetBins(1001,-100,100); | |
397 | ||
398 | // output: 2D histogram of TPC signal vs. TPC momentum | |
399 | AliRsnListOutput *outMonitorTPCnsigmaPi = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault); | |
400 | outMonitorTPCnsigmaPi->AddValue(axisTPCnsigmaPi); | |
401 | outMonitorTPCnsigmaPi->AddValue(axisPtBig); | |
402 | ||
403 | // add outputs to loop | |
404 | if (mon) mon->Add(outMonitorTPCnsigmaPi); | |
405 | if (lm) lm->AddOutput(outMonitorTPCnsigmaPi); | |
406 | ||
407 | // kTPCnsigmaP | |
408 | AliRsnValueDaughter *axisTPCnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTPCnsigmaP); | |
409 | axisTPCnsigmaP->SetBins(1001,-100,100); | |
410 | ||
411 | // output: 2D histogram of TPC signal vs. TPC momentum | |
412 | AliRsnListOutput *outMonitorTPCnsigmaP = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault); | |
413 | outMonitorTPCnsigmaP->AddValue(axisTPCnsigmaP); | |
414 | outMonitorTPCnsigmaP->AddValue(axisPtBig); | |
415 | ||
416 | // add outputs to loop | |
417 | if (mon) mon->Add(outMonitorTPCnsigmaP); | |
418 | if (lm) lm->AddOutput(outMonitorTPCnsigmaP); | |
419 | ||
420 | ||
421 | if (!opt.Contains("NoTOFSIGMA")) { | |
422 | ||
423 | // kTOFnsigmaK | |
424 | AliRsnValueDaughter *axisTOFnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTOFnsigmaK); | |
425 | axisTOFnsigmaK->SetBins(1001,-100,100); | |
426 | ||
427 | // output: 2D histogram of TPC signal vs. TPC momentum | |
428 | AliRsnListOutput *outMonitorTOFnsigmaK = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault); | |
429 | outMonitorTOFnsigmaK->AddValue(axisTOFnsigmaK); | |
430 | outMonitorTOFnsigmaK->AddValue(axisPtBig); | |
431 | ||
432 | // add outputs to loop | |
433 | if (mon) mon->Add(outMonitorTOFnsigmaK); | |
434 | if (lm) lm->AddOutput(outMonitorTOFnsigmaK); | |
435 | ||
436 | // kTOFnsigmaPi | |
437 | AliRsnValueDaughter *axisTOFnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTOFnsigmaPi); | |
438 | axisTOFnsigmaPi->SetBins(1001,-100,100); | |
439 | ||
440 | // output: 2D histogram of TPC signal vs. TPC momentum | |
441 | AliRsnListOutput *outMonitorTOFnsigmaPi = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault); | |
442 | outMonitorTOFnsigmaPi->AddValue(axisTOFnsigmaPi); | |
443 | outMonitorTOFnsigmaPi->AddValue(axisPtBig); | |
444 | ||
445 | // add outputs to loop | |
446 | if (mon) mon->Add(outMonitorTOFnsigmaPi); | |
447 | if (lm) lm->AddOutput(outMonitorTOFnsigmaPi); | |
448 | ||
449 | // kTOFnsigmaP | |
450 | AliRsnValueDaughter *axisTOFnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTOFnsigmaP); | |
451 | axisTOFnsigmaP->SetBins(1001,-100,100); | |
452 | ||
453 | // output: 2D histogram of TPC signal vs. TPC momentum | |
454 | AliRsnListOutput *outMonitorTOFnsigmaP = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault); | |
455 | outMonitorTOFnsigmaP->AddValue(axisTOFnsigmaP); | |
456 | outMonitorTOFnsigmaP->AddValue(axisPtBig); | |
457 | ||
458 | // add outputs to loop | |
459 | if (mon) mon->Add(outMonitorTOFnsigmaP); | |
460 | if (lm) lm->AddOutput(outMonitorTOFnsigmaP); | |
461 | } | |
462 | ||
463 | ||
464 | // nITCcluster | |
465 | AliRsnValueDaughter *axisITSnClusters = new AliRsnValueDaughter("ITS", AliRsnValueDaughter::kNITSclusters); | |
466 | axisITSnClusters->SetBins(10,0,10); | |
467 | ||
468 | AliRsnListOutput *outMonitorITSnClusters = new AliRsnListOutput("nClusters", AliRsnListOutput::kHistoDefault); | |
469 | outMonitorITSnClusters->AddValue(axisITSnClusters); | |
470 | // add outputs to loop | |
471 | if (mon) mon->Add(outMonitorITSnClusters); | |
472 | if (lm) lm->AddOutput(outMonitorITSnClusters); | |
473 | ||
474 | // nTPCcluster | |
475 | AliRsnValueDaughter *axisTPCnClusters = new AliRsnValueDaughter("TPC", AliRsnValueDaughter::kNTPCclusters); | |
476 | axisTPCnClusters->SetBins(300,0,300); | |
477 | ||
478 | AliRsnListOutput *outMonitorTPCnClusters = new AliRsnListOutput("nClusters", AliRsnListOutput::kHistoDefault); | |
479 | outMonitorTPCnClusters->AddValue(axisTPCnClusters); | |
480 | // add outputs to loop | |
481 | if (mon) mon->Add(outMonitorTPCnClusters); | |
482 | if (lm) lm->AddOutput(outMonitorTPCnClusters); | |
483 | ||
484 | // ITSchi2 | |
485 | AliRsnValueDaughter *axisITSchi2 = new AliRsnValueDaughter("ITS", AliRsnValueDaughter::kITSchi2); | |
486 | axisITSchi2->SetBins(10,0,10); | |
487 | ||
488 | AliRsnListOutput *outMonitorITSchi2 = new AliRsnListOutput("chi2", AliRsnListOutput::kHistoDefault); | |
489 | outMonitorITSchi2->AddValue(axisITSchi2); | |
490 | // add outputs to loop | |
491 | if (mon) mon->Add(outMonitorITSchi2); | |
492 | if (lm) lm->AddOutput(outMonitorITSchi2); | |
493 | ||
494 | // TPCchi2 | |
495 | AliRsnValueDaughter *axisTPCchi2 = new AliRsnValueDaughter("TPC", AliRsnValueDaughter::kTPCchi2); | |
496 | axisTPCchi2->SetBins(10,0,10); | |
497 | ||
498 | AliRsnListOutput *outMonitorTPCchi2 = new AliRsnListOutput("chi2", AliRsnListOutput::kHistoDefault); | |
499 | outMonitorTPCchi2->AddValue(axisTPCchi2); | |
500 | // add outputs to loop | |
501 | if (mon) mon->Add(outMonitorTPCchi2); | |
502 | if (lm) lm->AddOutput(outMonitorTPCchi2); | |
503 | ||
504 | // DCAXY | |
505 | AliRsnValueDaughter *axisDCAXY = new AliRsnValueDaughter("XY", AliRsnValueDaughter::kDCAXY); | |
506 | axisDCAXY->SetBins(200,-1,1); | |
507 | ||
508 | AliRsnListOutput *outMonitorDCAXY = new AliRsnListOutput("DCA", AliRsnListOutput::kHistoDefault); | |
509 | outMonitorDCAXY->AddValue(axisDCAXY); | |
510 | // add outputs to loop | |
511 | if (mon) mon->Add(outMonitorDCAXY); | |
512 | if (lm) lm->AddOutput(outMonitorDCAXY); | |
513 | ||
514 | // DCAZ | |
515 | AliRsnValueDaughter *axisDCAZ = new AliRsnValueDaughter("Z", AliRsnValueDaughter::kDCAZ); | |
516 | axisDCAZ->SetBins(200,-1,1); | |
517 | ||
518 | AliRsnListOutput *outMonitorDCAZ = new AliRsnListOutput("DCA", AliRsnListOutput::kHistoDefault); | |
519 | outMonitorDCAZ->AddValue(axisDCAZ); | |
520 | // add outputs to loop | |
521 | if (mon) mon->Add(outMonitorDCAZ); | |
522 | if (lm) lm->AddOutput(outMonitorDCAZ); | |
523 | ||
524 | AliRsnListOutput *outMonitorPTvsMult = new AliRsnListOutput("PTvsMult",AliRsnListOutput::kHistoDefault); | |
525 | AliRsnValueDaughter *vd1 = new AliRsnValueDaughter("pt",AliRsnValueDaughter::kPt); | |
526 | vd1->SetBins(0.0,5.0,0.01); | |
527 | outMonitorPTvsMult->AddValue(vd1); | |
528 | ||
529 | AliRsnValueEvent *ve1 = new AliRsnValueEvent("mult",AliRsnValueEvent::kMult); | |
530 | ve1->SetBins(0.0,100.0,1); | |
531 | outMonitorPTvsMult->AddValue(ve1); | |
532 | if (mon) mon->Add(outMonitorPTvsMult); | |
533 | if (lm) lm->AddOutput(outMonitorPTvsMult); | |
534 | ||
535 | // AliRsnListOutput *outMonitorMult = new AliRsnListOutput("EventMult",AliRsnListOutput::kHistoDefault); | |
536 | // | |
537 | // AliRsnValueEvent *ve1Multi = new AliRsnValueEvent("centrality",AliRsnValueEvent::kCentralityV0); | |
538 | // ve1Multi->SetBins(0.0,100,10.0); | |
539 | // outMonitorMult->AddValue(ve1Multi); | |
540 | // if (mon) mon->Add(outMonitorMult); | |
541 | // if (lm) lm->AddOutput(outMonitorMult); | |
542 | } | |
543 | ||
544 | void AddMonitorOutputMini(AliRsnMiniMonitorTask *task,Int_t listID1,TString name = "",Char_t charge='0') | |
545 | { | |
546 | TString chargeName="all"; | |
547 | if ( charge == '+' ) chargeName = "pos"; | |
548 | if ( charge == '-' ) chargeName = "neg"; | |
549 | ||
550 | AliRsnMiniMonitor *mondEdx = task->CreateMonitor(Form("%s_dEdx_pTPC_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kdEdxTPCvsP, listID1); | |
551 | mondEdx->SetCharge(charge); | |
552 | AliRsnMiniMonitor *monPt = task->CreateMonitor(Form("%s_Pt_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kTrackPt, listID1); | |
553 | monPt->SetCharge(charge); | |
554 | } | |
555 | ||
556 | void AddParticleMonitor(AliAnalysisTaskSE *task, Bool_t isMC, Int_t listID1,AliRsnCutSet *commonEventCuts=0,AliRsnCutSet *cutPair=0,TString name = "") | |
557 | { | |
558 | Bool_t valid; | |
559 | Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid); | |
560 | Int_t useMCMon = AliRsnTrainManager::GetGlobalInt("RsnUseMCMonitoring",valid); | |
561 | ||
562 | if (isRsnMini) { | |
563 | // Printf("Monitoring by mini is not supported now. It will be soon !!!"); | |
564 | // return ; | |
565 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
566 | AliRsnMiniMonitorTask *monTask = new AliRsnMiniMonitorTask(name.Data(),useMCMon); | |
567 | AddMonitorOutputMini(monTask,listID1,name); | |
568 | // AddMonitorOutputMini(monTask,listID1,name,'+'); | |
569 | // AddMonitorOutputMini(monTask,listID1,name,'-'); | |
570 | mgr->AddTask(monTask); | |
571 | // connect input container according to source choice | |
572 | mgr->ConnectInput(monTask, 0, mgr->GetCommonInputContainer()); | |
573 | ||
574 | // create paths for the output in the common file | |
575 | TString commonPath = AliAnalysisManager::GetCommonFileName(); | |
576 | ||
577 | // create containers for output | |
578 | AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnMonMini%s", name.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, commonPath.Data()); | |
579 | ||
580 | mgr->ConnectOutput(monTask, 1, output); | |
581 | ||
582 | ||
583 | ||
584 | } else { | |
585 | ||
586 | TList *listLoops = new TList; | |
587 | // monitor definition | |
588 | AliRsnDaughterDef *tracksAll = new AliRsnDaughterDef(AliRsnDaughter::kTrack /*'+' or '-'*/); | |
589 | // // AliRsnDaughterDef *tracksPos = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'+'); | |
590 | // // AliRsnDaughterDef *tracksNeg = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'-'); | |
591 | // | |
592 | AliRsnLoopDaughter *lm =0; | |
593 | // // loop object | |
594 | listLoops->Add(new AliRsnLoopDaughter(Form("ALL_%s", name.Data()), listID1, tracksAll)); | |
595 | // | |
596 | // // listLoops->Add(new AliRsnLoopDaughter(Form("%s_pos", name.Data()), listID1, tracksPos)); | |
597 | // // listLoops->Add(new AliRsnLoopDaughter(Form("%s_neg", name.Data()), listID1, tracksNeg)); | |
598 | // | |
599 | TIter next(listLoops); | |
600 | while ((lm = (AliRsnLoopDaughter *)next.Next())) { | |
601 | // if (commonEventCuts) lm->SetEventCuts(commonEventCuts); | |
602 | AddMonitorOutput(0,"mc_loop",lm); | |
603 | ((AliRsnAnalysisTask *)task)->AddLoop(lm); | |
604 | } | |
605 | } | |
606 | } | |
607 |