/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/Digi/LumiDigiCnv.cxx

Go to the documentation of this file.
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 }

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