00001 #ifndef BES_RAWFILE_UTIL_H
00002 #define BES_RAWFILE_UTIL_H
00003
00004 #include <iostream>
00005 #include <string>
00006 #include <stdint.h>
00007
00008 class raw_ifstream;
00009 class raw_ofstream;
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 typedef struct {
00029 uint32_t marker;
00030 uint32_t record_size;
00031 uint32_t version;
00032 uint32_t file_number;
00033 uint32_t date;
00034 uint32_t time;
00035 uint32_t sizeLimit_dataBlocks;
00036 uint32_t sizeLimit_MB;
00037 } file_start_record;
00038
00039 class FileStartRecord {
00040 public:
00041 friend raw_ifstream& operator>>(raw_ifstream& is, FileStartRecord& record);
00042 friend raw_ofstream& operator<<(raw_ofstream& os, FileStartRecord& record);
00043
00044 FileStartRecord();
00045
00046 const file_start_record& getRecord() const { return m_record; }
00047 void dump(std::ostream& os = std::cout) const;
00048
00049 void setFileNumber(uint32_t fn) { m_record.file_number = fn; }
00050
00051 private:
00052 file_start_record m_record;
00053 };
00054
00055
00056
00057
00058 typedef struct {
00059 uint32_t marker;
00060 uint32_t length1;
00061 uint32_t length2;
00062 } file_name_strings;
00063
00064 class FileNameStrings {
00065 public:
00066 friend raw_ifstream& operator>>(raw_ifstream&is, FileNameStrings& record);
00067 friend raw_ofstream& operator<<(raw_ofstream&os, FileNameStrings& record);
00068
00069 FileNameStrings();
00070
00071 const file_name_strings& getRecord() const { return m_record; }
00072
00073 const std::string& gerAppName() const { return m_appName; }
00074 const std::string& gerUsrTag() const { return m_usrTag; }
00075
00076 void dump(std::ostream& os = std::cout) const;
00077
00078 private:
00079 file_name_strings m_record;
00080 std::string m_appName;
00081 std::string m_usrTag;
00082 };
00083
00084
00085
00086
00087 typedef struct {
00088 uint32_t marker;
00089 uint32_t record_size;
00090 uint32_t run_number;
00091 uint32_t max_events;
00092 uint32_t rec_enable;
00093 uint32_t trigger_type;
00094 uint32_t detector_mask;
00095 uint32_t beam_type;
00096 uint32_t beam_energy;
00097 } run_parameters_record;
00098
00099 class RunParametersRecord {
00100 public:
00101 friend raw_ifstream& operator>>(raw_ifstream&is, RunParametersRecord& record);
00102 friend raw_ofstream& operator<<(raw_ofstream&os, RunParametersRecord& record);
00103
00104 RunParametersRecord();
00105
00106 const run_parameters_record& getRecord() const { return m_record; }
00107 void dump(std::ostream& os = std::cout) const;
00108
00109 void setRunNumber(uint32_t runId) { m_record.run_number = runId; }
00110
00111 private:
00112 run_parameters_record m_record;
00113 };
00114
00115
00116
00117
00118 typedef struct {
00119 uint32_t marker;
00120 uint32_t record_size;
00121 uint32_t data_block_number;
00122 uint32_t data_block_size;
00123 } data_separator_record;
00124
00125 class DataSeparatorRecord {
00126 public:
00127 friend raw_ifstream& operator>>(raw_ifstream&is, DataSeparatorRecord& record);
00128 friend raw_ofstream& operator<<(raw_ofstream&os, DataSeparatorRecord& record);
00129
00130 DataSeparatorRecord();
00131
00132 const data_separator_record& getRecord() const { return m_record; }
00133 void dump(std::ostream& os = std::cout) const;
00134
00135 void setDataBlockNumber(uint32_t dn) { m_record.data_block_number = dn; }
00136 void setDataBlockSize(uint32_t ds) { m_record.data_block_size = ds; }
00137
00138 private:
00139 data_separator_record m_record;
00140 };
00141
00142
00143
00144
00145 typedef struct {
00146 uint32_t marker;
00147 uint32_t record_size;
00148 uint32_t date;
00149 uint32_t time;
00150 uint32_t events_in_file;
00151 uint32_t data_in_file;
00152 uint32_t events_in_run;
00153 uint32_t data_in_run;
00154 uint32_t status;
00155 uint32_t end_marker;
00156 } file_end_record;
00157
00158 class FileEndRecord {
00159 public:
00160 friend raw_ifstream& operator>>(raw_ifstream&is, FileEndRecord& record);
00161 friend raw_ifstream& makeEndRecord(DataSeparatorRecord& sep, raw_ifstream& is, FileEndRecord& record);
00162 friend raw_ofstream& operator<<(raw_ofstream&os, FileEndRecord& record);
00163
00164 FileEndRecord();
00165
00166 const file_end_record& getRecord() const { return m_record; }
00167 void dump(std::ostream& os = std::cout) const;
00168
00169 void setEventsInFile(uint32_t file_nevt) { m_record.events_in_file = file_nevt; }
00170 void setDataInFile(uint32_t file_size) { m_record.data_in_file = file_size; }
00171 void setEventsInRun(uint32_t run_nevt) { m_record.events_in_run = run_nevt; }
00172 void setDataInRun(uint32_t run_size) { m_record.data_in_run = run_size; }
00173 void setStatus(uint32_t status) { m_record.status = status; }
00174
00175 private:
00176 file_end_record m_record;
00177 };
00178 #endif