/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/EvtRec/EvtRecPi0Cnv.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/EvtRecPi0.h"
00007 
00008 #include "RootEventData/TEvtRecObject.h"
00009 #include "RootEventData/TEvtRecPi0.h"
00010 
00011 #include "RootCnvSvc/RootAddress.h"
00012 #include "RootCnvSvc/EvtRec/EvtRecCnv.h"
00013 #include "RootCnvSvc/EvtRec/EvtRecPi0Cnv.h"
00014 
00015 #include "CLHEP/Matrix/Vector.h"
00016 #include "CLHEP/Matrix/SymMatrix.h"
00017 
00018 #include <vector>
00019 
00020 
00021 using CLHEP::HepVector;
00022 using CLHEP::HepSymMatrix;
00023 
00024 EvtRecPi0Cnv::EvtRecPi0Cnv(ISvcLocator* svc)
00025    : RootEventBaseCnv(classID(), svc)
00026 {
00027    m_rootBranchname = "m_evtRecPi0Col";
00028    m_adresses.push_back(&m_evtRecPi0Col);
00029    m_evtRecPi0Col = 0;
00030 }
00031 
00032 StatusCode EvtRecPi0Cnv::TObjectToDataObject(DataObject*& refpObject) {
00033   // creation of TDS object from root object
00034   MsgStream log(msgSvc(), "EvtRecPi0Cnv");
00035   log << MSG::DEBUG << "EvtRecPi0Cnv::TObjectToDataObject" << endreq;
00036 
00037   // create the TDS location for the EvtRecPi0 Collection
00038   EvtRecPi0Col* evtRecPi0Col = new EvtRecPi0Col;
00039   refpObject = evtRecPi0Col;
00040 
00041   if ( ! m_evtRecPi0Col ) return StatusCode::SUCCESS;
00042 
00043   IDataProviderSvc* dataSvc = 0;
00044   StatusCode sc = serviceLocator()->getService("EventDataSvc",
00045         IDataProviderSvc::interfaceID(), (IInterface*&)dataSvc);
00046   if ( sc.isFailure() ) {
00047      log << MSG::FATAL << "Could not get EventDataSvc in EvtRecPi0Cnv" << endreq;
00048      return sc;
00049   }
00050 
00051   SmartDataPtr<EvtRecTrackCol> evtRecTrackCol(dataSvc, EventModel::EvtRec::EvtRecTrackCol);
00052   if ( ! evtRecTrackCol) {
00053      log << MSG::INFO << "Could not find EvtRecTrackCol" << endreq;
00054   }
00055 
00056   // convert
00057   TIter evtRecPi0Iter(m_evtRecPi0Col);
00058   TEvtRecPi0* evtRecPi0Root = 0;
00059   while ( (evtRecPi0Root = (TEvtRecPi0*)evtRecPi0Iter.Next() ) ) {
00060      EvtRecPi0* evtRecPi0 = new EvtRecPi0();
00061      m_common.m_rootEvtRecPi0Map[evtRecPi0Root] = evtRecPi0;
00062      
00063      // set ....
00064      evtRecPi0->setUnconMass( evtRecPi0Root->unconMass() );
00065      evtRecPi0->setChisq( evtRecPi0Root->chisq() );
00066      
00067      HepLorentzVector hiP4(evtRecPi0Root->hiPxfit(),evtRecPi0Root->hiPyfit(),evtRecPi0Root->hiPzfit(),evtRecPi0Root->hiPefit());
00068      HepLorentzVector loP4(evtRecPi0Root->loPxfit(),evtRecPi0Root->loPyfit(),evtRecPi0Root->loPzfit(),evtRecPi0Root->loPefit());
00069      evtRecPi0->setHiPfit(hiP4);
00070      evtRecPi0->setLoPfit(loP4);
00071      
00072      int hiEnGammatrk=evtRecPi0Root->hiEnGamma();
00073      int loEnGammatrk=evtRecPi0Root->loEnGamma();
00074      evtRecPi0->setHiEnGamma(
00075                              dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(hiEnGammatrk))
00076                             );
00077      evtRecPi0->setLoEnGamma(
00078                              dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(loEnGammatrk))
00079                             );
00080      
00081      
00082      evtRecPi0Col->push_back(evtRecPi0);
00083   }
00084 
00085   delete m_evtRecPi0Col;
00086   m_evtRecPi0Col = 0;
00087   return StatusCode::SUCCESS;
00088 }
00089 
00090 StatusCode EvtRecPi0Cnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) {
00091   MsgStream log(msgSvc(), "EvtRecPi0Cnv");
00092   log << MSG::DEBUG << "EvtRecPi0Cnv::DataObjectToTObject" << endreq;
00093 
00094   EvtRecPi0Col* evtRecPi0Col = dynamic_cast<EvtRecPi0Col*> (obj);
00095   if ( ! evtRecPi0Col ) {
00096     log << MSG::ERROR << "Could not downcast to EvtRecPi0Col" << endreq;
00097     return StatusCode::FAILURE;
00098   }
00099 
00100   DataObject* evt;
00101   m_eds->findObject(EventModel::EvtRec::Event, evt);
00102   if ( evt == NULL ) {
00103      log << MSG::ERROR << "Could not get EvtRecObject in TDS" << endreq;
00104      return StatusCode::FAILURE;
00105   }
00106   EvtRecObject* devtTds = dynamic_cast<EvtRecObject*> (evt);
00107   if ( ! devtTds ) {
00108     log << MSG::ERROR << "EvtRecPi0Cnv: Could not downcast to TDS EvtRecObject" << endreq;
00109   }
00110 
00111   IOpaqueAddress *addr;
00112   m_cnvSvc->getEvtRecCnv()->createRep(evt, addr);
00113   TEvtRecObject* recEvt = m_cnvSvc->getEvtRecCnv()->getWriteObject();
00114 
00115   const TObjArray* m_evtRecPi0Col = recEvt->getEvtRecPi0Col();
00116   if ( ! m_evtRecPi0Col ) return StatusCode::SUCCESS;
00117 
00118   IDataProviderSvc* dataSvc = 0;
00119   StatusCode sc = serviceLocator()->getService("EventDataSvc",
00120         IDataProviderSvc::interfaceID(), (IInterface*&)dataSvc);
00121   if ( sc.isFailure() ) {
00122      log << MSG::FATAL << "Could not get EventDataSvc in EvtRecPi0Cnv" << endreq;
00123      return sc;
00124   }
00125 
00126   EvtRecTrackCol::iterator    evtRecTrackColbegin, evtRecTrackColend;
00127 
00128   SmartDataPtr<EvtRecTrackCol> evtRecTrackCol(dataSvc, EventModel::EvtRec::EvtRecTrackCol);
00129   if ( ! evtRecTrackCol) {
00130      log << MSG::INFO << "Could not find EvtRecTrackCol" << endreq;
00131   }
00132   else {
00133      evtRecTrackColbegin = evtRecTrackCol->begin();
00134      evtRecTrackColend = evtRecTrackCol->end();
00135   }
00136 
00137   // convert
00138   recEvt->clearEvtRecPi0Col();
00139   EvtRecPi0Col::const_iterator evtRecPi0 = evtRecPi0Col->begin();
00140 
00141   for ( ; evtRecPi0 != evtRecPi0Col->end(); evtRecPi0++) {
00142      EvtRecPi0* ptr = *evtRecPi0;
00143      TEvtRecPi0* evtRecPi0Root = new TEvtRecPi0();
00144 
00145      // set ...
00146      evtRecPi0Root->setUnconMass( ptr->unconMass() );
00147      evtRecPi0Root->setChisq( ptr->chisq() );
00148      
00149      
00150      HepLorentzVector hiP4=ptr->hiPfit();
00151      HepLorentzVector loP4=ptr->loPfit();
00152      evtRecPi0Root->setHiPxfit(hiP4.x());
00153      evtRecPi0Root->setHiPyfit(hiP4.y());
00154      evtRecPi0Root->setHiPzfit(hiP4.z());
00155      evtRecPi0Root->setHiPefit(hiP4.t());
00156      
00157      evtRecPi0Root->setLoPxfit(loP4.x());
00158      evtRecPi0Root->setLoPyfit(loP4.y());
00159      evtRecPi0Root->setLoPzfit(loP4.z());
00160      evtRecPi0Root->setLoPefit(loP4.t());
00161      
00162      
00163      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00164      EvtRecTrackCol::iterator it = find(evtRecTrackColbegin, 
00165                                         evtRecTrackColend, ptr->hiEnGamma());
00166      //assert(it != evtRecTrackColend);
00167      evtRecPi0Root->setHiEnGamma(it - evtRecTrackColbegin );
00168      
00169      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00170      it = find(evtRecTrackColbegin, 
00171                                         evtRecTrackColend, ptr->loEnGamma() );
00172      //assert(it != evtRecTrackColend);
00173      evtRecPi0Root->setLoEnGamma(it - evtRecTrackColbegin );
00174      
00175      
00176      
00177      recEvt->addEvtRecPi0(evtRecPi0Root);
00178   }
00179 
00180   return StatusCode::SUCCESS;
00181 }

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