#if !defined (__CINT__) || defined (__MAKECINT__)
#include "AliAnalysisManager.h"
#include "AliAnalysisTaskPtEMCalTriggerV1.h"
#include "AliESDtrackCuts.h"
#include "AliJetContainer.h"
#include <TList.h>
#include <TString.h>
#include <cstring>
#endif
void AddClusterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC);
void AddTrackComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, bool isMC, bool isSwapEta);
void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group);
void AddEventCounterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC);
void AddMCJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, double minJetPt);
void AddRecJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, double minJetPt, bool isMC, bool isSwapEta);
AliESDtrackCuts *CreateDefaultTrackCuts();
AliESDtrackCuts *CreateHybridTrackCuts();
AliAnalysisTask* AddTaskPtEMCalTriggerV1(
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;
}
bool isSwapEta = TString(period).CompareTo("LHC13f") ? kFALSE : kTRUE;
EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1 *pttriggertask = new EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1("ptemcaltriggertask");
//pttriggertask->SelectCollisionCandidates(AliVEvent::kINT7 | AliVEvent::kEMC7); // Select both INT7 or EMC7 triggered events
pttriggertask->SelectCollisionCandidates(AliVEvent::kAny);
mgr->AddTask(pttriggertask);
if(usePythiaHard){
pttriggertask->SetIsPythia(kTRUE);
}
// Add components
EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *noselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("noselect");
noselect->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerPatchAnalysisComponent("patchanalysis"));
double jetpt[4] = {40., 60., 80., 100.};
EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *defaultselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("defaultselect");
defaultselect->SetEventSelection(new EMCalTriggerPtAnalysis::AliEMCalTriggerEventSelection());
EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts *kineCuts = new EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts();
kineCuts->SetPtRange(2., 100.);
defaultselect->SetKineCuts(kineCuts);
AddEventCounterComponent(defaultselect, isMC);
if(isMC){
AddMCParticleComponent(defaultselect);
for(int ijpt = 0; ijpt < 4; ijpt++)
AddMCJetComponent(defaultselect, jetpt[ijpt]);
}
AddClusterComponent(defaultselect, isMC);
AddTrackComponent(defaultselect, CreateDefaultTrackCuts(), isMC, isSwapEta);
for(int ijpt = 0; ijpt < 4; ijpt++)
AddRecJetComponent(defaultselect, CreateDefaultTrackCuts(), jetpt[ijpt], isMC, isSwapEta);
pttriggertask->AddAnalysisGroup(noselect);
pttriggertask->AddAnalysisGroup(defaultselect);
// 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;
// Handle Jet Containers
if(strlen(njetcontainerData)){
AliJetContainer *jetcontainerData = pttriggertask->AddJetContainer(njetcontainerData, "TPC", jetradius);
pttriggertask->SetDataJetContainerName("PtTriggerTaskJetsData");
jetcontainerData->ConnectParticleContainer(trackContainer);
jetcontainerData->SetName("PtTriggerTaskJetsData");
jetcontainerData->SetJetPtCut(20.);
jetcontainerData->SetJetEtaPhiEMCAL();
}
if(isMC && strlen(njetcontainerMC)){
AliJetContainer *jetcontainerMC = pttriggertask->AddJetContainer(njetcontainerMC, "TPC", jetradius);
pttriggertask->SetMCJetContainerName("PtTriggerTaskJetsMC")
jetcontainerMC->ConnectParticleContainer(mcpartcont);
jetcontainerMC->SetName("PtTriggerTaskJetsMC");
jetcontainerMC->SetJetPtCut(20.);
jetcontainerMC->SetJetEtaPhiEMCAL();
}
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;
}
void AddClusterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC){
EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent *clusteranalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent("clusterAnalysis");
clusteranalysis->SetEnergyRange(2., 100.);
if(isMC) clusteranalysis->SetUsePatches();
group->AddAnalysisComponent(clusteranalysis);
}
void AddTrackComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts * trackcuts, bool isMC, bool isSwapEta){
EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent *trackanalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent("trackAnalysisStandard");
group->AddAnalysisComponent(trackanalysis);
// Create charged hadrons pPb standard track cuts
trackanalysis->SetTrackSelection(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
if(isMC){
trackanalysis->SetRequestMCtrueTracks();
trackanalysis->SetUsePatches();
}
if(isSwapEta) trackanalysis->SetSwapEta();
}
void AddEventCounterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, Bool_t isMC){
EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent * evcount = new EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent("eventCounter");
evcount->SetUsePatches(isMC);
group->AddAnalysisComponent(evcount);
}
void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group){
group->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerMCParticleAnalysisComponent("partana"));
}
void AddMCJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, double minJetPt){
EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent(Form("MCJetAna%f", minJetPt));
jetana->SetMinimumJetPt(minJetPt);
jetana->SetUsePatches();
group->AddAnalysisComponent(jetana);
}
void AddRecJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, double minJetPt, bool isMC, bool isSwapEta){
EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent(Form("RecJetAna%f", minJetPt));
jetana->SetMinimumJetPt(minJetPt);
jetana->SetUsePatches();
jetana->SetSingleTrackCuts(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
group->AddAnalysisComponent(jetana);
}
AliESDtrackCuts *CreateDefaultTrackCuts(){
AliESDtrackCuts *standardTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(true, 1);
standardTrackCuts->SetName("Standard Track cuts");
standardTrackCuts->SetMinNCrossedRowsTPC(120);
standardTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
return standardTrackCuts;
}
AliESDtrackCuts *CreateHybridTrackCuts(){
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);
return hybridTrackCuts;
}
AddTaskPtEMCalTriggerV1.C:1 AddTaskPtEMCalTriggerV1.C:2 AddTaskPtEMCalTriggerV1.C:3 AddTaskPtEMCalTriggerV1.C:4 AddTaskPtEMCalTriggerV1.C:5 AddTaskPtEMCalTriggerV1.C:6 AddTaskPtEMCalTriggerV1.C:7 AddTaskPtEMCalTriggerV1.C:8 AddTaskPtEMCalTriggerV1.C:9 AddTaskPtEMCalTriggerV1.C:10 AddTaskPtEMCalTriggerV1.C:11 AddTaskPtEMCalTriggerV1.C:12 AddTaskPtEMCalTriggerV1.C:13 AddTaskPtEMCalTriggerV1.C:14 AddTaskPtEMCalTriggerV1.C:15 AddTaskPtEMCalTriggerV1.C:16 AddTaskPtEMCalTriggerV1.C:17 AddTaskPtEMCalTriggerV1.C:18 AddTaskPtEMCalTriggerV1.C:19 AddTaskPtEMCalTriggerV1.C:20 AddTaskPtEMCalTriggerV1.C:21 AddTaskPtEMCalTriggerV1.C:22 AddTaskPtEMCalTriggerV1.C:23 AddTaskPtEMCalTriggerV1.C:24 AddTaskPtEMCalTriggerV1.C:25 AddTaskPtEMCalTriggerV1.C:26 AddTaskPtEMCalTriggerV1.C:27 AddTaskPtEMCalTriggerV1.C:28 AddTaskPtEMCalTriggerV1.C:29 AddTaskPtEMCalTriggerV1.C:30 AddTaskPtEMCalTriggerV1.C:31 AddTaskPtEMCalTriggerV1.C:32 AddTaskPtEMCalTriggerV1.C:33 AddTaskPtEMCalTriggerV1.C:34 AddTaskPtEMCalTriggerV1.C:35 AddTaskPtEMCalTriggerV1.C:36 AddTaskPtEMCalTriggerV1.C:37 AddTaskPtEMCalTriggerV1.C:38 AddTaskPtEMCalTriggerV1.C:39 AddTaskPtEMCalTriggerV1.C:40 AddTaskPtEMCalTriggerV1.C:41 AddTaskPtEMCalTriggerV1.C:42 AddTaskPtEMCalTriggerV1.C:43 AddTaskPtEMCalTriggerV1.C:44 AddTaskPtEMCalTriggerV1.C:45 AddTaskPtEMCalTriggerV1.C:46 AddTaskPtEMCalTriggerV1.C:47 AddTaskPtEMCalTriggerV1.C:48 AddTaskPtEMCalTriggerV1.C:49 AddTaskPtEMCalTriggerV1.C:50 AddTaskPtEMCalTriggerV1.C:51 AddTaskPtEMCalTriggerV1.C:52 AddTaskPtEMCalTriggerV1.C:53 AddTaskPtEMCalTriggerV1.C:54 AddTaskPtEMCalTriggerV1.C:55 AddTaskPtEMCalTriggerV1.C:56 AddTaskPtEMCalTriggerV1.C:57 AddTaskPtEMCalTriggerV1.C:58 AddTaskPtEMCalTriggerV1.C:59 AddTaskPtEMCalTriggerV1.C:60 AddTaskPtEMCalTriggerV1.C:61 AddTaskPtEMCalTriggerV1.C:62 AddTaskPtEMCalTriggerV1.C:63 AddTaskPtEMCalTriggerV1.C:64 AddTaskPtEMCalTriggerV1.C:65 AddTaskPtEMCalTriggerV1.C:66 AddTaskPtEMCalTriggerV1.C:67 AddTaskPtEMCalTriggerV1.C:68 AddTaskPtEMCalTriggerV1.C:69 AddTaskPtEMCalTriggerV1.C:70 AddTaskPtEMCalTriggerV1.C:71 AddTaskPtEMCalTriggerV1.C:72 AddTaskPtEMCalTriggerV1.C:73 AddTaskPtEMCalTriggerV1.C:74 AddTaskPtEMCalTriggerV1.C:75 AddTaskPtEMCalTriggerV1.C:76 AddTaskPtEMCalTriggerV1.C:77 AddTaskPtEMCalTriggerV1.C:78 AddTaskPtEMCalTriggerV1.C:79 AddTaskPtEMCalTriggerV1.C:80 AddTaskPtEMCalTriggerV1.C:81 AddTaskPtEMCalTriggerV1.C:82 AddTaskPtEMCalTriggerV1.C:83 AddTaskPtEMCalTriggerV1.C:84 AddTaskPtEMCalTriggerV1.C:85 AddTaskPtEMCalTriggerV1.C:86 AddTaskPtEMCalTriggerV1.C:87 AddTaskPtEMCalTriggerV1.C:88 AddTaskPtEMCalTriggerV1.C:89 AddTaskPtEMCalTriggerV1.C:90 AddTaskPtEMCalTriggerV1.C:91 AddTaskPtEMCalTriggerV1.C:92 AddTaskPtEMCalTriggerV1.C:93 AddTaskPtEMCalTriggerV1.C:94 AddTaskPtEMCalTriggerV1.C:95 AddTaskPtEMCalTriggerV1.C:96 AddTaskPtEMCalTriggerV1.C:97 AddTaskPtEMCalTriggerV1.C:98 AddTaskPtEMCalTriggerV1.C:99 AddTaskPtEMCalTriggerV1.C:100 AddTaskPtEMCalTriggerV1.C:101 AddTaskPtEMCalTriggerV1.C:102 AddTaskPtEMCalTriggerV1.C:103 AddTaskPtEMCalTriggerV1.C:104 AddTaskPtEMCalTriggerV1.C:105 AddTaskPtEMCalTriggerV1.C:106 AddTaskPtEMCalTriggerV1.C:107 AddTaskPtEMCalTriggerV1.C:108 AddTaskPtEMCalTriggerV1.C:109 AddTaskPtEMCalTriggerV1.C:110 AddTaskPtEMCalTriggerV1.C:111 AddTaskPtEMCalTriggerV1.C:112 AddTaskPtEMCalTriggerV1.C:113 AddTaskPtEMCalTriggerV1.C:114 AddTaskPtEMCalTriggerV1.C:115 AddTaskPtEMCalTriggerV1.C:116 AddTaskPtEMCalTriggerV1.C:117 AddTaskPtEMCalTriggerV1.C:118 AddTaskPtEMCalTriggerV1.C:119 AddTaskPtEMCalTriggerV1.C:120 AddTaskPtEMCalTriggerV1.C:121 AddTaskPtEMCalTriggerV1.C:122 AddTaskPtEMCalTriggerV1.C:123 AddTaskPtEMCalTriggerV1.C:124 AddTaskPtEMCalTriggerV1.C:125 AddTaskPtEMCalTriggerV1.C:126 AddTaskPtEMCalTriggerV1.C:127 AddTaskPtEMCalTriggerV1.C:128 AddTaskPtEMCalTriggerV1.C:129 AddTaskPtEMCalTriggerV1.C:130 AddTaskPtEMCalTriggerV1.C:131 AddTaskPtEMCalTriggerV1.C:132 AddTaskPtEMCalTriggerV1.C:133 AddTaskPtEMCalTriggerV1.C:134 AddTaskPtEMCalTriggerV1.C:135 AddTaskPtEMCalTriggerV1.C:136 AddTaskPtEMCalTriggerV1.C:137 AddTaskPtEMCalTriggerV1.C:138 AddTaskPtEMCalTriggerV1.C:139 AddTaskPtEMCalTriggerV1.C:140 AddTaskPtEMCalTriggerV1.C:141 AddTaskPtEMCalTriggerV1.C:142 AddTaskPtEMCalTriggerV1.C:143 AddTaskPtEMCalTriggerV1.C:144 AddTaskPtEMCalTriggerV1.C:145 AddTaskPtEMCalTriggerV1.C:146 AddTaskPtEMCalTriggerV1.C:147 AddTaskPtEMCalTriggerV1.C:148 AddTaskPtEMCalTriggerV1.C:149 AddTaskPtEMCalTriggerV1.C:150 AddTaskPtEMCalTriggerV1.C:151 AddTaskPtEMCalTriggerV1.C:152 AddTaskPtEMCalTriggerV1.C:153 AddTaskPtEMCalTriggerV1.C:154 AddTaskPtEMCalTriggerV1.C:155 AddTaskPtEMCalTriggerV1.C:156 AddTaskPtEMCalTriggerV1.C:157 AddTaskPtEMCalTriggerV1.C:158 AddTaskPtEMCalTriggerV1.C:159 AddTaskPtEMCalTriggerV1.C:160 AddTaskPtEMCalTriggerV1.C:161 AddTaskPtEMCalTriggerV1.C:162 AddTaskPtEMCalTriggerV1.C:163 AddTaskPtEMCalTriggerV1.C:164 AddTaskPtEMCalTriggerV1.C:165 AddTaskPtEMCalTriggerV1.C:166 AddTaskPtEMCalTriggerV1.C:167 AddTaskPtEMCalTriggerV1.C:168 AddTaskPtEMCalTriggerV1.C:169 AddTaskPtEMCalTriggerV1.C:170 AddTaskPtEMCalTriggerV1.C:171 AddTaskPtEMCalTriggerV1.C:172 AddTaskPtEMCalTriggerV1.C:173 AddTaskPtEMCalTriggerV1.C:174 AddTaskPtEMCalTriggerV1.C:175 AddTaskPtEMCalTriggerV1.C:176 AddTaskPtEMCalTriggerV1.C:177 AddTaskPtEMCalTriggerV1.C:178 AddTaskPtEMCalTriggerV1.C:179 AddTaskPtEMCalTriggerV1.C:180 AddTaskPtEMCalTriggerV1.C:181