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