2#include "GaudiKernel/Bootstrap.h"
3#include "GaudiKernel/IJobOptionsSvc.h"
4#include "GaudiKernel/ISvcLocator.h"
5#include "GaudiKernel/PropertyMgr.h"
7#include "EventModel/EventModel.h"
8#include "EventModel/EventHeader.h"
9#include "EvtRecEvent/EvtRecEvent.h"
10#include "EvtRecEvent/EvtRecTrack.h"
11#include "ParticleID/ParticleID.h"
12#include "DTagAlg/LocalPionSelector.h"
14#include "VertexFit/IVertexDbSvc.h"
15#include "VertexFit/VertexFit.h"
16#include "VertexFit/Helix.h"
18#include "SimplePIDSvc/ISimplePIDSvc.h"
24 IJobOptionsSvc* jobSvc;
25 Gaudi::svcLocator()->service(
"JobOptionsSvc", jobSvc);
27 PropertyMgr m_propMgr;
30 m_propMgr.declareProperty(
"RxyCut", m_VrCut = 1.0);
31 m_propMgr.declareProperty(
"Vz0Cut", m_VzCut = 10.0);
32 m_propMgr.declareProperty(
"CosThetaCut", m_CosThetaCut = 0.93);
34 m_propMgr.declareProperty(
"useSimplePID", m_useSimplePID =
true);
36 m_propMgr.declareProperty(
"PidUseDedx", m_useDedx =
true);
37 m_propMgr.declareProperty(
"PidUseTof1", m_useTof1 =
true);
38 m_propMgr.declareProperty(
"PidUseTof2", m_useTof2 =
true);
39 m_propMgr.declareProperty(
"PidUseTofE", m_useTofE =
false);
40 m_propMgr.declareProperty(
"PidUseTofQ", m_useTofQ =
false);
41 m_propMgr.declareProperty(
"PidUseEmc", m_useEmc =
false);
42 m_propMgr.declareProperty(
"PidUseMuc", m_useMuc =
false);
44 m_propMgr.declareProperty(
"PidwithProbability", m_probability =
true);
45 m_propMgr.declareProperty(
"PidProbCut", m_PidProbCut = 0.001);
46 m_propMgr.declareProperty(
"RejectKaon", m_rejectKaon =
true);
47 m_propMgr.declareProperty(
"RejectProton", m_rejectProton =
false);
49 m_propMgr.declareProperty(
"PidwithLikelihood", m_likelihood =
false);
50 m_propMgr.declareProperty(
"PidwithNeuronNetwork", m_neuronNetwork =
false);
51 m_neuronValCut.clear();
52 m_neuronValCut.push_back(1.5);
53 m_neuronValCut.push_back(2.5);
54 m_propMgr.declareProperty(
"NeuronValue", m_neuronValCut);
56 jobSvc->setMyProperties(
"LocalPionSelector", &m_propMgr);
70 if ( mdcKalTrk->
charge()==0 )
return false;
72 Hep3Vector xorigin(0,0,0);
74 Gaudi::svcLocator()->service(
"VertexDbSvc", vtxsvc);
85 HepPoint3D IP(xorigin[0],xorigin[1],xorigin[2]);
88 HepVector vecipa = helixip3.
a();
90 double dr=fabs(vecipa[0]);
91 double dz=fabs(vecipa[3]);
92 double costheta=
cos(mdcKalTrk->
theta());
93 if ( dr>= m_VrCut )
return false;
94 if ( dz>= m_VzCut )
return false;
95 if ( fabs(costheta) >= m_CosThetaCut )
return false;
101 Gaudi::svcLocator()->service(
"SimplePIDSvc", m_simplePIDSvc);
103 if( !m_simplePIDSvc->
ispion() ){
123 if(m_pidtype==0)
return true;
double cos(const BesAngle a)
LocalPionSelector pionSelector
virtual const EvtRecTrack * track() const
const double theta() const
static void setPidType(PidType pidType)
bool isMdcKalTrackValid()
RecMdcKalTrack * mdcKalTrack()
virtual void preparePID(EvtRecTrack *track)=0
virtual bool isVertexValid()=0
virtual double * SigmaPrimaryVertex()=0
virtual double * PrimaryVertex()=0
bool operator()(CDChargedPion &aPion)
int methodProbability() const
void setChiMinCut(const double chi=4)
void setRecTrack(EvtRecTrack *trk)
void setMethod(const int method)
void identify(const int pidcase)
void usePidSys(const int pidsys)
static ParticleID * instance()
const HepVector & getZHelix() const
const HepSymMatrix & getZError() const
const HepPoint3D & pivot(void) const
returns pivot position.
const HepVector & a(void) const
returns helix parameters.