/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/RawFile/RawFile-00-00-10/RawFile/RawFileUtil.h

Go to the documentation of this file.
00001 #ifndef BES_RAWFILE_UTIL_H
00002 #define BES_RAWFILE_UTIL_H
00003 
00004 #include <iostream>
00005 #include <string>
00006 #include <stdint.h>  //uint32_t
00007 
00008 class raw_ifstream;
00009 class raw_ofstream;
00010 
00011 
00012 /*************************************************
00013  * the following structs and classes are assistant
00014  * data structure of the RawFileReader/Writer:
00015  *  ------------------------+---------------------
00016  *   struct name            | class name
00017  *  ------------------------+---------------------
00018  *   file_start_record      | FileStartRecord
00019  *   file_name_strings      | FileNameStrings
00020  *   run_parameters_record  | RunParametersRecord
00021  *   data_separator_record  | DataSeparatorRecord
00022  *   file_end_record        | FileEndRecord
00023  ************************************************/
00024 
00025 //------------------------------------------------
00026 // Data structure of the file start record
00027 //------------------------------------------------
00028 typedef struct {
00029   uint32_t marker;  //0x1234aaaa
00030   uint32_t record_size;  //words
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;  //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 // Data structure of the file name strings
00057 //------------------------------------------------
00058 typedef struct {
00059   uint32_t marker;  //0x1234aabb
00060   uint32_t length1;  //bytes
00061   uint32_t length2;  //bytes
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 // Data structure of the run parameters record
00086 //------------------------------------------------
00087 typedef struct {
00088   uint32_t marker;  //0x1234bbbb
00089   uint32_t record_size;  //words
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 // Data structure of the data separator record
00117 //------------------------------------------------
00118 typedef struct {
00119   uint32_t marker;  //0x1234cccc
00120   uint32_t record_size;  //words
00121   uint32_t data_block_number;  //event id in run
00122   uint32_t data_block_size;  //bytes
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 // Data structure of the file end record
00144 //------------------------------------------------
00145 typedef struct {
00146   uint32_t marker;  //0x1234dddd
00147   uint32_t record_size;  //words
00148   uint32_t date;
00149   uint32_t time;
00150   uint32_t events_in_file;  //events number in file
00151   uint32_t data_in_file;    //MB file size
00152   uint32_t events_in_run;   //events number in run
00153   uint32_t data_in_run;     //MB run size
00154   uint32_t status;          // !0 ==> the last file of run
00155   uint32_t end_marker;  //0x1234eeee
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

Generated on Tue Nov 29 22:58:36 2016 for BOSS_7.0.2 by  doxygen 1.4.7