]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/EMCALJetTasks/macros/AddTaskJetMultiPreparation.C
improved efficiency by caching leading jet per event, changed cuts on leading jet...
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / macros / AddTaskJetMultiPreparation.C
CommitLineData
6bda5230 1AliAnalysisTaskSE* AddTaskJetMultiPreparation(
6bda5230
CY
2 const char* periodstr = "LHC13b",
3 TString usedTracks = "PicoTracks",
4 const char* usedMCParticles = "MCParticlesSelected",
5 const char* usedClusters = "CaloClusters",
6 TString outClusName = "CaloClustersCorr",
7 const Double_t hadCorr = 2.0,
8 const Double_t Eexcl = 0.00,
9 const Double_t phiMatch = 0.03,
10 const Double_t etaMatch = 0.015,
11 const Double_t minPtEt = 0.15,
12 const UInt_t pSel = AliVEvent::kAny,
13 const Bool_t trackclus = kTRUE,
14 const Bool_t doHistos = kFALSE,
15 const Bool_t makePicoTracks = kTRUE,
825d120f 16 const Bool_t makeTrigger = kFALSE,
6bda5230
CY
17 const Bool_t isEmcalTrain = kFALSE,
18 const Double_t trackEff = 1.0,
19 const Bool_t doAODTrackProp = kFALSE
20)
21{
22 // Add task macros for all jet related helper tasks.
23 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
24 if (!mgr)
25 {
26 Error("AddTaskJetPreparation","No analysis manager found.");
27 return 0;
28 }
29
825d120f 30 AliVEventHandler *evhand = mgr->GetInputEventHandler();
31 if (!evhand)
32 {
33 Error("AddTaskJetPreparation", "This task requires an input event handler");
34 return NULL;
35 }
36
6bda5230
CY
37 // Convert hadCorr & trackEff to TStrings to be used in naming conventions
38 TString sTrackEff = "";
39 TString sHadCorr = "";
40 Int_t tEff = Int_t(trackEff*100);
41 Int_t hC = Int_t(hadCorr*100);
42
43 if (trackEff<0.1)
44 {
45 sTrackEff = Form("00%d",tEff);
46 }
47 else if (trackEff<1.0)
48 {
49 sTrackEff = Form("0%d",tEff);
50 }
51 else
52 {
53 sTrackEff = Form("%d",tEff);
54 }
55
56 if (hadCorr<0.1)
57 {
58 sHadCorr = Form("00%d",hC);
59 }
60 else if (hadCorr<1.0)
61 {
62 sHadCorr = Form("0%d",hC);
63 }
64 else
65 {
66 sHadCorr = Form("%d",hC);
67 }
68
69 // Establish names for output collections and tasks
70 TString sPicoTracks = usedTracks + "_" + sTrackEff;
825d120f 71 TString sEmcalTriggers = "EmcalTriggers_" + sTrackEff;
6bda5230
CY
72 TString sEmcalTracks = "EmcalTracks_" + sTrackEff;
73 TString sEmcalClusters = "EmcalClusters_" + sTrackEff;
6bda5230
CY
74 TString sCaloClustersCorr = outClusName + "_" + sTrackEff + "_" + sHadCorr;
75
76 TString sESDTrackFilterName = "AliEmcalEsdTrackFilterTask";
77 TString sAODTrackPropagatorName = "AliEmcalTrackPropagatorTaskAOD";
78 TString sEmcalPicoTrackMakerName = "EmcalPicoTrackMaker_" + sTrackEff;
79 TString sEmcalParticleMakerName = "EmcalParticleMaker_" + sTrackEff;
80 TString sEmcalTriggerMakerName = "EmcalTriggerMaker_" + sTrackEff;
81 TString sEmcalTriggerMakerSetupOutName = "EmcalTriggerMakerSetupOut_" + sTrackEff;
82 TString sMCTrackSelectorName = "AliEmcalMCTrackSelector";
83
84 // Set trackcuts according to period. Every period used should be definied here
85 TString period(periodstr);
86 TString clusterColName(usedClusters);
87 TString particleColName(usedMCParticles);
825d120f 88 TString dType("ESD");
89
90 if (!evhand->InheritsFrom("AliESDInputHandler"))
91 {
92 dType = "AOD";
93 }
6bda5230
CY
94
95 if ((dType == "AOD") && (clusterColName == "CaloClusters"))
96 {
97 clusterColName = "caloClusters";
98 }
99 if ((dType == "ESD") && (clusterColName == "caloClusters"))
100 {
101 clusterColName = "CaloClusters";
102 }
103
825d120f 104 if (0)
105 {
106 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTrackPropagator.C");
107 AliEmcalTrackPropagatorTask *proptask = AddTaskEmcalTrackPropagator();
108 proptask->SelectCollisionCandidates(pSel);
109 }
110
6bda5230
CY
111 if (makePicoTracks && (dType == "ESD" || dType == "AOD") )
112 {
825d120f 113 TString inputTracks = "AODFilterTracks";
6bda5230
CY
114 const Double_t edist = 440;
115 if (dType == "ESD")
116 {
825d120f 117 inputTracks = "ESDFilterTracks";
6bda5230
CY
118 TString trackCuts(Form("Hybrid_%s",period.Data()));
119
120 // Hybrid tracks maker for ESD
121 AliEmcalEsdTrackFilterTask *esdFilter = mgr->GetTask(sESDTrackFilterName.Data());
122 if (!esdFilter)
123 {
124 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalEsdTrackFilter.C");
125 AliEmcalEsdTrackFilterTask *esdFilter = AddTaskEmcalEsdTrackFilter(inputTracks.Data(),trackCuts.Data());
126 esdFilter->SetDoPropagation(kTRUE);
127 esdFilter->SetDist(edist);
128 esdFilter->SelectCollisionCandidates(pSel);
129 }
130 }
131 else if (dType == "AOD")
132 {
133 // Track propagator to extend track to the EMCal surface
134 AliEmcalAodTrackFilterTask *aodFilter = mgr->GetTask(sAODTrackPropagatorName.Data());
135 if (!aodFilter)
136 {
137 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalAodTrackFilter.C");
138 AliEmcalAodTrackFilterTask *aodFilter = AddTaskEmcalAodTrackFilter(inputTracks.Data(),"tracks",period.Data());
139 aodFilter->SetDist(edist);
140 aodFilter->SelectCollisionCandidates(pSel);
141 if (doAODTrackProp == kTRUE)
142 {
143 aodFilter->SetDoPropagation(kTRUE);
144 }
145 }
146 }
147
148 // Produce PicoTracks
149 AliEmcalPicoTrackMaker *pTrackTask = mgr->GetTask(sEmcalPicoTrackMakerName.Data());
150 if (!pTrackTask)
151 {
152 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
153 pTrackTask = AddTaskEmcalPicoTrackMaker(sPicoTracks.Data(), inputTracks.Data(),0,1000,-10,10,-10,10,trackEff,sEmcalPicoTrackMakerName.Data());
154 pTrackTask->SelectCollisionCandidates(pSel);
155 }
156 }
157
825d120f 158 // Trigger maker
159 if (makeTrigger)
160 {
161 AliEmcalTriggerMaker *emcalTriggers = mgr->GetTask(sEmcalTriggerMakerName.Data());
162 if (!emcalTriggers)
163 {
164 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTriggerMaker.C");
165 emcalTriggers = AddTaskEmcalTriggerMaker(sEmcalTriggers.Data(),sEmcalTriggerMakerSetupOutName.Data(),0,0,sEmcalTriggerMakerName.Data(),0,0,0,0,0,0);
166 emcalTriggers->SelectCollisionCandidates(pSel);
167 }
168 }
169
170 // Produce particles used for hadronic correction, then match!
6bda5230
CY
171 AliEmcalParticleMaker *emcalParts = mgr->GetTask(sEmcalParticleMakerName.Data());
172 if (!emcalParts)
173 {
174 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalParticleMaker.C");
175 emcalParts = AddTaskEmcalParticleMaker(sPicoTracks.Data(),clusterColName.Data(),sEmcalTracks.Data(),sEmcalClusters.Data(),sEmcalParticleMakerName.Data());
176 emcalParts->SelectCollisionCandidates(pSel);
177
6bda5230
CY
178 // Relate tracks and clusters
179 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalClusTrackMatcher.C");
180 AliEmcalClusTrackMatcherTask *emcalClus = AddTaskEmcalClusTrackMatcher(sEmcalTracks.Data(),sEmcalClusters.Data(),0.1,doHistos);
825d120f 181 emcalClus->SetModifyObjs(kFALSE);
6bda5230
CY
182 emcalClus->SelectCollisionCandidates(pSel);
183 if (isEmcalTrain)
184 {
185 RequestMemory(emcalClus,100*1024);
186 }
187 }
188
189 // Make Corrected CaloClusters
190 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskHadCorr.C");
191 AliHadCorrTask *hCorr = AddTaskHadCorr(sEmcalTracks.Data(),sEmcalClusters.Data(),sCaloClustersCorr.Data(),hadCorr,minPtEt,phiMatch,etaMatch,Eexcl,trackclus,doHistos);
192 hCorr->SelectCollisionCandidates(pSel);
193 if (isEmcalTrain)
194 {
195 if (doHistos)
196 {
197 RequestMemory(hCorr,500*1024);
198 }
199 }
200
201 // Produce MC particles
202 if(particleColName != "")
203 {
204 AliEmcalMCTrackSelector *mcPartTask = mgr->GetTask(sMCTrackSelectorName.Data());
205 if (!mcPartTask)
206 {
207 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskMCTrackSelector.C");
208 AliEmcalMCTrackSelector *mcPartTask = AddTaskMCTrackSelector(particleColName.Data(), kFALSE, kFALSE);
209 mcPartTask->SelectCollisionCandidates(pSel);
210 }
211 }
212
213 // Return one task that represents the jet preparation on LEGO trains
214 return emcalParts;
215}