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