79bd4a7a |
1 | AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE, |
2 | Bool_t writeMuonAOD=kFALSE, |
3 | Bool_t writeDimuonAOD=kFALSE) |
3ef9ce84 |
4 | { |
5 | // Creates a filter task and adds it to the analysis manager. |
6 | |
7 | // Get the pointer to the existing analysis manager via the static access method. |
8 | //============================================================================== |
9 | AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); |
10 | if (!mgr) { |
c85963a0 |
11 | ::Error("AddTaskESDFilter", "No analysis manager to connect to."); |
3ef9ce84 |
12 | return NULL; |
13 | } |
14 | |
15 | // This task requires an ESD input handler and an AOD output handler. |
16 | // Check this using the analysis manager. |
17 | //=============================================================================== |
18 | TString type = mgr->GetInputEventHandler()->GetDataType(); |
19 | if (!type.Contains("ESD")) { |
c85963a0 |
20 | ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an ESD input handler."); |
3ef9ce84 |
21 | return NULL; |
22 | } |
23 | // Check if AOD output handler exist. |
24 | AliAODHandler *aod_h = (AliAODHandler*)mgr->GetOutputEventHandler(); |
25 | if (!aod_h) { |
c85963a0 |
26 | ::Error("AddTaskESDFilter", "ESD filtering task needs the manager to have an AOD output handler."); |
3ef9ce84 |
27 | return NULL; |
099d8f33 |
28 | } |
29 | // Check if MC handler is connected in case kine filter requested |
30 | AliMCEventHandler *mcH = (AliMCEventHandler*)mgr->GetMCtruthEventHandler(); |
31 | if (!mcH && useKineFilter) { |
32 | ::Error("AddTaskESDFilter", "No MC handler connected while kine filtering requested"); |
33 | return NULL; |
3ef9ce84 |
34 | } |
35 | |
36 | // Create the task, add it to the manager and configure it. |
099d8f33 |
37 | //=========================================================================== |
38 | // Barrel tracks filter |
3ef9ce84 |
39 | AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter"); |
40 | mgr->AddTask(esdfilter); |
099d8f33 |
41 | // Muons |
42 | AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter"); |
43 | mgr->AddTask(esdmuonfilter); |
3827f93a |
44 | |
45 | // Filtering of MC particles (decays conversions etc) |
46 | // this task has to go AFTER all other filter tasks |
47 | // since it fills the AODMC array with all |
48 | // selected MC Particles, only this way we have the |
49 | // AODMCparticle information available for following tasks |
50 | AliAnalysisTaskMCParticleFilter *kinefilter = 0; |
51 | if (useKineFilter) { |
52 | kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter"); |
53 | mgr->AddTask(kinefilter); |
54 | } |
55 | |
56 | |
57 | |
099d8f33 |
58 | // Cuts on primary tracks |
04f2cd11 |
59 | AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("Standard Track Cuts", "ESD Track Cuts"); |
099d8f33 |
60 | esdTrackCutsL->SetMinNClustersTPC(50); |
3ef9ce84 |
61 | esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5); |
3ef9ce84 |
62 | esdTrackCutsL->SetRequireTPCRefit(kTRUE); |
80a77868 |
63 | esdTrackCutsL->SetMaxDCAToVertexXY(2.4); |
64 | esdTrackCutsL->SetMaxDCAToVertexZ(3.2); |
099d8f33 |
65 | esdTrackCutsL->SetDCAToVertex2D(kTRUE); |
66 | esdTrackCutsL->SetRequireSigmaToVertex(kFALSE); |
67 | esdTrackCutsL->SetAcceptKinkDaughters(kFALSE); |
a550fcbd |
68 | |
099d8f33 |
69 | // ITS stand-alone tracks |
04f2cd11 |
70 | AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts"); |
099d8f33 |
71 | esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE); |
72 | |
a550fcbd |
73 | // Pixel OR necessary for the electrons |
74 | AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS"); |
75 | itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny); |
76 | |
77 | |
78 | // PID for the electrons |
79 | AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts"); |
80 | electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.); |
81 | |
cfd26fc5 |
82 | // tighter cuts on primary particles for high pT tracks |
83 | // needed as input for jetfinder |
84 | AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("Standard Track Cuts + ITSRefit", "High pT ESD Track Cuts"); |
85 | esdTrackCutsH->SetMinNClustersTPC(50); |
86 | esdTrackCutsH->SetMaxChi2PerClusterTPC(3.5); |
87 | esdTrackCutsH->SetRequireTPCRefit(kTRUE); |
88 | esdTrackCutsH->SetMaxDCAToVertexXY(2.4); |
89 | esdTrackCutsH->SetMaxDCAToVertexZ(3.2); |
90 | esdTrackCutsH->SetDCAToVertex2D(kTRUE); |
91 | esdTrackCutsH->SetRequireSigmaToVertex(kFALSE); |
92 | esdTrackCutsH->SetAcceptKinkDaughters(kFALSE); |
93 | esdTrackCutsH->SetRequireITSRefit(kTRUE); // additional cut |
94 | |
95 | |
a550fcbd |
96 | |
97 | // Compose the filter |
3ef9ce84 |
98 | AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter"); |
a550fcbd |
99 | // 1 |
3ef9ce84 |
100 | trackFilter->AddCuts(esdTrackCutsL); |
a550fcbd |
101 | // 2 |
099d8f33 |
102 | trackFilter->AddCuts(esdTrackCutsITSsa); |
a550fcbd |
103 | // 4 |
104 | trackFilter->AddCuts(itsStrong); |
105 | itsStrong->SetFilterMask(1); // AND with Standard track cuts |
106 | // 8 |
107 | trackFilter->AddCuts(electronID); |
108 | electronID->SetFilterMask(4); // AND with Pixel Cuts |
cfd26fc5 |
109 | // 16 |
110 | trackFilter->AddCuts(esdTrackCutsH); |
111 | |
a550fcbd |
112 | // Filter with cuts on V0s |
04f2cd11 |
113 | AliESDv0Cuts* esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts"); |
099d8f33 |
114 | esdV0Cuts->SetMinRadius(0.2); |
36cf8bb5 |
115 | esdV0Cuts->SetMaxRadius(200); |
099d8f33 |
116 | esdV0Cuts->SetMinDcaPosToVertex(0.05); |
117 | esdV0Cuts->SetMinDcaNegToVertex(0.05); |
36cf8bb5 |
118 | esdV0Cuts->SetMaxDcaV0Daughters(1.5); |
099d8f33 |
119 | esdV0Cuts->SetMinCosinePointingAngle(0.99); |
120 | AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter"); |
121 | v0Filter->AddCuts(esdV0Cuts); |
122 | |
3ef9ce84 |
123 | esdfilter->SetTrackFilter(trackFilter); |
099d8f33 |
124 | esdfilter->SetV0Filter(v0Filter); |
3ef9ce84 |
125 | |
f785fc59 |
126 | // Enable writing of Muon AODs |
48f1c230 |
127 | esdmuonfilter->SetWriteMuonAOD(writeMuonAOD); |
79bd4a7a |
128 | |
129 | // Enable writing of Dimuon AODs |
130 | esdmuonfilter->SetWriteDimuonAOD(writeDimuonAOD); |
cfd26fc5 |
131 | |
3ef9ce84 |
132 | // Create ONLY the output containers for the data produced by the task. |
133 | // Get and connect other common input/output containers via the manager as below |
134 | //============================================================================== |
135 | mgr->ConnectInput (esdfilter, 0, mgr->GetCommonInputContainer()); |
136 | mgr->ConnectOutput (esdfilter, 0, mgr->GetCommonOutputContainer()); |
099d8f33 |
137 | mgr->ConnectInput (esdmuonfilter, 0, mgr->GetCommonInputContainer()); |
138 | if (useKineFilter) { |
139 | mgr->ConnectInput (kinefilter, 0, mgr->GetCommonInputContainer()); |
140 | mgr->ConnectOutput (kinefilter, 0, mgr->GetCommonOutputContainer()); |
a3b51fd2 |
141 | AliAnalysisDataContainer *coutputEx = mgr->CreateContainer("cFilterList", TList::Class(), |
142 | AliAnalysisManager::kOutputContainer,"pyxsec_hists.root"); |
84c04254 |
143 | mgr->ConnectOutput (kinefilter, 1,coutputEx); |
3827f93a |
144 | } |
3ef9ce84 |
145 | return esdfilter; |
cfd26fc5 |
146 | } |
147 | |