00001 #include "GaudiKernel/MsgStream.h" 00002 #include "GaudiKernel/DataObject.h" 00003 #include "GaudiKernel/ObjectVector.h" 00004 00005 #include "TClonesArray.h" 00006 00007 #include "EventModel/EventModel.h" 00008 #include "LumiDigi/LumiDigi.h" 00009 #include "RootEventData/TLumiDigi.h" 00010 #include "RootCnvSvc/Digi/DigiCnv.h" 00011 #include "RootCnvSvc/Digi/LumiDigiCnv.h" 00012 #include "RootCnvSvc/RootAddress.h" 00013 00014 LumiDigiCnv::LumiDigiCnv(ISvcLocator* svc) 00015 : RootEventBaseCnv(classID(), svc) 00016 { 00017 m_rootBranchname = "m_lumiDigiCol"; 00018 00019 m_adresses.push_back(&m_lumiDigiCol); 00020 m_lumiDigiCol = 0; 00021 } 00022 00023 StatusCode LumiDigiCnv::TObjectToDataObject(DataObject*& refpObject) { 00024 // creation of TDS object from root object 00025 00026 MsgStream log(msgSvc(), "LumiDigiCnv"); 00027 log << MSG::DEBUG << "LumiDigiCnv::TObjectToDataObject" << endreq; 00028 StatusCode sc = StatusCode::SUCCESS; 00029 00030 LumiDigiCol* lumiDigiTdsCol = new LumiDigiCol; 00031 refpObject = lumiDigiTdsCol; 00032 00033 if ( !m_lumiDigiCol ) return sc; 00034 TIter lumiDigiIter(m_lumiDigiCol); 00035 TLumiDigi* lumiDigiRoot = 0; 00036 while ((lumiDigiRoot = (TLumiDigi*)lumiDigiIter.Next())) { 00037 LumiDigi* lumiDigiTds = new LumiDigi( lumiDigiRoot->getIntId() ); 00038 m_common.m_rootLumiDigiMap[lumiDigiRoot] = lumiDigiTds; 00039 00040 lumiDigiTds->setTimeChannel( lumiDigiRoot->getTimeChannel() ); 00041 lumiDigiTds->setChargeChannel( lumiDigiRoot->getChargeChannel() ); 00042 lumiDigiTds->setOverflow( lumiDigiRoot->getOverflow() ); 00043 00044 lumiDigiTdsCol->push_back(lumiDigiTds); 00045 } 00046 00047 delete m_lumiDigiCol; 00048 m_lumiDigiCol = 0; 00049 return sc; 00050 } 00051 00052 StatusCode LumiDigiCnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) { 00053 00054 MsgStream log(msgSvc(), "LumiDigiCnv"); 00055 log << MSG::DEBUG << "LumiDigiCnv::DataObjectToTObject" << endreq; 00056 StatusCode sc = StatusCode::SUCCESS; 00057 00058 LumiDigiCol* lumiDigiColTds = dynamic_cast<LumiDigiCol*>(obj); 00059 if ( !lumiDigiColTds ) { 00060 log << MSG::ERROR << "Could not downcast to LumiDigiCol" << endreq; 00061 return StatusCode::FAILURE; 00062 } 00063 00064 DataObject* evt; 00065 m_eds->findObject(EventModel::Digi::Event, evt); 00066 if ( evt == NULL ) { 00067 log << MSG::ERROR << "Could not get DigiEvent in TDS" << endreq; 00068 return StatusCode::FAILURE; 00069 } 00070 DigiEvent* devtTds = dynamic_cast<DigiEvent*>(evt); 00071 if ( !devtTds ) { 00072 log << MSG::ERROR << "LumiDigiCnv: Could not downcast to TDS DigiEvent" << endreq; 00073 } 00074 IOpaqueAddress* addr; 00075 00076 m_cnvSvc->getDigiCnv()->createRep(evt, addr); 00077 00078 TDigiEvent* recEvt = m_cnvSvc->getDigiCnv()->getWriteObject(); 00079 00080 const TObjArray* m_lumiDigiCol = recEvt->getLumiDigiCol(); 00081 if ( !m_lumiDigiCol ) return sc; 00082 recEvt->clearLumiDigiCol(); 00083 LumiDigiCol::const_iterator lumiDigiTds; 00084 00085 for (lumiDigiTds = lumiDigiColTds->begin(); lumiDigiTds != lumiDigiColTds->end(); ++lumiDigiTds) { 00086 TLumiDigi* lumiDigiRoot = new TLumiDigi(); 00087 00088 lumiDigiRoot->initialize((*lumiDigiTds)->getIntId(), 00089 (*lumiDigiTds)->getTimeChannel(), (*lumiDigiTds)->getChargeChannel()); 00090 lumiDigiRoot->setOverflow( (*lumiDigiTds)->getOverflow() ); 00091 00092 recEvt->addLumiDigi(lumiDigiRoot); 00093 } 00094 00095 return sc; 00096 }