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

In This Package:

DaqEventConverter.cc

Go to the documentation of this file.
00001 /*
00002  *  DaqEventConverter.cc
00003  *  DaqFormatModules
00004  *
00005  *  Created by Simon Patton on 7/22/10.
00006  *  Copyright 2010 DayaBay Collaboration. All rights reserved.
00007  *
00008  */
00009 #include "DaqEventConverter.h"
00010 
00011 #include "DaqFormatContext.h"
00012 #include "DaqFormatConversionSvc.h"
00013 
00014 #include "Conventions/Detectors.h"
00015 #include "Event/DaqPmtCrate.h"
00016 #include "Event/ReadoutHeader.h"
00017 #include "Event/Readout.h"
00018 #include "Event/ReadoutPmtCrate.h"
00019 #include "Event/ReadoutRpcCrate.h"
00020 #include "EventReadoutFormat/EventHeader.h"
00021 #include "EventReadoutFormat/EventReadout.h"
00022 #include "EventReadoutFormat/EventTraits.h"
00023 #include "EventReadoutFormat/RomFragment.h"
00024 #include "EventReadoutFormat/RomHeader.h"
00025 #include "GaudiKernel/MsgStream.h"
00026 #include "LtbReadoutFormat/LtbFrame.h"
00027 #include "LtbReadoutFormat/LtbReadout.h"
00028 #include "LtbReadoutFormat/LtbTime.h"
00029 
00030 using DayaBay::DaqPmtCrate;
00031 using DayaBay::Detector;
00032 using DayaBay::ReadoutHeader;
00033 using DayaBay::Readout;
00034 using DayaBay::ReadoutPmtCrate;
00035 using DayaBay::ReadoutRpcCrate;
00036 using DybDaq::DaqFormatContext;
00037 using DybDaq::DaqFormatConversionSvc;
00038 using DybDaq::DaqEventConverter;
00039 using DybDaq::EventHeader;
00040 using DybDaq::EventReadout;
00041 using DybDaq::EventTraits;
00042 using DybDaq::LtbFrame;
00043 using DybDaq::LtbReadout;
00044 using DybDaq::LtbTime;
00045 using DybDaq::RomData;
00046 using DybDaq::RomFragment;
00047 using DybDaq::RomHeader;
00048 
00049 DaqEventConverter::Address::Address(const DaqFormatContext& context) :
00050     GenericAddress(storageType(),
00051                    classID()),
00052     m_context(context) {
00053 }
00054 
00055 DaqEventConverter::Address::~Address() {
00056 }
00057 
00058 const DaqFormatContext& DaqEventConverter::Address::context() const {
00059     return m_context;
00060 }
00061 
00062 DaqEventConverter::DaqEventConverter(unsigned char storageType,
00063                                      const CLID& clid,
00064                                      ISvcLocator* svc) :
00065     Converter(storageType,
00066               clid,
00067               svc) {
00068 }
00069 
00070 DaqEventConverter::DaqEventConverter(ISvcLocator* svc) :
00071     Converter(storageType(),
00072               classID(),
00073               svc) {
00074 }
00075 
00076 DaqEventConverter::~DaqEventConverter() {
00077 }
00078 
00079 const long DaqEventConverter::storageType() {
00080     return DaqFormatConversionSvc::DAQ_FORMAT_DATA;
00081 }
00082 
00083 const CLID& DaqEventConverter::classID() {
00084     return DayaBay::CLID_ReadoutHeader;
00085 }
00086 
00087 StatusCode DaqEventConverter::createObj(IOpaqueAddress* addr,
00088                                         DataObject*& pObject) {
00089     Address* address = dynamic_cast<Address*>(addr);
00090     if (0 == address) {
00091         return StatusCode::FAILURE;
00092     }
00093     const EventReadout* eventReadout = address->context().event();
00094     if (0 == eventReadout) {
00095         return StatusCode::FAILURE;
00096     }
00097     pObject = createReadoutHeader(*eventReadout);
00098     if (0 == pObject) {
00099         return StatusCode::FAILURE;
00100     }
00101     return StatusCode::SUCCESS;
00102     
00103 }
00104 
00105 ReadoutHeader* DaqEventConverter::createReadoutHeader(const EventReadout& event) {
00106 
00107     const EventHeader& header = event.header();
00108     const EventTraits& traits = header.eventTraits();
00109     const unsigned int kFeeModuleType = traits.moduleType(EventTraits::kFeeModule);
00110     const unsigned int kRpcRomModuleType = traits.moduleType(EventTraits::kRpcRomModule);
00111 
00112     const EventReadout::RomFragmentPtrList& fragments = event.romFragments();
00113     EventReadout::RomFragmentPtrList::const_iterator fragment = fragments.begin();
00114     const unsigned int* crateType = 0;
00115     while(0 == crateType && fragment != fragments.end()) {
00116         if (kFeeModuleType == ((*fragment)->header().moduleType())) {
00117             crateType = &kFeeModuleType;
00118         }
00119         else if ( kRpcRomModuleType == ((*fragment)->header().moduleType())) {
00120            crateType = &kRpcRomModuleType;
00121         }
00122         ++fragment;
00123     }
00124     if (0 == crateType) {
00125         return 0;
00126     }
00127 
00128     if ((*crateType) == kFeeModuleType) {
00129         const DaqPmtCrate* pmtCrate = new DaqPmtCrate(&event);
00130         const Detector& detector = pmtCrate->detector();
00131         const TimeStamp& triggerTime = pmtCrate->triggerTime();
00132         Context context(detector.site(),
00133                         SimFlag::kData,
00134                         triggerTime,
00135                         detector.detectorId());
00136         ReadoutHeader* result = new ReadoutHeader();
00137         result->setContext(context);
00138         result->setEarliest(triggerTime);
00139         result->setLatest(triggerTime);
00140         
00141         // Add the readout to the header
00142         result->setDaqCrate(const_cast<DaqPmtCrate*>(pmtCrate));
00143         
00144         return result;
00145     }
00146     else if ((*crateType) == kRpcRomModuleType) {
00147        // FIXME : to set the Context of ReadoutHeader
00148        ReadoutHeader* result = new ReadoutHeader();
00149        Readout*  readout = new Readout();
00150        readout->setEventReadout(const_cast<EventReadout*>(&event));
00151        result->setReadout(readout);
00152        return result;
00153     }
00154 
00155     MsgStream log(msgSvc(),
00156                   "DaqEventConverter");
00157     log << MSG::ERROR << "Could not determine crate type so, cannot make readout." << endreq;
00158     return 0;
00159 }
00160 
00161 long DaqEventConverter::repSvcType() const {
00162     return i_repSvcType();
00163 }
00164 
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 20:46:28 2011 for DaqFormatModules by doxygen 1.4.7