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>
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) {
23 if (!task) return kFALSE;
29 Int_t isMC = AliRsnTrainManager::GetGlobalInt("IsMC",valid);
30 Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
31 Int_t isMixing = AliRsnTrainManager::GetGlobalInt("IsMixing",valid);
33 TString rsnCutOptCommon = AliRsnTrainManager::GetGlobalStr("RsnLegoTrainCommonCutOption",valid);
39 // set commol eventCuts
41 if (!RsnLoadMacroFromConfig("AddRsnCommonEventCuts.C")) return kFALSE;
42 AliRsnCutSet *commonEventCuts = AddRsnCommonEventCuts(task);
44 if (!RsnLoadMacroFromConfig("AddRsnCommonPairCuts.C")) return kFALSE;
45 AliRsnCutSet *commonPairCuts = AddRsnCommonPairCuts();
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());
55 GetOptionFromString(rsnObj->GetTitle(),rsnCutName,rsnCutOpt);
56 rsnCutNameOptFull=rsnCutName;
57 if (!rsnCutOpt.IsNull())rsnCutNameOptFull += Form("_%s",rsnCutOpt.Data());
59 if (!rsnCutOptCommon.IsNull()) {
60 if (!rsnCutOpt.IsNull()) rsnCutOpt += "_";
61 rsnCutOpt += rsnCutOptCommon.Data();
64 if (!RsnLoadMacroFromConfig(Form("AddRsnDaughterCuts%s.C",rsnCutName.Data()))) return kFALSE;
65 if (!RsnLoadMacroFromConfig(Form("AddRsnPairs%s.C",rsnName.Data()))) return kFALSE;
67 rsnNameOptFull.ToLower();
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));
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()));
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));
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()));
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));
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()));
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));
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()));
101 Printf("Error : Particle %s is not supported !!!!",rsnName.Data());
110 Bool_t RsnLoadMacroFromConfig(TString macro,TString path="") {
113 TString lego_path = AliAnalysisManager::GetGlobalStr("RsnLegoTrainPath",valid);
114 if (!valid) lego_path = "$ALICE_ROOT/PWGLF/RESONANCES/macros/lego_train";
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);
122 if (!gSystem->AccessPathName(gSystem->ExpandPathName(TString::Format("%s/%s",lego_path.Data(),macro.Data()).Data()))) {
123 Printf("Loading macro %s ...",gSystem->ExpandPathName(TString::Format("%s/%s",lego_path.Data(),macro.Data()).Data()));
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()));
129 Printf("Error loading %s",macro.Data());
134 void GetOptionFromString(TString str,TString &outStr1,TString &outStr2,TString d=":") {
136 TObjArray *tokens = str.Tokenize(d.Data());
137 TObjString *objStr = (TObjString *)tokens->At(0);
143 outStr1 = objStr->GetString();
145 objStr = (TObjString *) tokens->At(1);
150 outStr2 = objStr->GetString();
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 = "") {
157 Int_t useMCMomentum = AliRsnTrainManager::GetGlobalInt("RsnUseMCMomentum",valid);
158 Bool_t typeSame = (pType1 == pType2);
160 Printf("------------- id1=%d id2=%d",pType1,pType2);
162 TList *listLoops = new TList;
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);
170 // loop object creation
171 AliRsnLoopPair *lp = 0;
174 lp = new AliRsnLoopPair(Form("%s.RecPM", name.Data()), pairDefPM, kFALSE);
178 lp = new AliRsnLoopPair(Form("%s.RecMP", name.Data()), pairDefMP, kFALSE);
182 // sets +- TRUE pairs
184 lp = new AliRsnLoopPair(Form("%s.RecPM_RecMother", name.Data()), pairDefPM, kFALSE);
185 lp->SetOnlyTrue(kTRUE);
186 lp->SetCheckDecay(kTRUE);
189 lp = new AliRsnLoopPair(Form("%s.RecMP_RecMother", name.Data()), pairDefMP, kFALSE);
190 lp->SetOnlyTrue(kTRUE);
191 lp->SetCheckDecay(kTRUE);
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);
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);
207 lp = new AliRsnLoopPair(Form("%s.RecPP", name.Data()), pairDefPP, kFALSE);
211 lp = new AliRsnLoopPair(Form("%s.RecMM", name.Data()), pairDefMM, kFALSE);
215 // sets +- Mixing (NOT mini)
216 lp = new AliRsnLoopPair(Form("%s.RecPM_mix", name.Data()), pairDefPM, kTRUE);
219 // sets -+ Mixing (NOT mini)
220 lp = new AliRsnLoopPair(Form("%s.RecMP_mix", name.Data()), pairDefMP, kTRUE);
223 // sets ++ Mixing (NOT mini)
224 lp = new AliRsnLoopPair(Form("%s.RecPP_mix", name.Data()), pairDefPP, kTRUE);
227 // sets -- Mixing (NOT mini)
228 lp = new AliRsnLoopPair(Form("%s.RecMM_mix", name.Data()), pairDefMM, kTRUE);
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);
247 ((AliRsnAnalysisTask *)task)->AddLoop(lp);
252 void AddMonitorOutput(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *lm=0)
256 Int_t useMCMon = AliRsnTrainManager::GetGlobalInt("RsnUseMCMonitoring",valid);
257 // if (useMCMon) return;
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);
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);
271 // add outputs to loop
272 if (mon) mon->Add(outMonitordEdxTPC);
273 if (lm) lm->AddOutput(outMonitordEdxTPC);
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);
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);
288 // add outputs to loop
289 if (mon) mon->Add(outMonitordEdxTOF);
290 if (lm) lm->AddOutput(outMonitordEdxTOF);
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);
298 // output: 2D histogram of TPC signal vs. TPC momentum
299 AliRsnListOutput *outMonitorP = new AliRsnListOutput("P", AliRsnListOutput::kHistoDefault);
300 outMonitorP->AddValue(axisMomP);
302 // add outputs to loop
303 if (mon) mon->Add(outMonitorP);
304 if (lm) lm->AddOutput(outMonitorP);
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);
313 // output: 2D histogram of TPC signal vs. TPC momentum
314 AliRsnListOutput *outMonitorPMC = new AliRsnListOutput("PMC", AliRsnListOutput::kHistoDefault);
315 outMonitorPMC->AddValue(axisMomPMC);
317 // add outputs to loop
318 if (mon) mon->Add(outMonitorPMC);
319 if (lm) lm->AddOutput(outMonitorPMC);
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);
328 // output: 2D histogram of TPC signal vs. TPC momentum
329 AliRsnListOutput *outMonitorPt = new AliRsnListOutput("Pt", AliRsnListOutput::kHistoDefault);
330 outMonitorPt->AddValue(axisMomPt);
332 // add outputs to loop
333 if (mon) mon->Add(outMonitorPt);
334 if (lm) lm->AddOutput(outMonitorPt);
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);
342 // output: 2D histogram of TPC signal vs. TPC momentum
343 AliRsnListOutput *outMonitorPtMC = new AliRsnListOutput("PtMC", AliRsnListOutput::kHistoDefault);
344 outMonitorPtMC->AddValue(axisMomPtMC);
346 // add outputs to loop
347 if (mon) mon->Add(outMonitorPtMC);
348 if (lm) lm->AddOutput(outMonitorPtMC);
352 AliRsnValueDaughter *axisMomEta = new AliRsnValueDaughter("eta", AliRsnValueDaughter::kEta);
353 axisMomEta->SetBins(-1.0,1.0,0.01);
355 // output: 2D histogram of TPC signal vs. TPC momentum
356 AliRsnListOutput *outMonitorEta = new AliRsnListOutput("Eta", AliRsnListOutput::kHistoDefault);
357 outMonitorEta->AddValue(axisMomEta);
359 // add outputs to loop
360 if (mon) mon->Add(outMonitorEta);
361 if (lm) lm->AddOutput(outMonitorEta);
365 AliRsnValueDaughter *axisMomEtaMC = new AliRsnValueDaughter("etaMC", AliRsnValueDaughter::kEta);
366 axisMomEtaMC->SetUseMCInfo(kTRUE);
367 axisMomEtaMC->SetBins(-1.0,1.0,0.01);
369 // output: 2D histogram of TPC signal vs. TPC momentum
370 AliRsnListOutput *outMonitorEtaMC = new AliRsnListOutput("EtaMC", AliRsnListOutput::kHistoDefault);
371 outMonitorEtaMC->AddValue(axisMomEtaMC);
373 // add outputs to loop
374 if (mon) mon->Add(outMonitorEtaMC);
375 if (lm) lm->AddOutput(outMonitorEtaMC);
378 // AliRsnValueDaughter *axisPtBig = new AliRsnValueDaughter("pt", AliRsnValueDaughter::kPt);
379 AliRsnValueDaughter *axisPtBig = new AliRsnValueDaughter("p", AliRsnValueDaughter::kP);
380 axisPtBig->SetBins(0.0,12.0,0.1);
383 AliRsnValueDaughter *axisTPCnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTPCnsigmaK);
384 axisTPCnsigmaK->SetBins(1000,-100,100);
386 // output: 2D histogram of TPC signal vs. TPC momentum
387 AliRsnListOutput *outMonitorTPCnsigmaK = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
388 outMonitorTPCnsigmaK->AddValue(axisPtBig);
389 outMonitorTPCnsigmaK->AddValue(axisTPCnsigmaK);
391 // add outputs to loop
392 if (mon) mon->Add(outMonitorTPCnsigmaK);
393 if (lm) lm->AddOutput(outMonitorTPCnsigmaK);
396 AliRsnValueDaughter *axisTPCnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTPCnsigmaPi);
397 axisTPCnsigmaPi->SetBins(1000,-100,100);
399 // output: 2D histogram of TPC signal vs. TPC momentum
400 AliRsnListOutput *outMonitorTPCnsigmaPi = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
401 outMonitorTPCnsigmaPi->AddValue(axisPtBig);
402 outMonitorTPCnsigmaPi->AddValue(axisTPCnsigmaPi);
404 // add outputs to loop
405 if (mon) mon->Add(outMonitorTPCnsigmaPi);
406 if (lm) lm->AddOutput(outMonitorTPCnsigmaPi);
409 AliRsnValueDaughter *axisTPCnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTPCnsigmaP);
410 axisTPCnsigmaP->SetBins(1000,-100,100);
412 // output: 2D histogram of TPC signal vs. TPC momentum
413 AliRsnListOutput *outMonitorTPCnsigmaP = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
414 outMonitorTPCnsigmaP->AddValue(axisPtBig);
415 outMonitorTPCnsigmaP->AddValue(axisTPCnsigmaP);
417 // add outputs to loop
418 if (mon) mon->Add(outMonitorTPCnsigmaP);
419 if (lm) lm->AddOutput(outMonitorTPCnsigmaP);
422 if (!opt.Contains("NoTOFSIGMA")) {
425 AliRsnValueDaughter *axisTOFnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTOFnsigmaK);
426 axisTOFnsigmaK->SetBins(1000,-100,100);
428 // output: 2D histogram of TPC signal vs. TPC momentum
429 AliRsnListOutput *outMonitorTOFnsigmaK = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
430 outMonitorTOFnsigmaK->AddValue(axisPtBig);
431 outMonitorTOFnsigmaK->AddValue(axisTOFnsigmaK);
433 // add outputs to loop
434 if (mon) mon->Add(outMonitorTOFnsigmaK);
435 if (lm) lm->AddOutput(outMonitorTOFnsigmaK);
438 AliRsnValueDaughter *axisTOFnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTOFnsigmaPi);
439 axisTOFnsigmaPi->SetBins(1000,-100,100);
441 // output: 2D histogram of TPC signal vs. TPC momentum
442 AliRsnListOutput *outMonitorTOFnsigmaPi = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
443 outMonitorTOFnsigmaPi->AddValue(axisPtBig);
444 outMonitorTOFnsigmaPi->AddValue(axisTOFnsigmaPi);
446 // add outputs to loop
447 if (mon) mon->Add(outMonitorTOFnsigmaPi);
448 if (lm) lm->AddOutput(outMonitorTOFnsigmaPi);
451 AliRsnValueDaughter *axisTOFnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTOFnsigmaP);
452 axisTOFnsigmaP->SetBins(1000,-100,100);
454 // output: 2D histogram of TPC signal vs. TPC momentum
455 AliRsnListOutput *outMonitorTOFnsigmaP = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
456 outMonitorTOFnsigmaP->AddValue(axisPtBig);
457 outMonitorTOFnsigmaP->AddValue(axisTOFnsigmaP);
459 // add outputs to loop
460 if (mon) mon->Add(outMonitorTOFnsigmaP);
461 if (lm) lm->AddOutput(outMonitorTOFnsigmaP);
466 AliRsnValueDaughter *axisITSnClusters = new AliRsnValueDaughter("ITS", AliRsnValueDaughter::kNITSclusters);
467 axisITSnClusters->SetBins(8,-0.5,7.5);
469 AliRsnListOutput *outMonitorITSnClusters = new AliRsnListOutput("nClusters", AliRsnListOutput::kHistoDefault);
470 outMonitorITSnClusters->AddValue(axisPtBig);
471 outMonitorITSnClusters->AddValue(axisITSnClusters);
472 // add outputs to loop
473 if (mon) mon->Add(outMonitorITSnClusters);
474 if (lm) lm->AddOutput(outMonitorITSnClusters);
477 AliRsnValueDaughter *axisTPCnClusters = new AliRsnValueDaughter("TPC", AliRsnValueDaughter::kNTPCclusters);
478 axisTPCnClusters->SetBins(166,-0.5,165.5);
480 AliRsnListOutput *outMonitorTPCnClusters = new AliRsnListOutput("nClusters", AliRsnListOutput::kHistoDefault);
481 outMonitorTPCnClusters->AddValue(axisPtBig);
482 outMonitorTPCnClusters->AddValue(axisTPCnClusters);
483 // add outputs to loop
484 if (mon) mon->Add(outMonitorTPCnClusters);
485 if (lm) lm->AddOutput(outMonitorTPCnClusters);
488 AliRsnValueDaughter *axisITSchi2 = new AliRsnValueDaughter("ITS", AliRsnValueDaughter::kITSchi2);
489 axisITSchi2->SetBins(100,0,10);
491 AliRsnListOutput *outMonitorITSchi2 = new AliRsnListOutput("chi2", AliRsnListOutput::kHistoDefault);
492 outMonitorITSchi2->AddValue(axisPtBig);
493 outMonitorITSchi2->AddValue(axisITSchi2);
494 // add outputs to loop
495 if (mon) mon->Add(outMonitorITSchi2);
496 if (lm) lm->AddOutput(outMonitorITSchi2);
499 AliRsnValueDaughter *axisTPCchi2 = new AliRsnValueDaughter("TPC", AliRsnValueDaughter::kTPCchi2);
500 axisTPCchi2->SetBins(100,0,10);
502 AliRsnListOutput *outMonitorTPCchi2 = new AliRsnListOutput("chi2", AliRsnListOutput::kHistoDefault);
503 outMonitorTPCchi2->AddValue(axisPtBig);
504 outMonitorTPCchi2->AddValue(axisTPCchi2);
505 // add outputs to loop
506 if (mon) mon->Add(outMonitorTPCchi2);
507 if (lm) lm->AddOutput(outMonitorTPCchi2);
510 AliRsnValueDaughter *axisDCAXY = new AliRsnValueDaughter("XY", AliRsnValueDaughter::kDCAXY);
511 axisDCAXY->SetBins(200,-1,1);
513 AliRsnListOutput *outMonitorDCAXY = new AliRsnListOutput("DCA", AliRsnListOutput::kHistoDefault);
514 outMonitorDCAXY->AddValue(axisPtBig);
515 outMonitorDCAXY->AddValue(axisDCAXY);
516 // add outputs to loop
517 if (mon) mon->Add(outMonitorDCAXY);
518 if (lm) lm->AddOutput(outMonitorDCAXY);
521 AliRsnValueDaughter *axisDCAZ = new AliRsnValueDaughter("Z", AliRsnValueDaughter::kDCAZ);
522 axisDCAZ->SetBins(200,-1,1);
524 AliRsnListOutput *outMonitorDCAZ = new AliRsnListOutput("DCA", AliRsnListOutput::kHistoDefault);
525 outMonitorDCAZ->AddValue(axisPtBig);
526 outMonitorDCAZ->AddValue(axisDCAZ);
527 // add outputs to loop
528 if (mon) mon->Add(outMonitorDCAZ);
529 if (lm) lm->AddOutput(outMonitorDCAZ);
531 AliRsnListOutput *outMonitorPTvsMult = new AliRsnListOutput("PTvsMult",AliRsnListOutput::kHistoDefault);
532 AliRsnValueDaughter *vd1 = new AliRsnValueDaughter("pt",AliRsnValueDaughter::kPt);
533 vd1->SetBins(0.0,5.0,0.01);
534 outMonitorPTvsMult->AddValue(vd1);
536 AliRsnValueEvent *ve1 = new AliRsnValueEvent("mult",AliRsnValueEvent::kMult);
537 ve1->SetBins(0.0,100.0,1);
538 outMonitorPTvsMult->AddValue(ve1);
539 if (mon) mon->Add(outMonitorPTvsMult);
540 if (lm) lm->AddOutput(outMonitorPTvsMult);
542 // AliRsnListOutput *outMonitorMult = new AliRsnListOutput("EventMult",AliRsnListOutput::kHistoDefault);
544 // AliRsnValueEvent *ve1Multi = new AliRsnValueEvent("centrality",AliRsnValueEvent::kCentralityV0);
545 // ve1Multi->SetBins(0.0,100,10.0);
546 // outMonitorMult->AddValue(ve1Multi);
547 // if (mon) mon->Add(outMonitorMult);
548 // if (lm) lm->AddOutput(outMonitorMult);
551 void AddMonitorOutputMini(AliRsnMiniMonitorTask *task,Int_t listID1,TString name = "",Char_t charge='0')
553 TString chargeName="all";
554 if ( charge == '+' ) chargeName = "pos";
555 if ( charge == '-' ) chargeName = "neg";
557 AliRsnMiniMonitor *mondEdx = task->CreateMonitor(Form("%s_dEdx_pTPC_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kdEdxTPCvsP, listID1);
558 mondEdx->SetCharge(charge);
559 AliRsnMiniMonitor *monPt = task->CreateMonitor(Form("%s_Pt_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kTrackPt, listID1);
560 monPt->SetCharge(charge);
563 void AddParticleMonitor(AliAnalysisTaskSE *task, Bool_t isMC, Int_t listID1,AliRsnCutSet *commonEventCuts=0,AliRsnCutSet *cutPair=0,TString name = "")
566 Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
567 Int_t useMCMon = AliRsnTrainManager::GetGlobalInt("RsnUseMCMonitoring",valid);
570 // Printf("Monitoring by mini is not supported now. It will be soon !!!");
572 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
573 AliRsnMiniMonitorTask *monTask = new AliRsnMiniMonitorTask(name.Data(),useMCMon);
574 AddMonitorOutputMini(monTask,listID1,name);
575 // AddMonitorOutputMini(monTask,listID1,name,'+');
576 // AddMonitorOutputMini(monTask,listID1,name,'-');
577 mgr->AddTask(monTask);
578 // connect input container according to source choice
579 mgr->ConnectInput(monTask, 0, mgr->GetCommonInputContainer());
581 // create paths for the output in the common file
582 TString commonPath = AliAnalysisManager::GetCommonFileName();
584 // create containers for output
585 AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnMonMini%s", name.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, commonPath.Data());
587 mgr->ConnectOutput(monTask, 1, output);
593 TList *listLoops = new TList;
594 // monitor definition
595 AliRsnDaughterDef *tracksAll = new AliRsnDaughterDef(AliRsnDaughter::kTrack /*'+' or '-'*/);
596 // // AliRsnDaughterDef *tracksPos = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'+');
597 // // AliRsnDaughterDef *tracksNeg = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'-');
599 AliRsnLoopDaughter *lm =0;
601 listLoops->Add(new AliRsnLoopDaughter(Form("ALL_%s", name.Data()), listID1, tracksAll));
603 // // listLoops->Add(new AliRsnLoopDaughter(Form("%s_pos", name.Data()), listID1, tracksPos));
604 // // listLoops->Add(new AliRsnLoopDaughter(Form("%s_neg", name.Data()), listID1, tracksNeg));
606 TIter next(listLoops);
607 while ((lm = (AliRsnLoopDaughter *)next.Next())) {
608 // if (commonEventCuts) lm->SetEventCuts(commonEventCuts);
609 AddMonitorOutput(0,"mc_loop",lm);
610 ((AliRsnAnalysisTask *)task)->AddLoop(lm);