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
12 Bool_t kUseNSigmaPID = kFALSE;
\r
13 Double_t nSigmaMax = 3.0;
\r
14 Bool_t kUseBayesianPID = kTRUE;
\r
15 Double_t gMinAcceptedProbability = 0.7;
\r
17 //_________________________________________________________//
\r
18 AliAnalysisTaskEventMixingBF *AddTaskBalanceEventMixing(Double_t centrMin=0.,
\r
19 Double_t centrMax=100.,
\r
20 Bool_t gRunShuffling=kFALSE,
\r
21 TString centralityEstimator="V0M",
\r
22 Double_t vertexZ=10.,
\r
27 Double_t etaMin=-0.8,
\r
28 Double_t etaMax=0.8,
\r
29 Double_t maxTPCchi2 = -1,
\r
30 Int_t minNClustersTPC = -1,
\r
31 Bool_t kUsePID = kFALSE,
\r
32 Int_t AODfilterBit = 128,
\r
33 Bool_t bCentralTrigger = kFALSE,
\r
34 Bool_t bHBTcut = kFALSE,
\r
35 Bool_t bConversionCut = kFALSE,
\r
36 TString fileNameBase="AnalysisResults") {
\r
38 // Creates a balance function analysis task and adds it to the analysis manager.
\r
39 // Get the pointer to the existing analysis manager via the static access method.
\r
40 TString centralityName("");
\r
41 centralityName+=Form("%.0f",centrMin);
\r
42 centralityName+="-";
\r
43 centralityName+=Form("%.0f",centrMax);
\r
44 centralityName+="_";
\r
45 centralityName+=Form("%s",centralityEstimator.Data());
\r
46 centralityName+="_";
\r
47 centralityName+=Form("vZ%.1f",vertexZ);
\r
48 centralityName+="_";
\r
49 centralityName+=Form("DCAxy%.1f",DCAxy);
\r
50 centralityName+="_";
\r
51 centralityName+=Form("DCAz%.1f",DCAz);
\r
52 centralityName+="_Pt";
\r
53 centralityName+=Form("%.1f",ptMin);
\r
54 centralityName+="-";
\r
55 centralityName+=Form("%.1f",ptMax);
\r
56 centralityName+="_Eta";
\r
57 centralityName+=Form("%.1f",etaMin);
\r
58 centralityName+="-";
\r
59 centralityName+=Form("%.1f",etaMax);
\r
60 centralityName+="_Chi";
\r
61 centralityName+=Form("%.1f",maxTPCchi2);
\r
62 centralityName+="_nClus";
\r
63 centralityName+=Form("%d",minNClustersTPC);
\r
64 centralityName+="_Bit";
\r
65 centralityName+=Form("%d",AODfilterBit);
\r
66 if(bCentralTrigger) centralityName+="_withCentralTrigger";
\r
67 if(bHBTcut) centralityName+="_withHBTcut";
\r
68 if(bConversionCut) centralityName+="_withConversionCut";
\r
74 TString outputFileName(fileNameBase);
\r
75 outputFileName.Append(".root");
\r
77 //===========================================================================
\r
78 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
\r
80 ::Error("AddTaskEventMixingBF", "No analysis manager to connect to.");
\r
84 // Check the analysis type using the event handlers connected to the analysis manager.
\r
85 //===========================================================================
\r
86 if (!mgr->GetInputEventHandler()) {
\r
87 ::Error("AddTaskEventMixingBF", "This task requires an input event handler");
\r
90 TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
\r
91 if(dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC";
\r
93 // for local changed EventMixingBF configuration
\r
94 //gROOT->LoadMacro("./configBalanceFunctionAnalysisEventMixing.C");
\r
95 gROOT->LoadMacro("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysisEventMixing.C");
\r
96 AliBalanceEventMixing *bf = 0; // Balance Function object
\r
97 AliBalanceEventMixing *bfs = 0; // shuffled Balance function object
\r
99 if (analysisType=="ESD"){
\r
100 bf = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut);
\r
101 if(gRunShuffling) bfs = GetBalanceFunctionObject("ESD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut);
\r
103 else if (analysisType=="AOD"){
\r
104 bf = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut);
\r
105 if(gRunShuffling) bfs = GetBalanceFunctionObject("AOD",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut);
\r
107 else if (analysisType=="MC"){
\r
108 bf = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kFALSE,bHBTcut,bConversionCut);
\r
109 if(gRunShuffling) bfs = GetBalanceFunctionObject("MC",centralityEstimator,centrMin,centrMax,kTRUE,bHBTcut,bConversionCut);
\r
112 ::Error("AddTaskEventMixingBF", "analysis type NOT known.");
\r
116 // Create the task, add it to manager and configure it.
\r
117 //===========================================================================
\r
118 AliAnalysisTaskEventMixingBF *taskEventMixingBF = new AliAnalysisTaskEventMixingBF("TaskEventMixingBF");
\r
119 taskEventMixingBF->SetAnalysisObject(bf);
\r
120 if(gRunShuffling) taskEventMixingBF->SetShufflingObject(bfs);
\r
122 taskEventMixingBF->SetCentralityPercentileRange(centrMin,centrMax);
\r
123 if(analysisType == "ESD") {
\r
124 AliESDtrackCuts *trackCuts = GetTrackCutsObject(ptMin,ptMax,etaMin,etaMax,maxTPCchi2,DCAxy,DCAz,minNClustersTPC);
\r
125 taskEventMixingBF->SetAnalysisCutObject(trackCuts);
\r
127 if(kUseBayesianPID)
\r
128 taskEventMixingBF->SetUseBayesianPID(gMinAcceptedProbability);
\r
129 else if(kUseNSigmaPID)
\r
130 taskEventMixingBF->SetUseNSigmaPID(nSigmaMax);
\r
131 taskEventMixingBF->SetParticleOfInterest(AliAnalysistaskEventMixingBF::kProton);
\r
132 taskEventMixingBF->SetDetectorUsedForPID(AliAnalysisTaskEventMixingBF::kTOFpid);
\r
135 else if(analysisType == "AOD") {
\r
136 // pt and eta cut (pt_min, pt_max, eta_min, eta_max)
\r
137 taskEventMixingBF->SetAODtrackCutBit(AODfilterBit);
\r
138 taskEventMixingBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax);
\r
140 // set extra DCA cuts (-1 no extra cut)
\r
141 taskEventMixingBF->SetExtraDCACutsAOD(DCAxy,DCAz);
\r
143 // set extra TPC chi2 / nr of clusters cut
\r
144 taskEventMixingBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);
\r
147 else if(analysisType == "MC") {
\r
148 taskEventMixingBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax);
\r
151 // offline trigger selection (AliVEvent.h)
\r
152 // taskEventMixingBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates())
\r
153 // with this only selected events are analyzed (first 2 bins in event QA histogram are the same))
\r
154 // documentation in https://twiki.cern.ch/twiki/bin/viewauth/ALICE/PWG1EvSelDocumentation
\r
155 if(bCentralTrigger) taskEventMixingBF->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral);
\r
156 else taskEventMixingBF->SelectCollisionCandidates(AliVEvent::kMB);
\r
158 // centrality estimator (default = V0M)
\r
159 taskEventMixingBF->SetCentralityEstimator(centralityEstimator);
\r
161 // vertex cut (x,y,z)
\r
162 taskEventMixingBF->SetVertexDiamond(.3,.3,vertexZ);
\r
166 //bf->PrintAnalysisSettings();
\r
167 mgr->AddTask(taskEventMixingBF);
\r
169 // Create ONLY the output containers for the data produced by the task.
\r
170 // Get and connect other common input/output containers via the manager as below
\r
171 //==============================================================================
\r
172 TString outputFileName = AliAnalysisManager::GetCommonFileName();
\r
173 outputFileName += ":PWGCFEbyE.outputBalanceFunctionAnalysis";
\r
174 AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
\r
175 AliAnalysisDataContainer *coutEventMixingBF = mgr->CreateContainer(Form("listEventMixingBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
\r
176 if(gRunShuffling) AliAnalysisDataContainer *coutEventMixingBFS = mgr->CreateContainer(Form("listEventMixingBFShuffled_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
\r
177 if(kUsePID) AliAnalysisDataContainer *coutQAPID = mgr->CreateContainer(Form("listQAPID_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
\r
179 mgr->ConnectInput(taskEventMixingBF, 0, mgr->GetCommonInputContainer());
\r
180 mgr->ConnectOutput(taskEventMixingBF, 1, coutQA);
\r
181 mgr->ConnectOutput(taskEventMixingBF, 2, coutEventMixingBF);
\r
182 if(gRunShuffling) mgr->ConnectOutput(taskEventMixingBF, 3, coutEventMixingBFS);
\r
183 if(kUsePID && analysisType == "ESD") mgr->ConnectOutput(taskEventMixingBF, 4, coutQAPID);
\r
185 return taskEventMixingBF;
\r