-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
- AliAnalysisTaskMCParticleFilter *kinefilter = 0;
- if (useKineFilter) {
- 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("Standard Track Cuts", "ESD Track Cuts");
- esdTrackCutsL->SetMinNClustersTPC(50);
- esdTrackCutsL->SetMaxChi2PerClusterTPC(3.5);
- esdTrackCutsL->SetRequireTPCRefit(kTRUE);
- esdTrackCutsL->SetMaxDCAToVertexXY(2.4);
- esdTrackCutsL->SetMaxDCAToVertexZ(3.2);
- esdTrackCutsL->SetDCAToVertex2D(kTRUE);
- esdTrackCutsL->SetRequireSigmaToVertex(kFALSE);
- esdTrackCutsL->SetAcceptKinkDaughters(kFALSE);
+ AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
// ITS stand-alone tracks
AliESDtrackCuts* esdTrackCutsITSsa = new AliESDtrackCuts("ITS stand-alone Track Cuts", "ESD Track Cuts");
AliESDpidCuts *electronID = new AliESDpidCuts("Electrons", "Electron PID cuts");
electronID->SetTPCnSigmaCut(AliPID::kElectron, 3.);
- // tighter cuts on primary particles for high pT tracks
- // needed as input for jetfinder
- AliESDtrackCuts* esdTrackCutsH = new AliESDtrackCuts("Standard Track Cuts + ITSRefit", "High pT ESD Track Cuts");
- esdTrackCutsH->SetMinNClustersTPC(50);
- esdTrackCutsH->SetMaxChi2PerClusterTPC(3.5);
- esdTrackCutsH->SetRequireTPCRefit(kTRUE);
+ // standard cuts with very loose DCA
+ AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kFALSE);
esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
esdTrackCutsH->SetDCAToVertex2D(kTRUE);
- esdTrackCutsH->SetRequireSigmaToVertex(kFALSE);
- esdTrackCutsH->SetAcceptKinkDaughters(kFALSE);
- esdTrackCutsH->SetRequireITSRefit(kTRUE); // additional cut
+ // 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");
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);
+
// Filter with cuts on V0s
AliESDv0Cuts* esdV0Cuts = new AliESDv0Cuts("Standard V0 Cuts pp", "ESD V0 Cuts");
esdV0Cuts->SetMinRadius(0.2);
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
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;
}