/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/Mc/MdcMcHitCnv.cxx

Go to the documentation of this file.
00001 #ifndef MdcMcHitCnv_CXX
00002 #define MdcMcHitCnv_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 "McTruth/McEvent.h"   //TDS object
00012 #include "McTruth/MdcMcHit.h"   //TDS object
00013 #include "RootEventData/TMdcMc.h" // standard root object
00014 #include "RootEventData/TMcEvent.h"
00015 #include "RootCnvSvc/Mc/McCnv.h"
00016 #include "RootCnvSvc/Mc/MdcMcHitCnv.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<MdcMcHitCnv> s_factory;
00023 //const ICnvFactory& MdcMcHitCnvFactory = s_factory;
00024 
00025 MdcMcHitCnv::MdcMcHitCnv(ISvcLocator* svc)
00026 : RootEventBaseCnv(classID(), svc)
00027 {
00028     // Here we associate this converter with the /Event path on the TDS.
00029     MsgStream log(msgSvc(), "MdcMcHitCnv");
00030     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00031     m_rootBranchname ="m_mdcMcHitCol";
00032     //declareObject(EventModel::MC::MdcMcHitCol, objType(), m_rootTreename, m_rootBranchname);
00033     m_adresses.push_back(&m_mdcMcHitCol);
00034     m_mdcMcHitCol=0;
00035 }
00036 
00037 StatusCode MdcMcHitCnv::TObjectToDataObject(DataObject*& refpObject) {
00038   // creation of TDS object from root object
00039 
00040     MsgStream log(msgSvc(), "MdcMcHitCnv");
00041     log << MSG::DEBUG << "MdcMcHitCnv::TObjectToDataObject" << endreq;
00042     StatusCode sc=StatusCode::SUCCESS;
00043 
00044     // create the TDS location for the MdcMc Collection
00045     MdcMcHitCol* mdcMcTdsCol = new MdcMcHitCol;
00046     refpObject=mdcMcTdsCol;
00047 
00048 
00049     // now convert
00050     if (!m_mdcMcHitCol) return sc;
00051     TIter mdcMcIter(m_mdcMcHitCol);
00052     TMdcMc *mdcMcRoot = 0;
00053     while ((mdcMcRoot = (TMdcMc*)mdcMcIter.Next())) {
00054         unsigned int id = mdcMcRoot ->getId();
00055                 unsigned int trackIndex = mdcMcRoot ->getTrackIndex();
00056                 double xPosition =   mdcMcRoot ->getPositionX() ;
00057                 double yPosition =   mdcMcRoot ->getPositionY() ;
00058                 double zPosition =   mdcMcRoot ->getPositionZ() ;
00059                 double  driftDistance= mdcMcRoot ->getDriftDistance() ;
00060                 double depositEnergy = mdcMcRoot ->getDepositEnergy() ;
00061           int positionFlag = mdcMcRoot->getPositionFlag();
00062       
00063                 MdcMcHit *mdcMcTds = new MdcMcHit;
00064                 m_common.m_rootMdcMcHitMap[mdcMcRoot] = mdcMcTds;
00065         
00066                 mdcMcTds->setIdentifier(id);
00067                 mdcMcTds->setTrackIndex(trackIndex);
00068                 mdcMcTds->setPositionX(xPosition);
00069                 mdcMcTds->setPositionY(yPosition);
00070                 mdcMcTds->setPositionZ(zPosition);
00071                 mdcMcTds->setDriftDistance(driftDistance);
00072                 mdcMcTds->setDepositEnergy(depositEnergy);
00073     mdcMcTds->setPositionFlag(positionFlag);
00074     
00075         mdcMcTdsCol->push_back(mdcMcTds);
00076      }
00077     //m_mdcMcHitCol->Delete();  // wensp add 2005/12/30
00078     delete m_mdcMcHitCol;
00079     m_mdcMcHitCol = 0;
00080    return StatusCode::SUCCESS;
00081 }
00082 
00083 StatusCode MdcMcHitCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00084 
00085   MsgStream log(msgSvc(), "MdcMcHitCnv");
00086   log << MSG::DEBUG << "MdcMcHitCnv::DataObjectToTObject" << endreq;
00087   StatusCode sc=StatusCode::SUCCESS;
00088  
00089  MdcMcHitCol * mdcMcHitCnvTds=dynamic_cast<MdcMcHitCol *> (obj);
00090   if (!mdcMcHitCnvTds) {
00091     log << MSG::ERROR << "Could not downcast to MdcMcHitCol" << endreq;
00092     return StatusCode::FAILURE;
00093   }
00094  
00095   DataObject *evt;
00096   m_eds->findObject(EventModel::MC::Event,evt);
00097   if (evt==NULL) {
00098     log << MSG::ERROR << "Could not get McEvent in TDS "  << endreq;
00099     return StatusCode::FAILURE;
00100   }
00101   McEvent * devtTds=dynamic_cast<McEvent *> (evt);
00102   if (!devtTds) {
00103     log << MSG::ERROR << "MdcMcHitCnv:Could not downcast to TDS McEvent" << endreq;
00104   }
00105   IOpaqueAddress *addr;
00106 
00107   m_cnvSvc->getMcCnv()->createRep(evt,addr); 
00108   TMcEvent *McEvt=m_cnvSvc->getMcCnv()->getWriteObject();
00109 
00110   const TObjArray *m_mdcMcHitCol = McEvt->getMdcMcHitCol();
00111   if (!m_mdcMcHitCol) return sc;
00112   McEvt->clearMdcMcHitCol(); //necessary in case there is I/O at the same time since array is static
00113   MdcMcHitCol::const_iterator mdcMcTds;
00114 
00115   for (mdcMcTds = mdcMcHitCnvTds->begin(); mdcMcTds != mdcMcHitCnvTds->end(); mdcMcTds++) {
00116                 UInt_t id  = ((*mdcMcTds)->identify()).get_value() ;
00117                 UInt_t trackIndex = (*mdcMcTds) ->getTrackIndex();
00118                 Double_t xPosition =   (*mdcMcTds) ->getPositionX() ;
00119                 Double_t yPosition =   (*mdcMcTds) ->getPositionY() ;
00120                 Double_t zPosition =   (*mdcMcTds) ->getPositionZ() ;
00121                 Double_t driftDistance=   (*mdcMcTds) ->getDriftDistance();
00122                 Double_t depositEnergy = (*mdcMcTds) ->getDepositEnergy() ;
00123     Int_t positionFlag = (*mdcMcTds) ->getPositionFlag();
00124     
00125                 TMdcMc *mdcMcRoot = new TMdcMc();
00126                 //m_common.m_mdcMcHitMap[(*mdcMcTds)] = mdcMcRoot;
00127 
00128                 mdcMcRoot->setId(id);
00129                 mdcMcRoot->setTrackIndex(trackIndex);
00130                 mdcMcRoot->setPositionX(xPosition);
00131                 mdcMcRoot->setPositionY(yPosition);
00132                 mdcMcRoot->setPositionZ(zPosition);
00133                 mdcMcRoot->setDriftDistance(driftDistance);
00134                 mdcMcRoot->setDepositEnergy(depositEnergy);
00135     mdcMcRoot->setPositionFlag(positionFlag);
00136 
00137                 McEvt->addMdcMc(mdcMcRoot);
00138   }
00139 
00140   return StatusCode::SUCCESS;
00141 }
00142 #endif
00143 
00144 
00145 
00146 
00147 
00148 
00149 
00150 
00151 
00152 

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