ROOT logo
AliAnalysisTaskEffContBF *AddTaskBalanceEffCont( TString  centralityEstimator="V0M",
						 Double_t centrMin=0.,
						 Double_t centrMax=80.,
						 Double_t vertexZ=10.,
						 Int_t AODfilterBit = 128,
						 Bool_t bUseElectronRejection = kFALSE,
						 TString fileNameBase="AnalysisResults"
						 ) {

  // Creates a balance function analysis task and adds it to the analysis manager.
  // Get the pointer to the existing analysis manager via the static access method.
  TString centralityName("");

  centralityName+=Form("%.0f-%.0f_%.0f",centrMin,centrMax,vertexZ);
  TString outputFileName(fileNameBase);
  outputFileName.Append(".root");
  
  //===========================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskTriggeredBF", "No analysis manager to connect to.");
    return NULL;
  }

  // Check the analysis type using the event handlers connected to the analysis manager.
  //===========================================================================
  if (!mgr->GetInputEventHandler()) {
    ::Error("AddTaskTriggeredBF", "This task requires an input event handler");
    return NULL;
  }
  TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
  if(dynamic_cast<AliMCEventHandler*> (AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler())) analysisType = "MC";

 
  // Create the task, add it to manager and configure it.
  //===========================================================================


  AliAnalysisTaskEffContBF *taskEffContBF = new AliAnalysisTaskEffContBF("TaskEffContBF");

  // centrality
  if(centralityEstimator) {
    taskEffContBF->UseCentrality();
    taskEffContBF->SetCentralityEstimator(centralityEstimator);
    taskEffContBF->SetCentralityPercentileRange(centrMin,centrMax);
  }
  taskEffContBF->SelectCollisionCandidates(AliVEvent::kMB);

  // vertex
  taskEffContBF->SetVertexDiamond(.3,.3,vertexZ);

  //analysis kinematic cuts
  taskEffContBF->SetMinPt(0.0);
  taskEffContBF->SetMaxPt(20.0); //5.0
  //taskEffContBF->SetEtaRange(-0.8,0.8,100,0.0,1.6, 64); //acceptance cuts
  //taskEffContBF->SetPtRange(0.1, 20.0, 100);  //acceptance cuts //5.0,49
  taskEffContBF->SetEtaRange(-0.8,0.8,100,0.0,1.6, 64); //acceptance cuts
  taskEffContBF->SetPtRange(0.0, 20.0, 100);  //acceptance cuts //5.0,49

  // electron rejection
    if(bUseElectronRejection){
      taskEffContBF->SetElectronOnlyRejection(3.); // no other particle in nsigma (this is what we use standard in BF code)
    }

  //AODs  
  taskEffContBF->SetAODtrackCutBit(AODfilterBit);
  mgr->AddTask(taskEffContBF);

  // Create ONLY the output containers for the data produced by the task.
  // Get and connect other common input/output containers via the manager as below
  //==============================================================================
  TString outputFileName = AliAnalysisManager::GetCommonFileName();
  outputFileName += ":PWGCFEbyE.outputBalanceFunctionEffContAnalysis";
  AliAnalysisDataContainer *coutQA = mgr->CreateContainer(Form("listQA_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
  AliAnalysisDataContainer *coutEffContBF = mgr->CreateContainer(Form("listEffContBF_%s",centralityName.Data()), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());

  mgr->ConnectInput(taskEffContBF, 0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput(taskEffContBF, 1, coutQA);
  mgr->ConnectOutput(taskEffContBF, 2, coutEffContBF);
  
  return taskEffContBF;
}
 AddTaskBalanceEffCont.C:1
 AddTaskBalanceEffCont.C:2
 AddTaskBalanceEffCont.C:3
 AddTaskBalanceEffCont.C:4
 AddTaskBalanceEffCont.C:5
 AddTaskBalanceEffCont.C:6
 AddTaskBalanceEffCont.C:7
 AddTaskBalanceEffCont.C:8
 AddTaskBalanceEffCont.C:9
 AddTaskBalanceEffCont.C:10
 AddTaskBalanceEffCont.C:11
 AddTaskBalanceEffCont.C:12
 AddTaskBalanceEffCont.C:13
 AddTaskBalanceEffCont.C:14
 AddTaskBalanceEffCont.C:15
 AddTaskBalanceEffCont.C:16
 AddTaskBalanceEffCont.C:17
 AddTaskBalanceEffCont.C:18
 AddTaskBalanceEffCont.C:19
 AddTaskBalanceEffCont.C:20
 AddTaskBalanceEffCont.C:21
 AddTaskBalanceEffCont.C:22
 AddTaskBalanceEffCont.C:23
 AddTaskBalanceEffCont.C:24
 AddTaskBalanceEffCont.C:25
 AddTaskBalanceEffCont.C:26
 AddTaskBalanceEffCont.C:27
 AddTaskBalanceEffCont.C:28
 AddTaskBalanceEffCont.C:29
 AddTaskBalanceEffCont.C:30
 AddTaskBalanceEffCont.C:31
 AddTaskBalanceEffCont.C:32
 AddTaskBalanceEffCont.C:33
 AddTaskBalanceEffCont.C:34
 AddTaskBalanceEffCont.C:35
 AddTaskBalanceEffCont.C:36
 AddTaskBalanceEffCont.C:37
 AddTaskBalanceEffCont.C:38
 AddTaskBalanceEffCont.C:39
 AddTaskBalanceEffCont.C:40
 AddTaskBalanceEffCont.C:41
 AddTaskBalanceEffCont.C:42
 AddTaskBalanceEffCont.C:43
 AddTaskBalanceEffCont.C:44
 AddTaskBalanceEffCont.C:45
 AddTaskBalanceEffCont.C:46
 AddTaskBalanceEffCont.C:47
 AddTaskBalanceEffCont.C:48
 AddTaskBalanceEffCont.C:49
 AddTaskBalanceEffCont.C:50
 AddTaskBalanceEffCont.C:51
 AddTaskBalanceEffCont.C:52
 AddTaskBalanceEffCont.C:53
 AddTaskBalanceEffCont.C:54
 AddTaskBalanceEffCont.C:55
 AddTaskBalanceEffCont.C:56
 AddTaskBalanceEffCont.C:57
 AddTaskBalanceEffCont.C:58
 AddTaskBalanceEffCont.C:59
 AddTaskBalanceEffCont.C:60
 AddTaskBalanceEffCont.C:61
 AddTaskBalanceEffCont.C:62
 AddTaskBalanceEffCont.C:63
 AddTaskBalanceEffCont.C:64
 AddTaskBalanceEffCont.C:65
 AddTaskBalanceEffCont.C:66
 AddTaskBalanceEffCont.C:67
 AddTaskBalanceEffCont.C:68
 AddTaskBalanceEffCont.C:69
 AddTaskBalanceEffCont.C:70
 AddTaskBalanceEffCont.C:71
 AddTaskBalanceEffCont.C:72
 AddTaskBalanceEffCont.C:73
 AddTaskBalanceEffCont.C:74
 AddTaskBalanceEffCont.C:75
 AddTaskBalanceEffCont.C:76
 AddTaskBalanceEffCont.C:77
 AddTaskBalanceEffCont.C:78
 AddTaskBalanceEffCont.C:79
 AddTaskBalanceEffCont.C:80
 AddTaskBalanceEffCont.C:81
 AddTaskBalanceEffCont.C:82
 AddTaskBalanceEffCont.C:83