mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-06 01:50:40 +02:00
Exposing vector of strings for loading parameters (#147)
This commit is contained in:
parent
a1e06ca7a9
commit
7eafceb0f9
@ -119,9 +119,10 @@ class Detector(CppDetectorApi):
|
||||
return NotImplementedError("parameters is set only")
|
||||
|
||||
@parameters.setter
|
||||
def parameters(self, fname):
|
||||
fname = ut.make_string_path(fname)
|
||||
self.loadParameters(fname)
|
||||
def parameters(self, value):
|
||||
if isinstance(value, str):
|
||||
value = ut.make_string_path(value)
|
||||
self.loadParameters(value)
|
||||
|
||||
@property
|
||||
def hostname(self):
|
||||
|
@ -36,6 +36,10 @@ void init_det(py::module &m) {
|
||||
(void (Detector::*)(const std::string &)) &
|
||||
Detector::loadParameters,
|
||||
py::arg())
|
||||
.def("loadParameters",
|
||||
(void (Detector::*)(const std::vector<std::string> &)) &
|
||||
Detector::loadParameters,
|
||||
py::arg())
|
||||
.def("getHostname",
|
||||
(Result<std::string>(Detector::*)(sls::Positions) const) &
|
||||
Detector::getHostname,
|
||||
|
@ -53,6 +53,8 @@ class Detector {
|
||||
/** Shared memory not freed prior. Set up per measurement. */
|
||||
void loadParameters(const std::string &fname);
|
||||
|
||||
void loadParameters(const std::vector<std::string>& parameters);
|
||||
|
||||
Result<std::string> getHostname(Positions pos = {}) const;
|
||||
|
||||
/* Frees shared memory, adds detectors to the list */
|
||||
|
@ -60,29 +60,31 @@ void Detector::loadConfig(const std::string &fname) {
|
||||
}
|
||||
|
||||
void Detector::loadParameters(const std::string &fname) {
|
||||
CmdProxy proxy(this);
|
||||
CmdParser parser;
|
||||
std::ifstream input_file;
|
||||
input_file.open(fname.c_str(), std::ios_base::in);
|
||||
if (!input_file.is_open()) {
|
||||
std::ifstream input_file(fname);
|
||||
if (!input_file) {
|
||||
throw RuntimeError("Could not open configuration file " + fname +
|
||||
" for reading");
|
||||
}
|
||||
std::string current_line;
|
||||
while (input_file.good()) {
|
||||
getline(input_file, current_line);
|
||||
if (current_line.find('#') != std::string::npos) {
|
||||
current_line.erase(current_line.find('#'));
|
||||
std::vector<std::string> parameters;
|
||||
for (std::string line; std::getline(input_file, line);) {
|
||||
if (line.find('#') != std::string::npos) {
|
||||
line.erase(line.find('#'));
|
||||
}
|
||||
LOG(logDEBUG1) << "current_line after removing comments:\n\t"
|
||||
<< current_line;
|
||||
if (current_line.length() > 1) {
|
||||
if (line.length() > 1) {
|
||||
parameters.push_back(line);
|
||||
}
|
||||
}
|
||||
loadParameters(parameters);
|
||||
}
|
||||
|
||||
void Detector::loadParameters(const std::vector<std::string> ¶meters) {
|
||||
CmdProxy proxy(this);
|
||||
CmdParser parser;
|
||||
for (const auto ¤t_line : parameters) {
|
||||
parser.Parse(current_line);
|
||||
proxy.Call(parser.command(), parser.arguments(),
|
||||
parser.detector_id(), defs::PUT_ACTION);
|
||||
proxy.Call(parser.command(), parser.arguments(), parser.detector_id(),
|
||||
defs::PUT_ACTION);
|
||||
}
|
||||
}
|
||||
input_file.close();
|
||||
}
|
||||
|
||||
Result<std::string> Detector::getHostname(Positions pos) const {
|
||||
|
Loading…
x
Reference in New Issue
Block a user