ROOT logo
AliAnalysisTask *AddTaskPID(TString nameSuffix, Bool_t writeOutputToSeparateFiles = kTRUE,
                            Bool_t useConvolutedGauss = kTRUE, TString centralityEstimator = "V0A",
                            Bool_t considerJets = kTRUE, Bool_t overrideStoreCentralityPercentile = kFALSE,
                            Bool_t overrideStoreCentralityPercentileValue = kFALSE,
                            TString listOfFiles = "")
{
  // Macro to set up and add PID task with default settings.
  //
  // Typical parameters to run on 11a1* (MC_pp@7TeV):
  // "PWGJE_taskPID_Jets", kTRUE, kTRUE, "V0A", kTRUE
  // and as a second task
  // "PWGJE_taskPID_Jets_Inclusive", kTRUE, kTRUE, "V0A", kTRUE
  
  TString taskName = Form("PWGJE_taskPID%s", nameSuffix.Data());
  
  
  // Get the current analysis manager
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskPID", "No analysis manager found.");
    return 0x0;
  }
  
  //========= Add task to the ANALYSIS manager =====
  AliAnalysisTaskPID *task = new AliAnalysisTaskPID(taskName.Data());
  task->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kINT7);
  
  
  
  printf("\nSetting up task %s:\n", taskName.Data());
  
  if (!considerJets) {
    //
    // Add track filters
    //
    
    AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
    AliESDtrackCuts* esdTrackCutsL = 0x0;
    
    if (listOfFiles.Contains("LHC11") || listOfFiles.Contains("LHC12") || listOfFiles.Contains("LHC13")) {
      esdTrackCutsL = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE);
      printf("Using standard ITS-TPC track cuts 2011\n");
      trackFilter->SetTitle("Standard ITS-TPC track cuts 2011");
    }
    else if (listOfFiles.Contains("LHC10")) {
      esdTrackCutsL = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE);
      printf("Using standard ITS-TPC track cuts 2010\n");
      trackFilter->SetTitle("Standard ITS-TPC track cuts 2010");
    }
    else  {
      esdTrackCutsL = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE);
      printf("WARNING: Cuts not configured for this period!!! Using standard ITS-TPC track cuts 2011\n");
      trackFilter->SetTitle("Standard ITS-TPC track cuts 2011");
    }
    /*
    esdTrackCutsL->SetMinNCrossedRowsTPC(120);
    esdTrackCutsL->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
    esdTrackCutsL->SetMaxChi2PerClusterITS(36);
    esdTrackCutsL->SetMaxFractionSharedTPCClusters(0.4);
    esdTrackCutsL->SetMaxChi2TPCConstrainedGlobal(36);
    */
    
    trackFilter->AddCuts(esdTrackCutsL);
    task->SetTrackFilter(trackFilter);
  }
  
  // Test whether we have pPb or Pbp
  if (listOfFiles.Contains("pPb") || listOfFiles.Contains("Pbp")) {
    task->SetIsPbpOrpPb(kTRUE);
    printf("pPb/Pbp detected -> Adapting vertex cuts!\n");
    task->SetCentralityEstimator("V0A");
  }
  else  {
    task->SetIsPbpOrpPb(kFALSE);
    printf("Collision type different from pPb/Pbp detected -> Using standard vertex cuts!\n");
  }
  
  // Do not store centrality percentile for pp (will be set to -1 for all events) - or use special centrality estimator and store
  if (listOfFiles.Contains("pp")) {
    //task->SetStoreCentralityPercentile(kFALSE);
    
    task->SetStoreCentralityPercentile(kTRUE);
    task->SetCentralityEstimator("ITSTPCtracklets");
  }
  else
    task->SetStoreCentralityPercentile(kTRUE);
  
  if (overrideStoreCentralityPercentile)
    task->SetStoreCentralityPercentile(overrideStoreCentralityPercentileValue);
  
  task->SetEtaAbsCutRange(0.0, 0.9);
  task->SetUsePhiCut(kFALSE);
  
  // Do not set the covolution parameters if they are not used (saves some cpu time for the initialisation)
  if (useConvolutedGauss) {
    if ((listOfFiles.Contains("pPb") || listOfFiles.Contains("Pbp")) && listOfFiles.Contains("LHC13")) {
      printf("\n13* pPb @ 5.023 ATeV data detected -> Setting corresponding convolution parameters...\n");
      task->SetConvolutedGaussLambdaParameter(3.0);
    }
    
    if (listOfFiles.Contains("LHC11a_without_SDD")) {
      printf("\n11a (pp 2.76 TeV) detected -> Setting corresponding convolution parameters...\n");
      task->SetConvolutedGaussLambdaParameter(3.0);
    }
    else {
      printf("\nUsing default convolution parameters...\n");
      task->SetConvolutedGaussLambdaParameter(2.0);
    }
  }
  
  task->SetCentralityEstimator(centralityEstimator.Data());
  
  task->SetUseMCidForGeneration(kTRUE);
  task->SetUseITS(kTRUE);
  task->SetUseTOF(kTRUE);
  task->SetUsePriors(kTRUE);
  task->SetUseTPCDefaultPriors(kTRUE);
  task->SetUseConvolutedGaus(useConvolutedGauss);
  task->SetTakeIntoAccountMuons(kTRUE);
  
  task->SetInputFromOtherTask(considerJets);
  task->SetStoreAdditionalJetInformation(considerJets);
  
  task->PrintSettings();
  
  mgr->AddTask(task);


  //================================================
  //              data containers
  //================================================

  //define output containers
  AliAnalysisDataContainer *coutput1 = 
    mgr->CreateContainer(Form("%s", taskName.Data()),
                         TObjArray::Class(),
                         AliAnalysisManager::kOutputContainer,
                         writeOutputToSeparateFiles
                          ? Form("%s.root", taskName.Data())
                          : Form("%s:%s", AliAnalysisManager::GetCommonFileName(), taskName.Data()));
  
  if (task->GetDoEfficiency()) {
    AliAnalysisDataContainer *coutput2 = 
        mgr->CreateContainer(Form("%s_efficiency", taskName.Data()),
                            AliCFContainer::Class(),
                            AliAnalysisManager::kOutputContainer,
                            writeOutputToSeparateFiles
                              ? Form("%s_efficiency.root", taskName.Data())
                              : Form("%s:%s_efficiency", AliAnalysisManager::GetCommonFileName(), taskName.Data()));
    mgr->ConnectOutput (task,  2, coutput2);
  }
  
  if (task->GetDoDeDxCheck() || task->GetDoPtResolution()) {
    AliAnalysisDataContainer *coutput3 = 
        mgr->CreateContainer(Form("%s_PtResolution", taskName.Data()),
                            TObjArray::Class(),
                            AliAnalysisManager::kOutputContainer,
                            writeOutputToSeparateFiles
                              ? Form("%s_PtResolution.root", taskName.Data())
                              : Form("%s:%s_PtResolution", AliAnalysisManager::GetCommonFileName(), taskName.Data()));
    mgr->ConnectOutput (task,  3, coutput3);
  }
  //connect containers
  mgr->ConnectInput  (task,  0, mgr->GetCommonInputContainer());
  mgr->ConnectOutput (task,  0, mgr->GetCommonOutputContainer()); // comment to run local
  mgr->ConnectOutput (task,  1, coutput1);

  return task;
}
 AddTaskPID.C:1
 AddTaskPID.C:2
 AddTaskPID.C:3
 AddTaskPID.C:4
 AddTaskPID.C:5
 AddTaskPID.C:6
 AddTaskPID.C:7
 AddTaskPID.C:8
 AddTaskPID.C:9
 AddTaskPID.C:10
 AddTaskPID.C:11
 AddTaskPID.C:12
 AddTaskPID.C:13
 AddTaskPID.C:14
 AddTaskPID.C:15
 AddTaskPID.C:16
 AddTaskPID.C:17
 AddTaskPID.C:18
 AddTaskPID.C:19
 AddTaskPID.C:20
 AddTaskPID.C:21
 AddTaskPID.C:22
 AddTaskPID.C:23
 AddTaskPID.C:24
 AddTaskPID.C:25
 AddTaskPID.C:26
 AddTaskPID.C:27
 AddTaskPID.C:28
 AddTaskPID.C:29
 AddTaskPID.C:30
 AddTaskPID.C:31
 AddTaskPID.C:32
 AddTaskPID.C:33
 AddTaskPID.C:34
 AddTaskPID.C:35
 AddTaskPID.C:36
 AddTaskPID.C:37
 AddTaskPID.C:38
 AddTaskPID.C:39
 AddTaskPID.C:40
 AddTaskPID.C:41
 AddTaskPID.C:42
 AddTaskPID.C:43
 AddTaskPID.C:44
 AddTaskPID.C:45
 AddTaskPID.C:46
 AddTaskPID.C:47
 AddTaskPID.C:48
 AddTaskPID.C:49
 AddTaskPID.C:50
 AddTaskPID.C:51
 AddTaskPID.C:52
 AddTaskPID.C:53
 AddTaskPID.C:54
 AddTaskPID.C:55
 AddTaskPID.C:56
 AddTaskPID.C:57
 AddTaskPID.C:58
 AddTaskPID.C:59
 AddTaskPID.C:60
 AddTaskPID.C:61
 AddTaskPID.C:62
 AddTaskPID.C:63
 AddTaskPID.C:64
 AddTaskPID.C:65
 AddTaskPID.C:66
 AddTaskPID.C:67
 AddTaskPID.C:68
 AddTaskPID.C:69
 AddTaskPID.C:70
 AddTaskPID.C:71
 AddTaskPID.C:72
 AddTaskPID.C:73
 AddTaskPID.C:74
 AddTaskPID.C:75
 AddTaskPID.C:76
 AddTaskPID.C:77
 AddTaskPID.C:78
 AddTaskPID.C:79
 AddTaskPID.C:80
 AddTaskPID.C:81
 AddTaskPID.C:82
 AddTaskPID.C:83
 AddTaskPID.C:84
 AddTaskPID.C:85
 AddTaskPID.C:86
 AddTaskPID.C:87
 AddTaskPID.C:88
 AddTaskPID.C:89
 AddTaskPID.C:90
 AddTaskPID.C:91
 AddTaskPID.C:92
 AddTaskPID.C:93
 AddTaskPID.C:94
 AddTaskPID.C:95
 AddTaskPID.C:96
 AddTaskPID.C:97
 AddTaskPID.C:98
 AddTaskPID.C:99
 AddTaskPID.C:100
 AddTaskPID.C:101
 AddTaskPID.C:102
 AddTaskPID.C:103
 AddTaskPID.C:104
 AddTaskPID.C:105
 AddTaskPID.C:106
 AddTaskPID.C:107
 AddTaskPID.C:108
 AddTaskPID.C:109
 AddTaskPID.C:110
 AddTaskPID.C:111
 AddTaskPID.C:112
 AddTaskPID.C:113
 AddTaskPID.C:114
 AddTaskPID.C:115
 AddTaskPID.C:116
 AddTaskPID.C:117
 AddTaskPID.C:118
 AddTaskPID.C:119
 AddTaskPID.C:120
 AddTaskPID.C:121
 AddTaskPID.C:122
 AddTaskPID.C:123
 AddTaskPID.C:124
 AddTaskPID.C:125
 AddTaskPID.C:126
 AddTaskPID.C:127
 AddTaskPID.C:128
 AddTaskPID.C:129
 AddTaskPID.C:130
 AddTaskPID.C:131
 AddTaskPID.C:132
 AddTaskPID.C:133
 AddTaskPID.C:134
 AddTaskPID.C:135
 AddTaskPID.C:136
 AddTaskPID.C:137
 AddTaskPID.C:138
 AddTaskPID.C:139
 AddTaskPID.C:140
 AddTaskPID.C:141
 AddTaskPID.C:142
 AddTaskPID.C:143
 AddTaskPID.C:144
 AddTaskPID.C:145
 AddTaskPID.C:146
 AddTaskPID.C:147
 AddTaskPID.C:148
 AddTaskPID.C:149
 AddTaskPID.C:150
 AddTaskPID.C:151
 AddTaskPID.C:152
 AddTaskPID.C:153
 AddTaskPID.C:154
 AddTaskPID.C:155
 AddTaskPID.C:156
 AddTaskPID.C:157
 AddTaskPID.C:158
 AddTaskPID.C:159
 AddTaskPID.C:160
 AddTaskPID.C:161
 AddTaskPID.C:162
 AddTaskPID.C:163
 AddTaskPID.C:164
 AddTaskPID.C:165
 AddTaskPID.C:166
 AddTaskPID.C:167
 AddTaskPID.C:168
 AddTaskPID.C:169
 AddTaskPID.C:170