end-of-line normalization
[u/mrichter/AliRoot.git] / PWGCF / EBYE / macros / AddTaskBalanceFunctionInppMultiplicityTrain.C
1 //_________________________________________________________//
2 AliAnalysisTaskBF *AddTaskBalanceFunctionInppMultiplicityTrain(Int_t nMultMin = 0,
3                                                                Int_t nMultMax = 100,
4                                                                Double_t vertexZ=10.,
5                                                                Double_t DCAxy=-1,
6                                                                Double_t DCAz=-1,
7                                                                Double_t ptMin=0.3,
8                                                                Double_t ptMax=1.5,
9                                                                Double_t etaMin=-0.8,
10                                                                Double_t etaMax=0.8,
11                                                                TString fileNameBase="AnalysisResults") {
12   // Creates a balance function analysis task and adds it to the analysis manager.
13   // Get the pointer to the existing analysis manager via the static access method.
14   TString outputFileName(fileNameBase);
15   outputFileName.Append(".root");
16
17   
18   //===========================================================================
19   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
20   if (!mgr) {
21     ::Error("AddTaskBF", "No analysis manager to connect to.");
22     return NULL;
23   }
24
25   // Check the analysis type using the event handlers connected to the analysis manager.
26   //===========================================================================
27   if (!mgr->GetInputEventHandler()) {
28     ::Error("AddTaskBF", "This task requires an input event handler");
29     return NULL;
30   }
31   TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
32   gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C");
33   AliBalance *bf  = 0;  // Balance Function object
34   AliBalance *bfs = 0;  // shuffled Balance function object
35
36   if (analysisType=="ESD"){
37     bf  = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax);
38     bfs = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax,kTRUE);
39   }
40   else if (analysisType=="AOD"){
41     bf  = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax);
42     bfs = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax,kTRUE);
43   }
44   else{
45     bf  = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax);
46     bfs = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax,kTRUE);
47   }
48
49   // Create the task, add it to manager and configure it.
50   //===========================================================================
51   AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF");
52   taskBF->SetAnalysisObject(bf);
53   taskBF->SetShufflingObject(bfs);
54   if(analysisType == "ESD") {
55     AliESDtrackCuts *trackCuts = GetTrackCutsObject();
56     taskBF->SetAnalysisCutObject(trackCuts);
57     
58     // offline trigger selection (AliVEvent.h)
59     // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) 
60     // with this only selected events are analyzed (first 2 bins in event QA histogram are the same))
61     taskBF->SelectCollisionCandidates(AliVEvent::kMB);
62   }
63   else if(analysisType == "AOD") {
64     // pt and eta cut (pt_min, pt_max, eta_min, eta_max)
65     taskBF->SetAODtrackCutBit(128);
66     taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax);
67     //taskBF->SetExtraDCACutsAOD(DCAxy,DCAz);
68     taskBF->SetMultiplicityRange(nMultMin,nMultMax);
69   }
70   
71   // vertex cut (x,y,z)
72   taskBF->SetVertexDiamond(.3,.3,vertexZ);
73   
74   //bf->PrintAnalysisSettings();
75   mgr->AddTask(taskBF);
76
77   // Create ONLY the output containers for the data produced by the task.
78   // Get and connect other common input/output containers via the manager as below
79   //======================================================================
80   TString listQAName = "listQA"; listQAName += (Int_t) (nMultMin);
81   listQAName += "-"; listQAName += (Int_t) (nMultMax);
82   AliAnalysisDataContainer *coutQA = mgr->CreateContainer(listQAName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
83  
84   TString listBFName = "listBF"; listBFName += (Int_t) (nMultMin);
85   listBFName += "-"; listBFName += (Int_t) (nMultMax);
86   AliAnalysisDataContainer *coutBF = mgr->CreateContainer(listBFName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
87   
88   TString listBFshuffledName = "listBFshuffled"; listBFshuffledName += (Int_t) (nMultMin);
89   listBFshuffledName += "-"; listBFshuffledName += (Int_t) (nMultMax);
90   AliAnalysisDataContainer *coutBFS= mgr->CreateContainer(listBFshuffledName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
91   mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer());
92   mgr->ConnectOutput(taskBF, 1, coutQA);
93   mgr->ConnectOutput(taskBF, 2, coutBF);
94   mgr->ConnectOutput(taskBF, 3, coutBFS);
95
96   return taskBF;
97 }