2 Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdFilter);
3 Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdFilter);
4 Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdFilter);
5 Bool_t enableTPCOnlyAODTracksLocalFlag=kFALSE;
8 AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
9 Bool_t writeMuonAOD=kFALSE,
10 Bool_t writeDimuonAOD=kFALSE,
11 Bool_t usePhysicsSelection=kFALSE,
12 Bool_t useCentralityTask=kFALSE, /*obsolete*/
13 Bool_t enableTPCOnlyAODTracks=kFALSE,
14 Bool_t disableCascades=kFALSE,
15 Bool_t disableKinks=kFALSE,
18 Bool_t useV0Filter=kTRUE)
20 // Creates a filter task and adds it to the analysis manager.
21 // Get the pointer to the existing analysis manager via the static access method.
22 //==============================================================================
23 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
25 ::Error("AddTaskESDFilter", "No analysis manager to connect to.");
29 // This task requires an ESD input handler and an AOD output handler.
30 // Check this using the analysis manager.
31 //===============================================================================
32 TString type = mgr->GetInputEventHandler()->GetDataType();
33 if (!type.Contains("ESD")) {
34 ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an ESD input handler.");
37 // Check if AOD output handler exist.
38 AliAODHandler *aod_h = (AliAODHandler*)mgr->GetOutputEventHandler();
40 ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an AOD output handler.");
43 // Check if MC handler is connected in case kine filter requested
44 AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
45 if (!mcH && useKineFilter) {
46 ::Error("AddTaskESDFilter", "No MC handler connected while kine filtering requested");
50 // Create the task, add it to the manager and configure it.
51 //===========================================================================
52 // Barrel tracks filter
53 AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
54 if (disableCascades) esdfilter->DisableCascades();
55 if (disableKinks) esdfilter->DisableKinks();
57 mgr->AddTask(esdfilter);
60 Bool_t onlyMuon=kTRUE;
61 Bool_t keepAllEvents=kTRUE;
62 Int_t mcMode= useKineFilter ? muonMCMode : 0; // use 1 instead of 2 to get all MC information instead of just ancestors of mu tracks
63 AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter",onlyMuon,keepAllEvents,mcMode);
64 mgr->AddTask(esdmuonfilter);
65 if(usePhysicsSelection){
66 esdfilter->SelectCollisionCandidates(AliVEvent::kAny);
67 esdmuonfilter->SelectCollisionCandidates(AliVEvent::kAny);
70 // Filtering of MC particles (decays conversions etc)
71 // this task has to go AFTER all other filter tasks
72 // since it fills the AODMC array with all
73 // selected MC Particles, only this way we have the
74 // AODMCparticle information available for following tasks
75 AliAnalysisTaskMCParticleFilter *kinefilter = 0;
77 kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");
78 mgr->AddTask(kinefilter);
81 enableTPCOnlyAODTracksLocalFlag = enableTPCOnlyAODTracks;
82 if((runFlag/100)==10){
83 if((runFlag%100)==0) AddTrackCutsLHC10bcde(esdfilter);
84 else AddTrackCutsLHC10h(esdfilter);
88 AddTrackCutsLHC11h(esdfilter);
91 // Filter with cuts on V0s
93 AliESDv0Cuts* esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");
94 esdV0Cuts->SetMinRadius(0.2);
95 esdV0Cuts->SetMaxRadius(200);
96 esdV0Cuts->SetMinDcaPosToVertex(0.05);
97 esdV0Cuts->SetMinDcaNegToVertex(0.05);
98 esdV0Cuts->SetMaxDcaV0Daughters(1.5);
99 esdV0Cuts->SetMinCosinePointingAngle(0.99);
100 AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");
101 v0Filter->AddCuts(esdV0Cuts);
103 esdfilter->SetV0Filter(v0Filter);
106 // Enable writing of Muon AODs
107 esdmuonfilter->SetWriteMuonAOD(writeMuonAOD);
109 // Enable writing of Dimuon AODs
110 esdmuonfilter->SetWriteDimuonAOD(writeDimuonAOD);
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 mgr->ConnectInput (esdfilter, 0, mgr->GetCommonInputContainer());
116 mgr->ConnectOutput (esdfilter, 0, mgr->GetCommonOutputContainer());
117 mgr->ConnectInput (esdmuonfilter, 0, mgr->GetCommonInputContainer());
119 mgr->ConnectInput (kinefilter, 0, mgr->GetCommonInputContainer());
120 mgr->ConnectOutput (kinefilter, 0, mgr->GetCommonOutputContainer());
121 AliAnalysisDataContainer *coutputEx = mgr->CreateContainer("cFilterList", TList::Class(),
122 AliAnalysisManager::kOutputContainer,"pyxsec_hists.root");
123 mgr->ConnectOutput (kinefilter, 1,coutputEx);
128 Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdfilter){
130 Printf("%s%d: Creating Track Cuts for LHC10h",(char*)__FILE__,__LINE__);
132 // Cuts on primary tracks
133 AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
135 // ITS stand-alone tracks
136 AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
137 esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
139 // Pixel OR necessary for the electrons
140 AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
141 itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
144 // PID for the electrons
145 AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
146 electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);
149 // standard cuts with very loose DCA
150 AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
151 esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
152 esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
153 esdTrackCutsH->SetDCAToVertex2D(kTRUE);
155 // standard cuts with tight DCA cut
156 AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
158 // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster
159 // tracks selected by this cut are exclusive to those selected by the previous cut
160 AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
161 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
162 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
165 // tighter cuts on primary particles for high pT tracks
166 // take the standard cuts, which include already
167 // ITSrefit and use only primaries...
169 // ITS cuts for new jet analysis
170 // gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
171 // AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);
173 AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts");
175 TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");
176 jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);
177 jetCuts1006->SetMinNClustersTPC(70);
178 jetCuts1006->SetMaxChi2PerClusterTPC(4);
179 jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1
180 jetCuts1006->SetAcceptKinkDaughters(kFALSE);
181 jetCuts1006->SetRequireTPCRefit(kTRUE);
182 jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);
184 jetCuts1006->SetRequireITSRefit(kTRUE);
186 jetCuts1006->SetMaxDCAToVertexXY(2.4);
187 jetCuts1006->SetMaxDCAToVertexZ(3.2);
188 jetCuts1006->SetDCAToVertex2D(kTRUE);
190 jetCuts1006->SetMaxChi2PerClusterITS(36);
191 jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);
193 jetCuts1006->SetRequireSigmaToVertex(kFALSE);
195 jetCuts1006->SetEtaRange(-0.9,0.9);
196 jetCuts1006->SetPtRange(0.15, 1E+15.);
198 AliESDtrackCuts* esdTrackCutsHG0 = jetCuts1006->Clone("JetCuts10001006");
199 esdTrackCutsHG0->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
201 // the complement to the one with SPD requirement: tracks with ITS refit but no SPD hit
202 // AliESDtrackCuts* esdTrackCutsHG1 = CreateTrackCutsPWGJE(10011006);
203 AliESDtrackCuts* esdTrackCutsHG1 = jetCuts1006->Clone("JetCuts10011006");
204 esdTrackCutsHG1->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
206 AliESDtrackCuts* esdTrackCutsHG2 = jetCuts1006->Clone("JetCuts10021006");
207 esdTrackCutsHG2->SetMaxChi2PerClusterITS(1E10);
209 // all complementary hybrid tracks: no SPD requirement, no ITS refit requirement
210 // AliESDtrackCuts* esdTrackCutsGCOnly = CreateTrackCutsPWGJE(10041006);
211 AliESDtrackCuts* esdTrackCutsGCOnly = jetCuts1006->Clone("JetCuts10041006");
212 esdTrackCutsGCOnly->SetRequireITSRefit(kFALSE);
214 // standard cuts also used in R_AA analysis
215 // "Global track RAA analysis QM2011 + Chi2ITS<36";
216 // AliESDtrackCuts* esdTrackCutsH2 = CreateTrackCutsPWGJE(1000);
217 AliESDtrackCuts* esdTrackCutsRAA = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);
218 esdTrackCutsRAA->SetMinNCrossedRowsTPC(120);
219 esdTrackCutsRAA->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
220 esdTrackCutsRAA->SetMaxChi2PerClusterITS(36);
221 esdTrackCutsRAA->SetMaxFractionSharedTPCClusters(0.4);
222 esdTrackCutsRAA->SetMaxChi2TPCConstrainedGlobal(36);
224 esdTrackCutsRAA->SetEtaRange(-0.9,0.9);
225 esdTrackCutsRAA->SetPtRange(0.15, 1e10);
228 AliESDtrackCuts* esdTrackCutsTPCCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
229 esdTrackCutsTPCCOnly->SetMinNClustersTPC(70);
231 // Compose the filter
232 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
234 trackFilter->AddCuts(esdTrackCutsL);
236 trackFilter->AddCuts(esdTrackCutsITSsa);
238 trackFilter->AddCuts(itsStrong);
239 itsStrong->SetFilterMask(1); // AND with Standard track cuts
241 trackFilter->AddCuts(electronID);
242 electronID->SetFilterMask(4); // AND with Pixel Cuts
244 trackFilter->AddCuts(esdTrackCutsH);
246 trackFilter->AddCuts(esdTrackCutsH2);
248 trackFilter->AddCuts(esdTrackCutsH3);
250 trackFilter->AddCuts(esdTrackCutsTPCCOnly); // add TPC only track cuts for TPC constrained tracks
251 if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
253 trackFilter->AddCuts(esdTrackCutsHG0);
254 esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
256 trackFilter->AddCuts(esdTrackCutsGCOnly); // all complementary hybrids (no SPD req && no ITS refit req && !(1<<8))
258 trackFilter->AddCuts(esdTrackCutsHG1); // complementary tracks with ITSrefit & SPD none
259 esdfilter->SetGlobalConstrainedFilterMask(1<<9|1<<10); // these tracks are written out as global constrained tracks
260 esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complementary tracks
262 trackFilter->AddCuts(esdTrackCutsRAA);
264 AliESDtrackCuts* esdTrackCutsHG1_tmp = new AliESDtrackCuts(*esdTrackCutsHG1); // avoid double delete
265 trackFilter->AddCuts(esdTrackCutsHG1_tmp);
267 trackFilter->AddCuts(esdTrackCutsHG2);
269 esdfilter->SetTrackFilter(trackFilter);
274 Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdfilter){
277 Printf("%s%d: Creating Track Cuts LHC11h",(char*)__FILE__,__LINE__);
279 // Cuts on primary tracks
280 AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
282 // ITS stand-alone tracks
283 AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
284 esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
286 // Pixel OR necessary for the electrons
287 AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
288 itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
291 // PID for the electrons
292 AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
293 electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);
295 // standard cuts with very loose DCA
296 AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
297 esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
298 esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
299 esdTrackCutsH->SetDCAToVertex2D(kTRUE);
301 // standard cuts with tight DCA cut
302 AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
304 // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster
305 // tracks selected by this cut are exclusive to those selected by the previous cut
306 AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
307 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
308 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
310 // TPC only tracks: Optionally enable the writing of TPConly information
311 // constrained to SPD vertex in the filter below
312 AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
313 // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb
314 //esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
316 // Extra cuts for hybrids
317 // first the global tracks we want to take
318 AliESDtrackCuts* esdTrackCutsHTG = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
319 esdTrackCutsHTG->SetName("Global Hybrid tracks, loose DCA");
320 esdTrackCutsHTG->SetMaxDCAToVertexXY(2.4);
321 esdTrackCutsHTG->SetMaxDCAToVertexZ(3.2);
322 esdTrackCutsHTG->SetDCAToVertex2D(kTRUE);
323 esdTrackCutsHTG->SetMaxChi2TPCConstrainedGlobal(36);
324 esdTrackCutsHTG->SetMaxFractionSharedTPCClusters(0.4);
327 // Than the complementary tracks which will be stored as global
328 // constraint, complement is done in the ESDFilter task
329 AliESDtrackCuts* esdTrackCutsHTGC = new AliESDtrackCuts(*esdTrackCutsHTG);
330 esdTrackCutsHTGC->SetName("Global Constraint Hybrid tracks, loose DCA no it requirement");
331 esdTrackCutsHTGC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
332 esdTrackCutsHTGC->SetRequireITSRefit(kTRUE);
334 // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
335 AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);
337 // Compose the filter
338 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
340 trackFilter->AddCuts(esdTrackCutsL);
342 trackFilter->AddCuts(esdTrackCutsITSsa);
344 trackFilter->AddCuts(itsStrong);
345 itsStrong->SetFilterMask(1); // AND with Standard track cuts
347 trackFilter->AddCuts(electronID);
348 electronID->SetFilterMask(4); // AND with Pixel Cuts
350 trackFilter->AddCuts(esdTrackCutsH);
352 trackFilter->AddCuts(esdTrackCutsH2);
354 trackFilter->AddCuts(esdTrackCutsH3);
356 trackFilter->AddCuts(esdTrackCutsTPCOnly);
357 if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
358 // 256, 1 << 8 Global Hybrids
359 trackFilter->AddCuts(esdTrackCutsHTG);
360 esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
361 // 512, 1<< 9 GlobalConstraint Hybrids
362 trackFilter->AddCuts(esdTrackCutsHTGC);
363 esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks
364 esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
365 // 1024, 1<< 10 // tight DCA cuts
366 trackFilter->AddCuts(esdTrackCutsH2Cluster);
367 esdfilter->SetTrackFilter(trackFilter);
373 Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdfilter){
376 Printf("%s%d: Creating Track Cuts LHC10bcde",(char*)__FILE__,__LINE__);
378 // Cuts on primary tracks
379 AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
381 // ITS stand-alone tracks
382 AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
383 esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
385 // Pixel OR necessary for the electrons
386 AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
387 itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
390 // PID for the electrons
391 AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
392 electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);
394 // standard cuts with very loose DCA
395 AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
396 esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
397 esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
398 esdTrackCutsH->SetDCAToVertex2D(kTRUE);
400 // standard cuts with tight DCA cut
401 AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
403 // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster
404 // tracks selected by this cut are exclusive to those selected by the previous cut
405 AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
406 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
407 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
409 // TPC only tracks: Optionally enable the writing of TPConly information
410 // constrained to SPD vertex in the filter below
411 AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
412 // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb
413 esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
415 // Extra cuts for hybrids
416 // first the global tracks we want to take
417 // take the HTGs from 10h
419 // gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
420 // AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);
422 AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts");
424 TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");
425 jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);
426 jetCuts1006->SetMinNClustersTPC(70);
427 jetCuts1006->SetMaxChi2PerClusterTPC(4);
428 jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1
429 jetCuts1006->SetAcceptKinkDaughters(kFALSE);
430 jetCuts1006->SetRequireTPCRefit(kTRUE);
431 jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);
433 jetCuts1006->SetRequireITSRefit(kTRUE);
435 jetCuts1006->SetMaxDCAToVertexXY(2.4);
436 jetCuts1006->SetMaxDCAToVertexZ(3.2);
437 jetCuts1006->SetDCAToVertex2D(kTRUE);
439 jetCuts1006->SetMaxChi2PerClusterITS(36);
440 jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);
442 jetCuts1006->SetRequireSigmaToVertex(kFALSE);
444 jetCuts1006->SetEtaRange(-0.9,0.9);
445 jetCuts1006->SetPtRange(0.15, 1E+15.);
447 AliESDtrackCuts* esdTrackCutsHTG = jetCuts1006->Clone("JetCuts10001006");
448 esdTrackCutsHTG->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
450 // Than the complementary tracks which will be stored as global
451 // constraint, complement is done in the ESDFilter task
454 AliESDtrackCuts* esdTrackCutsHTGC = jetCuts1006->Clone("JetCuts10041006");
455 esdTrackCutsHTGC->SetRequireITSRefit(kFALSE);
457 // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
458 AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE, 0);
460 // Compose the filter
461 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
463 trackFilter->AddCuts(esdTrackCutsL);
465 trackFilter->AddCuts(esdTrackCutsITSsa);
467 trackFilter->AddCuts(itsStrong);
468 itsStrong->SetFilterMask(1); // AND with Standard track cuts
470 trackFilter->AddCuts(electronID);
471 electronID->SetFilterMask(4); // AND with Pixel Cuts
473 trackFilter->AddCuts(esdTrackCutsH);
475 trackFilter->AddCuts(esdTrackCutsH2);
477 trackFilter->AddCuts(esdTrackCutsH3);
479 trackFilter->AddCuts(esdTrackCutsTPCOnly);
480 if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
481 // 256, 1 << 8 Global Hybrids
482 trackFilter->AddCuts(esdTrackCutsHTG);
483 esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
484 // 512, 1<< 9 GlobalConstraint Hybrids
485 trackFilter->AddCuts(esdTrackCutsHTGC);
486 esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks
487 esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
488 // 1024, 1<< 10 // tight DCA cuts
489 trackFilter->AddCuts(esdTrackCutsH2Cluster);
490 esdfilter->SetTrackFilter(trackFilter);