2 Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdFilter);
\r
3 Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdFilter);
\r
4 Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdFilter);
\r
5 Bool_t enableTPCOnlyAODTracksLocalFlag=kFALSE;
\r
8 AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
\r
9 Bool_t writeMuonAOD=kFALSE,
\r
10 Bool_t writeDimuonAOD=kFALSE,
\r
11 Bool_t usePhysicsSelection=kFALSE,
\r
12 Bool_t useCentralityTask=kFALSE, /*obsolete*/
\r
13 Bool_t enableTPCOnlyAODTracks=kFALSE,
\r
14 Bool_t disableCascades=kFALSE,
\r
15 Bool_t disableKinks=kFALSE,
\r
16 Int_t runFlag = 1100,
\r
17 Int_t muonMCMode = 2,
\r
18 Bool_t useV0Filter=kTRUE)
\r
20 // Creates a filter task and adds it to the analysis manager.
\r
21 // Get the pointer to the existing analysis manager via the static access method.
\r
22 //==============================================================================
\r
23 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
\r
25 ::Error("AddTaskESDFilter", "No analysis manager to connect to.");
\r
29 // This task requires an ESD input handler and an AOD output handler.
\r
30 // Check this using the analysis manager.
\r
31 //===============================================================================
\r
32 TString type = mgr->GetInputEventHandler()->GetDataType();
\r
33 if (!type.Contains("ESD")) {
\r
34 ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an ESD input handler.");
\r
37 // Check if AOD output handler exist.
\r
38 AliAODHandler *aod_h = (AliAODHandler*)mgr->GetOutputEventHandler();
\r
40 ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an AOD output handler.");
\r
43 // Check if MC handler is connected in case kine filter requested
\r
44 AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler();
\r
45 if (!mcH && useKineFilter) {
\r
46 ::Error("AddTaskESDFilter", "No MC handler connected while kine filtering requested");
\r
50 // Create the task, add it to the manager and configure it.
\r
51 //===========================================================================
\r
52 // Barrel tracks filter
\r
53 AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
\r
54 if (disableCascades) esdfilter->DisableCascades();
\r
55 if (disableKinks) esdfilter->DisableKinks();
\r
57 mgr->AddTask(esdfilter);
\r
60 Bool_t onlyMuon=kTRUE;
\r
61 Bool_t keepAllEvents=kTRUE;
\r
62 Int_t mcMode= useKineFilter ? muonMCMode : 0; // use 1 instead of 2 to get all MC information instead of just ancestors of mu tracks
\r
63 AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter",onlyMuon,keepAllEvents,mcMode);
\r
64 mgr->AddTask(esdmuonfilter);
\r
65 if(usePhysicsSelection){
\r
66 esdfilter->SelectCollisionCandidates(AliVEvent::kAny);
\r
67 esdmuonfilter->SelectCollisionCandidates(AliVEvent::kAny);
\r
70 // Filtering of MC particles (decays conversions etc)
\r
71 // this task has to go AFTER all other filter tasks
\r
72 // since it fills the AODMC array with all
\r
73 // selected MC Particles, only this way we have the
\r
74 // AODMCparticle information available for following tasks
\r
75 AliAnalysisTaskMCParticleFilter *kinefilter = 0;
\r
76 if (useKineFilter) {
\r
77 kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");
\r
78 mgr->AddTask(kinefilter);
\r
81 enableTPCOnlyAODTracksLocalFlag = enableTPCOnlyAODTracks;
\r
82 if((runFlag/100)==10){
\r
83 if((runFlag%100)==0) AddTrackCutsLHC10bcde(esdfilter);
\r
84 else AddTrackCutsLHC10h(esdfilter);
\r
88 AddTrackCutsLHC11h(esdfilter);
\r
91 // Filter with cuts on V0s
\r
93 AliESDv0Cuts* esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");
\r
94 esdV0Cuts->SetMinRadius(0.2);
\r
95 esdV0Cuts->SetMaxRadius(200);
\r
96 esdV0Cuts->SetMinDcaPosToVertex(0.05);
\r
97 esdV0Cuts->SetMinDcaNegToVertex(0.05);
\r
98 esdV0Cuts->SetMaxDcaV0Daughters(1.5);
\r
99 esdV0Cuts->SetMinCosinePointingAngle(0.99);
\r
100 AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");
\r
101 v0Filter->AddCuts(esdV0Cuts);
\r
103 esdfilter->SetV0Filter(v0Filter);
\r
106 // Enable writing of Muon AODs
\r
107 esdmuonfilter->SetWriteMuonAOD(writeMuonAOD);
\r
109 // Enable writing of Dimuon AODs
\r
110 esdmuonfilter->SetWriteDimuonAOD(writeDimuonAOD);
\r
112 // Create ONLY the output containers for the data produced by the task.
\r
113 // Get and connect other common input/output containers via the manager as below
\r
114 //==============================================================================
\r
115 mgr->ConnectInput (esdfilter, 0, mgr->GetCommonInputContainer());
\r
116 mgr->ConnectOutput (esdfilter, 0, mgr->GetCommonOutputContainer());
\r
117 mgr->ConnectInput (esdmuonfilter, 0, mgr->GetCommonInputContainer());
\r
118 if (useKineFilter) {
\r
119 mgr->ConnectInput (kinefilter, 0, mgr->GetCommonInputContainer());
\r
120 mgr->ConnectOutput (kinefilter, 0, mgr->GetCommonOutputContainer());
\r
121 AliAnalysisDataContainer *coutputEx = mgr->CreateContainer("cFilterList", TList::Class(),
\r
122 AliAnalysisManager::kOutputContainer,"pyxsec_hists.root");
\r
123 mgr->ConnectOutput (kinefilter, 1,coutputEx);
\r
131 Bool_t AddTrackCutsLHC10h(AliAnalysisTaskESDfilter* esdfilter){
\r
133 Printf("%s%d: Creating Track Cuts for LHC10h",(char*)__FILE__,__LINE__);
\r
135 // Cuts on primary tracks
\r
136 AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
\r
138 // ITS stand-alone tracks
\r
139 AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
\r
140 esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
\r
142 // Pixel OR necessary for the electrons
\r
143 AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
\r
144 itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
\r
147 // PID for the electrons
\r
148 AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
\r
149 electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);
\r
151 // tighter cuts on primary particles for high pT tracks
\r
152 // take the standard cuts, which include already
\r
153 // ITSrefit and use only primaries...
\r
155 // ITS cuts for new jet analysis
\r
156 // gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
\r
157 // AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);
\r
159 AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts");
\r
161 TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");
\r
162 jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);
\r
163 jetCuts1006->SetMinNClustersTPC(70);
\r
164 jetCuts1006->SetMaxChi2PerClusterTPC(4);
\r
165 jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1
\r
166 jetCuts1006->SetAcceptKinkDaughters(kFALSE);
\r
167 jetCuts1006->SetRequireTPCRefit(kTRUE);
\r
168 jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);
\r
170 jetCuts1006->SetRequireITSRefit(kTRUE);
\r
171 //accept secondaries
\r
172 jetCuts1006->SetMaxDCAToVertexXY(2.4);
\r
173 jetCuts1006->SetMaxDCAToVertexZ(3.2);
\r
174 jetCuts1006->SetDCAToVertex2D(kTRUE);
\r
176 jetCuts1006->SetMaxChi2PerClusterITS(36);
\r
177 jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);
\r
179 jetCuts1006->SetRequireSigmaToVertex(kFALSE);
\r
181 jetCuts1006->SetEtaRange(-0.9,0.9);
\r
182 jetCuts1006->SetPtRange(0.15, 1E+15.);
\r
184 AliESDtrackCuts* esdTrackCutsHG0 = jetCuts1006->Clone("JetCuts10001006");
\r
185 esdTrackCutsHG0->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
\r
188 // throw out tracks with too low number of clusters in
\r
189 // the first pass (be consistent with TPC only tracks)
\r
190 // N.B. the number off crossed rows still acts on the tracks after
\r
191 // all iterations if we require tpc standalone, number of clusters
\r
192 // and chi2 TPC cuts act on track after the first iteration
\r
193 // esdTrackCutsH0->SetRequireTPCStandAlone(kTRUE);
\r
194 // esdTrackCutsH0->SetMinNClustersTPC(80); // <--- first pass
\r
197 // the complement to the one with SPD requirement
\r
198 // AliESDtrackCuts* esdTrackCutsHG1 = CreateTrackCutsPWGJE(10011006);
\r
199 AliESDtrackCuts* esdTrackCutsHG1 = jetCuts1006->Clone("JetCuts10011006");
\r
200 esdTrackCutsHG1->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
\r
202 // the tracks that must not be taken pass this cut and
\r
204 // AliESDtrackCuts* esdTrackCutsHG2 = CreateTrackCutsPWGJE(10021006);
\r
205 AliESDtrackCuts* esdTrackCutsHG2 = jetCuts1006->Clone("JetCuts10021006");
\r
206 esdTrackCutsHG2->SetMaxChi2PerClusterITS(1E10);
\r
209 // standard cuts also used in R_AA analysis
\r
210 // "Global track RAA analysis QM2011 + Chi2ITS<36";
\r
211 // AliESDtrackCuts* esdTrackCutsH2 = CreateTrackCutsPWGJE(1000);
\r
212 AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE,1);
\r
213 esdTrackCutsH2->SetMinNCrossedRowsTPC(120);
\r
214 esdTrackCutsH2->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
\r
215 esdTrackCutsH2->SetMaxChi2PerClusterITS(36);
\r
216 esdTrackCutsH2->SetMaxFractionSharedTPCClusters(0.4);
\r
217 esdTrackCutsH2->SetMaxChi2TPCConstrainedGlobal(36);
\r
219 esdTrackCutsH2->SetEtaRange(-0.9,0.9);
\r
220 esdTrackCutsH2->SetPtRange(0.15, 1e10);
\r
223 // AliESDtrackCuts* esdTrackCutsGCOnly = CreateTrackCutsPWGJE(10041006);
\r
224 AliESDtrackCuts* esdTrackCutsGCOnly = jetCuts1006->Clone("JetCuts10041006");
\r
225 esdTrackCutsGCOnly->SetRequireITSRefit(kFALSE);
\r
228 AliESDtrackCuts* esdTrackCutsTPCCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
\r
229 esdTrackCutsTPCCOnly->SetMinNClustersTPC(70);
\r
231 // Compose the filter
\r
232 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
\r
234 trackFilter->AddCuts(esdTrackCutsL);
\r
236 trackFilter->AddCuts(esdTrackCutsITSsa);
\r
238 trackFilter->AddCuts(itsStrong);
\r
239 itsStrong->SetFilterMask(1); // AND with Standard track cuts
\r
241 trackFilter->AddCuts(electronID);
\r
242 electronID->SetFilterMask(4); // AND with Pixel Cuts
\r
244 trackFilter->AddCuts(esdTrackCutsHG0);
\r
246 trackFilter->AddCuts(esdTrackCutsHG1);
\r
248 trackFilter->AddCuts(esdTrackCutsHG2);
\r
250 trackFilter->AddCuts(esdTrackCutsTPCCOnly); // add QM TPC only track cuts
\r
251 if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
\r
253 trackFilter->AddCuts(esdTrackCutsGCOnly);
\r
255 AliESDtrackCuts* esdTrackCutsHG1_tmp = new AliESDtrackCuts(*esdTrackCutsHG1); // avoid double delete
\r
256 trackFilter->AddCuts(esdTrackCutsHG1_tmp); // add once more for tpc only tracks
\r
258 trackFilter->AddCuts(esdTrackCutsH2); // add r_aa cuts
\r
262 esdfilter->SetGlobalConstrainedFilterMask(1<<8|1<<9); // these tracks are written out as global constrained tracks
\r
263 esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<4)); // these normal global tracks will be marked as hybrid
\r
264 esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
\r
265 // esdfilter->SetTPCConstrainedFilterMask(1<<11); // these tracks are written out as tpc constrained tracks
\r
267 esdfilter->SetTrackFilter(trackFilter);
\r
273 Bool_t AddTrackCutsLHC11h(AliAnalysisTaskESDfilter* esdfilter){
\r
276 Printf("%s%d: Creating Track Cuts LHC11h",(char*)__FILE__,__LINE__);
\r
278 // Cuts on primary tracks
\r
279 AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
\r
281 // ITS stand-alone tracks
\r
282 AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
\r
283 esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
\r
285 // Pixel OR necessary for the electrons
\r
286 AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
\r
287 itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
\r
290 // PID for the electrons
\r
291 AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
\r
292 electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);
\r
294 // standard cuts with very loose DCA
\r
295 AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
\r
296 esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
\r
297 esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
\r
298 esdTrackCutsH->SetDCAToVertex2D(kTRUE);
\r
300 // standard cuts with tight DCA cut
\r
301 AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
\r
303 // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster
\r
304 // tracks selected by this cut are exclusive to those selected by the previous cut
\r
305 AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
\r
306 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
\r
307 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
\r
309 // TPC only tracks: Optionally enable the writing of TPConly information
\r
310 // constrained to SPD vertex in the filter below
\r
311 AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
\r
312 // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb
\r
313 //esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
\r
315 // Extra cuts for hybrids
\r
316 // first the global tracks we want to take
\r
317 AliESDtrackCuts* esdTrackCutsHTG = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
\r
318 esdTrackCutsHTG->SetName("Global Hybrid tracks, loose DCA");
\r
319 esdTrackCutsHTG->SetMaxDCAToVertexXY(2.4);
\r
320 esdTrackCutsHTG->SetMaxDCAToVertexZ(3.2);
\r
321 esdTrackCutsHTG->SetDCAToVertex2D(kTRUE);
\r
322 esdTrackCutsHTG->SetMaxChi2TPCConstrainedGlobal(36);
\r
323 esdTrackCutsHTG->SetMaxFractionSharedTPCClusters(0.4);
\r
326 // Than the complementary tracks which will be stored as global
\r
327 // constraint, complement is done in the ESDFilter task
\r
328 AliESDtrackCuts* esdTrackCutsHTGC = new AliESDtrackCuts(*esdTrackCutsHTG);
\r
329 esdTrackCutsHTGC->SetName("Global Constraint Hybrid tracks, loose DCA no it requirement");
\r
330 esdTrackCutsHTGC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
\r
331 esdTrackCutsHTGC->SetRequireITSRefit(kTRUE);
\r
333 // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
\r
334 AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);
\r
336 // Compose the filter
\r
337 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
\r
339 trackFilter->AddCuts(esdTrackCutsL);
\r
341 trackFilter->AddCuts(esdTrackCutsITSsa);
\r
343 trackFilter->AddCuts(itsStrong);
\r
344 itsStrong->SetFilterMask(1); // AND with Standard track cuts
\r
346 trackFilter->AddCuts(electronID);
\r
347 electronID->SetFilterMask(4); // AND with Pixel Cuts
\r
349 trackFilter->AddCuts(esdTrackCutsH);
\r
351 trackFilter->AddCuts(esdTrackCutsH2);
\r
353 trackFilter->AddCuts(esdTrackCutsH3);
\r
355 trackFilter->AddCuts(esdTrackCutsTPCOnly);
\r
356 if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
\r
357 // 256, 1 << 8 Global Hybrids
\r
358 trackFilter->AddCuts(esdTrackCutsHTG);
\r
359 esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
\r
360 // 512, 1<< 9 GlobalConstraint Hybrids
\r
361 trackFilter->AddCuts(esdTrackCutsHTGC);
\r
362 esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks
\r
363 esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
\r
364 // 1024, 1<< 10 // tight DCA cuts
\r
365 trackFilter->AddCuts(esdTrackCutsH2Cluster);
\r
366 esdfilter->SetTrackFilter(trackFilter);
\r
372 Bool_t AddTrackCutsLHC10bcde(AliAnalysisTaskESDfilter* esdfilter){
\r
375 Printf("%s%d: Creating Track Cuts LHC10bcde",(char*)__FILE__,__LINE__);
\r
377 // Cuts on primary tracks
\r
378 AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
\r
380 // ITS stand-alone tracks
\r
381 AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
\r
382 esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
\r
384 // Pixel OR necessary for the electrons
\r
385 AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
\r
386 itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
\r
389 // PID for the electrons
\r
390 AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
\r
391 electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.5);
\r
393 // standard cuts with very loose DCA
\r
394 AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
\r
395 esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
\r
396 esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
\r
397 esdTrackCutsH->SetDCAToVertex2D(kTRUE);
\r
399 // standard cuts with tight DCA cut
\r
400 AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
\r
402 // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster
\r
403 // tracks selected by this cut are exclusive to those selected by the previous cut
\r
404 AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
\r
405 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
\r
406 esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
\r
408 // TPC only tracks: Optionally enable the writing of TPConly information
\r
409 // constrained to SPD vertex in the filter below
\r
410 AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
\r
411 // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb
\r
412 esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
\r
414 // Extra cuts for hybrids
\r
415 // first the global tracks we want to take
\r
416 // take the HTGs from 10h
\r
418 // gROOT->LoadMacro("$ALICE_ROOT/PWGJE/macros/CreateTrackCutsPWGJE.C");
\r
419 // AliESDtrackCuts* esdTrackCutsHG0 = CreateTrackCutsPWGJE(10001006);
\r
421 AliESDtrackCuts *jetCuts1006 = new AliESDtrackCuts("AliESDtrackCuts");
\r
423 TFormula *f1NClustersTPCLinearPtDep = new TFormula("f1NClustersTPCLinearPtDep","70.+30./20.*x");
\r
424 jetCuts1006->SetMinNClustersTPCPtDep(f1NClustersTPCLinearPtDep,20.);
\r
425 jetCuts1006->SetMinNClustersTPC(70);
\r
426 jetCuts1006->SetMaxChi2PerClusterTPC(4);
\r
427 jetCuts1006->SetRequireTPCStandAlone(kTRUE); //cut on NClustersTPC and chi2TPC Iter1
\r
428 jetCuts1006->SetAcceptKinkDaughters(kFALSE);
\r
429 jetCuts1006->SetRequireTPCRefit(kTRUE);
\r
430 jetCuts1006->SetMaxFractionSharedTPCClusters(0.4);
\r
432 jetCuts1006->SetRequireITSRefit(kTRUE);
\r
433 //accept secondaries
\r
434 jetCuts1006->SetMaxDCAToVertexXY(2.4);
\r
435 jetCuts1006->SetMaxDCAToVertexZ(3.2);
\r
436 jetCuts1006->SetDCAToVertex2D(kTRUE);
\r
438 jetCuts1006->SetMaxChi2PerClusterITS(36);
\r
439 jetCuts1006->SetMaxChi2TPCConstrainedGlobal(36);
\r
441 jetCuts1006->SetRequireSigmaToVertex(kFALSE);
\r
443 jetCuts1006->SetEtaRange(-0.9,0.9);
\r
444 jetCuts1006->SetPtRange(0.15, 1E+15.);
\r
446 AliESDtrackCuts* esdTrackCutsHTG = jetCuts1006->Clone("JetCuts10001006");
\r
447 esdTrackCutsHTG->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
\r
449 // Than the complementary tracks which will be stored as global
\r
450 // constraint, complement is done in the ESDFilter task
\r
453 AliESDtrackCuts* esdTrackCutsHTGC = jetCuts1006->Clone("JetCuts10041006");
\r
454 esdTrackCutsHTGC->SetRequireITSRefit(kFALSE);
\r
456 // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
\r
457 AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE, 0);
\r
459 // Compose the filter
\r
460 AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
\r
462 trackFilter->AddCuts(esdTrackCutsL);
\r
464 trackFilter->AddCuts(esdTrackCutsITSsa);
\r
466 trackFilter->AddCuts(itsStrong);
\r
467 itsStrong->SetFilterMask(1); // AND with Standard track cuts
\r
469 trackFilter->AddCuts(electronID);
\r
470 electronID->SetFilterMask(4); // AND with Pixel Cuts
\r
472 trackFilter->AddCuts(esdTrackCutsH);
\r
474 trackFilter->AddCuts(esdTrackCutsH2);
\r
476 trackFilter->AddCuts(esdTrackCutsH3);
\r
478 trackFilter->AddCuts(esdTrackCutsTPCOnly);
\r
479 if(enableTPCOnlyAODTracksLocalFlag)esdfilter->SetTPCOnlyFilterMask(128);
\r
480 // 256, 1 << 8 Global Hybrids
\r
481 trackFilter->AddCuts(esdTrackCutsHTG);
\r
482 esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
\r
483 // 512, 1<< 9 GlobalConstraint Hybrids
\r
484 trackFilter->AddCuts(esdTrackCutsHTGC);
\r
485 esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks
\r
486 esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
\r
487 // 1024, 1<< 10 // tight DCA cuts
\r
488 trackFilter->AddCuts(esdTrackCutsH2Cluster);
\r
489 esdfilter->SetTrackFilter(trackFilter);
\r