/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/EvtRec/EvtRecVeeVertexCnv.cxx

Go to the documentation of this file.
00001 #include <algorithm>
00002 #include "GaudiKernel/MsgStream.h"
00003 
00004 #include "EventModel/EventModel.h"
00005 #include "EvtRecEvent/EvtRecObject.h"
00006 #include "EvtRecEvent/EvtRecVeeVertex.h"
00007 
00008 #include "RootEventData/TEvtRecObject.h"
00009 #include "RootEventData/TEvtRecVeeVertex.h"
00010 
00011 #include "RootCnvSvc/RootAddress.h"
00012 #include "RootCnvSvc/EvtRec/EvtRecCnv.h"
00013 #include "RootCnvSvc/EvtRec/EvtRecVeeVertexCnv.h"
00014 
00015 #include "CLHEP/Matrix/Vector.h"
00016 #include "CLHEP/Matrix/SymMatrix.h"
00017 using CLHEP::HepVector;
00018 using CLHEP::HepSymMatrix;
00019 
00020 EvtRecVeeVertexCnv::EvtRecVeeVertexCnv(ISvcLocator* svc)
00021    : RootEventBaseCnv(classID(), svc)
00022 {
00023    m_rootBranchname = "m_evtRecVeeVertexCol";
00024    m_adresses.push_back(&m_evtRecVeeVertexCol);
00025    m_evtRecVeeVertexCol = 0;
00026 }
00027 
00028 StatusCode EvtRecVeeVertexCnv::TObjectToDataObject(DataObject*& refpObject) {
00029   // creation of TDS object from root object
00030   MsgStream log(msgSvc(), "EvtRecVeeVertexCnv");
00031   log << MSG::DEBUG << "EvtRecVeeVertexCnv::TObjectToDataObject" << endreq;
00032 
00033   // create the TDS location for the EvtRecVeeVertex Collection
00034   EvtRecVeeVertexCol* evtRecVeeVertexCol = new EvtRecVeeVertexCol;
00035   refpObject = evtRecVeeVertexCol;
00036 
00037   if ( ! m_evtRecVeeVertexCol ) return StatusCode::SUCCESS;
00038 
00039   IDataProviderSvc* dataSvc = 0;
00040   StatusCode sc = serviceLocator()->getService("EventDataSvc",
00041         IDataProviderSvc::interfaceID(), (IInterface*&)dataSvc);
00042   if ( sc.isFailure() ) {
00043      log << MSG::FATAL << "Could not get EventDataSvc in EvtRecVeeVertexCnv" << endreq;
00044      return sc;
00045   }
00046 
00047   SmartDataPtr<EvtRecTrackCol> evtRecTrackCol(dataSvc, EventModel::EvtRec::EvtRecTrackCol);
00048   if ( ! evtRecTrackCol) {
00049      log << MSG::INFO << "Could not find EvtRecTrackCol" << endreq;
00050   }
00051 
00052   // convert
00053   TIter evtRecVeeVertexIter(m_evtRecVeeVertexCol);
00054   TEvtRecVeeVertex* evtRecVeeVertexRoot = 0;
00055   while ( (evtRecVeeVertexRoot = (TEvtRecVeeVertex*)evtRecVeeVertexIter.Next() ) ) {
00056      EvtRecVeeVertex* evtRecVeeVertex = new EvtRecVeeVertex();
00057      m_common.m_rootEvtRecVeeVertexMap[evtRecVeeVertexRoot] = evtRecVeeVertex;
00058      // set ....
00059      evtRecVeeVertex->setVertexId( evtRecVeeVertexRoot->vertexId() );
00060      evtRecVeeVertex->setVertexType( evtRecVeeVertexRoot->vertexType() );
00061      evtRecVeeVertex->setChi2( evtRecVeeVertexRoot->chi2() );
00062      evtRecVeeVertex->setNdof( evtRecVeeVertexRoot->ndof() );
00063      evtRecVeeVertex->setMass( evtRecVeeVertexRoot->mass() );
00064 
00065      HepVector wTrackParameter(7, 0);
00066      for (int i = 0; i < 7; i++) {
00067        wTrackParameter[i] = evtRecVeeVertexRoot->w(i);
00068      }
00069      evtRecVeeVertex->setW( wTrackParameter );
00070 
00071      HepSymMatrix EwTrackParameter(7, 0);
00072      int i = 0;
00073      for (int j = 0; j < 7; j++) {
00074       for (int k = j; k < 7; k++) {
00075         EwTrackParameter[j][k] = EwTrackParameter[k][j] = evtRecVeeVertexRoot->Ew(i);
00076         i++;
00077        }
00078      }
00079      evtRecVeeVertex->setEw( EwTrackParameter );
00080 
00081      std::pair<int, int> pairId;
00082      pairId.first = evtRecVeeVertexRoot->pair(0);
00083      pairId.second = evtRecVeeVertexRoot->pair(1);
00084      evtRecVeeVertex->setPair( pairId );
00085      evtRecVeeVertex->setNCharge( evtRecVeeVertexRoot->nCharge() );
00086      evtRecVeeVertex->setNTracks( evtRecVeeVertexRoot->nTracks() );
00087      int evtRecTrackId0 = evtRecVeeVertexRoot->daughter(0);
00088      if ( evtRecTrackId0 >= 0) {
00089         evtRecVeeVertex->addDaughter(
00090             dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(evtRecTrackId0)), 0
00091               );
00092      }
00093      int evtRecTrackId1 = evtRecVeeVertexRoot->daughter(1);
00094      if ( evtRecTrackId1 >= 0) {
00095         evtRecVeeVertex->addDaughter(
00096             dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(evtRecTrackId1)), 1
00097               );
00098      }
00099 
00100      evtRecVeeVertexCol->push_back(evtRecVeeVertex);
00101   }
00102 
00103   delete m_evtRecVeeVertexCol;
00104   m_evtRecVeeVertexCol = 0;
00105   return StatusCode::SUCCESS;
00106 }
00107 
00108 StatusCode EvtRecVeeVertexCnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) {
00109   MsgStream log(msgSvc(), "EvtRecVeeVertexCnv");
00110   log << MSG::DEBUG << "EvtRecVeeVertexCnv::DataObjectToTObject" << endreq;
00111 
00112   EvtRecVeeVertexCol* evtRecVeeVertexCol = dynamic_cast<EvtRecVeeVertexCol*> (obj);
00113   if ( ! evtRecVeeVertexCol ) {
00114     log << MSG::ERROR << "Could not downcast to EvtRecVeeVertexCol" << endreq;
00115     return StatusCode::FAILURE;
00116   }
00117 
00118   DataObject* evt;
00119   m_eds->findObject(EventModel::EvtRec::Event, evt);
00120   if ( evt == NULL ) {
00121      log << MSG::ERROR << "Could not get EvtRecObject in TDS" << endreq;
00122      return StatusCode::FAILURE;
00123   }
00124   EvtRecObject* devtTds = dynamic_cast<EvtRecObject*> (evt);
00125   if ( ! devtTds ) {
00126     log << MSG::ERROR << "EvtRecVeeVertexCnv: Could not downcast to TDS EvtRecObject" << endreq;
00127   }
00128 
00129   IOpaqueAddress *addr;
00130   m_cnvSvc->getEvtRecCnv()->createRep(evt, addr);
00131   TEvtRecObject* recEvt = m_cnvSvc->getEvtRecCnv()->getWriteObject();
00132 
00133   const TObjArray* m_evtRecVeeVertexCol = recEvt->getEvtRecVeeVertexCol();
00134   if ( ! m_evtRecVeeVertexCol ) return StatusCode::SUCCESS;
00135 
00136   IDataProviderSvc* dataSvc = 0;
00137   StatusCode sc = serviceLocator()->getService("EventDataSvc",
00138         IDataProviderSvc::interfaceID(), (IInterface*&)dataSvc);
00139   if ( sc.isFailure() ) {
00140      log << MSG::FATAL << "Could not get EventDataSvc in EvtRecVeeVertexCnv" << endreq;
00141      return sc;
00142   }
00143 
00144   EvtRecTrackCol::iterator    evtRecTrackColbegin, evtRecTrackColend;
00145 
00146   SmartDataPtr<EvtRecTrackCol> evtRecTrackCol(dataSvc, EventModel::EvtRec::EvtRecTrackCol);
00147   if ( ! evtRecTrackCol) {
00148      log << MSG::INFO << "Could not find EvtRecTrackCol" << endreq;
00149   }
00150   else {
00151      evtRecTrackColbegin = evtRecTrackCol->begin();
00152      evtRecTrackColend = evtRecTrackCol->end();
00153   }
00154 
00155   // convert
00156   recEvt->clearEvtRecVeeVertexCol();
00157   EvtRecVeeVertexCol::const_iterator evtRecVeeVertex = evtRecVeeVertexCol->begin();
00158 
00159   for ( ; evtRecVeeVertex != evtRecVeeVertexCol->end(); evtRecVeeVertex++) {
00160      EvtRecVeeVertex* ptr = *evtRecVeeVertex;
00161      TEvtRecVeeVertex* evtRecVeeVertexRoot = new TEvtRecVeeVertex();
00162      // set ...
00163      evtRecVeeVertexRoot->setVertexId( ptr->vertexId() );
00164      evtRecVeeVertexRoot->setVertexType( ptr->vertexType() );
00165      evtRecVeeVertexRoot->setChi2( ptr->chi2() );
00166      evtRecVeeVertexRoot->setNdof( ptr->ndof() );
00167      evtRecVeeVertexRoot->setMass( ptr->mass() );
00168 
00169      double wTrackParameter[7];
00170      for (int i = 0; i < 7; i++) {
00171        wTrackParameter[i] = ptr->w()[i];
00172      }
00173      evtRecVeeVertexRoot->setW( wTrackParameter );
00174      double EwTrackParameter[28];
00175      int i = 0;
00176      for (int j = 0; j < 7; j++) {
00177       for (int k = j; k < 7; k++) {
00178         EwTrackParameter[i] = ptr->Ew()[j][k];
00179         i++;
00180        }
00181      }
00182      assert(i == 28);
00183      evtRecVeeVertexRoot->setEw( EwTrackParameter );
00184      int pairId[2];
00185      pairId[0] = ptr->pair(0);
00186      pairId[1] = ptr->pair(1);
00187      evtRecVeeVertexRoot->setPair( pairId );
00188      evtRecVeeVertexRoot->setNCharge( ptr->nCharge() );
00189      evtRecVeeVertexRoot->setNTracks( ptr->nTracks() );
00190      
00191      int daughterId[2];
00192      if ( ptr->daughter(0).target() != NULL && ptr->daughter(1).target() != NULL ) {
00193        assert(evtRecTrackColbegin != evtRecTrackColend);
00194        EvtRecTrackCol::iterator it0 = find(evtRecTrackColbegin, 
00195                                          evtRecTrackColend, ptr->daughter(0).target());
00196        EvtRecTrackCol::iterator it1 = find(evtRecTrackColbegin, 
00197                                          evtRecTrackColend, ptr->daughter(1).target());
00198        assert(it0 != evtRecTrackColend);
00199        assert(it1 != evtRecTrackColend);
00200        daughterId[0] = it0 - evtRecTrackColbegin;
00201        daughterId[1] = it1 - evtRecTrackColbegin;
00202        evtRecVeeVertexRoot->setDaughter( daughterId );
00203      }
00204      recEvt->addEvtRecVeeVertex(evtRecVeeVertexRoot);
00205   }
00206 
00207   return StatusCode::SUCCESS;
00208 }

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