/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RawDataCnv/RawDataCnv-00-04-35/src/RawDataTofDigiCnv.cxx

Go to the documentation of this file.
00001 //====================================================================
00002 //      RawDataTofDigiCnv.cxx
00003 //====================================================================
00004 //
00005 // Description: A converter class to unpack Event Filter packed raw   
00006 //              event persistent data and place it in the Transient    
00007 //              Data Store of Athena.
00008 //
00009 //--------------------------------------------------------------------
00010 
00011 // Include files.
00012 #include "GaudiKernel/MsgStream.h"
00013 #include "GaudiKernel/SmartDataPtr.h" 
00014 #include "GaudiKernel/IDataProviderSvc.h" 
00015 // for Mutil-thread by tianhl
00016 #include "GaudiKernel/ThreadGaudi.h"
00017 // for Mutil-thread by tianhl
00018 
00019 #include "EventModel/EventModel.h"
00020 #include "LumiDigi/LumiDigi.h"
00021 #include "TofRawEvent/TofDigi.h"
00022 #include "RawDataCnv/EventManagement/RAWEVENT.h" 
00023 #include "RawDataCnv/EventManagement/RawEvent.h" 
00024 #include "RawDataCnv/RawDataInputSvc.h" 
00025 #include "RawDataCnv/RawDataTofDigiCnv.h"
00026 
00027 
00028 extern const CLID& CLID_TofDigiCol;
00029 
00030 // Constructor.
00031 RawDataTofDigiCnv::RawDataTofDigiCnv(ISvcLocator* svc) : 
00032 RawDataBaseCnv(PACKEDRAWEVENT_StorageType, classID(), svc) 
00033 {
00034 }
00035 
00036 RawDataTofDigiCnv::~RawDataTofDigiCnv()
00037 {
00038    TofConverter::destroy();
00039 }
00040 
00041 // Return the identification number of this converter to the 
00042 // persistency service.
00043 const CLID& RawDataTofDigiCnv::classID()
00044 {
00045    return CLID_TofDigiCol;
00046 }
00047 
00048 StatusCode RawDataTofDigiCnv::initialize()
00049 {
00050    std::string PackedRawDataCnvSvc_Name("PackedRawDataCnvSvc");
00051    std::string RawDataInputSvc_Name("RawDataInputSvc");
00052    std::string RawDataTofDigiCnv_Name("RawDataTofDigiCnv");
00053 
00054    // for Mutil-thread by tianhl
00055    //ConversionSvc*  pCnvSvc = 0;
00056    //if (pCnvSvc = dynamic_cast<ConversionSvc*>(conversionSvc())){
00057    SmartIF<IService> pCnvSvc(conversionSvc());
00058       if  (isGaudiThreaded(pCnvSvc->name())){
00059          PackedRawDataCnvSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00060          RawDataInputSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00061          RawDataTofDigiCnv_Name += getGaudiThreadIDfromName(pCnvSvc->name());
00062       }
00063       //}
00064 
00065    StatusCode sc = RawDataBaseCnv::initialize();
00066    if ( sc.isFailure() ) {
00067       return sc;
00068    }
00069 
00070    MsgStream log(messageService(), RawDataTofDigiCnv_Name.c_str());
00071 
00072    // Check RawDataCnvSvc
00073    IService* isvc = 0;
00074    StatusCode status = serviceLocator()->service(PackedRawDataCnvSvc_Name.c_str(), isvc, true);
00075    m_RawDataAccess = dynamic_cast<PackedRawDataCnvSvc*> (isvc); 
00076    if(m_RawDataAccess  == 0 ) {
00077       log<<MSG::ERROR<< "  RawDataTofCnv: Cant cast to  RawDataCnvSvc " <<endreq; 
00078       return StatusCode::FAILURE ;
00079    }
00080 
00081    IService* svc ;
00082    sc = serviceLocator()->getService(RawDataInputSvc_Name.c_str(), svc);
00083    //if ( sc.isFailure() ) {
00084    //   log<<MSG::WARNING << " Cant get RawDataInputSvc " <<endreq;
00085    //   return sc ;
00086    //}
00087    m_inputSvc = dynamic_cast<RawDataInputSvc*> (svc);
00088    if ( m_inputSvc == 0 ) {
00089       log<<MSG::WARNING<< " Cant cast to  RawDataInputSvc " <<endreq;
00090       return StatusCode::FAILURE ;
00091    }
00092 
00093    m_cnv = TofConverter::instance();
00094 
00095    return StatusCode::SUCCESS; 
00096 }
00097 
00098 
00099 StatusCode RawDataTofDigiCnv::updateObj(IOpaqueAddress* pAddr, DataObject* pObj) {
00100     // Purpose and Method:  This method does nothing other than announce it has
00101     //   been called.
00102 
00103     //MsgStream log(msgSvc(), "RawDataTofDigiCnv");
00104     //log << MSG::DEBUG << "RawDataTofDigiCnv::updateObj" << endreq;
00105     return Converter::updateObj(pAddr, pObj);
00106 }
00107 
00108 // Create a converted object in the Transient Data Store.
00109 StatusCode RawDataTofDigiCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj)
00110 {
00111    MsgStream log(msgSvc(), "RawDataTofDigiCnv");
00112 
00113    uint32_t TEId, TEData, TEOverflow, TETorQ;
00114    TofDigi* tofDigi;
00115    // Purpose and Method:  This converter will create an empty TofDigiCol on
00116    //   the TDS.
00117    TofDigiCol *digiCol = new TofDigiCol;
00118    pObj = digiCol;
00119 
00120    //zoujh: for luminosity begin ...................
00121    LumiDigiCol *lumiDigiCol = 0;
00122    DataObject* pLumi;
00123    dataProvider()->findObject("/Event/Digi/LumiDigiCol", pLumi);
00124    if ( pLumi == NULL ) {
00125       lumiDigiCol = new LumiDigiCol;
00126       StatusCode sc = dataProvider()->registerObject("/Event/Digi/LumiDigiCol", lumiDigiCol);
00127       if ( sc.isFailure() ) {
00128          log << MSG::ERROR << "Could not register LumiDigiCol in TDS!" << endreq;
00129       }
00130    }
00131    else {
00132       lumiDigiCol = dynamic_cast<LumiDigiCol*>(pLumi);
00133    }
00134    //zoujh: for luminosity end ^^^^^^^^^^^^^^^^^^^^^
00135     
00136    RAWEVENT* evt = m_inputSvc->currentEvent(); 
00137    if (evt == NULL) {
00138      cout << "RawDataTofDigiCnv::createObj has no event!" << endl; 
00139      return StatusCode::FAILURE;
00140    }
00141 
00142    const BufferHolder& tofBuf = evt->getTofBuf();
00143    const BufferHolder& etfBuf = evt->getEtfBuf();
00144 
00145    return m_cnv->convert(tofBuf, etfBuf, digiCol, lumiDigiCol);
00146 }
00147 
00148 StatusCode RawDataTofDigiCnv::createRep(DataObject* pObj, IOpaqueAddress*& pAddr)  
00149 {
00150   // convert PixelRaw in the container into ByteStream
00151   //MsgStream log(messageService(), "RawDataTofDigiCnv");
00152 
00153   WriteRawEvent*& re = m_RawDataAccess->getRawEvent(); 
00154   if (re == 0) {
00155     //log << " get RawEvent failed !" << endreq;
00156     return StatusCode::FAILURE; 
00157   }
00158 
00159   SmartDataPtr<TofDigiCol> digiCol(dataProvider(), EventModel::Digi::TofDigiCol);
00160   if (digiCol == 0) {
00161     //log << "no TofDigiCol found" << endreq;
00162     return StatusCode::FAILURE;
00163   }
00164   /*
00165   else {
00166     log << MSG::INFO << endreq << "Detailed dump of 1st event: " << endreq << endreq;
00167     int ndigi = 0;
00168     TofDigiCol::const_iterator pTofDigi = digiCol->begin();
00169     for (pTofDigi; pTofDigi!= digiCol->end(); pTofDigi++) {
00170       log <<MSG::INFO << "Digi " << ndigi++ << " ";
00171       // output the digi proper:  " << digi " no longer works because
00172       // "digi" now returns an integer sort order
00173       (**pTofDigi).fillStream(log.stream());
00174       log << endreq;
00175     }
00176   }
00177   */
00178 
00179   return m_cnv->convert(digiCol, re);
00180 }

Generated on Tue Nov 29 22:58:32 2016 for BOSS_7.0.2 by  doxygen 1.4.7