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

Go to the documentation of this file.
00001 #ifndef MdcDigiCnv_CXX
00002 #define MdcDigiCnv_CXX  1
00003 
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "GaudiKernel/DataObject.h"
00006 #include "GaudiKernel/ObjectVector.h"
00007 
00008 #include "TClonesArray.h"
00009 
00010 #include "EventModel/EventModel.h"
00011 #include "RawEvent/DigiEvent.h"   //TDS object
00012 #include "MdcRawEvent/MdcDigi.h"   //TDS object
00013 #include "RootEventData/TMdcDigi.h" // standard root object
00014 #include "RootEventData/TDigiEvent.h"
00015 #include "RootCnvSvc/Digi/DigiCnv.h"
00016 #include "RootCnvSvc/Digi/MdcDigiCnv.h"
00017 #include "RootCnvSvc/RootAddress.h"
00018 
00019 
00020 // Instantiation of a static factory class used by clients to create
00021 // instances of this service
00022 //static CnvFactory<MdcDigiCnv> s_factory;
00023 //const ICnvFactory& MdcDigiCnvFactory = s_factory;
00024 
00025 MdcDigiCnv::MdcDigiCnv(ISvcLocator* svc)
00026 : RootEventBaseCnv(classID(), svc)
00027 {
00028     // Here we associate this converter with the /Event path on the TDS.
00029     MsgStream log(msgSvc(), "MdcDigiCnv");
00030     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00031     m_rootBranchname ="m_mdcDigiCol";
00032     //declareObject(EventModel::Digi::MdcDigiCol, objType(), m_rootTreename, m_rootBranchname);
00033     m_adresses.push_back(&m_mdcDigiCol);
00034     m_mdcDigiCol=0;
00035 
00036 }
00037 
00038 StatusCode MdcDigiCnv::TObjectToDataObject(DataObject*& refpObject) {
00039   // creation of TDS object from root object
00040 
00041     MsgStream log(msgSvc(), "MdcDigiCnv");
00042     log << MSG::DEBUG << "MdcDigiCnv::TObjectToDataObject" << endreq;
00043     StatusCode sc=StatusCode::SUCCESS;
00044 
00045     // create the TDS location for the MdcDigi Collection
00046     MdcDigiCol* mdcDigiTdsCol = new MdcDigiCol;
00047     refpObject=mdcDigiTdsCol;
00048 //     sc = m_eds->registerObject(EventModel::Digi::MdcDigiCol, mdcDigiTdsCol);
00049 //     if (sc.isFailure()) {
00050 //         log << "Failed to register MdcDigi Collection" << endreq;
00051 //         return StatusCode::FAILURE;
00052 //     }
00053 
00054 
00055     // now convert
00056     if (!m_mdcDigiCol) return sc;
00057     TIter mdcDigiIter(m_mdcDigiCol);
00058     TMdcDigi *mdcDigiRoot = 0;
00059     while ((mdcDigiRoot = (TMdcDigi*)mdcDigiIter.Next())) {
00060         unsigned int  id  = mdcDigiRoot->getIntId();
00061         unsigned int  time = mdcDigiRoot->getTimeChannel();
00062         unsigned int  charge = mdcDigiRoot->getChargeChannel();
00063         unsigned int  overflow = mdcDigiRoot->getOverflow();
00064         int trackIndex = mdcDigiRoot->getTrackIndex();
00065         
00066         MdcDigi *mdcDigiTds = new MdcDigi(id);
00067         m_common.m_rootMdcDigiMap[mdcDigiRoot] = mdcDigiTds;
00068         
00069         mdcDigiTds->setTimeChannel(time);
00070         mdcDigiTds->setChargeChannel(charge);
00071         mdcDigiTds->setOverflow(overflow);
00072         mdcDigiTds->setTrackIndex(trackIndex);
00073 
00074         mdcDigiTdsCol->push_back(mdcDigiTds);
00075      }
00076     //m_mdcDigiCol->Delete();  // wensp add 2005/12/30
00077     delete m_mdcDigiCol;
00078     m_mdcDigiCol = 0; 
00079    return StatusCode::SUCCESS;
00080 }
00081 
00082 StatusCode MdcDigiCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00083 
00084   MsgStream log(msgSvc(), "MdcDigiCnv");
00085   log << MSG::DEBUG << "MdcDigiCnv::DataObjectToTObject" << endreq;
00086   StatusCode sc=StatusCode::SUCCESS;
00087  
00088   MdcDigiCol * mdcDigiColTds=dynamic_cast<MdcDigiCol *> (obj);
00089   if (!mdcDigiColTds) {
00090     log << MSG::ERROR << "Could not downcast to MdcDigiCol" << endreq;
00091     return StatusCode::FAILURE;
00092   }
00093  
00094   DataObject *evt;
00095   m_eds->findObject(EventModel::Digi::Event,evt);
00096   if (evt==NULL) {
00097     log << MSG::ERROR << "Could not get DigiEvent in TDS "  << endreq;
00098     return StatusCode::FAILURE;
00099   }
00100   DigiEvent * devtTds=dynamic_cast<DigiEvent *> (evt);
00101   if (!devtTds) {
00102     log << MSG::ERROR << "MdcDigiCnv:Could not downcast to TDS DigiEvent" << endreq;
00103   }
00104 
00105   IOpaqueAddress *addr;
00106 
00107   
00108   m_cnvSvc->getDigiCnv()->createRep(evt,addr);
00109  
00110   //createRep(evt,addr);
00111 
00112   TDigiEvent *recEvt=m_cnvSvc->getDigiCnv()->getWriteObject();
00113 
00114   const TObjArray *m_mdcDigiCol = recEvt->getMdcDigiCol();
00115   if (!m_mdcDigiCol) return sc;
00116   recEvt->clearMdcDigiCol(); //necessary in case there is I/O at the same time since array is static
00117   MdcDigiCol::const_iterator mdcDigiTds;
00118 
00119   for (mdcDigiTds = mdcDigiColTds->begin(); mdcDigiTds != mdcDigiColTds->end(); mdcDigiTds++) {
00120     UInt_t overflow  = (*mdcDigiTds)->getOverflow();
00121     UInt_t time      = (*mdcDigiTds)->getTimeChannel();
00122     UInt_t charge    = (*mdcDigiTds)->getChargeChannel();
00123     UInt_t id        = (*mdcDigiTds)->getIntId();
00124     Int_t trackIndex = (*mdcDigiTds)->getTrackIndex();
00125        
00126     TMdcDigi *mdcDigiRoot = new TMdcDigi();
00127     //m_common.m_mdcDigiMap[(*mdcDigiTds)] = mdcDigiRoot;
00128 
00129     mdcDigiRoot->initialize(id, time ,charge);
00130     mdcDigiRoot->setOverflow(overflow);
00131     mdcDigiRoot->setTrackIndex(trackIndex);
00132     recEvt->addMdcDigi(mdcDigiRoot);
00133   }
00134 
00135   return StatusCode::SUCCESS;
00136 }
00137 
00138 #endif
00139 
00140 
00141 
00142 
00143 
00144 
00145 
00146 
00147 
00148 

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