4 Bool_t kUseNSigmaPID = kFALSE;
5 Double_t nSigmaMax = 3.0;
6 Bool_t kUseBayesianPID = kTRUE;
7 Double_t gMinAcceptedProbability = 0.7;
9 //_________________________________________________________//
10 AliAnalysisTaskTriggeredBF *AddTaskBalanceTriggered(Double_t centrMin=0.,
11 Double_t centrMax=80.,
12 Bool_t gRunShuffling=kFALSE,
13 Bool_t gRunMixing=kFALSE,
15 TString centralityEstimator="V0M",
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") {
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);
35 centralityName+=Form("%.0f",centrMax);
37 centralityName+=Form("%s",centralityEstimator.Data());
39 centralityName+=Form("vZ%.1f",vertexZ);
41 centralityName+=Form("DCAxy%.1f",DCAxy);
43 centralityName+=Form("DCAz%.1f",DCAz);
44 centralityName+="_Pt";
45 centralityName+=Form("%.1f",ptMin);
47 centralityName+=Form("%.1f",ptMax);
48 centralityName+="_Eta";
49 centralityName+=Form("%.1f",etaMin);
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";
63 TString outputFileName(fileNameBase);
64 outputFileName.Append(".root");
66 //===========================================================================
67 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
69 ::Error("AddTaskTriggeredBF", "No analysis manager to connect to.");
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");
79 TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
80 if(dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC";
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
87 if (analysisType=="AOD"){
89 bf = new AliBalanceTriggered();
90 bf->SetAnalysisLevel(analysisType);
94 bfs = new AliBalanceTriggered();
95 bfs->SetAnalysisLevel(analysisType);
96 bfs->InitHistograms();
99 bfm = new AliBalanceTriggered();
100 bfm->SetAnalysisLevel(analysisType);
101 bfm->InitHistograms();
105 ::Error("AddTaskTriggeredBF", "analysis type NOT supported.");
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);
115 taskTriggeredBF->SetMixingObject(bfm);
116 taskTriggeredBF->SetMixingTracks(50000);
119 taskTriggeredBF->SetRunV0(kTRUE);
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);
128 // set extra DCA cuts (-1 no extra cut)
129 taskTriggeredBF->SetExtraDCACutsAOD(DCAxy,DCAz);
131 // set extra TPC chi2 / nr of clusters cut
132 taskTriggeredBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);
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);
143 // centrality estimator (default = V0M)
144 taskTriggeredBF->SetCentralityEstimator(centralityEstimator);
146 // vertex cut (x,y,z)
147 taskTriggeredBF->SetVertexDiamond(.3,.3,vertexZ);
149 //bf->PrintAnalysisSettings();
150 mgr->AddTask(taskTriggeredBF);
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());
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);
170 return taskTriggeredBF;