]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/macros/AddTaskPtEMCalTriggerV1.C
fix const subtr tracks. Note: array has no gaps
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / macros / AddTaskPtEMCalTriggerV1.C
CommitLineData
ff5093a9 1#if !defined (__CINT__) || defined (__MAKECINT__)
2#include "AliAnalysisManager.h"
3#include "AliAnalysisTaskPtEMCalTriggerV1.h"
4#include "AliESDtrackCuts.h"
5#include "AliJetContainer.h"
6#include <TList.h>
7#include <TString.h>
8#include <cstring>
9#endif
10
11void AddClusterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC);
12void AddTrackComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, bool isMC, bool isSwapEta);
13void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group);
14void AddEventCounterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC);
15void AddMCJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, double minJetPt);
16void AddRecJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, double minJetPt, bool isMC, bool isSwapEta);
29a0dd67 17void CreateJetPtBinning(EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1 *task);
ff5093a9 18AliESDtrackCuts *CreateDefaultTrackCuts();
19AliESDtrackCuts *CreateHybridTrackCuts();
06294287 20AliESDtrackCuts *TrackCutsFactory(const char *trackCutsName);
ff5093a9 21
22AliAnalysisTask* AddTaskPtEMCalTriggerV1(
23 bool isMC,
24 bool usePythiaHard,
25 const char *period ="LHC13d",
26 const char *ntrackContainer = "",
27 const char *nclusterContainer = "",
28 const char *njetcontainerData = "",
29 const char *njetcontainerMC = "",
9ecb11dd 30 const char *ntriggerContainer = "",
06294287 31 double jetradius = 0.5,
32 const char *ntrackcuts = "standard"
ff5093a9 33)
34{
35 //AliLog::SetClassDebugLevel("EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTrigger", 2);
36 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
37
38 if (!mgr) {
39 ::Error("AddTaskPtEMCalTrigger", "No analysis manager to connect to.");
40 return NULL;
41 }
42
43 if (!mgr->GetInputEventHandler()) {
44 ::Error("AddTaskPtEMCalTrigger", "This task requires an input event handler");
45 return NULL;
46 }
47
48 bool isSwapEta = TString(period).CompareTo("LHC13f") ? kFALSE : kTRUE;
3fd421b9 49 EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1 *pttriggertask = new EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1(Form("ptemcaltriggertask%s", ntrackcuts));
ff5093a9 50 //pttriggertask->SelectCollisionCandidates(AliVEvent::kINT7 | AliVEvent::kEMC7); // Select both INT7 or EMC7 triggered events
51 pttriggertask->SelectCollisionCandidates(AliVEvent::kAny);
2e09b873 52 if(isMC) pttriggertask->SetSwapThresholds();
29a0dd67 53 CreateJetPtBinning(pttriggertask);
ff5093a9 54
55 mgr->AddTask(pttriggertask);
56 if(usePythiaHard){
57 pttriggertask->SetIsPythia(kTRUE);
58 }
59
60 // Add components
9ecb11dd 61 if(strlen(ntriggerContainer)){
62 pttriggertask->SetCaloTriggerPatchInfoName(ntriggerContainer);
63 EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *noselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("noselect");
64 noselect->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerPatchAnalysisComponent("patchanalysis"));
65 pttriggertask->AddAnalysisGroup(noselect);
66 } else {
67 pttriggertask->SetCaloTriggerPatchInfoName("");
68 }
ff5093a9 69
0b065993 70 double jetpt[4] = {40., 60., 80., 100.};
ff5093a9 71 EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *defaultselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("defaultselect");
0b065993 72 defaultselect->SetEventSelection(new EMCalTriggerPtAnalysis::AliEMCalTriggerEventSelection());
73 EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts *kineCuts = new EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts();
ff5093a9 74 kineCuts->SetPtRange(2., 100.);
75 defaultselect->SetKineCuts(kineCuts);
76 AddEventCounterComponent(defaultselect, isMC);
77 if(isMC){
78 AddMCParticleComponent(defaultselect);
06294287 79 AddMCJetComponent(defaultselect, 20.);
80 /*
ff5093a9 81 for(int ijpt = 0; ijpt < 4; ijpt++)
82 AddMCJetComponent(defaultselect, jetpt[ijpt]);
06294287 83 */
ff5093a9 84 }
85 AddClusterComponent(defaultselect, isMC);
06294287 86 AddTrackComponent(defaultselect, TrackCutsFactory(ntrackcuts), isMC, isSwapEta);
87 AddRecJetComponent(defaultselect, TrackCutsFactory(ntrackcuts), 20., isMC, isSwapEta);
88 /*
89 * for(int ijpt = 0; ijpt < 4; ijpt++)
90 AddRecJetComponent(defaultselect, TrackCutsFactory(ntrackcuts), jetpt[ijpt], isMC, isSwapEta);
91 */
ff5093a9 92
ff5093a9 93 pttriggertask->AddAnalysisGroup(defaultselect);
94
95 // Add containers
96 Bool_t isAOD = mgr->GetInputEventHandler()->IsA() == AliAODInputHandler::Class();
97 AliParticleContainer *trackContainer = pttriggertask->AddParticleContainer(ntrackContainer);
98 //trackContainer->SetClassName("AliVTrack");
99 AliClusterContainer *clusterContainer = pttriggertask->AddClusterContainer(nclusterContainer);
100 AliParticleContainer *mcpartcont = isMC ? pttriggertask->AddParticleContainer("MCParticlesSelected") : NULL;
101
102
103 // Handle Jet Containers
104 if(strlen(njetcontainerData)){
65a56b28 105 AliJetContainer *jetcontainerData = pttriggertask->AddJetContainer(njetcontainerData, "EMCAL", jetradius);
ff5093a9 106 pttriggertask->SetDataJetContainerName("PtTriggerTaskJetsData");
107 jetcontainerData->ConnectParticleContainer(trackContainer);
108 jetcontainerData->SetName("PtTriggerTaskJetsData");
109 jetcontainerData->SetJetPtCut(20.);
5f95099b 110 printf("jet container added for Data\n");
ff5093a9 111 }
112 if(isMC && strlen(njetcontainerMC)){
65a56b28 113 AliJetContainer *jetcontainerMC = pttriggertask->AddJetContainer(njetcontainerMC, "EMCAL", jetradius);
5f95099b 114 pttriggertask->SetMCJetContainerName("PtTriggerTaskJetsMC");
ff5093a9 115 jetcontainerMC->ConnectParticleContainer(mcpartcont);
116 jetcontainerMC->SetName("PtTriggerTaskJetsMC");
117 jetcontainerMC->SetJetPtCut(20.);
5f95099b 118 printf("Jet container added for MC");
ff5093a9 119 }
120
121 TString containerName = mgr->GetCommonFileName();
3d2a78f0 122 containerName += ":PtEMCalTriggerTask" + TString(ntrackcuts);
ff5093a9 123 printf("container name: %s\n", containerName.Data());
124
125 AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
3fd421b9 126 AliAnalysisDataContainer *coutput = mgr->CreateContainer(Form("TriggerTracksResults%s", ntrackcuts), TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
ff5093a9 127
128 //Connect input/output
129 mgr->ConnectInput(pttriggertask, 0, cinput);
130 mgr->ConnectOutput(pttriggertask, 1, coutput);
131
132 return pttriggertask;
133}
134
135void AddClusterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC){
0b065993 136 EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent *clusteranalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent("clusterAnalysis");
137 clusteranalysis->SetEnergyRange(2., 100.);
ff5093a9 138 if(isMC) clusteranalysis->SetUsePatches();
139 group->AddAnalysisComponent(clusteranalysis);
140}
141
142void AddTrackComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts * trackcuts, bool isMC, bool isSwapEta){
0b065993 143 EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent *trackanalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent("trackAnalysisStandard");
ff5093a9 144 group->AddAnalysisComponent(trackanalysis);
145 // Create charged hadrons pPb standard track cuts
146 trackanalysis->SetTrackSelection(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
147
148 if(isMC){
149 trackanalysis->SetRequestMCtrueTracks();
150 trackanalysis->SetUsePatches();
151 }
152 if(isSwapEta) trackanalysis->SetSwapEta();
153}
154
155void AddEventCounterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, Bool_t isMC){
0b065993 156 EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent * evcount = new EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent("eventCounter");
ff5093a9 157 evcount->SetUsePatches(isMC);
158 group->AddAnalysisComponent(evcount);
159}
160
161void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group){
162 group->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerMCParticleAnalysisComponent("partana"));
163}
164
165void AddMCJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, double minJetPt){
166 EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent(Form("MCJetAna%f", minJetPt));
167 jetana->SetMinimumJetPt(minJetPt);
168 jetana->SetUsePatches();
169 group->AddAnalysisComponent(jetana);
170}
171
172void AddRecJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, double minJetPt, bool isMC, bool isSwapEta){
173 EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent(Form("RecJetAna%f", minJetPt));
174 jetana->SetMinimumJetPt(minJetPt);
175 jetana->SetUsePatches();
176 jetana->SetSingleTrackCuts(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
177 group->AddAnalysisComponent(jetana);
178}
179
29a0dd67 180void CreateJetPtBinning(EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1 *task){
06294287 181 // Linear binning in steps of 10 GeV/c up to 200 GeV/c
182 TArrayD binlimits(21);
183 for(int i = 0; i < 21; i++) binlimits[i] = 10.*i;
29a0dd67 184 task->SetBinning("jetpt", binlimits);
06294287 185}
186
ff5093a9 187AliESDtrackCuts *CreateDefaultTrackCuts(){
188 AliESDtrackCuts *standardTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(true, 1);
189 standardTrackCuts->SetName("Standard Track cuts");
190 standardTrackCuts->SetMinNCrossedRowsTPC(120);
191 standardTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
192 return standardTrackCuts;
193}
194
195AliESDtrackCuts *CreateHybridTrackCuts(){
196 AliESDtrackCuts* hybridTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
197 hybridTrackCuts->SetName("Global Hybrid tracks, loose DCA");
198 hybridTrackCuts->SetMaxDCAToVertexXY(2.4);
199 hybridTrackCuts->SetMaxDCAToVertexZ(3.2);
200 hybridTrackCuts->SetDCAToVertex2D(kTRUE);
201 hybridTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
202 hybridTrackCuts->SetMaxFractionSharedTPCClusters(0.4);
203 return hybridTrackCuts;
204}
06294287 205
206AliESDtrackCuts* TrackCutsFactory(const char* trackCutsName) {
207 if(!strcmp(trackCutsName, "standard")) return CreateDefaultTrackCuts();
208 else if(!strcmp(trackCutsName, "hybrid")) return CreateHybridTrackCuts();
209 return NULL;
210}