| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

RunDataCnv.cc

Go to the documentation of this file.
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     // ... fill RunHeader part...
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     // ... fill RunHeader part...
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 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:22:27 2011 for PerRunData by doxygen 1.4.7