]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/macros/lego_train/RsnConfig.C
Added macro for systematics study for K* (S.Singha) + update lego_train macro (mvala)
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / RsnConfig.C
CommitLineData
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
20Bool_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
110Bool_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
134void 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
154Bool_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
252void 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
544void 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
556void 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