ROOT logo
//_________________________________________________________//
AliAnalysisTaskBF *AddTaskBalanceFunctionInppMultiplicityTrain(Int_t nMultMin = 0,
							       Int_t nMultMax = 100,
							       Double_t vertexZ=10.,
							       Double_t DCAxy=-1,
							       Double_t DCAz=-1,
							       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("$ALICE_ROOT/PWGCF/EBYE/macros/configBalanceFunctionAnalysis.C");
  AliBalance *bf  = 0;  // Balance Function object
  AliBalance *bfs = 0;  // shuffled Balance function object

  if (analysisType=="ESD"){
    bf  = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax);
    bfs = GetBalanceFunctionObject("ESD",0,nMultMin,nMultMax,kTRUE);
  }
  else if (analysisType=="AOD"){
    bf  = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax);
    bfs = GetBalanceFunctionObject("AOD",0,nMultMin,nMultMax,kTRUE);
  }
  else{
    bf  = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax);
    bfs = GetBalanceFunctionObject("MC",0,nMultMin,nMultMax,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);
    taskBF->SetMultiplicityRange(nMultMin,nMultMax);
  }
  
  // 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
  //======================================================================
  TString listQAName = "listQA"; listQAName += (Int_t) (nMultMin);
  listQAName += "-"; listQAName += (Int_t) (nMultMax);
  AliAnalysisDataContainer *coutQA = mgr->CreateContainer(listQAName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
 
  TString listBFName = "listBF"; listBFName += (Int_t) (nMultMin);
  listBFName += "-"; listBFName += (Int_t) (nMultMax);
  AliAnalysisDataContainer *coutBF = mgr->CreateContainer(listBFName.Data(), TList::Class(),AliAnalysisManager::kOutputContainer,outputFileName.Data());
  
  TString listBFshuffledName = "listBFshuffled"; listBFshuffledName += (Int_t) (nMultMin);
  listBFshuffledName += "-"; listBFshuffledName += (Int_t) (nMultMax);
  AliAnalysisDataContainer *coutBFS= mgr->CreateContainer(listBFshuffledName.Data(), 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;
}
 AddTaskBalanceFunctionInppMultiplicityTrain.C:1
 AddTaskBalanceFunctionInppMultiplicityTrain.C:2
 AddTaskBalanceFunctionInppMultiplicityTrain.C:3
 AddTaskBalanceFunctionInppMultiplicityTrain.C:4
 AddTaskBalanceFunctionInppMultiplicityTrain.C:5
 AddTaskBalanceFunctionInppMultiplicityTrain.C:6
 AddTaskBalanceFunctionInppMultiplicityTrain.C:7
 AddTaskBalanceFunctionInppMultiplicityTrain.C:8
 AddTaskBalanceFunctionInppMultiplicityTrain.C:9
 AddTaskBalanceFunctionInppMultiplicityTrain.C:10
 AddTaskBalanceFunctionInppMultiplicityTrain.C:11
 AddTaskBalanceFunctionInppMultiplicityTrain.C:12
 AddTaskBalanceFunctionInppMultiplicityTrain.C:13
 AddTaskBalanceFunctionInppMultiplicityTrain.C:14
 AddTaskBalanceFunctionInppMultiplicityTrain.C:15
 AddTaskBalanceFunctionInppMultiplicityTrain.C:16
 AddTaskBalanceFunctionInppMultiplicityTrain.C:17
 AddTaskBalanceFunctionInppMultiplicityTrain.C:18
 AddTaskBalanceFunctionInppMultiplicityTrain.C:19
 AddTaskBalanceFunctionInppMultiplicityTrain.C:20
 AddTaskBalanceFunctionInppMultiplicityTrain.C:21
 AddTaskBalanceFunctionInppMultiplicityTrain.C:22
 AddTaskBalanceFunctionInppMultiplicityTrain.C:23
 AddTaskBalanceFunctionInppMultiplicityTrain.C:24
 AddTaskBalanceFunctionInppMultiplicityTrain.C:25
 AddTaskBalanceFunctionInppMultiplicityTrain.C:26
 AddTaskBalanceFunctionInppMultiplicityTrain.C:27
 AddTaskBalanceFunctionInppMultiplicityTrain.C:28
 AddTaskBalanceFunctionInppMultiplicityTrain.C:29
 AddTaskBalanceFunctionInppMultiplicityTrain.C:30
 AddTaskBalanceFunctionInppMultiplicityTrain.C:31
 AddTaskBalanceFunctionInppMultiplicityTrain.C:32
 AddTaskBalanceFunctionInppMultiplicityTrain.C:33
 AddTaskBalanceFunctionInppMultiplicityTrain.C:34
 AddTaskBalanceFunctionInppMultiplicityTrain.C:35
 AddTaskBalanceFunctionInppMultiplicityTrain.C:36
 AddTaskBalanceFunctionInppMultiplicityTrain.C:37
 AddTaskBalanceFunctionInppMultiplicityTrain.C:38
 AddTaskBalanceFunctionInppMultiplicityTrain.C:39
 AddTaskBalanceFunctionInppMultiplicityTrain.C:40
 AddTaskBalanceFunctionInppMultiplicityTrain.C:41
 AddTaskBalanceFunctionInppMultiplicityTrain.C:42
 AddTaskBalanceFunctionInppMultiplicityTrain.C:43
 AddTaskBalanceFunctionInppMultiplicityTrain.C:44
 AddTaskBalanceFunctionInppMultiplicityTrain.C:45
 AddTaskBalanceFunctionInppMultiplicityTrain.C:46
 AddTaskBalanceFunctionInppMultiplicityTrain.C:47
 AddTaskBalanceFunctionInppMultiplicityTrain.C:48
 AddTaskBalanceFunctionInppMultiplicityTrain.C:49
 AddTaskBalanceFunctionInppMultiplicityTrain.C:50
 AddTaskBalanceFunctionInppMultiplicityTrain.C:51
 AddTaskBalanceFunctionInppMultiplicityTrain.C:52
 AddTaskBalanceFunctionInppMultiplicityTrain.C:53
 AddTaskBalanceFunctionInppMultiplicityTrain.C:54
 AddTaskBalanceFunctionInppMultiplicityTrain.C:55
 AddTaskBalanceFunctionInppMultiplicityTrain.C:56
 AddTaskBalanceFunctionInppMultiplicityTrain.C:57
 AddTaskBalanceFunctionInppMultiplicityTrain.C:58
 AddTaskBalanceFunctionInppMultiplicityTrain.C:59
 AddTaskBalanceFunctionInppMultiplicityTrain.C:60
 AddTaskBalanceFunctionInppMultiplicityTrain.C:61
 AddTaskBalanceFunctionInppMultiplicityTrain.C:62
 AddTaskBalanceFunctionInppMultiplicityTrain.C:63
 AddTaskBalanceFunctionInppMultiplicityTrain.C:64
 AddTaskBalanceFunctionInppMultiplicityTrain.C:65
 AddTaskBalanceFunctionInppMultiplicityTrain.C:66
 AddTaskBalanceFunctionInppMultiplicityTrain.C:67
 AddTaskBalanceFunctionInppMultiplicityTrain.C:68
 AddTaskBalanceFunctionInppMultiplicityTrain.C:69
 AddTaskBalanceFunctionInppMultiplicityTrain.C:70
 AddTaskBalanceFunctionInppMultiplicityTrain.C:71
 AddTaskBalanceFunctionInppMultiplicityTrain.C:72
 AddTaskBalanceFunctionInppMultiplicityTrain.C:73
 AddTaskBalanceFunctionInppMultiplicityTrain.C:74
 AddTaskBalanceFunctionInppMultiplicityTrain.C:75
 AddTaskBalanceFunctionInppMultiplicityTrain.C:76
 AddTaskBalanceFunctionInppMultiplicityTrain.C:77
 AddTaskBalanceFunctionInppMultiplicityTrain.C:78
 AddTaskBalanceFunctionInppMultiplicityTrain.C:79
 AddTaskBalanceFunctionInppMultiplicityTrain.C:80
 AddTaskBalanceFunctionInppMultiplicityTrain.C:81
 AddTaskBalanceFunctionInppMultiplicityTrain.C:82
 AddTaskBalanceFunctionInppMultiplicityTrain.C:83
 AddTaskBalanceFunctionInppMultiplicityTrain.C:84
 AddTaskBalanceFunctionInppMultiplicityTrain.C:85
 AddTaskBalanceFunctionInppMultiplicityTrain.C:86
 AddTaskBalanceFunctionInppMultiplicityTrain.C:87
 AddTaskBalanceFunctionInppMultiplicityTrain.C:88
 AddTaskBalanceFunctionInppMultiplicityTrain.C:89
 AddTaskBalanceFunctionInppMultiplicityTrain.C:90
 AddTaskBalanceFunctionInppMultiplicityTrain.C:91
 AddTaskBalanceFunctionInppMultiplicityTrain.C:92
 AddTaskBalanceFunctionInppMultiplicityTrain.C:93
 AddTaskBalanceFunctionInppMultiplicityTrain.C:94
 AddTaskBalanceFunctionInppMultiplicityTrain.C:95
 AddTaskBalanceFunctionInppMultiplicityTrain.C:96
 AddTaskBalanceFunctionInppMultiplicityTrain.C:97
 AddTaskBalanceFunctionInppMultiplicityTrain.C:98