]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGJE/macros/AddTaskESDFilterPWGJETrain.C
Momentum smearing added
[u/mrichter/AliRoot.git] / PWGJE / macros / AddTaskESDFilterPWGJETrain.C
CommitLineData
ebad39a9 1
2a7c86bc 2
68216590 3Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdFilter);
dd048caa 4Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdFilter);
68216590 5Bool_t enableTPCOnlyAODTracks = kTRUE;
6
7
5c4489e2 8AliAnalysisTaskESDfilter *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
137Bool_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 232Bool_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);
4dd58c64 282 esdTrackCutsHTG->SetMaxFractionSharedTPCClusters(0.4);
283
68216590 284 // Than the complementary tracks which will be stored as global
285 // constraint, complement is done in the ESDFilter task
286 AliESDtrackCuts* esdTrackCutsHTGC = new AliESDtrackCuts(*esdTrackCutsHTG);
46078982 287 esdTrackCutsHTGC->SetName("Global Constraint Hybrid tracks, loose DCA no spd requirement");
68216590 288 esdTrackCutsHTGC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
46078982 289 esdTrackCutsHTGC->SetRequireITSRefit(kTRUE);
68216590 290
291 // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
292 AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);
293
294 // Compose the filter
295 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
296 // 1, 1<<0
297 trackFilter->AddCuts(esdTrackCutsL);
298 // 2, 1<<1
299 trackFilter->AddCuts(esdTrackCutsITSsa);
300 // 4, 1<<2
301 trackFilter->AddCuts(itsStrong);
302 itsStrong->SetFilterMask(1); // AND with Standard track cuts
303 // 8, 1<<3
304 trackFilter->AddCuts(electronID);
305 electronID->SetFilterMask(4); // AND with Pixel Cuts
306 // 16, 1<<4
307 trackFilter->AddCuts(esdTrackCutsH);
308 // 32, 1<<5
309 trackFilter->AddCuts(esdTrackCutsH2);
310 // 64, 1<<6
311 trackFilter->AddCuts(esdTrackCutsH3);
312 // 128 , 1 << 7
313 trackFilter->AddCuts(esdTrackCutsTPCOnly);
314 if(enableTPCOnlyAODTracks)esdfilter->SetTPCOnlyFilterMask(128);
315 // 256, 1 << 8 Global Hybrids
316 trackFilter->AddCuts(esdTrackCutsHTG);
317 esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
318 // 512, 1<< 9 GlobalConstraint Hybrids
319 trackFilter->AddCuts(esdTrackCutsHTGC);
320 esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks
321 esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
322 // 1024, 1<< 10
323 trackFilter->AddCuts(esdTrackCutsH2Cluster);
324 esdfilter->SetTrackFilter(trackFilter);
325
326 return kTRUE;
327
328}