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 void CreateJetPtBinning(EMCalTriggerPtAnalysis::AliEMCalTriggerBinningComponent *binning);
18 AliESDtrackCuts *CreateDefaultTrackCuts();
19 AliESDtrackCuts *CreateHybridTrackCuts();
20 AliESDtrackCuts *TrackCutsFactory(const char *trackCutsName);
22 AliAnalysisTask* AddTaskPtEMCalTriggerV1(
25 const char *period ="LHC13d",
26 const char *ntrackContainer = "",
27 const char *nclusterContainer = "",
28 const char *njetcontainerData = "",
29 const char *njetcontainerMC = "",
30 const char *ntriggerContainer = "",
31 double jetradius = 0.5,
32 const char *ntrackcuts = "standard"
35 //AliLog::SetClassDebugLevel("EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTrigger", 2);
36 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
39 ::Error("AddTaskPtEMCalTrigger", "No analysis manager to connect to.");
43 if (!mgr->GetInputEventHandler()) {
44 ::Error("AddTaskPtEMCalTrigger", "This task requires an input event handler");
48 bool isSwapEta = TString(period).CompareTo("LHC13f") ? kFALSE : kTRUE;
49 EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1 *pttriggertask = new EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTriggerV1("ptemcaltriggertask");
50 //pttriggertask->SelectCollisionCandidates(AliVEvent::kINT7 | AliVEvent::kEMC7); // Select both INT7 or EMC7 triggered events
51 pttriggertask->SelectCollisionCandidates(AliVEvent::kAny);
52 if(isMC) pttriggertask->SetSwapThresholds();
54 mgr->AddTask(pttriggertask);
56 pttriggertask->SetIsPythia(kTRUE);
60 if(strlen(ntriggerContainer)){
61 pttriggertask->SetCaloTriggerPatchInfoName(ntriggerContainer);
62 EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *noselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("noselect");
63 noselect->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerPatchAnalysisComponent("patchanalysis"));
64 pttriggertask->AddAnalysisGroup(noselect);
66 pttriggertask->SetCaloTriggerPatchInfoName("");
69 double jetpt[4] = {40., 60., 80., 100.};
70 EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *defaultselect = new EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup("defaultselect");
71 defaultselect->SetEventSelection(new EMCalTriggerPtAnalysis::AliEMCalTriggerEventSelection());
72 EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts *kineCuts = new EMCalTriggerPtAnalysis::AliEMCalTriggerKineCuts();
73 kineCuts->SetPtRange(2., 100.);
74 defaultselect->SetKineCuts(kineCuts);
75 AddEventCounterComponent(defaultselect, isMC);
77 AddMCParticleComponent(defaultselect);
78 AddMCJetComponent(defaultselect, 20.);
80 for(int ijpt = 0; ijpt < 4; ijpt++)
81 AddMCJetComponent(defaultselect, jetpt[ijpt]);
84 AddClusterComponent(defaultselect, isMC);
85 AddTrackComponent(defaultselect, TrackCutsFactory(ntrackcuts), isMC, isSwapEta);
86 AddRecJetComponent(defaultselect, TrackCutsFactory(ntrackcuts), 20., isMC, isSwapEta);
88 * for(int ijpt = 0; ijpt < 4; ijpt++)
89 AddRecJetComponent(defaultselect, TrackCutsFactory(ntrackcuts), jetpt[ijpt], isMC, isSwapEta);
92 pttriggertask->AddAnalysisGroup(defaultselect);
95 Bool_t isAOD = mgr->GetInputEventHandler()->IsA() == AliAODInputHandler::Class();
96 AliParticleContainer *trackContainer = pttriggertask->AddParticleContainer(ntrackContainer);
97 //trackContainer->SetClassName("AliVTrack");
98 AliClusterContainer *clusterContainer = pttriggertask->AddClusterContainer(nclusterContainer);
99 AliParticleContainer *mcpartcont = isMC ? pttriggertask->AddParticleContainer("MCParticlesSelected") : NULL;
102 // Handle Jet Containers
103 if(strlen(njetcontainerData)){
104 AliJetContainer *jetcontainerData = pttriggertask->AddJetContainer(njetcontainerData, "EMCAL", jetradius);
105 pttriggertask->SetDataJetContainerName("PtTriggerTaskJetsData");
106 jetcontainerData->ConnectParticleContainer(trackContainer);
107 jetcontainerData->SetName("PtTriggerTaskJetsData");
108 jetcontainerData->SetJetPtCut(20.);
109 printf("jet container added for Data\n");
111 if(isMC && strlen(njetcontainerMC)){
112 AliJetContainer *jetcontainerMC = pttriggertask->AddJetContainer(njetcontainerMC, "EMCAL", jetradius);
113 pttriggertask->SetMCJetContainerName("PtTriggerTaskJetsMC");
114 jetcontainerMC->ConnectParticleContainer(mcpartcont);
115 jetcontainerMC->SetName("PtTriggerTaskJetsMC");
116 jetcontainerMC->SetJetPtCut(20.);
117 printf("Jet container added for MC");
120 TString containerName = mgr->GetCommonFileName();
121 containerName += ":PtEMCalTriggerTask" + TString(ntrackcuts);
122 printf("container name: %s\n", containerName.Data());
124 AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
125 AliAnalysisDataContainer *coutput = mgr->CreateContainer("results", TList::Class(), AliAnalysisManager::kOutputContainer, containerName.Data());
127 //Connect input/output
128 mgr->ConnectInput(pttriggertask, 0, cinput);
129 mgr->ConnectOutput(pttriggertask, 1, coutput);
131 return pttriggertask;
134 void AddClusterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, bool isMC){
135 EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent *clusteranalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerClusterAnalysisComponent("clusterAnalysis");
136 clusteranalysis->SetEnergyRange(2., 100.);
137 if(isMC) clusteranalysis->SetUsePatches();
138 group->AddAnalysisComponent(clusteranalysis);
141 void AddTrackComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts * trackcuts, bool isMC, bool isSwapEta){
142 EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent *trackanalysis = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecTrackAnalysisComponent("trackAnalysisStandard");
143 group->AddAnalysisComponent(trackanalysis);
144 // Create charged hadrons pPb standard track cuts
145 trackanalysis->SetTrackSelection(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
148 trackanalysis->SetRequestMCtrueTracks();
149 trackanalysis->SetUsePatches();
151 if(isSwapEta) trackanalysis->SetSwapEta();
154 void AddEventCounterComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, Bool_t isMC){
155 EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent * evcount = new EMCalTriggerPtAnalysis::AliEMCalTriggerEventCounterAnalysisComponent("eventCounter");
156 evcount->SetUsePatches(isMC);
157 group->AddAnalysisComponent(evcount);
160 void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group){
161 group->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerMCParticleAnalysisComponent("partana"));
164 void AddMCJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, double minJetPt){
165 EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerMCJetAnalysisComponent(Form("MCJetAna%f", minJetPt));
166 jetana->SetMinimumJetPt(minJetPt);
167 jetana->SetUsePatches();
168 group->AddAnalysisComponent(jetana);
171 void AddRecJetComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group, AliESDtrackCuts *trackcuts, double minJetPt, bool isMC, bool isSwapEta){
172 EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent *jetana = new EMCalTriggerPtAnalysis::AliEMCalTriggerRecJetAnalysisComponent(Form("RecJetAna%f", minJetPt));
173 jetana->SetMinimumJetPt(minJetPt);
174 jetana->SetUsePatches();
175 jetana->SetSingleTrackCuts(new EMCalTriggerPtAnalysis::AliEMCalPtTaskTrackSelectionESD(trackcuts));
176 group->AddAnalysisComponent(jetana);
179 void CreateJetPtBinning(EMCalTriggerPtAnalysis::AliEMCalTriggerBinningComponent *binning){
180 // Linear binning in steps of 10 GeV/c up to 200 GeV/c
181 TArrayD binlimits(21);
182 for(int i = 0; i < 21; i++) binlimits[i] = 10.*i;
183 binning->SetBinning("jetpt", binlimits);
186 AliESDtrackCuts *CreateDefaultTrackCuts(){
187 AliESDtrackCuts *standardTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(true, 1);
188 standardTrackCuts->SetName("Standard Track cuts");
189 standardTrackCuts->SetMinNCrossedRowsTPC(120);
190 standardTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
191 return standardTrackCuts;
194 AliESDtrackCuts *CreateHybridTrackCuts(){
195 AliESDtrackCuts* hybridTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
196 hybridTrackCuts->SetName("Global Hybrid tracks, loose DCA");
197 hybridTrackCuts->SetMaxDCAToVertexXY(2.4);
198 hybridTrackCuts->SetMaxDCAToVertexZ(3.2);
199 hybridTrackCuts->SetDCAToVertex2D(kTRUE);
200 hybridTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
201 hybridTrackCuts->SetMaxFractionSharedTPCClusters(0.4);
202 return hybridTrackCuts;
205 AliESDtrackCuts* TrackCutsFactory(const char* trackCutsName) {
206 if(!strcmp(trackCutsName, "standard")) return CreateDefaultTrackCuts();
207 else if(!strcmp(trackCutsName, "hybrid")) return CreateHybridTrackCuts();