ROOT logo
//_________________________________________________________//
AliAnalysisTaskBF *AddTaskBalanceFunctionInpp(Double_t vertexZ=10.,
					      Double_t DCAxy=2.4,
					      Double_t DCAz=3.2,
					      Double_t ptMin=0.3,
					      Double_t ptMax=1.5,
					      Double_t etaMin=-0.8,
					      Double_t etaMax=0.8,
					      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 outputFileName(fileNameBase);
  outputFileName.Append(".root");

  //===========================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskBF", "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("AddTaskBF", "This task requires an input event handler");
    return NULL;
  }
  TString analysisType = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
  gROOT->LoadMacro("./configBalanceFunctionAnalysis.C");
  AliBalance *bf  = 0;  // Balance Function object
  AliBalance *bfs = 0;  // shuffled Balance function object

  if (analysisType=="ESD"){
    bf  = GetBalanceFunctionObject("ESD");
    bfs = GetBalanceFunctionObject("ESD",kTRUE);
  }
  else if (analysisType=="AOD"){
    bf  = GetBalanceFunctionObject("AOD");
    bfs = GetBalanceFunctionObject("AOD",kTRUE);
  }
  else{
    bf  = GetBalanceFunctionObject("MC");
    bfs = GetBalanceFunctionObject("MC",kTRUE);
  }

  // Create the task, add it to manager and configure it.
  //===========================================================================
  AliAnalysisTaskBF *taskBF = new AliAnalysisTaskBF("TaskBF");
  taskBF->SetAnalysisObject(bf);
  taskBF->SetShufflingObject(bfs);
  if(analysisType == "ESD") {
    AliESDtrackCuts *trackCuts = GetTrackCutsObject();
    taskBF->SetAnalysisCutObject(trackCuts);
    
    // offline trigger selection (AliVEvent.h)
    // taskBF->UseOfflineTrigger(); // NOT used (selection is done with the AliAnalysisTaskSE::SelectCollisionCandidates()) 
    // with this only selected events are analyzed (first 2 bins in event QA histogram are the same))
    taskBF->SelectCollisionCandidates(AliVEvent::kMB);
  }
  else if(analysisType == "AOD") {
    // pt and eta cut (pt_min, pt_max, eta_min, eta_max)
    taskBF->SetAODtrackCutBit(128);
    taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax);
    taskBF->SetExtraDCACutsAOD(DCAxy,DCAz);
  }
  
  // vertex cut (x,y,z)
  taskBF->SetVertexDiamond(.3,.3,vertexZ);
  
  //bf->PrintAnalysisSettings();
  mgr->AddTask(taskBF);

  // 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
  //======================================================================
  AliAnalysisDataContainer *coutQA = mgr->CreateContainer("listQA", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
  AliAnalysisDataContainer *coutBF = mgr->CreateContainer("listBF", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
  AliAnalysisDataContainer *coutBFS= mgr->CreateContainer("listBFshuffled", TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
  mgr->ConnectInput(taskBF, 0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput(taskBF, 1, coutQA);
  mgr->ConnectOutput(taskBF, 2, coutBF);
  mgr->ConnectOutput(taskBF, 3, coutBFS);

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