1#include "GaudiKernel/Bootstrap.h"
2#include "GaudiKernel/IJobOptionsSvc.h"
3#include "GaudiKernel/ISvcLocator.h"
4#include "GaudiKernel/PropertyMgr.h"
6#include "EvtRecEvent/EvtRecVeeVertex.h"
7#include "DTagAlg/LocalKsSelector.h"
8#include "VertexFit/VertexFit.h"
9#include "VertexFit/SecondVertexFit.h"
10#include "VertexFit/IVertexDbSvc.h"
14 IJobOptionsSvc* jobSvc;
15 Gaudi::svcLocator()->service(
"JobOptionsSvc", jobSvc);
17 PropertyMgr m_propMgr;
19 m_propMgr.declareProperty(
"KsMinMassCut", m_minMass = 0.470 );
20 m_propMgr.declareProperty(
"KsMaxMassCut", m_maxMass = 0.528 );
21 m_propMgr.declareProperty(
"KsMaxChisq", m_maxChisq = 100 );
23 m_propMgr.declareProperty(
"DoSecondaryVFit", m_doSecondaryVFit =
false );
24 m_propMgr.declareProperty(
"KsMaxVFitChisq", m_maxVFitChisq = 100 );
25 m_propMgr.declareProperty(
"KsMinFlightSig", m_minFlightSig = 2.0 );
27 jobSvc->setMyProperties(
"LocalKsSelector", &m_propMgr);
35 if ( ks->
vertexId() != 310 )
return false;
38 if ((
mass <= m_minMass)||(
mass >= m_maxMass))
return false;
39 if ( ks->
chi2() >= m_maxChisq )
return false;
41 if( !m_doSecondaryVFit )
return true;
59 HepSymMatrix evWideVertex(3, 0);
61 evWideVertex[0][0] = 1.0e12;
62 evWideVertex[1][1] = 1.0e12;
63 evWideVertex[2][2] = 1.0e12;
65 wideVertex.
setVx(vWideVertex);
66 wideVertex.
setEvx(evWideVertex);
73 vtxfit->
AddTrack(0,veeInitialWTrack1);
74 vtxfit->
AddTrack(1,veeInitialWTrack2);
89 HepSymMatrix evBeamSpot(3, 0);
92 Gaudi::svcLocator()->service(
"VertexDbSvc", vtxsvc);
96 for (
unsigned int ivx = 0; ivx < 3; ivx++){
97 vBeamSpot[ivx] = dbv[ivx];
98 evBeamSpot[ivx][ivx] = vv[ivx] * vv[ivx];
102 cout <<
"KSSELECTOR ERROR: Could not find a vertex from VertexDbSvc" << endl;
106 beamSpot.
setVx(vBeamSpot);
107 beamSpot.
setEvx(evBeamSpot);
120 if( !svtxfit->
Fit() )
return false;
125 double vfitchi2 = svtxfit->
chisq();
126 double flightsig = 0;
128 flightsig = vfitlength/vfiterror;
132 if( vfitchi2 > m_maxVFitChisq )
return false;
133 if( flightsig < m_minFlightSig )
return false;
LocalKsSelector ksSelector
virtual const EvtRecVeeVertex * navKshort() const
static void setPidType(PidType pidType)
RecMdcKalTrack * mdcKalTrack()
std::pair< SmartRef< EvtRecTrack >, SmartRef< EvtRecTrack > > & pairDaughters()
virtual bool isVertexValid()=0
virtual double * SigmaPrimaryVertex()=0
virtual double * PrimaryVertex()=0
bool operator()(CDKs &aKs)
const HepVector & getZHelix() const
const HepSymMatrix & getZError() const
void setPrimaryVertex(const VertexParameter vpar)
double decayLength() const
double decayLengthError() const
static SecondVertexFit * instance()
void setVpar(const VertexParameter vpar)
void AddTrack(const int number, const double mass, const RecMdcTrack *trk)
WTrackParameter wVirtualTrack(int n) const
void AddVertex(int number, VertexParameter vpar, std::vector< int > lis)
static VertexFit * instance()
VertexParameter vpar(int n) const
void BuildVirtualParticle(int number)
void setEvx(const HepSymMatrix &eVx)
void setVx(const HepPoint3D &vx)