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

Go to the documentation of this file.
00001 #ifndef RecMdcHitCnv_CXX
00002 #define RecMdcHitCnv_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 
00012 #include "ReconEvent/ReconEvent.h"
00013 #include "MdcRecEvent/RecMdcHit.h"
00014 #include "Identifier/Identifier.h"
00015 
00016 #include "RootEventData/TRecMdcHit.h" // standard root object
00017 #include "RootEventData/TRecTrackEvent.h"
00018 
00019 #include "RootCnvSvc/Rec/RecTrackCnv.h"
00020 #include "RootCnvSvc/Rec/RecMdcHitCnv.h"
00021 #include "RootCnvSvc/RootAddress.h"
00022 
00023 #include <vector>
00024 
00025 using namespace std;
00026 
00027 
00028 RecMdcHitCnv::RecMdcHitCnv(ISvcLocator* svc)
00029 : RootEventBaseCnv(classID(), svc)
00030 {
00031 
00032     // Here we associate this converter with the /Event path on the TDS.
00033     MsgStream log(msgSvc(), "RecMdcHitCnv");
00034     //log << MSG::DEBUG << "Constructor called for " << objType() << endreq;
00035     //m_rootTreename ="Rec";
00036     m_rootBranchname ="m_recMdcHitCol";
00037     //declareObject(EventModel::Recon::RecMdcHitCol, objType(), m_rootTreename, m_rootBranchname);
00038     m_adresses.push_back(&m_recMdcHitCol);
00039     m_recMdcHitCol=0;
00040 }
00041 
00042 StatusCode RecMdcHitCnv::TObjectToDataObject(DataObject*& refpObject) {
00043   // creation of TDS object from root object
00044   MsgStream log(msgSvc(), "RecMdcHitCnv");
00045   log << MSG::DEBUG << "RecMdcHitCnv::TObjectToDataObject" << endreq;
00046 
00047   // create the TDS location for the RecMdcHit Collection
00048   RecMdcHitCol* recMdcHitCol = new RecMdcHitCol;
00049   refpObject = recMdcHitCol;
00050 
00051   // now convert
00052   if (!m_recMdcHitCol) return StatusCode::SUCCESS;
00053   TIter mdcHitIter(m_recMdcHitCol);
00054   TRecMdcHit *recMdcHitRoot = 0;
00055   while ((recMdcHitRoot = (TRecMdcHit*)mdcHitIter.Next())) {
00056     int      id = recMdcHitRoot->getId();
00057     int      trackId = recMdcHitRoot->getTrkId();
00058     double   driftDistLeft = recMdcHitRoot->getDriftDistLeft();
00059     double   driftDistRight = recMdcHitRoot->getDriftDistRight();
00060     double   errDriftDistLeft = recMdcHitRoot->getErrDriftDistLeft();
00061     double   errDriftDistRight = recMdcHitRoot->getErrDriftDistRight();
00062     double   chisqAdd = recMdcHitRoot->getChisqAdd();
00063     int      flagLR = recMdcHitRoot->getFlagLR(); 
00064     int      stat = recMdcHitRoot->getStat(); 
00065     long int mdcId(recMdcHitRoot->getMdcId()); 
00066     double   tdc = recMdcHitRoot->getTdc();
00067     double   adc = recMdcHitRoot->getAdc();
00068     double   driftT = recMdcHitRoot->getDriftT();
00069     double   doca = recMdcHitRoot->getDoca();
00070     double   entra = recMdcHitRoot->getEntra();
00071     double   zhit = recMdcHitRoot->getZhit();
00072     double   fltLen = recMdcHitRoot->getFltLen();
00073 
00074     RecMdcHit *recMdcHit= new RecMdcHit();
00075     m_common.m_rootRecMdcHitMap[recMdcHitRoot] = recMdcHit;
00076 
00077     recMdcHit->setId( id );
00078     recMdcHit->setTrkId( trackId );
00079     recMdcHit->setDriftDistLeft( driftDistLeft );
00080     recMdcHit->setDriftDistRight( driftDistRight );
00081     recMdcHit->setErrDriftDistLeft( errDriftDistLeft );
00082     recMdcHit->setErrDriftDistRight( errDriftDistRight );
00083     recMdcHit->setChisqAdd( chisqAdd );
00084     recMdcHit->setFlagLR( flagLR );
00085     recMdcHit->setStat( stat );
00086     recMdcHit->setMdcId( Identifier(mdcId) );
00087     recMdcHit->setTdc( tdc );
00088     recMdcHit->setAdc( adc );
00089     recMdcHit->setDriftT( driftT );
00090     recMdcHit->setDoca( doca );
00091     recMdcHit->setEntra( entra );
00092     recMdcHit->setZhit( zhit );
00093     recMdcHit->setFltLen( fltLen );
00094 
00095     recMdcHitCol->push_back(recMdcHit);
00096   }
00097     return StatusCode::SUCCESS;
00098 }
00099 
00100 StatusCode RecMdcHitCnv::DataObjectToTObject(DataObject* obj,RootAddress* rootaddr) {
00101  
00102   MsgStream log(msgSvc(), "RecMdcHitCnv");
00103   log << MSG::DEBUG << "RecMdcHitCnv::DataObjectToTObject" << endreq;
00104  
00105   RecMdcHitCol * mdcHitColTds=dynamic_cast<RecMdcHitCol *> (obj);
00106   if (!mdcHitColTds) {
00107     log << MSG::ERROR << "Could not downcast to RecMdcHitCol" << endreq;
00108     return StatusCode::FAILURE;
00109   }
00110  
00111   DataObject *evt;
00112   m_eds->findObject(EventModel::Recon::Event,evt);
00113   if (evt==NULL) {
00114     log << MSG::ERROR << "Could not get ReconEvent in TDS "  << endreq;
00115     return StatusCode::FAILURE;
00116   }
00117 
00118   ReconEvent * devtTds=dynamic_cast<ReconEvent *> (evt);
00119   if (!devtTds) {
00120     log << MSG::ERROR << "RecMdcHitCnv:Could not downcast to TDS ReconEvent" << endreq;
00121   }
00122 
00123   IOpaqueAddress *addr;
00124 
00125   m_cnvSvc->getRecTrackCnv()->createRep(evt,addr); 
00126   TRecTrackEvent *recEvt=m_cnvSvc->getRecTrackCnv()->getWriteObject();
00127 
00128   const TObjArray *m_recMdcHitCol = recEvt->getRecMdcHitCol();
00129   if (!m_recMdcHitCol) return StatusCode::SUCCESS;
00130   recEvt->clearRecMdcHitCol(); //necessary in case there is I/O at the same time since array is static
00131 
00132   RecMdcHitCol::const_iterator recMdcHit;
00133   for (recMdcHit = mdcHitColTds->begin(); recMdcHit != mdcHitColTds->end(); recMdcHit++) {
00134      Bool_t     isGrouped =(*recMdcHit)->isGrouped();
00135      Int_t      id =(*recMdcHit)->getId();
00136      Int_t      trackId =(*recMdcHit)->getTrkId();
00137      Double_t   driftDistLeft =(*recMdcHit)->getDriftDistLeft();
00138      Double_t   driftDistRight =(*recMdcHit)->getDriftDistRight();
00139      Double_t   errDriftDistLeft =(*recMdcHit)->getErrDriftDistLeft();
00140      Double_t   errDriftDistRight =(*recMdcHit)->getErrDriftDistRight();
00141      Double_t   chisqAdd =(*recMdcHit)->getChisqAdd();
00142      Int_t      flagLR =(*recMdcHit)->getFlagLR(); 
00143      Int_t      stat =(*recMdcHit)->getStat(); 
00144      UInt_t     mdcId =(*recMdcHit)->getMdcId().get_value(); 
00145      Double_t   tdc =(*recMdcHit)->getTdc();
00146      Double_t   adc =(*recMdcHit)->getAdc();
00147      Double_t   driftT =(*recMdcHit)->getDriftT();
00148      Double_t   doca =(*recMdcHit)->getDoca();
00149      Double_t   entra =(*recMdcHit)->getEntra();
00150      Double_t   zhit =(*recMdcHit)->getZhit();
00151      Double_t   fltLen =(*recMdcHit)->getFltLen();
00152 
00153      TRecMdcHit *recMdcHitRoot = new TRecMdcHit();
00154      //m_common.m_recMdcHitMap[(*recMdcHit)] = recMdcHitRoot;
00155 
00156      recMdcHitRoot->setIsGrouped( isGrouped );
00157      recMdcHitRoot->setId( id );
00158      recMdcHitRoot->setTrkId( trackId );
00159      recMdcHitRoot->setDriftDistLeft( driftDistLeft );
00160      recMdcHitRoot->setDriftDistRight( driftDistRight );
00161      recMdcHitRoot->setErrDriftDistLeft( errDriftDistLeft );
00162      recMdcHitRoot->setErrDriftDistRight( errDriftDistRight );
00163      log<<MSG::INFO<<" recMdcHitRoot.ddl: "<<recMdcHitRoot->getDriftDistLeft()
00164                    <<" recMdcHitRoot.erddl: "<<recMdcHitRoot->getErrDriftDistLeft()
00165                    <<endreq;
00166      recMdcHitRoot->setChisqAdd( chisqAdd );
00167      recMdcHitRoot->setFlagLR( flagLR );
00168      recMdcHitRoot->setStat( stat );
00169      recMdcHitRoot->setMdcId( mdcId );
00170      recMdcHitRoot->setTdc( tdc );
00171      recMdcHitRoot->setAdc( adc );
00172      recMdcHitRoot->setDriftT( driftT );
00173      recMdcHitRoot->setDoca( doca );
00174      recMdcHitRoot->setEntra( entra );
00175      recMdcHitRoot->setZhit( zhit );
00176      recMdcHitRoot->setFltLen( fltLen );
00177 
00178      recEvt->addRecMdcHit(recMdcHitRoot);
00179   }
00180   return StatusCode::SUCCESS;
00181 }
00182 #endif

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