00001 #include "GaudiKernel/MsgStream.h" 00002 // for Mutil-thread by tianhl 00003 #include "GaudiKernel/ThreadGaudi.h" 00004 // for Mutil-thread by tianhl 00005 00006 #include "RawDataCnv/RawDataAddress.h" 00007 #include "RawDataCnv/RawDataInputSvc.h" 00008 #include "RawDataCnv/PackedRawDataCnvSvc.h" 00009 #include "RawDataCnv/EventManagement/RAWEVENT.h" 00010 #include "EventModel/EventHeader.h" 00011 #include "RawDataCnv/RawDataEvtHeaderCnv.h" 00012 00013 extern const CLID& CLID_EventHeader; 00014 00015 RawDataEvtHeaderCnv::RawDataEvtHeaderCnv(ISvcLocator* svc) : 00016 RawDataBaseCnv(PACKEDRAWEVENT_StorageType, classID(), svc) 00017 { 00018 // for Mutil-thread by tianhl 00019 //init(); 00020 // for Mutil-thread by tianhl 00021 } 00022 00023 StatusCode RawDataEvtHeaderCnv::initialize() 00024 { 00025 StatusCode sc = RawDataBaseCnv::initialize(); 00026 if ( sc.isFailure() ) return sc; 00027 00028 std::string PackedRawDataCnvSvc_Name("PackedRawDataCnvSvc"); 00029 std::string RawDataInputSvc_Name("RawDataInputSvc"); 00030 std::string RawDataEvtHeaderCnv_Name("RawDataEvtHeaderCnv"); 00031 00032 // for Mutil-thread by tianhl 00033 //ConversionSvc* pCnvSvc = 0; 00034 //if (pCnvSvc = dynamic_cast<ConversionSvc*>(conversionSvc())){ 00035 SmartIF<IService> pCnvSvc(conversionSvc()); 00036 if (isGaudiThreaded(pCnvSvc->name())){ 00037 PackedRawDataCnvSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name()); 00038 RawDataInputSvc_Name += getGaudiThreadIDfromName(pCnvSvc->name()); 00039 RawDataEvtHeaderCnv_Name += getGaudiThreadIDfromName(pCnvSvc->name()); 00040 } 00041 //} 00042 // for Mutil-thread by tianhl 00043 MsgStream log(messageService(), RawDataEvtHeaderCnv_Name.c_str()); 00044 00045 IService* svc = 0; 00046 sc = serviceLocator()->service(PackedRawDataCnvSvc_Name.c_str(), svc); 00047 if ( sc.isFailure() ) { 00048 log << MSG::ERROR << "Can't get RawDataAccess interface" << endreq; 00049 return StatusCode::FAILURE; 00050 } 00051 00052 m_RawDataAccess = dynamic_cast<PackedRawDataCnvSvc*> (svc); 00053 if (m_RawDataAccess == 0 ) { 00054 log << MSG::ERROR << "RawDataEvtHeaderCnv: Cant cast to RawDataCnvSvc" << endreq; 00055 return StatusCode::FAILURE; 00056 } 00057 00058 sc = serviceLocator()->getService(RawDataInputSvc_Name.c_str(), svc); 00059 if ( sc.isFailure() ) { 00060 log << MSG::WARNING << "Cant get RawDataInputSvc " << endreq; 00061 return sc ; 00062 } 00063 00064 m_inputSvc = dynamic_cast<RawDataInputSvc*> (svc); 00065 if ( m_inputSvc == 0 ) { 00066 log << MSG::ERROR << "Cant cast to RawDataInputSvc" << endreq; 00067 return StatusCode::FAILURE ; 00068 } 00069 00070 return StatusCode::SUCCESS; 00071 } 00072 00073 const CLID& RawDataEvtHeaderCnv::classID() 00074 { 00075 return CLID_EventHeader; 00076 } 00077 00078 StatusCode RawDataEvtHeaderCnv::updateObj(IOpaqueAddress* pAddr, DataObject* pObj) { 00079 //MsgStream log(msgSvc(), "RawDataEvtHeaderCnv"); 00080 //log << MSG::DEBUG << "RawDataEvtHeaderCnv::updateObj" << endreq; 00081 return Converter::updateObj(pAddr, pObj); 00082 } 00083 00084 // Create a converted object in the Transient Data Store. 00085 StatusCode RawDataEvtHeaderCnv::createObj(IOpaqueAddress* pAddr, DataObject*& pObj) 00086 { 00087 StatusCode sc; 00088 RawDataAddress *pEFAddr; 00089 const RAWEVENT *evt; 00090 00091 Event::EventHeader *header = new Event::EventHeader(); 00092 pObj = header; 00093 00094 //if ( (pEFAddr = dynamic_cast<RawDataAddress*>(pAddr)) ) { 00095 evt = m_inputSvc->currentEvent(); 00096 00097 if (evt == NULL) return StatusCode::FAILURE; 00098 00099 header->setEventNumber(evt->eventHeader().event_number()); 00100 header->setRunNumber(evt->eventHeader().run_number()); 00101 header->setTime(evt->eventHeader().time()); 00102 header->setFlag1( evt->eventHeader().flag1() ); 00103 //header->setFlag2( evt->eventHeader().flag2() ); 00104 00105 00106 return StatusCode::SUCCESS; 00107 //} 00108 //else { 00109 // return StatusCode::FAILURE; 00110 //} 00111 00112 }