00001 #include "RootCnvSvc/Rec/RecZddChannelCnv.h" 00002 #include "RootCnvSvc/RootAddress.h" 00003 #include "RootCnvSvc/Rec/RecTrackCnv.h" 00004 #include "ZddEvent/RecZddChannel.h" 00005 #include "RootEventData/TRecTrackEvent.h" 00006 #include "RootEventData/TRecZddChannel.h" 00007 00008 RecZddChannelCnv::RecZddChannelCnv(ISvcLocator* svc) 00009 : RootEventBaseCnv(classID(), svc) 00010 { 00011 m_rootBranchname = "m_recZddChannelCol"; 00012 m_adresses.push_back(&m_recZddChannelCol); 00013 m_recZddChannelCol = 0; 00014 } 00015 00016 StatusCode RecZddChannelCnv::TObjectToDataObject(DataObject*& refpObject) 00017 { 00018 MsgStream log(msgSvc(), "RecZddChannelCnv"); 00019 log << MSG::DEBUG << "RecZddChannelCnv::TObjectToDataObject" << endreq; 00020 00021 RecZddChannelCol* zddCol = new RecZddChannelCol; 00022 refpObject = zddCol; 00023 00024 if ( ! m_recZddChannelCol ) return StatusCode::SUCCESS; 00025 00026 // convert 00027 TIter zddIter(m_recZddChannelCol); 00028 TRecZddChannel* zddRoot = 0; 00029 while ( (zddRoot = (TRecZddChannel*)zddIter.Next()) ) { 00030 RecZddChannel* zddTDS = new RecZddChannel; 00031 m_common.m_rootRecZddChannelMap[zddRoot] = zddTDS; 00032 00033 // settings 00034 zddTDS->setChannelId(zddRoot->channelId()); 00035 zddTDS->setScanCode(zddRoot->scanCode()); 00036 zddTDS->setBaseLine(zddRoot->baseLine()); 00037 zddTDS->setPhase(zddRoot->phase()); 00038 zddTDS->setFragments(zddRoot->fragments()); 00039 00040 zddCol->push_back(zddTDS); 00041 } 00042 00043 delete m_recZddChannelCol; 00044 m_recZddChannelCol = 0; 00045 00046 return StatusCode::SUCCESS; 00047 } 00048 00049 StatusCode RecZddChannelCnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) 00050 { 00051 MsgStream log(msgSvc(), "RecZddChannelCnv"); 00052 log << MSG::DEBUG << "RecZddChannelCnv::DataObjectToTObject" << endreq; 00053 00054 RecZddChannelCol* zddCol = dynamic_cast<RecZddChannelCol*>(obj); 00055 if ( ! zddCol ) { 00056 log << MSG::ERROR << "Could not downcast to RecZddChannelCol" << endreq; 00057 return StatusCode::FAILURE; 00058 } 00059 00060 DataObject* evt; 00061 m_eds->findObject(EventModel::Recon::Event, evt); 00062 if ( evt == NULL ) { 00063 log << MSG::ERROR << "Could not get ReconEvent in TDS" << endreq; 00064 return StatusCode::FAILURE; 00065 } 00066 IOpaqueAddress *addr; 00067 m_cnvSvc->getRecTrackCnv()->createRep(evt, addr); 00068 TRecTrackEvent* recEvt = m_cnvSvc->getRecTrackCnv()->getWriteObject(); 00069 00070 const TObjArray* m_recZddChannelCol = recEvt->getRecZddChannelCol(); 00071 if ( ! m_recZddChannelCol ) return StatusCode::SUCCESS; 00072 00073 //convert 00074 recEvt->clearRecZddChannelCol(); 00075 RecZddChannelCol::const_iterator zdd = zddCol->begin(); 00076 00077 for ( ; zdd != zddCol->end(); ++zdd ) { 00078 RecZddChannel* pzdd = *zdd; 00079 TRecZddChannel* zddRoot = new TRecZddChannel(); 00080 00081 zddRoot->setChannelId(pzdd->channelId()); 00082 zddRoot->setBaseLine(pzdd->baseLine()); 00083 zddRoot->setPhase(pzdd->phase()); 00084 zddRoot->setFragments(pzdd->fragments()); 00085 00086 recEvt->addRecZddChannel(zddRoot); 00087 } 00088 00089 return StatusCode::SUCCESS; 00090 }