3 #include <AliAnalysisManager.h>
4 #include <AliRsnAnalysisTask.h>
5 #include <AliRsnDaughterSelector.h>
6 #include <AliRsnMiniAnalysisTask.h>
8 AliAnalysisTaskSE *AddRsnTask(TString rsnPart,TString rsnCut,TString postfix="")
11 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
12 if (!mgr) { Printf("Error [AddRsnTaskTrain%s] : mgr is null !!!",postfix.Data()); return 0;}
14 // initialize task with all available slots, even if not all of them will be used:
15 AliAnalysisTaskSE *task = 0;
18 Int_t useMC = AliRsnTrainManager::GetGlobalInt("IsMC",valid);
19 Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
20 Int_t physSelBit = AliRsnTrainManager::GetGlobalInt("RsnPhysSelFilterBit",valid);
21 Int_t isMixing = AliRsnTrainManager::GetGlobalInt("IsMixing",valid);
22 Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid);
23 Int_t isAOD049 = AliRsnTrainManager::GetGlobalInt("RsnUseAOD049Patch",valid);
26 postfix.Prepend("Mini");
27 AliRsnMiniAnalysisTask *taskRsnMini = new AliRsnMiniAnalysisTask(TString::Format("Rsn%s",postfix.Data()).Data(),useMC);
28 Int_t refreshPrint = AliRsnTrainManager::GetGlobalInt("RsnMixPrintRefresh",valid);
29 if (valid) taskRsnMini->SetMixPrintRefresh(refreshPrint);
30 task = (AliAnalysisTaskSE *) taskRsnMini;
33 AliRsnAnalysisTask *taskRsn = new AliRsnAnalysisTask(TString::Format("Rsn%s",postfix.Data()).Data());
34 task = (AliAnalysisTaskSE *) taskRsn;
37 postfix.Append(TString::Format("_%s_%s",rsnPart.Data(),rsnCut.Data()).Data());
39 if (physSelBit>=0) task->SelectCollisionCandidates((AliVEvent::EOfflineTriggerTypes)physSelBit);
41 AliRsnInputHandler *rsnIH=0;
42 // TODO this is tmp hack
43 if (!rsnIH) rsnIH = new AliRsnInputHandler();
46 TList *listRsn = new TList();
47 listRsn->Add(new TNamed(rsnPart.Data(),rsnCut.Data()));
49 if (!RsnLoadMacroTask("RsnConfig.C")) return 0;
50 if (!RsnConfig(task,rsnIH,listRsn)) {
51 Printf("Error in RsnConfig.C");
56 if (isMixing) AddEventMixingSettings(task);
58 if (isAOD049 && (!useMC) && (collisionType==1)) {
59 if (isRsnMini) taskRsnMini->SetUseCentralityPatch(kTRUE);
62 // add the task to manager
65 AliRsnDaughterSelector *sel = 0;
68 sel = rsnIH->GetSelector();
72 // connect input container according to source choice
73 mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
75 // create paths for the output in the common file
76 TString commonPath = AliAnalysisManager::GetCommonFileName();
78 //just small fix to replace ':' by '_' (easier to read)
79 postfix.ReplaceAll(":","_");
80 // create containers for output
81 AliAnalysisDataContainer *output = mgr->CreateContainer(TString::Format("RsnHist%s", postfix.Data()).Data(), TList::Class(), AliAnalysisManager::kOutputContainer, commonPath.Data());
83 // // big outout (expert only)
84 // Int_t useBigOutput = 0;
85 // if (useBigOutput) {
86 // Printf("Using Big output ...");
87 // task->UseBigOutput();
88 // output->SetSpecialOutput();
89 // mgr->SetSpecialOutputLocation("root://lx000.saske.sk:21094//tmp/mvala/");
92 mgr->ConnectOutput(task, 1, output);
97 void AddEventMixingSettings(AliAnalysisTaskSE *task) {
100 Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid);
101 Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
102 Int_t mixNum = AliRsnTrainManager::GetGlobalInt("RsnNumMix",valid);
104 Double_t mixDiffMult = AliRsnTrainManager::GetGlobalInt("RsnMixDiffMult",valid);
105 Double_t mixDiffVz = AliRsnTrainManager::GetGlobalInt("RsnMixDiffVz",valid);
106 Double_t mixDiffAngle = AliRsnTrainManager::GetGlobalInt("RsnMixDiffAngle",valid);
109 AliRsnMiniAnalysisTask *taskRsn = (AliRsnMiniAnalysisTask *) task;
110 if (collisionType == 0) {
111 // taskRsn->UseMultiplicity("TRACKS");
112 taskRsn->UseMultiplicity("QUALITY");
114 taskRsn->UseCentrality("V0M");
116 if (mixDiffMult>0.0) taskRsn->SetMaxDiffMult(mixDiffMult);
119 taskRsn->UseContinuousMix();
120 //task->UseBinnedMix();
121 taskRsn->SetNMix(mixNum);
123 if (mixDiffVz>0.0) taskRsn->SetMaxDiffVz(mixDiffVz);
124 if (mixDiffAngle>0.0) taskRsn->SetMaxDiffAngle(mixDiffAngle);
125 // 30.0 * TMath::DegToRad()
131 Bool_t RsnLoadMacroTask(TString macro,TString path="") {
134 TString lego_path = AliAnalysisManager::GetGlobalStr("RsnLegoTrainPath",valid);
135 if (!valid) lego_path = "$ALICE_ROOT/PWGLF/RESONANCES/macros/lego_train";
137 if (!gSystem->AccessPathName(macro.Data())) {
138 gROOT->LoadMacro(macro.Data());
139 Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
143 if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
144 gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
145 Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
149 Printf("Error loading %s",macro.Data());