00001 #ifndef RawReadoutHeaderCnv_H
00002 #define RawReadoutHeaderCnv_H
00003
00004 #include "GaudiKernel/Converter.h"
00005 #include "GaudiKernel/ISvcLocator.h"
00006 #include "GaudiKernel/MsgStream.h"
00007
00008 #include "Event/ReadoutHeader.h"
00009 #include "Conventions/Site.h"
00010 #include "Conventions/DetectorId.h"
00011 #include "Conventions/Electronics.h"
00012 #include "Conventions/Trigger.h"
00013
00015 class IRawDataInputSvc;
00016 class RawDataEvent;
00017 namespace DayaBay {
00018 class RawEvent;
00019 class LocalTriggerData;
00020 class RawDataReader;
00021 class Detector;
00022 class ReadoutPmtCrate;
00023 }
00024
00025 extern const long int RAWDATA_StorageType;
00026
00027 class RawReadoutHeaderCnv : public Converter
00028 {
00029 public:
00030 RawReadoutHeaderCnv(long storageType, const CLID& clid, ISvcLocator* svc);
00031 RawReadoutHeaderCnv(ISvcLocator*&);
00032
00033 virtual ~RawReadoutHeaderCnv();
00034
00035
00036 virtual long repSvcType() const {
00037 return RAWDATA_StorageType;
00038 }
00039
00040 static const long storageType() {
00041 return RAWDATA_StorageType;
00042 }
00043
00044 static const CLID& classID() {
00045 return DayaBay::CLID_ReadoutHeader;
00046 }
00047
00048
00049 virtual StatusCode initialize();
00050 virtual StatusCode finalize();
00051
00052
00053 void declareObject(const std::string& fullPath, const CLID& clid, const std::string& bank, long par = 0);
00054
00055
00056
00057 virtual StatusCode createRep(DataObject* pObject, IOpaqueAddress*& refpAddr);
00058 virtual StatusCode updateObj(IOpaqueAddress*, DataObject*);
00059 virtual StatusCode createObj(IOpaqueAddress*, DataObject*&);
00060
00061 virtual StatusCode fillRepRefs(IOpaqueAddress* , DataObject* ) {
00062 return StatusCode::SUCCESS;
00063 }
00064 virtual StatusCode updateRep(IOpaqueAddress* , DataObject* ) {
00065 return StatusCode::SUCCESS;
00066 }
00067 virtual StatusCode updateRepRefs(IOpaqueAddress* , DataObject* ) {
00068 return StatusCode::SUCCESS;
00069 }
00070
00071 private:
00072 mutable MsgStream m_log;
00073
00074 IRawDataInputSvc* m_inputSvc;
00075
00076
00077 private:
00078 StatusCode findTriggerTime(DayaBay::RawEvent* event,
00079 TimeStamp& triggerTime);
00080 Site::Site_t convertSite(unsigned int daqSiteId);
00081 DetectorId::DetectorId_t convertDetector(unsigned int daqDetectorId);
00082 int convertConnector(unsigned int daqChannelId);
00083 int convertBoard(unsigned int daqSlotId);
00084 DayaBay::Trigger::TriggerType_t convertTriggerType(
00085 DayaBay::LocalTriggerData* ltbData,
00086 const DayaBay::Detector* detector);
00087 TimeStamp convertTriggerTime(DayaBay::LocalTriggerData* ltbData);
00088 DayaBay::FeeGain::FeeGain_t convertAdcRange(unsigned int daqAdcRange);
00089 StatusCode unpackEvent(DayaBay::RawEvent* event,
00090 DayaBay::Readout* readout);
00091 StatusCode unpackLtbModule(DayaBay::RawModule* module,
00092 DayaBay::Readout* readout);
00093 StatusCode unpackFeeModule(DayaBay::RawModule* module,
00094 DayaBay::ReadoutPmtCrate* readout);
00095 };
00096
00097 #endif