]>
Commit | Line | Data |
---|---|---|
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 | ||
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); | |
29a0dd67 | 17 | void CreateJetPtBinning(EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1 *task); |
ff5093a9 | 18 | AliESDtrackCuts *CreateDefaultTrackCuts(); |
19 | AliESDtrackCuts *CreateHybridTrackCuts(); | |
06294287 | 20 | AliESDtrackCuts *TrackCutsFactory(const char *trackCutsName); |
ff5093a9 | 21 | |
22 | AliAnalysisTask* 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 | ||
135 | void 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 | ||
142 | void 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 | ||
155 | void 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 | ||
161 | void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group){ | |
162 | group->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerMCParticleAnalysisComponent("partana")); | |
163 | } | |
164 | ||
165 | void 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 | ||
172 | void 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 | 180 | void 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 | 187 | AliESDtrackCuts *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 | ||
195 | AliESDtrackCuts *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 | |
206 | AliESDtrackCuts* TrackCutsFactory(const char* trackCutsName) { | |
207 | if(!strcmp(trackCutsName, "standard")) return CreateDefaultTrackCuts(); | |
208 | else if(!strcmp(trackCutsName, "hybrid")) return CreateHybridTrackCuts(); | |
209 | return NULL; | |
210 | } |