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