00001 #include "GaudiKernel/Bootstrap.h" 00002 #include "GaudiKernel/IJobOptionsSvc.h" 00003 #include "GaudiKernel/ISvcLocator.h" 00004 #include "GaudiKernel/PropertyMgr.h" 00005 00006 #include "CLHEP/Vector/LorentzVector.h" 00007 #include "DTagAlg/ChargedDSelector.h" 00008 00009 00010 ChargedDSelector::ChargedDSelector( ){ 00011 00012 IJobOptionsSvc* jobSvc; 00013 Gaudi::svcLocator()->service("JobOptionsSvc", jobSvc); 00014 00015 PropertyMgr m_propMgr; 00016 00017 m_propMgr.declareProperty("UseMbcCuts", m_useMbcCuts = true ); 00018 m_propMgr.declareProperty("UseDeltaECuts", m_useDeltaECuts = true ); 00019 m_propMgr.declareProperty("UseDeltaMassCuts", m_useDeltaMassCuts = false ); 00020 00021 m_propMgr.declareProperty("DMbcMinCut", m_minMbc = 1.83 ); 00022 m_propMgr.declareProperty("DMbcMaxCut", m_maxMbc = 10.0 ); 00023 m_propMgr.declareProperty("DDeltaEMinCut", m_minDeltaE = -0.1 ); 00024 m_propMgr.declareProperty("DDeltaEMaxCut", m_maxDeltaE = +0.1 ); 00025 m_propMgr.declareProperty("DDeltaMassMinCut", m_minDeltaMass = -0.085 ); 00026 m_propMgr.declareProperty("DDeltaMassMaxCut", m_maxDeltaMass = +0.085 ); 00027 00028 jobSvc->setMyProperties("ChargedDSelector", &m_propMgr); 00029 } 00030 00031 bool ChargedDSelector::operator() (CDDecay& theD) { 00032 00034 HepLorentzVector p4( theD.momentum(), theD.energy() ); 00035 p4.boost(-m_beta); 00036 double mbc2 = m_ebeam*m_ebeam - p4.v().mag2(); 00037 double mbc = mbc2 > 0 ? sqrt( mbc2 ) : -10; 00038 double deltaE = p4.t() - m_ebeam; 00039 00040 if(m_useMbcCuts&&((mbc <= m_minMbc)||(mbc >= m_maxMbc))) return false; 00041 if(m_useDeltaECuts&&((deltaE <= m_minDeltaE)||(deltaE >= m_maxDeltaE))) return false; 00042 00044 double chargedDMass = 1.8696; 00045 double deltaMass = theD.mass() - chargedDMass; 00046 00047 if(m_useDeltaMassCuts && 00048 ((deltaMass <= m_minDeltaMass)||(deltaMass >= m_maxDeltaMass))) return false; 00049 00050 00051 return true; 00052 } 00053 00054 00055 ChargedDSelector chargedDSelector;