00001 #include "RunDataCnv.h"
00002 #include "PerBaseEvent/HeaderObjectCnv.h"
00003
00004 using namespace DayaBay;
00005 using namespace std;
00006
00007 RunHeaderCnv::RunHeaderCnv(ISvcLocator* svc)
00008 : RootIOTypedCnv<PerRunHeader,RunHeader>("PerRunHeader",
00009 classID(),svc)
00010 {
00011 }
00012
00013
00014 RunHeaderCnv::~RunHeaderCnv()
00015 {
00016 }
00017
00018 StatusCode RunHeaderCnv::PerToTran(const PerRunHeader& perobj,
00019 DayaBay::RunHeader& tranobj)
00020 {
00021 MsgStream log(msgSvc(), "RunHeaderCnv::PerToTran");
00022
00023 log << MSG::DEBUG << "Converting persistent to transient object" << endreq;
00024
00025 StatusCode sc = HeaderObjectCnv::toTran(perobj,tranobj);
00026 if (sc.isFailure()) return sc;
00027
00028 vector<PerRunData*> in_vec = perobj.runDataList;
00029 vector<PerRunData*>::iterator it;
00030
00031 for(it = in_vec.begin(); it != in_vec.end(); ++it)
00032 {
00033 RunData* runData = convert(**it);
00034 tranobj.runDataList().push_back(runData);
00035 }
00036 return StatusCode::SUCCESS;
00037 }
00038
00039 StatusCode RunHeaderCnv::TranToPer(
00040 const DayaBay::RunHeader& tranobj,
00041 PerRunHeader& perobj)
00042 {
00043 MsgStream log(msgSvc(), "RunHeaderCnv::TranToPer");
00044
00045 log << MSG::DEBUG << "Converting transient to persistent object" << endreq;
00046
00047 perobj.clear();
00048 StatusCode sc = HeaderObjectCnv::toPer(tranobj,perobj);
00049 if (sc.isFailure()) return sc;
00050
00051 vector<RunData*> in_vec = tranobj.runDataList();
00052 vector<RunData*>::iterator it;
00053
00054 for(it=in_vec.begin();it!=in_vec.end();++it){
00055 perobj.runDataList.push_back( convert(**it) );
00056 }
00057 return StatusCode::SUCCESS;
00058
00059 }
00060
00061 StatusCode RunHeaderCnv::fillRepRefs(IOpaqueAddress*, DataObject* dobj)
00062 {
00063 MsgStream log(msgSvc(), "RunHeaderCnv::fillRepRefs");
00064 RunHeader* rh = dynamic_cast<RunHeader*>(dobj);
00065
00066 log << MSG::INFO
00067 << "Got " << rh->inputHeaders().size() << " headers" << endreq;
00068
00069
00070 StatusCode sc = HeaderObjectCnv::fillPer(m_rioSvc,*rh,*m_perOutObj);
00071 if (sc.isFailure()) {
00072 log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00073 return sc;
00074 }
00075
00076
00077 return sc;
00078 }
00079
00080 StatusCode RunHeaderCnv::fillObjRefs(IOpaqueAddress*, DataObject* dobj)
00081 {
00082 MsgStream log(msgSvc(), "RunHeaderCnv::fillObjRefs");
00083 HeaderObject* hobj = dynamic_cast<HeaderObject*>(dobj);
00084 StatusCode sc = HeaderObjectCnv::fillTran(m_rioSvc,*m_perInObj,*hobj);
00085 if (sc.isFailure()) {
00086 log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00087 return sc;
00088 }
00089
00090 log << MSG::INFO
00091 << "Got " << hobj->inputHeaders().size() << " headers" << endreq;
00092
00093
00094 return sc;
00095 }
00096
00097 PerRunData* RunHeaderCnv::convert(const DayaBay::RunData& runData){
00098 std::vector<PerCalibSource> calibSources;
00099 int nSources = runData.calibSources().size();
00100 for(int srcIdx=0; srcIdx<nSources; srcIdx++){
00101 const CalibSource& source = (runData.calibSources())[srcIdx];
00102 PerCalibSource perSource(source.id(), source.ledFrequency(),
00103 source.adZPosition());
00104 calibSources.push_back(perSource);
00105 }
00106 return (new PerRunData(runData.runNumber(), runData.runType(),
00107 runData.detectors(), runData.startTime(),
00108 runData.endTime(), calibSources));
00109 }
00110
00111 RunData* RunHeaderCnv::convert(const PerRunData& perRunData)
00112 {
00113 RunData* runData = new RunData();
00114 runData->setRunNumber(perRunData.runNumber);
00115 runData->setRunType(perRunData.runType);
00116 runData->setDetectors(perRunData.detectors);
00117 runData->setStartTime(perRunData.startTime);
00118 runData->setEndTime(perRunData.endTime);
00119 int nSources = perRunData.calibSources.size();
00120 DayaBay::RunData::CalibSources calibSources;
00121 for(int srcIdx=0; srcIdx<nSources; srcIdx++){
00122 const PerCalibSource& perSource = perRunData.calibSources[srcIdx];
00123 CalibSource source;
00124 source.setId(perSource.id);
00125 source.setLedFrequency(perSource.ledFrequency);
00126 source.setAdZPosition(perSource.adZPosition);
00127 calibSources.push_back(source);
00128 }
00129 runData->setCalibSources(calibSources);
00130 return runData;
00131 }
00132