ROOT logo
#if !defined (__CINT__) || defined (__MAKECINT__)
#include "AliAnalysisManager.h"
#include "AliAnalysisTaskPtEMCalTrigger.h"
#include "AliESDtrackCuts.h"
#include "AliJetContainer.h"
#include <TList.h>
#include <TString.h>
#include <cstring>
#endif

AliAnalysisTask* AddTaskPtEMCalTrigger(
    bool isMC,
    bool usePythiaHard,
    const char *period ="LHC13d",
    const char *ntrackContainer = "",
    const char *nclusterContainer = "",
    const char *njetcontainerData = "",
    const char *njetcontainerMC = "",
    double jetradius = 0.5
)
{
  //AliLog::SetClassDebugLevel("EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTrigger", 2);
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();

  if (!mgr) {
    ::Error("AddTaskPtEMCalTrigger", "No analysis manager to connect to.");
    return NULL;
  }

  if (!mgr->GetInputEventHandler()) {
    ::Error("AddTaskPtEMCalTrigger", "This task requires an input event handler");
    return NULL;
  }

  EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTrigger *pttriggertask = new EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTrigger("ptemcaltriggertask");
  //pttriggertask->SelectCollisionCandidates(AliVEvent::kINT7 | AliVEvent::kEMC7);                          // Select both INT7 or EMC7 triggered events
  pttriggertask->SelectCollisionCandidates(AliVEvent::kAny);
  if(!TString(period).CompareTo("LHC13f")) pttriggertask->SetSwapEta();
  mgr->AddTask(pttriggertask);
  pttriggertask->SetPtRange(2., 100.);
  pttriggertask->SetClusterEnergyRange(2.,100.);
  if(usePythiaHard){
    pttriggertask->SetIsPythia(kTRUE);
  }

  // Add containers
  Bool_t isAOD = mgr->GetInputEventHandler()->IsA() == AliAODInputHandler::Class();
  AliParticleContainer *trackContainer = pttriggertask->AddParticleContainer(ntrackContainer);
  //trackContainer->SetClassName("AliVTrack");
  AliClusterContainer *clusterContainer = pttriggertask->AddClusterContainer(nclusterContainer);
  AliParticleContainer *mcpartcont = isMC ? pttriggertask->AddParticleContainer("MCParticlesSelected") : NULL;


  // Create charged hadrons pPb standard track cuts
  AliESDtrackCuts *standardTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(true, 1);
  standardTrackCuts->SetName("Standard Track cuts");
  standardTrackCuts->SetMinNCrossedRowsTPC(120);
  standardTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
  pttriggertask->AddESDTrackCuts(standardTrackCuts);

  // Create hybrid track cuts as used in the jet analysis
  AliESDtrackCuts* hybridTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
  hybridTrackCuts->SetName("Global Hybrid tracks, loose DCA");
  hybridTrackCuts->SetMaxDCAToVertexXY(2.4);
  hybridTrackCuts->SetMaxDCAToVertexZ(3.2);
  hybridTrackCuts->SetDCAToVertex2D(kTRUE);
  hybridTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
  hybridTrackCuts->SetMaxFractionSharedTPCClusters(0.4);
  pttriggertask->AddESDTrackCuts(hybridTrackCuts);

  // Handle Jet Containers
  if(strlen(njetcontainerData)){
    AliJetContainer *jetcontainerData = pttriggertask->AddJetContainer(njetcontainerData, "TPC", jetradius);
    pttriggertask->AddJetContainerName("PtTriggerTaskJetsData", false);
    jetcontainerData->ConnectParticleContainer(trackContainer);
    jetcontainerData->SetName("PtTriggerTaskJetsData");
    jetcontainerData->SetJetPtCut(20.);
  }
  if(isMC && strlen(njetcontainerMC)){
    AliJetContainer *jetcontainerMC = pttriggertask->AddJetContainer(njetcontainerMC, "TPC", jetradius);
    pttriggertask->AddJetContainerName("PtTriggerTaskJetsMC", true);
    jetcontainerMC->ConnectParticleContainer(mcpartcont);
    jetcontainerMC->SetName("PtTriggerTaskJetsMC");
    jetcontainerMC->SetJetPtCut(20.);
  }

  TString containerName = mgr->GetCommonFileName();
  containerName += ":PtEMCalTriggerTask";
  printf("container name: %s\n", containerName.Data());

  AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
  AliAnalysisDataContainer *coutput = mgr->CreateContainer("results", TList::Class(),    AliAnalysisManager::kOutputContainer, containerName.Data());

  //Connect input/output
  mgr->ConnectInput(pttriggertask, 0, cinput);
  mgr->ConnectOutput(pttriggertask, 1, coutput);

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