/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RootCnvSvc/RootCnvSvc-02-01-12/src/EvtRec/EvtRecDTagCnv.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/EvtRecDTag.h"
00007 
00008 #include "RootEventData/TEvtRecObject.h"
00009 #include "RootEventData/TEvtRecDTag.h"
00010 
00011 #include "RootCnvSvc/RootAddress.h"
00012 #include "RootCnvSvc/EvtRec/EvtRecCnv.h"
00013 #include "RootCnvSvc/EvtRec/EvtRecDTagCnv.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 EvtRecDTagCnv::EvtRecDTagCnv(ISvcLocator* svc)
00025    : RootEventBaseCnv(classID(), svc)
00026 {
00027    m_rootBranchname = "m_evtRecDTagCol";
00028    m_adresses.push_back(&m_evtRecDTagCol);
00029    m_evtRecDTagCol = 0;
00030 }
00031 
00032 StatusCode EvtRecDTagCnv::TObjectToDataObject(DataObject*& refpObject) {
00033   // creation of TDS object from root object
00034   MsgStream log(msgSvc(), "EvtRecDTagCnv");
00035   log << MSG::DEBUG << "EvtRecDTagCnv::TObjectToDataObject" << endreq;
00036 
00037   // create the TDS location for the EvtRecDTag Collection
00038   EvtRecDTagCol* evtRecDTagCol = new EvtRecDTagCol;
00039   refpObject = evtRecDTagCol;
00040 
00041   if ( ! m_evtRecDTagCol ) 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 EvtRecDTagCnv" << 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 evtRecDTagIter(m_evtRecDTagCol);
00058   TEvtRecDTag* evtRecDTagRoot = 0;
00059   while ( (evtRecDTagRoot = (TEvtRecDTag*)evtRecDTagIter.Next() ) ) {
00060      EvtRecDTag* evtRecDTag = new EvtRecDTag();
00061      m_common.m_rootEvtRecDTagMap[evtRecDTagRoot] = evtRecDTag;
00062      
00063      // set ....
00064      evtRecDTag->setdecayMode( (EvtRecDTag::DecayMode)evtRecDTagRoot->decayMode() );
00065      evtRecDTag->settype( (EvtRecDTag::SelType)evtRecDTagRoot->type() );
00066      evtRecDTag->setbeamE( evtRecDTagRoot->beamE() );
00067      evtRecDTag->setmass( evtRecDTagRoot->mass() );
00068      evtRecDTag->setmBC( evtRecDTagRoot->mBC() );
00069      evtRecDTag->setdeltaE( evtRecDTagRoot->deltaE() );
00070      evtRecDTag->setcharge( evtRecDTagRoot->charge() );
00071      evtRecDTag->setcharm( evtRecDTagRoot->charm() );
00072      evtRecDTag->setnumOfChildren( evtRecDTagRoot->numOfChildren() );
00073      
00074      HepLorentzVector p4(evtRecDTagRoot->px(),evtRecDTagRoot->py(),evtRecDTagRoot->pz(),evtRecDTagRoot->pe());
00075      evtRecDTag->setp4(p4);
00076      
00077      
00078      const std::vector<int>& tracks=evtRecDTagRoot->tracks();
00079      const std::vector<int>& showers=evtRecDTagRoot->showers();
00080      const std::vector<int>& otherTracks=evtRecDTagRoot->otherTracks();
00081      const std::vector<int>& otherShowers=evtRecDTagRoot->otherShowers();
00082      const std::vector<int>& pionId=evtRecDTagRoot->pionId();
00083      const std::vector<int>& kaonId=evtRecDTagRoot->kaonId();
00084      
00085      for(unsigned int i=0; i<tracks.size();i++)
00086        evtRecDTag->addTrack(
00087                             dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(tracks[i]))
00088                             );
00089      
00090      for(unsigned int i=0; i<showers.size();i++)
00091        evtRecDTag->addShower(
00092                             dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(showers[i]))
00093                             );
00094      
00095      
00096      for(unsigned int i=0; i<otherTracks.size();i++)
00097        evtRecDTag->addOtherTrack(
00098                                  dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(otherTracks[i]))
00099                                  );
00100      
00101           
00102      for(unsigned int i=0; i<otherShowers.size();i++)
00103        evtRecDTag->addOtherShower(
00104                                   dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(otherShowers[i]))
00105                                   );
00106      
00107      for(unsigned int i=0; i<pionId.size();i++)
00108        evtRecDTag->addPionId(
00109                              dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(pionId[i]))
00110                              );
00111      
00112      for(unsigned int i=0; i<kaonId.size();i++)
00113        evtRecDTag->addKaonId(
00114                              dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(kaonId[i]))
00115                              );
00116           
00117      
00118      
00119      evtRecDTagCol->push_back(evtRecDTag);
00120   }
00121 
00122   delete m_evtRecDTagCol;
00123   m_evtRecDTagCol = 0;
00124   return StatusCode::SUCCESS;
00125 }
00126 
00127 StatusCode EvtRecDTagCnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) {
00128   MsgStream log(msgSvc(), "EvtRecDTagCnv");
00129   log << MSG::DEBUG << "EvtRecDTagCnv::DataObjectToTObject" << endreq;
00130 
00131   EvtRecDTagCol* evtRecDTagCol = dynamic_cast<EvtRecDTagCol*> (obj);
00132   if ( ! evtRecDTagCol ) {
00133     log << MSG::ERROR << "Could not downcast to EvtRecDTagCol" << endreq;
00134     return StatusCode::FAILURE;
00135   }
00136 
00137   DataObject* evt;
00138   m_eds->findObject(EventModel::EvtRec::Event, evt);
00139   if ( evt == NULL ) {
00140      log << MSG::ERROR << "Could not get EvtRecObject in TDS" << endreq;
00141      return StatusCode::FAILURE;
00142   }
00143   EvtRecObject* devtTds = dynamic_cast<EvtRecObject*> (evt);
00144   if ( ! devtTds ) {
00145     log << MSG::ERROR << "EvtRecDTagCnv: Could not downcast to TDS EvtRecObject" << endreq;
00146   }
00147 
00148   IOpaqueAddress *addr;
00149   m_cnvSvc->getEvtRecCnv()->createRep(evt, addr);
00150   TEvtRecObject* recEvt = m_cnvSvc->getEvtRecCnv()->getWriteObject();
00151 
00152   const TObjArray* m_evtRecDTagCol = recEvt->getEvtRecDTagCol();
00153   if ( ! m_evtRecDTagCol ) return StatusCode::SUCCESS;
00154 
00155   IDataProviderSvc* dataSvc = 0;
00156   StatusCode sc = serviceLocator()->getService("EventDataSvc",
00157         IDataProviderSvc::interfaceID(), (IInterface*&)dataSvc);
00158   if ( sc.isFailure() ) {
00159      log << MSG::FATAL << "Could not get EventDataSvc in EvtRecDTagCnv" << endreq;
00160      return sc;
00161   }
00162 
00163   EvtRecTrackCol::iterator    evtRecTrackColbegin, evtRecTrackColend;
00164 
00165   SmartDataPtr<EvtRecTrackCol> evtRecTrackCol(dataSvc, EventModel::EvtRec::EvtRecTrackCol);
00166   if ( ! evtRecTrackCol) {
00167      log << MSG::INFO << "Could not find EvtRecTrackCol" << endreq;
00168   }
00169   else {
00170      evtRecTrackColbegin = evtRecTrackCol->begin();
00171      evtRecTrackColend = evtRecTrackCol->end();
00172   }
00173 
00174   // convert
00175   recEvt->clearEvtRecDTagCol();
00176   EvtRecDTagCol::const_iterator evtRecDTag = evtRecDTagCol->begin();
00177 
00178   for ( ; evtRecDTag != evtRecDTagCol->end(); evtRecDTag++) {
00179      EvtRecDTag* ptr = *evtRecDTag;
00180      TEvtRecDTag* evtRecDTagRoot = new TEvtRecDTag();
00181 
00182      // set ...
00183      evtRecDTagRoot->setdecayMode( ptr->decayMode() );
00184      evtRecDTagRoot->settype( ptr->type() );
00185      evtRecDTagRoot->setbeamE( ptr->beamE() ); 
00186      evtRecDTagRoot->setmass( ptr->mass() );
00187      evtRecDTagRoot->setmBC( ptr->mBC() );
00188      evtRecDTagRoot->setdeltaE( ptr->deltaE() );
00189      evtRecDTagRoot->setcharge( ptr->charge() );
00190      evtRecDTagRoot->setcharm( ptr->charm() );
00191      evtRecDTagRoot->setnumOfChildren( ptr->numOfChildren() );
00192      
00193      HepLorentzVector p4=ptr->p4();
00194      evtRecDTagRoot->setpx(p4.x());
00195      evtRecDTagRoot->setpy(p4.y());
00196      evtRecDTagRoot->setpz(p4.z());
00197      evtRecDTagRoot->setpe(p4.t());
00198      
00199      
00200 
00201      SmartRefVector<EvtRecTrack> tracks=ptr->tracks();
00202      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00203      for(unsigned int i=0; i<tracks.size();i++){
00204        EvtRecTrackCol::iterator it = find(evtRecTrackColbegin, 
00205                                           evtRecTrackColend, tracks[i]);
00206        //assert(it != evtRecTrackColend);
00207        evtRecDTagRoot->addTrack(it - evtRecTrackColbegin );
00208      }
00209      
00210 
00211      SmartRefVector<EvtRecTrack> showers=ptr->showers();
00212      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00213      for(unsigned int i=0; i<showers.size();i++){
00214        EvtRecTrackCol::iterator it = find(evtRecTrackColbegin, 
00215                                           evtRecTrackColend, showers[i]);
00216        //assert(it != evtRecTrackColend);
00217        evtRecDTagRoot->addShower(it - evtRecTrackColbegin );
00218      }
00219      
00220      
00221      SmartRefVector<EvtRecTrack> otherTracks=ptr->otherTracks();
00222      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00223      for(unsigned int i=0; i<otherTracks.size();i++){
00224        EvtRecTrackCol::iterator it = find(evtRecTrackColbegin, 
00225                                           evtRecTrackColend, otherTracks[i]);
00226        //assert(it != evtRecTrackColend);
00227        evtRecDTagRoot->addOtherTrack(it - evtRecTrackColbegin );
00228      }
00229 
00230      SmartRefVector<EvtRecTrack> otherShowers=ptr->otherShowers();
00231      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00232      for(unsigned int i=0; i<otherShowers.size();i++){
00233        EvtRecTrackCol::iterator it = find(evtRecTrackColbegin, 
00234                                           evtRecTrackColend, otherShowers[i]);
00235        //assert(it != evtRecTrackColend);
00236        evtRecDTagRoot->addOtherShower(it - evtRecTrackColbegin );
00237      }
00238 
00239      SmartRefVector<EvtRecTrack> pionId=ptr->pionId();
00240      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00241      for(unsigned int i=0; i<pionId.size();i++){
00242        EvtRecTrackCol::iterator it = find(evtRecTrackColbegin,
00243                                           evtRecTrackColend, pionId[i]);
00244        //assert(it != evtRecTrackColend);
00245        evtRecDTagRoot->addPionId(it - evtRecTrackColbegin );
00246      }
00247 
00248      SmartRefVector<EvtRecTrack> kaonId=ptr->kaonId();
00249      //  assert(evtRecTrackColbegin != evtRecTrackColend);
00250      for(unsigned int i=0; i<kaonId.size();i++){
00251        EvtRecTrackCol::iterator it = find(evtRecTrackColbegin,
00252                                           evtRecTrackColend, kaonId[i]);
00253        //assert(it != evtRecTrackColend);
00254        evtRecDTagRoot->addKaonId(it - evtRecTrackColbegin );
00255      }
00256      
00257      
00258      recEvt->addEvtRecDTag(evtRecDTagRoot);
00259   }
00260 
00261   return StatusCode::SUCCESS;
00262 }

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