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

Go to the documentation of this file.
00001 //====================================================================
00002 //      PackedRawDataCnvSvc.cpp
00003 //--------------------------------------------------------------------
00004 //
00005 //      Package    : AsciiFile Conversion Service 
00006 //
00007 //====================================================================
00008 
00009 static const char* rcsid = "$Id: PackedRawDataCnvSvc.cxx,v 1.24 2012/12/16 07:23:10 zoujh Exp $";
00010 
00011 // Include files
00012 #include "GaudiKernel/MsgStream.h"
00013 #include "GaudiKernel/ConversionSvc.h"
00014 #include "GaudiKernel/ISvcLocator.h"
00015 #include "GaudiKernel/SmartDataPtr.h"
00016 
00017 #include "EventModel/EventModel.h"
00018 #include "EventModel/EventHeader.h"
00019 #include "RawDataCnvBase/IRawDataCnvSvc.h"
00020 
00021 #include "RawDataCnv/ClassID_temp.h"
00022 #include "RawDataCnv/IRawDataOutputSvc.h"
00023 #include "RawDataCnv/RawDataCnv.h"
00024 #include "RawDataCnv/RawDataEvtHeaderCnv.h"
00025 #include "RawDataCnv/RawDataMcCnv.h"
00026 #include "RawDataCnv/RawDataMcParticleCnv.h"
00027 #include "RawDataCnv/RawDataMdcMcHitCnv.h"
00028 #include "RawDataCnv/RawDataTofMcHitCnv.h"
00029 #include "RawDataCnv/RawDataEmcMcHitCnv.h"
00030 #include "RawDataCnv/RawDataMucMcHitCnv.h"
00031 #include "RawDataCnv/RawDataDigiCnv.h"
00032 #include "RawDataCnv/RawDataMdcDigiCnv.h"
00033 #include "RawDataCnv/RawDataTofDigiCnv.h"
00034 #include "RawDataCnv/RawDataLumiDigiCnv.h"
00035 #include "RawDataCnv/RawDataEmcDigiCnv.h"
00036 #include "RawDataCnv/RawDataMucDigiCnv.h"
00037 #include "RawDataCnv/RawDataTrigCnv.h"
00038 #include "RawDataCnv/RawDataTrigGTDCnv.h"
00039 #include "RawDataCnv/RawDataHltCnv.h"
00040 #include "RawDataCnv/RawDataHltRawCnv.h"
00041 #include "RawDataCnv/RawDataZddEventCnv.h"
00042 #include "RawDataCnv/PackedRawDataCnvSvc.h"
00043 
00044 using namespace std;
00045 
00046 static const InterfaceID IID_IRawDataBaseCnv("IRawDataBaseCnv", 1 , 0); 
00047 
00049 PackedRawDataCnvSvc::PackedRawDataCnvSvc(const std::string& name, ISvcLocator* svc)
00050 : RawDataCnvSvc(name, svc, PACKEDRAWEVENT_StorageType)
00051 {
00052      declareProperty("RawDataOutputSvc", m_ioSvcName); 
00053      declareProperty("Status", m_status=0xFFFFFFFF);    //fucd
00054 }
00055 
00057 PackedRawDataCnvSvc::~PackedRawDataCnvSvc()
00058 {}
00059 
00061 StatusCode PackedRawDataCnvSvc::initialize()     {
00062   MsgStream log(messageService(), name());
00063   log << MSG::INFO << name() << " PackedRawDataCnvSvc::initialize RawDataOutputSvc:" << m_ioSvcName<< endreq;
00064 
00065   StatusCode sc = RawDataCnvSvc::initialize();
00066   if( sc.isFailure() ) {
00067     log << MSG::ERROR << "Unable to initialize service " << endreq;
00068     return sc;
00069   }
00070 
00071   IService* svc ;
00072   sc = service(m_ioSvcName, svc);
00073   if (sc != StatusCode::SUCCESS ) {
00074      log << MSG::WARNING << "Cant get RawDataOutputSvc " << endreq;
00075      //return sc ;
00076   }
00077  
00078   m_ioSvc = dynamic_cast<IRawDataOutputSvc*> (svc);
00079   if (m_ioSvc == 0 ) {
00080     log << MSG::WARNING << "Cant cast to  RawDataOutputSvc " << endreq;
00081     //return StatusCode::FAILURE;
00082   }
00083 
00084   return StatusCode::SUCCESS;
00085 }
00086 
00088 StatusCode PackedRawDataCnvSvc::addConverters() {
00089   MsgStream log(messageService(), name());
00090   //log << MSG::INFO << name() << " PackedRawDataCnvSvc::addConverters" << endreq;
00091   declareObject(IRawDataCnvSvc::Leaf(EventModel::EventH, RawDataCnv::classID(), "PASS", 0));
00092   //log << MSG::INFO << "EventModel::EventH " << RawDataCnv::classID() << endreq;
00093   declareObject(IRawDataCnvSvc::Leaf(EventModel::EventHeader, RawDataEvtHeaderCnv::classID(), "PASS", 0));
00094   //log << MSG::INFO << "EventModel::EventHeader " << RawDataEvtHeaderCnv::classID() << endreq;
00095   declareObject(IRawDataCnvSvc::Leaf(EventModel::MC::Event, RawDataMcCnv::classID(), "PASS", 0));
00096   declareObject(IRawDataCnvSvc::Leaf(EventModel::MC::McParticleCol, RawDataMcParticleCnv::classID(), "PASS", 0));
00097   declareObject(IRawDataCnvSvc::Leaf(EventModel::MC::MdcMcHitCol, RawDataMdcMcHitCnv::classID(), "PASS", 0));
00098   declareObject(IRawDataCnvSvc::Leaf(EventModel::MC::TofMcHitCol, RawDataTofMcHitCnv::classID(), "PASS", 0));
00099   declareObject(IRawDataCnvSvc::Leaf(EventModel::MC::EmcMcHitCol, RawDataEmcMcHitCnv::classID(), "PASS", 0));
00100   declareObject(IRawDataCnvSvc::Leaf(EventModel::MC::MucMcHitCol, RawDataMucMcHitCnv::classID(), "PASS", 0));
00101   declareObject(IRawDataCnvSvc::Leaf(EventModel::Digi::Event, RawDataDigiCnv::classID(), "PASS", 0));
00102   declareObject(IRawDataCnvSvc::Leaf(EventModel::Digi::MdcDigiCol, RawDataMdcDigiCnv::classID(), "PASS", 0));
00103   declareObject(IRawDataCnvSvc::Leaf(EventModel::Digi::TofDigiCol, RawDataTofDigiCnv::classID(), "PASS", 0));
00104   declareObject(IRawDataCnvSvc::Leaf(EventModel::Digi::LumiDigiCol,RawDataLumiDigiCnv::classID(), "PASS", 0));
00105   declareObject(IRawDataCnvSvc::Leaf(EventModel::Digi::EmcDigiCol, RawDataEmcDigiCnv::classID(), "PASS", 0));
00106   declareObject(IRawDataCnvSvc::Leaf(EventModel::Digi::MucDigiCol, RawDataMucDigiCnv::classID(), "PASS", 0));
00107   declareObject(IRawDataCnvSvc::Leaf(EventModel::Trig::Event, RawDataTrigCnv::classID(), "PASS", 0));
00108   declareObject(IRawDataCnvSvc::Leaf(EventModel::Trig::TrigGTDCol, RawDataTrigGTDCnv::classID(), "PASS", 0));
00109   declareObject(IRawDataCnvSvc::Leaf(EventModel::Hlt::Event, RawDataHltCnv::classID(), "PASS", 0));
00110   declareObject(IRawDataCnvSvc::Leaf(EventModel::Hlt::HltRawCol, RawDataHltRawCnv::classID(), "PASS", 0));
00111   declareObject(IRawDataCnvSvc::Leaf(EventModel::Zdd::ZddEvent, RawDataZddEventCnv::classID(), "PASS", 0));
00112 
00113   return StatusCode::SUCCESS;
00114 }
00115 
00117 StatusCode PackedRawDataCnvSvc::updateServiceState(IOpaqueAddress* pAddress)    {
00118   MsgStream log(messageService(), name());
00119   StatusCode sc = RawDataCnvSvc::updateServiceState(pAddress);
00120   //log << MSG::INFO << "In PackedRawDataCnvSvc::updateServiceState" << endreq;
00121   return sc;
00122 }
00123 
00124 StatusCode PackedRawDataCnvSvc::queryInterface(const InterfaceID& riid, void** ppvInterface)  {
00125   if ( IID_IRawDataBaseCnv == riid ) {
00126      *ppvInterface = (IRawDataCnvSvc*)this;
00127   } else {
00128       // Interface is not directly availible: try out a base class
00129      return ConversionSvc::queryInterface(riid, ppvInterface);
00130   }
00131   addRef();
00132   return StatusCode::SUCCESS;
00133 }
00134 
00135 StatusCode PackedRawDataCnvSvc::connectOutput(const std::string& /* t */)
00136 {
00137  
00138    MsgStream log(messageService(), name() );
00139  
00140    log << MSG::DEBUG << " In connectOutput "<< endreq;
00141  
00142    // Get DataObj from TDS
00143    SmartDataPtr<Event::EventHeader> evt(dataProvider(), EventModel::EventHeader);
00144    if (!evt) {
00145        log << MSG::ERROR << "Did not retrieve event" << endreq;
00146        return StatusCode::FAILURE;
00147    }
00148    unsigned int eventNo = evt->eventNumber();
00149    unsigned int runNo = evt->runNumber();
00150  
00151    m_rawEvent = new WriteRawEvent(0x790000, // source_id
00152                                   eventNo,  // global_id
00153                                   runNo,    // run_no
00154                                   eventNo,  // lel1_id
00155                                   0,        // lel1_type
00156                                   0,        // lel2_info
00157                                   ef_info   // ef_info
00158        );
00159    //const unsigned int status = 0;  // place holder for status
00160    if(m_status!=0xFFFFFFFF) m_rawEvent->status(1, &m_status);
00161    else         m_rawEvent->status(0, NULL);               //fucd
00162  
00163    return StatusCode::SUCCESS;
00164 }
00165 
00166 StatusCode PackedRawDataCnvSvc::commitOutput(const std::string& /* t*/ , bool /*b*/ )
00167 {
00168    MsgStream log(messageService(), name() );
00169  
00170    log << MSG::DEBUG << "In flushOutput" << endreq;
00171  
00172    if (!m_ioSvc) {
00173       log << MSG::ERROR << "RawDataCnvSvc not configure for output" << endreq;
00174       return StatusCode::FAILURE;
00175    }
00176  
00177    /*if (!m_rawEvent->is_valid()) {
00178      log << MSG::ERROR << "commitOutput failed, because FullEventFragment invalid"
00179          << m_rawEvent << endreq;
00180      return StatusCode::FAILURE;
00181    }*/
00182  
00183    log << MSG::DEBUG << "commitOutput: Size of Event (words) ="
00184        << m_rawEvent->size_word() <<  endreq;
00185  
00186    if (!m_ioSvc->putEvent(m_rawEvent) ) {
00187      log << MSG::ERROR << "commitOutput failed to send output" << endreq;
00188      return StatusCode::FAILURE;
00189    }
00190 
00191    // delete ...
00192    const eformat::write::SubDetectorFragment* sd = m_rawEvent->first_child();
00193    while ( sd != 0) {
00194      const eformat::write::ROSFragment* ros = sd->first_child();
00195      while (ros != 0) {
00196        const eformat::write::ROBFragment* rob = ros->first_child();
00197        while (rob != 0) {
00198          const eformat::write::ROBFragment* rob_tmp = rob;
00199          rob = rob->next();
00200          delete rob_tmp;
00201        }
00202        const eformat::write::ROSFragment* ros_tmp = ros;
00203        ros = ros->next();
00204        delete ros_tmp;
00205      }
00206      const eformat::write::SubDetectorFragment* sd_tmp = sd;
00207      sd = sd->next();
00208      delete sd_tmp;
00209    }
00210    delete m_rawEvent;
00211  
00212    return StatusCode::SUCCESS;
00213 }
00214 

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