/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Reconstruction/MdcPatRec/MdcTrkRecon/MdcTrkRecon-00-03-45/src/MdcMakeHits.cxx

Go to the documentation of this file.
00001 #include <CLHEP/Units/PhysicalConstants.h>
00002 #include <CLHEP/Geometry/Point3D.h>
00003 #include "MdcTrkRecon/MdcMakeHits.h"
00004 #include "MdcData/MdcHitMap.h"
00005 #include "MdcData/MdcHit.h"
00006 #include "GaudiKernel/MsgStream.h"
00007 #include "GaudiKernel/AlgFactory.h"
00008 #include "GaudiKernel/ISvcLocator.h"
00009 #include "GaudiKernel/SmartDataPtr.h"
00010 #include "GaudiKernel/IDataProviderSvc.h"
00011 #include "GaudiKernel/IDataManagerSvc.h"
00012 #include "GaudiKernel/PropertyMgr.h" 
00013 #include "MdcRawEvent/MdcDigi.h"
00014 #include "EventModel/Event.h"
00015 #include "MdcGeom/MdcSWire.h"
00016 #include "MdcGeom/MdcLayer.h"
00017 #include "MdcGeom/MdcDetector.h"
00018 #include "Identifier/MdcID.h"
00019 #include "MdcCalibFunSvc/IMdcCalibFunSvc.h"
00020 #include "MdcCalibFunSvc/MdcCalibFunSvc.h"
00021 #include "GaudiKernel/INTupleSvc.h"
00022 #include "RawDataProviderSvc/IRawDataProviderSvc.h"
00023 #include "RawDataProviderSvc/MdcRawDataProvider.h"
00024 
00025 #include <vector>
00026 #include <iostream>
00027 using namespace std;
00028 using namespace Event;
00029 
00030 
00031 extern const CLID & CLID_MdcHitCol;
00032 
00033 
00035 
00036 MdcMakeHits::MdcMakeHits(const std::string& name, ISvcLocator* pSvcLocator) :
00037   Algorithm(name, pSvcLocator)
00038 {
00039   // Declare the properties  
00040   declareProperty("cosmicFit",    m_cosmicFit= false);
00041   declareProperty("doSag",        m_doSag= false);
00042   declareProperty("countPropTime",m_countPropTime = true);
00043 
00044   declareProperty("getDigiFlag",  m_getDigiFlag = 0);
00045   declareProperty("maxMdcDigi",   m_maxMdcDigi= 0);
00046   declareProperty("keepBadTdc",   m_keepBadTdc= 0);
00047   declareProperty("dropHot",      m_dropHot= 0);
00048   declareProperty("keepUnmatch",  m_keepUnmatch= 0);
00049   declareProperty("minMdcDigi",   m_minMdcDigi = 0);
00050   declareProperty("combineTracking",m_combineTracking = false);//yzhang 2010-05-28 
00051 
00052 #ifdef MDCPATREC_RESLAYER
00053   declareProperty("resLayer",  m_resLayer= -1);
00054 #endif
00055 }
00056 
00057 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
00058 StatusCode MdcMakeHits::beginRun(){
00059   _gm = MdcDetector::instance(m_doSag);
00060   if(NULL == _gm) return StatusCode::FAILURE;
00061   return StatusCode::SUCCESS;
00062 }
00063 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
00064 StatusCode MdcMakeHits::initialize(){
00065 
00066   MsgStream log(msgSvc(), name());
00067   log << MSG::INFO << "in initialize()" << endreq;
00068 
00069   StatusCode sc;
00070 
00071   IMdcCalibFunSvc* imdcCalibSvc; 
00072   sc = service ("MdcCalibFunSvc",imdcCalibSvc);
00073   m_mdcCalibFunSvc = dynamic_cast<MdcCalibFunSvc*> (imdcCalibSvc);
00074   if ( sc.isFailure() ){
00075     log << MSG::FATAL << "Could not load MdcCalibFunSvc!" << endreq;
00076   }
00077 
00078   IRawDataProviderSvc* irawDataProviderSvc;
00079   sc = service ("RawDataProviderSvc", irawDataProviderSvc);
00080   m_rawDataProviderSvc = dynamic_cast<RawDataProviderSvc*> (irawDataProviderSvc);
00081   if ( sc.isFailure() ){
00082     log << MSG::FATAL << "Could not load RawDataProviderSvc!" << endreq;
00083     return StatusCode::FAILURE;
00084   } 
00085 
00086   return StatusCode::SUCCESS;
00087 }
00088 
00089 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
00090 StatusCode MdcMakeHits::execute() {
00091   MsgStream log(msgSvc(), name());
00092   log << MSG::INFO << "in execute()" << endreq;
00093   StatusCode sc;
00094 
00095   DataObject *pnode = 0;
00096   sc = eventSvc()->retrieveObject("/Event/Hit",pnode);
00097   if(!sc.isSuccess()) {
00098     pnode = new DataObject;
00099     sc = eventSvc()->registerObject("/Event/Hit",pnode);
00100     if(!sc.isSuccess()) {
00101       log << MSG::FATAL << " Could not register hit branch" <<endreq;
00102       return StatusCode::FAILURE;
00103     }
00104   }
00105 
00106   SmartIF<IDataManagerSvc> dataManSvc(eventSvc()); 
00107   DataObject *hitCol;
00108   eventSvc()->findObject("/Event/Hit/MdcHitCol",hitCol);
00109   if(hitCol!= NULL) {
00110     dataManSvc->clearSubTree("/Event/Hit/MdcHitCol");
00111     eventSvc()->unregisterObject("/Event/Hit/MdcHitCol");
00112   }
00113   MdcHitCol *mdcHitCol = new MdcHitCol;
00114   sc = eventSvc()->registerObject("/Event/Hit/MdcHitCol",mdcHitCol);
00115   if(!sc.isSuccess()) {
00116     log << MSG::FATAL << " Could not register hit collection" <<endreq;
00117     return StatusCode::FAILURE;
00118   } 
00119 
00120   DataObject *hitMap;
00121   eventSvc()->findObject("/Event/Hit/MdcHitMap",hitMap);
00122   if(hitMap!= NULL) {
00123     dataManSvc->clearSubTree("/Event/Hit/MdcHitMap");
00124     eventSvc()->unregisterObject("/Event/Hit/MdcHitMap");
00125   }
00126   MdcHitMap *mdcHitMap = new MdcHitMap(*_gm);
00127   sc = eventSvc()->registerObject("/Event/Hit/MdcHitMap",mdcHitMap);
00128   if(!sc.isSuccess()) {
00129     log << MSG::FATAL << " Could not register hit map" <<endreq;
00130     return StatusCode::FAILURE;
00131   } 
00132 
00133   // retrieve Mdc digi vector form RawDataProviderSvc 
00134   uint32_t getDigiFlag = 0;
00135   getDigiFlag += m_maxMdcDigi;
00136   if(m_dropHot || m_combineTracking)getDigiFlag |= MdcRawDataProvider::b_dropHot;
00137   if(m_keepBadTdc)  getDigiFlag |= MdcRawDataProvider::b_keepBadTdc;
00138   if(m_keepUnmatch) getDigiFlag |= MdcRawDataProvider::b_keepUnmatch;
00139   MdcDigiVec mdcDigiVec = m_rawDataProviderSvc->getMdcDigiVec(getDigiFlag);
00140 
00141   //std::cout<<__FILE__<<" nDigi = "<<mdcDigiVec.size()<<  std::endl;
00142   if ((int)mdcDigiVec.size()<m_minMdcDigi){
00143     log << MSG::WARNING << " Skip this event for MdcDigiVec.size() < "<<m_minMdcDigi << endreq;
00144     return StatusCode::SUCCESS;
00145   }
00146 
00147   MdcDigiVec::iterator iter = mdcDigiVec.begin();
00148   for (;iter != mdcDigiVec.end(); iter++ ) {
00149     const MdcDigi* aDigi = *iter;
00150     MdcHit *hit = new MdcHit(aDigi, _gm);
00151     hit->setCalibSvc(m_mdcCalibFunSvc);
00152     hit->setCosmicFit(m_cosmicFit);
00153     hit->setCountPropTime(m_countPropTime);
00154 #ifdef MDCPATREC_RESLAYER
00155     hit->setResLayer(m_resLayer);
00156 #endif
00157     mdcHitCol->push_back(hit);
00158     mdcHitMap->addHit(*hit);
00159   }
00160   return StatusCode::SUCCESS;
00161 }
00162 
00163 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
00164 StatusCode MdcMakeHits::finalize() {
00165 
00166   MsgStream log(msgSvc(), name());
00167   log << MSG::INFO << "in finalize()" << endreq;
00168 
00169   return StatusCode::SUCCESS;
00170 }
00171 

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