/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/Dst/MdcTrackCnv.cxx

Go to the documentation of this file.
00001 #ifndef MdcTrackCnv_CXX
00002 #define MdcTrackCnv_CXX  1
00003 
00004 #include "GaudiKernel/MsgStream.h"
00005 #include "GaudiKernel/DataObject.h"
00006 #include "GaudiKernel/ObjectVector.h"
00007 #include "TClonesArray.h"
00008 #include "EventModel/EventModel.h"
00009 #include "DstEvent/DstEvent.h"  //TDS object  
00010 #include "DstEvent/DstMdcTrack.h"   //TDS object
00011 #include "RootEventData/TMdcTrack.h" // standard root object
00012 #include "RootEventData/TDstEvent.h"
00013 #include "RootCnvSvc/Dst/DstCnv.h"
00014 #include "RootCnvSvc/Dst/MdcTrackCnv.h"
00015 #include "RootCnvSvc/RootAddress.h"
00016 #include <vector>
00017 #include "CLHEP/Matrix/Vector.h"
00018 #include "CLHEP/Matrix/SymMatrix.h"
00019 #include "CLHEP/Geometry/Point3D.h"
00020 
00021 using namespace std;
00022 
00023 
00024 MdcTrackCnv::MdcTrackCnv(ISvcLocator* svc)
00025 : RootEventBaseCnv(classID(), svc)
00026 {
00027     // Here we associate this converter with the /Event path on the TDS.
00028     MsgStream log(msgSvc(), "MdcTrackCnv");
00029     m_rootBranchname ="m_mdcTrackCol";
00030     m_adresses.push_back(&m_mdcTrackCol);
00031     m_mdcTrackCol=0;
00032 }
00033 
00034 StatusCode MdcTrackCnv::TObjectToDataObject(DataObject*& refpObject) {
00035     // creation of TDS object from root object
00036     MsgStream log(msgSvc(), "MdcTrackCnv");
00037     log << MSG::DEBUG << "MdcTrackCnv::TObjectToDataObject" << endreq;
00038     StatusCode sc=StatusCode::SUCCESS;
00039 
00040     // create the TDS location for the MdcTrack Collection
00041     DstMdcTrackCol* mdcTrackTdsCol = new DstMdcTrackCol;
00042     refpObject=mdcTrackTdsCol;
00043 
00044     // now convert
00045     if (!m_mdcTrackCol) return sc;
00046     TIter mdcTrackIter(m_mdcTrackCol);
00047     TMdcTrack *mdcTrackRoot = 0;
00048     while ((mdcTrackRoot = (TMdcTrack*)mdcTrackIter.Next())) {
00049 
00050      int      trackId = mdcTrackRoot->trackId();
00051      int      charge  = mdcTrackRoot->charge();     
00052      double   helix[5];
00053      for(int i=0; i<5; i++){
00054        helix[i] = mdcTrackRoot->helix(i);
00055        log<<MSG::INFO<<"in MdcTrackCnv, helix["<<i<<"]: "<<helix[i]<<endreq;
00056      }
00057      double   pxy =     mdcTrackRoot->pxy();       
00058      double   px =      mdcTrackRoot->px();        
00059      double   py =      mdcTrackRoot->py();        
00060      double   pz =      mdcTrackRoot->pz();        
00061      double   p =       mdcTrackRoot->p();         
00062      double   theta =   mdcTrackRoot->theta();     
00063      double   phi =     mdcTrackRoot->phi();       
00064      double   x =       mdcTrackRoot->x();         
00065      double   y =       mdcTrackRoot->y();         
00066      double   z =       mdcTrackRoot->z();         
00067      double   r =       mdcTrackRoot->r();         
00068      int      stat =    mdcTrackRoot->stat();      
00069      double   chi =     mdcTrackRoot->chi2();      
00070      int      ndof =    mdcTrackRoot->ndof();       
00071      int      ns =      mdcTrackRoot->nster();
00072      int      nlayer =  mdcTrackRoot->nlayer();
00073      
00074      double err[15];
00075      for (int i=0; i<15; i++){
00076        err[i] = mdcTrackRoot->err(i);
00077      }
00078    
00079      double poca[3];
00080      poca[0] = x;
00081      poca[1] = y;
00082      poca[2] = z;
00083 
00084      log<<MSG::INFO<<"in MdcTrackCnv, mdcTrackRoot.nster "<<ns<<endreq;
00085      
00086      DstMdcTrack *mdcTrackTds = new DstMdcTrack();
00087      m_common.m_rootMdcTrackMap[mdcTrackRoot] = mdcTrackTds;
00088 
00089      mdcTrackTds->setTrackId( trackId );
00090     log<<MSG::INFO<<" dstMdcTrack trkid: "<<mdcTrackTds->trackId()<<endreq;
00091   
00092      mdcTrackTds->setCharge( charge );
00093      mdcTrackTds->setHelix(helix);
00094      mdcTrackTds->setPoca(poca);
00095      
00096      log<<MSG::INFO<<"dstMdcTrack helix: "<<mdcTrackTds->helix()<<endreq;
00097     
00098      mdcTrackTds->setPxy( pxy );   
00099      mdcTrackTds->setPx( px );   
00100      mdcTrackTds->setPy( py );   
00101      mdcTrackTds->setPz( pz );   
00102      mdcTrackTds->setP( p );   
00103      mdcTrackTds->setTheta( theta );   
00104      mdcTrackTds->setPhi( phi );   
00105      mdcTrackTds->setX( x );   
00106      mdcTrackTds->setY( y );    
00107      mdcTrackTds->setZ( z );   
00108      mdcTrackTds->setR( r );   
00109      mdcTrackTds->setStat( stat );  
00110      mdcTrackTds->setChi2( chi );  
00111      mdcTrackTds->setNdof( ndof );  
00112      mdcTrackTds->setError( err );   
00113      mdcTrackTds->setNster( ns  ); 
00114      mdcTrackTds->setNlayer( nlayer ); 
00115      
00116      log<<MSG::INFO<<" dstMdcTrack nster: "<<mdcTrackTds->nster()<<endreq;
00117        
00118      mdcTrackTdsCol->push_back(mdcTrackTds);
00119     
00120      }
00121     delete m_mdcTrackCol;
00122     m_mdcTrackCol = 0;  
00123     return StatusCode::SUCCESS;
00124 }
00125 
00126 StatusCode MdcTrackCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00127 
00128   MsgStream log(msgSvc(), "MdcTrackCnv");
00129   log << MSG::DEBUG << "MdcTrackCnv::DataObjectToTObject" << endreq;
00130   StatusCode sc=StatusCode::SUCCESS;
00131  
00132   DstMdcTrackCol * mdcTrackColTds=dynamic_cast<DstMdcTrackCol *> (obj);
00133   if (!mdcTrackColTds) {
00134     log << MSG::ERROR << "Could not downcast to MdcTrackCol" << endreq;
00135     return StatusCode::FAILURE;
00136   }
00137  
00138   DataObject *evt;
00139   m_eds->findObject(EventModel::Dst::Event,evt);
00140   if (evt==NULL) {
00141     log << MSG::ERROR << "Could not get DstEvent in TDS "  << endreq;
00142     return StatusCode::FAILURE;
00143   }
00144   DstEvent * devtTds=dynamic_cast<DstEvent *> (evt);
00145   if (!devtTds) {
00146     log << MSG::ERROR << "MdcTrackCnv:Could not downcast to TDS DstEvent" << endreq;
00147   }
00148   IOpaqueAddress *addr;
00149 
00150   m_cnvSvc->getDstCnv()->createRep(evt,addr); 
00151   TDstEvent *recEvt=m_cnvSvc->getDstCnv()->getWriteObject();
00152 
00153   const TObjArray *m_mdcTrackCol = recEvt->getMdcTrackCol();
00154   if (!m_mdcTrackCol) return sc;
00155   recEvt->clearMdcTrackCol(); //necessary in case there is I/O at the same time since array is static
00156   DstMdcTrackCol::const_iterator mdcTrackTds;
00157 
00158   for (mdcTrackTds = mdcTrackColTds->begin(); mdcTrackTds != mdcTrackColTds->end(); mdcTrackTds++) {
00159      Int_t      trackId =(*mdcTrackTds)->trackId();
00160      Double_t   helix[5];
00161      for(int i=0;i<5;i++){
00162        helix[i] = (*mdcTrackTds)->helix(i) ; 
00163      }    
00164      Int_t    stat = (*mdcTrackTds)->stat();      
00165      Double_t chi =  (*mdcTrackTds)->chi2();      
00166      Int_t    ndof = (*mdcTrackTds)->ndof();       
00167      Double_t err[15];
00168      for (Int_t i=0; i<15; i++){  
00169        err[i] = (*mdcTrackTds)->err(i);
00170      }
00171      Int_t ns = (*mdcTrackTds)->nster();
00172      Int_t fL = (*mdcTrackTds)->firstLayer();
00173      Int_t lL = (*mdcTrackTds)->lastLayer();
00174      Int_t nlayer = (*mdcTrackTds)->nlayer();       
00175 
00176      TMdcTrack *mdcTrackRoot = new TMdcTrack();
00177      //m_common.m_mdcTrackMap[(*mdcTrackTds)] = mdcTrackRoot;
00178      mdcTrackRoot->setTrackId( trackId );
00179     
00180      mdcTrackRoot->setHelix(helix);
00181      log<<MSG::INFO<<"test,trackId: "<<mdcTrackRoot->trackId()<<endreq;
00182      log<<MSG::INFO<<"test,px: "<<mdcTrackRoot->px()
00183                    <<"test,py: "<<mdcTrackRoot->py()
00184                    <<"test,pz: "<<mdcTrackRoot->pz()<<endreq;
00185  
00186      mdcTrackRoot->setStat( stat );  
00187      mdcTrackRoot->setChi2( chi );  
00188      mdcTrackRoot->setNdof( ndof );  
00189      mdcTrackRoot->setErr( err );   
00190      mdcTrackRoot->setNster( ns  );  
00191      mdcTrackRoot->setFirstLayer(fL);
00192      mdcTrackRoot->setLastLayer(lL);
00193      mdcTrackRoot->setNlayer(nlayer);
00194      
00195      recEvt->addMdcTrack(mdcTrackRoot);
00196   }
00197 
00198   return StatusCode::SUCCESS;
00199 }
00200 #endif

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