-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, /*obsolete*/
+ Int_t tofTimeZeroType=AliESDpid::kTOF_T0,
+ Bool_t enableTPCOnlyAODTracks=kFALSE,
+ Bool_t disableCascades=kFALSE,
+ Bool_t disableKinks=kFALSE)
{
// Creates a filter task and adds it to the analysis manager.
//===========================================================================
// Barrel tracks filter
AliAnalysisTaskESDfilter *esdfilter = new AliAnalysisTaskESDfilter("ESD Filter");
+ esdfilter->SetTimeZeroType(tofTimeZeroType);
+ if (disableCascades) esdfilter->DisableCascades();
+ if (disableKinks) 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
mgr->AddTask(kinefilter);
}
-
-
// 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::GetStandardITSTPCTrackCuts2011(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::GetStandardITSTPCTrackCuts2011();
+
+ // 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::GetStandardITSTPCTrackCuts2011();
+ 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();
+ // The following line is needed for 2010 PbPb reprocessing and pp, but not for 2011 PbPb
+ //esdTrackCutsTPCOnly->SetMinNClustersTPC(70);
+
+ // Extra cuts for hybrids
+ // first the global tracks we want to take
+ AliESDtrackCuts* esdTrackCutsHTG = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
+ esdTrackCutsHTG->SetName("Global Hybrid tracks, loose DCA");
+ esdTrackCutsHTG->SetMaxDCAToVertexXY(2.4);
+ esdTrackCutsHTG->SetMaxDCAToVertexZ(3.2);
+ esdTrackCutsHTG->SetDCAToVertex2D(kTRUE);
+ esdTrackCutsHTG->SetMaxChi2TPCConstrainedGlobal(36);
+
+ // Than the complementary tracks which will be stored as global
+ // constraint, complement is done in the ESDFilter task
+ AliESDtrackCuts* esdTrackCutsHTGC = new AliESDtrackCuts(*esdTrackCutsHTG);
+ esdTrackCutsHTGC->SetName("Global Constraint Hybrid tracks, loose DCA no it requirement");
+ esdTrackCutsHTGC->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kOff);
+ // esdTrackCutsHTGC->SetRequireITSRefit(kFALSE)
+
+ // standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
+ AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);
// Compose the filter
AliAnalysisFilter* trackFilter = new AliAnalysisFilter("trackFilter");
- // 1
+ // 1, 1<<0
trackFilter->AddCuts(esdTrackCutsL);
- // 2
+ // 2, 1<<1
trackFilter->AddCuts(esdTrackCutsITSsa);
- // 4
+ // 4, 1<<2
trackFilter->AddCuts(itsStrong);
itsStrong->SetFilterMask(1); // AND with Standard track cuts
- // 8
+ // 8, 1<<3
trackFilter->AddCuts(electronID);
electronID->SetFilterMask(4); // AND with Pixel Cuts
- // 16
+ // 16, 1<<4
trackFilter->AddCuts(esdTrackCutsH);
-
+ // 32, 1<<5
+ trackFilter->AddCuts(esdTrackCutsH2);
+ // 64, 1<<6
+ trackFilter->AddCuts(esdTrackCutsH3);
+ // 128 , 1 << 7
+ trackFilter->AddCuts(esdTrackCutsTPCOnly);
+ if(enableTPCOnlyAODTracks)esdfilter->SetTPCOnlyFilterMask(128);
+ // 256, 1 << 8 Global Hybrids
+ trackFilter->AddCuts(esdTrackCutsHTG);
+ esdfilter->SetHybridFilterMaskGlobalConstrainedGlobal((1<<8)); // these normal global tracks will be marked as hybrid
+ // 512, 1<< 9 GlobalConstraint Hybrids
+ trackFilter->AddCuts(esdTrackCutsHTGC);
+ esdfilter->SetGlobalConstrainedFilterMask(1<<9); // these tracks are written out as global constrained tracks
+ esdfilter->SetWriteHybridGlobalConstrainedOnly(kTRUE); // write only the complement
+ // 1024, 1<< 10
+ trackFilter->AddCuts(esdTrackCutsH2Cluster);
+
// 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