]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/macros/AddTaskPtEMCalTriggerV1.C
Fix for periods which do not contain trigger information:
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / macros / AddTaskPtEMCalTriggerV1.C
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);
17 AliESDtrackCuts *CreateDefaultTrackCuts();
18 AliESDtrackCuts *CreateHybridTrackCuts();
19
20 AliAnalysisTask* AddTaskPtEMCalTriggerV1(
21     bool isMC,
22     bool usePythiaHard,
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
30 )
31 {
32   //AliLog::SetClassDebugLevel("EMCalTriggerPtAnalysis::AliAnalysisTaskPtEMCalTrigger", 2);
33   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
34
35   if (!mgr) {
36     ::Error("AddTaskPtEMCalTrigger", "No analysis manager to connect to.");
37     return NULL;
38   }
39
40   if (!mgr->GetInputEventHandler()) {
41     ::Error("AddTaskPtEMCalTrigger", "This task requires an input event handler");
42     return NULL;
43   }
44
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();
50
51   mgr->AddTask(pttriggertask);
52   if(usePythiaHard){
53     pttriggertask->SetIsPythia(kTRUE);
54   }
55
56   // Add components
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);
62   } else {
63     pttriggertask->SetCaloTriggerPatchInfoName("");
64   }
65
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);
73   if(isMC){
74     AddMCParticleComponent(defaultselect);
75     for(int ijpt = 0; ijpt < 4; ijpt++)
76       AddMCJetComponent(defaultselect, jetpt[ijpt]);
77   }
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);
82
83   pttriggertask->AddAnalysisGroup(defaultselect);
84
85   // Add containers
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;
91
92
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");
101   }
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");
109   }
110
111   TString containerName = mgr->GetCommonFileName();
112   containerName += ":PtEMCalTriggerTask";
113   printf("container name: %s\n", containerName.Data());
114
115   AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
116   AliAnalysisDataContainer *coutput = mgr->CreateContainer("results", TList::Class(),    AliAnalysisManager::kOutputContainer, containerName.Data());
117
118   //Connect input/output
119   mgr->ConnectInput(pttriggertask, 0, cinput);
120   mgr->ConnectOutput(pttriggertask, 1, coutput);
121
122   return pttriggertask;
123 }
124
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);
130 }
131
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));
137
138   if(isMC){
139     trackanalysis->SetRequestMCtrueTracks();
140     trackanalysis->SetUsePatches();
141   }
142   if(isSwapEta) trackanalysis->SetSwapEta();
143 }
144
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);
149 }
150
151 void AddMCParticleComponent(EMCalTriggerPtAnalysis::AliEMCalTriggerTaskGroup *group){
152   group->AddAnalysisComponent(new EMCalTriggerPtAnalysis::AliEMCalTriggerMCParticleAnalysisComponent("partana"));
153 }
154
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);
160 }
161
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);
168 }
169
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;
176 }
177
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;
187 }