From 045a28b5de1c82ff2204be6c2e224afb0501929b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=B6jdh?= Date: Fri, 26 Aug 2022 11:48:40 +0200 Subject: [PATCH] Nanosecond times in Python (#522) * initital implementation * datetime replaces with sls::Duration in Python C bindings * using custom type caster * fix for conversion to seconds * added set_count in python * common header for pybind11 includes authored-by: Erik Frojdh --- RELEASE.txt | 2 +- python/CMakeLists.txt | 2 + python/scripts/basic.py | 16 +- python/scripts/generate_functions.py | 85 +- python/slsdet/__init__.py | 3 +- python/slsdet/utils.py | 2 +- python/src/DurationWrapper.cpp | 26 + python/src/DurationWrapper.h | 26 + python/src/current.cpp | 8 +- python/src/detector.cpp | 3539 +++++++++++++------------- python/src/detector_in.cpp | 10 +- python/src/duration.cpp | 21 + python/src/enums.cpp | 6 +- python/src/enums_in.cpp | 6 +- python/src/main.cpp | 9 +- python/src/mythenFileIO.h | 4 +- python/src/network.cpp | 6 +- python/src/pattern.cpp | 6 +- python/src/py_headers.h | 14 + python/src/scan.cpp | 7 +- python/src/typecaster.h | 83 +- 21 files changed, 2081 insertions(+), 1800 deletions(-) create mode 100644 python/src/DurationWrapper.cpp create mode 100644 python/src/DurationWrapper.h create mode 100644 python/src/duration.cpp create mode 100644 python/src/py_headers.h diff --git a/RELEASE.txt b/RELEASE.txt index 1b66ee030..12a2aa277 100755 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -96,7 +96,7 @@ This document describes the differences between v7.0.0 and v6.x.x 2. Resolved Issues ================== - + - Reading back sub-microsecond exposure times from the Python API. 3. Firmware Requirements ======================== diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index f38ad61f0..873f938f8 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -9,6 +9,8 @@ pybind11_add_module(_slsdet src/pattern.cpp src/scan.cpp src/current.cpp + src/duration.cpp + src/DurationWrapper.cpp ) target_link_libraries(_slsdet PUBLIC diff --git a/python/scripts/basic.py b/python/scripts/basic.py index f07e8285b..4d306db36 100755 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -3,22 +3,20 @@ import os import sys import numpy as np -from pathlib import Path -sys.path.append(os.path.join(os.getcwd(), 'bin')) +# from pathlib import Path +# sys.path.append(os.path.join(os.getcwd(), 'bin')) from slsdet import Detector, Mythen3, Eiger, Jungfrau, DetectorDacs, Dac, Ctb, Gotthard2, Moench from slsdet import dacIndex, readoutMode from slsdet.lookup import view, find import slsdet - +from slsdet import DurationWrapper d = Detector() -e = Eiger() -c = Ctb() -g = Gotthard2() -# j = Jungfrau() -# m = Mythen3() -m = Moench() +t = DurationWrapper(1.0) +d.setExptime(t) + +# d.setExptime(0.3) \ No newline at end of file diff --git a/python/scripts/generate_functions.py b/python/scripts/generate_functions.py index 7be880913..872672437 100644 --- a/python/scripts/generate_functions.py +++ b/python/scripts/generate_functions.py @@ -16,33 +16,40 @@ import time from pathlib import Path from parse import system_include_paths, clang_format_version -REDC = '\033[91m' -GREENC = '\033[92m' -ENDC = '\033[0m' +REDC = "\033[91m" +GREENC = "\033[92m" +ENDC = "\033[0m" + + def red(msg): - return f'{REDC}{msg}{ENDC}' + return f"{REDC}{msg}{ENDC}" + def green(msg): - return f'{GREENC}{msg}{ENDC}' + return f"{GREENC}{msg}{ENDC}" + def check_clang_format_version(required_version): if (ver := clang_format_version()) != required_version: - msg = red(f'Clang format version {required_version} required, detected: {ver}. Bye!') + msg = red( + f"Clang format version {required_version} required, detected: {ver}. Bye!" + ) print(msg) sys.exit(1) else: - msg = green(f'Found clang-format version {ver}') + msg = green(f"Found clang-format version {ver}") print(msg) + def check_for_compile_commands_json(path): # print(f"Looking for compile data base in: {path}") - compile_data_base_file = path/'compile_commands.json' + compile_data_base_file = path / "compile_commands.json" if not compile_data_base_file.exists(): msg = red(f"No compile_commands.json file found in {path}. Bye!") print(msg) sys.exit(1) else: - msg = green(f'Found: {compile_data_base_file}') + msg = green(f"Found: {compile_data_base_file}") print(msg) @@ -50,15 +57,13 @@ default_build_path = "/home/l_frojdh/sls/build/" fpath = "../../slsDetectorSoftware/src/Detector.cpp" - - - m = [] ag = [] lines = [] ag2 = [] cn = [] + def get_arguments(node): args = [a.type.spelling for a in node.get_arguments()] args = [ @@ -70,18 +75,19 @@ def get_arguments(node): args = f", {args}" return args + def get_arguments_with_default(node): args = [] for arg in node.get_arguments(): tokens = [t.spelling for t in arg.get_tokens()] # print(tokens) - if '=' in tokens: - if arg.type.spelling == "sls::Positions": #TODO! automate + if "=" in tokens: + if arg.type.spelling == "sls::Positions": # TODO! automate args.append("py::arg() = Positions{}") else: - args.append('py::arg()' + ''.join(tokens[tokens.index('='):])) + args.append("py::arg()" + "".join(tokens[tokens.index("=") :])) else: - args.append('py::arg()') + args.append("py::arg()") args = ", ".join(args) if args: args = f", {args}" @@ -93,17 +99,26 @@ def get_fdec(node): if node.result_type.spelling: return_type = node.result_type.spelling else: - return_type = 'void' - + return_type = "void" + if node.is_const_method(): - const = 'const' + const = "const" else: - const = '' + const = "" args = ", ".join(args) - args = f'({return_type}(Detector::*)({args}){const})' + args = f"({return_type}(Detector::*)({args}){const})" return args +def time_return_lambda(node, args): + names = ['a', 'b', 'c', 'd'] + fa = [a.type.spelling for a in node.get_arguments()] + ca = ','.join(f'{arg} {n}' for arg, n in zip(fa, names)) + na = ','.join(names[0:len(fa)]) + s = f'CppDetectorApi.def("{node.spelling}",[](sls::Detector& self, {ca}){{ auto r = self.{node.spelling}({na}); \n return std::vector(r.begin(), r.end()); }}{args});' + return s + + def visit(node): if node.kind == cindex.CursorKind.CLASS_DECL: if node.displayname == "Detector": @@ -113,15 +128,15 @@ def visit(node): and child.access_specifier == cindex.AccessSpecifier.PUBLIC ): m.append(child) - # args = get_arguments(child) args = get_arguments_with_default(child) fs = get_fdec(child) lines.append( - f'.def("{child.spelling}",{fs} &Detector::{child.spelling}{args})' + f'CppDetectorApi.def("{child.spelling}",{fs} &Detector::{child.spelling}{args});' ) if cargs.verbose: - print(f'&Detector::{child.spelling}{args})') + print(f"&Detector::{child.spelling}{args})") cn.append(child) + for child in node.get_children(): visit(child) @@ -139,16 +154,16 @@ if __name__ == "__main__": "-v", "--verbose", help="more output", - action='store_true', + action="store_true", ) cargs = parser.parse_args() - + check_clang_format_version(12) check_for_compile_commands_json(cargs.build_path) - print("Parsing functions in Detector.h - ", end = "", flush = True) + print("Parsing functions in Detector.h - ", end="", flush=True) t0 = time.perf_counter() - #parse functions + # parse functions db = cindex.CompilationDatabase.fromDirectory(cargs.build_path) index = cindex.Index.create() args = db.getCompileCommands(fpath) @@ -159,10 +174,10 @@ if __name__ == "__main__": args = args + incargs tu = index.parse(fpath, args=args) visit(tu.cursor) - print(green('OK')) - print(f'Parsing took {time.perf_counter()-t0:.3f}s') + print(green("OK")) + print(f"Parsing took {time.perf_counter()-t0:.3f}s") - print("Read detector_in.cpp - ", end = "") + print("Read detector_in.cpp - ", end="") with open("../src/detector_in.cpp") as f: data = f.read() s = "".join(lines) @@ -170,16 +185,16 @@ if __name__ == "__main__": text = data.replace("[[FUNCTIONS]]", s) warning = "/* WARINING This file is auto generated any edits might be overwritten without warning */\n\n" print(green("OK")) - print("Writing to detector.cpp - ", end = "") + print("Writing to detector.cpp - ", end="") with open("../src/detector.cpp", "w") as f: f.write(warning) f.write(text) - print(green('OK')) + print(green("OK")) # run clang format on the output - print('Running clang format on generated source -', end = "") + print("Running clang format on generated source -", end="") subprocess.run(["clang-format", "../src/detector.cpp", "-i"]) print(green(" OK")) print("Changes since last commit:") - subprocess.run(['git', 'diff', '../src/detector.cpp']) + subprocess.run(["git", "diff", "../src/detector.cpp"]) diff --git a/python/slsdet/__init__.py b/python/slsdet/__init__.py index efdb9aa6d..cf03a8a4e 100755 --- a/python/slsdet/__init__.py +++ b/python/slsdet/__init__.py @@ -24,4 +24,5 @@ from .defines import * IpAddr = _slsdet.IpAddr MacAddr = _slsdet.MacAddr scanParameters = _slsdet.scanParameters -currentSrcParameters = _slsdet.currentSrcParameters \ No newline at end of file +currentSrcParameters = _slsdet.currentSrcParameters +DurationWrapper = _slsdet.DurationWrapper \ No newline at end of file diff --git a/python/slsdet/utils.py b/python/slsdet/utils.py index 989cf93e0..afa9f59a2 100755 --- a/python/slsdet/utils.py +++ b/python/slsdet/utils.py @@ -79,7 +79,7 @@ def element_if_equal(mylist): def reduce_time(mylist): res = element_if_equal(element_if_equal(mylist)) - if isinstance(res, dt.timedelta): + if isinstance(res, (dt.timedelta, _slsdet.DurationWrapper)): return res.total_seconds() elif isinstance(res[0], list): return [[item.total_seconds() for item in subl] for subl in res] diff --git a/python/src/DurationWrapper.cpp b/python/src/DurationWrapper.cpp new file mode 100644 index 000000000..74cc3bf3a --- /dev/null +++ b/python/src/DurationWrapper.cpp @@ -0,0 +1,26 @@ +#include "DurationWrapper.h" +#include + +namespace sls{ + + DurationWrapper::DurationWrapper(double seconds){ + ns_tick = std::round(seconds*1e9); + } + + uint64_t DurationWrapper::count() const{ + return ns_tick; + } + + void DurationWrapper::set_count(uint64_t ns_count){ + ns_tick = ns_count; + } + + bool DurationWrapper::operator==(const DurationWrapper& other)const{ + return ns_tick == other.ns_tick; + } + + double DurationWrapper::total_seconds()const{ + return static_cast(ns_tick)/1e9; + } + +} \ No newline at end of file diff --git a/python/src/DurationWrapper.h b/python/src/DurationWrapper.h new file mode 100644 index 000000000..1f574bda0 --- /dev/null +++ b/python/src/DurationWrapper.h @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package +#pragma once +#include + +namespace sls{ +/* +Wrapper for nanoseconds stored in uint64_t, used for conversion between +std::chrono::nanoseconds and python (float or sls::DurationWrapper) +*/ + +class DurationWrapper{ + uint64_t ns_tick{0}; + + public: + DurationWrapper() = default; + explicit DurationWrapper(double seconds); + ~DurationWrapper() = default; + + bool operator==(const DurationWrapper& other) const; + uint64_t count() const; + void set_count(uint64_t count); + double total_seconds() const; +}; + +} \ No newline at end of file diff --git a/python/src/current.cpp b/python/src/current.cpp index 487f9e35f..382faaec7 100644 --- a/python/src/current.cpp +++ b/python/src/current.cpp @@ -1,12 +1,8 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -#include -#include -#include -#include -#include -// #include "sls/Pattern.h" +#include "py_headers.h" + #include "sls/ToString.h" #include "sls/sls_detector_defs.h" diff --git a/python/src/detector.cpp b/python/src/detector.cpp index 7a0eb6af7..380e7129e 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -3,18 +3,14 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -#include -#include -#include -#include +#include "py_headers.h" #include "sls/Detector.h" +#include "sls/TimeHelper.h" #include "sls/ToString.h" #include "sls/network_utils.h" #include "sls/sls_detector_defs.h" -#include "typecaster.h" -#include "sls/TimeHelper.h" #include #include namespace py = pybind11; @@ -26,1703 +22,1838 @@ void init_det(py::module &m) { using sls::Result; py::class_ CppDetectorApi(m, "CppDetectorApi"); - CppDetectorApi - .def(py::init()) + CppDetectorApi.def(py::init()); - .def("freeSharedMemory", - (void (Detector::*)()) & Detector::freeSharedMemory) - .def("loadConfig", - (void (Detector::*)(const std::string &)) & Detector::loadConfig, - py::arg()) - .def("loadParameters", - (void (Detector::*)(const std::string &)) & - Detector::loadParameters, - py::arg()) - .def("loadParameters", - (void (Detector::*)(const std::vector &)) & - Detector::loadParameters, - py::arg()) - .def("getHostname", - (Result(Detector::*)(sls::Positions) const) & - Detector::getHostname, - py::arg() = Positions{}) - .def("setHostname", - (void (Detector::*)(const std::vector &)) & - Detector::setHostname, - py::arg()) - .def("setVirtualDetectorServers", - (void (Detector::*)(int, int)) & - Detector::setVirtualDetectorServers, - py::arg(), py::arg()) - .def("getShmId", (int (Detector::*)() const) & Detector::getShmId) - .def("getPackageVersion", - (std::string(Detector::*)() const) & Detector::getPackageVersion) - .def("getClientVersion", - (int64_t(Detector::*)() const) & Detector::getClientVersion) - .def("getFirmwareVersion", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFirmwareVersion, - py::arg() = Positions{}) - .def("getDetectorServerVersion", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDetectorServerVersion, - py::arg() = Positions{}) - .def("getKernelVersion", - (Result(Detector::*)(sls::Positions) const) & - Detector::getKernelVersion, - py::arg() = Positions{}) - .def("getSerialNumber", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSerialNumber, - py::arg() = Positions{}) - .def("getModuleId", - (Result(Detector::*)(sls::Positions) const) & - Detector::getModuleId, - py::arg() = Positions{}) - .def("getReceiverVersion", - (Result(Detector::*)(sls::Positions) const) & - Detector::getReceiverVersion, - py::arg() = Positions{}) - .def("getDetectorType", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDetectorType, - py::arg() = Positions{}) - .def("size", (int (Detector::*)() const) & Detector::size) - .def("empty", (bool (Detector::*)() const) & Detector::empty) - .def("getModuleGeometry", - (defs::xy(Detector::*)() const) & Detector::getModuleGeometry) - .def("getModuleSize", - (Result(Detector::*)(sls::Positions) const) & - Detector::getModuleSize, - py::arg() = Positions{}) - .def("getDetectorSize", - (defs::xy(Detector::*)() const) & Detector::getDetectorSize) - .def("setDetectorSize", - (void (Detector::*)(const defs::xy)) & Detector::setDetectorSize, - py::arg()) - .def("getSettingsList", - (std::vector(Detector::*)() const) & - Detector::getSettingsList) - .def("getSettings", - (Result(Detector::*)(sls::Positions) - const) & - Detector::getSettings, - py::arg() = Positions{}) - .def("setSettings", - (void (Detector::*)(defs::detectorSettings, sls::Positions)) & - Detector::setSettings, - py::arg(), py::arg() = Positions{}) - .def("getThresholdEnergy", - (Result(Detector::*)(sls::Positions) const) & - Detector::getThresholdEnergy, - py::arg() = Positions{}) - .def("getAllThresholdEnergy", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getAllThresholdEnergy, - py::arg() = Positions{}) - .def("setThresholdEnergy", - (void (Detector::*)(int, defs::detectorSettings, bool, - sls::Positions)) & - Detector::setThresholdEnergy, - py::arg(), py::arg() = defs::STANDARD, py::arg() = true, - py::arg() = Positions{}) - .def("setThresholdEnergy", - (void (Detector::*)(std::array, defs::detectorSettings, - bool, sls::Positions)) & - Detector::setThresholdEnergy, - py::arg(), py::arg() = defs::STANDARD, py::arg() = true, - py::arg() = Positions{}) - .def("getSettingsPath", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSettingsPath, - py::arg() = Positions{}) - .def("setSettingsPath", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::setSettingsPath, - py::arg(), py::arg() = Positions{}) - .def("loadTrimbits", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::loadTrimbits, - py::arg(), py::arg() = Positions{}) - .def("saveTrimbits", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::saveTrimbits, - py::arg(), py::arg() = Positions{}) - .def("getAllTrimbits", - (Result(Detector::*)(sls::Positions) const) & - Detector::getAllTrimbits, - py::arg() = Positions{}) - .def("setAllTrimbits", - (void (Detector::*)(int, sls::Positions)) & - Detector::setAllTrimbits, - py::arg(), py::arg() = Positions{}) - .def("getTrimEnergies", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getTrimEnergies, - py::arg() = Positions{}) - .def("setTrimEnergies", - (void (Detector::*)(std::vector, sls::Positions)) & - Detector::setTrimEnergies, - py::arg(), py::arg() = Positions{}) - .def("getGapPixelsinCallback", - (bool (Detector::*)() const) & Detector::getGapPixelsinCallback) - .def("setGapPixelsinCallback", - (void (Detector::*)(const bool)) & - Detector::setGapPixelsinCallback, - py::arg()) - .def("getFlipRows", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFlipRows, - py::arg() = Positions{}) - .def("setFlipRows", - (void (Detector::*)(bool, sls::Positions)) & Detector::setFlipRows, - py::arg(), py::arg() = Positions{}) - .def("getMaster", - (Result(Detector::*)(sls::Positions) const) & - Detector::getMaster, - py::arg() = Positions{}) - .def("setMaster", (void (Detector::*)(bool, int)) & Detector::setMaster, - py::arg(), py::arg()) - .def("getSynchronization", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSynchronization, - py::arg() = Positions{}) - .def("setSynchronization", - (void (Detector::*)(bool)) & Detector::setSynchronization, - py::arg()) - .def("isVirtualDetectorServer", - (Result(Detector::*)(sls::Positions) const) & - Detector::isVirtualDetectorServer, - py::arg() = Positions{}) - .def("registerAcquisitionFinishedCallback", - (void (Detector::*)(void (*)(double, int, void *), void *)) & - Detector::registerAcquisitionFinishedCallback, - py::arg(), py::arg()) - .def("registerDataCallback", - (void (Detector::*)( - void (*)(sls::detectorData *, uint64_t, uint32_t, void *), - void *)) & - Detector::registerDataCallback, - py::arg(), py::arg()) - .def("getNumberOfFrames", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfFrames, - py::arg() = Positions{}) - .def("setNumberOfFrames", - (void (Detector::*)(int64_t)) & Detector::setNumberOfFrames, - py::arg()) - .def("getNumberOfTriggers", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfTriggers, - py::arg() = Positions{}) - .def("setNumberOfTriggers", - (void (Detector::*)(int64_t)) & Detector::setNumberOfTriggers, - py::arg()) - .def("getExptime", - (Result(Detector::*)(sls::Positions) const) & - Detector::getExptime, - py::arg() = Positions{}) - .def("setExptime", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setExptime, - py::arg(), py::arg() = Positions{}) - .def("getPeriod", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPeriod, - py::arg() = Positions{}) - .def("setPeriod", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setPeriod, - py::arg(), py::arg() = Positions{}) - .def("getDelayAfterTrigger", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDelayAfterTrigger, - py::arg() = Positions{}) - .def("setDelayAfterTrigger", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setDelayAfterTrigger, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfFramesLeft", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfFramesLeft, - py::arg() = Positions{}) - .def("getNumberOfTriggersLeft", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfTriggersLeft, - py::arg() = Positions{}) - .def("getPeriodLeft", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPeriodLeft, - py::arg() = Positions{}) - .def("getDelayAfterTriggerLeft", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDelayAfterTriggerLeft, - py::arg() = Positions{}) - .def("getDynamicRange", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDynamicRange, - py::arg() = Positions{}) - .def("setDynamicRange", - (void (Detector::*)(int)) & Detector::setDynamicRange, py::arg()) - .def("getDynamicRangeList", (std::vector(Detector::*)() const) & - Detector::getDynamicRangeList) - .def("getTimingMode", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTimingMode, - py::arg() = Positions{}) - .def("setTimingMode", - (void (Detector::*)(defs::timingMode, sls::Positions)) & - Detector::setTimingMode, - py::arg(), py::arg() = Positions{}) - .def("getTimingModeList", - (std::vector(Detector::*)() const) & - Detector::getTimingModeList) - .def("getReadoutSpeed", - (Result(Detector::*)(sls::Positions) const) & - Detector::getReadoutSpeed, - py::arg() = Positions{}) - .def("setReadoutSpeed", - (void (Detector::*)(defs::speedLevel, sls::Positions)) & - Detector::setReadoutSpeed, - py::arg(), py::arg() = Positions{}) - .def("getReadoutSpeedList", - (std::vector(Detector::*)() const) & - Detector::getReadoutSpeedList) - .def("getADCPhase", - (Result(Detector::*)(sls::Positions) const) & - Detector::getADCPhase, - py::arg() = Positions{}) - .def("setADCPhase", - (void (Detector::*)(int, sls::Positions)) & Detector::setADCPhase, - py::arg(), py::arg() = Positions{}) - .def("getMaxADCPhaseShift", - (Result(Detector::*)(sls::Positions) const) & - Detector::getMaxADCPhaseShift, - py::arg() = Positions{}) - .def("getADCPhaseInDegrees", - (Result(Detector::*)(sls::Positions) const) & - Detector::getADCPhaseInDegrees, - py::arg() = Positions{}) - .def("setADCPhaseInDegrees", - (void (Detector::*)(int, sls::Positions)) & - Detector::setADCPhaseInDegrees, - py::arg(), py::arg() = Positions{}) - .def("getDBITPhase", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDBITPhase, - py::arg() = Positions{}) - .def("setDBITPhase", - (void (Detector::*)(int, sls::Positions)) & Detector::setDBITPhase, - py::arg(), py::arg() = Positions{}) - .def("getMaxDBITPhaseShift", - (Result(Detector::*)(sls::Positions) const) & - Detector::getMaxDBITPhaseShift, - py::arg() = Positions{}) - .def("getDBITPhaseInDegrees", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDBITPhaseInDegrees, - py::arg() = Positions{}) - .def("setDBITPhaseInDegrees", - (void (Detector::*)(int, sls::Positions)) & - Detector::setDBITPhaseInDegrees, - py::arg(), py::arg() = Positions{}) - .def("getClockFrequency", - (Result(Detector::*)(int, sls::Positions)) & - Detector::getClockFrequency, - py::arg(), py::arg() = Positions{}) - .def("getClockPhase", - (Result(Detector::*)(int, sls::Positions)) & - Detector::getClockPhase, - py::arg(), py::arg() = Positions{}) - .def("setClockPhase", - (void (Detector::*)(int, int, sls::Positions)) & - Detector::setClockPhase, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getMaxClockPhaseShift", - (Result(Detector::*)(int, sls::Positions)) & - Detector::getMaxClockPhaseShift, - py::arg(), py::arg() = Positions{}) - .def("getClockPhaseinDegrees", - (Result(Detector::*)(int, sls::Positions)) & - Detector::getClockPhaseinDegrees, - py::arg(), py::arg() = Positions{}) - .def("setClockPhaseinDegrees", - (void (Detector::*)(int, int, sls::Positions)) & - Detector::setClockPhaseinDegrees, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getClockDivider", - (Result(Detector::*)(int, sls::Positions)) & - Detector::getClockDivider, - py::arg(), py::arg() = Positions{}) - .def("setClockDivider", - (void (Detector::*)(int, int, sls::Positions)) & - Detector::setClockDivider, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getHighVoltage", - (Result(Detector::*)(sls::Positions) const) & - Detector::getHighVoltage, - py::arg() = Positions{}) - .def("setHighVoltage", - (void (Detector::*)(int, sls::Positions)) & - Detector::setHighVoltage, - py::arg(), py::arg() = Positions{}) - .def("getPowerChip", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPowerChip, - py::arg() = Positions{}) - .def("setPowerChip", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setPowerChip, - py::arg(), py::arg() = Positions{}) - .def("getImageTestMode", - (Result(Detector::*)(sls::Positions)) & - Detector::getImageTestMode, - py::arg() = Positions{}) - .def("setImageTestMode", - (void (Detector::*)(const int, sls::Positions)) & - Detector::setImageTestMode, - py::arg(), py::arg() = Positions{}) - .def("getTemperatureList", - (std::vector(Detector::*)() const) & - Detector::getTemperatureList) - .def("getTemperature", - (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & - Detector::getTemperature, - py::arg(), py::arg() = Positions{}) - .def("getDacList", (std::vector(Detector::*)() const) & - Detector::getDacList) - .def("getDefaultDac", - (Result(Detector::*)(defs::dacIndex, sls::Positions)) & - Detector::getDefaultDac, - py::arg(), py::arg() = Positions{}) - .def("setDefaultDac", - (void (Detector::*)(defs::dacIndex, int, sls::Positions)) & - Detector::setDefaultDac, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getDefaultDac", - (Result(Detector::*)(defs::dacIndex, defs::detectorSettings, - sls::Positions)) & - Detector::getDefaultDac, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("setDefaultDac", - (void (Detector::*)(defs::dacIndex, int, defs::detectorSettings, - sls::Positions)) & - Detector::setDefaultDac, - py::arg(), py::arg(), py::arg(), py::arg() = Positions{}) - .def("resetToDefaultDacs", - (void (Detector::*)(const bool, sls::Positions)) & - Detector::resetToDefaultDacs, - py::arg(), py::arg() = Positions{}) - .def("getDAC", - (Result(Detector::*)(defs::dacIndex, bool, sls::Positions) - const) & - Detector::getDAC, - py::arg(), py::arg() = false, py::arg() = Positions{}) - .def("setDAC", - (void (Detector::*)(defs::dacIndex, int, bool, sls::Positions)) & - Detector::setDAC, - py::arg(), py::arg(), py::arg() = false, py::arg() = Positions{}) - .def("getOnChipDAC", - (Result(Detector::*)(defs::dacIndex, int, sls::Positions) - const) & - Detector::getOnChipDAC, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("setOnChipDAC", - (void (Detector::*)(defs::dacIndex, int, int, sls::Positions)) & - Detector::setOnChipDAC, - py::arg(), py::arg(), py::arg(), py::arg() = Positions{}) - .def("getExternalSignalFlags", - (Result(Detector::*)(int, sls::Positions) - const) & - Detector::getExternalSignalFlags, - py::arg(), py::arg() = Positions{}) - .def("setExternalSignalFlags", - (void (Detector::*)(int, defs::externalSignalFlag, - sls::Positions)) & - Detector::setExternalSignalFlags, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getParallelMode", - (Result(Detector::*)(sls::Positions) const) & - Detector::getParallelMode, - py::arg() = Positions{}) - .def("setParallelMode", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setParallelMode, - py::arg(), py::arg() = Positions{}) - .def("getFilterResistor", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFilterResistor, - py::arg() = Positions{}) - .def("setFilterResistor", - (void (Detector::*)(int, sls::Positions)) & - Detector::setFilterResistor, - py::arg(), py::arg() = Positions{}) - .def("getCurrentSource", - (Result(Detector::*)(sls::Positions) - const) & - Detector::getCurrentSource, - py::arg() = Positions{}) - .def("setCurrentSource", - (void (Detector::*)(defs::currentSrcParameters, sls::Positions)) & - Detector::setCurrentSource, - py::arg(), py::arg() = Positions{}) - .def("getDBITPipeline", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDBITPipeline, - py::arg() = Positions{}) - .def("setDBITPipeline", - (void (Detector::*)(int, sls::Positions)) & - Detector::setDBITPipeline, - py::arg(), py::arg() = Positions{}) - .def("getReadNRows", - (Result(Detector::*)(sls::Positions) const) & - Detector::getReadNRows, - py::arg() = Positions{}) - .def("setReadNRows", - (void (Detector::*)(const int, sls::Positions)) & - Detector::setReadNRows, - py::arg(), py::arg() = Positions{}) - .def("acquire", (void (Detector::*)()) & Detector::acquire) - .def("clearAcquiringFlag", - (void (Detector::*)()) & Detector::clearAcquiringFlag) - .def("startReceiver", (void (Detector::*)()) & Detector::startReceiver) - .def("stopReceiver", (void (Detector::*)()) & Detector::stopReceiver) - .def("startDetector", - (void (Detector::*)(sls::Positions)) & Detector::startDetector, - py::arg() = Positions{}) - .def("startDetectorReadout", - (void (Detector::*)()) & Detector::startDetectorReadout) - .def("stopDetector", - (void (Detector::*)(sls::Positions)) & Detector::stopDetector, - py::arg() = Positions{}) - .def("getDetectorStatus", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDetectorStatus, - py::arg() = Positions{}) - .def("getReceiverStatus", - (Result(Detector::*)(sls::Positions) const) & - Detector::getReceiverStatus, - py::arg() = Positions{}) - .def("getFramesCaught", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getFramesCaught, - py::arg() = Positions{}) - .def("getNumMissingPackets", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getNumMissingPackets, - py::arg() = Positions{}) - .def("getRxCurrentFrameIndex", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getRxCurrentFrameIndex, - py::arg() = Positions{}) - .def("getNextFrameNumber", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNextFrameNumber, - py::arg() = Positions{}) - .def("setNextFrameNumber", - (void (Detector::*)(uint64_t, sls::Positions)) & - Detector::setNextFrameNumber, - py::arg(), py::arg() = Positions{}) - .def("sendSoftwareTrigger", - (void (Detector::*)(const bool, sls::Positions)) & - Detector::sendSoftwareTrigger, - py::arg() = false, py::arg() = Positions{}) - .def("getScan", - (Result(Detector::*)(sls::Positions) const) & - Detector::getScan, - py::arg() = Positions{}) - .def("setScan", - (void (Detector::*)(const defs::scanParameters)) & - Detector::setScan, - py::arg()) - .def("getScanErrorMessage", - (Result(Detector::*)(sls::Positions) const) & - Detector::getScanErrorMessage, - py::arg() = Positions{}) - .def("getNumberofUDPInterfaces", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberofUDPInterfaces, - py::arg() = Positions{}) - .def("setNumberofUDPInterfaces", - (void (Detector::*)(int, sls::Positions)) & - Detector::setNumberofUDPInterfaces, - py::arg(), py::arg() = Positions{}) - .def("getSelectedUDPInterface", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSelectedUDPInterface, - py::arg() = Positions{}) - .def("selectUDPInterface", - (void (Detector::*)(int, sls::Positions)) & - Detector::selectUDPInterface, - py::arg(), py::arg() = Positions{}) - .def("getSourceUDPIP", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSourceUDPIP, - py::arg() = Positions{}) - .def("setSourceUDPIP", - (void (Detector::*)(const sls::IpAddr, sls::Positions)) & - Detector::setSourceUDPIP, - py::arg(), py::arg() = Positions{}) - .def("getSourceUDPIP2", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSourceUDPIP2, - py::arg() = Positions{}) - .def("setSourceUDPIP2", - (void (Detector::*)(const sls::IpAddr, sls::Positions)) & - Detector::setSourceUDPIP2, - py::arg(), py::arg() = Positions{}) - .def("getSourceUDPMAC", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSourceUDPMAC, - py::arg() = Positions{}) - .def("setSourceUDPMAC", - (void (Detector::*)(const sls::MacAddr, sls::Positions)) & - Detector::setSourceUDPMAC, - py::arg(), py::arg() = Positions{}) - .def("getSourceUDPMAC2", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSourceUDPMAC2, - py::arg() = Positions{}) - .def("setSourceUDPMAC2", - (void (Detector::*)(const sls::MacAddr, sls::Positions)) & - Detector::setSourceUDPMAC2, - py::arg(), py::arg() = Positions{}) - .def("getDestinationUDPList", - (Result(Detector::*)(const uint32_t, - sls::Positions) const) & - Detector::getDestinationUDPList, - py::arg(), py::arg() = Positions{}) - .def("setDestinationUDPList", - (void (Detector::*)(const sls::UdpDestination, const int)) & - Detector::setDestinationUDPList, - py::arg(), py::arg()) - .def("getNumberofUDPDestinations", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberofUDPDestinations, - py::arg() = Positions{}) - .def("clearUDPDestinations", - (void (Detector::*)(sls::Positions)) & - Detector::clearUDPDestinations, - py::arg() = Positions{}) - .def("getFirstUDPDestination", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFirstUDPDestination, - py::arg() = Positions{}) - .def("setFirstUDPDestination", - (void (Detector::*)(const int, sls::Positions)) & - Detector::setFirstUDPDestination, - py::arg(), py::arg() = Positions{}) - .def("getDestinationUDPIP", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDestinationUDPIP, - py::arg() = Positions{}) - .def("setDestinationUDPIP", - (void (Detector::*)(const sls::IpAddr, sls::Positions)) & - Detector::setDestinationUDPIP, - py::arg(), py::arg() = Positions{}) - .def("getDestinationUDPIP2", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDestinationUDPIP2, - py::arg() = Positions{}) - .def("setDestinationUDPIP2", - (void (Detector::*)(const sls::IpAddr, sls::Positions)) & - Detector::setDestinationUDPIP2, - py::arg(), py::arg() = Positions{}) - .def("getDestinationUDPMAC", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDestinationUDPMAC, - py::arg() = Positions{}) - .def("setDestinationUDPMAC", - (void (Detector::*)(const sls::MacAddr, sls::Positions)) & - Detector::setDestinationUDPMAC, - py::arg(), py::arg() = Positions{}) - .def("getDestinationUDPMAC2", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDestinationUDPMAC2, - py::arg() = Positions{}) - .def("setDestinationUDPMAC2", - (void (Detector::*)(const sls::MacAddr, sls::Positions)) & - Detector::setDestinationUDPMAC2, - py::arg(), py::arg() = Positions{}) - .def("getDestinationUDPPort", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDestinationUDPPort, - py::arg() = Positions{}) - .def("setDestinationUDPPort", - (void (Detector::*)(int, int)) & Detector::setDestinationUDPPort, - py::arg(), py::arg() = -1) - .def("getDestinationUDPPort2", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDestinationUDPPort2, - py::arg() = Positions{}) - .def("setDestinationUDPPort2", - (void (Detector::*)(int, int)) & Detector::setDestinationUDPPort2, - py::arg(), py::arg() = -1) - .def("reconfigureUDPDestination", - (void (Detector::*)(sls::Positions)) & - Detector::reconfigureUDPDestination, - py::arg() = Positions{}) - .def("validateUDPConfiguration", - (void (Detector::*)(sls::Positions)) & - Detector::validateUDPConfiguration, - py::arg() = Positions{}) - .def("printRxConfiguration", - (Result(Detector::*)(sls::Positions) const) & - Detector::printRxConfiguration, - py::arg() = Positions{}) - .def("getTenGiga", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTenGiga, - py::arg() = Positions{}) - .def("setTenGiga", - (void (Detector::*)(bool, sls::Positions)) & Detector::setTenGiga, - py::arg(), py::arg() = Positions{}) - .def("getTenGigaFlowControl", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTenGigaFlowControl, - py::arg() = Positions{}) - .def("setTenGigaFlowControl", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setTenGigaFlowControl, - py::arg(), py::arg() = Positions{}) - .def("getTransmissionDelayFrame", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTransmissionDelayFrame, - py::arg() = Positions{}) - .def("setTransmissionDelayFrame", - (void (Detector::*)(int, sls::Positions)) & - Detector::setTransmissionDelayFrame, - py::arg(), py::arg() = Positions{}) - .def("getTransmissionDelayLeft", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTransmissionDelayLeft, - py::arg() = Positions{}) - .def("setTransmissionDelayLeft", - (void (Detector::*)(int, sls::Positions)) & - Detector::setTransmissionDelayLeft, - py::arg(), py::arg() = Positions{}) - .def("getTransmissionDelayRight", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTransmissionDelayRight, - py::arg() = Positions{}) - .def("setTransmissionDelayRight", - (void (Detector::*)(int, sls::Positions)) & - Detector::setTransmissionDelayRight, - py::arg(), py::arg() = Positions{}) - .def("getUseReceiverFlag", - (Result(Detector::*)(sls::Positions) const) & - Detector::getUseReceiverFlag, - py::arg() = Positions{}) - .def("getRxHostname", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxHostname, - py::arg() = Positions{}) - .def("setRxHostname", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::setRxHostname, - py::arg(), py::arg() = Positions{}) - .def("setRxHostname", - (void (Detector::*)(const std::vector &)) & - Detector::setRxHostname, - py::arg()) - .def("getRxPort", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxPort, - py::arg() = Positions{}) - .def("setRxPort", (void (Detector::*)(int, int)) & Detector::setRxPort, - py::arg(), py::arg() = -1) - .def("getRxFifoDepth", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxFifoDepth, - py::arg() = Positions{}) - .def("setRxFifoDepth", - (void (Detector::*)(int, sls::Positions)) & - Detector::setRxFifoDepth, - py::arg(), py::arg() = Positions{}) - .def("getRxSilentMode", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxSilentMode, - py::arg() = Positions{}) - .def("setRxSilentMode", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setRxSilentMode, - py::arg(), py::arg() = Positions{}) - .def("getRxFrameDiscardPolicy", - (Result(Detector::*)(sls::Positions) - const) & - Detector::getRxFrameDiscardPolicy, - py::arg() = Positions{}) - .def("setRxFrameDiscardPolicy", - (void (Detector::*)(defs::frameDiscardPolicy, sls::Positions)) & - Detector::setRxFrameDiscardPolicy, - py::arg(), py::arg() = Positions{}) - .def("getPartialFramesPadding", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPartialFramesPadding, - py::arg() = Positions{}) - .def("setPartialFramesPadding", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setPartialFramesPadding, - py::arg(), py::arg() = Positions{}) - .def("getRxUDPSocketBufferSize", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxUDPSocketBufferSize, - py::arg() = Positions{}) - .def("setRxUDPSocketBufferSize", - (void (Detector::*)(int, sls::Positions)) & - Detector::setRxUDPSocketBufferSize, - py::arg(), py::arg() = Positions{}) - .def("getRxRealUDPSocketBufferSize", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxRealUDPSocketBufferSize, - py::arg() = Positions{}) - .def("getRxLock", - (Result(Detector::*)(sls::Positions)) & Detector::getRxLock, - py::arg() = Positions{}) - .def("setRxLock", - (void (Detector::*)(bool, sls::Positions)) & Detector::setRxLock, - py::arg(), py::arg() = Positions{}) - .def("getRxLastClientIP", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxLastClientIP, - py::arg() = Positions{}) - .def("getRxThreadIds", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getRxThreadIds, - py::arg() = Positions{}) - .def("getRxArping", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxArping, - py::arg() = Positions{}) - .def("setRxArping", - (void (Detector::*)(bool, sls::Positions)) & Detector::setRxArping, - py::arg(), py::arg() = Positions{}) - .def("getIndividualRxROIs", - (Result(Detector::*)(sls::Positions) const) & - Detector::getIndividualRxROIs, - py::arg()) - .def("getRxROI", (defs::ROI(Detector::*)() const) & Detector::getRxROI) - .def("setRxROI", - (void (Detector::*)(const defs::ROI)) & Detector::setRxROI, - py::arg()) - .def("clearRxROI", (void (Detector::*)()) & Detector::clearRxROI) - .def("getFileFormat", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFileFormat, - py::arg() = Positions{}) - .def("setFileFormat", - (void (Detector::*)(defs::fileFormat, sls::Positions)) & - Detector::setFileFormat, - py::arg(), py::arg() = Positions{}) - .def("getFilePath", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFilePath, - py::arg() = Positions{}) - .def("setFilePath", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::setFilePath, - py::arg(), py::arg() = Positions{}) - .def("getFileNamePrefix", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFileNamePrefix, - py::arg() = Positions{}) - .def("setFileNamePrefix", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::setFileNamePrefix, - py::arg(), py::arg() = Positions{}) - .def("getAcquisitionIndex", - (Result(Detector::*)(sls::Positions) const) & - Detector::getAcquisitionIndex, - py::arg() = Positions{}) - .def("setAcquisitionIndex", - (void (Detector::*)(int64_t, sls::Positions)) & - Detector::setAcquisitionIndex, - py::arg(), py::arg() = Positions{}) - .def("getFileWrite", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFileWrite, - py::arg() = Positions{}) - .def("setFileWrite", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setFileWrite, - py::arg(), py::arg() = Positions{}) - .def("getMasterFileWrite", - (bool (Detector::*)() const) & Detector::getMasterFileWrite) - .def("setMasterFileWrite", - (void (Detector::*)(bool)) & Detector::setMasterFileWrite, - py::arg()) - .def("getFileOverWrite", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFileOverWrite, - py::arg() = Positions{}) - .def("setFileOverWrite", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setFileOverWrite, - py::arg(), py::arg() = Positions{}) - .def("getFramesPerFile", - (Result(Detector::*)(sls::Positions) const) & - Detector::getFramesPerFile, - py::arg() = Positions{}) - .def("setFramesPerFile", - (void (Detector::*)(int, sls::Positions)) & - Detector::setFramesPerFile, - py::arg(), py::arg() = Positions{}) - .def("getRxZmqDataStream", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxZmqDataStream, - py::arg() = Positions{}) - .def("setRxZmqDataStream", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setRxZmqDataStream, - py::arg(), py::arg() = Positions{}) - .def("getRxZmqFrequency", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxZmqFrequency, - py::arg() = Positions{}) - .def("setRxZmqFrequency", - (void (Detector::*)(int, sls::Positions)) & - Detector::setRxZmqFrequency, - py::arg(), py::arg() = Positions{}) - .def("getRxZmqTimer", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxZmqTimer, - py::arg() = Positions{}) - .def("setRxZmqTimer", - (void (Detector::*)(int, sls::Positions)) & - Detector::setRxZmqTimer, - py::arg(), py::arg() = Positions{}) - .def("getRxZmqStartingFrame", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxZmqStartingFrame, - py::arg() = Positions{}) - .def("setRxZmqStartingFrame", - (void (Detector::*)(int, sls::Positions)) & - Detector::setRxZmqStartingFrame, - py::arg(), py::arg() = Positions{}) - .def("getRxZmqPort", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxZmqPort, - py::arg() = Positions{}) - .def("setRxZmqPort", - (void (Detector::*)(int, int)) & Detector::setRxZmqPort, py::arg(), - py::arg() = -1) - .def("getRxZmqIP", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxZmqIP, - py::arg() = Positions{}) - .def("setRxZmqIP", - (void (Detector::*)(const sls::IpAddr, sls::Positions)) & - Detector::setRxZmqIP, - py::arg(), py::arg() = Positions{}) - .def("getClientZmqPort", - (Result(Detector::*)(sls::Positions) const) & - Detector::getClientZmqPort, - py::arg() = Positions{}) - .def("setClientZmqPort", - (void (Detector::*)(int, int)) & Detector::setClientZmqPort, - py::arg(), py::arg() = -1) - .def("getClientZmqIp", - (Result(Detector::*)(sls::Positions) const) & - Detector::getClientZmqIp, - py::arg() = Positions{}) - .def("setClientZmqIp", - (void (Detector::*)(const sls::IpAddr, sls::Positions)) & - Detector::setClientZmqIp, - py::arg(), py::arg() = Positions{}) - .def("getClientZmqHwm", - (int (Detector::*)() const) & Detector::getClientZmqHwm) - .def("setClientZmqHwm", - (void (Detector::*)(const int)) & Detector::setClientZmqHwm, - py::arg()) - .def("getRxZmqHwm", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxZmqHwm, - py::arg() = Positions{}) - .def("setRxZmqHwm", - (void (Detector::*)(const int)) & Detector::setRxZmqHwm, py::arg()) - .def("getSubExptime", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSubExptime, - py::arg() = Positions{}) - .def("setSubExptime", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setSubExptime, - py::arg(), py::arg() = Positions{}) - .def("getSubDeadTime", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSubDeadTime, - py::arg() = Positions{}) - .def("setSubDeadTime", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setSubDeadTime, - py::arg(), py::arg() = Positions{}) - .def("getOverFlowMode", - (Result(Detector::*)(sls::Positions) const) & - Detector::getOverFlowMode, - py::arg() = Positions{}) - .def("setOverFlowMode", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setOverFlowMode, - py::arg(), py::arg() = Positions{}) - .def("getRateCorrection", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRateCorrection, - py::arg() = Positions{}) - .def("setDefaultRateCorrection", - (void (Detector::*)(sls::Positions)) & - Detector::setDefaultRateCorrection, - py::arg() = Positions{}) - .def("setRateCorrection", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setRateCorrection, - py::arg(), py::arg() = Positions{}) - .def("getInterruptSubframe", - (Result(Detector::*)(sls::Positions) const) & - Detector::getInterruptSubframe, - py::arg() = Positions{}) - .def("setInterruptSubframe", - (void (Detector::*)(const bool, sls::Positions)) & - Detector::setInterruptSubframe, - py::arg(), py::arg() = Positions{}) - .def("getMeasuredPeriod", - (Result(Detector::*)(sls::Positions) const) & - Detector::getMeasuredPeriod, - py::arg() = Positions{}) - .def("getMeasuredSubFramePeriod", - (Result(Detector::*)(sls::Positions) const) & - Detector::getMeasuredSubFramePeriod, - py::arg() = Positions{}) - .def("getActive", - (Result(Detector::*)(sls::Positions) const) & - Detector::getActive, - py::arg() = Positions{}) - .def("setActive", - (void (Detector::*)(const bool, sls::Positions)) & - Detector::setActive, - py::arg(), py::arg() = Positions{}) - .def("getPartialReset", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPartialReset, - py::arg() = Positions{}) - .def("setPartialReset", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setPartialReset, - py::arg(), py::arg() = Positions{}) - .def("pulsePixel", - (void (Detector::*)(int, defs::xy, sls::Positions)) & - Detector::pulsePixel, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("pulsePixelNMove", - (void (Detector::*)(int, defs::xy, sls::Positions)) & - Detector::pulsePixelNMove, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("pulseChip", - (void (Detector::*)(int, sls::Positions)) & Detector::pulseChip, - py::arg(), py::arg() = Positions{}) - .def("getQuad", - (Result(Detector::*)(sls::Positions) const) & - Detector::getQuad, - py::arg() = Positions{}) - .def("setQuad", (void (Detector::*)(const bool)) & Detector::setQuad, - py::arg()) - .def("getDataStream", - (Result(Detector::*)(const defs::portPosition, - sls::Positions) const) & - Detector::getDataStream, - py::arg(), py::arg() = Positions{}) - .def("setDataStream", - (void (Detector::*)(const defs::portPosition, const bool, - sls::Positions)) & - Detector::setDataStream, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getTop", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTop, - py::arg() = Positions{}) - .def("setTop", - (void (Detector::*)(bool, sls::Positions)) & Detector::setTop, - py::arg(), py::arg() = Positions{}) - .def("getChipVersion", - (Result(Detector::*)(sls::Positions) const) & - Detector::getChipVersion, - py::arg() = Positions{}) - .def("getThresholdTemperature", - (Result(Detector::*)(sls::Positions) const) & - Detector::getThresholdTemperature, - py::arg() = Positions{}) - .def("setThresholdTemperature", - (void (Detector::*)(int, sls::Positions)) & - Detector::setThresholdTemperature, - py::arg(), py::arg() = Positions{}) - .def("getTemperatureControl", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTemperatureControl, - py::arg() = Positions{}) - .def("setTemperatureControl", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setTemperatureControl, - py::arg(), py::arg() = Positions{}) - .def("getTemperatureEvent", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTemperatureEvent, - py::arg() = Positions{}) - .def("resetTemperatureEvent", - (void (Detector::*)(sls::Positions)) & - Detector::resetTemperatureEvent, - py::arg() = Positions{}) - .def("getAutoComparatorDisable", - (Result(Detector::*)(sls::Positions) const) & - Detector::getAutoComparatorDisable, - py::arg() = Positions{}) - .def("setAutoComparatorDisable", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setAutoComparatorDisable, - py::arg(), py::arg() = Positions{}) - .def("getComparatorDisableTime", - (Result(Detector::*)(sls::Positions) const) & - Detector::getComparatorDisableTime, - py::arg() = Positions{}) - .def("setComparatorDisableTime", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setComparatorDisableTime, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfAdditionalStorageCells", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfAdditionalStorageCells, - py::arg() = Positions{}) - .def("setNumberOfAdditionalStorageCells", - (void (Detector::*)(int)) & - Detector::setNumberOfAdditionalStorageCells, - py::arg()) - .def("getStorageCellStart", - (Result(Detector::*)(sls::Positions) const) & - Detector::getStorageCellStart, - py::arg() = Positions{}) - .def("setStorageCellStart", - (void (Detector::*)(int, sls::Positions)) & - Detector::setStorageCellStart, - py::arg(), py::arg() = Positions{}) - .def("getStorageCellDelay", - (Result(Detector::*)(sls::Positions) const) & - Detector::getStorageCellDelay, - py::arg() = Positions{}) - .def("setStorageCellDelay", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setStorageCellDelay, - py::arg(), py::arg() = Positions{}) - .def("getGainModeList", - (std::vector(Detector::*)() const) & - Detector::getGainModeList) - .def("getGainMode", - (Result(Detector::*)(sls::Positions) const) & - Detector::getGainMode, - py::arg() = Positions{}) - .def("setGainMode", - (void (Detector::*)(const defs::gainMode, sls::Positions)) & - Detector::setGainMode, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfFilterCells", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfFilterCells, - py::arg() = Positions{}) - .def("setNumberOfFilterCells", - (void (Detector::*)(int, sls::Positions)) & - Detector::setNumberOfFilterCells, - py::arg(), py::arg() = Positions{}) - .def("getROI", - (Result(Detector::*)(sls::Positions) const) & - Detector::getROI, - py::arg() = Positions{}) - .def("setROI", (void (Detector::*)(defs::ROI, int)) & Detector::setROI, - py::arg(), py::arg()) - .def("clearROI", - (void (Detector::*)(sls::Positions)) & Detector::clearROI, - py::arg() = Positions{}) - .def("getExptimeLeft", - (Result(Detector::*)(sls::Positions) const) & - Detector::getExptimeLeft, - py::arg() = Positions{}) - .def("getNumberOfBursts", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfBursts, - py::arg() = Positions{}) - .def("setNumberOfBursts", - (void (Detector::*)(int64_t)) & Detector::setNumberOfBursts, - py::arg()) - .def("getBurstPeriod", - (Result(Detector::*)(sls::Positions) const) & - Detector::getBurstPeriod, - py::arg() = Positions{}) - .def("setBurstPeriod", - (void (Detector::*)(sls::ns, sls::Positions)) & - Detector::setBurstPeriod, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfBurstsLeft", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfBurstsLeft, - py::arg() = Positions{}) - .def("getInjectChannel", - (Result>(Detector::*)(sls::Positions)) & - Detector::getInjectChannel, - py::arg() = Positions{}) - .def("setInjectChannel", - (void (Detector::*)(const int, const int, sls::Positions)) & - Detector::setInjectChannel, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getVetoPhoton", - (void (Detector::*)(const int, const std::string &, - sls::Positions)) & - Detector::getVetoPhoton, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("setVetoPhoton", - (void (Detector::*)(const int, const int, const int, - const std::string &, sls::Positions)) & - Detector::setVetoPhoton, - py::arg(), py::arg(), py::arg(), py::arg(), - py::arg() = Positions{}) - .def("setVetoReference", - (void (Detector::*)(const int, const int, sls::Positions)) & - Detector::setVetoReference, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("setVetoFile", - (void (Detector::*)(const int, const std::string &, - sls::Positions)) & - Detector::setVetoFile, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getBurstMode", - (Result(Detector::*)(sls::Positions)) & - Detector::getBurstMode, - py::arg() = Positions{}) - .def("setBurstMode", - (void (Detector::*)(defs::burstMode, sls::Positions)) & - Detector::setBurstMode, - py::arg(), py::arg() = Positions{}) - .def("getCDSGain", - (Result(Detector::*)(sls::Positions) const) & - Detector::getCDSGain, - py::arg() = Positions{}) - .def("setCDSGain", - (void (Detector::*)(bool, sls::Positions)) & Detector::setCDSGain, - py::arg(), py::arg() = Positions{}) - .def("getTimingSource", - (Result(Detector::*)(sls::Positions) - const) & - Detector::getTimingSource, - py::arg() = Positions{}) - .def("setTimingSource", - (void (Detector::*)(defs::timingSourceType, sls::Positions)) & - Detector::setTimingSource, - py::arg(), py::arg() = Positions{}) - .def("getVeto", - (Result(Detector::*)(sls::Positions) const) & - Detector::getVeto, - py::arg() = Positions{}) - .def("setVeto", - (void (Detector::*)(const bool, sls::Positions)) & - Detector::setVeto, - py::arg(), py::arg() = Positions{}) - .def("getVetoStream", - (Result(Detector::*)(sls::Positions) - const) & - Detector::getVetoStream, - py::arg() = Positions{}) - .def("setVetoStream", - (void (Detector::*)(const defs::streamingInterface, - sls::Positions)) & - Detector::setVetoStream, - py::arg(), py::arg() = Positions{}) - .def("getVetoAlgorithm", - (Result(Detector::*)( - const defs::streamingInterface, sls::Positions) const) & - Detector::getVetoAlgorithm, - py::arg(), py::arg() = Positions{}) - .def("setVetoAlgorithm", - (void (Detector::*)(const defs::vetoAlgorithm, - const defs::streamingInterface, - sls::Positions)) & - Detector::setVetoAlgorithm, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getADCConfiguration", - (Result(Detector::*)(const int, const int, sls::Positions) - const) & - Detector::getADCConfiguration, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("setADCConfiguration", - (void (Detector::*)(const int, const int, const int, - sls::Positions)) & - Detector::setADCConfiguration, - py::arg(), py::arg(), py::arg(), py::arg() = Positions{}) - .def("getBadChannels", - (void (Detector::*)(const std::string &, sls::Positions) const) & - Detector::getBadChannels, - py::arg(), py::arg() = Positions{}) - .def("setBadChannels", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::setBadChannels, - py::arg(), py::arg() = Positions{}) - .def("getCounterMask", - (Result(Detector::*)(sls::Positions) const) & - Detector::getCounterMask, - py::arg() = Positions{}) - .def("setCounterMask", - (void (Detector::*)(uint32_t, sls::Positions)) & - Detector::setCounterMask, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfGates", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfGates, - py::arg() = Positions{}) - .def("setNumberOfGates", - (void (Detector::*)(int, sls::Positions)) & - Detector::setNumberOfGates, - py::arg(), py::arg() = Positions{}) - .def("getExptime", - (Result(Detector::*)(int, sls::Positions) const) & - Detector::getExptime, - py::arg(), py::arg() = Positions{}) - .def("setExptime", - (void (Detector::*)(int, sls::ns, sls::Positions)) & - Detector::setExptime, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getExptimeForAllGates", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getExptimeForAllGates, - py::arg() = Positions{}) - .def("getGateDelay", - (Result(Detector::*)(int, sls::Positions) const) & - Detector::getGateDelay, - py::arg(), py::arg() = Positions{}) - .def("setGateDelay", - (void (Detector::*)(int, sls::ns, sls::Positions)) & - Detector::setGateDelay, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getGateDelayForAllGates", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getGateDelayForAllGates, - py::arg() = Positions{}) - .def("getChipStatusRegister", - (Result(Detector::*)(sls::Positions) const) & - Detector::getChipStatusRegister, - py::arg() = Positions{}) - .def("setGainCaps", - (void (Detector::*)(int, sls::Positions)) & Detector::setGainCaps, - py::arg(), py::arg() = Positions{}) - .def("getGainCaps", - (Result(Detector::*)(sls::Positions)) & Detector::getGainCaps, - py::arg() = Positions{}) - .def("getPolarity", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPolarity, - py::arg() = Positions{}) - .def("setPolarity", - (void (Detector::*)(defs::polarity, sls::Positions)) & - Detector::setPolarity, - py::arg(), py::arg() = Positions{}) - .def("getInterpolation", - (Result(Detector::*)(sls::Positions) const) & - Detector::getInterpolation, - py::arg() = Positions{}) - .def("setInterpolation", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setInterpolation, - py::arg(), py::arg() = Positions{}) - .def("getPumpProbe", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPumpProbe, - py::arg() = Positions{}) - .def("setPumpProbe", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setPumpProbe, - py::arg(), py::arg() = Positions{}) - .def("getAnalogPulsing", - (Result(Detector::*)(sls::Positions) const) & - Detector::getAnalogPulsing, - py::arg() = Positions{}) - .def("setAnalogPulsing", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setAnalogPulsing, - py::arg(), py::arg() = Positions{}) - .def("getDigitalPulsing", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDigitalPulsing, - py::arg() = Positions{}) - .def("setDigitalPulsing", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setDigitalPulsing, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfAnalogSamples", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfAnalogSamples, - py::arg() = Positions{}) - .def("setNumberOfAnalogSamples", - (void (Detector::*)(int, sls::Positions)) & - Detector::setNumberOfAnalogSamples, - py::arg(), py::arg() = Positions{}) - .def("getADCClock", - (Result(Detector::*)(sls::Positions) const) & - Detector::getADCClock, - py::arg() = Positions{}) - .def("setADCClock", - (void (Detector::*)(int, sls::Positions)) & Detector::setADCClock, - py::arg(), py::arg() = Positions{}) - .def("getRUNClock", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRUNClock, - py::arg() = Positions{}) - .def("setRUNClock", - (void (Detector::*)(int, sls::Positions)) & Detector::setRUNClock, - py::arg(), py::arg() = Positions{}) - .def("getSYNCClock", - (Result(Detector::*)(sls::Positions) const) & - Detector::getSYNCClock, - py::arg() = Positions{}) - .def("getADCPipeline", - (Result(Detector::*)(sls::Positions) const) & - Detector::getADCPipeline, - py::arg() = Positions{}) - .def("setADCPipeline", - (void (Detector::*)(int, sls::Positions)) & - Detector::setADCPipeline, - py::arg(), py::arg() = Positions{}) - .def("getVoltage", - (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & - Detector::getVoltage, - py::arg(), py::arg() = Positions{}) - .def("setVoltage", - (void (Detector::*)(defs::dacIndex, int, sls::Positions)) & - Detector::setVoltage, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getADCEnableMask", - (Result(Detector::*)(sls::Positions) const) & - Detector::getADCEnableMask, - py::arg() = Positions{}) - .def("setADCEnableMask", - (void (Detector::*)(uint32_t, sls::Positions)) & - Detector::setADCEnableMask, - py::arg(), py::arg() = Positions{}) - .def("getTenGigaADCEnableMask", - (Result(Detector::*)(sls::Positions) const) & - Detector::getTenGigaADCEnableMask, - py::arg() = Positions{}) - .def("setTenGigaADCEnableMask", - (void (Detector::*)(uint32_t, sls::Positions)) & - Detector::setTenGigaADCEnableMask, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfDigitalSamples", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfDigitalSamples, - py::arg() = Positions{}) - .def("setNumberOfDigitalSamples", - (void (Detector::*)(int, sls::Positions)) & - Detector::setNumberOfDigitalSamples, - py::arg(), py::arg() = Positions{}) - .def("getReadoutMode", - (Result(Detector::*)(sls::Positions) const) & - Detector::getReadoutMode, - py::arg() = Positions{}) - .def("setReadoutMode", - (void (Detector::*)(defs::readoutMode, sls::Positions)) & - Detector::setReadoutMode, - py::arg(), py::arg() = Positions{}) - .def("getDBITClock", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDBITClock, - py::arg() = Positions{}) - .def("setDBITClock", - (void (Detector::*)(int, sls::Positions)) & Detector::setDBITClock, - py::arg(), py::arg() = Positions{}) - .def("getMeasuredVoltage", - (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & - Detector::getMeasuredVoltage, - py::arg(), py::arg() = Positions{}) - .def("getMeasuredCurrent", - (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & - Detector::getMeasuredCurrent, - py::arg(), py::arg() = Positions{}) - .def("getSlowADC", - (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & - Detector::getSlowADC, - py::arg(), py::arg() = Positions{}) - .def("getExternalSamplingSource", - (Result(Detector::*)(sls::Positions) const) & - Detector::getExternalSamplingSource, - py::arg() = Positions{}) - .def("setExternalSamplingSource", - (void (Detector::*)(int, sls::Positions)) & - Detector::setExternalSamplingSource, - py::arg(), py::arg() = Positions{}) - .def("getExternalSampling", - (Result(Detector::*)(sls::Positions) const) & - Detector::getExternalSampling, - py::arg() = Positions{}) - .def("setExternalSampling", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setExternalSampling, - py::arg(), py::arg() = Positions{}) - .def("getRxDbitList", - (Result>(Detector::*)(sls::Positions) const) & - Detector::getRxDbitList, - py::arg() = Positions{}) - .def("setRxDbitList", - (void (Detector::*)(const std::vector &, sls::Positions)) & - Detector::setRxDbitList, - py::arg(), py::arg() = Positions{}) - .def("getRxDbitOffset", - (Result(Detector::*)(sls::Positions) const) & - Detector::getRxDbitOffset, - py::arg() = Positions{}) - .def("setRxDbitOffset", - (void (Detector::*)(int, sls::Positions)) & - Detector::setRxDbitOffset, - py::arg(), py::arg() = Positions{}) - .def("setDigitalIODelay", - (void (Detector::*)(uint64_t, int, sls::Positions)) & - Detector::setDigitalIODelay, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getLEDEnable", - (Result(Detector::*)(sls::Positions) const) & - Detector::getLEDEnable, - py::arg() = Positions{}) - .def("setLEDEnable", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setLEDEnable, - py::arg(), py::arg() = Positions{}) - .def("setDacNames", - (void (Detector::*)(const std::vector)) & - Detector::setDacNames, - py::arg()) - .def("getDacNames", (std::vector(Detector::*)() const) & - Detector::getDacNames) - .def("getDacIndex", - (defs::dacIndex(Detector::*)(const std::string &)) & - Detector::getDacIndex, - py::arg()) - .def("getDacName", - (std::string(Detector::*)(defs::dacIndex)) & Detector::getDacName, - py::arg()) - .def("setPattern", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::setPattern, - py::arg(), py::arg() = Positions{}) - .def("setPattern", - (void (Detector::*)(const sls::Pattern &, sls::Positions)) & - Detector::setPattern, - py::arg(), py::arg() = Positions{}) - .def("savePattern", - (void (Detector::*)(const std::string &)) & Detector::savePattern, - py::arg()) - .def("loadDefaultPattern", - (void (Detector::*)(sls::Positions)) & - Detector::loadDefaultPattern, - py::arg() = Positions{}) - .def("getPatternIOControl", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPatternIOControl, - py::arg() = Positions{}) - .def("setPatternIOControl", - (void (Detector::*)(uint64_t, sls::Positions)) & - Detector::setPatternIOControl, - py::arg(), py::arg() = Positions{}) - .def("getPatternWord", - (Result(Detector::*)(int, sls::Positions)) & - Detector::getPatternWord, - py::arg(), py::arg() = Positions{}) - .def("setPatternWord", - (void (Detector::*)(int, uint64_t, sls::Positions)) & - Detector::setPatternWord, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getPatternLoopAddresses", - (Result>(Detector::*)(int, sls::Positions) - const) & - Detector::getPatternLoopAddresses, - py::arg(), py::arg() = Positions{}) - .def("setPatternLoopAddresses", - (void (Detector::*)(int, int, int, sls::Positions)) & - Detector::setPatternLoopAddresses, - py::arg(), py::arg(), py::arg(), py::arg() = Positions{}) - .def("getPatternLoopCycles", - (Result(Detector::*)(int, sls::Positions) const) & - Detector::getPatternLoopCycles, - py::arg(), py::arg() = Positions{}) - .def("setPatternLoopCycles", - (void (Detector::*)(int, int, sls::Positions)) & - Detector::setPatternLoopCycles, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getPatternWaitAddr", - (Result(Detector::*)(int, sls::Positions) const) & - Detector::getPatternWaitAddr, - py::arg(), py::arg() = Positions{}) - .def("setPatternWaitAddr", - (void (Detector::*)(int, int, sls::Positions)) & - Detector::setPatternWaitAddr, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getPatternWaitTime", - (Result(Detector::*)(int, sls::Positions) const) & - Detector::getPatternWaitTime, - py::arg(), py::arg() = Positions{}) - .def("setPatternWaitTime", - (void (Detector::*)(int, uint64_t, sls::Positions)) & - Detector::setPatternWaitTime, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getPatternMask", - (Result(Detector::*)(sls::Positions)) & - Detector::getPatternMask, - py::arg() = Positions{}) - .def("setPatternMask", - (void (Detector::*)(uint64_t, sls::Positions)) & - Detector::setPatternMask, - py::arg(), py::arg() = Positions{}) - .def("getPatternBitMask", - (Result(Detector::*)(sls::Positions) const) & - Detector::getPatternBitMask, - py::arg() = Positions{}) - .def("setPatternBitMask", - (void (Detector::*)(uint64_t, sls::Positions)) & - Detector::setPatternBitMask, - py::arg(), py::arg() = Positions{}) - .def("startPattern", - (void (Detector::*)(sls::Positions)) & Detector::startPattern, - py::arg() = Positions{}) - .def("getAdditionalJsonHeader", - (Result>(Detector::*)( - sls::Positions) const) & - Detector::getAdditionalJsonHeader, - py::arg() = Positions{}) - .def("setAdditionalJsonHeader", - (void (Detector::*)(const std::map &, - sls::Positions)) & - Detector::setAdditionalJsonHeader, - py::arg(), py::arg() = Positions{}) - .def("getAdditionalJsonParameter", - (Result(Detector::*)(const std::string &, - sls::Positions) const) & - Detector::getAdditionalJsonParameter, - py::arg(), py::arg() = Positions{}) - .def("setAdditionalJsonParameter", - (void (Detector::*)(const std::string &, const std::string &, - sls::Positions)) & - Detector::setAdditionalJsonParameter, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("programFPGA", - (void (Detector::*)(const std::string &, const bool, - sls::Positions)) & - Detector::programFPGA, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("resetFPGA", - (void (Detector::*)(sls::Positions)) & Detector::resetFPGA, - py::arg() = Positions{}) - .def("updateDetectorServer", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::updateDetectorServer, - py::arg(), py::arg() = Positions{}) - .def("updateKernel", - (void (Detector::*)(const std::string &, sls::Positions)) & - Detector::updateKernel, - py::arg(), py::arg() = Positions{}) - .def("rebootController", - (void (Detector::*)(sls::Positions)) & Detector::rebootController, - py::arg() = Positions{}) - .def("updateFirmwareAndServer", - (void (Detector::*)(const std::string &, const std::string &, - sls::Positions)) & - Detector::updateFirmwareAndServer, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getUpdateMode", - (Result(Detector::*)(sls::Positions) const) & - Detector::getUpdateMode, - py::arg() = Positions{}) - .def("setUpdateMode", - (void (Detector::*)(const bool, sls::Positions)) & - Detector::setUpdateMode, - py::arg(), py::arg() = Positions{}) - .def("readRegister", - (Result(Detector::*)(uint32_t, sls::Positions) const) & - Detector::readRegister, - py::arg(), py::arg() = Positions{}) - .def("writeRegister", - (void (Detector::*)(uint32_t, uint32_t, sls::Positions)) & - Detector::writeRegister, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("setBit", - (void (Detector::*)(uint32_t, int, sls::Positions)) & - Detector::setBit, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("clearBit", - (void (Detector::*)(uint32_t, int, sls::Positions)) & - Detector::clearBit, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getBit", - (Result(Detector::*)(uint32_t, int, sls::Positions)) & - Detector::getBit, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("executeFirmwareTest", - (void (Detector::*)(sls::Positions)) & - Detector::executeFirmwareTest, - py::arg() = Positions{}) - .def("executeBusTest", - (void (Detector::*)(sls::Positions)) & Detector::executeBusTest, - py::arg() = Positions{}) - .def("writeAdcRegister", - (void (Detector::*)(uint32_t, uint32_t, sls::Positions)) & - Detector::writeAdcRegister, - py::arg(), py::arg(), py::arg() = Positions{}) - .def("getInitialChecks", - (bool (Detector::*)() const) & Detector::getInitialChecks) - .def("setInitialChecks", - (void (Detector::*)(const bool)) & Detector::setInitialChecks, - py::arg()) - .def("getADCInvert", - (Result(Detector::*)(sls::Positions) const) & - Detector::getADCInvert, - py::arg() = Positions{}) - .def("setADCInvert", - (void (Detector::*)(uint32_t, sls::Positions)) & - Detector::setADCInvert, - py::arg(), py::arg() = Positions{}) - .def("getControlPort", - (Result(Detector::*)(sls::Positions) const) & - Detector::getControlPort, - py::arg() = Positions{}) - .def("setControlPort", - (void (Detector::*)(int, sls::Positions)) & - Detector::setControlPort, - py::arg(), py::arg() = Positions{}) - .def("getStopPort", - (Result(Detector::*)(sls::Positions) const) & - Detector::getStopPort, - py::arg() = Positions{}) - .def("setStopPort", - (void (Detector::*)(int, sls::Positions)) & Detector::setStopPort, - py::arg(), py::arg() = Positions{}) - .def("getDetectorLock", - (Result(Detector::*)(sls::Positions) const) & - Detector::getDetectorLock, - py::arg() = Positions{}) - .def("setDetectorLock", - (void (Detector::*)(bool, sls::Positions)) & - Detector::setDetectorLock, - py::arg(), py::arg() = Positions{}) - .def("getLastClientIP", - (Result(Detector::*)(sls::Positions) const) & - Detector::getLastClientIP, - py::arg() = Positions{}) - .def("executeCommand", - (Result(Detector::*)(const std::string &, - sls::Positions)) & - Detector::executeCommand, - py::arg(), py::arg() = Positions{}) - .def("getNumberOfFramesFromStart", - (Result(Detector::*)(sls::Positions) const) & - Detector::getNumberOfFramesFromStart, - py::arg() = Positions{}) - .def("getActualTime", - (Result(Detector::*)(sls::Positions) const) & - Detector::getActualTime, - py::arg() = Positions{}) - .def("getMeasurementTime", - (Result(Detector::*)(sls::Positions) const) & - Detector::getMeasurementTime, - py::arg() = Positions{}) - .def("getUserDetails", - (std::string(Detector::*)() const) & Detector::getUserDetails); + CppDetectorApi.def("freeSharedMemory", + (void (Detector::*)()) & Detector::freeSharedMemory); + CppDetectorApi.def("loadConfig", + (void (Detector::*)(const std::string &)) & + Detector::loadConfig, + py::arg()); + CppDetectorApi.def("loadParameters", + (void (Detector::*)(const std::string &)) & + Detector::loadParameters, + py::arg()); + CppDetectorApi.def("loadParameters", + (void (Detector::*)(const std::vector &)) & + Detector::loadParameters, + py::arg()); + CppDetectorApi.def( + "getHostname", + (Result(Detector::*)(sls::Positions) const) & + Detector::getHostname, + py::arg() = Positions{}); + CppDetectorApi.def("setHostname", + (void (Detector::*)(const std::vector &)) & + Detector::setHostname, + py::arg()); + CppDetectorApi.def("setVirtualDetectorServers", + (void (Detector::*)(int, int)) & + Detector::setVirtualDetectorServers, + py::arg(), py::arg()); + CppDetectorApi.def("getShmId", + (int (Detector::*)() const) & Detector::getShmId); + CppDetectorApi.def("getPackageVersion", (std::string(Detector::*)() const) & + Detector::getPackageVersion); + CppDetectorApi.def("getClientVersion", (int64_t(Detector::*)() const) & + Detector::getClientVersion); + CppDetectorApi.def("getFirmwareVersion", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFirmwareVersion, + py::arg() = Positions{}); + CppDetectorApi.def("getDetectorServerVersion", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDetectorServerVersion, + py::arg() = Positions{}); + CppDetectorApi.def( + "getKernelVersion", + (Result(Detector::*)(sls::Positions) const) & + Detector::getKernelVersion, + py::arg() = Positions{}); + CppDetectorApi.def("getSerialNumber", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSerialNumber, + py::arg() = Positions{}); + CppDetectorApi.def("getModuleId", + (Result(Detector::*)(sls::Positions) const) & + Detector::getModuleId, + py::arg() = Positions{}); + CppDetectorApi.def("getReceiverVersion", + (Result(Detector::*)(sls::Positions) const) & + Detector::getReceiverVersion, + py::arg() = Positions{}); + CppDetectorApi.def( + "getDetectorType", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDetectorType, + py::arg() = Positions{}); + CppDetectorApi.def("size", (int (Detector::*)() const) & Detector::size); + CppDetectorApi.def("empty", (bool (Detector::*)() const) & Detector::empty); + CppDetectorApi.def("getModuleGeometry", (defs::xy(Detector::*)() const) & + Detector::getModuleGeometry); + CppDetectorApi.def("getModuleSize", + (Result(Detector::*)(sls::Positions) const) & + Detector::getModuleSize, + py::arg() = Positions{}); + CppDetectorApi.def("getDetectorSize", (defs::xy(Detector::*)() const) & + Detector::getDetectorSize); + CppDetectorApi.def("setDetectorSize", + (void (Detector::*)(const defs::xy)) & + Detector::setDetectorSize, + py::arg()); + CppDetectorApi.def("getSettingsList", (std::vector( + Detector::*)() const) & + Detector::getSettingsList); + CppDetectorApi.def( + "getSettings", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSettings, + py::arg() = Positions{}); + CppDetectorApi.def( + "setSettings", + (void (Detector::*)(defs::detectorSettings, sls::Positions)) & + Detector::setSettings, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getThresholdEnergy", + (Result(Detector::*)(sls::Positions) const) & + Detector::getThresholdEnergy, + py::arg() = Positions{}); + CppDetectorApi.def( + "getAllThresholdEnergy", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getAllThresholdEnergy, + py::arg() = Positions{}); + CppDetectorApi.def("setThresholdEnergy", + (void (Detector::*)(int, defs::detectorSettings, bool, + sls::Positions)) & + Detector::setThresholdEnergy, + py::arg(), py::arg() = defs::STANDARD, py::arg() = true, + py::arg() = Positions{}); + CppDetectorApi.def( + "setThresholdEnergy", + (void (Detector::*)(std::array, defs::detectorSettings, bool, + sls::Positions)) & + Detector::setThresholdEnergy, + py::arg(), py::arg() = defs::STANDARD, py::arg() = true, + py::arg() = Positions{}); + CppDetectorApi.def( + "getSettingsPath", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSettingsPath, + py::arg() = Positions{}); + CppDetectorApi.def( + "setSettingsPath", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::setSettingsPath, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "loadTrimbits", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::loadTrimbits, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "saveTrimbits", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::saveTrimbits, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getAllTrimbits", + (Result(Detector::*)(sls::Positions) const) & + Detector::getAllTrimbits, + py::arg() = Positions{}); + CppDetectorApi.def("setAllTrimbits", + (void (Detector::*)(int, sls::Positions)) & + Detector::setAllTrimbits, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getTrimEnergies", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getTrimEnergies, + py::arg() = Positions{}); + CppDetectorApi.def("setTrimEnergies", + (void (Detector::*)(std::vector, sls::Positions)) & + Detector::setTrimEnergies, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getGapPixelsinCallback", + (bool (Detector::*)() const) & + Detector::getGapPixelsinCallback); + CppDetectorApi.def("setGapPixelsinCallback", + (void (Detector::*)(const bool)) & + Detector::setGapPixelsinCallback, + py::arg()); + CppDetectorApi.def("getFlipRows", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFlipRows, + py::arg() = Positions{}); + CppDetectorApi.def("setFlipRows", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setFlipRows, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getMaster", + (Result(Detector::*)(sls::Positions) const) & + Detector::getMaster, + py::arg() = Positions{}); + CppDetectorApi.def("setMaster", + (void (Detector::*)(bool, int)) & Detector::setMaster, + py::arg(), py::arg()); + CppDetectorApi.def("getSynchronization", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSynchronization, + py::arg() = Positions{}); + CppDetectorApi.def( + "setSynchronization", + (void (Detector::*)(bool)) & Detector::setSynchronization, py::arg()); + CppDetectorApi.def("isVirtualDetectorServer", + (Result(Detector::*)(sls::Positions) const) & + Detector::isVirtualDetectorServer, + py::arg() = Positions{}); + CppDetectorApi.def( + "registerAcquisitionFinishedCallback", + (void (Detector::*)(void (*)(double, int, void *), void *)) & + Detector::registerAcquisitionFinishedCallback, + py::arg(), py::arg()); + CppDetectorApi.def("registerDataCallback", + (void (Detector::*)(void (*)(sls::detectorData *, + uint64_t, uint32_t, void *), + void *)) & + Detector::registerDataCallback, + py::arg(), py::arg()); + CppDetectorApi.def("getNumberOfFrames", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfFrames, + py::arg() = Positions{}); + CppDetectorApi.def( + "setNumberOfFrames", + (void (Detector::*)(int64_t)) & Detector::setNumberOfFrames, py::arg()); + CppDetectorApi.def("getNumberOfTriggers", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfTriggers, + py::arg() = Positions{}); + CppDetectorApi.def("setNumberOfTriggers", + (void (Detector::*)(int64_t)) & + Detector::setNumberOfTriggers, + py::arg()); + CppDetectorApi.def("getExptime", + (Result(Detector::*)(sls::Positions) const) & + Detector::getExptime, + py::arg() = Positions{}); + CppDetectorApi.def("setExptime", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setExptime, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPeriod", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPeriod, + py::arg() = Positions{}); + CppDetectorApi.def("setPeriod", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setPeriod, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDelayAfterTrigger", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDelayAfterTrigger, + py::arg() = Positions{}); + CppDetectorApi.def("setDelayAfterTrigger", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setDelayAfterTrigger, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfFramesLeft", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfFramesLeft, + py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfTriggersLeft", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfTriggersLeft, + py::arg() = Positions{}); + CppDetectorApi.def("getPeriodLeft", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPeriodLeft, + py::arg() = Positions{}); + CppDetectorApi.def("getDelayAfterTriggerLeft", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDelayAfterTriggerLeft, + py::arg() = Positions{}); + CppDetectorApi.def("getDynamicRange", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDynamicRange, + py::arg() = Positions{}); + CppDetectorApi.def("setDynamicRange", + (void (Detector::*)(int)) & Detector::setDynamicRange, + py::arg()); + CppDetectorApi.def("getDynamicRangeList", + (std::vector(Detector::*)() const) & + Detector::getDynamicRangeList); + CppDetectorApi.def( + "getTimingMode", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTimingMode, + py::arg() = Positions{}); + CppDetectorApi.def("setTimingMode", + (void (Detector::*)(defs::timingMode, sls::Positions)) & + Detector::setTimingMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTimingModeList", + (std::vector(Detector::*)() const) & + Detector::getTimingModeList); + CppDetectorApi.def( + "getReadoutSpeed", + (Result(Detector::*)(sls::Positions) const) & + Detector::getReadoutSpeed, + py::arg() = Positions{}); + CppDetectorApi.def("setReadoutSpeed", + (void (Detector::*)(defs::speedLevel, sls::Positions)) & + Detector::setReadoutSpeed, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getReadoutSpeedList", + (std::vector(Detector::*)() const) & + Detector::getReadoutSpeedList); + CppDetectorApi.def("getADCPhase", + (Result(Detector::*)(sls::Positions) const) & + Detector::getADCPhase, + py::arg() = Positions{}); + CppDetectorApi.def("setADCPhase", + (void (Detector::*)(int, sls::Positions)) & + Detector::setADCPhase, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getMaxADCPhaseShift", + (Result(Detector::*)(sls::Positions) const) & + Detector::getMaxADCPhaseShift, + py::arg() = Positions{}); + CppDetectorApi.def("getADCPhaseInDegrees", + (Result(Detector::*)(sls::Positions) const) & + Detector::getADCPhaseInDegrees, + py::arg() = Positions{}); + CppDetectorApi.def("setADCPhaseInDegrees", + (void (Detector::*)(int, sls::Positions)) & + Detector::setADCPhaseInDegrees, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDBITPhase", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDBITPhase, + py::arg() = Positions{}); + CppDetectorApi.def("setDBITPhase", + (void (Detector::*)(int, sls::Positions)) & + Detector::setDBITPhase, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getMaxDBITPhaseShift", + (Result(Detector::*)(sls::Positions) const) & + Detector::getMaxDBITPhaseShift, + py::arg() = Positions{}); + CppDetectorApi.def("getDBITPhaseInDegrees", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDBITPhaseInDegrees, + py::arg() = Positions{}); + CppDetectorApi.def("setDBITPhaseInDegrees", + (void (Detector::*)(int, sls::Positions)) & + Detector::setDBITPhaseInDegrees, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getClockFrequency", + (Result(Detector::*)(int, sls::Positions)) & + Detector::getClockFrequency, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getClockPhase", + (Result(Detector::*)(int, sls::Positions)) & + Detector::getClockPhase, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setClockPhase", + (void (Detector::*)(int, int, sls::Positions)) & + Detector::setClockPhase, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getMaxClockPhaseShift", + (Result(Detector::*)(int, sls::Positions)) & + Detector::getMaxClockPhaseShift, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getClockPhaseinDegrees", + (Result(Detector::*)(int, sls::Positions)) & + Detector::getClockPhaseinDegrees, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setClockPhaseinDegrees", + (void (Detector::*)(int, int, sls::Positions)) & + Detector::setClockPhaseinDegrees, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getClockDivider", + (Result(Detector::*)(int, sls::Positions)) & + Detector::getClockDivider, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setClockDivider", + (void (Detector::*)(int, int, sls::Positions)) & + Detector::setClockDivider, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getHighVoltage", + (Result(Detector::*)(sls::Positions) const) & + Detector::getHighVoltage, + py::arg() = Positions{}); + CppDetectorApi.def("setHighVoltage", + (void (Detector::*)(int, sls::Positions)) & + Detector::setHighVoltage, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPowerChip", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPowerChip, + py::arg() = Positions{}); + CppDetectorApi.def("setPowerChip", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setPowerChip, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getImageTestMode", + (Result(Detector::*)(sls::Positions)) & + Detector::getImageTestMode, + py::arg() = Positions{}); + CppDetectorApi.def("setImageTestMode", + (void (Detector::*)(const int, sls::Positions)) & + Detector::setImageTestMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTemperatureList", + (std::vector(Detector::*)() const) & + Detector::getTemperatureList); + CppDetectorApi.def( + "getTemperature", + (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & + Detector::getTemperature, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDacList", + (std::vector(Detector::*)() const) & + Detector::getDacList); + CppDetectorApi.def( + "getDefaultDac", + (Result(Detector::*)(defs::dacIndex, sls::Positions)) & + Detector::getDefaultDac, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setDefaultDac", + (void (Detector::*)(defs::dacIndex, int, sls::Positions)) & + Detector::setDefaultDac, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getDefaultDac", + (Result(Detector::*)(defs::dacIndex, defs::detectorSettings, + sls::Positions)) & + Detector::getDefaultDac, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setDefaultDac", + (void (Detector::*)(defs::dacIndex, int, defs::detectorSettings, + sls::Positions)) & + Detector::setDefaultDac, + py::arg(), py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("resetToDefaultDacs", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::resetToDefaultDacs, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getDAC", + (Result(Detector::*)(defs::dacIndex, bool, sls::Positions) const) & + Detector::getDAC, + py::arg(), py::arg() = false, py::arg() = Positions{}); + CppDetectorApi.def( + "setDAC", + (void (Detector::*)(defs::dacIndex, int, bool, sls::Positions)) & + Detector::setDAC, + py::arg(), py::arg(), py::arg() = false, py::arg() = Positions{}); + CppDetectorApi.def( + "getOnChipDAC", + (Result(Detector::*)(defs::dacIndex, int, sls::Positions) const) & + Detector::getOnChipDAC, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setOnChipDAC", + (void (Detector::*)(defs::dacIndex, int, int, sls::Positions)) & + Detector::setOnChipDAC, + py::arg(), py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getExternalSignalFlags", + (Result(Detector::*)( + int, sls::Positions) const) & + Detector::getExternalSignalFlags, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setExternalSignalFlags", + (void (Detector::*)(int, defs::externalSignalFlag, sls::Positions)) & + Detector::setExternalSignalFlags, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getParallelMode", + (Result(Detector::*)(sls::Positions) const) & + Detector::getParallelMode, + py::arg() = Positions{}); + CppDetectorApi.def("setParallelMode", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setParallelMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getFilterResistor", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFilterResistor, + py::arg() = Positions{}); + CppDetectorApi.def("setFilterResistor", + (void (Detector::*)(int, sls::Positions)) & + Detector::setFilterResistor, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getCurrentSource", + (Result(Detector::*)( + sls::Positions) const) & + Detector::getCurrentSource, + py::arg() = Positions{}); + CppDetectorApi.def( + "setCurrentSource", + (void (Detector::*)(defs::currentSrcParameters, sls::Positions)) & + Detector::setCurrentSource, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDBITPipeline", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDBITPipeline, + py::arg() = Positions{}); + CppDetectorApi.def("setDBITPipeline", + (void (Detector::*)(int, sls::Positions)) & + Detector::setDBITPipeline, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getReadNRows", + (Result(Detector::*)(sls::Positions) const) & + Detector::getReadNRows, + py::arg() = Positions{}); + CppDetectorApi.def("setReadNRows", + (void (Detector::*)(const int, sls::Positions)) & + Detector::setReadNRows, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("acquire", (void (Detector::*)()) & Detector::acquire); + CppDetectorApi.def("clearAcquiringFlag", + (void (Detector::*)()) & Detector::clearAcquiringFlag); + CppDetectorApi.def("startReceiver", + (void (Detector::*)()) & Detector::startReceiver); + CppDetectorApi.def("stopReceiver", + (void (Detector::*)()) & Detector::stopReceiver); + CppDetectorApi.def("startDetector", + (void (Detector::*)(sls::Positions)) & + Detector::startDetector, + py::arg() = Positions{}); + CppDetectorApi.def("startDetectorReadout", + (void (Detector::*)()) & Detector::startDetectorReadout); + CppDetectorApi.def("stopDetector", + (void (Detector::*)(sls::Positions)) & + Detector::stopDetector, + py::arg() = Positions{}); + CppDetectorApi.def( + "getDetectorStatus", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDetectorStatus, + py::arg() = Positions{}); + CppDetectorApi.def( + "getReceiverStatus", + (Result(Detector::*)(sls::Positions) const) & + Detector::getReceiverStatus, + py::arg() = Positions{}); + CppDetectorApi.def( + "getFramesCaught", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getFramesCaught, + py::arg() = Positions{}); + CppDetectorApi.def( + "getNumMissingPackets", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getNumMissingPackets, + py::arg() = Positions{}); + CppDetectorApi.def( + "getRxCurrentFrameIndex", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getRxCurrentFrameIndex, + py::arg() = Positions{}); + CppDetectorApi.def("getNextFrameNumber", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNextFrameNumber, + py::arg() = Positions{}); + CppDetectorApi.def("setNextFrameNumber", + (void (Detector::*)(uint64_t, sls::Positions)) & + Detector::setNextFrameNumber, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("sendSoftwareTrigger", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::sendSoftwareTrigger, + py::arg() = false, py::arg() = Positions{}); + CppDetectorApi.def( + "getScan", + (Result(Detector::*)(sls::Positions) const) & + Detector::getScan, + py::arg() = Positions{}); + CppDetectorApi.def("setScan", + (void (Detector::*)(const defs::scanParameters)) & + Detector::setScan, + py::arg()); + CppDetectorApi.def( + "getScanErrorMessage", + (Result(Detector::*)(sls::Positions) const) & + Detector::getScanErrorMessage, + py::arg() = Positions{}); + CppDetectorApi.def("getNumberofUDPInterfaces", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberofUDPInterfaces, + py::arg() = Positions{}); + CppDetectorApi.def("setNumberofUDPInterfaces", + (void (Detector::*)(int, sls::Positions)) & + Detector::setNumberofUDPInterfaces, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getSelectedUDPInterface", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSelectedUDPInterface, + py::arg() = Positions{}); + CppDetectorApi.def("selectUDPInterface", + (void (Detector::*)(int, sls::Positions)) & + Detector::selectUDPInterface, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getSourceUDPIP", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSourceUDPIP, + py::arg() = Positions{}); + CppDetectorApi.def("setSourceUDPIP", + (void (Detector::*)(const sls::IpAddr, sls::Positions)) & + Detector::setSourceUDPIP, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getSourceUDPIP2", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSourceUDPIP2, + py::arg() = Positions{}); + CppDetectorApi.def("setSourceUDPIP2", + (void (Detector::*)(const sls::IpAddr, sls::Positions)) & + Detector::setSourceUDPIP2, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getSourceUDPMAC", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSourceUDPMAC, + py::arg() = Positions{}); + CppDetectorApi.def( + "setSourceUDPMAC", + (void (Detector::*)(const sls::MacAddr, sls::Positions)) & + Detector::setSourceUDPMAC, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getSourceUDPMAC2", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSourceUDPMAC2, + py::arg() = Positions{}); + CppDetectorApi.def( + "setSourceUDPMAC2", + (void (Detector::*)(const sls::MacAddr, sls::Positions)) & + Detector::setSourceUDPMAC2, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDestinationUDPList", + (Result(Detector::*)( + const uint32_t, sls::Positions) const) & + Detector::getDestinationUDPList, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setDestinationUDPList", + (void (Detector::*)(const sls::UdpDestination, const int)) & + Detector::setDestinationUDPList, + py::arg(), py::arg()); + CppDetectorApi.def("getNumberofUDPDestinations", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberofUDPDestinations, + py::arg() = Positions{}); + CppDetectorApi.def("clearUDPDestinations", + (void (Detector::*)(sls::Positions)) & + Detector::clearUDPDestinations, + py::arg() = Positions{}); + CppDetectorApi.def("getFirstUDPDestination", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFirstUDPDestination, + py::arg() = Positions{}); + CppDetectorApi.def("setFirstUDPDestination", + (void (Detector::*)(const int, sls::Positions)) & + Detector::setFirstUDPDestination, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getDestinationUDPIP", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDestinationUDPIP, + py::arg() = Positions{}); + CppDetectorApi.def("setDestinationUDPIP", + (void (Detector::*)(const sls::IpAddr, sls::Positions)) & + Detector::setDestinationUDPIP, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getDestinationUDPIP2", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDestinationUDPIP2, + py::arg() = Positions{}); + CppDetectorApi.def("setDestinationUDPIP2", + (void (Detector::*)(const sls::IpAddr, sls::Positions)) & + Detector::setDestinationUDPIP2, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getDestinationUDPMAC", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDestinationUDPMAC, + py::arg() = Positions{}); + CppDetectorApi.def( + "setDestinationUDPMAC", + (void (Detector::*)(const sls::MacAddr, sls::Positions)) & + Detector::setDestinationUDPMAC, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getDestinationUDPMAC2", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDestinationUDPMAC2, + py::arg() = Positions{}); + CppDetectorApi.def( + "setDestinationUDPMAC2", + (void (Detector::*)(const sls::MacAddr, sls::Positions)) & + Detector::setDestinationUDPMAC2, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDestinationUDPPort", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDestinationUDPPort, + py::arg() = Positions{}); + CppDetectorApi.def("setDestinationUDPPort", + (void (Detector::*)(int, int)) & + Detector::setDestinationUDPPort, + py::arg(), py::arg() = -1); + CppDetectorApi.def("getDestinationUDPPort2", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDestinationUDPPort2, + py::arg() = Positions{}); + CppDetectorApi.def("setDestinationUDPPort2", + (void (Detector::*)(int, int)) & + Detector::setDestinationUDPPort2, + py::arg(), py::arg() = -1); + CppDetectorApi.def("reconfigureUDPDestination", + (void (Detector::*)(sls::Positions)) & + Detector::reconfigureUDPDestination, + py::arg() = Positions{}); + CppDetectorApi.def("validateUDPConfiguration", + (void (Detector::*)(sls::Positions)) & + Detector::validateUDPConfiguration, + py::arg() = Positions{}); + CppDetectorApi.def( + "printRxConfiguration", + (Result(Detector::*)(sls::Positions) const) & + Detector::printRxConfiguration, + py::arg() = Positions{}); + CppDetectorApi.def("getTenGiga", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTenGiga, + py::arg() = Positions{}); + CppDetectorApi.def("setTenGiga", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setTenGiga, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTenGigaFlowControl", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTenGigaFlowControl, + py::arg() = Positions{}); + CppDetectorApi.def("setTenGigaFlowControl", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setTenGigaFlowControl, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTransmissionDelayFrame", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTransmissionDelayFrame, + py::arg() = Positions{}); + CppDetectorApi.def("setTransmissionDelayFrame", + (void (Detector::*)(int, sls::Positions)) & + Detector::setTransmissionDelayFrame, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTransmissionDelayLeft", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTransmissionDelayLeft, + py::arg() = Positions{}); + CppDetectorApi.def("setTransmissionDelayLeft", + (void (Detector::*)(int, sls::Positions)) & + Detector::setTransmissionDelayLeft, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTransmissionDelayRight", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTransmissionDelayRight, + py::arg() = Positions{}); + CppDetectorApi.def("setTransmissionDelayRight", + (void (Detector::*)(int, sls::Positions)) & + Detector::setTransmissionDelayRight, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getUseReceiverFlag", + (Result(Detector::*)(sls::Positions) const) & + Detector::getUseReceiverFlag, + py::arg() = Positions{}); + CppDetectorApi.def( + "getRxHostname", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxHostname, + py::arg() = Positions{}); + CppDetectorApi.def( + "setRxHostname", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::setRxHostname, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setRxHostname", + (void (Detector::*)(const std::vector &)) & + Detector::setRxHostname, + py::arg()); + CppDetectorApi.def("getRxPort", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxPort, + py::arg() = Positions{}); + CppDetectorApi.def("setRxPort", + (void (Detector::*)(int, int)) & Detector::setRxPort, + py::arg(), py::arg() = -1); + CppDetectorApi.def("getRxFifoDepth", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxFifoDepth, + py::arg() = Positions{}); + CppDetectorApi.def("setRxFifoDepth", + (void (Detector::*)(int, sls::Positions)) & + Detector::setRxFifoDepth, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxSilentMode", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxSilentMode, + py::arg() = Positions{}); + CppDetectorApi.def("setRxSilentMode", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setRxSilentMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getRxFrameDiscardPolicy", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxFrameDiscardPolicy, + py::arg() = Positions{}); + CppDetectorApi.def( + "setRxFrameDiscardPolicy", + (void (Detector::*)(defs::frameDiscardPolicy, sls::Positions)) & + Detector::setRxFrameDiscardPolicy, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPartialFramesPadding", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPartialFramesPadding, + py::arg() = Positions{}); + CppDetectorApi.def("setPartialFramesPadding", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setPartialFramesPadding, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxUDPSocketBufferSize", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxUDPSocketBufferSize, + py::arg() = Positions{}); + CppDetectorApi.def("setRxUDPSocketBufferSize", + (void (Detector::*)(int, sls::Positions)) & + Detector::setRxUDPSocketBufferSize, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxRealUDPSocketBufferSize", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxRealUDPSocketBufferSize, + py::arg() = Positions{}); + CppDetectorApi.def("getRxLock", + (Result(Detector::*)(sls::Positions)) & + Detector::getRxLock, + py::arg() = Positions{}); + CppDetectorApi.def("setRxLock", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setRxLock, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getRxLastClientIP", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxLastClientIP, + py::arg() = Positions{}); + CppDetectorApi.def( + "getRxThreadIds", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getRxThreadIds, + py::arg() = Positions{}); + CppDetectorApi.def("getRxArping", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxArping, + py::arg() = Positions{}); + CppDetectorApi.def("setRxArping", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setRxArping, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getIndividualRxROIs", + (Result(Detector::*)(sls::Positions) const) & + Detector::getIndividualRxROIs, + py::arg()); + CppDetectorApi.def("getRxROI", + (defs::ROI(Detector::*)() const) & Detector::getRxROI); + CppDetectorApi.def( + "setRxROI", (void (Detector::*)(const defs::ROI)) & Detector::setRxROI, + py::arg()); + CppDetectorApi.def("clearRxROI", + (void (Detector::*)()) & Detector::clearRxROI); + CppDetectorApi.def( + "getFileFormat", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFileFormat, + py::arg() = Positions{}); + CppDetectorApi.def("setFileFormat", + (void (Detector::*)(defs::fileFormat, sls::Positions)) & + Detector::setFileFormat, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getFilePath", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFilePath, + py::arg() = Positions{}); + CppDetectorApi.def( + "setFilePath", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::setFilePath, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getFileNamePrefix", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFileNamePrefix, + py::arg() = Positions{}); + CppDetectorApi.def( + "setFileNamePrefix", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::setFileNamePrefix, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getAcquisitionIndex", + (Result(Detector::*)(sls::Positions) const) & + Detector::getAcquisitionIndex, + py::arg() = Positions{}); + CppDetectorApi.def("setAcquisitionIndex", + (void (Detector::*)(int64_t, sls::Positions)) & + Detector::setAcquisitionIndex, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getFileWrite", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFileWrite, + py::arg() = Positions{}); + CppDetectorApi.def("setFileWrite", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setFileWrite, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getMasterFileWrite", (bool (Detector::*)() const) & + Detector::getMasterFileWrite); + CppDetectorApi.def( + "setMasterFileWrite", + (void (Detector::*)(bool)) & Detector::setMasterFileWrite, py::arg()); + CppDetectorApi.def("getFileOverWrite", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFileOverWrite, + py::arg() = Positions{}); + CppDetectorApi.def("setFileOverWrite", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setFileOverWrite, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getFramesPerFile", + (Result(Detector::*)(sls::Positions) const) & + Detector::getFramesPerFile, + py::arg() = Positions{}); + CppDetectorApi.def("setFramesPerFile", + (void (Detector::*)(int, sls::Positions)) & + Detector::setFramesPerFile, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxZmqDataStream", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxZmqDataStream, + py::arg() = Positions{}); + CppDetectorApi.def("setRxZmqDataStream", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setRxZmqDataStream, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxZmqFrequency", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxZmqFrequency, + py::arg() = Positions{}); + CppDetectorApi.def("setRxZmqFrequency", + (void (Detector::*)(int, sls::Positions)) & + Detector::setRxZmqFrequency, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxZmqTimer", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxZmqTimer, + py::arg() = Positions{}); + CppDetectorApi.def("setRxZmqTimer", + (void (Detector::*)(int, sls::Positions)) & + Detector::setRxZmqTimer, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxZmqStartingFrame", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxZmqStartingFrame, + py::arg() = Positions{}); + CppDetectorApi.def("setRxZmqStartingFrame", + (void (Detector::*)(int, sls::Positions)) & + Detector::setRxZmqStartingFrame, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxZmqPort", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxZmqPort, + py::arg() = Positions{}); + CppDetectorApi.def("setRxZmqPort", + (void (Detector::*)(int, int)) & Detector::setRxZmqPort, + py::arg(), py::arg() = -1); + CppDetectorApi.def( + "getRxZmqIP", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxZmqIP, + py::arg() = Positions{}); + CppDetectorApi.def("setRxZmqIP", + (void (Detector::*)(const sls::IpAddr, sls::Positions)) & + Detector::setRxZmqIP, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getClientZmqPort", + (Result(Detector::*)(sls::Positions) const) & + Detector::getClientZmqPort, + py::arg() = Positions{}); + CppDetectorApi.def("setClientZmqPort", + (void (Detector::*)(int, int)) & + Detector::setClientZmqPort, + py::arg(), py::arg() = -1); + CppDetectorApi.def( + "getClientZmqIp", + (Result(Detector::*)(sls::Positions) const) & + Detector::getClientZmqIp, + py::arg() = Positions{}); + CppDetectorApi.def("setClientZmqIp", + (void (Detector::*)(const sls::IpAddr, sls::Positions)) & + Detector::setClientZmqIp, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getClientZmqHwm", + (int (Detector::*)() const) & Detector::getClientZmqHwm); + CppDetectorApi.def( + "setClientZmqHwm", + (void (Detector::*)(const int)) & Detector::setClientZmqHwm, py::arg()); + CppDetectorApi.def("getRxZmqHwm", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxZmqHwm, + py::arg() = Positions{}); + CppDetectorApi.def("setRxZmqHwm", + (void (Detector::*)(const int)) & Detector::setRxZmqHwm, + py::arg()); + CppDetectorApi.def("getSubExptime", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSubExptime, + py::arg() = Positions{}); + CppDetectorApi.def("setSubExptime", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setSubExptime, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getSubDeadTime", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSubDeadTime, + py::arg() = Positions{}); + CppDetectorApi.def("setSubDeadTime", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setSubDeadTime, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getOverFlowMode", + (Result(Detector::*)(sls::Positions) const) & + Detector::getOverFlowMode, + py::arg() = Positions{}); + CppDetectorApi.def("setOverFlowMode", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setOverFlowMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRateCorrection", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRateCorrection, + py::arg() = Positions{}); + CppDetectorApi.def("setDefaultRateCorrection", + (void (Detector::*)(sls::Positions)) & + Detector::setDefaultRateCorrection, + py::arg() = Positions{}); + CppDetectorApi.def("setRateCorrection", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setRateCorrection, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getInterruptSubframe", + (Result(Detector::*)(sls::Positions) const) & + Detector::getInterruptSubframe, + py::arg() = Positions{}); + CppDetectorApi.def("setInterruptSubframe", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::setInterruptSubframe, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getMeasuredPeriod", + (Result(Detector::*)(sls::Positions) const) & + Detector::getMeasuredPeriod, + py::arg() = Positions{}); + CppDetectorApi.def("getMeasuredSubFramePeriod", + (Result(Detector::*)(sls::Positions) const) & + Detector::getMeasuredSubFramePeriod, + py::arg() = Positions{}); + CppDetectorApi.def("getActive", + (Result(Detector::*)(sls::Positions) const) & + Detector::getActive, + py::arg() = Positions{}); + CppDetectorApi.def("setActive", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::setActive, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPartialReset", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPartialReset, + py::arg() = Positions{}); + CppDetectorApi.def("setPartialReset", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setPartialReset, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("pulsePixel", + (void (Detector::*)(int, defs::xy, sls::Positions)) & + Detector::pulsePixel, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("pulsePixelNMove", + (void (Detector::*)(int, defs::xy, sls::Positions)) & + Detector::pulsePixelNMove, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("pulseChip", + (void (Detector::*)(int, sls::Positions)) & + Detector::pulseChip, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getQuad", + (Result(Detector::*)(sls::Positions) const) & + Detector::getQuad, + py::arg() = Positions{}); + CppDetectorApi.def("setQuad", + (void (Detector::*)(const bool)) & Detector::setQuad, + py::arg()); + CppDetectorApi.def("getDataStream", + (Result(Detector::*)(const defs::portPosition, + sls::Positions) const) & + Detector::getDataStream, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setDataStream", + (void (Detector::*)(const defs::portPosition, const bool, + sls::Positions)) & + Detector::setDataStream, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTop", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTop, + py::arg() = Positions{}); + CppDetectorApi.def( + "setTop", (void (Detector::*)(bool, sls::Positions)) & Detector::setTop, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getChipVersion", + (Result(Detector::*)(sls::Positions) const) & + Detector::getChipVersion, + py::arg() = Positions{}); + CppDetectorApi.def("getThresholdTemperature", + (Result(Detector::*)(sls::Positions) const) & + Detector::getThresholdTemperature, + py::arg() = Positions{}); + CppDetectorApi.def("setThresholdTemperature", + (void (Detector::*)(int, sls::Positions)) & + Detector::setThresholdTemperature, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTemperatureControl", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTemperatureControl, + py::arg() = Positions{}); + CppDetectorApi.def("setTemperatureControl", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setTemperatureControl, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTemperatureEvent", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTemperatureEvent, + py::arg() = Positions{}); + CppDetectorApi.def("resetTemperatureEvent", + (void (Detector::*)(sls::Positions)) & + Detector::resetTemperatureEvent, + py::arg() = Positions{}); + CppDetectorApi.def("getAutoComparatorDisable", + (Result(Detector::*)(sls::Positions) const) & + Detector::getAutoComparatorDisable, + py::arg() = Positions{}); + CppDetectorApi.def("setAutoComparatorDisable", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setAutoComparatorDisable, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getComparatorDisableTime", + (Result(Detector::*)(sls::Positions) const) & + Detector::getComparatorDisableTime, + py::arg() = Positions{}); + CppDetectorApi.def("setComparatorDisableTime", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setComparatorDisableTime, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfAdditionalStorageCells", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfAdditionalStorageCells, + py::arg() = Positions{}); + CppDetectorApi.def("setNumberOfAdditionalStorageCells", + (void (Detector::*)(int)) & + Detector::setNumberOfAdditionalStorageCells, + py::arg()); + CppDetectorApi.def("getStorageCellStart", + (Result(Detector::*)(sls::Positions) const) & + Detector::getStorageCellStart, + py::arg() = Positions{}); + CppDetectorApi.def("setStorageCellStart", + (void (Detector::*)(int, sls::Positions)) & + Detector::setStorageCellStart, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getStorageCellDelay", + (Result(Detector::*)(sls::Positions) const) & + Detector::getStorageCellDelay, + py::arg() = Positions{}); + CppDetectorApi.def("setStorageCellDelay", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setStorageCellDelay, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getGainModeList", + (std::vector(Detector::*)() const) & + Detector::getGainModeList); + CppDetectorApi.def( + "getGainMode", + (Result(Detector::*)(sls::Positions) const) & + Detector::getGainMode, + py::arg() = Positions{}); + CppDetectorApi.def( + "setGainMode", + (void (Detector::*)(const defs::gainMode, sls::Positions)) & + Detector::setGainMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfFilterCells", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfFilterCells, + py::arg() = Positions{}); + CppDetectorApi.def("setNumberOfFilterCells", + (void (Detector::*)(int, sls::Positions)) & + Detector::setNumberOfFilterCells, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getROI", + (Result(Detector::*)(sls::Positions) const) & + Detector::getROI, + py::arg() = Positions{}); + CppDetectorApi.def("setROI", + (void (Detector::*)(defs::ROI, int)) & Detector::setROI, + py::arg(), py::arg()); + CppDetectorApi.def( + "clearROI", (void (Detector::*)(sls::Positions)) & Detector::clearROI, + py::arg() = Positions{}); + CppDetectorApi.def("getExptimeLeft", + (Result(Detector::*)(sls::Positions) const) & + Detector::getExptimeLeft, + py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfBursts", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfBursts, + py::arg() = Positions{}); + CppDetectorApi.def( + "setNumberOfBursts", + (void (Detector::*)(int64_t)) & Detector::setNumberOfBursts, py::arg()); + CppDetectorApi.def("getBurstPeriod", + (Result(Detector::*)(sls::Positions) const) & + Detector::getBurstPeriod, + py::arg() = Positions{}); + CppDetectorApi.def("setBurstPeriod", + (void (Detector::*)(sls::ns, sls::Positions)) & + Detector::setBurstPeriod, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfBurstsLeft", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfBurstsLeft, + py::arg() = Positions{}); + CppDetectorApi.def( + "getInjectChannel", + (Result>(Detector::*)(sls::Positions)) & + Detector::getInjectChannel, + py::arg() = Positions{}); + CppDetectorApi.def( + "setInjectChannel", + (void (Detector::*)(const int, const int, sls::Positions)) & + Detector::setInjectChannel, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getVetoPhoton", + (void (Detector::*)(const int, const std::string &, sls::Positions)) & + Detector::getVetoPhoton, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setVetoPhoton", + (void (Detector::*)(const int, const int, const int, + const std::string &, sls::Positions)) & + Detector::setVetoPhoton, + py::arg(), py::arg(), py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setVetoReference", + (void (Detector::*)(const int, const int, sls::Positions)) & + Detector::setVetoReference, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setVetoFile", + (void (Detector::*)(const int, const std::string &, sls::Positions)) & + Detector::setVetoFile, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getBurstMode", + (Result(Detector::*)(sls::Positions)) & + Detector::getBurstMode, + py::arg() = Positions{}); + CppDetectorApi.def("setBurstMode", + (void (Detector::*)(defs::burstMode, sls::Positions)) & + Detector::setBurstMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getCDSGain", + (Result(Detector::*)(sls::Positions) const) & + Detector::getCDSGain, + py::arg() = Positions{}); + CppDetectorApi.def("setCDSGain", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setCDSGain, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getTimingSource", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTimingSource, + py::arg() = Positions{}); + CppDetectorApi.def( + "setTimingSource", + (void (Detector::*)(defs::timingSourceType, sls::Positions)) & + Detector::setTimingSource, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getVeto", + (Result(Detector::*)(sls::Positions) const) & + Detector::getVeto, + py::arg() = Positions{}); + CppDetectorApi.def("setVeto", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::setVeto, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getVetoStream", + (Result(Detector::*)(sls::Positions) const) & + Detector::getVetoStream, + py::arg() = Positions{}); + CppDetectorApi.def( + "setVetoStream", + (void (Detector::*)(const defs::streamingInterface, sls::Positions)) & + Detector::setVetoStream, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getVetoAlgorithm", + (Result(Detector::*)( + const defs::streamingInterface, sls::Positions) const) & + Detector::getVetoAlgorithm, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setVetoAlgorithm", + (void (Detector::*)(const defs::vetoAlgorithm, + const defs::streamingInterface, sls::Positions)) & + Detector::setVetoAlgorithm, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getADCConfiguration", + (Result(Detector::*)(const int, const int, sls::Positions) const) & + Detector::getADCConfiguration, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setADCConfiguration", + (void (Detector::*)(const int, const int, const int, sls::Positions)) & + Detector::setADCConfiguration, + py::arg(), py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getBadChannels", + (void (Detector::*)(const std::string &, sls::Positions) const) & + Detector::getBadChannels, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setBadChannels", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::setBadChannels, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getCounterMask", + (Result(Detector::*)(sls::Positions) const) & + Detector::getCounterMask, + py::arg() = Positions{}); + CppDetectorApi.def("setCounterMask", + (void (Detector::*)(uint32_t, sls::Positions)) & + Detector::setCounterMask, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfGates", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfGates, + py::arg() = Positions{}); + CppDetectorApi.def("setNumberOfGates", + (void (Detector::*)(int, sls::Positions)) & + Detector::setNumberOfGates, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getExptime", + (Result(Detector::*)(int, sls::Positions) const) & + Detector::getExptime, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setExptime", + (void (Detector::*)(int, sls::ns, sls::Positions)) & + Detector::setExptime, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getExptimeForAllGates", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getExptimeForAllGates, + py::arg() = Positions{}); + CppDetectorApi.def( + "getGateDelay", + (Result(Detector::*)(int, sls::Positions) const) & + Detector::getGateDelay, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setGateDelay", + (void (Detector::*)(int, sls::ns, sls::Positions)) & + Detector::setGateDelay, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getGateDelayForAllGates", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getGateDelayForAllGates, + py::arg() = Positions{}); + CppDetectorApi.def("getChipStatusRegister", + (Result(Detector::*)(sls::Positions) const) & + Detector::getChipStatusRegister, + py::arg() = Positions{}); + CppDetectorApi.def("setGainCaps", + (void (Detector::*)(int, sls::Positions)) & + Detector::setGainCaps, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getGainCaps", + (Result(Detector::*)(sls::Positions)) & + Detector::getGainCaps, + py::arg() = Positions{}); + CppDetectorApi.def( + "getPolarity", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPolarity, + py::arg() = Positions{}); + CppDetectorApi.def("setPolarity", + (void (Detector::*)(defs::polarity, sls::Positions)) & + Detector::setPolarity, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getInterpolation", + (Result(Detector::*)(sls::Positions) const) & + Detector::getInterpolation, + py::arg() = Positions{}); + CppDetectorApi.def("setInterpolation", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setInterpolation, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPumpProbe", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPumpProbe, + py::arg() = Positions{}); + CppDetectorApi.def("setPumpProbe", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setPumpProbe, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getAnalogPulsing", + (Result(Detector::*)(sls::Positions) const) & + Detector::getAnalogPulsing, + py::arg() = Positions{}); + CppDetectorApi.def("setAnalogPulsing", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setAnalogPulsing, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDigitalPulsing", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDigitalPulsing, + py::arg() = Positions{}); + CppDetectorApi.def("setDigitalPulsing", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setDigitalPulsing, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfAnalogSamples", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfAnalogSamples, + py::arg() = Positions{}); + CppDetectorApi.def("setNumberOfAnalogSamples", + (void (Detector::*)(int, sls::Positions)) & + Detector::setNumberOfAnalogSamples, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getADCClock", + (Result(Detector::*)(sls::Positions) const) & + Detector::getADCClock, + py::arg() = Positions{}); + CppDetectorApi.def("setADCClock", + (void (Detector::*)(int, sls::Positions)) & + Detector::setADCClock, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRUNClock", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRUNClock, + py::arg() = Positions{}); + CppDetectorApi.def("setRUNClock", + (void (Detector::*)(int, sls::Positions)) & + Detector::setRUNClock, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getSYNCClock", + (Result(Detector::*)(sls::Positions) const) & + Detector::getSYNCClock, + py::arg() = Positions{}); + CppDetectorApi.def("getADCPipeline", + (Result(Detector::*)(sls::Positions) const) & + Detector::getADCPipeline, + py::arg() = Positions{}); + CppDetectorApi.def("setADCPipeline", + (void (Detector::*)(int, sls::Positions)) & + Detector::setADCPipeline, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getVoltage", + (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & + Detector::getVoltage, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setVoltage", + (void (Detector::*)(defs::dacIndex, int, sls::Positions)) & + Detector::setVoltage, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getADCEnableMask", + (Result(Detector::*)(sls::Positions) const) & + Detector::getADCEnableMask, + py::arg() = Positions{}); + CppDetectorApi.def("setADCEnableMask", + (void (Detector::*)(uint32_t, sls::Positions)) & + Detector::setADCEnableMask, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getTenGigaADCEnableMask", + (Result(Detector::*)(sls::Positions) const) & + Detector::getTenGigaADCEnableMask, + py::arg() = Positions{}); + CppDetectorApi.def("setTenGigaADCEnableMask", + (void (Detector::*)(uint32_t, sls::Positions)) & + Detector::setTenGigaADCEnableMask, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfDigitalSamples", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfDigitalSamples, + py::arg() = Positions{}); + CppDetectorApi.def("setNumberOfDigitalSamples", + (void (Detector::*)(int, sls::Positions)) & + Detector::setNumberOfDigitalSamples, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getReadoutMode", + (Result(Detector::*)(sls::Positions) const) & + Detector::getReadoutMode, + py::arg() = Positions{}); + CppDetectorApi.def("setReadoutMode", + (void (Detector::*)(defs::readoutMode, sls::Positions)) & + Detector::setReadoutMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDBITClock", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDBITClock, + py::arg() = Positions{}); + CppDetectorApi.def("setDBITClock", + (void (Detector::*)(int, sls::Positions)) & + Detector::setDBITClock, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getMeasuredVoltage", + (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & + Detector::getMeasuredVoltage, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getMeasuredCurrent", + (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & + Detector::getMeasuredCurrent, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getSlowADC", + (Result(Detector::*)(defs::dacIndex, sls::Positions) const) & + Detector::getSlowADC, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getExternalSamplingSource", + (Result(Detector::*)(sls::Positions) const) & + Detector::getExternalSamplingSource, + py::arg() = Positions{}); + CppDetectorApi.def("setExternalSamplingSource", + (void (Detector::*)(int, sls::Positions)) & + Detector::setExternalSamplingSource, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getExternalSampling", + (Result(Detector::*)(sls::Positions) const) & + Detector::getExternalSampling, + py::arg() = Positions{}); + CppDetectorApi.def("setExternalSampling", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setExternalSampling, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getRxDbitList", + (Result>(Detector::*)(sls::Positions) const) & + Detector::getRxDbitList, + py::arg() = Positions{}); + CppDetectorApi.def( + "setRxDbitList", + (void (Detector::*)(const std::vector &, sls::Positions)) & + Detector::setRxDbitList, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getRxDbitOffset", + (Result(Detector::*)(sls::Positions) const) & + Detector::getRxDbitOffset, + py::arg() = Positions{}); + CppDetectorApi.def("setRxDbitOffset", + (void (Detector::*)(int, sls::Positions)) & + Detector::setRxDbitOffset, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setDigitalIODelay", + (void (Detector::*)(uint64_t, int, sls::Positions)) & + Detector::setDigitalIODelay, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getLEDEnable", + (Result(Detector::*)(sls::Positions) const) & + Detector::getLEDEnable, + py::arg() = Positions{}); + CppDetectorApi.def("setLEDEnable", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setLEDEnable, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setDacNames", + (void (Detector::*)(const std::vector)) & + Detector::setDacNames, + py::arg()); + CppDetectorApi.def("getDacNames", + (std::vector(Detector::*)() const) & + Detector::getDacNames); + CppDetectorApi.def("getDacIndex", + (defs::dacIndex(Detector::*)(const std::string &)) & + Detector::getDacIndex, + py::arg()); + CppDetectorApi.def("getDacName", + (std::string(Detector::*)(defs::dacIndex)) & + Detector::getDacName, + py::arg()); + CppDetectorApi.def( + "setPattern", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::setPattern, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setPattern", + (void (Detector::*)(const sls::Pattern &, sls::Positions)) & + Detector::setPattern, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("savePattern", + (void (Detector::*)(const std::string &)) & + Detector::savePattern, + py::arg()); + CppDetectorApi.def("loadDefaultPattern", + (void (Detector::*)(sls::Positions)) & + Detector::loadDefaultPattern, + py::arg() = Positions{}); + CppDetectorApi.def("getPatternIOControl", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPatternIOControl, + py::arg() = Positions{}); + CppDetectorApi.def("setPatternIOControl", + (void (Detector::*)(uint64_t, sls::Positions)) & + Detector::setPatternIOControl, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPatternWord", + (Result(Detector::*)(int, sls::Positions)) & + Detector::getPatternWord, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setPatternWord", + (void (Detector::*)(int, uint64_t, sls::Positions)) & + Detector::setPatternWord, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getPatternLoopAddresses", + (Result>(Detector::*)(int, sls::Positions) const) & + Detector::getPatternLoopAddresses, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setPatternLoopAddresses", + (void (Detector::*)(int, int, int, sls::Positions)) & + Detector::setPatternLoopAddresses, + py::arg(), py::arg(), py::arg(), + py::arg() = Positions{}); + CppDetectorApi.def("getPatternLoopCycles", + (Result(Detector::*)(int, sls::Positions) const) & + Detector::getPatternLoopCycles, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setPatternLoopCycles", + (void (Detector::*)(int, int, sls::Positions)) & + Detector::setPatternLoopCycles, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPatternWaitAddr", + (Result(Detector::*)(int, sls::Positions) const) & + Detector::getPatternWaitAddr, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setPatternWaitAddr", + (void (Detector::*)(int, int, sls::Positions)) & + Detector::setPatternWaitAddr, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getPatternWaitTime", + (Result(Detector::*)(int, sls::Positions) const) & + Detector::getPatternWaitTime, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setPatternWaitTime", + (void (Detector::*)(int, uint64_t, sls::Positions)) & + Detector::setPatternWaitTime, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPatternMask", + (Result(Detector::*)(sls::Positions)) & + Detector::getPatternMask, + py::arg() = Positions{}); + CppDetectorApi.def("setPatternMask", + (void (Detector::*)(uint64_t, sls::Positions)) & + Detector::setPatternMask, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getPatternBitMask", + (Result(Detector::*)(sls::Positions) const) & + Detector::getPatternBitMask, + py::arg() = Positions{}); + CppDetectorApi.def("setPatternBitMask", + (void (Detector::*)(uint64_t, sls::Positions)) & + Detector::setPatternBitMask, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("startPattern", + (void (Detector::*)(sls::Positions)) & + Detector::startPattern, + py::arg() = Positions{}); + CppDetectorApi.def("getAdditionalJsonHeader", + (Result>(Detector::*)( + sls::Positions) const) & + Detector::getAdditionalJsonHeader, + py::arg() = Positions{}); + CppDetectorApi.def( + "setAdditionalJsonHeader", + (void (Detector::*)(const std::map &, + sls::Positions)) & + Detector::setAdditionalJsonHeader, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getAdditionalJsonParameter", + (Result(Detector::*)( + const std::string &, sls::Positions) const) & + Detector::getAdditionalJsonParameter, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "setAdditionalJsonParameter", + (void (Detector::*)(const std::string &, const std::string &, + sls::Positions)) & + Detector::setAdditionalJsonParameter, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "programFPGA", + (void (Detector::*)(const std::string &, const bool, sls::Positions)) & + Detector::programFPGA, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "resetFPGA", (void (Detector::*)(sls::Positions)) & Detector::resetFPGA, + py::arg() = Positions{}); + CppDetectorApi.def( + "updateDetectorServer", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::updateDetectorServer, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "updateKernel", + (void (Detector::*)(const std::string &, sls::Positions)) & + Detector::updateKernel, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("rebootController", + (void (Detector::*)(sls::Positions)) & + Detector::rebootController, + py::arg() = Positions{}); + CppDetectorApi.def( + "updateFirmwareAndServer", + (void (Detector::*)(const std::string &, const std::string &, + sls::Positions)) & + Detector::updateFirmwareAndServer, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getUpdateMode", + (Result(Detector::*)(sls::Positions) const) & + Detector::getUpdateMode, + py::arg() = Positions{}); + CppDetectorApi.def("setUpdateMode", + (void (Detector::*)(const bool, sls::Positions)) & + Detector::setUpdateMode, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "readRegister", + (Result(Detector::*)(uint32_t, sls::Positions) const) & + Detector::readRegister, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "writeRegister", + (void (Detector::*)(uint32_t, uint32_t, sls::Positions)) & + Detector::writeRegister, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("setBit", + (void (Detector::*)(uint32_t, int, sls::Positions)) & + Detector::setBit, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("clearBit", + (void (Detector::*)(uint32_t, int, sls::Positions)) & + Detector::clearBit, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getBit", + (Result(Detector::*)(uint32_t, int, sls::Positions)) & + Detector::getBit, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("executeFirmwareTest", + (void (Detector::*)(sls::Positions)) & + Detector::executeFirmwareTest, + py::arg() = Positions{}); + CppDetectorApi.def("executeBusTest", + (void (Detector::*)(sls::Positions)) & + Detector::executeBusTest, + py::arg() = Positions{}); + CppDetectorApi.def( + "writeAdcRegister", + (void (Detector::*)(uint32_t, uint32_t, sls::Positions)) & + Detector::writeAdcRegister, + py::arg(), py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getInitialChecks", (bool (Detector::*)() const) & + Detector::getInitialChecks); + CppDetectorApi.def("setInitialChecks", + (void (Detector::*)(const bool)) & + Detector::setInitialChecks, + py::arg()); + CppDetectorApi.def("getADCInvert", + (Result(Detector::*)(sls::Positions) const) & + Detector::getADCInvert, + py::arg() = Positions{}); + CppDetectorApi.def("setADCInvert", + (void (Detector::*)(uint32_t, sls::Positions)) & + Detector::setADCInvert, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getControlPort", + (Result(Detector::*)(sls::Positions) const) & + Detector::getControlPort, + py::arg() = Positions{}); + CppDetectorApi.def("setControlPort", + (void (Detector::*)(int, sls::Positions)) & + Detector::setControlPort, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getStopPort", + (Result(Detector::*)(sls::Positions) const) & + Detector::getStopPort, + py::arg() = Positions{}); + CppDetectorApi.def("setStopPort", + (void (Detector::*)(int, sls::Positions)) & + Detector::setStopPort, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getDetectorLock", + (Result(Detector::*)(sls::Positions) const) & + Detector::getDetectorLock, + py::arg() = Positions{}); + CppDetectorApi.def("setDetectorLock", + (void (Detector::*)(bool, sls::Positions)) & + Detector::setDetectorLock, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def( + "getLastClientIP", + (Result(Detector::*)(sls::Positions) const) & + Detector::getLastClientIP, + py::arg() = Positions{}); + CppDetectorApi.def("executeCommand", + (Result(Detector::*)(const std::string &, + sls::Positions)) & + Detector::executeCommand, + py::arg(), py::arg() = Positions{}); + CppDetectorApi.def("getNumberOfFramesFromStart", + (Result(Detector::*)(sls::Positions) const) & + Detector::getNumberOfFramesFromStart, + py::arg() = Positions{}); + CppDetectorApi.def("getActualTime", + (Result(Detector::*)(sls::Positions) const) & + Detector::getActualTime, + py::arg() = Positions{}); + CppDetectorApi.def("getMeasurementTime", + (Result(Detector::*)(sls::Positions) const) & + Detector::getMeasurementTime, + py::arg() = Positions{}); + CppDetectorApi.def("getUserDetails", (std::string(Detector::*)() const) & + Detector::getUserDetails); + ; } diff --git a/python/src/detector_in.cpp b/python/src/detector_in.cpp index b2f8afc9b..ce784ee0e 100644 --- a/python/src/detector_in.cpp +++ b/python/src/detector_in.cpp @@ -1,17 +1,13 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -#include -#include -#include -#include +#include "py_headers.h" #include "sls/Detector.h" #include "sls/ToString.h" #include "sls/network_utils.h" #include "sls/sls_detector_defs.h" -#include "typecaster.h" - #include "sls/TimeHelper.h" + #include #include namespace py = pybind11; @@ -23,7 +19,7 @@ void init_det(py::module &m) { using sls::Result; py::class_ CppDetectorApi(m, "CppDetectorApi"); - CppDetectorApi.def(py::init()) + CppDetectorApi.def(py::init()); [[FUNCTIONS]] } diff --git a/python/src/duration.cpp b/python/src/duration.cpp new file mode 100644 index 000000000..e77daad2f --- /dev/null +++ b/python/src/duration.cpp @@ -0,0 +1,21 @@ +#include "py_headers.h" + +#include "DurationWrapper.h" +#include +namespace py = pybind11; +using sls::DurationWrapper; + +void init_duration(py::module &m) { + py::class_(m, "DurationWrapper") + .def(py::init()) + .def(py::init()) + .def("total_seconds", &DurationWrapper::total_seconds) + .def("count", &DurationWrapper::count) + .def("set_count", &DurationWrapper::set_count) + .def("__repr__", [](const DurationWrapper &self) { + std::stringstream ss; + ss << "sls::DurationWrapper(total_seconds: " << self.total_seconds() + << " count: " << self.count() << ")"; + return ss.str(); + }); +} diff --git a/python/src/enums.cpp b/python/src/enums.cpp index 6aa85a953..e8967a7dd 100644 --- a/python/src/enums.cpp +++ b/python/src/enums.cpp @@ -3,11 +3,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -#include -#include -#include -#include -#include +#include "py_headers.h" #include "sls/Pattern.h" #include "sls/sls_detector_defs.h" diff --git a/python/src/enums_in.cpp b/python/src/enums_in.cpp index 12d72b262..416d42980 100644 --- a/python/src/enums_in.cpp +++ b/python/src/enums_in.cpp @@ -1,10 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -#include -#include -#include -#include -#include +#include "py_headers.h" #include "sls/Pattern.h" #include "sls/sls_detector_defs.h" diff --git a/python/src/main.cpp b/python/src/main.cpp index 76657d374..9144b2315 100644 --- a/python/src/main.cpp +++ b/python/src/main.cpp @@ -1,9 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -#include -#include -#include -#include +#include "py_headers.h" #include "mythenFileIO.h" #include "sls/Detector.h" @@ -11,8 +8,6 @@ #include #include -#include "typecaster.h" - using ds = std::chrono::duration; namespace py = pybind11; @@ -23,6 +18,7 @@ void init_network(py::module &); void init_pattern(py::module &); void init_scan(py::module &); void init_source(py::module &); +void init_duration(py::module &); PYBIND11_MODULE(_slsdet, m) { m.doc() = R"pbdoc( C/C++ API @@ -40,6 +36,7 @@ PYBIND11_MODULE(_slsdet, m) { init_pattern(m); init_scan(m); init_source(m); + init_duration(m); // init_experimental(m); py::module io = m.def_submodule("io", "Submodule for io"); diff --git a/python/src/mythenFileIO.h b/python/src/mythenFileIO.h index 1771c96f1..ccd427201 100644 --- a/python/src/mythenFileIO.h +++ b/python/src/mythenFileIO.h @@ -1,6 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #pragma once +#include "py_headers.h" #include #include @@ -9,9 +10,6 @@ #include #include -#include -#include -#include namespace py = pybind11; template diff --git a/python/src/network.cpp b/python/src/network.cpp index 17e90d78c..0bc3673a4 100644 --- a/python/src/network.cpp +++ b/python/src/network.cpp @@ -4,11 +4,7 @@ This file contains Python bindings for the IpAddr and MacAddr classes. */ - -#include -#include -#include -#include +#include "py_headers.h" #include "sls/network_utils.h" namespace py = pybind11; diff --git a/python/src/pattern.cpp b/python/src/pattern.cpp index 0cec6165b..ca671c66c 100644 --- a/python/src/pattern.cpp +++ b/python/src/pattern.cpp @@ -1,10 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package -#include -#include -#include -#include -#include +#include "py_headers.h" #include "sls/Pattern.h" #include "sls/sls_detector_defs.h" diff --git a/python/src/py_headers.h b/python/src/py_headers.h new file mode 100644 index 000000000..40368b010 --- /dev/null +++ b/python/src/py_headers.h @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: LGPL-3.0-or-other +// Copyright (C) 2021 Contributors to the SLS Detector Package + +/* +Single common header file to make sure the pybind includes are the +same and ordered in the same way in all files. Needed to avoid +ODR warnings +*/ +#pragma once +#include +#include +#include +#include +#include "typecaster.h" diff --git a/python/src/scan.cpp b/python/src/scan.cpp index 13e0e4bf2..2940b3383 100644 --- a/python/src/scan.cpp +++ b/python/src/scan.cpp @@ -1,11 +1,8 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package +#include "py_headers.h" + #include "sls/sls_detector_defs.h" -#include -#include -#include -#include -#include #include namespace py = pybind11; void init_scan(py::module &m) { diff --git a/python/src/typecaster.h b/python/src/typecaster.h index 8e2aa6d4d..5eba7b436 100644 --- a/python/src/typecaster.h +++ b/python/src/typecaster.h @@ -1,13 +1,92 @@ // SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #pragma once -#include "sls/Result.h" #include -// Add type_typecaster to pybind for our wrapper type +#include + +#include "sls/Result.h" +#include "DurationWrapper.h" + +namespace py = pybind11; namespace pybind11 { namespace detail { template struct type_caster> : list_caster, Type> {}; + + +// Based on the typecaster in pybind11/chrono.h +template <> struct type_caster { + public: + PYBIND11_TYPE_CASTER(std::chrono::nanoseconds, const_name("DurationWrapper")); + + // signed 25 bits required by the standard. + using days = std::chrono::duration>; + + /** + * Conversion part 1 (Python->C++): convert a PyObject into std::chrono::nanoseconds + * try datetime.timedelta, floats and our DurationWrapper wrapper + */ + + bool load(handle src, bool) { + using namespace std::chrono; + + // Lazy initialise the PyDateTime import + if (!PyDateTimeAPI) { + PyDateTime_IMPORT; + } + + if (!src) { + return false; + } + // If invoked with datetime.delta object, same as in chrono.h + if (PyDelta_Check(src.ptr())) { + value = duration_cast( + days(PyDateTime_DELTA_GET_DAYS(src.ptr())) + + seconds(PyDateTime_DELTA_GET_SECONDS(src.ptr())) + + microseconds(PyDateTime_DELTA_GET_MICROSECONDS(src.ptr())) + + ); + return true; + } + // If invoked with a float we assume it is seconds and convert, same as in chrono.h + if (PyFloat_Check(src.ptr())) { + value = duration_cast(duration(PyFloat_AsDouble(src.ptr()))); + return true; + } + + + // Lastly if we were actually called with a DurationWrapper object we get + // the number of nanoseconds and create a std::chrono::nanoseconds from it + py::object py_cls = py::module::import("_slsdet").attr("DurationWrapper"); + if (py::isinstance(src, py_cls)){ + sls::DurationWrapper *cls = src.cast(); + value = nanoseconds(cls->count()); + return true; + } + + + return false; + + } + + /** + * Conversion part 2 (C++ -> Python) + * import the module to get a handle to the wrapped class + * Default construct an object of (wrapped) DurationWrapper + * set the count from chrono::nanoseconds and return + */ + static handle cast(std::chrono::nanoseconds src, return_value_policy /* policy */, handle /* parent */) { + py::object py_cls = py::module::import("_slsdet").attr("DurationWrapper"); + py::object* obj = new py::object; + *obj = py_cls(); + sls::DurationWrapper *dur = obj->cast(); + dur->set_count(src.count()); + return *obj; + } + }; + + + } // namespace detail } // namespace pybind11 \ No newline at end of file