start parsing imc::objects
This commit is contained in:
parent
eb2c49549a
commit
fe3befc5f2
@ -70,7 +70,9 @@ namespace imc
|
|||||||
parse_parameters();
|
parse_parameters();
|
||||||
parse_object();
|
parse_object();
|
||||||
} catch (const std::exception& e) {
|
} catch (const std::exception& e) {
|
||||||
throw std::runtime_error("block: failed to parse parameters");
|
throw std::runtime_error(
|
||||||
|
std::string("block: failed to parse parameters/objects: ") + e.what()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,7 +102,14 @@ namespace imc
|
|||||||
// pass buffer and parameters associated to block to generate corres. object
|
// pass buffer and parameters associated to block to generate corres. object
|
||||||
void parse_object()
|
void parse_object()
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
imc_object_.parse(thekey_,buffer_,parameters_);
|
imc_object_.parse(thekey_,buffer_,parameters_);
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
std::string("failed to parse imc::object for key ")
|
||||||
|
+ thekey_.name_ + std::string(": ") + e.what()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -9,6 +9,17 @@
|
|||||||
|
|
||||||
namespace imc
|
namespace imc
|
||||||
{
|
{
|
||||||
|
// obtain specific parameters as string
|
||||||
|
std::string get_parameter(const std::vector<unsigned char>* 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)
|
// format and processor (corresponds to key CF)
|
||||||
struct format
|
struct format
|
||||||
{
|
{
|
||||||
@ -16,9 +27,10 @@ namespace imc
|
|||||||
int processor_;
|
int processor_;
|
||||||
|
|
||||||
// construct members by parsing particular parameters from buffer
|
// construct members by parsing particular parameters from buffer
|
||||||
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter> parameters)
|
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter>& parameters)
|
||||||
{
|
{
|
||||||
|
fileformat_ = std::stoi(get_parameter(buffer,¶meters[0]));
|
||||||
|
processor_ = std::stoi(get_parameter(buffer,¶meters[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
format(): fileformat_(-1), processor_(-1) {}
|
format(): fileformat_(-1), processor_(-1) {}
|
||||||
@ -41,9 +53,11 @@ namespace imc
|
|||||||
bool closed_; // corresponds to true = 1 and false = 0 in file
|
bool closed_; // corresponds to true = 1 and false = 0 in file
|
||||||
|
|
||||||
// construct members by parsing particular parameters from buffer
|
// construct members by parsing particular parameters from buffer
|
||||||
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter> parameters)
|
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter>& 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
|
// get info string
|
||||||
@ -65,9 +79,11 @@ namespace imc
|
|||||||
std::string comment_;
|
std::string comment_;
|
||||||
|
|
||||||
// construct members by parsing particular parameters from buffer
|
// construct members by parsing particular parameters from buffer
|
||||||
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter> parameters)
|
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter>& 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
|
// get info string
|
||||||
@ -90,9 +106,12 @@ namespace imc
|
|||||||
std::string comment_;
|
std::string comment_;
|
||||||
|
|
||||||
// construct members by parsing particular parameters from buffer
|
// construct members by parsing particular parameters from buffer
|
||||||
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter> parameters)
|
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter>& 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
|
// get info string
|
||||||
@ -124,9 +143,11 @@ namespace imc
|
|||||||
int dimension_; // corresponding to fieldtype \in {1,}
|
int dimension_; // corresponding to fieldtype \in {1,}
|
||||||
|
|
||||||
// construct members by parsing particular parameters from buffer
|
// construct members by parsing particular parameters from buffer
|
||||||
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter> parameters)
|
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter>& 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
|
// get info string
|
||||||
@ -148,9 +169,11 @@ namespace imc
|
|||||||
std::string unit_;
|
std::string unit_;
|
||||||
|
|
||||||
// construct members by parsing particular parameters from buffer
|
// construct members by parsing particular parameters from buffer
|
||||||
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter> parameters)
|
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter>& 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
|
// get info string
|
||||||
@ -164,6 +187,47 @@ namespace imc
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// definition of abscissa (corresponds to key CD2)
|
||||||
|
struct abscissa2
|
||||||
|
{
|
||||||
|
double dx_;
|
||||||
|
bool calibration_;
|
||||||
|
std::string unit_;
|
||||||
|
bool reduction_;
|
||||||
|
bool ismultievent_;
|
||||||
|
bool sortbuffer_;
|
||||||
|
double x0_;
|
||||||
|
int pretriggerapp_;
|
||||||
|
|
||||||
|
// construct members by parsing particular parameters from buffer
|
||||||
|
void parse(const std::vector<unsigned char>* buffer, const std::vector<parameter>& 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<<std::setw(width)<<std::left<<"dx:"<<dx_<<"\n"
|
||||||
|
<<std::setw(width)<<std::left<<"calibration_:"<<(calibration_?"yes":"no")<<"\n"
|
||||||
|
<<std::setw(width)<<std::left<<"unit:"<<unit_<<"\n"
|
||||||
|
<<std::setw(width)<<std::left<<"reduction:"<<reduction_<<"\n"
|
||||||
|
<<std::setw(width)<<std::left<<"ismultievent:"<<ismultievent_<<"\n"
|
||||||
|
<<std::setw(width)<<std::left<<"sortbuffer:"<<sortbuffer_<<"\n"
|
||||||
|
<<std::setw(width)<<std::left<<"x0:"<<x0_<<"\n"
|
||||||
|
<<std::setw(width)<<std::left<<"pretriggerapp:"<<pretriggerapp_<<"\n";
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// start of component (corresponds to key CC)
|
// start of component (corresponds to key CC)
|
||||||
struct component
|
struct component
|
||||||
{
|
{
|
||||||
@ -420,6 +484,7 @@ namespace imc {
|
|||||||
data dat_; // 11
|
data dat_; // 11
|
||||||
origin_data org_; // 12
|
origin_data org_; // 12
|
||||||
triggertime trt_; // 13
|
triggertime trt_; // 13
|
||||||
|
abscissa2 abs2_; // 14
|
||||||
int objidx_;
|
int objidx_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -459,6 +524,11 @@ namespace imc {
|
|||||||
abs_.parse(buffer,parameters);
|
abs_.parse(buffer,parameters);
|
||||||
objidx_ = 5;
|
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") )
|
else if ( key.name_ == std::string("CC") )
|
||||||
{
|
{
|
||||||
cmt_.parse(buffer,parameters);
|
cmt_.parse(buffer,parameters);
|
||||||
@ -502,7 +572,8 @@ namespace imc {
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw std::logic_error(
|
throw std::logic_error(
|
||||||
std::string("unsupported block associated to key ") + key.name_
|
std::string("unsupported block associated to key ")
|
||||||
|
+ key.name_ + std::to_string(key.version_)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -523,6 +594,8 @@ namespace imc {
|
|||||||
return dtf_.get_info();
|
return dtf_.get_info();
|
||||||
case 5:
|
case 5:
|
||||||
return abs_.get_info();
|
return abs_.get_info();
|
||||||
|
case 14:
|
||||||
|
return abs2_.get_info();
|
||||||
case 6:
|
case 6:
|
||||||
return cmt_.get_info();
|
return cmt_.get_info();
|
||||||
case 7:
|
case 7:
|
||||||
|
@ -49,8 +49,8 @@ namespace imc
|
|||||||
}
|
}
|
||||||
|
|
||||||
// access members
|
// access members
|
||||||
const unsigned long int& begin() { return begin_; }
|
const unsigned long int& begin() const { return begin_; }
|
||||||
const unsigned long int& end() { return end_; }
|
const unsigned long int& end() const { return end_; }
|
||||||
|
|
||||||
// comparison operator
|
// comparison operator
|
||||||
bool operator==(const parameter& param)
|
bool operator==(const parameter& param)
|
||||||
@ -59,7 +59,7 @@ namespace imc
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get info
|
// get info
|
||||||
std::string get_info()
|
std::string get_info() const
|
||||||
{
|
{
|
||||||
return ( std::string("[") + std::to_string(begin_) + std::string(",")
|
return ( std::string("[") + std::to_string(begin_) + std::string(",")
|
||||||
+ std::to_string(end_) + std::string("]") );
|
+ std::to_string(end_) + std::string("]") );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user