-AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE)
+AliAnalysisTaskESDfilter *AddTaskESDFilter(Bool_t useKineFilter=kTRUE,
+ Bool_t writeMuonAOD=kFALSE,
+ Bool_t writeDimuonAOD=kFALSE,
+ Bool_t usePhysicsSelection=kFALSE,
+ Bool_t useCentralityTask=kFALSE,
+ Int_t tofTimeZeroType=AliESDpid::kTOF_T0,
+ Bool_t enableTPCOnlyAODTracks=kFALSE)
{
// Creates a filter task and adds it to the analysis manager.
return NULL;
}
- // Filtering of MC particles (decays conversions etc)
- // this task is also needed to set the MCEventHandler
- // to the AODHandler, this will not be needed when
- // AODHandler goes to ANALYSISalice
- if (useKineFilter) {
- AliAnalysisTaskMCParticleFilter *kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");
- mgr->AddTask(kinefilter);
- }
-
// Create the task, add it to the manager and configure it.
//===========================================================================
// Barrel tracks filter
AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
+ esdfilter->SetTimeZeroType(tofTimeZeroType);
+ esdfilter->DisableCascades();
+ esdfilter->DisableKinks();
+
mgr->AddTask(esdfilter);
+
// Muons
- AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter");
+ Bool_t onlyMuon=kTRUE;
+ Bool_t keepAllEvents=kTRUE;
+ Int_t mcMode=(useKineFilter ? 2 : 0); // use 1 instead of 2 to get all MC information instead of just ancestors of mu tracks
+ AliAnalysisTaskESDMuonFilter *esdmuonfilter = new AliAnalysisTaskESDMuonFilter("ESD Muon Filter",onlyMuon,keepAllEvents,mcMode);
mgr->AddTask(esdmuonfilter);
+ if(usePhysicsSelection){
+ esdfilter->SelectCollisionCandidates(AliVEvent::kAny);
+ esdmuonfilter->SelectCollisionCandidates(AliVEvent::kAny);
+ }
+
+ // Filtering of MC particles (decays conversions etc)
+ // this task has to go AFTER all other filter tasks
+ // since it fills the AODMC array with all
+ // selected MC Particles, only this way we have the
+ // AODMCparticle information available for following tasks
+ AliAnalysisTaskMCParticleFilter *kinefilter = 0;
+ if (useKineFilter) {
+ kinefilter = new AliAnalysisTaskMCParticleFilter("Particle Kine Filter");
+ mgr->AddTask(kinefilter);
+ }
+
+ AliAnalysisTaskAODCentralityMaker* ctask = 0;
+ if (useCentralityTask) {
+ ctask = new AliAnalysisTaskAODCentralityMaker("AODCentralityMaker");
+ ctask->SetDeltaAODFileName("AliAODCentrality.root");
+ mgr->AddTask(ctask);
+ }
+
// Cuts on primary tracks
- AliESDtrackCuts* esdTrackCutsL = new AliESDtrackCuts("AliESDtrackCuts", "Standard");
- esdTrackCutsL->SetMinNClustersTPC(50);
- esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
- esdTrackCutsL->SetMaxCovDiagonalElements(2, 2, 0.5, 0.5, 2);
- esdTrackCutsL->SetRequireTPCRefit(kTRUE);
- esdTrackCutsL->SetMaxDCAToVertexXY(3.0);
- esdTrackCutsL->SetMaxDCAToVertexZ(3.0);
- esdTrackCutsL->SetDCAToVertex2D(kTRUE);
- esdTrackCutsL->SetRequireSigmaToVertex(kFALSE);
- esdTrackCutsL->SetAcceptKinkDaughters(kFALSE);
+ AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+
// ITS stand-alone tracks
- AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("AliESDtrackCuts", "ITS stand-alone");
+ AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
esdTrackCutsITSsa->SetRequireITSStandAlone(kTRUE);
+ // Pixel OR necessary for the electrons
+ AliESDtrackCuts *itsStrong = new AliESDtrackCuts("ITSorSPD", "pixel requirement for ITS");
+ itsStrong->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kAny);
+
+
+ // PID for the electrons
+ AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
+ electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.);
+
+ // standard cuts with very loose DCA
+ AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
+ esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
+ esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
+ esdTrackCutsH->SetDCAToVertex2D(kTRUE);
+
+ // standard cuts with tight DCA cut
+ AliESDtrackCuts* esdTrackCutsH2 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+
+ // standard cuts with tight DCA but with requiring the first SDD cluster instead of an SPD cluster
+ // tracks selected by this cut are exclusive to those selected by the previous cut
+ AliESDtrackCuts* esdTrackCutsH3 = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010();
+ esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSPD, AliESDtrackCuts::kNone);
+ esdTrackCutsH3->SetClusterRequirementITS(AliESDtrackCuts::kSDD, AliESDtrackCuts::kFirst);
+
+ // TPC only tracks: Optionally enable the writing of TPConly information
+ // constrained to SPD vertex in the filter below
+ AliESDtrackCuts* esdTrackCutsTPCOnly = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+ esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
+
+ // Compose the filter
AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
+ // 1
trackFilter->AddCuts(esdTrackCutsL);
+ // 2
trackFilter->AddCuts(esdTrackCutsITSsa);
+ // 4
+ trackFilter->AddCuts(itsStrong);
+ itsStrong->SetFilterMask(1); // AND with Standard track cuts
+ // 8
+ trackFilter->AddCuts(electronID);
+ electronID->SetFilterMask(4); // AND with Pixel Cuts
+ // 16
+ trackFilter->AddCuts(esdTrackCutsH);
+ // 32
+ trackFilter->AddCuts(esdTrackCutsH2);
+ // 64
+ trackFilter->AddCuts(esdTrackCutsH3);
+ // 128 , 1 << 7
+ trackFilter->AddCuts(esdTrackCutsTPCOnly);
+ if(enableTPCOnlyAODTracks)esdfilter->SetTPCOnlyFilterMask(128);
- // Cuts on V0s
- AliESDv0Cuts* esdV0Cuts = new AliESDv0Cuts("AliESDv0Cuts", "Standard pp");
+ // Filter with cuts on V0s
+ AliESDv0Cuts* esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");
esdV0Cuts->SetMinRadius(0.2);
- esdV0Cuts->SetMaxRadius(100);
+ esdV0Cuts->SetMaxRadius(200);
esdV0Cuts->SetMinDcaPosToVertex(0.05);
esdV0Cuts->SetMinDcaNegToVertex(0.05);
- esdV0Cuts->SetMaxDcaV0Daughters(0.5);
+ esdV0Cuts->SetMaxDcaV0Daughters(1.5);
esdV0Cuts->SetMinCosinePointingAngle(0.99);
AliAnalysisFilter* v0Filter = new AliAnalysisFilter("v0Filter");
v0Filter->AddCuts(esdV0Cuts);
esdfilter->SetTrackFilter(trackFilter);
esdfilter->SetV0Filter(v0Filter);
-
+ // Enable writing of Muon AODs
+ esdmuonfilter->SetWriteMuonAOD(writeMuonAOD);
+
+ // Enable writing of Dimuon AODs
+ esdmuonfilter->SetWriteDimuonAOD(writeDimuonAOD);
+
// Create ONLY the output containers for the data produced by the task.
// Get and connect other common input/output containers via the manager as below
//==============================================================================
if (useKineFilter) {
mgr->ConnectInput (kinefilter, 0, mgr->GetCommonInputContainer());
mgr->ConnectOutput (kinefilter, 0, mgr->GetCommonOutputContainer());
+ AliAnalysisDataContainer *coutputEx = mgr->CreateContainer("cFilterList", TList::Class(),
+ AliAnalysisManager::kOutputContainer,"pyxsec_hists.root");
+ mgr->ConnectOutput (kinefilter, 1,coutputEx);
}
+ if (useCentralityTask) {
+ mgr->ConnectInput (ctask, 0, mgr->GetCommonInputContainer());
+ mgr->ConnectOutput(ctask, 0, mgr->GetCommonOutputContainer());
+ }
return esdfilter;
-}
+ }
+