00001 #include "SimReadoutEventCnv.h"
00002 #include "PerBaseEvent/HeaderObjectCnv.h"
00003 #include "ReadoutEventCnv.h"
00004
00005 using namespace DayaBay;
00006 using namespace std;
00007
00008 SimReadoutHeaderCnv::SimReadoutHeaderCnv(ISvcLocator* svc)
00009 : RootIOTypedCnv<PerSimReadoutHeader,SimReadoutHeader>("PerSimReadoutHeader",
00010 classID(),svc)
00011 {
00012
00013 m_saveSimReadouts = true;
00014 char* pruneSimReadouts = getenv("NUWA_PRUNESIMREADOUTS");
00015 if (pruneSimReadouts) {
00016 m_saveSimReadouts = false;
00017 }
00018 }
00019
00020
00021 SimReadoutHeaderCnv::~SimReadoutHeaderCnv()
00022 {
00023 }
00024
00025 StatusCode SimReadoutHeaderCnv::PerToTran(const PerSimReadoutHeader& perobj,
00026 DayaBay::SimReadoutHeader& tranobj)
00027 {
00028 MsgStream log(msgSvc(), "SimReadoutHeaderCnv::PerToTran");
00029
00030 StatusCode sc = HeaderObjectCnv::toTran(perobj,tranobj);
00031 if (sc.isFailure()) return sc;
00032
00033 vector<PerSimReadout*> in_vec = perobj.readouts;
00034 vector<PerSimReadout*>::iterator it;
00035
00036 for(it = in_vec.begin(); it != in_vec.end(); ++it)
00037 {
00038 SimReadout* simReadout = convert(**it);
00039 simReadout->setHeader(&tranobj);
00040 tranobj.readouts().push_back(simReadout);
00041 }
00042 return StatusCode::SUCCESS;
00043 }
00044
00045 StatusCode SimReadoutHeaderCnv::TranToPer(
00046 const DayaBay::SimReadoutHeader& tranobj,
00047 PerSimReadoutHeader& perobj)
00048 {
00049 MsgStream log(msgSvc(), "SimReadoutHeaderCnv::TranToPer");
00050 perobj.clear();
00051 StatusCode sc = HeaderObjectCnv::toPer(tranobj,perobj);
00052 if (sc.isFailure()) return sc;
00053
00054 if(m_saveSimReadouts){
00055 const vector<SimReadout*>& in_vec = tranobj.readouts();
00056 vector<SimReadout*>::const_iterator it;
00057
00058 for(it=in_vec.begin();it!=in_vec.end();++it){
00059 perobj.readouts.push_back( convert(**it) );
00060 }
00061 }
00062 return StatusCode::SUCCESS;
00063
00064 }
00065
00066 StatusCode SimReadoutHeaderCnv::fillRepRefs(IOpaqueAddress*, DataObject* dobj)
00067 {
00068 MsgStream log(msgSvc(), "SimReadoutHeaderCnv::fillRepRefs");
00069 SimReadoutHeader* rh = dynamic_cast<SimReadoutHeader*>(dobj);
00070
00071 log << MSG::DEBUG
00072 << "Saving links to " << rh->inputHeaders().size()
00073 << " input headers" << endreq;
00074
00075 StatusCode sc = HeaderObjectCnv::fillPer(m_rioSvc,*rh,*m_perOutObj);
00076 if (sc.isFailure()) {
00077 log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00078 return sc;
00079 }
00080
00081
00082 return sc;
00083 }
00084
00085 StatusCode SimReadoutHeaderCnv::fillObjRefs(IOpaqueAddress*, DataObject* dobj)
00086 {
00087 MsgStream log(msgSvc(), "SimReadoutHeaderCnv::fillObjRefs");
00088 HeaderObject* hobj = dynamic_cast<HeaderObject*>(dobj);
00089 StatusCode sc = HeaderObjectCnv::fillTran(m_rioSvc,*m_perInObj,*hobj);
00090 if (sc.isFailure()) {
00091 log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00092 return sc;
00093 }
00094
00095 log << MSG::DEBUG
00096 << "Restored links to " << hobj->inputHeaders().size()
00097 << " input headers" << endreq;
00098
00099
00100 return sc;
00101 }
00102
00103 PerSimReadout* SimReadoutHeaderCnv::convert(const DayaBay::SimReadout& simRo){
00104 PerSimReadout* perSimRo = new PerSimReadout;
00105 ReadoutHeaderCnv *readoutHeaderCnv
00106 = dynamic_cast<ReadoutHeaderCnv*>( this->otherConverter(CLID_ReadoutHeader) );
00107 if(!readoutHeaderCnv){
00108 return 0;
00109 }
00110 perSimRo->readout = readoutHeaderCnv->convert( *(simRo.readout()) );
00111 return perSimRo;
00112 }
00113
00114 SimReadout* SimReadoutHeaderCnv::convert(const PerSimReadout& perSimRo)
00115 {
00116 SimReadout* simRo = new SimReadout;
00117 ReadoutHeaderCnv *readoutHeaderCnv
00118 = dynamic_cast<ReadoutHeaderCnv*>( this->otherConverter(CLID_ReadoutHeader) );
00119 if(!readoutHeaderCnv){
00120 return 0;
00121 }
00122
00123 Readout* readout = 0;
00124 if( perSimRo.readout!=0 ) {
00125 readout = readoutHeaderCnv->convert( *(perSimRo.readout) );
00126 }
00127 simRo->setReadout(readout);
00128 return simRo;
00129 }