#include "AliESDEvent.h"
#include "AliESDVertex.h"
#include "AliESDtrack.h"
+#include "AliESDtrackCuts.h"
#include "AliAODEvent.h"
#include "AliAODRecoDecay.h"
#include "AliAODRecoDecayHF.h"
#include "AliAODRecoDecayHF2Prong.h"
#include "AliAODRecoDecayHF3Prong.h"
#include "AliAODRecoDecayHF4Prong.h"
+#include "AliAnalysisFilter.h"
#include "AliAnalysisVertexingHF.h"
ClassImp(AliAnalysisVertexingHF)
fJPSItoEle(kTRUE),
f3Prong(kTRUE),
f4Prong(kTRUE),
-fITSrefit(kFALSE),
-fBothSPD(kTRUE),
-fMinITSCls(5),
-fMinPtCut(0.),
-fMind0rphiCut(0.)
+fTrackFilter(0x0)
{
// Default constructor
SetDplusCuts();
SetDsCuts();
SetLcCuts();
+
}
//--------------------------------------------------------------------------
AliAnalysisVertexingHF::AliAnalysisVertexingHF(const AliAnalysisVertexingHF &source) :
fJPSItoEle(source.fJPSItoEle),
f3Prong(source.f3Prong),
f4Prong(source.f4Prong),
-fITSrefit(source.fITSrefit),
-fBothSPD(source.fBothSPD),
-fMinITSCls(source.fMinITSCls),
-fMinPtCut(source.fMinPtCut),
-fMind0rphiCut(source.fMind0rphiCut)
+fTrackFilter(source.fTrackFilter)
{
//
// Copy constructor
fJPSItoEle = source.fJPSItoEle;
f3Prong = source.f3Prong;
f4Prong = source.f4Prong;
- fITSrefit = source.fITSrefit;
- fBothSPD = source.fBothSPD;
- fMinITSCls = source.fMinITSCls;
- fMinPtCut = source.fMinPtCut;
- fMind0rphiCut = source.fMind0rphiCut;
+ fTrackFilter = source.fTrackFilter;
for(Int_t i=0; i<9; i++) fD0toKpiCuts[i]=source.fD0toKpiCuts[i];
for(Int_t i=0; i<9; i++) fBtoJPSICuts[i]=source.fBtoJPSICuts[i];
AliAnalysisVertexingHF::~AliAnalysisVertexingHF() {
// Destructor
if(fV1) { delete fV1; fV1=0; }
+ if(fTrackFilter) { delete fTrackFilter; fTrackFilter=0; }
}
//----------------------------------------------------------------------------
void AliAnalysisVertexingHF::FindCandidates(AliVEvent *event,
void AliAnalysisVertexingHF::PrintStatus() const {
// Print parameters being used
- printf("Preselections:\n");
- printf(" fITSrefit = %d\n",(Int_t)fITSrefit);
- printf(" fBothSPD = %d\n",(Int_t)fBothSPD);
- printf(" fMinITSCls = %d\n",fMinITSCls);
- printf(" fMinPtCut = %f GeV/c\n",fMinPtCut);
- printf(" fMind0rphiCut = %f cm\n",fMind0rphiCut);
+ //printf("Preselections:\n");
+ // fTrackFilter->Dump();
if(fSecVtxWithKF) {
printf("Secondary vertex with Kalman filter package (AliKFParticle)\n");
} else {
// transfer ITS tracks from event to arrays
for(Int_t i=0; i<entries; i++) {
-
AliVTrack *track = (AliVTrack*)event->GetTrack(i);
if(fInputAOD) {
fAODMap[(Int_t)aodt->GetID()] = i;
}
- // require refit in ITS
- UInt_t status = track->GetStatus();
- if(fITSrefit && !(status&AliESDtrack::kITSrefit)) {
- AliDebug(2,Form("track %d is not kITSrefit",i));
- continue;
- }
-
- Int_t ncls0=0;
- for(Int_t l=0;l<6;l++) if(TESTBIT(track->GetITSClusterMap(),l)) ncls0++;
-
- // require minimum # of ITS points
- if(ncls0<fMinITSCls) {
- AliDebug(2,Form("track %d has %d ITS cls",i,ncls0));
- continue;
- }
- // require points on the 2 pixel layers
- if(fBothSPD)
- if(!TESTBIT(track->GetITSClusterMap(),0) ||
- !TESTBIT(track->GetITSClusterMap(),1)) continue;
-
AliESDtrack *esdt = 0;
if(!fInputAOD) {
esdt = (AliESDtrack*)track;
}
// single track selection
- if(!SingleTrkCuts(*esdt)) {
+ if(!SingleTrkCuts(esdt)) {
if(fInputAOD) delete esdt;
esdt = NULL;
continue;
return;
}
//-----------------------------------------------------------------------------
-Bool_t AliAnalysisVertexingHF::SingleTrkCuts(AliESDtrack& trk) const
+Bool_t AliAnalysisVertexingHF::SingleTrkCuts(AliESDtrack *trk) const
{
// Check if track passes some kinematical cuts
- if(trk.Pt() < fMinPtCut) {
- //printf("pt %f\n",1./trk.GetParameter()[4]);
- return kFALSE;
- }
- Double_t d0z0[2],covd0z0[3];
- trk.PropagateToDCA(fV1,fBzkG,kVeryBig,d0z0,covd0z0);
- if(TMath::Abs(d0z0[0]) < fMind0rphiCut) {
- //printf("d0rphi %f\n",TMath::Abs(d0z0[0]));
- return kFALSE;
+ // this is needed to store the impact parameters
+ trk->RelateToVertex(fV1,fBzkG,kVeryBig);
+
+ UInt_t selectInfo = 0;
+ //
+ // Track selection
+ if(fTrackFilter) {
+ selectInfo = fTrackFilter->IsSelected(trk);
}
+ if (!selectInfo) return kFALSE;
+
return kTRUE;
}
//-----------------------------------------------------------------------------
#include "AliAODRecoDecayHF2Prong.h"
#include "AliAODRecoDecayHF3Prong.h"
#include "AliAODRecoDecayHF4Prong.h"
+#include "AliAnalysisFilter.h"
class AliESDtrack;
class AliVEvent;
{ fRecoPrimVtxSkippingTrks=kTRUE; fRmTrksFromPrimVtx=kFALSE;}
void SetRmTrksFromPrimVtx()
{fRmTrksFromPrimVtx=kTRUE; fRecoPrimVtxSkippingTrks=kFALSE; }
- void SetITSrefitRequired() { fITSrefit=kTRUE; }
- void SetITSrefitNotRequired() { fITSrefit=kFALSE; }
- void SetBothSPDRequired() { fBothSPD=kTRUE; }
- void SetBothSPDNotRequired() {fBothSPD=kFALSE;}
- void SetMinITSCls(Int_t n=6) { fMinITSCls=n; }
- void SetMinPtCut(Double_t pt=0.) { fMinPtCut=pt; }
- void SetMind0Cut(Double_t d0=0.) { fMind0rphiCut=d0; }
+ void SetTrackFilter(AliAnalysisFilter* trackF) { fTrackFilter = trackF; }
void SetD0toKpiCuts(Double_t cut0=1000.,Double_t cut1=100000.,
Double_t cut2=1.1,Double_t cut3=0.,Double_t cut4=0.,
Double_t cut5=100000.,Double_t cut6=100000.,
Bool_t f4Prong;
// single-track cuts
- Bool_t fITSrefit; // require kITSrefit
- Bool_t fBothSPD; // require both SPD layers
- Int_t fMinITSCls; // minimum number of ITS clusters
- Double_t fMinPtCut; // minimum track pt [GeV/c]
- Double_t fMind0rphiCut; // minimum track |rphi impact parameter| [cm]
+ AliAnalysisFilter *fTrackFilter; // Track Filter
// candidates cuts
Double_t fD0toKpiCuts[9]; // cuts on D0->Kpi candidates
// (to be passed to AliAODRecoDecayHF2Prong::SelectD0())
TObjArray &trksP,Int_t &nTrksP,
TObjArray &trksN,Int_t &nTrksN);
void SetPrimaryVertex(AliESDVertex *v1) { fV1 = v1; }
- Bool_t SingleTrkCuts(AliESDtrack &trk) const;
+ Bool_t SingleTrkCuts(AliESDtrack *trk) const;
//
- ClassDef(AliAnalysisVertexingHF,4) // Reconstruction of HF decay candidates
+ ClassDef(AliAnalysisVertexingHF,5) // Reconstruction of HF decay candidates
};
//--- secondary vertex with KF?
//vHF->SetSecVtxWithKF();
//--- set cuts for single-track selection
- vHF->SetITSrefitRequired();
- vHF->SetBothSPDRequired();
- vHF->SetMinITSCls(5);
- vHF->SetMinPtCut(0.3);
- vHF->SetMind0Cut(0.);
+
+ AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersITS(5);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kBoth);
+ esdTrackCuts->SetMinDCAToVertexXY(0.);
+ esdTrackCuts->SetPtRange(0.3,1.e10);
+ AliAnalysisFilter *trkFilter = new AliAnalysisFilter("trackFilter");
+ trkFilter->AddCuts(esdTrackCuts);
+ vHF->SetTrackFilter(trkFilter);
//--- set cuts for candidates selection
vHF->SetD0toKpiCuts(0.7,999999.,1.1,0.,0.,999999.,999999.,999999.,0.);
vHF->SetBtoJPSICuts(0.350);