]>
Commit | Line | Data |
---|---|---|
ebad39a9 | 1 | |
2a7c86bc | 2 | |
68216590 | 3 | Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdFilter); |
dd048caa | 4 | Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdFilter); |
68216590 | 5 | Bool_t enableTPCOnlyAODTracks = kTRUE; |
6 | ||
7 | ||
5c4489e2 | 8 | AliAnalysisTaskESDfilter *AddTaskESDFilterPWGJETrain(Bool_t useKineFilter=kTRUE, |
68216590 | 9 | Bool_t writeMuonAOD=kFALSE, |
10 | Bool_t writeDimuonAOD=kFALSE, | |
11 | Bool_t usePhysicsSelection=kFALSE, | |
12 | Bool_t useCentralityTask=kFALSE) | |
ebad39a9 | 13 | { |
14 | // Creates a filter task and adds it to the analysis manager. | |
15 | ||
16 | // Get the pointer to the existing analysis manager via the static access method. | |
17 | //============================================================================== | |
18 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); | |
19 | if (!mgr) { | |
20 | ::Error("AddTaskESDFilter", "No analysis manager to connect to."); | |
21 | return NULL; | |
22 | } | |
23 | ||
24 | // This task requires an ESD input handler and an AOD output handler. | |
25 | // Check this using the analysis manager. | |
26 | //=============================================================================== | |
27 | TString type = mgr->GetInputEventHandler()->GetDataType(); | |
28 | if (!type.Contains("ESD")) { | |
29 | ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an ESD input handler."); | |
30 | return NULL; | |
31 | } | |
32 | // Check if AOD output handler exist. | |
33 | AliAODHandler *aod_h = (AliAODHandler*)mgr->GetOutputEventHandler(); | |
34 | if (!aod_h) { | |
35 | ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an AOD output handler."); | |
36 | return NULL; | |
37 | } | |
38 | // Check if MC handler is connected in case kine filter requested | |
39 | AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler(); | |
40 | if (!mcH && useKineFilter) { | |
41 | ::Error("AddTaskESDFilter", "No MC handler connected while kine filtering requested"); | |
42 | return NULL; | |
43 | } | |
44 | ||
45 | // Create the task, add it to the manager and configure it. | |
46 | //=========================================================================== | |
47 | // Barrel tracks filter | |
48 | AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter"); | |
3095177c | 49 | |
50 | // Make the AOD a little bit lighter and filtering faster | |
51 | ||
52 | esdfilter->DisableCascades(); | |
53 | // esdfilter->DisableV0s(); | |
54 | esdfilter->DisableKinks(); | |
55 | // esdfilter->DisableTracks(); | |
56 | esdfilter->DisablePmdClusters(); | |
57 | // esdfilter->DisableCaloClusters(); | |
58 | // esdfilter->DisableCells(); | |
59 | esdfilter->DisableTracklets(); | |
30f922ad | 60 | esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); |
61 | ||
ebad39a9 | 62 | mgr->AddTask(esdfilter); |
68216590 | 63 | |
ebad39a9 | 64 | if(usePhysicsSelection){ |
65 | esdfilter->SelectCollisionCandidates(AliVEvent::kAny); | |
ebad39a9 | 66 | } |
67 | ||
68 | // Filtering of MC particles (decays conversions etc) | |
69 | // this task has to go AFTER all other filter tasks | |
70 | // since it fills the AODMC array with all | |
71 | // selected MC Particles, only this way we have the | |
72 | // AODMCparticle information available for following tasks | |
73 | AliAnalysisTaskMCParticleFilter *kinefilter = 0; | |
74 | if (useKineFilter) { | |
75 | kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter"); | |
48602d36 | 76 | if(usePhysicsSelection)kinefilter->SelectCollisionCandidates(AliVEvent::kAny); |
ebad39a9 | 77 | mgr->AddTask(kinefilter); |
78 | } | |
79 | ||
68216590 | 80 | // Track cuts |
ebad39a9 | 81 | // Filter with cuts on V0s |
82 | AliESDv0Cuts* esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts"); | |
83 | esdV0Cuts->SetMinRadius(0.2); | |
84 | esdV0Cuts->SetMaxRadius(200); | |
85 | esdV0Cuts->SetMinDcaPosToVertex(0.05); | |
86 | esdV0Cuts->SetMinDcaNegToVertex(0.05); | |
87 | esdV0Cuts->SetMaxDcaV0Daughters(1.5); | |
88 | esdV0Cuts->SetMinCosinePointingAngle(0.99); | |
89 | AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter"); | |
070f06d2 | 90 | v0Filter->AddCuts(esdV0Cuts); |
ebad39a9 | 91 | |
68216590 | 92 | |
93 | Bool_t bSuccess = false; | |
94 | TString runPeriod = AliAnalysisManager::GetGlobalStr("kJetRunPeriod",bSuccess); | |
95 | ||
dd048caa | 96 | if(bSuccess&&runPeriod.Contains("LHC11h")){ |
97 | AddTrackCutsLHC11h(esdfilter); | |
68216590 | 98 | } |
99 | else{ | |
dd048caa | 100 | Printf("%s%d: Creating Default track cuts 10h",(char*)__FILE__,__LINE__); |
101 | AddTrackCutsLHC10h(esdfilter); | |
68216590 | 102 | } |
103 | ||
070f06d2 | 104 | esdfilter->SetV0Filter(v0Filter); |
ebad39a9 | 105 | |
106 | // Enable writing of Muon AODs | |
48602d36 | 107 | // esdmuonfilter->SetWriteMuonAOD(writeMuonAOD); |
ebad39a9 | 108 | |
109 | // Enable writing of Dimuon AODs | |
48602d36 | 110 | // esdmuonfilter->SetWriteDimuonAOD(writeDimuonAOD); |
ebad39a9 | 111 | |
112 | // Create ONLY the output containers for the data produced by the task. | |
113 | // Get and connect other common input/output containers via the manager as below | |
114 | //============================================================================== | |
115 | ||
116 | mgr->ConnectInput (esdfilter, 0, mgr->GetCommonInputContainer()); | |
117 | mgr->ConnectOutput (esdfilter, 0, mgr->GetCommonOutputContainer()); | |
118 | ||
119 | ||
120 | // mgr->ConnectInput (esdmuonfilter, 0, mgr->GetCommonInputContainer()); | |
121 | if (useKineFilter) { | |
122 | mgr->ConnectInput (kinefilter, 0, mgr->GetCommonInputContainer()); | |
123 | mgr->ConnectOutput (kinefilter, 0, mgr->GetCommonOutputContainer()); | |
124 | AliAnalysisDataContainer *coutputEx = mgr->CreateContainer("cFilterList", TList::Class(), | |
125 | AliAnalysisManager::kOutputContainer,"pyxsec_hists.root"); | |
126 | mgr->ConnectOutput (kinefilter, 1,coutputEx); | |
127 | } | |
30f922ad | 128 | if (useCentralityTask) { |
129 | mgr->ConnectInput (ctask, 0, mgr->GetCommonInputContainer()); | |
130 | mgr->ConnectOutput(ctask, 0, mgr->GetCommonOutputContainer()); | |
131 | } | |
132 | ||
ebad39a9 | 133 | return esdfilter; |
134 | } | |
135 | ||
68216590 | 136 | |
137 | Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdfilter){ | |
138 | ||
139 | Printf("%s%d: Creating Track Cuts for LH10h",(char*)__FILE__,__LINE__); | |
140 | ||
141 | // Cuts on primary tracks | |
142 | AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); | |
143 | ||
144 | // ITS stand-alone tracks | |
145 | AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts"); | |
146 | esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE); | |
147 | ||
148 | // Pixel OR necessary for the electrons | |
149 | AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS"); | |
150 | itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny); | |
151 | ||
152 | ||
153 | // PID for the electrons | |
154 | AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts"); | |
155 | electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.); | |
156 | ||
157 | // tighter cuts on primary particles for high pT tracks | |
158 | // take the standard cuts, which include already | |
159 | // ITSrefit and use only primaries... | |
160 | ||
161 | // ITS cuts for new jet analysis | |
5c4489e2 | 162 | gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C"); |
00bb1149 | 163 | AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006); |
68216590 | 164 | |
165 | // throw out tracks with too low number of clusters in | |
166 | // the first pass (be consistent with TPC only tracks) | |
167 | // N.B. the number off crossed rows still acts on the tracks after | |
168 | // all iterations if we require tpc standalone, number of clusters | |
169 | // and chi2 TPC cuts act on track after the first iteration | |
170 | // esdTrackCutsH0->SetRequireTPCStandAlone(kTRUE); | |
171 | // esdTrackCutsH0->SetMinNClustersTPC(80); // <--- first pass | |
172 | ||
173 | ||
174 | // the complement to the one with SPD requirement | |
00bb1149 | 175 | AliESDtrackCuts* esdTrackCutsHG1 = CreateTrackCutsPWGJE(10011006); |
68216590 | 176 | |
177 | // the tracks that must not be taken pass this cut and | |
178 | // non HGC1 and HG | |
00bb1149 | 179 | AliESDtrackCuts* esdTrackCutsHG2 = CreateTrackCutsPWGJE(10021006); |
68216590 | 180 | |
181 | // standard cuts also used in R_AA analysis | |
5c4489e2 | 182 | AliESDtrackCuts* esdTrackCutsH2 = CreateTrackCutsPWGJE(1000); |
68216590 | 183 | |
00bb1149 | 184 | AliESDtrackCuts* esdTrackCutsGCOnly = CreateTrackCutsPWGJE(10041006); |
68216590 | 185 | |
186 | // TPC only tracks | |
187 | AliESDtrackCuts* esdTrackCutsTPCCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); | |
188 | esdTrackCutsTPCCOnly->SetMinNClustersTPC(70); | |
189 | ||
190 | // Compose the filter | |
191 | AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter"); | |
192 | // 1, 1<<0 | |
193 | trackFilter->AddCuts(esdTrackCutsL); | |
194 | // 2 1<<1 | |
195 | trackFilter->AddCuts(esdTrackCutsITSsa); | |
196 | // 4 1<<2 | |
197 | trackFilter->AddCuts(itsStrong); | |
198 | itsStrong->SetFilterMask(1); // AND with Standard track cuts | |
199 | // 8 1<<3 | |
200 | trackFilter->AddCuts(electronID); | |
201 | electronID->SetFilterMask(4); // AND with Pixel Cuts | |
202 | // 16 1<<4 | |
203 | trackFilter->AddCuts(esdTrackCutsHG0); | |
204 | // 32 1<<5 | |
205 | trackFilter->AddCuts(esdTrackCutsHG1); | |
206 | // 64 1<<6 | |
207 | trackFilter->AddCuts(esdTrackCutsHG2); | |
208 | // 128 1<<7 | |
209 | AliESDtrackCuts* esdTrackCutsHG0_tmp = new AliESDtrackCuts(*esdTrackCutsHG0); // avoid double delete | |
210 | trackFilter->AddCuts(esdTrackCutsHG0_tmp); // add once more for tpc only tracks | |
211 | // 256 1<<8 | |
212 | trackFilter->AddCuts(esdTrackCutsGCOnly); | |
213 | // 512 1<<9 | |
214 | AliESDtrackCuts* esdTrackCutsHG1_tmp = new AliESDtrackCuts(*esdTrackCutsHG1); // avoid double delete | |
215 | trackFilter->AddCuts(esdTrackCutsHG1_tmp); // add once more for tpc only tracks | |
216 | // 1024 1<<10 | |
217 | trackFilter->AddCuts(esdTrackCutsH2); // add r_aa cuts | |
218 | // 2048 1<<11 | |
219 | trackFilter->AddCuts(esdTrackCutsTPCCOnly); // add QM TPC only track cuts | |
220 | ||
221 | ||
222 | esdfilter->SetGlobalConstrainedFilterMask(1<<8|1<<9); // these tracks are written out as global constrained tracks | |
223 | esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<4)); // these normal global tracks will be marked as hybrid | |
224 | ||
225 | // esdfilter->SetTPCConstrainedFilterMask(1<<11); // these tracks are written out as tpc constrained tracks | |
226 | ||
227 | esdfilter->SetTrackFilter(trackFilter); | |
228 | return kTRUE; | |
229 | ||
230 | } | |
231 | ||
dd048caa | 232 | Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdfilter){ |
68216590 | 233 | |
234 | ||
dd048caa | 235 | Printf("%s%d: Creating Track Cuts LHC11h",(char*)__FILE__,__LINE__); |
68216590 | 236 | |
237 | // Cuts on primary tracks | |
238 | AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); | |
239 | ||
240 | // ITS stand-alone tracks | |
241 | AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts"); | |
242 | esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE); | |
243 | ||
244 | // Pixel OR necessary for the electrons | |
245 | AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS"); | |
246 | itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny); | |
247 | ||
248 | ||
249 | // PID for the electrons | |
250 | AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts"); | |
251 | electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.); | |
252 | ||
253 | // standard cuts with very loose DCA | |
254 | AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); | |
255 | esdTrackCutsH->SetMaxDCAToVertexXY(2.4); | |
256 | esdTrackCutsH->SetMaxDCAToVertexZ(3.2); | |
257 | esdTrackCutsH->SetDCAToVertex2D(kTRUE); | |
258 | ||
259 | // standard cuts with tight DCA cut | |
260 | AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(); | |
261 | ||
262 | // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster | |
263 | // tracks selected by this cut are exclusive to those selected by the previous cut | |
264 | AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(); | |
265 | esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone); | |
266 | esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst); | |
267 | ||
268 | // TPC only tracks: Optionally enable the writing of TPConly information | |
269 | // constrained to SPD vertex in the filter below | |
270 | AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts(); | |
271 | // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb | |
272 | //esdTrackCutsTPCOnly->SetMinNClustersTPC(70); | |
273 | ||
274 | // Extra cuts for hybrids | |
275 | // first the global tracks we want to take | |
276 | AliESDtrackCuts* esdTrackCutsHTG = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE); | |
277 | esdTrackCutsHTG->SetName("Global Hybrid tracks, loose DCA"); | |
278 | esdTrackCutsHTG->SetMaxDCAToVertexXY(2.4); | |
279 | esdTrackCutsHTG->SetMaxDCAToVertexZ(3.2); | |
280 | esdTrackCutsHTG->SetDCAToVertex2D(kTRUE); | |
281 | esdTrackCutsHTG->SetMaxChi2TPCConstrainedGlobal(36); | |
282 | ||
283 | // Than the complementary tracks which will be stored as global | |
284 | // constraint, complement is done in the ESDFilter task | |
285 | AliESDtrackCuts* esdTrackCutsHTGC = new AliESDtrackCuts(*esdTrackCutsHTG); | |
46078982 | 286 | esdTrackCutsHTGC->SetName("Global Constraint Hybrid tracks, loose DCA no spd requirement"); |
68216590 | 287 | esdTrackCutsHTGC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff); |
46078982 | 288 | esdTrackCutsHTGC->SetRequireITSRefit(kTRUE); |
68216590 | 289 | |
290 | // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default) | |
291 | AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0); | |
292 | ||
293 | // Compose the filter | |
294 | AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter"); | |
295 | // 1, 1<<0 | |
296 | trackFilter->AddCuts(esdTrackCutsL); | |
297 | // 2, 1<<1 | |
298 | trackFilter->AddCuts(esdTrackCutsITSsa); | |
299 | // 4, 1<<2 | |
300 | trackFilter->AddCuts(itsStrong); | |
301 | itsStrong->SetFilterMask(1); // AND with Standard track cuts | |
302 | // 8, 1<<3 | |
303 | trackFilter->AddCuts(electronID); | |
304 | electronID->SetFilterMask(4); // AND with Pixel Cuts | |
305 | // 16, 1<<4 | |
306 | trackFilter->AddCuts(esdTrackCutsH); | |
307 | // 32, 1<<5 | |
308 | trackFilter->AddCuts(esdTrackCutsH2); | |
309 | // 64, 1<<6 | |
310 | trackFilter->AddCuts(esdTrackCutsH3); | |
311 | // 128 , 1 << 7 | |
312 | trackFilter->AddCuts(esdTrackCutsTPCOnly); | |
313 | if(enableTPCOnlyAODTracks)esdfilter->SetTPCOnlyFilterMask(128); | |
314 | // 256, 1 << 8 Global Hybrids | |
315 | trackFilter->AddCuts(esdTrackCutsHTG); | |
316 | esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid | |
317 | // 512, 1<< 9 GlobalConstraint Hybrids | |
318 | trackFilter->AddCuts(esdTrackCutsHTGC); | |
319 | esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks | |
320 | esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement | |
321 | // 1024, 1<< 10 | |
322 | trackFilter->AddCuts(esdTrackCutsH2Cluster); | |
323 | esdfilter->SetTrackFilter(trackFilter); | |
324 | ||
325 | return kTRUE; | |
326 | ||
327 | } |