//---------------------------------------------------------------------------// #ifndef IMCOBJECT #define IMCOBJECT #include "imc_key.hpp" //---------------------------------------------------------------------------// namespace imc { // obtain specific parameters as string std::string get_parameter(const std::vector* buffer, const imc::parameter* param) { std::string prm(""); for ( unsigned long int i = param->begin()+1; i <= param->end(); i++ ) { prm.push_back((char)(*buffer)[i]); } return prm; } // format and processor (corresponds to key CF) struct format { int fileformat_; int processor_; // construct members by parsing particular parameters from buffer void parse(const std::vector* buffer, const std::vector& parameters) { fileformat_ = std::stoi(get_parameter(buffer,¶meters[0])); processor_ = std::stoi(get_parameter(buffer,¶meters[2])); } format(): fileformat_(-1), processor_(-1) {} // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector& parameters) { version_ = std::stoi(get_parameter(buffer,¶meters[0])); length_ = std::stoi(get_parameter(buffer,¶meters[1])); closed_ = ( get_parameter(buffer,¶meters[3])==std::string("1") ); } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector& parameters) { group_index_ = std::stoul(get_parameter(buffer,¶meters[2])); name_ = get_parameter(buffer,¶meters[4]); comment_ = get_parameter(buffer,¶meters[6]); } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector& parameters) { group_index_ = std::stoul(get_parameter(buffer,¶meters[2])); name_ = get_parameter(buffer,¶meters[4]); text_ = get_parameter(buffer,¶meters[6]); comment_ = get_parameter(buffer,¶meters[8]); } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector& parameters) { number_components_ = std::stoul(get_parameter(buffer,¶meters[2])); fldtype_ = (fieldtype)std::stoi(get_parameter(buffer,¶meters[3])); dimension_ = std::stoi(get_parameter(buffer,¶meters[4])); } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector& parameters) { dx_ = std::stod(get_parameter(buffer,¶meters[2])); calibration_ = ( get_parameter(buffer,¶meters[3]) == std::string("1") ); unit_ = get_parameter(buffer,¶meters[5]); } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector& parameters) { dx_ = std::stod(get_parameter(buffer,¶meters[2])); calibration_ = ( get_parameter(buffer,¶meters[3]) == std::string("1") ); unit_ = get_parameter(buffer,¶meters[5]); reduction_ = ( get_parameter(buffer,¶meters[6]) == std::string("1") ); ismultievent_ = ( get_parameter(buffer,¶meters[7]) == std::string("1") ); sortbuffer_ = ( get_parameter(buffer,¶meters[8]) == std::string("1") ); x0_ = std::stod(get_parameter(buffer,¶meters[9])); pretriggerapp_ = std::stoi( get_parameter(buffer,¶meters[11]) ); } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss< rawdata_; unsigned long int begin_buffer_, end_buffer_; // construct members by parsing particular parameters from buffer void parse(const std::vector* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector parameters) { } // get info string std::string get_info(int width = 20) { std::stringstream ss; ss<* buffer, const std::vector& parameters) { if ( key.name_ == std::string("CF") ) { fmt_.parse(buffer,parameters); objidx_ = 0; } else if ( key.name_ == std::string("CK") ) { kyg_.parse(buffer,parameters); objidx_ = 1; } else if ( key.name_ == std::string("CB") ) { grp_.parse(buffer,parameters); objidx_ = 2; } else if ( key.name_ == std::string("CT") ) { txt_.parse(buffer,parameters); objidx_ = 3; } else if ( key.name_ == std::string("CG") ) { dtf_.parse(buffer,parameters); objidx_ = 4; } else if ( key.name_ == std::string("CD") && key.version_ == 1 ) { abs_.parse(buffer,parameters); objidx_ = 5; } else if ( key.name_ == std::string("CD") && key.version_ == 2 ) { abs_.parse(buffer,parameters); objidx_ = 14; } else if ( key.name_ == std::string("CC") ) { cmt_.parse(buffer,parameters); objidx_ = 6; } else if ( key.name_ == std::string("CP") ) { cmt_.parse(buffer,parameters); objidx_ = 7; } else if ( key.name_ == std::string("Cb") ) { bfr_.parse(buffer,parameters); objidx_ = 8; } else if ( key.name_ == std::string("CR") ) { rng_.parse(buffer,parameters); objidx_ = 9; } else if ( key.name_ == std::string("CN") ) { chn_.parse(buffer,parameters); objidx_ = 10; } else if ( key.name_ == std::string("CS") ) { dat_.parse(buffer,parameters); objidx_ = 11; } else if ( key.name_ == std::string("NO") ) { org_.parse(buffer,parameters); objidx_ = 12; } else if ( key.name_ == std::string("NT") ) { trt_.parse(buffer,parameters); objidx_ = 13; } else { throw std::logic_error( std::string("unsupported block associated to key ") + key.name_ + std::to_string(key.version_) ); } } // provide info string std::string get_info(int width = 20) { switch (objidx_) { case 0: return fmt_.get_info(); case 1: return kyg_.get_info(); case 2: return grp_.get_info(); case 3: return txt_.get_info(); case 4: return dtf_.get_info(); case 5: return abs_.get_info(); case 14: return abs2_.get_info(); case 6: return cmt_.get_info(); case 7: return pkg_.get_info(); case 8: return bfr_.get_info(); case 9: return rng_.get_info(); case 10: return chn_.get_info(); case 11: return dat_.get_info(); case 12: return org_.get_info(); case 13: return trt_.get_info(); default: return std::string(""); } } }; } #endif //---------------------------------------------------------------------------//