mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-24 23:30:03 +02:00
Python binding for Pattern
This commit is contained in:
parent
95fe1720c0
commit
d69e238e67
@ -2,6 +2,7 @@ import _slsdet
|
|||||||
|
|
||||||
from _slsdet import Pattern
|
from _slsdet import Pattern
|
||||||
|
|
||||||
|
|
||||||
class patternParameters(_slsdet.patternParameters):
|
class patternParameters(_slsdet.patternParameters):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@ -15,13 +16,38 @@ class patternParameters(_slsdet.patternParameters):
|
|||||||
raise KeyError(f"Key: {name} not found")
|
raise KeyError(f"Key: {name} not found")
|
||||||
|
|
||||||
def __setattr__(self, name, value):
|
def __setattr__(self, name, value):
|
||||||
if name in ['view', 'names']:
|
if name in ["view", "names"]:
|
||||||
self.__dict__[name] = value
|
self.__dict__[name] = value
|
||||||
elif name in self.names:
|
elif name in self.names:
|
||||||
self.view[name] = value
|
self.view[name] = value
|
||||||
else:
|
else:
|
||||||
raise KeyError(f"Key: {name} not found")
|
raise KeyError(f"Key: {name} not found")
|
||||||
|
|
||||||
#Provide custom dir for tab completion
|
# Provide custom dir for tab completion
|
||||||
|
def __dir__(self):
|
||||||
|
return self.names
|
||||||
|
|
||||||
|
|
||||||
|
class Pattern(_slsdet.Pattern):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.view = self.data().numpy_view()
|
||||||
|
self.names = self.view.dtype.names
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
if name in self.names:
|
||||||
|
return self.view[name][0]
|
||||||
|
else:
|
||||||
|
raise KeyError(f"Key: {name} not found")
|
||||||
|
|
||||||
|
def __setattr__(self, name, value):
|
||||||
|
if name in ["view", "names"]:
|
||||||
|
self.__dict__[name] = value
|
||||||
|
elif name in self.names:
|
||||||
|
self.view[name] = value
|
||||||
|
else:
|
||||||
|
raise KeyError(f"Key: {name} not found")
|
||||||
|
|
||||||
|
# Provide custom dir for tab completion
|
||||||
def __dir__(self):
|
def __dir__(self):
|
||||||
return self.names
|
return self.names
|
@ -20,23 +20,28 @@ void init_pattern(py::module &m) {
|
|||||||
pat &o = obj.cast<pat &>();
|
pat &o = obj.cast<pat &>();
|
||||||
return py::array_t<pat>(1, &o, obj);
|
return py::array_t<pat>(1, &o, obj);
|
||||||
});
|
});
|
||||||
|
//.def_readwrite("name", &Pet::name)
|
||||||
|
// patternParameters.def_property(
|
||||||
|
// "some",
|
||||||
|
// [](py::object &obj) {
|
||||||
|
// pat &o = obj.cast<pat &>();
|
||||||
|
// return py::array_t<pat>(1, &o, obj);
|
||||||
|
// },
|
||||||
|
// [](py::object &obj) {
|
||||||
|
// pat &o = obj.cast<pat &>();
|
||||||
|
// return py::array_t<pat>(1, &o, obj);
|
||||||
|
// });
|
||||||
|
|
||||||
// m.def("get_memoryview1d", []() {
|
// patternParameters.def_property_readonly(
|
||||||
// return py::memoryview::from_memory(
|
// "loop",
|
||||||
// buffer, // buffer pointer
|
// [](py::object &obj) {
|
||||||
// sizeof(uint8_t) * 8 // buffer size
|
// pat &o = obj.cast<pat &>();
|
||||||
// );
|
// return py::array_t<uint32_t>(6, &o.loop[0], obj);
|
||||||
// })
|
// });
|
||||||
// patternParameters.def("load", &pat::load);
|
|
||||||
|
|
||||||
py::class_<sls::Pattern> Pattern(m, "Pattern");
|
py::class_<sls::Pattern> Pattern(m, "Pattern");
|
||||||
Pattern.def(py::init());
|
Pattern.def(py::init());
|
||||||
Pattern.def("load", &sls::Pattern::load);
|
Pattern.def("load", &sls::Pattern::load);
|
||||||
Pattern.def("data", (pat * (sls::Pattern::*)()) & sls::Pattern::data, py::return_value_policy::reference);
|
Pattern.def("data", (pat * (sls::Pattern::*)()) & sls::Pattern::data,
|
||||||
|
py::return_value_policy::reference);
|
||||||
// m.def("get_memoryview1d", []() {
|
|
||||||
// return py::memoryview::from_memory(data(), // buffer pointer
|
|
||||||
// sizeof(pat) // buffer size
|
|
||||||
// );
|
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,8 @@ namespace sls {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Common C/C++ structure to handle pattern data
|
// Common C/C++ structure to handle pattern data
|
||||||
typedef struct __attribute__((packed)) {
|
// typedef struct __attribute__((packed)) {
|
||||||
|
typedef struct {
|
||||||
uint64_t word[MAX_PATTERN_LENGTH];
|
uint64_t word[MAX_PATTERN_LENGTH];
|
||||||
uint64_t ioctrl;
|
uint64_t ioctrl;
|
||||||
uint32_t limits[2];
|
uint32_t limits[2];
|
||||||
@ -30,7 +31,7 @@ class Pattern {
|
|||||||
bool operator!=(const Pattern &other) const;
|
bool operator!=(const Pattern &other) const;
|
||||||
patternParameters *data();
|
patternParameters *data();
|
||||||
patternParameters *data() const;
|
patternParameters *data() const;
|
||||||
const size_t size() const noexcept { return sizeof(patternParameters); }
|
size_t size() const noexcept { return sizeof(patternParameters); }
|
||||||
void validate() const;
|
void validate() const;
|
||||||
void load(const std::string &fname);
|
void load(const std::string &fname);
|
||||||
void save(const std::string &fname);
|
void save(const std::string &fname);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user