]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/EBYE/macros/AddTaskBalanceMCCentralityTrain.C
Fixing memory leak when running with a centrality train
[u/mrichter/AliRoot.git] / PWG2 / EBYE / macros / AddTaskBalanceMCCentralityTrain.C
1 // now in options\r
2 //=============================================//\r
3 //const char* centralityEstimator = "V0M";\r
4 //const char* centralityEstimator = "CL1";\r
5 //const char* centralityEstimator = "TRK";\r
6 //=============================================//\r
7 //Bool_t gRunShuffling = kFALSE;\r
8 //Bool_t gRunShuffling = kTRUE;\r
9 //=============================================//\r
10 //_________________________________________________________//\r
11 AliAnalysisTaskBF *AddTaskBalanceMCCentralityTrain(Double_t centrMin=0.,\r
12                                                    Double_t centrMax=100.,\r
13                                                    Double_t impactParameterMin=0.,\r
14                                                    Double_t impactParameterMax=20.,\r
15                                                    Bool_t gRunShuffling=kFALSE,\r
16                                                    Double_t vertexZ=10.,\r
17                                                    Double_t ptMin=0.3,\r
18                                                    Double_t ptMax=1.5,\r
19                                                    Double_t etaMin=-0.8,\r
20                                                    Double_t etaMax=0.8,\r
21                                                    TString fileNameBase="AnalysisResults") {\r
22 \r
23   // Creates a balance function analysis task and adds it to the analysis manager.\r
24   // Get the pointer to the existing analysis manager via the static access method.\r
25   TString centralityName("");\r
26   centralityName+=Form("%.0f",centrMin);\r
27   centralityName+="-";\r
28   centralityName+=Form("%.0f",centrMax);\r
29 \r
30   TString outputFileName(fileNameBase);\r
31   outputFileName.Append(".root");\r
32 \r
33   //===========================================================================\r
34   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
35   if (!mgr) {\r
36     ::Error("AddTaskBF", "No analysis manager to connect to.");\r
37     return NULL;\r
38   }\r
39 \r
40   // Check the analysis type using the event handlers connected to the analysis manager.\r
41   //===========================================================================\r
42   if (!mgr->GetInputEventHandler()) {\r
43     ::Error("AddTaskBF", "This task requires an input event handler");\r
44     return NULL;\r
45   }\r
46   TString analysisType = "MC";\r
47 \r
48   // for local changed BF configuration\r
49   //gROOT->LoadMacro("./configBalanceFunctionAnalysis.C");\r
50   gROOT->LoadMacro("$ALICE_ROOT/PWG2/EBYE/macros/configBalanceFunctionAnalysis.C");\r
51   AliBalance *bf  = 0;  // Balance Function object\r
52   AliBalance *bfs = 0;  // shuffled Balance function object\r
53 \r
54   if (analysisType=="ESD"){\r
55     bf  = GetBalanceFunctionObject("ESD",centralityName.Data());\r
56     if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityName.Data(),kTRUE);\r
57   }\r
58   else if (analysisType=="AOD"){\r
59     bf  = GetBalanceFunctionObject("AOD",centralityName.Data());\r
60     if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityName.Data(),kTRUE);\r
61   }\r
62   else if (analysisType=="MC"){\r
63     bf  = GetBalanceFunctionObject("MC",centralityName.Data());\r
64     if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityName.Data(),kTRUE);\r
65   }\r
66   else{\r
67     ::Error("AddTaskBF", "analysis type NOT known.");\r
68     return NULL;\r
69   }\r
70 \r
71   // Create the task, add it to manager and configure it.\r
72   //===========================================================================\r
73   AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF");\r
74   taskBF->SetAnalysisObject(bf);\r
75   if(gRunShuffling) taskBF->SetShufflingObject(bfs);\r
76 \r
77   if(analysisType == "ESD") {\r
78     AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC);\r
79     taskBF->SetAnalysisCutObject(trackCuts);\r
80     // centrality estimator (default = V0M)\r
81     taskBF->SetCentralityEstimator(centralityEstimator);\r
82     taskBF->SetCentralityPercentileRange(impactParameterMin,\r
83                                          impactParameterMax);\r
84   }\r
85   else if(analysisType == "AOD") {\r
86     // pt and eta cut (pt_min, pt_max, eta_min, eta_max)\r
87     taskBF->SetAODtrackCutBit(128);\r
88     taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax);\r
89     taskBF->SetCentralityEstimator(centralityEstimator);\r
90     taskBF->SetCentralityPercentileRange(impactParameterMin,\r
91                                          impactParameterMax);\r
92 \r
93     // set extra DCA cuts (-1 no extra cut)\r
94     taskBF->SetExtraDCACutsAOD(DCAxy,DCAz);\r
95 \r
96     // set extra TPC chi2 / nr of clusters cut\r
97     taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);\r
98     taskBF->SetCentralityEstimator(centralityEstimator);    \r
99   }\r
100   else if(analysisType == "MC") {\r
101     taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); \r
102     taskBF->SetImpactParameterRange(impactParameterMin,\r
103                                     impactParameterMax);\r
104   }\r
105 \r
106   // offline trigger selection (AliVEvent.h)\r
107   // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) \r
108   // with this only selected events are analyzed (first 2 bins in event QA histogram are the same))\r
109   // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation\r
110   //taskBF->SelectCollisionCandidates(AliVEvent::kMB);\r
111     \r
112   // vertex cut (x,y,z)\r
113   taskBF->SetVertexDiamond(.3,.3,vertexZ);\r
114   \r
115 \r
116 \r
117   //bf->PrintAnalysisSettings();\r
118   mgr->AddTask(taskBF);\r
119   \r
120   // Create ONLY the output containers for the data produced by the task.\r
121   // Get and connect other common input/output containers via the manager as below\r
122   //==============================================================================\r
123   TString outputFileName = AliAnalysisManager::GetCommonFileName();\r
124   outputFileName += ":PWG2EbyE.outputBalanceFunctionAnalysis";\r
125   AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());\r
126   AliAnalysisDataContainer *coutBF = mgr->CreateContainer(Form("listBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());\r
127   if(gRunShuffling) AliAnalysisDataContainer *coutBFS= mgr->CreateContainer(Form("listBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());\r
128   mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer());\r
129   mgr->ConnectOutput(taskBF, 1, coutQA);\r
130   mgr->ConnectOutput(taskBF, 2, coutBF);\r
131   if(gRunShuffling) mgr->ConnectOutput(taskBF, 3, coutBFS);\r
132 \r
133   return taskBF;\r
134 }\r