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>
19 Bool_t RsnConfig(AliAnalysisTaskSE *task,Bool_t isMC,Bool_t isMixing,AliRsnInputHandler *rsnIH=0,TList *listRsn=0) {
21 if (!task) return kFALSE;
27 Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
28 TString rsnCutOptCommon = AliAnalysisManager::GetGlobalStr("rsnLegoTrainCommonCutOption",valid);
32 // set commol eventCuts
34 if (!RsnLoadMacroFromConfig("AddRsnCommonEventCuts.C")) return kFALSE;
35 AliRsnCutSet *commonEventCuts = AddRsnCommonEventCuts(task);
37 if (!RsnLoadMacroFromConfig("AddRsnCommonPairCuts.C")) return kFALSE;
38 AliRsnCutSet *commonPairCuts = AddRsnCommonPairCuts();
42 TString rsnName,rsnNameOpt,rsnNameOptFull,rsnCutName,rsnCutOpt,rsnCutNameOptFull;
43 while ((rsnObj = (TNamed *)next())) {
44 GetOptionFromString(rsnObj->GetName(),rsnName,rsnNameOpt);
45 rsnNameOptFull=rsnName;
46 if (!rsnNameOpt.IsNull()) rsnNameOptFull += Form("_%s",rsnNameOpt.Data());
48 GetOptionFromString(rsnObj->GetTitle(),rsnCutName,rsnCutOpt);
49 rsnCutNameOptFull=rsnCutName;
50 if (!rsnCutOpt.IsNull())rsnCutNameOptFull += Form("_%s",rsnCutOpt.Data());
52 if (!rsnCutOptCommon.IsNull()) {
53 if (!rsnCutOpt.IsNull()) rsnCutOpt += "_";
54 rsnCutOpt += rsnCutOptCommon.Data();
57 if (!RsnLoadMacroFromConfig(Form("AddRsnDaughterCuts%s.C",rsnCutName.Data()))) return kFALSE;
58 if (!RsnLoadMacroFromConfig(Form("AddRsnPairs%s.C",rsnName.Data()))) return kFALSE;
60 rsnNameOptFull.ToLower();
63 if (!rsnName.CompareTo("phi")) {
64 numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kKaon,AliPID::kKaon,\"%s\",%d,(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),isRsnMini,rsnIH, task));
66 if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_K",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
67 AddRsnPairsPhi(task,isMC,isMixing,AliPID::kKaon,cutIndex,AliPID::kKaon,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
70 } else if (!rsnName.CompareTo("kstar")) {
71 numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kKaon,AliPID::kPion,\"%s\",%d,(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),isRsnMini,rsnIH,task));
73 if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_K",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
74 if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s_%s_pi",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
75 AddRsnPairsKStar(task,isMC,isMixing,AliPID::kKaon,cutIndex,AliPID::kPion,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s_%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
79 Printf("Error : Particle %s is not supported !!!!",rsnName.Data());
88 Bool_t RsnLoadMacroFromConfig(TString macro,TString path="") {
91 TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
92 if (!valid) lego_path = "$ALICE_ROOT/PWGLF/RESONANCES/macros/lego_train";
94 if (!gSystem->AccessPathName(macro.Data())) {
95 gROOT->LoadMacro(macro.Data());
96 Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
100 if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
101 gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
102 Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
106 Printf("Error loading %s",macro.Data());
111 void GetOptionFromString(TString str,TString &outStr1,TString &outStr2,TString d=":") {
113 TObjArray *tokens = str.Tokenize(d.Data());
114 TObjString *objStr = (TObjString *)tokens->At(0);
120 outStr1 = objStr->GetString();
122 objStr = (TObjString *) tokens->At(1);
127 outStr2 = objStr->GetString();
131 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 = "") {
134 Int_t useMCMomentum = AliAnalysisManager::GetGlobalInt("rsnUseMCMomentum",valid);
136 Bool_t typeSame = (pType1 == pType2);
138 // Printf("------------- id1=%d id2=%d",listID1,listID2);
140 TList *listLoops = new TList;
143 AliRsnPairDef *pairDefPM = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '+', (AliRsnDaughter::ESpecies)pType2, '-', pdgMother, massMother);
144 AliRsnPairDef *pairDefMP = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '-', (AliRsnDaughter::ESpecies)pType2, '+', pdgMother, massMother);
145 AliRsnPairDef *pairDefPP = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '+', (AliRsnDaughter::ESpecies)pType2, '+', pdgMother, massMother);
146 AliRsnPairDef *pairDefMM = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '-', (AliRsnDaughter::ESpecies)pType2, '-', pdgMother, massMother);
148 // loop object creation
149 AliRsnLoopPair *lp = 0;
152 lp = new AliRsnLoopPair(Form("%s_PM", name.Data()), pairDefPM, kFALSE);
156 lp = new AliRsnLoopPair(Form("%s_MP", name.Data()), pairDefMP, kFALSE);
160 // sets +- TRUE pairs
162 lp = new AliRsnLoopPair(Form("%s_PM_TRUE", name.Data()), pairDefPM, kFALSE);
163 lp->SetOnlyTrue(kTRUE);
164 lp->SetCheckDecay(kTRUE);
167 lp = new AliRsnLoopPair(Form("%s_MP_TRUE", name.Data()), pairDefMP, kFALSE);
168 lp->SetOnlyTrue(kTRUE);
169 lp->SetCheckDecay(kTRUE);
172 // sets +- TRUE paris (MC is used for momentum)
173 lp = new AliRsnLoopPair(Form("%s_PM_TRUE_MC", name.Data()), pairDefPM, kFALSE);
174 lp->SetTrueMC(kTRUE);
177 // sets +- TRUE paris (MC is used for momentum)
178 lp = new AliRsnLoopPair(Form("%s_MP_TRUE_MC", name.Data()), pairDefMP, kFALSE);
179 lp->SetTrueMC(kTRUE);
185 lp = new AliRsnLoopPair(Form("%s_PP", name.Data()), pairDefPP, kFALSE);
189 lp = new AliRsnLoopPair(Form("%s_MM", name.Data()), pairDefMM, kFALSE);
193 // sets +- Mixing (NOT mini)
194 lp = new AliRsnLoopPair(Form("%s_PM", name.Data()), pairDefPM, kTRUE);
197 // sets -+ Mixing (NOT mini)
198 lp = new AliRsnLoopPair(Form("%s_MP", name.Data()), pairDefMP, kTRUE);
201 // sets ++ Mixing (NOT mini)
202 lp = new AliRsnLoopPair(Form("%s_PP", name.Data()), pairDefPP, kTRUE);
205 // sets -- Mixing (NOT mini)
206 lp = new AliRsnLoopPair(Form("%s_MM", name.Data()), pairDefMM, kTRUE);
211 // loops over all AliRsnLoops and sets everything (don't touch it if you don't know what you are doing)
212 TIter next(listLoops);
213 while ((lp = (AliRsnLoopPair *)next.Next())) {
214 lp->SetListID(0, listID1);
215 lp->SetListID(1, listID2);
216 lp->SetMCRefInfo(useMCMomentum);
217 if (commonPairCuts) lp->SetPairCuts(commonPairCuts);
218 if (commonEventCuts) lp->SetEventCuts(commonEventCuts);
219 if (name.Contains("phi")) AddPairOutputPhi(lp);
220 else if (name.Contains("kstar")) AddPairOutputKStar(lp);
222 ((AliRsnAnalysisTask *)task)->AddLoop(lp);
227 void AddMonitorOutput(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *lm=0)
231 Int_t useMCMon = AliAnalysisManager::GetGlobalInt("rsnUseMCMonitoring",valid);
232 // if (useMCMon) return;
235 AliRsnValueDaughter *axisMomTPC = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc);
236 AliRsnValueDaughter *axisSigTPC = new AliRsnValueDaughter("sTPC", AliRsnValueDaughter::kTPCsignal);
237 axisMomTPC->SetBins(0.0,5.0,0.01);
238 axisSigTPC->SetBins(0.0,500.0,2.0);
240 // output: 2D histogram of TPC signal vs. TPC momentum
241 AliRsnListOutput *outMonitordEdxTPC = new AliRsnListOutput("dEdx", AliRsnListOutput::kHistoDefault);
242 outMonitordEdxTPC->AddValue(axisMomTPC);
243 outMonitordEdxTPC->AddValue(axisSigTPC);
245 // add outputs to loop
246 if (mon) mon->Add(outMonitordEdxTPC);
247 if (lm) lm->AddOutput(outMonitordEdxTPC);
250 AliRsnValueDaughter *axisMomTPCForTOF = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc);
251 AliRsnValueDaughter *axisSigTOF = new AliRsnValueDaughter("sTOF", AliRsnValueDaughter::kTOFsignal);
252 axisMomTPCForTOF->SetBins(0.0,5.0,0.01);
253 axisSigTOF->SetBins(0.0,500.0,2.0);
255 // output: 2D histogram of TPC signal vs. TPC momentum
256 AliRsnListOutput *outMonitordEdxTOF = new AliRsnListOutput("Edx", AliRsnListOutput::kHistoDefault);
257 outMonitordEdxTOF->AddValue(axisMomTPCForTOF);
258 outMonitordEdxTOF->AddValue(axisSigTOF);
260 // add outputs to loop
261 if (mon) mon->Add(outMonitordEdxTOF);
262 if (lm) lm->AddOutput(outMonitordEdxTOF);
266 AliRsnValueDaughter *axisMomP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kP);
267 axisMomP->SetBins(0.0,5.0,0.01);
269 // output: 2D histogram of TPC signal vs. TPC momentum
270 AliRsnListOutput *outMonitorP = new AliRsnListOutput("P", AliRsnListOutput::kHistoDefault);
271 outMonitorP->AddValue(axisMomP);
273 // add outputs to loop
274 if (mon) mon->Add(outMonitorP);
275 if (lm) lm->AddOutput(outMonitorP);
279 AliRsnValueDaughter *axisMomPMC = new AliRsnValueDaughter("pMC", AliRsnValueDaughter::kP);
280 axisMomPMC->SetUseMCInfo(kTRUE);
281 axisMomPMC->SetBins(0.0,5.0,0.01);
283 // output: 2D histogram of TPC signal vs. TPC momentum
284 AliRsnListOutput *outMonitorPMC = new AliRsnListOutput("PMC", AliRsnListOutput::kHistoDefault);
285 outMonitorPMC->AddValue(axisMomPMC);
287 // add outputs to loop
288 if (mon) mon->Add(outMonitorPMC);
289 if (lm) lm->AddOutput(outMonitorPMC);
294 AliRsnValueDaughter *axisMomPt = new AliRsnValueDaughter("pt", AliRsnValueDaughter::kPt);
295 axisMomPt->SetBins(0.0,5.0,0.01);
297 // output: 2D histogram of TPC signal vs. TPC momentum
298 AliRsnListOutput *outMonitorPt = new AliRsnListOutput("Pt", AliRsnListOutput::kHistoDefault);
299 outMonitorPt->AddValue(axisMomPt);
301 // add outputs to loop
302 if (mon) mon->Add(outMonitorPt);
303 if (lm) lm->AddOutput(outMonitorPt);
306 AliRsnValueDaughter *axisMomPtMC = new AliRsnValueDaughter("ptMC", AliRsnValueDaughter::kPt);
307 axisMomPtMC->SetUseMCInfo(kTRUE);
308 axisMomPtMC->SetBins(0.0,5.0,0.01);
310 // output: 2D histogram of TPC signal vs. TPC momentum
311 AliRsnListOutput *outMonitorPtMC = new AliRsnListOutput("PtMC", AliRsnListOutput::kHistoDefault);
312 outMonitorPtMC->AddValue(axisMomPtMC);
314 // add outputs to loop
315 if (mon) mon->Add(outMonitorPtMC);
316 if (lm) lm->AddOutput(outMonitorPtMC);
320 AliRsnValueDaughter *axisMomEta = new AliRsnValueDaughter("eta", AliRsnValueDaughter::kEta);
321 axisMomEta->SetBins(-1.0,1.0,0.01);
323 // output: 2D histogram of TPC signal vs. TPC momentum
324 AliRsnListOutput *outMonitorEta = new AliRsnListOutput("Eta", AliRsnListOutput::kHistoDefault);
325 outMonitorEta->AddValue(axisMomEta);
327 // add outputs to loop
328 if (mon) mon->Add(outMonitorEta);
329 if (lm) lm->AddOutput(outMonitorEta);
333 AliRsnValueDaughter *axisMomEtaMC = new AliRsnValueDaughter("etaMC", AliRsnValueDaughter::kEta);
334 axisMomEtaMC->SetUseMCInfo(kTRUE);
335 axisMomEtaMC->SetBins(-1.0,1.0,0.01);
337 // output: 2D histogram of TPC signal vs. TPC momentum
338 AliRsnListOutput *outMonitorEtaMC = new AliRsnListOutput("EtaMC", AliRsnListOutput::kHistoDefault);
339 outMonitorEtaMC->AddValue(axisMomEtaMC);
341 // add outputs to loop
342 if (mon) mon->Add(outMonitorEtaMC);
343 if (lm) lm->AddOutput(outMonitorEtaMC);
346 AliRsnValueDaughter *axisTPCnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTPCnsigmaK);
347 axisTPCnsigmaK->SetBins(1001,-100,100);
349 // output: 2D histogram of TPC signal vs. TPC momentum
350 AliRsnListOutput *outMonitorTPCnsigmaK = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
351 outMonitorTPCnsigmaK->AddValue(axisTPCnsigmaK);
353 // add outputs to loop
354 if (mon) mon->Add(outMonitorTPCnsigmaK);
355 if (lm) lm->AddOutput(outMonitorTPCnsigmaK);
358 AliRsnValueDaughter *axisTPCnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTPCnsigmaPi);
359 axisTPCnsigmaPi->SetBins(1001,-100,100);
361 // output: 2D histogram of TPC signal vs. TPC momentum
362 AliRsnListOutput *outMonitorTPCnsigmaPi = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
363 outMonitorTPCnsigmaPi->AddValue(axisTPCnsigmaPi);
365 // add outputs to loop
366 if (mon) mon->Add(outMonitorTPCnsigmaPi);
367 if (lm) lm->AddOutput(outMonitorTPCnsigmaPi);
370 AliRsnValueDaughter *axisTPCnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTPCnsigmaP);
371 axisTPCnsigmaP->SetBins(1001,-100,100);
373 // output: 2D histogram of TPC signal vs. TPC momentum
374 AliRsnListOutput *outMonitorTPCnsigmaP = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
375 outMonitorTPCnsigmaP->AddValue(axisTPCnsigmaP);
377 // add outputs to loop
378 if (mon) mon->Add(outMonitorTPCnsigmaP);
379 if (lm) lm->AddOutput(outMonitorTPCnsigmaP);
382 if (!opt.Contains("NoTOFSIGMA")) {
385 AliRsnValueDaughter *axisTOFnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTOFnsigmaK);
386 axisTOFnsigmaK->SetBins(1001,-100,100);
388 // output: 2D histogram of TPC signal vs. TPC momentum
389 AliRsnListOutput *outMonitorTOFnsigmaK = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
390 outMonitorTOFnsigmaK->AddValue(axisTOFnsigmaK);
392 // add outputs to loop
393 if (mon) mon->Add(outMonitorTOFnsigmaK);
394 if (lm) lm->AddOutput(outMonitorTOFnsigmaK);
397 AliRsnValueDaughter *axisTOFnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTOFnsigmaPi);
398 axisTOFnsigmaPi->SetBins(1001,-100,100);
400 // output: 2D histogram of TPC signal vs. TPC momentum
401 AliRsnListOutput *outMonitorTOFnsigmaPi = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
402 outMonitorTOFnsigmaPi->AddValue(axisTOFnsigmaPi);
404 // add outputs to loop
405 if (mon) mon->Add(outMonitorTOFnsigmaPi);
406 if (lm) lm->AddOutput(outMonitorTOFnsigmaPi);
409 AliRsnValueDaughter *axisTOFnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTOFnsigmaP);
410 axisTOFnsigmaP->SetBins(1001,-100,100);
412 // output: 2D histogram of TPC signal vs. TPC momentum
413 AliRsnListOutput *outMonitorTOFnsigmaP = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
414 outMonitorTOFnsigmaP->AddValue(axisTOFnsigmaP);
416 // add outputs to loop
417 if (mon) mon->Add(outMonitorTOFnsigmaP);
418 if (lm) lm->AddOutput(outMonitorTOFnsigmaP);
422 AliRsnListOutput *outMonitorPTvsMult = new AliRsnListOutput("PTvsMult",AliRsnListOutput::kHistoDefault);
423 AliRsnValueDaughter *vd1 = new AliRsnValueDaughter("pt",AliRsnValueDaughter::kPt);
424 vd1->SetBins(0.0,5.0,0.01);
425 outMonitorPTvsMult->AddValue(vd1);
427 AliRsnValueEvent *ve1 = new AliRsnValueEvent("mult",AliRsnValueEvent::kMult);
428 ve1->SetBins(0.0,100.0,1);
429 outMonitorPTvsMult->AddValue(ve1);
430 if (mon) mon->Add(outMonitorPTvsMult);
431 if (lm) lm->AddOutput(outMonitorPTvsMult);
434 // if (lm) lm->SetTrueMC(kTRUE);
437 void AddMonitorOutputMini(AliRsnMiniMonitorTask *task,Int_t listID1,TString name = "",Char_t charge='0')
439 TString chargeName="all";
440 if ( charge == '+' ) chargeName = "pos";
441 if ( charge == '-' ) chargeName = "neg";
443 AliRsnMiniMonitor *mondEdx = task->CreateMonitor(Form("%s_dEdx_pTPC_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kdEdxTPCvsP, listID1);
444 mondEdx->SetCharge(charge);
445 AliRsnMiniMonitor *monPt = task->CreateMonitor(Form("%s_Pt_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kTrackPt, listID1);
446 monPt->SetCharge(charge);
449 void AddParticleMonitor(AliAnalysisTaskSE *task, Bool_t isMC, Int_t listID1,AliRsnCutSet *commonEventCuts=0,AliRsnCutSet *cutPair=0,TString name = "")
452 Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
453 Int_t useMCMon = AliAnalysisManager::GetGlobalInt("rsnUseMCMonitoring",valid);
456 // Printf("Monitoring by mini is not supported now. It will be soon !!!");
458 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
459 AliRsnMiniMonitorTask *monTask = new AliRsnMiniMonitorTask(name.Data(),useMCMon);
460 AddMonitorOutputMini(monTask,listID1,name);
461 // AddMonitorOutputMini(monTask,listID1,name,'+');
462 // AddMonitorOutputMini(monTask,listID1,name,'-');
463 mgr->AddTask(monTask);
464 // connect input container according to source choice
465 mgr->ConnectInput(monTask, 0, mgr->GetCommonInputContainer());
467 // create paths for the output in the common file
468 TString commonPath = AliAnalysisManager::GetCommonFileName();
470 // create containers for output
471 AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnMonMini%s", name.Data()), TList::Class(), AliAnalysisManager::kOutputContainer, commonPath.Data());
473 mgr->ConnectOutput(monTask, 1, output);
479 TList *listLoops = new TList;
480 // monitor definition
481 AliRsnDaughterDef *tracksAll = new AliRsnDaughterDef(AliRsnDaughter::kTrack /*'+' or '-'*/);
482 // // AliRsnDaughterDef *tracksPos = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'+');
483 // // AliRsnDaughterDef *tracksNeg = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'-');
485 AliRsnLoopDaughter *lm =0;
487 listLoops->Add(new AliRsnLoopDaughter(Form("ALL_%s", name.Data()), listID1, tracksAll));
489 // // listLoops->Add(new AliRsnLoopDaughter(Form("%s_pos", name.Data()), listID1, tracksPos));
490 // // listLoops->Add(new AliRsnLoopDaughter(Form("%s_neg", name.Data()), listID1, tracksNeg));
492 TIter next(listLoops);
493 while ((lm = (AliRsnLoopDaughter *)next.Next())) {
494 // if (commonEventCuts) lm->SetEventCuts(commonEventCuts);
495 AddMonitorOutput(0,"mc_loop",lm);
496 ((AliRsnAnalysisTask *)task)->AddLoop(lm);