00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "DaqFormatModules/DaqReadoutSvc.h"
00010
00011 #include <string>
00012
00013 #include "FileReadoutFormat/CalibrationParametersRecord.h"
00014 #include "FileReadoutFormat/FileEndRecord.h"
00015 #include "FileReadoutFormat/FileNameStrings.h"
00016 #include "FileReadoutFormat/FileStartRecord.h"
00017 #include "FileReadoutFormat/FileTraits.h"
00018 #include "FileReadoutFormat/MetadataStrings.h"
00019 #include "FileReadoutFormat/RunParametersRecord.h"
00020
00021 using DybDaq::CalibrationParametersRecord;
00022 using DybDaq::FileBuffer;
00023 using DybDaq::FileEndRecord;
00024 using DybDaq::FileNameStrings;
00025 using DybDaq::FileStartRecord;
00026 using DybDaq::FileTraits;
00027 using DybDaq::MetadataStrings;
00028 using DybDaq::RunParametersRecord;
00029
00030
00031
00032 DaqReadoutSvc::DaqReadoutSvc(const std::string& name,
00033 ISvcLocator *svc) :
00034 Service(name,
00035 svc),
00036 m_fileStartRecord(0),
00037 m_fileNameStrings(0),
00038 m_metadataStrings(0),
00039 m_runParametersRecord(0),
00040 m_calibrationParametersRecord(0),
00041 m_fileEndRecord(0)
00042 {
00043 declareProperty("RunNumber",m_runNumber=0,
00044 "The run number to be stamped in generated DAQ format data for the supplied detector");
00045 declareProperty("FirstEventNumber",m_nextEventNumber=1,
00046 "The event number to be stamped into the next DAQ format event for the supplied detector");
00047 declareProperty("Generating",m_generating=false,
00048 "True if DAQ formated data should be generated");
00049 }
00050
00051 DaqReadoutSvc::~DaqReadoutSvc() {
00052 if (0 != m_fileEndRecord) {
00053 delete m_fileEndRecord;
00054 }
00055 if (0 != m_calibrationParametersRecord) {
00056 delete m_calibrationParametersRecord;
00057 }
00058 if (0 != m_runParametersRecord) {
00059 delete m_runParametersRecord;
00060 }
00061 if (0 != m_metadataStrings) {
00062 delete m_metadataStrings;
00063 }
00064 if (0 != m_fileNameStrings) {
00065 delete m_fileNameStrings;
00066 }
00067 if (0 != m_fileStartRecord) {
00068 delete m_fileStartRecord;
00069 }
00070 }
00071
00072 StatusCode DaqReadoutSvc::queryInterface(const InterfaceID& id,
00073 void** interface) {
00074 if (IDaqReadoutSvc::interfaceID().versionMatch(id)) {
00075
00076 *interface = dynamic_cast<IDaqReadoutSvc*>(this);
00077 addRef();
00078 return StatusCode::SUCCESS;
00079 }
00080
00081 return Service::queryInterface(id,
00082 interface);
00083 }
00084
00085 bool DaqReadoutSvc::isGenerating() const {
00086 return m_generating;
00087 }
00088
00089 unsigned int DaqReadoutSvc::ltbSlot(const DayaBay::Detector& ) const {
00090 return 3;
00091 }
00092
00093 unsigned int DaqReadoutSvc::runNumber(const DayaBay::Detector& ) const {
00094 return m_runNumber;
00095 }
00096
00097 unsigned int DaqReadoutSvc::nextEventNumber(const DayaBay::Detector& ) {
00098 return m_nextEventNumber++;
00099 }
00100
00101 bool DaqReadoutSvc::hasFileStartRecord() const {
00102 return 0 != m_fileStartRecord;
00103 }
00104
00105 const FileStartRecord& DaqReadoutSvc::fileStartRecord() const {
00106 return *m_fileStartRecord;
00107 }
00108
00109 bool DaqReadoutSvc::hasFileNameStrings() const {
00110 return 0 != m_fileNameStrings;
00111 }
00112
00113 const FileNameStrings& DaqReadoutSvc::fileNameStrings() const {
00114 return *m_fileNameStrings;
00115 }
00116
00117 bool DaqReadoutSvc::hasMetadataStrings() const {
00118 return 0 != m_metadataStrings;
00119 }
00120
00121 const MetadataStrings& DaqReadoutSvc::metadataStrings() const {
00122 return *m_metadataStrings;
00123 }
00124
00125 bool DaqReadoutSvc::hasRunParametersRecord() const {
00126 return 0 != m_runParametersRecord;
00127 }
00128
00129 const RunParametersRecord& DaqReadoutSvc::runParametersRecord() const {
00130 return *m_runParametersRecord;
00131 }
00132
00133 bool DaqReadoutSvc::hasCalibrationParametersRecord() const {
00134 return 0 != m_calibrationParametersRecord;
00135 }
00136
00137 const CalibrationParametersRecord& DaqReadoutSvc::calibrationParametersRecord() const {
00138 return *m_calibrationParametersRecord;
00139 }
00140
00141 bool DaqReadoutSvc::hasFileEndRecord() const {
00142 return 0 != m_fileEndRecord;
00143 }
00144
00145 const FileEndRecord& DaqReadoutSvc::fileEndRecord() const {
00146 return *m_fileEndRecord;
00147 }
00148
00149 void DaqReadoutSvc::setFileRecord(const FileBuffer* record) {
00150 if (record->isMarked(FileTraits::kFileStartRecord)) {
00151 const FileStartRecord* fileRecord = dynamic_cast<const FileStartRecord*>(record);
00152 setFileRecord(fileRecord);
00153 } else if (record->isMarked(FileTraits::kFileNameStrings)) {
00154 const FileNameStrings* fileRecord = dynamic_cast<const FileNameStrings*>(record);
00155 setFileRecord(fileRecord);
00156 } else if (record->isMarked(FileTraits::kMetadataStrings)) {
00157 const MetadataStrings* fileRecord = dynamic_cast<const MetadataStrings*>(record);
00158 setFileRecord(fileRecord);
00159 } else if (record->isMarked(FileTraits::kRunParametersRecord)) {
00160 const RunParametersRecord* fileRecord = dynamic_cast<const RunParametersRecord*>(record);
00161 setFileRecord(fileRecord);
00162 } else if (record->isMarked(FileTraits::kCalibrationParametersRecord)) {
00163 const CalibrationParametersRecord* fileRecord = dynamic_cast<const CalibrationParametersRecord*>(record);
00164 setFileRecord(fileRecord);
00165 } else if (record->isMarked(FileTraits::kFileEndRecord)) {
00166 const FileEndRecord* fileRecord = dynamic_cast<const FileEndRecord*>(record);
00167 setFileRecord(fileRecord);
00168 }
00169 }
00170
00171 void DaqReadoutSvc::setFileRecord(const FileStartRecord* record) {
00172 if (0 != m_fileStartRecord) {
00173 delete m_fileStartRecord;
00174 }
00175 m_fileStartRecord = record;
00176 }
00177
00178 void DaqReadoutSvc::setFileRecord(const FileNameStrings* record) {
00179 if (0 != m_fileNameStrings) {
00180 delete m_fileNameStrings;
00181 }
00182 m_fileNameStrings = record;
00183 }
00184
00185 void DaqReadoutSvc::setFileRecord(const MetadataStrings* record) {
00186 if (0 != m_metadataStrings) {
00187 delete m_metadataStrings;
00188 }
00189 m_metadataStrings = record;
00190 }
00191
00192 void DaqReadoutSvc::setFileRecord(const RunParametersRecord* record) {
00193 if (0 != m_runParametersRecord) {
00194 delete m_runParametersRecord;
00195 }
00196 m_runParametersRecord = record;
00197 }
00198
00199 void DaqReadoutSvc::setFileRecord(const CalibrationParametersRecord* record) {
00200 if (0 != m_calibrationParametersRecord) {
00201 delete m_calibrationParametersRecord;
00202 }
00203 m_calibrationParametersRecord = record;
00204 }
00205
00206 void DaqReadoutSvc::setFileRecord(const FileEndRecord* record) {
00207 if (0 != m_fileEndRecord) {
00208 delete m_fileEndRecord;
00209 }
00210 m_fileEndRecord = record;
00211 }