/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/DTagAlg/DTagAlg-00-01-04/src/LocalPionSelector.cxx

Go to the documentation of this file.
00001 
00002 #include "GaudiKernel/Bootstrap.h"
00003 #include "GaudiKernel/IJobOptionsSvc.h"
00004 #include "GaudiKernel/ISvcLocator.h"
00005 #include "GaudiKernel/PropertyMgr.h"
00006 
00007 #include "EventModel/EventModel.h"
00008 #include "EventModel/EventHeader.h"
00009 #include "EvtRecEvent/EvtRecEvent.h"
00010 #include "EvtRecEvent/EvtRecTrack.h"
00011 #include "ParticleID/ParticleID.h"
00012 #include "DTagAlg/LocalPionSelector.h"
00013 
00014 #include "VertexFit/IVertexDbSvc.h"
00015 #include "VertexFit/VertexFit.h"
00016 #include "VertexFit/Helix.h"
00017 
00018 #include "SimplePIDSvc/ISimplePIDSvc.h"
00019 
00020 LocalPionSelector::LocalPionSelector()
00021 {
00022   m_pidtype=0;
00023  
00024   IJobOptionsSvc* jobSvc;
00025   Gaudi::svcLocator()->service("JobOptionsSvc", jobSvc);
00026   
00027   PropertyMgr m_propMgr;
00028   
00029   //Declare the properties
00030   m_propMgr.declareProperty("RxyCut",               m_VrCut           = 1.0);
00031   m_propMgr.declareProperty("Vz0Cut",               m_VzCut           = 10.0);
00032   m_propMgr.declareProperty("CosThetaCut",          m_CosThetaCut     = 0.93);
00033 
00034   m_propMgr.declareProperty("useSimplePID",         m_useSimplePID    = true);
00035 
00036   m_propMgr.declareProperty("PidUseDedx",           m_useDedx         = true);
00037   m_propMgr.declareProperty("PidUseTof1",           m_useTof1         = true);
00038   m_propMgr.declareProperty("PidUseTof2",           m_useTof2         = true);
00039   m_propMgr.declareProperty("PidUseTofE",           m_useTofE         = false);
00040   m_propMgr.declareProperty("PidUseTofQ",           m_useTofQ         = false);
00041   m_propMgr.declareProperty("PidUseEmc",            m_useEmc          = false);
00042   m_propMgr.declareProperty("PidUseMuc",            m_useMuc          = false);
00043   
00044   m_propMgr.declareProperty("PidwithProbability",   m_probability     = true);
00045   m_propMgr.declareProperty("PidProbCut",           m_PidProbCut      = 0.001);
00046   m_propMgr.declareProperty("RejectKaon",           m_rejectKaon      = true);
00047   m_propMgr.declareProperty("RejectProton",         m_rejectProton    = false);
00048   
00049   m_propMgr.declareProperty("PidwithLikelihood",    m_likelihood      = false);
00050   m_propMgr.declareProperty("PidwithNeuronNetwork", m_neuronNetwork   = false);
00051   m_neuronValCut.clear();
00052   m_neuronValCut.push_back(1.5);
00053   m_neuronValCut.push_back(2.5);
00054   m_propMgr.declareProperty("NeuronValue",      m_neuronValCut);
00055   
00056   jobSvc->setMyProperties("LocalPionSelector", &m_propMgr);
00057 }
00058 
00059 bool LocalPionSelector::operator() (CDChargedPion& aPion) {
00060 
00061   aPion.setUserTag(1);
00062   EvtRecTrack* recTrk = const_cast<EvtRecTrack*>( aPion.track() );
00063 
00064 
00065   // MDC track selection
00066 
00067   RecMdcKalTrack::setPidType(RecMdcKalTrack::pion);
00068   if ( !recTrk->isMdcKalTrackValid() ) return false;
00069   RecMdcKalTrack* mdcKalTrk = recTrk->mdcKalTrack();
00070   if ( mdcKalTrk->charge()==0 ) return false;
00071  
00072   Hep3Vector xorigin(0,0,0);
00073   IVertexDbSvc*  vtxsvc;
00074   Gaudi::svcLocator()->service("VertexDbSvc", vtxsvc);
00075   if(vtxsvc->isVertexValid()){
00076     double* dbv = vtxsvc->PrimaryVertex();
00077     double*  vv = vtxsvc->SigmaPrimaryVertex();
00078     xorigin.setX(dbv[0]);
00079     xorigin.setY(dbv[1]);
00080     xorigin.setZ(dbv[2]);
00081   }
00082   HepVector a = mdcKalTrk->getZHelix();
00083   HepSymMatrix Ea = mdcKalTrk->getZError();
00084   HepPoint3D point0(0.,0.,0.);
00085   HepPoint3D IP(xorigin[0],xorigin[1],xorigin[2]);
00086   VFHelix helixip3(point0,a,Ea);
00087   helixip3.pivot(IP);
00088   HepVector  vecipa = helixip3.a();
00089  
00090   double dr=fabs(vecipa[0]);
00091   double dz=fabs(vecipa[3]);
00092   double costheta=cos(mdcKalTrk->theta());
00093   if (  dr>= m_VrCut ) return false;
00094   if (  dz>= m_VzCut ) return false;
00095   if ( fabs(costheta) >= m_CosThetaCut ) return false;
00096 
00097 
00098   if(m_useSimplePID){
00099     // PID
00100     ISimplePIDSvc*         m_simplePIDSvc; 
00101     Gaudi::svcLocator()->service("SimplePIDSvc", m_simplePIDSvc);
00102     m_simplePIDSvc->preparePID(recTrk);
00103     if( !m_simplePIDSvc->ispion() ){
00104       aPion.setUserTag(2);
00105     }
00106   }
00107   else{
00108     //particleID pacakge
00109     ParticleID *pid = ParticleID::instance();
00110     pid->init();
00111     pid->setMethod(pid->methodProbability());
00112     pid->setChiMinCut(4);
00113     pid->setRecTrack(recTrk);
00114     pid->usePidSys(pid->useDedx() | pid->useTof1() | pid->useTof2() | pid->useTof() );
00115     pid->identify(pid->onlyPion() | pid->onlyKaon());
00116     pid->calculate();
00117 
00118     if( !(pid->probPion()>0 && pid->probPion()>pid->probKaon()) )
00119       aPion.setUserTag(2);
00120 
00121   }
00122   
00123   if(m_pidtype==0) return true;
00124   
00125   if(aPion.userTag()==1)
00126     return true;
00127   else
00128     return false;
00129   
00130 }
00131 
00132 LocalPionSelector pionSelector;

Generated on Tue Nov 29 23:13:09 2016 for BOSS_7.0.2 by  doxygen 1.4.7