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

Go to the documentation of this file.
00001 #ifndef MucMcHitCnv_CXX
00002 #define MucMcHitCnv_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/MucMcHit.h"   //TDS object
00013 #include "RootEventData/TMucMc.h" // standard root object
00014 #include "RootEventData/TMcEvent.h"
00015 #include "RootCnvSvc/Mc/McCnv.h"
00016 #include "RootCnvSvc/Mc/MucMcHitCnv.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<MucMcHitCnv> s_factory;
00023 //const ICnvFactory& MucMcHitCnvFactory = s_factory;
00024 
00025 MucMcHitCnv::MucMcHitCnv(ISvcLocator* svc)
00026 : RootEventBaseCnv(classID(), svc)
00027 {
00028     // Here we associate this converter with the /Event path on the TDS.
00029     MsgStream log(msgSvc(), "MucMcHitCnv");
00030     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00031     m_rootBranchname ="m_mucMcHitCol";
00032     //declareObject(EventModel::MC::MucMcHitCol, objType(), m_rootTreename, m_rootBranchname);
00033     m_adresses.push_back(&m_mucMcHitCol);
00034     m_mucMcHitCol=0;
00035 }
00036 
00037 StatusCode MucMcHitCnv::TObjectToDataObject(DataObject*& refpObject) {
00038   // creation of TDS object from root object
00039 
00040     MsgStream log(msgSvc(), "MucMcHitCnv");
00041     log << MSG::DEBUG << "MucMcHitCnv::TObjectToDataObject" << endreq;
00042     StatusCode sc=StatusCode::SUCCESS;
00043 
00044     // create the TDS location for the MdcMc Collection
00045     MucMcHitCol* mucMcTdsCol = new MucMcHitCol;
00046     refpObject=mucMcTdsCol;
00047 
00048 
00049     // now convert
00050     if (!m_mucMcHitCol) return sc;
00051     TIter mucMcIter(m_mucMcHitCol);
00052     TMucMc *mucMcRoot = 0;
00053     while ((mucMcRoot = (TMucMc*)mucMcIter.Next())) {
00054         unsigned int id = mucMcRoot ->getId();
00055                 unsigned int trackIndex = mucMcRoot ->getTrackIndex();
00056                 double xPosition =   mucMcRoot ->getPositionX() ;
00057                 double yPosition =   mucMcRoot ->getPositionY() ;
00058                 double zPosition =   mucMcRoot ->getPositionZ() ;
00059                 double px=   mucMcRoot ->getPx() ;
00060                 double py =   mucMcRoot ->getPy() ;
00061                 double pz =   mucMcRoot ->getPz() ;
00062         
00063                 MucMcHit *mucMcTds = new MucMcHit;
00064                 m_common.m_rootMucMcHitMap[mucMcRoot] = mucMcTds;
00065         
00066                 mucMcTds->setIdentifier(id);
00067                 mucMcTds->setTrackIndex(trackIndex);
00068                 mucMcTds->setPositionX(xPosition);
00069                 mucMcTds->setPositionY(yPosition);
00070                 mucMcTds->setPositionZ(zPosition);
00071                 mucMcTds->setPx(px);
00072                 mucMcTds->setPy(py);
00073                 mucMcTds->setPz(pz);
00074 
00075         mucMcTdsCol->push_back(mucMcTds);
00076      }
00077     //m_mucMcHitCol->Delete();  // wensp add 2005/12/30
00078     delete m_mucMcHitCol;
00079     m_mucMcHitCol = 0;
00080    return StatusCode::SUCCESS;
00081 }
00082 
00083 StatusCode MucMcHitCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00084 
00085   MsgStream log(msgSvc(), "MucMcHitCnv");
00086   log << MSG::DEBUG << "MucMcHitCnv::DataObjectToTObject" << endreq;
00087   StatusCode sc=StatusCode::SUCCESS;
00088  
00089  MucMcHitCol * mucMcHitCnvTds=dynamic_cast<MucMcHitCol *> (obj);
00090   if (!mucMcHitCnvTds) {
00091     log << MSG::ERROR << "Could not downcast to MucMcHitCol" << 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 << "MucMcHitCnv: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_mucMcHitCol = McEvt->getMucMcHitCol();
00111   if (!m_mucMcHitCol) return sc;
00112   McEvt->clearMucMcHitCol(); //necessary in case there is I/O at the same time since array is static
00113   MucMcHitCol::const_iterator mucMcTds;
00114 
00115   for (mucMcTds = mucMcHitCnvTds->begin(); mucMcTds != mucMcHitCnvTds->end(); mucMcTds++) {
00116                 UInt_t id  = ((*mucMcTds)->identify()).get_value() ;
00117                 UInt_t trackIndex = (*mucMcTds) ->getTrackIndex();
00118                 Double_t xPosition =   (*mucMcTds) ->getPositionX() ;
00119                 Double_t yPosition =   (*mucMcTds) ->getPositionY() ;
00120                 Double_t zPosition =   (*mucMcTds) ->getPositionZ() ;
00121                 Double_t px=   (*mucMcTds) ->getPx() ;
00122                 Double_t py =   (*mucMcTds) ->getPy() ;
00123                 Double_t pz =   (*mucMcTds) ->getPz() ;
00124        
00125                 TMucMc *mucMcRoot = new TMucMc();
00126                 //m_common.m_mucMcHitMap[(*mucMcTds)] = mucMcRoot;
00127 
00128                 mucMcRoot->setId(id);
00129                 mucMcRoot->setTrackIndex(trackIndex);
00130                 mucMcRoot->setPositionX(xPosition);
00131                 mucMcRoot->setPositionY(yPosition);
00132                 mucMcRoot->setPositionZ(zPosition);
00133                 mucMcRoot->setPx(px);
00134                 mucMcRoot->setPy(py);
00135                 mucMcRoot->setPz(pz);
00136 
00137                 McEvt->addMucMc(mucMcRoot);
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