]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/EBYE/macros/AddTaskBalanceTriggered.C
end-of-line normalization
[u/mrichter/AliRoot.git] / PWGCF / EBYE / macros / AddTaskBalanceTriggered.C
1 // now in options
2
3 //PID config
4 Bool_t kUseNSigmaPID = kFALSE;
5 Double_t nSigmaMax = 3.0;
6 Bool_t kUseBayesianPID = kTRUE;
7 Double_t gMinAcceptedProbability = 0.7;
8
9 //_________________________________________________________//
10 AliAnalysisTaskTriggeredBF *AddTaskBalanceTriggered(Double_t centrMin=0.,
11                                                  Double_t centrMax=80.,
12                                                  Bool_t gRunShuffling=kFALSE,
13                                                  Bool_t gRunMixing=kFALSE,
14                                                  Bool_t gRunV0=kFALSE,
15                                                  TString centralityEstimator="V0M",
16                                                  Double_t vertexZ=10.,
17                                                  Double_t DCAxy=-1,
18                                                  Double_t DCAz=-1,
19                                                  Double_t ptMin=0.15,
20                                                  Double_t ptMax=20,
21                                                  Double_t etaMin=-0.8,
22                                                  Double_t etaMax=0.8,
23                                                  Double_t maxTPCchi2 = -1, 
24                                                  Int_t minNClustersTPC = -1,
25                                                  Bool_t kUsePID = kFALSE,
26                                                  Int_t AODfilterBit = 128,
27                                                  Bool_t bCentralTrigger = kFALSE,
28                                                  TString fileNameBase="AnalysisResults") {
29
30   // Creates a balance function analysis task and adds it to the analysis manager.
31   // Get the pointer to the existing analysis manager via the static access method.
32   TString centralityName("");
33   centralityName+=Form("%.0f",centrMin);
34   centralityName+="-";
35   centralityName+=Form("%.0f",centrMax);
36   centralityName+="_";
37   centralityName+=Form("%s",centralityEstimator.Data());
38   centralityName+="_";
39   centralityName+=Form("vZ%.1f",vertexZ);
40   centralityName+="_";
41   centralityName+=Form("DCAxy%.1f",DCAxy);
42   centralityName+="_";
43   centralityName+=Form("DCAz%.1f",DCAz);
44   centralityName+="_Pt";
45   centralityName+=Form("%.1f",ptMin);
46   centralityName+="-";
47   centralityName+=Form("%.1f",ptMax);
48   centralityName+="_Eta";
49   centralityName+=Form("%.1f",etaMin);
50   centralityName+="-";
51   centralityName+=Form("%.1f",etaMax);
52   centralityName+="_Chi";
53   centralityName+=Form("%.1f",maxTPCchi2);
54   centralityName+="_nClus";
55   centralityName+=Form("%d",minNClustersTPC);
56   centralityName+="_Bit";
57   centralityName+=Form("%d",AODfilterBit);
58   if(bCentralTrigger)   centralityName+="_withCentralTrigger";
59   if(gRunV0)   centralityName+="_V0";
60
61
62
63   TString outputFileName(fileNameBase);
64   outputFileName.Append(".root");
65
66   //===========================================================================
67   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
68   if (!mgr) {
69     ::Error("AddTaskTriggeredBF", "No analysis manager to connect to.");
70     return NULL;
71   }
72
73   // Check the analysis type using the event handlers connected to the analysis manager.
74   //===========================================================================
75   if (!mgr->GetInputEventHandler()) {
76     ::Error("AddTaskTriggeredBF", "This task requires an input event handler");
77     return NULL;
78   }
79   TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
80   if(dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC";
81
82   // setup the balance function objects
83   AliBalanceTriggered *bf  = 0;  // Balance Function object
84   AliBalanceTriggered *bfs = 0;  // shuffled Balance function object
85   AliBalanceTriggered *bfm = 0;  // mixing Balance function object
86   
87   if (analysisType=="AOD"){
88     
89     bf = new AliBalanceTriggered();
90     bf->SetAnalysisLevel(analysisType);
91     bf->InitHistograms();
92     
93     if(gRunShuffling){
94       bfs = new AliBalanceTriggered();
95       bfs->SetAnalysisLevel(analysisType);
96       bfs->InitHistograms();
97     }
98     if(gRunMixing){
99       bfm = new AliBalanceTriggered();
100       bfm->SetAnalysisLevel(analysisType);
101       bfm->InitHistograms();
102     }
103   }
104   else{
105     ::Error("AddTaskTriggeredBF", "analysis type NOT supported.");
106     return NULL;
107   }
108
109   // Create the task, add it to manager and configure it.
110   //===========================================================================
111   AliAnalysisTaskTriggeredBF *taskTriggeredBF = new AliAnalysisTaskTriggeredBF("TaskTriggeredBF");
112   taskTriggeredBF->SetAnalysisObject(bf);
113   if(gRunShuffling) taskTriggeredBF->SetShufflingObject(bfs);
114   if(gRunMixing){
115     taskTriggeredBF->SetMixingObject(bfm);
116     taskTriggeredBF->SetMixingTracks(50000);
117   }
118   if(gRunV0){
119     taskTriggeredBF->SetRunV0(kTRUE);
120   }
121
122   taskTriggeredBF->SetCentralityPercentileRange(centrMin,centrMax);
123   if(analysisType == "AOD") {
124     // pt and eta cut (pt_min, pt_max, eta_min, eta_max)
125     taskTriggeredBF->SetAODtrackCutBit(AODfilterBit);
126     taskTriggeredBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax);
127     
128     // set extra DCA cuts (-1 no extra cut)
129     taskTriggeredBF->SetExtraDCACutsAOD(DCAxy,DCAz);
130     
131     // set extra TPC chi2 / nr of clusters cut
132     taskTriggeredBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);
133     
134   }
135
136   // offline trigger selection (AliVEvent.h)
137   // taskTriggeredBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) 
138   // with this only selected events are analyzed (first 2 bins in event QA histogram are the same))
139   // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation
140   if(bCentralTrigger) taskTriggeredBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral);
141   else                taskTriggeredBF->SelectCollisionCandidates(AliVEvent::kMB);
142
143   // centrality estimator (default = V0M)
144   taskTriggeredBF->SetCentralityEstimator(centralityEstimator);
145   
146   // vertex cut (x,y,z)
147   taskTriggeredBF->SetVertexDiamond(.3,.3,vertexZ);
148   
149   //bf->PrintAnalysisSettings();
150   mgr->AddTask(taskTriggeredBF);
151   
152   // Create ONLY the output containers for the data produced by the task.
153   // Get and connect other common input/output containers via the manager as below
154   //==============================================================================
155   TString outputFileName = AliAnalysisManager::GetCommonFileName();
156   outputFileName += ":PWGCFEbyE.outputBalanceFunctionTriggeredAnalysis";
157   AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
158   AliAnalysisDataContainer *coutTriggeredBF = mgr->CreateContainer(Form("listTriggeredBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
159   if(gRunShuffling) AliAnalysisDataContainer *coutTriggeredBFS = mgr->CreateContainer(Form("listTriggeredBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
160   if(gRunMixing) AliAnalysisDataContainer *coutTriggeredBFM = mgr->CreateContainer(Form("listTriggeredBFMixed_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
161   if(gRunV0) AliAnalysisDataContainer *coutQAV0 = mgr->CreateContainer(Form("listQAV0_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
162
163   mgr->ConnectInput(taskTriggeredBF, 0, mgr->GetCommonInputContainer());
164   mgr->ConnectOutput(taskTriggeredBF, 1, coutQA);
165   mgr->ConnectOutput(taskTriggeredBF, 2, coutTriggeredBF);
166   if(gRunShuffling) mgr->ConnectOutput(taskTriggeredBF, 3, coutTriggeredBFS);
167   if(gRunMixing) mgr->ConnectOutput(taskTriggeredBF, 4, coutTriggeredBFM);
168   if(gRunV0) mgr->ConnectOutput(taskTriggeredBF, 5, coutQAV0);
169
170   return taskTriggeredBF;
171 }