/search.css" rel="stylesheet" type="text/css"/> /search.js">
00001 #include "RecEventCnv.h" 00002 #include "PerBaseEvent/HeaderObjectCnv.h" 00003 #include "Conventions/Electronics.h" 00004 00005 using namespace DayaBay; 00006 using namespace std; 00007 00008 RecHeaderCnv::RecHeaderCnv(ISvcLocator* svc) 00009 : RootIOTypedCnv<PerRecHeader,RecHeader>("PerRecHeader", 00010 classID(),svc) 00011 { 00012 } 00013 00014 RecHeaderCnv::~RecHeaderCnv() 00015 { 00016 } 00017 00018 00019 StatusCode RecHeaderCnv::PerToTran(const PerRecHeader& perobj, 00020 DayaBay::RecHeader& tranobj) 00021 { 00022 MsgStream log(msgSvc(), "RecHeaderCnv::PerToTran"); 00023 StatusCode sc = HeaderObjectCnv::toTran(perobj, tranobj); 00024 if(sc.isFailure()) return sc; 00025 00026 DayaBay::RecTrigger& recTr = tranobj.recTrigger(); 00027 recTr.setHeader(&tranobj); 00028 Detector det((Site::Site_t)perobj.site, 00029 (DetectorId::DetectorId_t)perobj.detector); 00030 recTr.setDetector(det); 00031 recTr.setTriggerType(Trigger::TriggerType_t (perobj.triggerType)); 00032 recTr.setTriggerNumber( perobj.triggerNumber ); 00033 00034 timespec value = {perobj.triggerTimeSec, perobj.triggerTimeNanoSec}; 00035 TimeStamp tstamp(value); 00036 recTr.setTriggerTime(tstamp); 00037 00038 recTr.setEnergy( perobj.energy ); 00039 recTr.setRawEvis( perobj.rawEvis ); 00040 recTr.setEnrec( perobj.enrec ); 00041 recTr.setEprec( perobj.eprec ); 00042 recTr.setPosition( CLHEP::HepLorentzVector(perobj.x, perobj.y, 00043 perobj.z, perobj.t) ); 00044 recTr.setDirection( CLHEP::HepLorentzVector(perobj.dx, perobj.dy, 00045 perobj.dz, perobj.dt) ); 00046 recTr.setEnergyStatus( perobj.energyStatus ); 00047 recTr.setPositionStatus( perobj.positionStatus ); 00048 recTr.setDirectionStatus( perobj.directionStatus ); 00049 recTr.setEnergyQuality( perobj.energyQuality ); 00050 recTr.setPositionQuality( perobj.positionQuality ); 00051 recTr.setDirectionQuality( perobj.directionQuality ); 00052 if(perobj.errorMatrixDim>0){ 00053 CLHEP::HepMatrix errMatrix(perobj.errorMatrixDim, 00054 perobj.errorMatrixDim, 00055 0); 00056 for(int row=1; row<perobj.errorMatrixDim; row++){ 00057 for(int col=1; col<perobj.errorMatrixDim; col++){ 00058 int rcIndex = (row-1)*perobj.errorMatrixDim + (col-1); 00059 errMatrix(row,col) = perobj.errorMatrix[rcIndex]; 00060 } 00061 } 00062 recTr.setErrorMatrix( errMatrix ); 00063 }else{ 00064 recTr.setErrorMatrix( CLHEP::HepMatrix() ); 00065 } 00066 return StatusCode::SUCCESS; 00067 } 00068 00069 StatusCode RecHeaderCnv::TranToPer(const DayaBay::RecHeader& tranobj, 00070 PerRecHeader& perobj) 00071 { 00072 MsgStream log(msgSvc(), "RecHeaderCnv::TranToPer"); 00073 StatusCode sc = HeaderObjectCnv::toPer(tranobj,perobj); 00074 if (sc.isFailure()) return sc; 00075 const DayaBay::RecTrigger& recTr = tranobj.recTrigger(); 00076 00077 perobj.site = (recTr.detector()).site(); 00078 perobj.detector = (recTr.detector()).detectorId(); 00079 perobj.triggerType = recTr.triggerType(); 00080 perobj.triggerNumber = recTr.triggerNumber(); 00081 perobj.triggerTimeSec = recTr.triggerTime().GetSec(); 00082 perobj.triggerTimeNanoSec = recTr.triggerTime().GetNanoSec(); 00083 00084 perobj.energy = recTr.energy(); 00085 perobj.rawEvis = recTr.rawEvis(); 00086 perobj.enrec = recTr.enrec(); 00087 perobj.eprec = recTr.eprec(); 00088 perobj.x = recTr.position().x(); 00089 perobj.y = recTr.position().y(); 00090 perobj.z = recTr.position().z(); 00091 perobj.t = recTr.position().t(); 00092 perobj.dx = recTr.direction().x(); 00093 perobj.dy = recTr.direction().y(); 00094 perobj.dz = recTr.direction().z(); 00095 perobj.dt = recTr.direction().t(); 00096 perobj.energyStatus = recTr.energyStatus(); 00097 perobj.positionStatus = recTr.positionStatus(); 00098 perobj.directionStatus = recTr.directionStatus(); 00099 perobj.energyQuality = recTr.energyQuality(); 00100 perobj.positionQuality = recTr.positionQuality(); 00101 perobj.directionQuality = recTr.directionQuality(); 00102 perobj.errorMatrixDim = recTr.errorMatrix().num_row(); 00103 perobj.errorMatrix.resize(perobj.errorMatrixDim*perobj.errorMatrixDim); 00104 if(perobj.errorMatrixDim>0){ 00105 for(int row=1; row<perobj.errorMatrixDim; row++){ 00106 for(int col=1; col<perobj.errorMatrixDim; col++){ 00107 int rcIndex = (row-1)*perobj.errorMatrixDim + (col-1); 00108 perobj.errorMatrix[rcIndex] = recTr.errorMatrix()(row,col); 00109 } 00110 } 00111 } 00112 00113 return StatusCode::SUCCESS; 00114 } 00115 00116 StatusCode RecHeaderCnv::fillRepRefs(IOpaqueAddress*, DataObject* dobj) { 00117 00118 MsgStream log(msgSvc(), "RecHeaderCnv::fillRepRefs"); 00119 //MsgStream log(msgSvc(), "fillRepRefs"); 00120 RecHeader* rh = dynamic_cast<RecHeader*>(dobj); 00121 00122 log << MSG::DEBUG 00123 << "Saving links to " << rh->inputHeaders().size() 00124 << " input headers" << endreq; 00125 00126 StatusCode sc = HeaderObjectCnv::fillPer(m_rioSvc,*rh,*m_perOutObj); 00127 00128 if (sc.isFailure()) { 00129 log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq; 00130 return sc; 00131 } 00132 00133 // ... fill RecHeader part... 00134 return sc; 00135 } 00136 00137 StatusCode RecHeaderCnv::fillObjRefs(IOpaqueAddress*, DataObject* dobj) { 00138 //MsgStream log(msgSvc(), "RecHeaderCnv::fillObjRefs"); 00139 MsgStream log(msgSvc(), "fillObjRefs"); 00140 HeaderObject* hobj = dynamic_cast<HeaderObject*>(dobj); 00141 00142 StatusCode sc = HeaderObjectCnv::fillTran(m_rioSvc,*m_perInObj,*hobj); 00143 if (sc.isFailure()) { 00144 log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq; 00145 return sc; 00146 } 00147 00148 log << MSG::DEBUG 00149 << "Restored links to " << hobj->inputHeaders().size() 00150 << " input headers" << endreq; 00151 00152 // ... fill RecHeader part... 00153 return sc; 00154 } 00155