python commands

This commit is contained in:
Erik Frojdh 2019-04-18 13:39:43 +02:00
parent 7c4aa7f3a7
commit c7259538e9
5 changed files with 88 additions and 68 deletions

View File

@ -2,27 +2,11 @@ import os
import sys import sys
import numpy as np import numpy as np
sys.path.append(os.path.join(os.getcwd(), 'bin')) sys.path.append(os.path.join(os.getcwd(), 'bin'))
from sls_detector import Eiger from sls_detector import Eiger, Detector
from sls_detector import ExperimentalDetector from sls_detector import ExperimentalDetector
from _sls_detector.io import read_my302_file from _sls_detector.io import read_my302_file
d = Eiger() d = Detector()
e = ExperimentalDetector() e = ExperimentalDetector()
# for i in range(200):
# a = read_my302_file('/home/l_frojdh/Downloads/run_d0_5.raw', i, 24)
# print(f'{i}: {(a==5).sum()}')
# a = read_my302_file('/home/l_frojdh/Downloads/run_d0_5.raw', 104, 24)
# ncols = 192
# start = 600
# end = 1800
# nrows = end-start
# data = np.zeros((nrows, ncols))
# for i in range(nrows):
# data[i, :] = read_ctb_file(f'/home/l_frojdh/mythendata/MoKbZr_30kV60mA_1s_200V_thr{start+i}_1.raw', 8, 24)

View File

@ -16,6 +16,7 @@ from .errors import DetectorError, DetectorValueError
from .registers import Register from .registers import Register
from .utils import element_if_equal from .utils import element_if_equal
import numpy as np
class Detector: class Detector:
""" """
@ -1358,7 +1359,7 @@ class Detector:
#TODO! can we make this one function? #TODO! can we make this one function?
@property @property
def patnloop0(self): def patnloop0(self):
return self._api.getPatternLoops(0, -1) return self._api.getPatternLoops(0, -1)[2]
@patnloop0.setter @patnloop0.setter
def patnloop0(self, n): def patnloop0(self, n):
@ -1366,7 +1367,7 @@ class Detector:
@property @property
def patnloop1(self): def patnloop1(self):
return self._api.getPatternLoops(1, -1) return self._api.getPatternLoops(1, -1)[2]
@patnloop1.setter @patnloop1.setter
def patnloop1(self, n): def patnloop1(self, n):
@ -1374,7 +1375,7 @@ class Detector:
@property @property
def patnloop2(self): def patnloop2(self):
return self._api.getPatternLoops(2, -1) return self._api.getPatternLoops(2, -1)[2]
@patnloop2.setter @patnloop2.setter
def patnloop2(self, n): def patnloop2(self, n):
@ -1386,6 +1387,20 @@ class Detector:
def setPatternLoops(self, level, start, stop, n, det_id=-1): def setPatternLoops(self, level, start, stop, n, det_id=-1):
self._api.setPatternLoops(level, start, stop, n, det_id) self._api.setPatternLoops(level, start, stop, n, det_id)
@property
def patioctrl(self):
self._api.setPatternWord(-1,-1,-1)
@patioctrl.setter
def patioctrl(self, word):
self._api.setPatternWord(-1, word, -1)
@property
def patlimits(self):
return self._api.getPatternLoops(np.uint64(-1),-1)[0:2]
def free_shared_memory(multi_id=0): def free_shared_memory(multi_id=0):
""" """

View File

@ -4,7 +4,15 @@ from _sls_detector import multiDetectorApi
class ExperimentalDetector(multiDetectorApi): class ExperimentalDetector(multiDetectorApi):
def __init__(self): def __init__(self):
super().__init__(0) super().__init__(0)
self.online = True
@property
def online(self):
return self._setOnline() == 1
@online.setter
def online(self, value):
self._setOnline(value)
@property @property
def rx_udpip(self): def rx_udpip(self):

View File

@ -244,18 +244,17 @@ class Detector {
std::vector<double> getRateCorrection(); std::vector<double> getRateCorrection();
void setPatternLoops(int level, int start, int stop,
int n, int detPos) {
void setPatternLoops(uint64_t level, uint64_t start, uint64_t stop,
uint64_t n, int detPos) {
det.setPatternLoops(level, start, stop, n, detPos); det.setPatternLoops(level, start, stop, n, detPos);
} }
std::array<uint64_t, 3> getPatternLoops(uint64_t level, int detPos) { std::array<uint64_t, 3> getPatternLoops(uint64_t level, int detPos) {
return det.getPatternLoops(level, detPos); return det.getPatternLoops(level, detPos);
} }
void setPatternWord(int addr, uint64_t word, int detPos){ void setPatternWord(int addr, uint64_t word, int detPos) {
det.setPatternWord(addr, word, detPos); det.setPatternWord(addr, word, detPos);
} }

View File

@ -1,3 +1,4 @@
#include <pybind11/operators.h>
#include <pybind11/pybind11.h> #include <pybind11/pybind11.h>
#include <pybind11/stl.h> #include <pybind11/stl.h>
@ -6,8 +7,7 @@
namespace py = pybind11; namespace py = pybind11;
PYBIND11_MODULE(_sls_detector, m) PYBIND11_MODULE(_sls_detector, m) {
{
m.doc() = R"pbdoc( m.doc() = R"pbdoc(
C/C++ API C/C++ API
----------------------- -----------------------
@ -45,8 +45,7 @@ PYBIND11_MODULE(_sls_detector, m)
>> 10 >> 10
)pbdoc"); )pbdoc");
DetectorApi DetectorApi.def(py::init<int>())
.def(py::init<int>())
.def("freeSharedMemory", &Detector::freeSharedMemory) .def("freeSharedMemory", &Detector::freeSharedMemory)
.def("getMultiDetectorId", &Detector::getMultiDetectorId) .def("getMultiDetectorId", &Detector::getMultiDetectorId)
.def("acq", &Detector::acquire) .def("acq", &Detector::acquire)
@ -129,10 +128,16 @@ PYBIND11_MODULE(_sls_detector, m)
.def("startReceiver", &Detector::startReceiver) .def("startReceiver", &Detector::startReceiver)
.def("stopReceiver", &Detector::stopReceiver) .def("stopReceiver", &Detector::stopReceiver)
.def("getFilePath", (std::string(Detector::*)()) & Detector::getFilePath, "Using multiSlsDetector") .def("getFilePath",
.def("getFilePath", (std::string(Detector::*)(int)) & Detector::getFilePath, "File path for individual detector") (std::string(Detector::*)()) & Detector::getFilePath,
.def("setFilePath", (void (Detector::*)(std::string)) & Detector::setFilePath) "Using multiSlsDetector")
.def("setFilePath", (void (Detector::*)(std::string, int)) & Detector::setFilePath) .def("getFilePath",
(std::string(Detector::*)(int)) & Detector::getFilePath,
"File path for individual detector")
.def("setFilePath",
(void (Detector::*)(std::string)) & Detector::setFilePath)
.def("setFilePath",
(void (Detector::*)(std::string, int)) & Detector::setFilePath)
.def("setFileName", &Detector::setFileName) .def("setFileName", &Detector::setFileName)
.def("getFileName", &Detector::getFileName) .def("getFileName", &Detector::getFileName)
@ -157,7 +162,6 @@ PYBIND11_MODULE(_sls_detector, m)
.def("getDelay", &Detector::getDelay) .def("getDelay", &Detector::getDelay)
.def("setDelay", &Detector::setDelay) .def("setDelay", &Detector::setDelay)
.def("setStoragecellStart", &Detector::setStoragecellStart) .def("setStoragecellStart", &Detector::setStoragecellStart)
.def("getStoragecellStart", &Detector::getStoragecellStart) .def("getStoragecellStart", &Detector::getStoragecellStart)
.def("setNumberOfStorageCells", &Detector::setNumberOfStorageCells) .def("setNumberOfStorageCells", &Detector::setNumberOfStorageCells)
@ -178,7 +182,7 @@ PYBIND11_MODULE(_sls_detector, m)
.def("getRxDataStreamStatus", &Detector::getRxDataStreamStatus) .def("getRxDataStreamStatus", &Detector::getRxDataStreamStatus)
.def("setRxDataStreamStatus", &Detector::setRxDataStreamStatus) .def("setRxDataStreamStatus", &Detector::setRxDataStreamStatus)
//Network stuff // Network stuff
.def("getReceiverHostname", &Detector::getReceiverHostname) .def("getReceiverHostname", &Detector::getReceiverHostname)
.def("setReceiverHostname", &Detector::setReceiverHostname) .def("setReceiverHostname", &Detector::setReceiverHostname)
.def("getReceiverStreamingPort", &Detector::getReceiverStreamingPort) .def("getReceiverStreamingPort", &Detector::getReceiverStreamingPort)
@ -195,7 +199,8 @@ PYBIND11_MODULE(_sls_detector, m)
.def("getReceiverPort", &Detector::getReceiverPort) .def("getReceiverPort", &Detector::getReceiverPort)
.def("setReceiverPort", &Detector::setReceiverPort) .def("setReceiverPort", &Detector::setReceiverPort)
.def("configureNetworkParameters", &Detector::configureNetworkParameters) .def("configureNetworkParameters",
&Detector::configureNetworkParameters)
.def("getDelayFrame", &Detector::getDelayFrame) .def("getDelayFrame", &Detector::getDelayFrame)
.def("setDelayFrame", &Detector::setDelayFrame) .def("setDelayFrame", &Detector::setDelayFrame)
.def("getDelayLeft", &Detector::getDelayLeft) .def("getDelayLeft", &Detector::getDelayLeft)
@ -210,18 +215,21 @@ PYBIND11_MODULE(_sls_detector, m)
.def("setReceiverFifoDepth", &Detector::setReceiverFifoDepth) .def("setReceiverFifoDepth", &Detector::setReceiverFifoDepth)
.def("getReceiverFifoDepth", &Detector::getReceiverFifoDepth) .def("getReceiverFifoDepth", &Detector::getReceiverFifoDepth)
.def("getReceiverFrameDiscardPolicy", &Detector::getReceiverFrameDiscardPolicy) .def("getReceiverFrameDiscardPolicy",
.def("setReceiverFramesDiscardPolicy", &Detector::setReceiverFramesDiscardPolicy) &Detector::getReceiverFrameDiscardPolicy)
.def("setReceiverFramesDiscardPolicy",
&Detector::setReceiverFramesDiscardPolicy)
.def("setPartialFramesPadding", &Detector::setPartialFramesPadding) .def("setPartialFramesPadding", &Detector::setPartialFramesPadding)
.def("getPartialFramesPadding", &Detector::getPartialFramesPadding) .def("getPartialFramesPadding", &Detector::getPartialFramesPadding)
.def("getUserDetails", &Detector::getUserDetails) .def("getUserDetails", &Detector::getUserDetails)
.def("isClientAndDetectorCompatible", &Detector::isClientAndDetectorCompatible) .def("isClientAndDetectorCompatible",
.def("isClientAndReceiverCompatible", &Detector::isClientAndReceiverCompatible) &Detector::isClientAndDetectorCompatible)
.def("isClientAndReceiverCompatible",
&Detector::isClientAndReceiverCompatible)
.def("getMeasuredPeriod", &Detector::getMeasuredPeriod) .def("getMeasuredPeriod", &Detector::getMeasuredPeriod)
.def("getMeasuredSubPeriod", &Detector::getMeasuredSubPeriod) .def("getMeasuredSubPeriod", &Detector::getMeasuredSubPeriod)
.def("setFileWrite", &Detector::setFileWrite) .def("setFileWrite", &Detector::setFileWrite)
.def("getFileWrite", &Detector::getFileWrite) .def("getFileWrite", &Detector::getFileWrite)
.def("setFileOverWrite", &Detector::setFileOverWrite) .def("setFileOverWrite", &Detector::setFileOverWrite)
@ -231,13 +239,15 @@ PYBIND11_MODULE(_sls_detector, m)
.def("setNumberOfFrames", &Detector::setNumberOfFrames) .def("setNumberOfFrames", &Detector::setNumberOfFrames)
.def("getNumberOfFrames", &Detector::getNumberOfFrames) .def("getNumberOfFrames", &Detector::getNumberOfFrames)
//Overloaded calls // Overloaded calls
.def("getFramesCaughtByReceiver", (int (Detector::*)() ) & Detector::getFramesCaughtByReceiver) .def("getFramesCaughtByReceiver",
.def("getFramesCaughtByReceiver", (int (Detector::*)(int)) & Detector::getFramesCaughtByReceiver) (int (Detector::*)()) & Detector::getFramesCaughtByReceiver)
.def("getFramesCaughtByReceiver",
(int (Detector::*)(int)) & Detector::getFramesCaughtByReceiver)
.def("resetFramesCaught", &Detector::resetFramesCaught) .def("resetFramesCaught", &Detector::resetFramesCaught)
.def("getReceiverCurrentFrameIndex", &Detector::getReceiverCurrentFrameIndex) .def("getReceiverCurrentFrameIndex",
&Detector::getReceiverCurrentFrameIndex)
.def("getGapPixels", &Detector::getGapPixels) .def("getGapPixels", &Detector::getGapPixels)
.def("setGapPixels", &Detector::setGapPixels) .def("setGapPixels", &Detector::setGapPixels)
.def("getFlippedDataX", &Detector::getFlippedDataX) .def("getFlippedDataX", &Detector::getFlippedDataX)
@ -264,39 +274,43 @@ PYBIND11_MODULE(_sls_detector, m)
.def("getPatternLoops", &Detector::getPatternLoops) .def("getPatternLoops", &Detector::getPatternLoops)
.def("setPatternLoops", &Detector::setPatternLoops) .def("setPatternLoops", &Detector::setPatternLoops)
.def("setPatternWord", &Detector::setPatternWord) .def("setPatternWord", &Detector::setPatternWord, py::arg("addr"), py::arg("word"), py::arg("det_id") = -1 )
.def("getImageSize", &Detector::getImageSize) .def("getImageSize", &Detector::getImageSize)
.def("setImageSize", &Detector::setImageSize) .def("setImageSize", &Detector::setImageSize)
.def("getNumberOfDetectors", &Detector::getNumberOfDetectors) .def("getNumberOfDetectors", &Detector::getNumberOfDetectors)
.def("getDetectorGeometry", &Detector::getDetectorGeometry); .def("getDetectorGeometry", &Detector::getDetectorGeometry);
// Experimental API to use the multi directly and inherit from to reduce
// code duplication need to investigate how to handle documentation
py::class_<multiSlsDetector> multiDetectorApi(m, "multiDetectorApi");
multiDetectorApi.def(py::init<int>())
.def("acquire", &multiSlsDetector::acquire)
.def("_setOnline", &multiSlsDetector::setOnline, py::arg("flag") = -1,
py::arg("det_id") = -1)
.def_property_readonly(
"hostname", py::cpp_function(&multiSlsDetector::getHostname,
//Experimental API to use the multi directly and inherit from to reduce py::arg(), py::arg("det_id") = -1))
//code duplication need to investigate how to handle documentation
py::class_<multiSlsDetector> multiDetectorApi(m, "multiDetectorApi");
multiDetectorApi
.def(py::init<int>())
.def_property("busy", .def_property("busy",
py::cpp_function(&multiSlsDetector::getAcquiringFlag), py::cpp_function(&multiSlsDetector::getAcquiringFlag),
py::cpp_function(&multiSlsDetector::setAcquiringFlag)) py::cpp_function(&multiSlsDetector::setAcquiringFlag))
.def_property_readonly("rx_tcpport", .def_property_readonly(
py::cpp_function(&multiSlsDetector::getReceiverPort)) "rx_tcpport", py::cpp_function(&multiSlsDetector::getReceiverPort))
.def_property_readonly("detectornumber", .def_property_readonly(
"detectornumber",
py::cpp_function(&multiSlsDetector::getDetectorNumber)) py::cpp_function(&multiSlsDetector::getDetectorNumber))
.def("_getReceiverUDPIP", &multiSlsDetector::getReceiverUDPIP) .def("_getReceiverUDPIP", &multiSlsDetector::getReceiverUDPIP)
.def("_setReceiverUDPIP", &multiSlsDetector::setReceiverUDPIP) .def("_setReceiverUDPIP", &multiSlsDetector::setReceiverUDPIP)
.def("_getPatternLoops", &multiSlsDetector::getPatternLoops) .def("getPatternLoops", &multiSlsDetector::getPatternLoops,
.def("_setPatternLoops", &multiSlsDetector::setPatternLoops) py::arg("level"), py::arg("det_id") = -1)
.def("_setPatternWord", &multiSlsDetector::setPatternWord) .def("setPatternLoops", &multiSlsDetector::setPatternLoops)
; .def("setPatternWord", &multiSlsDetector::setPatternWord,
py::arg("addr"), py::arg("word"), py::arg("det_id") = -1);
py::module io = m.def_submodule("io", "Submodule for io"); py::module io = m.def_submodule("io", "Submodule for io");
io.def("read_my302_file", &read_my302_file, "some"); io.def("read_my302_file", &read_my302_file, "some");
#ifdef VERSION_INFO #ifdef VERSION_INFO
m.attr("__version__") = VERSION_INFO; m.attr("__version__") = VERSION_INFO;
#else #else