1 #if !defined (__CINT__) || defined (__MAKECINT__)
2 #include "AliAnalysisManager.h"
3 #include "AliAnalysisTaskPtEMCalTriggerV1.h"
4 #include "AliESDtrackCuts.h"
5 #include "AliJetContainer.h"
11 void AddClusterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC);
12 void AddTrackComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, bool isMC, bool isSwapEta);
13 void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group);
14 void AddEventCounterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC);
15 void AddMCJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, double minJetPt);
16 void AddRecJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, double minJetPt, bool isMC, bool isSwapEta);
17 AliESDtrackCuts *CreateDefaultTrackCuts();
18 AliESDtrackCuts *CreateHybridTrackCuts();
20 AliAnalysisTask* AddTaskPtEMCalTriggerV1(
23 const char *period ="LHC13d",
24 const char *ntrackContainer = "",
25 const char *nclusterContainer = "",
26 const char *njetcontainerData = "",
27 const char *njetcontainerMC = "",
28 const char *ntriggerContainer = "",
29 double jetradius = 0.5
32 //AliLog::SetClassDebugLevel("EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTrigger", 2);
33 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
36 ::Error("AddTaskPtEMCalTrigger", "No analysis manager to connect to.");
40 if (!mgr->GetInputEventHandler()) {
41 ::Error("AddTaskPtEMCalTrigger", "This task requires an input event handler");
45 bool isSwapEta = TString(period).CompareTo("LHC13f") ? kFALSE : kTRUE;
46 EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1 *pttriggertask = new EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1("ptemcaltriggertask");
47 //pttriggertask->SelectCollisionCandidates(AliVEvent::kINT7 | AliVEvent::kEMC7); // Select both INT7 or EMC7 triggered events
48 pttriggertask->SelectCollisionCandidates(AliVEvent::kAny);
49 if(isMC) pttriggertask->SetSwapThresholds();
51 mgr->AddTask(pttriggertask);
53 pttriggertask->SetIsPythia(kTRUE);
57 if(strlen(ntriggerContainer)){
58 pttriggertask->SetCaloTriggerPatchInfoName(ntriggerContainer);
59 EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *noselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("noselect");
60 noselect->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerPatchAnalysisComponent("patchanalysis"));
61 pttriggertask->AddAnalysisGroup(noselect);
63 pttriggertask->SetCaloTriggerPatchInfoName("");
66 double jetpt[4] = {40., 60., 80., 100.};
67 EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *defaultselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("defaultselect");
68 defaultselect->SetEventSelection(new EMCalTriggerPtAnalysis::AliEMCalTriggerEventSelection());
69 EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts *kineCuts = new EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts();
70 kineCuts->SetPtRange(2., 100.);
71 defaultselect->SetKineCuts(kineCuts);
72 AddEventCounterComponent(defaultselect, isMC);
74 AddMCParticleComponent(defaultselect);
75 for(int ijpt = 0; ijpt < 4; ijpt++)
76 AddMCJetComponent(defaultselect, jetpt[ijpt]);
78 AddClusterComponent(defaultselect, isMC);
79 AddTrackComponent(defaultselect, CreateDefaultTrackCuts(), isMC, isSwapEta);
80 for(int ijpt = 0; ijpt < 4; ijpt++)
81 AddRecJetComponent(defaultselect, CreateDefaultTrackCuts(), jetpt[ijpt], isMC, isSwapEta);
83 pttriggertask->AddAnalysisGroup(defaultselect);
86 Bool_t isAOD = mgr->GetInputEventHandler()->IsA() == AliAODInputHandler::Class();
87 AliParticleContainer *trackContainer = pttriggertask->AddParticleContainer(ntrackContainer);
88 //trackContainer->SetClassName("AliVTrack");
89 AliClusterContainer *clusterContainer = pttriggertask->AddClusterContainer(nclusterContainer);
90 AliParticleContainer *mcpartcont = isMC ? pttriggertask->AddParticleContainer("MCParticlesSelected") : NULL;
93 // Handle Jet Containers
94 if(strlen(njetcontainerData)){
95 AliJetContainer *jetcontainerData = pttriggertask->AddJetContainer(njetcontainerData, "EMCAL", jetradius);
96 pttriggertask->SetDataJetContainerName("PtTriggerTaskJetsData");
97 jetcontainerData->ConnectParticleContainer(trackContainer);
98 jetcontainerData->SetName("PtTriggerTaskJetsData");
99 jetcontainerData->SetJetPtCut(20.);
100 printf("jet container added for Data\n");
102 if(isMC && strlen(njetcontainerMC)){
103 AliJetContainer *jetcontainerMC = pttriggertask->AddJetContainer(njetcontainerMC, "EMCAL", jetradius);
104 pttriggertask->SetMCJetContainerName("PtTriggerTaskJetsMC");
105 jetcontainerMC->ConnectParticleContainer(mcpartcont);
106 jetcontainerMC->SetName("PtTriggerTaskJetsMC");
107 jetcontainerMC->SetJetPtCut(20.);
108 printf("Jet container added for MC");
111 TString containerName = mgr->GetCommonFileName();
112 containerName += ":PtEMCalTriggerTask";
113 printf("container name: %s\n", containerName.Data());
115 AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
116 AliAnalysisDataContainer *coutput = mgr->CreateContainer("results", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
118 //Connect input/output
119 mgr->ConnectInput(pttriggertask, 0, cinput);
120 mgr->ConnectOutput(pttriggertask, 1, coutput);
122 return pttriggertask;
125 void AddClusterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC){
126 EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent *clusteranalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent("clusterAnalysis");
127 clusteranalysis->SetEnergyRange(2., 100.);
128 if(isMC) clusteranalysis->SetUsePatches();
129 group->AddAnalysisComponent(clusteranalysis);
132 void AddTrackComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts * trackcuts, bool isMC, bool isSwapEta){
133 EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent *trackanalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent("trackAnalysisStandard");
134 group->AddAnalysisComponent(trackanalysis);
135 // Create charged hadrons pPb standard track cuts
136 trackanalysis->SetTrackSelection(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
139 trackanalysis->SetRequestMCtrueTracks();
140 trackanalysis->SetUsePatches();
142 if(isSwapEta) trackanalysis->SetSwapEta();
145 void AddEventCounterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, Bool_t isMC){
146 EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent * evcount = new EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent("eventCounter");
147 evcount->SetUsePatches(isMC);
148 group->AddAnalysisComponent(evcount);
151 void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group){
152 group->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerMCParticleAnalysisComponent("partana"));
155 void AddMCJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, double minJetPt){
156 EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent(Form("MCJetAna%f", minJetPt));
157 jetana->SetMinimumJetPt(minJetPt);
158 jetana->SetUsePatches();
159 group->AddAnalysisComponent(jetana);
162 void AddRecJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, double minJetPt, bool isMC, bool isSwapEta){
163 EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent(Form("RecJetAna%f", minJetPt));
164 jetana->SetMinimumJetPt(minJetPt);
165 jetana->SetUsePatches();
166 jetana->SetSingleTrackCuts(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
167 group->AddAnalysisComponent(jetana);
170 AliESDtrackCuts *CreateDefaultTrackCuts(){
171 AliESDtrackCuts *standardTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(true, 1);
172 standardTrackCuts->SetName("Standard Track cuts");
173 standardTrackCuts->SetMinNCrossedRowsTPC(120);
174 standardTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
175 return standardTrackCuts;
178 AliESDtrackCuts *CreateHybridTrackCuts(){
179 AliESDtrackCuts* hybridTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
180 hybridTrackCuts->SetName("Global Hybrid tracks, loose DCA");
181 hybridTrackCuts->SetMaxDCAToVertexXY(2.4);
182 hybridTrackCuts->SetMaxDCAToVertexZ(3.2);
183 hybridTrackCuts->SetDCAToVertex2D(kTRUE);
184 hybridTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
185 hybridTrackCuts->SetMaxFractionSharedTPCClusters(0.4);
186 return hybridTrackCuts;