/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/Rec/RecEvTimeCnv.cxx

Go to the documentation of this file.
00001 #ifndef RecEvTimeCnv_CXX
00002 #define RecEvTimeCnv_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 "EvTimeEvent/RecEsTime.h"
00012 #include "ReconEvent/ReconEvent.h"
00013 
00014 //#include "RootEventData/TMucTrack.h" // standard root object
00015 #include "RootEventData/TRecEvTime.h" // standard root object
00016 //#include "RootEventData/TDstEvent.h"
00017 #include "RootEventData/TRecTrackEvent.h"
00018 
00019 #include "RootCnvSvc/Rec/RecTrackCnv.h"
00020 #include "RootCnvSvc/Rec/RecEvTimeCnv.h"
00021 #include "RootCnvSvc/RootAddress.h"
00022 
00023 #include <vector>
00024 
00025 using namespace std;
00026 
00027 // Instantiation of a static factory class used by clients to create
00028 // instances of this service
00029 //static CnvFactory<RecEvTimeCnv> s_factory;
00030 //const ICnvFactory& RecEvTimeCnvFactory = s_factory;
00031 
00032 RecEvTimeCnv::RecEvTimeCnv(ISvcLocator* svc)
00033 : RootEventBaseCnv(classID(), svc)
00034 {
00035 
00036     // Here we associate this converter with the /Event path on the TDS.
00037     MsgStream log(msgSvc(), "RecEvTimeCnv");
00038     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00039     //m_rootTreename ="Rec";
00040     m_rootBranchname ="m_recEvTimeCol";
00041    // declareObject(EventModel::Recon::EvTimeCol, objType(), m_rootTreename, m_rootBranchname);
00042     m_adresses.push_back(&m_recEvTimeCol);
00043     m_recEvTimeCol=0;
00044 }
00045 
00046 StatusCode RecEvTimeCnv::TObjectToDataObject(DataObject*& refpObject) {
00047   // creation of TDS object from root object
00048 MsgStream log(msgSvc(), "RecEvTimeCnv");
00049     log << MSG::DEBUG << "RecEvTimeCnv::TObjectToDataObject" << endreq;
00050     StatusCode sc=StatusCode::SUCCESS;
00051 
00052     // create the TDS location for the MucTrack Collection
00053     RecEsTimeCol* evTimeTdsCol = new RecEsTimeCol;
00054     refpObject=evTimeTdsCol;
00055  // now convert
00056     if (!m_recEvTimeCol) return sc;
00057     TIter evTimeIter(m_recEvTimeCol);
00058     TRecEvTime *evTimeRoot = 0;
00059     while ((evTimeRoot = (TRecEvTime*)evTimeIter.Next())) {
00060       double estime=evTimeRoot->estime();
00061       int   status=evTimeRoot->status();
00062       double quality=evTimeRoot->quality();
00063       //double estime=evTimeRoot->getTest();
00064       //int status=evTimeRoot->getStat();
00065       
00066       RecEsTime *evTimeTds = new RecEsTime();
00067       m_common.m_rootRecEvTimeMap[evTimeRoot] = evTimeTds;
00068       evTimeTds->setTest( estime );
00069       evTimeTds->setStat( status );
00070       evTimeTds->setQuality( quality );
00071       evTimeTdsCol->push_back(evTimeTds);
00072     }
00073     delete m_recEvTimeCol;
00074     m_recEvTimeCol = 0;
00075 
00076     return StatusCode::SUCCESS;
00077 }
00078 
00079 StatusCode RecEvTimeCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00080  MsgStream log(msgSvc(), "RecEvTimeCnv");
00081   log << MSG::DEBUG << "RecEvTimeCnv::DataObjectToTObject" << endreq;
00082   StatusCode sc=StatusCode::SUCCESS;
00083 
00084   RecEsTimeCol * evTimeColTds=dynamic_cast<RecEsTimeCol *> (obj);
00085   if (!evTimeColTds) {
00086     log << MSG::ERROR << "Could not downcast to RecEsTimeCol" << endreq;
00087     return StatusCode::FAILURE;
00088   }
00089 
00090   DataObject *evt;
00091   m_eds->findObject(EventModel::Recon::Event,evt);
00092   if (evt==NULL) {
00093     log << MSG::ERROR << "Could not get RecEvent in TDS "  << endreq;
00094     return StatusCode::FAILURE;
00095   }
00096   ReconEvent * devtTds=dynamic_cast<ReconEvent *> (evt);
00097   if (!devtTds) {
00098     log << MSG::ERROR << "RecEvTimeCnv:Could not downcast to TDS ReconEvent" << endreq;
00099   }
00100   IOpaqueAddress *addr;
00101 
00102   m_cnvSvc->getRecTrackCnv()->createRep(evt,addr);
00103   TRecTrackEvent *recEvt=m_cnvSvc->getRecTrackCnv()->getWriteObject();
00104   const TObjArray *m_recEvTimeCol = recEvt->getEvTimeCol();
00105   if (!m_recEvTimeCol) return sc;
00106   recEvt->clearEvTimeCol(); //necessary in case there is I/O at the same time since array is static
00107   RecEsTimeCol::const_iterator evTimeTds;
00108   for (evTimeTds = evTimeColTds->begin(); evTimeTds != evTimeColTds->end(); evTimeTds++) {
00109     //Double_t estime = (*evTimeTds)->estime();
00110     //Int_t status = (*evTimeTds)->status();
00111     Double_t estime = (*evTimeTds)->getTest();
00112     Int_t    status = (*evTimeTds)->getStat();
00113     Double_t quality = (*evTimeTds)->getQuality();
00114     TRecEvTime *evTimeRoot = new TRecEvTime();
00115     //m_common.m_RecEvTimeMap[(*evTimeTds)] = evTimeRoot;
00116 
00117     evTimeRoot->setTest( estime );
00118     evTimeRoot->setStats( status );
00119     evTimeRoot->setQuality( quality );
00120 
00121     recEvt->addEvTime(evTimeRoot);
00122   }
00123  
00124   return StatusCode::SUCCESS;
00125 }
00126 #endif

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