00001 #include <algorithm>
00002 #include "GaudiKernel/MsgStream.h"
00003
00004 #include "EventModel/EventModel.h"
00005 #include "EvtRecEvent/EvtRecObject.h"
00006 #include "EvtRecEvent/EvtRecEtaToGG.h"
00007
00008 #include "RootEventData/TEvtRecObject.h"
00009 #include "RootEventData/TEvtRecEtaToGG.h"
00010
00011 #include "RootCnvSvc/RootAddress.h"
00012 #include "RootCnvSvc/EvtRec/EvtRecCnv.h"
00013 #include "RootCnvSvc/EvtRec/EvtRecEtaToGGCnv.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 EvtRecEtaToGGCnv::EvtRecEtaToGGCnv(ISvcLocator* svc)
00025 : RootEventBaseCnv(classID(), svc)
00026 {
00027 m_rootBranchname = "m_evtRecEtaToGGCol";
00028 m_adresses.push_back(&m_evtRecEtaToGGCol);
00029 m_evtRecEtaToGGCol = 0;
00030 }
00031
00032 StatusCode EvtRecEtaToGGCnv::TObjectToDataObject(DataObject*& refpObject) {
00033
00034 MsgStream log(msgSvc(), "EvtRecEtaToGGCnv");
00035 log << MSG::DEBUG << "EvtRecEtaToGGCnv::TObjectToDataObject" << endreq;
00036
00037
00038 EvtRecEtaToGGCol* evtRecEtaToGGCol = new EvtRecEtaToGGCol;
00039 refpObject = evtRecEtaToGGCol;
00040
00041 if ( ! m_evtRecEtaToGGCol ) 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 EvtRecEtaToGGCnv" << 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
00057 TIter evtRecEtaToGGIter(m_evtRecEtaToGGCol);
00058 TEvtRecEtaToGG* evtRecEtaToGGRoot = 0;
00059 while ( (evtRecEtaToGGRoot = (TEvtRecEtaToGG*)evtRecEtaToGGIter.Next() ) ) {
00060 EvtRecEtaToGG* evtRecEtaToGG = new EvtRecEtaToGG();
00061 m_common.m_rootEvtRecEtaToGGMap[evtRecEtaToGGRoot] = evtRecEtaToGG;
00062
00063
00064 evtRecEtaToGG->setUnconMass( evtRecEtaToGGRoot->unconMass() );
00065 evtRecEtaToGG->setChisq( evtRecEtaToGGRoot->chisq() );
00066
00067 HepLorentzVector hiP4(evtRecEtaToGGRoot->hiPxfit(),evtRecEtaToGGRoot->hiPyfit(),evtRecEtaToGGRoot->hiPzfit(),evtRecEtaToGGRoot->hiPefit());
00068 HepLorentzVector loP4(evtRecEtaToGGRoot->loPxfit(),evtRecEtaToGGRoot->loPyfit(),evtRecEtaToGGRoot->loPzfit(),evtRecEtaToGGRoot->loPefit());
00069 evtRecEtaToGG->setHiPfit(hiP4);
00070 evtRecEtaToGG->setLoPfit(loP4);
00071
00072 int hiEnGammatrk=evtRecEtaToGGRoot->hiEnGamma();
00073 int loEnGammatrk=evtRecEtaToGGRoot->loEnGamma();
00074 evtRecEtaToGG->setHiEnGamma(
00075 dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(hiEnGammatrk))
00076 );
00077 evtRecEtaToGG->setLoEnGamma(
00078 dynamic_cast<EvtRecTrack*>(evtRecTrackCol->containedObject(loEnGammatrk))
00079 );
00080
00081
00082 evtRecEtaToGGCol->push_back(evtRecEtaToGG);
00083 }
00084
00085 delete m_evtRecEtaToGGCol;
00086 m_evtRecEtaToGGCol = 0;
00087 return StatusCode::SUCCESS;
00088 }
00089
00090 StatusCode EvtRecEtaToGGCnv::DataObjectToTObject(DataObject* obj, RootAddress* rootaddr) {
00091 MsgStream log(msgSvc(), "EvtRecEtaToGGCnv");
00092 log << MSG::DEBUG << "EvtRecEtaToGGCnv::DataObjectToTObject" << endreq;
00093
00094 EvtRecEtaToGGCol* evtRecEtaToGGCol = dynamic_cast<EvtRecEtaToGGCol*> (obj);
00095 if ( ! evtRecEtaToGGCol ) {
00096 log << MSG::ERROR << "Could not downcast to EvtRecEtaToGGCol" << 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 << "EvtRecEtaToGGCnv: 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_evtRecEtaToGGCol = recEvt->getEvtRecEtaToGGCol();
00116 if ( ! m_evtRecEtaToGGCol ) 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 EvtRecEtaToGGCnv" << 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
00138 recEvt->clearEvtRecEtaToGGCol();
00139 EvtRecEtaToGGCol::const_iterator evtRecEtaToGG = evtRecEtaToGGCol->begin();
00140
00141 for ( ; evtRecEtaToGG != evtRecEtaToGGCol->end(); evtRecEtaToGG++) {
00142 EvtRecEtaToGG* ptr = *evtRecEtaToGG;
00143 TEvtRecEtaToGG* evtRecEtaToGGRoot = new TEvtRecEtaToGG();
00144
00145
00146 evtRecEtaToGGRoot->setUnconMass( ptr->unconMass() );
00147 evtRecEtaToGGRoot->setChisq( ptr->chisq() );
00148
00149
00150 HepLorentzVector hiP4=ptr->hiPfit();
00151 HepLorentzVector loP4=ptr->loPfit();
00152 evtRecEtaToGGRoot->setHiPxfit(hiP4.x());
00153 evtRecEtaToGGRoot->setHiPyfit(hiP4.y());
00154 evtRecEtaToGGRoot->setHiPzfit(hiP4.z());
00155 evtRecEtaToGGRoot->setHiPefit(hiP4.t());
00156
00157 evtRecEtaToGGRoot->setLoPxfit(loP4.x());
00158 evtRecEtaToGGRoot->setLoPyfit(loP4.y());
00159 evtRecEtaToGGRoot->setLoPzfit(loP4.z());
00160 evtRecEtaToGGRoot->setLoPefit(loP4.t());
00161
00162
00163
00164 EvtRecTrackCol::iterator it = find(evtRecTrackColbegin,
00165 evtRecTrackColend, ptr->hiEnGamma());
00166
00167 evtRecEtaToGGRoot->setHiEnGamma(it - evtRecTrackColbegin );
00168
00169
00170 it = find(evtRecTrackColbegin,
00171 evtRecTrackColend, ptr->loEnGamma() );
00172
00173 evtRecEtaToGGRoot->setLoEnGamma(it - evtRecTrackColbegin );
00174
00175
00176
00177 recEvt->addEvtRecEtaToGG(evtRecEtaToGGRoot);
00178 }
00179
00180 return StatusCode::SUCCESS;
00181 }