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

In This Package:

DaqBlockHeaderCnv.cc

Go to the documentation of this file.
00001 /*
00002  *  DaqBlockHeaderCnv.cc
00003  *  PerDaqBlock
00004  *
00005  *  Created by Simon Patton on 3/2/11.
00006  *  Copyright 2011 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 
00010 #include "DaqReadoutFormat/ByteBuffer.h"
00011 #include "Event/DaqBlockHeader.h"
00012 #include "PerBaseEvent/HeaderObjectCnv.h"
00013 #include "PerDaqBlock/PerDaqBlock.h"
00014 #include "PerDaqBlock/PerDaqBlockHeader.h"
00015 #include <cstring>
00016 
00017 #include "DaqBlockHeaderCnv.h"
00018 
00019 using DayaBay::DaqBlock;
00020 using DayaBay::DaqBlockHeader;
00021 using DayaBay::HeaderObject;
00022 using DybDaq::ByteBuffer;
00023 
00024 DaqBlockHeaderCnv::DaqBlockHeaderCnv(ISvcLocator* svc) :
00025     RootIOTypedCnv<PerDaqBlockHeader,DaqBlockHeader>("PerDaqBlockHeader",
00026                                                      classID(),
00027                                                      svc) {
00028 }
00029 
00030 
00031 DaqBlockHeaderCnv::~DaqBlockHeaderCnv() {
00032 }
00033 
00034 StatusCode DaqBlockHeaderCnv::PerToTran(const PerDaqBlockHeader& perobj,
00035                                         DaqBlockHeader& tranobj) {
00036     MsgStream log(msgSvc(), "ReadoutHeaderCnv::PerToTran");
00037     StatusCode sc = HeaderObjectCnv::toTran(perobj,tranobj);
00038     if (sc.isFailure()) {
00039         return sc;
00040     }
00041 
00042     tranobj.setDeltaEvents(perobj.deltaEvents);
00043     if(0 == perobj.daqBlock) {
00044         tranobj.setDaqBlock(0);
00045         return StatusCode::SUCCESS;
00046     }
00047 
00048     DaqBlock* daqBlock = const_cast<DaqBlock*>(tranobj.daqBlock());
00049     if (0 == daqBlock) {
00050         daqBlock = new DaqBlock();
00051         tranobj.setDaqBlock(daqBlock);
00052     }
00053     DaqBlock::RawData* rawBytes = daqBlock->bytes();
00054     std::vector<unsigned int>& daqBytes = perobj.daqBlock->rawData;
00055     if (0 == rawBytes) {
00056         rawBytes = new DaqBlock::RawData(daqBytes.size());
00057         daqBlock->setBytes(rawBytes);
00058     } else {
00059         rawBytes->resize(daqBytes.size());
00060     }
00061     memcpy(&((*(daqBlock->bytes()))[0]),
00062            &(daqBytes[0]),
00063            daqBytes.size() * ByteBuffer::BYTES_IN_INT);
00064     return StatusCode::SUCCESS;
00065 }                                       
00066 
00067 StatusCode DaqBlockHeaderCnv::TranToPer(const DaqBlockHeader& tranobj,
00068                                         PerDaqBlockHeader& perobj) {
00069     MsgStream log(msgSvc(), "DaqBlockHeaderCnv::TranToPer");
00070     StatusCode sc = HeaderObjectCnv::toPer(tranobj,
00071                                            perobj);
00072     if (sc.isFailure()) {
00073         return sc;
00074     }
00075 
00076     perobj.deltaEvents = tranobj.deltaEvents();
00077     const DaqBlock* daqBlock = tranobj.daqBlock();
00078     if ( 0 == daqBlock) {
00079         delete perobj.daqBlock;
00080         perobj.daqBlock = 0;
00081         return StatusCode::SUCCESS;
00082     }
00083     perobj.daqBlock = new PerDaqBlock(daqBlock->size());
00084     std::vector<unsigned int>& daqBytes = perobj.daqBlock->rawData;
00085     memcpy(&(daqBytes[0]),
00086            &((*(daqBlock->bytes()))[0]),
00087            daqBlock->size() * ByteBuffer::BYTES_IN_INT);
00088     return StatusCode::SUCCESS;
00089 }
00090 
00091 StatusCode DaqBlockHeaderCnv::fillRepRefs(IOpaqueAddress*, DataObject* dobj) {
00092     MsgStream log(msgSvc(), "DaqBlockHeaderCnv::fillRepRefs");
00093     DaqBlockHeader* rh = dynamic_cast<DaqBlockHeader*>(dobj);
00094 
00095     log << MSG::DEBUG
00096         << "Saving links to " << rh->inputHeaders().size() 
00097         << " input headers" << endreq;
00098 
00099     StatusCode sc = HeaderObjectCnv::fillPer(m_rioSvc,*rh,*m_perOutObj);
00100     if (sc.isFailure()) {
00101         log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00102         return sc;
00103     }
00104 
00105     // ... fill DaqBlockHeader part...
00106     return sc;
00107 }
00108 
00109 StatusCode DaqBlockHeaderCnv::fillObjRefs(IOpaqueAddress*, DataObject* dobj) {
00110     MsgStream log(msgSvc(), "DaqBlockHeaderCnv::fillObjRefs");
00111     HeaderObject* hobj = dynamic_cast<HeaderObject*>(dobj);
00112     StatusCode sc = HeaderObjectCnv::fillTran(m_rioSvc,*m_perInObj,*hobj);
00113     if (sc.isFailure()) {
00114         log << MSG::ERROR << "Failed to fill HeaderObject part" << endreq;
00115         return sc;
00116     }
00117 
00118     log << MSG::DEBUG
00119         << "Restored links to " << hobj->inputHeaders().size() 
00120         << " input headers" << endreq;
00121 
00122     // ... fill DaqBlockHeader part...
00123     return sc;
00124 }
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:24:12 2011 for PerDaqBlock by doxygen 1.4.7