diff --git a/python/src/DetectorPythonInterface.h b/python/src/DetectorPythonInterface.h index 034edf78c..a91f2ec96 100755 --- a/python/src/DetectorPythonInterface.h +++ b/python/src/DetectorPythonInterface.h @@ -505,12 +505,12 @@ class DetectorPythonInterface { } - int getNumberOfGates() { - return det.setTimer(slsDetectorDefs::timerIndex::GATES_NUMBER, -1); - } - void setNumberOfGates(const int t) { - det.setTimer(slsDetectorDefs::timerIndex::GATES_NUMBER, t); - } + // int getNumberOfGates() { + // return det.setTimer(slsDetectorDefs::timerIndex::GATES_NUMBER, -1); + // } + // void setNumberOfGates(const int t) { + // det.setTimer(slsDetectorDefs::timerIndex::GATES_NUMBER, t); + // } // time in ns int64_t getDelay() { diff --git a/python/src/main.cpp b/python/src/main.cpp index 544b43d38..90cb37e8d 100755 --- a/python/src/main.cpp +++ b/python/src/main.cpp @@ -173,8 +173,8 @@ PYBIND11_MODULE(_sls_detector, m) { .def("getCycles", &DetectorPythonInterface::getCycles) .def("setCycles", &DetectorPythonInterface::setCycles) - .def("getNumberOfGates", &DetectorPythonInterface::getNumberOfGates) - .def("setNumberOfGates", &DetectorPythonInterface::setNumberOfGates) + // .def("getNumberOfGates", &DetectorPythonInterface::getNumberOfGates) + // .def("setNumberOfGates", &DetectorPythonInterface::setNumberOfGates) .def("getDelay", &DetectorPythonInterface::getDelay) .def("setDelay", &DetectorPythonInterface::setDelay) diff --git a/sample/useResult.cpp b/sample/useResult.cpp index 08de0b04f..cf7cf89c7 100644 --- a/sample/useResult.cpp +++ b/sample/useResult.cpp @@ -40,7 +40,7 @@ auto main() -> int { std::cout << "res.squash(-1): " << res.squash(-1) << '\n'; std::cout << "res3.squash(-1): " << res3.squash(-1) << '\n'; - std::vector ivec{1, 3, 5}; + Result ivec{1, 3, 5}; Result nres(ivec); // for (const auto& i : ivec) diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h index 09f68284d..c9f080aef 100644 --- a/slsDetectorSoftware/include/Detector.h +++ b/slsDetectorSoftware/include/Detector.h @@ -1051,6 +1051,21 @@ class Detector { /** [CTB] Value between 0-63 */ void setExternalSamplingSource(int value, Positions pos = {}); + + /** [CTB] */ + uint32_t getADCInvert() const; + + /** [CTB]*/ + void setADCInvert(uint32_t value); + + /** [CTB]*/ + uint32_t getADCEnableMask(int detPos = -1); + + /** [CTB]*/ + void setADCEnableMask(uint32_t mask); + + /** [CTB]*/ + uint32_t getADCEnableMask() const; }; } // namespace sls \ No newline at end of file diff --git a/slsDetectorSoftware/include/Result.h b/slsDetectorSoftware/include/Result.h index 9127ddfc1..193b37db6 100644 --- a/slsDetectorSoftware/include/Result.h +++ b/slsDetectorSoftware/include/Result.h @@ -31,12 +31,13 @@ template > class Result { Result() = default; Result(std::initializer_list list) : vec(list){}; + /** Custom constructor from integer type to Result or Result */ template ::value && (std::is_same::value || std::is_same::value)>::type> - Result(const std::vector &from) { + Result(const Result &from) { vec.reserve(from.size()); for (const auto &item : from) vec.push_back(T(item)); @@ -47,7 +48,7 @@ template > class Result { std::is_integral::value && (std::is_same::value || std::is_same::value)>::type> - Result(std::vector &from) { + Result(Result &from) { vec.reserve(from.size()); for (const auto &item : from) vec.push_back(T(item)); @@ -58,7 +59,7 @@ template > class Result { std::is_integral::value && (std::is_same::value || std::is_same::value)>::type> - Result(std::vector &&from) { + Result(Result &&from) { vec.reserve(from.size()); for (const auto &item : from) vec.push_back(T(item)); @@ -90,6 +91,7 @@ template > class Result { auto empty() const noexcept -> decltype(vec.empty()) { return vec.empty(); } auto front() -> decltype(vec.front()) { return vec.front(); } auto front() const -> decltype(vec.front()) { return vec.front(); } + void reserve(size_type new_cap) { vec.reserve(new_cap); } template auto push_back(V value) -> decltype(vec.push_back(value)) { diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index 34315ceaf..0383b3ea5 100755 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -3,6 +3,7 @@ #include "SharedMemory.h" #include "logger.h" #include "sls_detector_defs.h" +#include "Result.h" class slsDetector; class ZmqSocket; @@ -110,7 +111,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { template struct NonDeduced { using type = CT; }; template - std::vector Parallel(RT (slsDetector::*somefunc)(CT...), + sls::Result Parallel(RT (slsDetector::*somefunc)(CT...), std::vector positions, typename NonDeduced::type... Args) { @@ -127,7 +128,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { futures.push_back(std::async(std::launch::async, somefunc, detectors[i].get(), Args...)); } - std::vector result; + sls::Result result; result.reserve(positions.size()); for (auto &i : futures) { result.push_back(i.get()); @@ -136,7 +137,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { } template - std::vector Parallel(RT (slsDetector::*somefunc)(CT...) const, + sls::Result Parallel(RT (slsDetector::*somefunc)(CT...) const, std::vector positions, typename NonDeduced::type... Args) const { @@ -153,7 +154,7 @@ class multiSlsDetector : public virtual slsDetectorDefs { futures.push_back(std::async(std::launch::async, somefunc, detectors[i].get(), Args...)); } - std::vector result; + sls::Result result; result.reserve(positions.size()); for (auto &i : futures) { result.push_back(i.get()); @@ -1441,35 +1442,35 @@ class multiSlsDetector : public virtual slsDetectorDefs { * @param mask ADC Enable mask * @param detPos -1 for all detectors in list or specific detector position */ - void setADCEnableMask(uint32_t mask, int detPos = -1); + void setADCEnableMask(uint32_t mask, int detPos = -1); // /** * Get ADC Enable Mask (CTB, Moench) * @param detPos -1 for all detectors in list or specific detector position * @returns ADC Enable mask */ - uint32_t getADCEnableMask(int detPos = -1); + uint32_t getADCEnableMask(int detPos = -1); // /** * Set ADC invert register (CTB, Moench) * @param value ADC invert value * @param detPos -1 for all detectors in list or specific detector position */ - void setADCInvert(uint32_t value, int detPos = -1); + void setADCInvert(uint32_t value, int detPos = -1); // /** * Get ADC invert register (CTB, Moench) * @param detPos -1 for all detectors in list or specific detector position * @returns ADC invert value */ - uint32_t getADCInvert(int detPos = -1); + uint32_t getADCInvert(int detPos = -1); // /** * Set external sampling source (CTB only) * @param value external sampling source (Option: 0-63) * @param detPos -1 for all detectors in list or specific detector position */ - void setExternalSamplingSource(int value, int detPos = -1); + void setExternalSamplingSource(int value, int detPos = -1); // /** * Get external sampling source (CTB only) diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index b7812920f..7002fe296 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -843,4 +843,22 @@ void Detector::setExternalSamplingSource(int value, Positions pos) { pimpl->Parallel(&slsDetector::setExternalSamplingSource, pos, value); } +uint32_t Detector::getADCInvert() const { + auto res = pimpl->Parallel(&slsDetector::getADCInvert, {}); + return res.tsquash("Different Values for function getADCInvert"); +} + +void Detector::setADCInvert(uint32_t value) { + pimpl->Parallel(&slsDetector::setADCInvert, {}, value); +} + +uint32_t Detector::getADCEnableMask() const { + return pimpl->Parallel(&slsDetector::getADCEnableMask, {}) + .tsquash("Values of ADC enable mask cannot be different"); +} + +void Detector::setADCEnableMask(uint32_t mask) { + pimpl->Parallel(&slsDetector::setADCEnableMask, {}, mask); +} + } // namespace sls \ No newline at end of file