exposing receiver thread ids to client (#102)

* exposing receiver thread ids to client

Co-authored-by: Erik Frojdh <erik.frojdh@gmail.com>
This commit is contained in:
Dhanya Thattil
2020-06-09 16:18:37 +02:00
committed by GitHub
parent 2a2bb5f63a
commit f5160b0978
48 changed files with 1151 additions and 580 deletions

View File

@ -12,6 +12,7 @@ target_link_libraries(_slsdet PUBLIC
slsDetectorShared slsDetectorShared
slsReceiverShared slsReceiverShared
slsSupportLib slsSupportLib
${ZeroMQ_LIBRARIES}
) )

View File

@ -639,7 +639,7 @@ class Detector(CppDetectorApi):
@property @property
def vthreshold(self): def vthreshold(self):
return element_if_equal(self.getDAC(dacIndex.THRESHOLD)) return element_if_equal(self.getDAC(dacIndex.VTHRESHOLD, False))
@property @property
def type(self): def type(self):

View File

@ -60,22 +60,22 @@ class EigerDacs(DetectorDacs):
""" """
Eiger specific dacs Eiger specific dacs
""" """
_dacs = [('vsvp', dacIndex.SVP,0, 4000, 0), _dacs = [('vsvp', dacIndex.VSVP,0, 4000, 0),
('vtr', dacIndex.VTR,0, 4000, 2500), ('vtrim', dacIndex.VTRIM,0, 4000, 2500),
('vrf', dacIndex.VRF,0, 4000, 3300), ('vrpreamp', dacIndex.VRPREAMP,0, 4000, 3300),
('vrs', dacIndex.VRS,0, 4000, 1400), ('vrshaper', dacIndex.VRSHAPER,0, 4000, 1400),
('vsvn', dacIndex.SVN,0, 4000, 4000), ('vsvn', dacIndex.VSVN,0, 4000, 4000),
('vtgstv', dacIndex.VTGSTV,0, 4000, 2556), ('vtgstv', dacIndex.VTGSTV,0, 4000, 2556),
('vcmp_ll', dacIndex.VCMP_LL,0, 4000, 1500), ('vcmp_ll', dacIndex.VCMP_LL,0, 4000, 1500),
('vcmp_lr', dacIndex.VCMP_LR,0, 4000, 1500), ('vcmp_lr', dacIndex.VCMP_LR,0, 4000, 1500),
('vcall', dacIndex.CAL,0, 4000, 4000), ('vcal', dacIndex.VCAL,0, 4000, 4000),
('vcmp_rl', dacIndex.VCMP_RL,0, 4000, 1500), ('vcmp_rl', dacIndex.VCMP_RL,0, 4000, 1500),
('rxb_rb', dacIndex.RXB_RB,0, 4000, 1100), ('rxb_rb', dacIndex.RXB_RB,0, 4000, 1100),
('rxb_lb', dacIndex.RXB_LB,0, 4000, 1100), ('rxb_lb', dacIndex.RXB_LB,0, 4000, 1100),
('vcmp_rr', dacIndex.VCMP_RR,0, 4000, 1500), ('vcmp_rr', dacIndex.VCMP_RR,0, 4000, 1500),
('vcp', dacIndex.VCP,0, 4000, 200), ('vcp', dacIndex.VCP,0, 4000, 200),
('vcn', dacIndex.VCN,0, 4000, 2000), ('vcn', dacIndex.VCN,0, 4000, 2000),
('vis', dacIndex.VIS,0, 4000, 1550), ('vishaper', dacIndex.VISHAPER,0, 4000, 1550),
('iodelay', dacIndex.IO_DELAY,0, 4000, 660)] ('iodelay', dacIndex.IO_DELAY,0, 4000, 660)]
_dacnames = [_d[0] for _d in _dacs] _dacnames = [_d[0] for _d in _dacs]

View File

@ -13,49 +13,32 @@ import _slsdet
dacIndex = _slsdet.slsDetectorDefs.dacIndex dacIndex = _slsdet.slsDetectorDefs.dacIndex
from .detector_property import DetectorProperty from .detector_property import DetectorProperty
# vcassh 1200,
# vth2 2800,
# vshaper 1280,
# vshaperneg 2800,
# vipre_out 1220,
# vth3 2800,
# vth1 2800,
# vicin 1708,
# vcas 1800,
# vpreamp 1100,
# vpl 1100,
# vipre 2624,
# viinsh 1708,
# vph 1712,
# vtrim 2800,
# vdcsh 800
# @freeze # @freeze
class Mythen3Dacs(DetectorDacs): class Mythen3Dacs(DetectorDacs):
""" """
Jungfrau specific DACs Jungfrau specific DACs
""" """
_dacs = [('vcassh', dacIndex.CASSH, 0, 4000, 1220), _dacs = [('vcassh', dacIndex.VCASSH, 0, 4000, 1220),
('vth2', dacIndex.VTH2, 0, 4000, 2800), ('vth2', dacIndex.VTH2, 0, 4000, 2800),
('vshaper', dacIndex.SHAPER1, 0, 4000, 1280), ('vrshaper', dacIndex.VRSHAPER, 0, 4000, 1280),
('vshaperneg', dacIndex.SHAPER2, 0, 4000, 2800), ('vrshaper_n', dacIndex.VRSHAPER_N, 0, 4000, 2800),
('vipre_out', dacIndex.VIPRE_OUT, 0, 4000, 1220), ('vipre_out', dacIndex.VIPRE_OUT, 0, 4000, 1220),
('vth3', dacIndex.VTH3, 0, 4000, 2800), ('vth3', dacIndex.VTH3, 0, 4000, 2800),
('vth1', dacIndex.THRESHOLD, 0, 4000, 2800), ('vth1', dacIndex.VTH1, 0, 4000, 2800),
('vicin', dacIndex.VICIN, 0, 4000, 1708), ('vicin', dacIndex.VICIN, 0, 4000, 1708),
('vcas', dacIndex.CAS, 0, 4000, 1800), ('vcas', dacIndex.VCAS, 0, 4000, 1800),
('vpreamp', dacIndex.PREAMP, 0, 4000, 1100), ('vrpreamp', dacIndex.VRPREAMP, 0, 4000, 1100),
('vpl', dacIndex.VPL, 0, 4000, 1100), ('vcal_n', dacIndex.VCAL_N, 0, 4000, 1100),
('vipre', dacIndex.VIPRE, 0, 4000, 2624), ('vipre', dacIndex.VIPRE, 0, 4000, 2624),
('viinsh', dacIndex.VIINSH, 0, 4000, 1708), ('vishaper', dacIndex.VISHAPER, 0, 4000, 1708),
('vph', dacIndex.CALIBRATION_PULSE, 0, 4000, 1712), ('vcal_p', dacIndex.VCAL_P, 0, 4000, 1712),
('vtrim', dacIndex.TRIMBIT_SIZE, 0, 4000, 2800), ('vtrim', dacIndex.VTRIM, 0, 4000, 2800),
('vdcsh', dacIndex.VDCSH, 0, 4000, 800), ('vdcsh', dacIndex.VDCSH, 0, 4000, 800),
] ]
_dacnames = [_d[0] for _d in _dacs] _dacnames = [_d[0] for _d in _dacs]
#vthreshold??
@freeze @freeze

View File

@ -86,6 +86,9 @@ void init_det(py::module &m) {
.def("setDetectorSize", .def("setDetectorSize",
(void (Detector::*)(const defs::xy)) & Detector::setDetectorSize, (void (Detector::*)(const defs::xy)) & Detector::setDetectorSize,
py::arg()) py::arg())
.def("getSettingsList",
(std::vector<defs::detectorSettings>(Detector::*)() const) &
Detector::getSettingsList)
.def("getSettings", .def("getSettings",
(Result<defs::detectorSettings>(Detector::*)(sls::Positions) (Result<defs::detectorSettings>(Detector::*)(sls::Positions)
const) & const) &
@ -107,6 +110,12 @@ void init_det(py::module &m) {
(void (Detector::*)(int, sls::Positions)) & (void (Detector::*)(int, sls::Positions)) &
Detector::setAllTrimbits, Detector::setAllTrimbits,
py::arg(), py::arg() = Positions{}) py::arg(), py::arg() = Positions{})
.def("getGapPixelsinCallback",
(bool (Detector::*)() const) & Detector::getGapPixelsinCallback)
.def("setGapPixelsinCallback",
(void (Detector::*)(const bool)) &
Detector::setGapPixelsinCallback,
py::arg())
.def("registerAcquisitionFinishedCallback", .def("registerAcquisitionFinishedCallback",
(void (Detector::*)(void (*)(double, int, void *), void *)) & (void (Detector::*)(void (*)(double, int, void *), void *)) &
Detector::registerAcquisitionFinishedCallback, Detector::registerAcquisitionFinishedCallback,
@ -117,12 +126,6 @@ void init_det(py::module &m) {
void (*)(detectorData *, uint64_t, uint32_t, void *), void *)) & void (*)(detectorData *, uint64_t, uint32_t, void *), void *)) &
Detector::registerDataCallback, Detector::registerDataCallback,
py::arg(), py::arg()) py::arg(), py::arg())
.def("getGapPixelsinCallback",
(bool (Detector::*)() const) & Detector::getGapPixelsinCallback)
.def("setGapPixelsinCallback",
(void (Detector::*)(const bool)) &
Detector::setGapPixelsinCallback,
py::arg())
.def("getNumberOfFrames", .def("getNumberOfFrames",
(Result<int64_t>(Detector::*)(sls::Positions) const) & (Result<int64_t>(Detector::*)(sls::Positions) const) &
Detector::getNumberOfFrames, Detector::getNumberOfFrames,
@ -295,6 +298,8 @@ void init_det(py::module &m) {
(Result<int>(Detector::*)(defs::dacIndex, sls::Positions) const) & (Result<int>(Detector::*)(defs::dacIndex, sls::Positions) const) &
Detector::getTemperature, Detector::getTemperature,
py::arg(), py::arg() = Positions{}) py::arg(), py::arg() = Positions{})
.def("getDacList", (std::vector<defs::dacIndex>(Detector::*)() const) &
Detector::getDacList)
.def("getDAC", .def("getDAC",
(Result<int>(Detector::*)(defs::dacIndex, bool, sls::Positions) (Result<int>(Detector::*)(defs::dacIndex, bool, sls::Positions)
const) & const) &
@ -563,6 +568,10 @@ void init_det(py::module &m) {
(Result<sls::IpAddr>(Detector::*)(sls::Positions) const) & (Result<sls::IpAddr>(Detector::*)(sls::Positions) const) &
Detector::getRxLastClientIP, Detector::getRxLastClientIP,
py::arg() = Positions{}) py::arg() = Positions{})
.def("getRxThreadIds",
(Result<std::array<pid_t, 8>>(Detector::*)(sls::Positions) const) &
Detector::getRxThreadIds,
py::arg() = Positions{})
.def("getFileFormat", .def("getFileFormat",
(Result<defs::fileFormat>(Detector::*)(sls::Positions) const) & (Result<defs::fileFormat>(Detector::*)(sls::Positions) const) &
Detector::getFileFormat, Detector::getFileFormat,
@ -1136,7 +1145,7 @@ void init_det(py::module &m) {
Detector::setExternalSamplingSource, Detector::setExternalSamplingSource,
py::arg(), py::arg() = Positions{}) py::arg(), py::arg() = Positions{})
.def("getExternalSampling", .def("getExternalSampling",
(Result<int>(Detector::*)(sls::Positions) const) & (Result<bool>(Detector::*)(sls::Positions) const) &
Detector::getExternalSampling, Detector::getExternalSampling,
py::arg() = Positions{}) py::arg() = Positions{})
.def("setExternalSampling", .def("setExternalSampling",

View File

@ -88,15 +88,42 @@ void init_enums(py::module &m) {
.export_values(); .export_values();
py::enum_<slsDetectorDefs::dacIndex>(Defs, "dacIndex") py::enum_<slsDetectorDefs::dacIndex>(Defs, "dacIndex")
.value("THRESHOLD", slsDetectorDefs::dacIndex::THRESHOLD) .value("DAC_0", slsDetectorDefs::dacIndex::DAC_0)
.value("CALIBRATION_PULSE", .value("DAC_1", slsDetectorDefs::dacIndex::DAC_1)
slsDetectorDefs::dacIndex::CALIBRATION_PULSE) .value("DAC_2", slsDetectorDefs::dacIndex::DAC_2)
.value("TRIMBIT_SIZE", slsDetectorDefs::dacIndex::TRIMBIT_SIZE) .value("DAC_3", slsDetectorDefs::dacIndex::DAC_3)
.value("PREAMP", slsDetectorDefs::dacIndex::PREAMP) .value("DAC_4", slsDetectorDefs::dacIndex::DAC_4)
.value("SHAPER1", slsDetectorDefs::dacIndex::SHAPER1) .value("DAC_5", slsDetectorDefs::dacIndex::DAC_5)
.value("SHAPER2", slsDetectorDefs::dacIndex::SHAPER2) .value("DAC_6", slsDetectorDefs::dacIndex::DAC_6)
.value("TEMPERATURE_ADC", slsDetectorDefs::dacIndex::TEMPERATURE_ADC) .value("DAC_7", slsDetectorDefs::dacIndex::DAC_7)
.value("TEMPERATURE_FPGA", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA) .value("DAC_8", slsDetectorDefs::dacIndex::DAC_8)
.value("DAC_9", slsDetectorDefs::dacIndex::DAC_9)
.value("DAC_10", slsDetectorDefs::dacIndex::DAC_10)
.value("DAC_11", slsDetectorDefs::dacIndex::DAC_11)
.value("DAC_12", slsDetectorDefs::dacIndex::DAC_12)
.value("DAC_13", slsDetectorDefs::dacIndex::DAC_13)
.value("DAC_14", slsDetectorDefs::dacIndex::DAC_14)
.value("DAC_15", slsDetectorDefs::dacIndex::DAC_15)
.value("DAC_16", slsDetectorDefs::dacIndex::DAC_16)
.value("DAC_17", slsDetectorDefs::dacIndex::DAC_17)
.value("VSVP", slsDetectorDefs::dacIndex::VSVP)
.value("VTRIM", slsDetectorDefs::dacIndex::VTRIM)
.value("VRPREAMP", slsDetectorDefs::dacIndex::VRPREAMP)
.value("VRSHAPER", slsDetectorDefs::dacIndex::VRSHAPER)
.value("VSVN", slsDetectorDefs::dacIndex::VSVN)
.value("VTGSTV", slsDetectorDefs::dacIndex::VTGSTV)
.value("VCMP_LL", slsDetectorDefs::dacIndex::VCMP_LL)
.value("VCMP_LR", slsDetectorDefs::dacIndex::VCMP_LR)
.value("VCAL", slsDetectorDefs::dacIndex::VCAL)
.value("VCMP_RL", slsDetectorDefs::dacIndex::VCMP_RL)
.value("RXB_RB", slsDetectorDefs::dacIndex::RXB_RB)
.value("RXB_LB", slsDetectorDefs::dacIndex::RXB_LB)
.value("VCMP_RR", slsDetectorDefs::dacIndex::VCMP_RR)
.value("VCP", slsDetectorDefs::dacIndex::VCP)
.value("VCN", slsDetectorDefs::dacIndex::VCN)
.value("VISHAPER", slsDetectorDefs::dacIndex::VISHAPER)
.value("VTHRESHOLD", slsDetectorDefs::dacIndex::VTHRESHOLD)
.value("IO_DELAY", slsDetectorDefs::dacIndex::IO_DELAY)
.value("VREF_DS", slsDetectorDefs::dacIndex::VREF_DS) .value("VREF_DS", slsDetectorDefs::dacIndex::VREF_DS)
.value("VCASCN_PB", slsDetectorDefs::dacIndex::VCASCN_PB) .value("VCASCN_PB", slsDetectorDefs::dacIndex::VCASCN_PB)
.value("VCASCP_PB", slsDetectorDefs::dacIndex::VCASCP_PB) .value("VCASCP_PB", slsDetectorDefs::dacIndex::VCASCP_PB)
@ -105,25 +132,46 @@ void init_enums(py::module &m) {
.value("VIN_CM", slsDetectorDefs::dacIndex::VIN_CM) .value("VIN_CM", slsDetectorDefs::dacIndex::VIN_CM)
.value("VREF_COMP", slsDetectorDefs::dacIndex::VREF_COMP) .value("VREF_COMP", slsDetectorDefs::dacIndex::VREF_COMP)
.value("IB_TESTC", slsDetectorDefs::dacIndex::IB_TESTC) .value("IB_TESTC", slsDetectorDefs::dacIndex::IB_TESTC)
.value("SVP", slsDetectorDefs::dacIndex::SVP) .value("VB_COMP", slsDetectorDefs::dacIndex::VB_COMP)
.value("SVN", slsDetectorDefs::dacIndex::SVN) .value("VDD_PROT", slsDetectorDefs::dacIndex::VDD_PROT)
.value("VTR", slsDetectorDefs::dacIndex::VTR) .value("VIN_COM", slsDetectorDefs::dacIndex::VIN_COM)
.value("VRF", slsDetectorDefs::dacIndex::VRF) .value("VREF_PRECH", slsDetectorDefs::dacIndex::VREF_PRECH)
.value("VRS", slsDetectorDefs::dacIndex::VRS) .value("VB_PIXBUF", slsDetectorDefs::dacIndex::VB_PIXBUF)
.value("VTGSTV", slsDetectorDefs::dacIndex::VTGSTV) .value("VB_DS", slsDetectorDefs::dacIndex::VB_DS)
.value("VCMP_LL", slsDetectorDefs::dacIndex::VCMP_LL) .value("VREF_H_ADC", slsDetectorDefs::dacIndex::VREF_H_ADC)
.value("VCMP_LR", slsDetectorDefs::dacIndex::VCMP_LR) .value("VB_COMP_FE", slsDetectorDefs::dacIndex::VB_COMP_FE)
.value("CAL", slsDetectorDefs::dacIndex::CAL) .value("VB_COMP_ADC", slsDetectorDefs::dacIndex::VB_COMP_ADC)
.value("VCMP_RL", slsDetectorDefs::dacIndex::VCMP_RL) .value("VCOM_CDS", slsDetectorDefs::dacIndex::VCOM_CDS)
.value("VCMP_RR", slsDetectorDefs::dacIndex::VCMP_RR) .value("VREF_RSTORE", slsDetectorDefs::dacIndex::VREF_RSTORE)
.value("RXB_RB", slsDetectorDefs::dacIndex::RXB_RB) .value("VB_OPA_1ST", slsDetectorDefs::dacIndex::VB_OPA_1ST)
.value("RXB_LB", slsDetectorDefs::dacIndex::RXB_LB) .value("VREF_COMP_FE", slsDetectorDefs::dacIndex::VREF_COMP_FE)
.value("VCP", slsDetectorDefs::dacIndex::VCP) .value("VCOM_ADC1", slsDetectorDefs::dacIndex::VCOM_ADC1)
.value("VCN", slsDetectorDefs::dacIndex::VCN) .value("VREF_L_ADC", slsDetectorDefs::dacIndex::VREF_L_ADC)
.value("VIS", slsDetectorDefs::dacIndex::VIS) .value("VREF_CDS", slsDetectorDefs::dacIndex::VREF_CDS)
.value("IO_DELAY", slsDetectorDefs::dacIndex::IO_DELAY) .value("VB_CS", slsDetectorDefs::dacIndex::VB_CS)
.value("VB_OPA_FD", slsDetectorDefs::dacIndex::VB_OPA_FD)
.value("VCOM_ADC2", slsDetectorDefs::dacIndex::VCOM_ADC2)
.value("VCASSH", slsDetectorDefs::dacIndex::VCASSH)
.value("VTH2", slsDetectorDefs::dacIndex::VTH2)
.value("VRSHAPER_N", slsDetectorDefs::dacIndex::VRSHAPER_N)
.value("VIPRE_OUT", slsDetectorDefs::dacIndex::VIPRE_OUT)
.value("VTH3", slsDetectorDefs::dacIndex::VTH3)
.value("VTH1", slsDetectorDefs::dacIndex::VTH1)
.value("VICIN", slsDetectorDefs::dacIndex::VICIN)
.value("VCAS", slsDetectorDefs::dacIndex::VCAS)
.value("VCAL_N", slsDetectorDefs::dacIndex::VCAL_N)
.value("VIPRE", slsDetectorDefs::dacIndex::VIPRE)
.value("VCAL_P", slsDetectorDefs::dacIndex::VCAL_P)
.value("VDCSH", slsDetectorDefs::dacIndex::VDCSH)
.value("VBP_COLBUF", slsDetectorDefs::dacIndex::VBP_COLBUF)
.value("VB_SDA", slsDetectorDefs::dacIndex::VB_SDA)
.value("VCASC_SFP", slsDetectorDefs::dacIndex::VCASC_SFP)
.value("VIPRE_CDS", slsDetectorDefs::dacIndex::VIPRE_CDS)
.value("IBIAS_SFP", slsDetectorDefs::dacIndex::IBIAS_SFP)
.value("ADC_VPP", slsDetectorDefs::dacIndex::ADC_VPP) .value("ADC_VPP", slsDetectorDefs::dacIndex::ADC_VPP)
.value("HIGH_VOLTAGE", slsDetectorDefs::dacIndex::HIGH_VOLTAGE) .value("HIGH_VOLTAGE", slsDetectorDefs::dacIndex::HIGH_VOLTAGE)
.value("TEMPERATURE_ADC", slsDetectorDefs::dacIndex::TEMPERATURE_ADC)
.value("TEMPERATURE_FPGA", slsDetectorDefs::dacIndex::TEMPERATURE_FPGA)
.value("TEMPERATURE_FPGAEXT", .value("TEMPERATURE_FPGAEXT",
slsDetectorDefs::dacIndex::TEMPERATURE_FPGAEXT) slsDetectorDefs::dacIndex::TEMPERATURE_FPGAEXT)
.value("TEMPERATURE_10GE", slsDetectorDefs::dacIndex::TEMPERATURE_10GE) .value("TEMPERATURE_10GE", slsDetectorDefs::dacIndex::TEMPERATURE_10GE)
@ -134,40 +182,6 @@ void init_enums(py::module &m) {
slsDetectorDefs::dacIndex::TEMPERATURE_FPGA2) slsDetectorDefs::dacIndex::TEMPERATURE_FPGA2)
.value("TEMPERATURE_FPGA3", .value("TEMPERATURE_FPGA3",
slsDetectorDefs::dacIndex::TEMPERATURE_FPGA3) slsDetectorDefs::dacIndex::TEMPERATURE_FPGA3)
.value("VIPRE", slsDetectorDefs::dacIndex::VIPRE)
.value("VIINSH", slsDetectorDefs::dacIndex::VIINSH)
.value("VDCSH", slsDetectorDefs::dacIndex::VDCSH)
.value("VTH2", slsDetectorDefs::dacIndex::VTH2)
.value("VPL", slsDetectorDefs::dacIndex::VPL)
.value("VTH3", slsDetectorDefs::dacIndex::VTH3)
.value("CASSH", slsDetectorDefs::dacIndex::CASSH)
.value("CAS", slsDetectorDefs::dacIndex::CAS)
.value("VICIN", slsDetectorDefs::dacIndex::VICIN)
.value("VIPRE_OUT", slsDetectorDefs::dacIndex::VIPRE_OUT)
.value("VREF_H_ADC", slsDetectorDefs::dacIndex::VREF_H_ADC)
.value("VB_COMP_FE", slsDetectorDefs::dacIndex::VB_COMP_FE)
.value("VB_COMP_ADC", slsDetectorDefs::dacIndex::VB_COMP_ADC)
.value("VCOM_CDS", slsDetectorDefs::dacIndex::VCOM_CDS)
.value("VREF_RSTORE", slsDetectorDefs::dacIndex::VREF_RSTORE)
.value("VB_OPA_1ST", slsDetectorDefs::dacIndex::VB_OPA_1ST)
.value("VREF_COMP_FE", slsDetectorDefs::dacIndex::VREF_COMP_FE)
.value("VCOM_ADC1", slsDetectorDefs::dacIndex::VCOM_ADC1)
.value("VREF_PRECH", slsDetectorDefs::dacIndex::VREF_PRECH)
.value("VREF_L_ADC", slsDetectorDefs::dacIndex::VREF_L_ADC)
.value("VREF_CDS", slsDetectorDefs::dacIndex::VREF_CDS)
.value("VB_CS", slsDetectorDefs::dacIndex::VB_CS)
.value("VB_OPA_FD", slsDetectorDefs::dacIndex::VB_OPA_FD)
.value("VCOM_ADC2", slsDetectorDefs::dacIndex::VCOM_ADC2)
.value("VB_DS", slsDetectorDefs::dacIndex::VB_DS)
.value("VB_COMP", slsDetectorDefs::dacIndex::VB_COMP)
.value("VB_PIXBUF", slsDetectorDefs::dacIndex::VB_PIXBUF)
.value("VIN_COM", slsDetectorDefs::dacIndex::VIN_COM)
.value("VDD_PROT", slsDetectorDefs::dacIndex::VDD_PROT)
.value("VBP_COLBUF", slsDetectorDefs::dacIndex::VBP_COLBUF)
.value("VB_SDA", slsDetectorDefs::dacIndex::VB_SDA)
.value("VCASC_SFP", slsDetectorDefs::dacIndex::VCASC_SFP)
.value("VIPRE_CDS", slsDetectorDefs::dacIndex::VIPRE_CDS)
.value("IBIAS_SFP", slsDetectorDefs::dacIndex::IBIAS_SFP)
.value("V_POWER_A", slsDetectorDefs::dacIndex::V_POWER_A) .value("V_POWER_A", slsDetectorDefs::dacIndex::V_POWER_A)
.value("V_POWER_B", slsDetectorDefs::dacIndex::V_POWER_B) .value("V_POWER_B", slsDetectorDefs::dacIndex::V_POWER_B)
.value("V_POWER_C", slsDetectorDefs::dacIndex::V_POWER_C) .value("V_POWER_C", slsDetectorDefs::dacIndex::V_POWER_C)

View File

@ -25,43 +25,39 @@ void qTabDeveloper::SetupWidgetWindow() {
switch (detType) { switch (detType) {
case slsDetectorDefs::EIGER: case slsDetectorDefs::EIGER:
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v SvP: ", getSLSIndex(detType, tempid++))); this, det, true, "vsvp: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v SvN ", getSLSIndex(detType, tempid++))); this, det, true, "vsvn ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v Vrf: ", getSLSIndex(detType, tempid++))); this, det, true, "vrpreamp: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v Vrs: ", getSLSIndex(detType, tempid++))); this, det, true, "vrshaper: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v Vtr: ", getSLSIndex(detType, tempid++))); this, det, true, "vtrim: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v Vtgstv: ", getSLSIndex(detType, tempid++))); this, det, true, "vtgstv: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vcal: ", getSLSIndex(detType, tempid++))); this, det, true, "vcal: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v Vcp ", getSLSIndex(detType, tempid++))); this, det, true, "vcp ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v Vcn: ", getSLSIndex(detType, tempid++))); this, det, true, "vcn: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v Vis: ", getSLSIndex(detType, tempid++))); this, det, true, "vishaper: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v rxb_lb: ", getSLSIndex(detType, tempid++))); this, det, true, "rxb_lb: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "v rxb_rb: ", getSLSIndex(detType, tempid++))); this, det, true, "rxb_rb: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(
this, det, true, "vcmp_ll: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(
this, det, true, "vcmp_lr: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(
this, det, true, "vcmp_rl: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(
this, det, true, "vcmp_rr: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back( dacWidgets.push_back(
new qDacWidget(this, det, true, new qDacWidget(this, det, true,
"v Vcmp_ll: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(
new qDacWidget(this, det, true,
"v Vcmp_lr: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(
new qDacWidget(this, det, true,
"v Vcmp_rl: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(
new qDacWidget(this, det, true,
"v Vcmp_rr: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget(
this, det, true,
"vthreshold: ", getSLSIndex(detType, tempid++))); "vthreshold: ", getSLSIndex(detType, tempid++)));
adcWidgets.push_back(new qDacWidget( adcWidgets.push_back(new qDacWidget(
this, det, false, this, det, false,
@ -183,10 +179,10 @@ void qTabDeveloper::SetupWidgetWindow() {
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vth2: ", getSLSIndex(detType, tempid++))); this, det, true, "vth2: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vshaper: ", getSLSIndex(detType, tempid++))); this, det, true, "vrshaper: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back( dacWidgets.push_back(
new qDacWidget(this, det, true, new qDacWidget(this, det, true,
"vshaperneg: ", getSLSIndex(detType, tempid++))); "vrshaper_n: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back( dacWidgets.push_back(
new qDacWidget(this, det, true, new qDacWidget(this, det, true,
"vipre_out: ", getSLSIndex(detType, tempid++))); "vipre_out: ", getSLSIndex(detType, tempid++)));
@ -199,19 +195,22 @@ void qTabDeveloper::SetupWidgetWindow() {
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vcas: ", getSLSIndex(detType, tempid++))); this, det, true, "vcas: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vpreamp: ", getSLSIndex(detType, tempid++))); this, det, true, "vrpreamp: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vph: ", getSLSIndex(detType, tempid++))); this, det, true, "vcal_p: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vipre: ", getSLSIndex(detType, tempid++))); this, det, true, "vipre: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "viinsh: ", getSLSIndex(detType, tempid++))); this, det, true, "vishaper: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vpl: ", getSLSIndex(detType, tempid++))); this, det, true, "vcal_n: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vtrim: ", getSLSIndex(detType, tempid++))); this, det, true, "vtrim: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(new qDacWidget( dacWidgets.push_back(new qDacWidget(
this, det, true, "vdcsh: ", getSLSIndex(detType, tempid++))); this, det, true, "vdcsh: ", getSLSIndex(detType, tempid++)));
dacWidgets.push_back(
new qDacWidget(this, det, true,
"vthreshold: ", getSLSIndex(detType, tempid++)));
break; break;
case slsDetectorDefs::GOTTHARD2: case slsDetectorDefs::GOTTHARD2:
@ -384,25 +383,25 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) {
case slsDetectorDefs::EIGER: case slsDetectorDefs::EIGER:
switch (index) { switch (index) {
case 0: case 0:
return slsDetectorDefs::SVP; return slsDetectorDefs::VSVP;
case 1: case 1:
return slsDetectorDefs::SVN; return slsDetectorDefs::VSVN;
case 2: case 2:
return slsDetectorDefs::VRF; return slsDetectorDefs::VRPREAMP;
case 3: case 3:
return slsDetectorDefs::VRS; return slsDetectorDefs::VRSHAPER;
case 4: case 4:
return slsDetectorDefs::VTR; return slsDetectorDefs::VTRIM;
case 5: case 5:
return slsDetectorDefs::VTGSTV; return slsDetectorDefs::VTGSTV;
case 6: case 6:
return slsDetectorDefs::CAL; return slsDetectorDefs::VCAL;
case 7: case 7:
return slsDetectorDefs::VCP; return slsDetectorDefs::VCP;
case 8: case 8:
return slsDetectorDefs::VCN; return slsDetectorDefs::VCN;
case 9: case 9:
return slsDetectorDefs::VIS; return slsDetectorDefs::VISHAPER;
case 10: case 10:
return slsDetectorDefs::RXB_LB; return slsDetectorDefs::RXB_LB;
case 11: case 11:
@ -416,7 +415,7 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) {
case 15: case 15:
return slsDetectorDefs::VCMP_RR; return slsDetectorDefs::VCMP_RR;
case 16: case 16:
return slsDetectorDefs::THRESHOLD; return slsDetectorDefs::VTHRESHOLD;
case 17: case 17:
return slsDetectorDefs::TEMPERATURE_FPGAEXT; return slsDetectorDefs::TEMPERATURE_FPGAEXT;
case 18: case 18:
@ -515,37 +514,39 @@ qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorType detType, int index) {
case slsDetectorDefs::MYTHEN3: case slsDetectorDefs::MYTHEN3:
switch (index) { switch (index) {
case 0: case 0:
return slsDetectorDefs::CASSH; return slsDetectorDefs::VCASSH;
case 1: case 1:
return slsDetectorDefs::VTH2; return slsDetectorDefs::VTH2;
case 2: case 2:
return slsDetectorDefs::SHAPER1; return slsDetectorDefs::VRSHAPER;
case 3: case 3:
return slsDetectorDefs::SHAPER2; return slsDetectorDefs::VRSHAPER_N;
case 4: case 4:
return slsDetectorDefs::VIPRE_OUT; return slsDetectorDefs::VIPRE_OUT;
case 5: case 5:
return slsDetectorDefs::VTH3; return slsDetectorDefs::VTH3;
case 6: case 6:
return slsDetectorDefs::THRESHOLD; return slsDetectorDefs::VTH1;
case 7: case 7:
return slsDetectorDefs::VICIN; return slsDetectorDefs::VICIN;
case 8: case 8:
return slsDetectorDefs::CAS; return slsDetectorDefs::VCAS;
case 9: case 9:
return slsDetectorDefs::PREAMP; return slsDetectorDefs::VRPREAMP;
case 10: case 10:
return slsDetectorDefs::CALIBRATION_PULSE; return slsDetectorDefs::VCAL_P;
case 11: case 11:
return slsDetectorDefs::VIPRE; return slsDetectorDefs::VIPRE;
case 12: case 12:
return slsDetectorDefs::VIINSH; return slsDetectorDefs::VISHAPER;
case 13: case 13:
return slsDetectorDefs::VPL; return slsDetectorDefs::VCAL_N;
case 14: case 14:
return slsDetectorDefs::TRIMBIT_SIZE; return slsDetectorDefs::VTRIM;
case 15: case 15:
return slsDetectorDefs::VDCSH; return slsDetectorDefs::VDCSH;
case 16:
return slsDetectorDefs::VTHRESHOLD;
default: default:
throw sls::RuntimeError(std::string("Unknown dac/adc index") + throw sls::RuntimeError(std::string("Unknown dac/adc index") +
std::to_string(index)); std::to_string(index));

View File

@ -15,10 +15,10 @@
// GetDAQStatusRegister(512,current_mode_bits_from_fpga)) { // GetDAQStatusRegister(512,current_mode_bits_from_fpga)) {
unsigned int Module_ndacs = 16; unsigned int Module_ndacs = 16;
char Module_dac_names[16][10] = {"SvP", "Vtr", "Vrf", "Vrs", char Module_dac_names[16][10] = {"VSvP", "Vtrim", "Vrpreamp", "Vrshaper",
"SvN", "Vtgstv", "Vcmp_ll", "Vcmp_lr", "VSvN", "Vtgstv", "Vcmp_ll", "Vcmp_lr",
"cal", "Vcmp_rl", "rxb_rb", "rxb_lb", "Vcal", "Vcmp_rl", "rxb_rb", "rxb_lb",
"Vcmp_rr", "Vcp", "Vcn", "Vis"}; "Vcmp_rr", "Vcp", "Vcn", "Vishaper"};
struct Module modules[10]; struct Module modules[10];
int moduleSize = 0; int moduleSize = 0;

View File

@ -12,42 +12,42 @@
/* Enums */ /* Enums */
enum DACINDEX { enum DACINDEX {
E_SVP, E_VSVP,
E_VTR, E_VTRIM,
E_VRF, E_VRPREAMP,
E_VRS, E_VRSHAPER,
E_SVN, E_VSVN,
E_VTGSTV, E_VTGSTV,
E_VCMP_LL, E_VCMP_LL,
E_VCMP_LR, E_VCMP_LR,
E_CAL, E_VCAL,
E_VCMP_RL, E_VCMP_RL,
E_RXB_RB, E_RXB_RB,
E_RXB_LB, E_RXB_LB,
E_VCMP_RR, E_VCMP_RR,
E_VCP, E_VCP,
E_VCN, E_VCN,
E_VIS, E_VISHAPER,
E_VTHRESHOLD E_VTHRESHOLD
}; };
#define DEFAULT_DAC_VALS \ #define DEFAULT_DAC_VALS \
{ \ { \
0, /* SvP */ \ 0, /* VSvP */ \
2480, /* Vtr */ \ 2480, /* Vtrim */ \
3300, /* Vrf */ \ 3300, /* Vrpreamp */ \
1400, /* Vrs */ \ 1400, /* Vrshaper */ \
4000, /* SvN */ \ 4000, /* VSvN */ \
2556, /* Vtgstv */ \ 2556, /* Vtgstv */ \
1000, /* Vcmp_ll */ \ 1000, /* Vcmp_ll */ \
1000, /* Vcmp_lr */ \ 1000, /* Vcmp_lr */ \
0, /* cal */ \ 0, /* Vcal */ \
1000, /* Vcmp_rl */ \ 1000, /* Vcmp_rl */ \
1100, /* rxb_rb */ \ 1100, /* rxb_rb */ \
1100, /* rxb_lb */ \ 1100, /* rxb_lb */ \
1000, /* Vcmp_rr */ \ 1000, /* Vcmp_rr */ \
1000, /* Vcp */ \ 1000, /* Vcp */ \
2000, /* Vcn */ \ 2000, /* Vcn */ \
1550 /* Vis */ \ 1550 /* Vishaper */ \
}; };
enum ADCINDEX { enum ADCINDEX {
TEMP_FPGAEXT, TEMP_FPGAEXT,

View File

@ -852,7 +852,7 @@ void updateGatePeriod() {
uint32_t countermask = getCounterMask(); uint32_t countermask = getCounterMask();
for (int i = 0; i != 3; ++i) { for (int i = 0; i != 3; ++i) {
// only if counter enabled // only if counter enabled
if ((1 << i) & countermask) { if (countermask & (1 << i)) {
uint64_t sum = getExpTime(i) + getGateDelay(i); uint64_t sum = getExpTime(i) + getGateDelay(i);
if (sum > max) { if (sum > max) {
max = sum; max = sum;
@ -1082,6 +1082,15 @@ void setDAC(enum DACINDEX ind, int val, int mV) {
return; return;
} }
if (ind == M_VTHRESHOLD) {
LOG(logINFO,
("Setting Threshold voltages to %d %s\n", val, (mV ? "mv" : "")));
setDAC(M_VTH1, val, mV);
setDAC(M_VTH2, val, mV);
setDAC(M_VTH3, val, mV);
return;
}
char *dac_names[] = {DAC_NAMES}; char *dac_names[] = {DAC_NAMES};
LOG(logDEBUG1, ("Setting dac[%d - %s]: %d %s \n", (int)ind, dac_names[ind], LOG(logDEBUG1, ("Setting dac[%d - %s]: %d %s \n", (int)ind, dac_names[ind],
val, (mV ? "mV" : "dac units"))); val, (mV ? "mV" : "dac units")));
@ -1106,6 +1115,23 @@ void setDAC(enum DACINDEX ind, int val, int mV) {
} }
int getDAC(enum DACINDEX ind, int mV) { int getDAC(enum DACINDEX ind, int mV) {
if (ind == M_VTHRESHOLD) {
int ret[3] = {0};
ret[0] = getDAC(M_VTH1, mV);
ret[1] = getDAC(M_VTH2, mV);
ret[2] = getDAC(M_VTH3, mV);
if ((ret[0] == ret[1]) && (ret[1] == ret[2])) {
LOG(logINFO, ("\tvthreshold match\n"));
return ret[0];
} else {
LOG(logERROR, ("\tvthreshold mismatch vth1:%d vth2:%d "
"vth3:%d\n",
ret[0], ret[1], ret[2]));
return -1;
}
}
if (!mV) { if (!mV) {
LOG(logDEBUG1, ("Getting DAC %d : %d dac\n", ind, detectorDacs[ind])); LOG(logDEBUG1, ("Getting DAC %d : %d dac\n", ind, detectorDacs[ind]));
return detectorDacs[ind]; return detectorDacs[ind];

View File

@ -56,43 +56,44 @@
/* Enums */ /* Enums */
enum DACINDEX { enum DACINDEX {
M_CASSH, M_VCASSH,
M_VTH2, M_VTH2,
M_VRFSH, M_VRSHAPER,
M_VRFSHNPOL, M_VRSHAPER_N,
M_VIPRE_OUT, M_VIPRE_OUT,
M_VTH3, M_VTH3,
M_VTH1, M_VTH1,
M_VICIN, M_VICIN,
M_CAS, M_VCAS,
M_VRF, M_VRPREAMP,
M_VPL, M_VCAL_N,
M_VIPRE, M_VIPRE,
M_VIINSH, M_VISHAPER,
M_VPH, M_VCAL_P,
M_VTRIM, M_VTRIM,
M_VDCSH M_VDCSH,
M_VTHRESHOLD
}; };
#define DAC_NAMES \ #define DAC_NAMES \
"vcassh", "vth2", "vshaper", "vshaperneg", "vipre_out", "vth3", "vth1", \ "vcassh", "vth2", "vrshaper", "vrshaper_n", "vipre_out", "vth3", "vth1", \
"vicin", "vcas", "vpreamp", "vpl", "vipre", "viinsh", "vph", "vtrim", \ "vicin", "vcas", "vrpreamp", "vcal_n", "vipre", "vishaper", "vcal_p", \
"vdcsh" "vtrim", "vdcsh"
#define DEFAULT_DAC_VALS \ #define DEFAULT_DAC_VALS \
{ \ { \
1200, /* casSh */ \ 1200, /* casSh */ \
2800, /* Vth2 */ \ 2800, /* Vth2 */ \
1280, /* VrfSh */ \ 1280, /* Vrshaper */ \
2800, /* VrfShNpol */ \ 2800, /* Vrshaper_n */ \
1220, /* vIpreOut */ \ 1220, /* vIpreOut */ \
2800, /* Vth3 */ \ 2800, /* Vth3 */ \
2800, /* Vth1 */ \ 2800, /* Vth1 */ \
1708, /* vIcin */ \ 1708, /* vIcin */ \
1800, /* cas */ \ 1800, /* cas */ \
1100, /* Vrf */ \ 1100, /* Vrpreamp */ \
1100, /* VPL */ \ 1100, /* Vcal_n */ \
2624, /* vIpre */ \ 2624, /* vIpre */ \
1708, /* vIinSh */ \ 1708, /* vishaper */ \
1712, /* VPH */ \ 1712, /* Vcal_p */ \
2800, /* vTrim */ \ 2800, /* vTrim */ \
800 /* VdcSh */ \ 800 /* VdcSh */ \
}; };

View File

@ -751,23 +751,23 @@ int set_dac(int file_des) {
case HIGH_VOLTAGE: case HIGH_VOLTAGE:
break; break;
#elif EIGERD #elif EIGERD
case THRESHOLD: case VTHRESHOLD:
serverDacIndex = E_VTHRESHOLD; serverDacIndex = E_VTHRESHOLD;
break; break;
case SVP: case VSVP:
serverDacIndex = E_SVP; serverDacIndex = E_VSVP;
break; break;
case SVN: case VSVN:
serverDacIndex = E_SVN; serverDacIndex = E_VSVN;
break; break;
case VTR: case VTRIM:
serverDacIndex = E_VTR; serverDacIndex = E_VTRIM;
break; break;
case VRF: case VRPREAMP:
serverDacIndex = E_VRF; serverDacIndex = E_VRPREAMP;
break; break;
case VRS: case VRSHAPER:
serverDacIndex = E_VRS; serverDacIndex = E_VRSHAPER;
break; break;
case VTGSTV: case VTGSTV:
serverDacIndex = E_VTGSTV; serverDacIndex = E_VTGSTV;
@ -778,8 +778,8 @@ int set_dac(int file_des) {
case VCMP_LR: case VCMP_LR:
serverDacIndex = E_VCMP_LR; serverDacIndex = E_VCMP_LR;
break; break;
case CAL: case VCAL:
serverDacIndex = E_CAL; serverDacIndex = E_VCAL;
break; break;
case VCMP_RL: case VCMP_RL:
serverDacIndex = E_VCMP_RL; serverDacIndex = E_VCMP_RL;
@ -799,8 +799,8 @@ int set_dac(int file_des) {
case VCN: case VCN:
serverDacIndex = E_VCN; serverDacIndex = E_VCN;
break; break;
case VIS: case VISHAPER:
serverDacIndex = E_VIS; serverDacIndex = E_VISHAPER;
break; break;
case HIGH_VOLTAGE: case HIGH_VOLTAGE:
case IO_DELAY: case IO_DELAY:
@ -862,17 +862,17 @@ int set_dac(int file_des) {
#elif MYTHEN3D #elif MYTHEN3D
case HIGH_VOLTAGE: case HIGH_VOLTAGE:
break; break;
case CASSH: case VCASSH:
serverDacIndex = M_CASSH; serverDacIndex = M_VCASSH;
break; break;
case VTH2: case VTH2:
serverDacIndex = M_VTH2; serverDacIndex = M_VTH2;
break; break;
case SHAPER1: case VRSHAPER:
serverDacIndex = M_VRFSH; serverDacIndex = M_VRSHAPER;
break; break;
case SHAPER2: case VRSHAPER_N:
serverDacIndex = M_VRFSHNPOL; serverDacIndex = M_VRSHAPER_N;
break; break;
case VIPRE_OUT: case VIPRE_OUT:
serverDacIndex = M_VIPRE_OUT; serverDacIndex = M_VIPRE_OUT;
@ -880,36 +880,39 @@ int set_dac(int file_des) {
case VTH3: case VTH3:
serverDacIndex = M_VTH3; serverDacIndex = M_VTH3;
break; break;
case THRESHOLD: case VTH1:
serverDacIndex = M_VTH1; serverDacIndex = M_VTH1;
break; break;
case VICIN: case VICIN:
serverDacIndex = M_VICIN; serverDacIndex = M_VICIN;
break; break;
case CAS: case VCAS:
serverDacIndex = M_CAS; serverDacIndex = M_VCAS;
break; break;
case PREAMP: case VRPREAMP:
serverDacIndex = M_VRF; serverDacIndex = M_VRPREAMP;
break; break;
case CALIBRATION_PULSE: case VCAL_P:
serverDacIndex = M_VPH; serverDacIndex = M_VCAL_P;
break; break;
case VIPRE: case VIPRE:
serverDacIndex = M_VIPRE; serverDacIndex = M_VIPRE;
break; break;
case VIINSH: case VISHAPER:
serverDacIndex = M_VIINSH; serverDacIndex = M_VISHAPER;
break; break;
case VPL: case VCAL_N:
serverDacIndex = M_VPL; serverDacIndex = M_VCAL_N;
break; break;
case TRIMBIT_SIZE: case VTRIM:
serverDacIndex = M_VTRIM; serverDacIndex = M_VTRIM;
break; break;
case VDCSH: case VDCSH:
serverDacIndex = M_VDCSH; serverDacIndex = M_VDCSH;
break; break;
case VTHRESHOLD:
serverDacIndex = M_VTHRESHOLD;
break;
#elif GOTTHARD2D #elif GOTTHARD2D
case HIGH_VOLTAGE: case HIGH_VOLTAGE:
break; break;
@ -1198,7 +1201,7 @@ int set_dac(int file_des) {
case E_VCMP_LR: case E_VCMP_LR:
case E_VCMP_RL: case E_VCMP_RL:
case E_VCMP_RR: case E_VCMP_RR:
case E_VRF: case E_VRPREAMP:
case E_VCP: case E_VCP:
setSettings(UNDEFINED); setSettings(UNDEFINED);
LOG(logERROR, LOG(logERROR,

View File

@ -96,6 +96,9 @@ class Detector {
*/ */
void setDetectorSize(const defs::xy value); void setDetectorSize(const defs::xy value);
/** list of possible settings for this detector */
std::vector<defs::detectorSettings> getSettingsList() const;
/** [Jungfrau][Gotthard][Gotthard2] */ /** [Jungfrau][Gotthard][Gotthard2] */
Result<defs::detectorSettings> getSettings(Positions pos = {}) const; Result<defs::detectorSettings> getSettings(Positions pos = {}) const;
@ -309,6 +312,9 @@ class Detector {
*/ */
Result<int> getTemperature(defs::dacIndex index, Positions pos = {}) const; Result<int> getTemperature(defs::dacIndex index, Positions pos = {}) const;
/** gets list of dac indices for this detector */
std::vector<defs::dacIndex> getDacList() const;
Result<int> getDAC(defs::dacIndex index, bool mV, Positions pos = {}) const; Result<int> getDAC(defs::dacIndex index, bool mV, Positions pos = {}) const;
void setDAC(defs::dacIndex index, int value, bool mV, Positions pos = {}); void setDAC(defs::dacIndex index, int value, bool mV, Positions pos = {});
@ -585,6 +591,9 @@ class Detector {
Result<sls::IpAddr> getRxLastClientIP(Positions pos = {}) const; Result<sls::IpAddr> getRxLastClientIP(Positions pos = {}) const;
Result<std::array<pid_t, NUM_RX_THREAD_IDS>>
getRxThreadIds(Positions pos = {}) const;
/************************************************** /**************************************************
* * * *
* File * * File *

View File

@ -331,6 +331,25 @@ std::string CmdProxy::DetectorSize(int action) {
return os.str(); return os.str();
} }
std::string CmdProxy::SettingsList(int action) {
std::ostringstream os;
os << cmd << ' ';
if (action == defs::HELP_ACTION) {
os << "\n\tList of settings implemented for this detector" << '\n';
} else if (action == defs::GET_ACTION) {
if (!args.empty()) {
WrongNumberOfParameters(0);
}
auto t = det->getSettingsList();
os << ToString(t) << "\n";
} else if (action == defs::PUT_ACTION) {
throw sls::RuntimeError("Cannot put");
} else {
throw sls::RuntimeError("Unknown action");
}
return os.str();
}
std::string CmdProxy::GapPixels(int action) { std::string CmdProxy::GapPixels(int action) {
std::ostringstream os; std::ostringstream os;
os << cmd << ' '; os << cmd << ' ';
@ -877,7 +896,11 @@ std::string CmdProxy::DacList(int action) {
os << "\n\tGets the list of commands for every dac for this detector." os << "\n\tGets the list of commands for every dac for this detector."
<< '\n'; << '\n';
} else if (action == defs::GET_ACTION) { } else if (action == defs::GET_ACTION) {
os << sls::ToString(DacCommands()) << '\n'; if (!args.empty()) {
WrongNumberOfParameters(0);
}
auto t = det->getDacList();
os << ToString(t) << '\n';
} else if (action == defs::PUT_ACTION) { } else if (action == defs::PUT_ACTION) {
throw sls::RuntimeError("Cannot put"); throw sls::RuntimeError("Cannot put");
} else { } else {
@ -890,29 +913,32 @@ std::string CmdProxy::DacValues(int action) {
std::ostringstream os; std::ostringstream os;
os << cmd << ' '; os << cmd << ' ';
if (action == defs::HELP_ACTION) { if (action == defs::HELP_ACTION) {
os << "\n\tGets the list of commands for every dac for this detector." os << "[(optional unit) mv] \n\tGets the list of commands for every "
"dac for this detector."
<< '\n'; << '\n';
} else if (action == defs::GET_ACTION) { } else if (action == defs::GET_ACTION) {
std::vector<std::string> names = DacCommands(); bool mv = false;
std::vector<std::string> res(names.size()); if (args.size() == 1) {
std::vector<std::string> args; if (args[0] != "mv") {
for (size_t i = 0; i < names.size(); ++i) { throw sls::RuntimeError("Unknown argument " + args[0] +
// for multiple values for each command (to use ToString on vector) ". Did you mean mv?");
std::ostringstream each;
size_t spacepos = names[i].find(' ');
// chip test board (dac)
if (spacepos != std::string::npos) {
if (args.empty()) {
args.resize(1);
} }
args[0] = names[i].substr(spacepos + 1 - 1); mv = true;
names[i] = names[i].substr(0, spacepos); } else if (args.size() > 1) {
WrongNumberOfParameters(1);
} }
Call(names[i], args, det_id, action, each); auto t = det->getDacList();
res[i] = each.str(); os << '[';
res[i].pop_back(); // remove last \n character auto it = t.cbegin();
os << ToString(*it) << ' '
<< OutString(det->getDAC(*it++, mv, {det_id}))
<< (args.size() > 0 ? " mv" : "");
while (it != t.cend()) {
os << ", " << ToString(*it) << ' '
<< OutString(det->getDAC(*it++, mv, {det_id}))
<< (args.size() > 0 ? " mv" : "");
} }
os << sls::ToString(res) << '\n'; os << "]\n";
} else if (action == defs::PUT_ACTION) { } else if (action == defs::PUT_ACTION) {
throw sls::RuntimeError("Cannot put"); throw sls::RuntimeError("Cannot put");
} else { } else {
@ -921,53 +947,6 @@ std::string CmdProxy::DacValues(int action) {
return os.str(); return os.str();
} }
std::vector<std::string> CmdProxy::DacCommands() {
switch (det->getDetectorType().squash(defs::GENERIC)) {
case defs::EIGER:
return std::vector<std::string>{
"vsvp", "vtr", "vrf", "vrs", "vsvn", "vtgstv",
"vcmp_ll", "vcmp_lr", "vcal", "vcmp_rl", "rxb_rb", "rxb_lb",
"vcmp_rr", "vcp", "vcn", "vis", "vthreshold"};
break;
case defs::JUNGFRAU:
return std::vector<std::string>{"vb_comp", "vdd_prot", "vin_com",
"vref_prech", "vb_pixbuf", "vb_ds",
"vref_ds", "vref_comp"};
break;
case defs::GOTTHARD:
return std::vector<std::string>{"vref_ds", "vcascn_pb", "vcascp_pb",
"vout_cm", "vcasc_out", "vin_cm",
"vref_comp", "ib_test_c"};
break;
case defs::GOTTHARD2:
return std::vector<std::string>{
"vref_h_adc", "vb_comp_fe", "vb_comp_adc", "vcom_cds",
"vref_rstore", "vb_opa_1st", "vref_comp_fe", "vcom_adc1",
"vref_prech", "vref_l_adc", "vref_cds", "vb_cs",
"vb_opa_fd", "vcom_adc2"};
break;
case defs::MYTHEN3:
return std::vector<std::string>{
"vcassh", "vth2", "vshaper", "vshaperneg", "vipre_out", "vth3",
"vth1", "vicin", "vcas", "vpreamp", "vpl", "vipre",
"viinsh", "vph", "vtrim", "vdcsh"};
break;
case defs::MOENCH:
return std::vector<std::string>{"vbp_colbuf", "vipre", "vin_cm",
"vb_sda", "vcasc_sfp", "vout_cm",
"vipre_cds", "ibias_sfp"};
break;
case defs::CHIPTESTBOARD:
return std::vector<std::string>{
"dac 0", "dac 1", "dac 2", "dac 3", "dac 4", "dac 5",
"dac 6", "dac 7", "dac 8", "dac 9", "dac 10", "dac 11",
"dac 12", "dac 13", "dac 14", "dac 15", "dac 16", "dac 17"};
break;
default:
throw sls::RuntimeError("Unknown detector type.");
}
}
/* acquisition */ /* acquisition */
std::string CmdProxy::ReceiverStatus(int action) { std::string CmdProxy::ReceiverStatus(int action) {

View File

@ -478,8 +478,19 @@ class CmdProxy {
{"digitest", "imagetest"}, {"digitest", "imagetest"},
/** temperature */ /** temperature */
/** dacs */ /** dacs */
{"vtr", "vtrim"},
{"vrf", "vrpreamp"},
{"vrs", "vrshaper"},
{"vcall", "vcal"}, {"vcall", "vcal"},
{"vis", "vishaper"},
{"vshaper", "vrshaper"},
{"vpreamp", "vrpreamp"},
{"vshaperneg", "vrshaper_n"},
{"viinsh", "vishaper"},
{"vpl", "vcal_n"},
{"vph", "vcal_p"},
/* acquisition */ /* acquisition */
{"busy", "clearbusy"}, {"busy", "clearbusy"},
@ -562,6 +573,7 @@ class CmdProxy {
{"detectornumber", &CmdProxy::detectornumber}, {"detectornumber", &CmdProxy::detectornumber},
{"type", &CmdProxy::type}, {"type", &CmdProxy::type},
{"detsize", &CmdProxy::DetectorSize}, {"detsize", &CmdProxy::DetectorSize},
{"settingslist", &CmdProxy::SettingsList},
{"settings", &CmdProxy::settings}, {"settings", &CmdProxy::settings},
{"trimbits", &CmdProxy::trimbits}, {"trimbits", &CmdProxy::trimbits},
{"trimval", &CmdProxy::trimval}, {"trimval", &CmdProxy::trimval},
@ -608,9 +620,9 @@ class CmdProxy {
{"vthreshold", &CmdProxy::vthreshold}, {"vthreshold", &CmdProxy::vthreshold},
{"vsvp", &CmdProxy::vsvp}, {"vsvp", &CmdProxy::vsvp},
{"vsvn", &CmdProxy::vsvn}, {"vsvn", &CmdProxy::vsvn},
{"vtr", &CmdProxy::vtr}, {"vtrim", &CmdProxy::vtrim},
{"vrf", &CmdProxy::vrf}, {"vrpreamp", &CmdProxy::vrpreamp},
{"vrs", &CmdProxy::vrs}, {"vrshaper", &CmdProxy::vrshaper},
{"vtgstv", &CmdProxy::vtgstv}, {"vtgstv", &CmdProxy::vtgstv},
{"vcmp_ll", &CmdProxy::vcmp_ll}, {"vcmp_ll", &CmdProxy::vcmp_ll},
{"vcmp_lr", &CmdProxy::vcmp_lr}, {"vcmp_lr", &CmdProxy::vcmp_lr},
@ -621,7 +633,7 @@ class CmdProxy {
{"rxb_lb", &CmdProxy::rxb_lb}, {"rxb_lb", &CmdProxy::rxb_lb},
{"vcp", &CmdProxy::vcp}, {"vcp", &CmdProxy::vcp},
{"vcn", &CmdProxy::vcn}, {"vcn", &CmdProxy::vcn},
{"vis", &CmdProxy::vis}, {"vishaper", &CmdProxy::vishaper},
{"iodelay", &CmdProxy::iodelay}, {"iodelay", &CmdProxy::iodelay},
{"vref_ds", &CmdProxy::vref_ds}, {"vref_ds", &CmdProxy::vref_ds},
{"vcascn_pb", &CmdProxy::vcascn_pb}, {"vcascn_pb", &CmdProxy::vcascn_pb},
@ -631,18 +643,14 @@ class CmdProxy {
{"vin_cm", &CmdProxy::vin_cm}, {"vin_cm", &CmdProxy::vin_cm},
{"vref_comp", &CmdProxy::vref_comp}, {"vref_comp", &CmdProxy::vref_comp},
{"ib_test_c", &CmdProxy::ib_test_c}, {"ib_test_c", &CmdProxy::ib_test_c},
{"vpreamp", &CmdProxy::vpreamp}, {"vrshaper_n", &CmdProxy::vrshaper_n},
{"vshaper", &CmdProxy::vshaper},
{"vshaperneg", &CmdProxy::vshaperneg},
{"vipre", &CmdProxy::vipre}, {"vipre", &CmdProxy::vipre},
{"viinsh", &CmdProxy::viinsh},
{"vdcsh", &CmdProxy::vdcsh}, {"vdcsh", &CmdProxy::vdcsh},
{"vth1", &CmdProxy::vth1}, {"vth1", &CmdProxy::vth1},
{"vth2", &CmdProxy::vth2}, {"vth2", &CmdProxy::vth2},
{"vth3", &CmdProxy::vth3}, {"vth3", &CmdProxy::vth3},
{"vpl", &CmdProxy::vpl}, {"vcal_n", &CmdProxy::vcal_n},
{"vph", &CmdProxy::vph}, {"vcal_p", &CmdProxy::vcal_p},
{"vtrim", &CmdProxy::vtrim},
{"vcassh", &CmdProxy::vcassh}, {"vcassh", &CmdProxy::vcassh},
{"vcas", &CmdProxy::vcas}, {"vcas", &CmdProxy::vcas},
{"vicin", &CmdProxy::vicin}, {"vicin", &CmdProxy::vicin},
@ -729,6 +737,7 @@ class CmdProxy {
{"rx_realudpsocksize", &CmdProxy::rx_realudpsocksize}, {"rx_realudpsocksize", &CmdProxy::rx_realudpsocksize},
{"rx_lock", &CmdProxy::rx_lock}, {"rx_lock", &CmdProxy::rx_lock},
{"rx_lastclient", &CmdProxy::rx_lastclient}, {"rx_lastclient", &CmdProxy::rx_lastclient},
{"rx_threads", &CmdProxy::rx_threads},
/* File */ /* File */
{"fformat", &CmdProxy::fformat}, {"fformat", &CmdProxy::fformat},
@ -923,6 +932,7 @@ class CmdProxy {
std::string PackageVersion(int action); std::string PackageVersion(int action);
std::string ClientVersion(int action); std::string ClientVersion(int action);
std::string DetectorSize(int action); std::string DetectorSize(int action);
std::string SettingsList(int action);
std::string GapPixels(int action); std::string GapPixels(int action);
/* acquisition parameters */ /* acquisition parameters */
std::string acquire(int action); std::string acquire(int action);
@ -940,7 +950,6 @@ class CmdProxy {
std::string Dac(int action); std::string Dac(int action);
std::string DacList(int action); std::string DacList(int action);
std::string DacValues(int action); std::string DacValues(int action);
std::vector<std::string> DacCommands();
/* acquisition */ /* acquisition */
std::string ReceiverStatus(int action); std::string ReceiverStatus(int action);
std::string DetectorStatus(int action); std::string DetectorStatus(int action);
@ -1180,29 +1189,33 @@ class CmdProxy {
/* dacs */ /* dacs */
DAC_COMMAND(vthreshold, getDAC, setDAC, defs::THRESHOLD, DAC_COMMAND(vthreshold, getDAC, setDAC, defs::VTHRESHOLD,
"[dac or mv value][(optional unit) mv] \n\t[Eiger][Mythen3] " "[dac or mv value][(optional unit) mv] \n\t[Eiger][Mythen3] "
"Detector threshold voltage for single photon counters."); "Detector threshold voltage for single photon counters.");
DAC_COMMAND(vsvp, getDAC, setDAC, defs::SVP, DAC_COMMAND(vsvp, getDAC, setDAC, defs::VSVP,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? "); // TODO
DAC_COMMAND(vsvn, getDAC, setDAC, defs::SVN, DAC_COMMAND(vsvn, getDAC, setDAC, defs::VSVN,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? \n\t[Mythen3] voltage "
"to define feedback resistance of the first shaper"); // TODO
DAC_COMMAND(vtr, getDAC, setDAC, defs::VTR, DAC_COMMAND(vtrim, getDAC, setDAC, defs::VTRIM,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? \n\t[Mythen3] Dac for "
"the voltage defining the trim bit size."); // TODO
DAC_COMMAND(vrf, getDAC, setDAC, defs::VRF, DAC_COMMAND(vrpreamp, getDAC, setDAC, defs::VRPREAMP,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? \n\t[Mythen3] voltage "
"to define the preamplifier feedback resistance."); // TODO
DAC_COMMAND(vrs, getDAC, setDAC, defs::VRS, DAC_COMMAND(vrshaper, getDAC, setDAC, defs::VRSHAPER,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? \n\t[Mythen3] voltage to define feedback resistance of "
"the first shaper"); // TODO
DAC_COMMAND(vtgstv, getDAC, setDAC, defs::VTGSTV, DAC_COMMAND(vtgstv, getDAC, setDAC, defs::VTGSTV,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
@ -1216,7 +1229,7 @@ class CmdProxy {
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? "); // TODO
DAC_COMMAND(vcal, getDAC, setDAC, defs::CAL, DAC_COMMAND(vcal, getDAC, setDAC, defs::VCAL,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? "); // TODO
@ -1244,9 +1257,10 @@ class CmdProxy {
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? "); // TODO
DAC_COMMAND(vis, getDAC, setDAC, defs::VIS, DAC_COMMAND(vishaper, getDAC, setDAC, defs::VISHAPER,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
"?? "); // TODO "?? \n\t[Mythen3] Dac for "
"the bias current for the shaper."); // TODO
DAC_COMMAND(iodelay, getDAC, setDAC, defs::IO_DELAY, DAC_COMMAND(iodelay, getDAC, setDAC, defs::IO_DELAY,
"[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Eiger] Dac for "
@ -1284,15 +1298,7 @@ class CmdProxy {
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for "
"?? "); // TODO "?? "); // TODO
DAC_COMMAND(vpreamp, getDAC, setDAC, defs::PREAMP, DAC_COMMAND(vrshaper_n, getDAC, setDAC, defs::VRSHAPER_N,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage "
"to define the preamplifier feedback resistance.");
DAC_COMMAND(vshaper, getDAC, setDAC, defs::SHAPER1,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage "
"to define feedback resistance of the first shaper");
DAC_COMMAND(vshaperneg, getDAC, setDAC, defs::SHAPER2,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage "
"to define feedback resistance of the second shaper."); "to define feedback resistance of the second shaper.");
@ -1301,15 +1307,11 @@ class CmdProxy {
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the "
"preamplifier's input transistor current.\n\t[Moench] Dac for 1"); "preamplifier's input transistor current.\n\t[Moench] Dac for 1");
DAC_COMMAND(viinsh, getDAC, setDAC, defs::VIINSH,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"the bias current for the shaper.");
DAC_COMMAND(vdcsh, getDAC, setDAC, defs::VDCSH, DAC_COMMAND(vdcsh, getDAC, setDAC, defs::VDCSH,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"the reference (DC) voltage for the shaper."); "the reference (DC) voltage for the shaper.");
DAC_COMMAND(vth1, getDAC, setDAC, defs::THRESHOLD, DAC_COMMAND(vth1, getDAC, setDAC, defs::VTH1,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"first detector threshold voltage."); "first detector threshold voltage.");
@ -1321,23 +1323,19 @@ class CmdProxy {
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"third detector threshold voltage."); "third detector threshold voltage.");
DAC_COMMAND(vpl, getDAC, setDAC, defs::VPL, DAC_COMMAND(vcal_n, getDAC, setDAC, defs::VCAL_N,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"the low voltage for analog pulsing."); "the low voltage for analog pulsing.");
DAC_COMMAND(vph, getDAC, setDAC, defs::CALIBRATION_PULSE, DAC_COMMAND(vcal_p, getDAC, setDAC, defs::VCAL_P,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"the high voltage for analog pulsing."); "the high voltage for analog pulsing.");
DAC_COMMAND(vtrim, getDAC, setDAC, defs::TRIMBIT_SIZE, DAC_COMMAND(vcassh, getDAC, setDAC, defs::VCASSH,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"the voltage defining the trim bit size.");
DAC_COMMAND(vcassh, getDAC, setDAC, defs::CASSH,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"the shaper's cascode voltage."); "the shaper's cascode voltage.");
DAC_COMMAND(vcas, getDAC, setDAC, defs::CAS, DAC_COMMAND(vcas, getDAC, setDAC, defs::VCAS,
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for " "[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for "
"the preamplifier's cascode voltage."); "the preamplifier's cascode voltage.");
@ -1663,6 +1661,14 @@ class CmdProxy {
rx_lastclient, getRxLastClientIP, rx_lastclient, getRxLastClientIP,
"\n\tClient IP Address that last communicated with the receiver."); "\n\tClient IP Address that last communicated with the receiver.");
GET_COMMAND(
rx_threads, getRxThreadIds,
"\n\tGet thread ids from the receiver in order of [parent, tcp, "
"listener 0, "
"processor 0, streamer 0, listener 1, processor 1, streamer 1]. If no "
"streamer yet or there is no second interface, it gives 0 in its "
"place.");
/* File */ /* File */
INTEGER_COMMAND( INTEGER_COMMAND(

View File

@ -141,6 +141,38 @@ void Detector::setDetectorSize(const defs::xy value) {
pimpl->setNumberOfChannels(value); pimpl->setNumberOfChannels(value);
} }
std::vector<defs::detectorSettings> Detector::getSettingsList() const {
switch (getDetectorType().squash()) {
case defs::EIGER:
return std::vector<defs::detectorSettings>{
defs::STANDARD, defs::HIGHGAIN, defs::LOWGAIN, defs::VERYHIGHGAIN,
defs::VERYLOWGAIN};
case defs::GOTTHARD:
return std::vector<defs::detectorSettings>{
defs::HIGHGAIN, defs::DYNAMICGAIN, defs::LOWGAIN, defs::MEDIUMGAIN,
defs::VERYHIGHGAIN};
case defs::JUNGFRAU:
return std::vector<defs::detectorSettings>{
defs::DYNAMICGAIN, defs::DYNAMICHG0, defs::FIXGAIN1,
defs::FIXGAIN2, defs::FORCESWITCHG1, defs::FORCESWITCHG2};
case defs::GOTTHARD2:
return std::vector<defs::detectorSettings>{
defs::DYNAMICGAIN, defs::DYNAMICHG0, defs::FIXGAIN1,
defs::FIXGAIN2};
case defs::MOENCH:
return std::vector<defs::detectorSettings>{
defs::G1_HIGHGAIN, defs::G1_LOWGAIN,
defs::G2_HIGHCAP_HIGHGAIN, defs::G2_HIGHCAP_LOWGAIN,
defs::G2_LOWCAP_HIGHGAIN, defs::G2_LOWCAP_LOWGAIN,
defs::G4_HIGHGAIN, defs::G4_LOWGAIN};
case defs::CHIPTESTBOARD:
case defs::MYTHEN3:
throw RuntimeError("Settings not implemented for this detector");
default:
throw RuntimeError("Unknown detector type");
}
}
Result<defs::detectorSettings> Detector::getSettings(Positions pos) const { Result<defs::detectorSettings> Detector::getSettings(Positions pos) const {
return pimpl->Parallel(&Module::getSettings, pos); return pimpl->Parallel(&Module::getSettings, pos);
} }
@ -405,6 +437,53 @@ Result<int> Detector::getTemperature(defs::dacIndex index,
return res; return res;
} }
std::vector<defs::dacIndex> Detector::getDacList() const {
std::vector<defs::dacIndex> retval;
switch (getDetectorType().squash()) {
case defs::EIGER:
return std::vector<defs::dacIndex>{
defs::VSVP, defs::VTRIM, defs::VRPREAMP, defs::VRSHAPER,
defs::VSVN, defs::VTGSTV, defs::VCMP_LL, defs::VCMP_LR,
defs::VCAL, defs::VCMP_RL, defs::RXB_RB, defs::RXB_LB,
defs::VCMP_RR, defs::VCP, defs::VCN, defs::VISHAPER,
defs::VTHRESHOLD};
case defs::GOTTHARD:
return std::vector<defs::dacIndex>{
defs::VREF_DS, defs::VCASCN_PB, defs::VCASCP_PB, defs::VOUT_CM,
defs::VCASC_OUT, defs::VIN_CM, defs::VREF_COMP, defs::IB_TESTC};
case defs::JUNGFRAU:
return std::vector<defs::dacIndex>{
defs::VB_COMP, defs::VDD_PROT, defs::VIN_COM, defs::VREF_PRECH,
defs::VB_PIXBUF, defs::VB_DS, defs::VREF_DS, defs::VREF_COMP};
case defs::GOTTHARD2:
return std::vector<defs::dacIndex>{
defs::VREF_H_ADC, defs::VB_COMP_FE, defs::VB_COMP_ADC,
defs::VCOM_CDS, defs::VREF_RSTORE, defs::VB_OPA_1ST,
defs::VREF_COMP_FE, defs::VCOM_ADC1, defs::VREF_PRECH,
defs::VREF_L_ADC, defs::VREF_CDS, defs::VB_CS,
defs::VB_OPA_FD, defs::VCOM_ADC2};
case defs::MYTHEN3:
return std::vector<defs::dacIndex>{
defs::VCASSH, defs::VTH2, defs::VRSHAPER, defs::VRSHAPER_N,
defs::VIPRE_OUT, defs::VTH3, defs::VTH1, defs::VICIN,
defs::VCAS, defs::VRPREAMP, defs::VCAL_N, defs::VIPRE,
defs::VISHAPER, defs::VCAL_P, defs::VTRIM, defs::VDCSH,
defs::VTHRESHOLD};
case defs::MOENCH:
return std::vector<defs::dacIndex>{
defs::VBP_COLBUF, defs::VIPRE, defs::VIN_CM, defs::VB_SDA,
defs::VCASC_SFP, defs::VOUT_CM, defs::VIPRE_CDS, defs::IBIAS_SFP};
case defs::CHIPTESTBOARD:
for (int i = 0; i != 18; ++i) {
retval.push_back(static_cast<defs::dacIndex>(i));
}
break;
default:
throw RuntimeError("Unknown detector type");
}
return retval;
}
Result<int> Detector::getDAC(defs::dacIndex index, bool mV, Result<int> Detector::getDAC(defs::dacIndex index, bool mV,
Positions pos) const { Positions pos) const {
return pimpl->Parallel(&Module::setDAC, pos, -1, index, mV); return pimpl->Parallel(&Module::setDAC, pos, -1, index, mV);
@ -759,6 +838,11 @@ Result<sls::IpAddr> Detector::getRxLastClientIP(Positions pos) const {
return pimpl->Parallel(&Module::getReceiverLastClientIP, pos); return pimpl->Parallel(&Module::getReceiverLastClientIP, pos);
} }
Result<std::array<pid_t, NUM_RX_THREAD_IDS>>
Detector::getRxThreadIds(Positions pos) const {
return pimpl->Parallel(&Module::getReceiverThreadIds, pos);
}
// File // File
Result<defs::fileFormat> Detector::getFileFormat(Positions pos) const { Result<defs::fileFormat> Detector::getFileFormat(Positions pos) const {

View File

@ -289,7 +289,7 @@ template <typename Ret> Ret Module::sendToReceiver(int fnum) const {
<< sizeof(Ret) << "]"; << sizeof(Ret) << "]";
Ret retval{}; Ret retval{};
sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval)); sendToReceiver(fnum, nullptr, 0, &retval, sizeof(retval));
LOG(logDEBUG1) << "Got back: " << retval; LOG(logDEBUG1) << "Got back: " << ToString(retval);
return retval; return retval;
} }
@ -2614,6 +2614,11 @@ sls::IpAddr Module::getReceiverLastClientIP() const {
return sendToReceiver<sls::IpAddr>(F_GET_LAST_RECEIVER_CLIENT_IP); return sendToReceiver<sls::IpAddr>(F_GET_LAST_RECEIVER_CLIENT_IP);
} }
std::array<pid_t, NUM_RX_THREAD_IDS> Module::getReceiverThreadIds() const {
return sendToReceiver<std::array<pid_t, NUM_RX_THREAD_IDS>>(
F_GET_RECEIVER_THREAD_IDS);
}
void Module::exitReceiver() { void Module::exitReceiver() {
LOG(logDEBUG1) << "Sending exit command to receiver server"; LOG(logDEBUG1) << "Sending exit command to receiver server";
sendToReceiver(F_EXIT_RECEIVER, nullptr, nullptr); sendToReceiver(F_EXIT_RECEIVER, nullptr, nullptr);

View File

@ -1309,6 +1309,8 @@ class Module : public virtual slsDetectorDefs {
*/ */
sls::IpAddr getReceiverLastClientIP() const; sls::IpAddr getReceiverLastClientIP() const;
std::array<pid_t, NUM_RX_THREAD_IDS> getReceiverThreadIds() const;
/** /**
* Exits the receiver TCP server * Exits the receiver TCP server
*/ */

View File

@ -33,21 +33,21 @@ TEST_CASE("dac", "[.cmd][.dacs][.new]") {
// REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcal", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vcal", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_rl", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vcmp_rl", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_rr", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vcmp_rr", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("rxb_rb", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("rxb_rb", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET));
// jungfrau // jungfrau
REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vdd_prot", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdd_prot", {}, -1, GET));
@ -55,30 +55,30 @@ TEST_CASE("dac", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vref_prech", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_prech", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vb_pixbuf", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vb_pixbuf", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vb_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vb_ds", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET));
// gotthard // gotthard
// REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vcascn_pb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcascn_pb", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vcascp_pb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcascp_pb", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vout_cm", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vout_cm", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vcasc_out", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcasc_out", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vin_cm", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vin_cm", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET));
// mythen3 // mythen3
// REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vicin", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vicin", {}, -1, GET));

View File

@ -131,22 +131,22 @@ TEST_CASE("Setting and reading back EIGER dacs", "[.cmd][.dacs][.new]") {
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
if (det_type == defs::EIGER) { if (det_type == defs::EIGER) {
SECTION("vsvp") { test_dac(defs::SVP, "vsvp", 5); } SECTION("vsvp") { test_dac(defs::VSVP, "vsvp", 5); }
SECTION("vtr") { test_dac(defs::VRF, "vtr", 1200); } SECTION("vtrim") { test_dac(defs::VTRIM, "vtrim", 1200); }
SECTION("vrf") { test_dac(defs::VRF, "vrf", 1500); } SECTION("vrpreamp") { test_dac(defs::VRPREAMP, "vrpreamp", 1500); }
SECTION("vrs") { test_dac(defs::VRF, "vrs", 1510); } SECTION("vrshaper") { test_dac(defs::VRSHAPER, "vrshaper", 1510); }
SECTION("vsvn") { test_dac(defs::SVN, "vsvn", 3800); } SECTION("vsvn") { test_dac(defs::VSVN, "vsvn", 3800); }
SECTION("vtgstv") { test_dac(defs::VTGSTV, "vtgstv", 2550); } SECTION("vtgstv") { test_dac(defs::VTGSTV, "vtgstv", 2550); }
SECTION("vcmp_ll") { test_dac(defs::VCMP_LL, "vcmp_ll", 1400); } SECTION("vcmp_ll") { test_dac(defs::VCMP_LL, "vcmp_ll", 1400); }
SECTION("vcmp_lr") { test_dac(defs::VCMP_LR, "vcmp_lr", 1400); } SECTION("vcmp_lr") { test_dac(defs::VCMP_LR, "vcmp_lr", 1400); }
SECTION("vcal") { test_dac(defs::CAL, "vcal", 1400); } SECTION("vcal") { test_dac(defs::VCAL, "vcal", 1400); }
SECTION("vcmp_rl") { test_dac(defs::VCMP_RL, "vcmp_rl", 1400); } SECTION("vcmp_rl") { test_dac(defs::VCMP_RL, "vcmp_rl", 1400); }
SECTION("rxb_rb") { test_dac(defs::RXB_RB, "rxb_rb", 1400); } SECTION("rxb_rb") { test_dac(defs::RXB_RB, "rxb_rb", 1400); }
SECTION("rxb_lb") { test_dac(defs::RXB_LB, "rxb_lb", 1400); } SECTION("rxb_lb") { test_dac(defs::RXB_LB, "rxb_lb", 1400); }
SECTION("vcmp_rr") { test_dac(defs::VCMP_RR, "vcmp_rr", 1400); } SECTION("vcmp_rr") { test_dac(defs::VCMP_RR, "vcmp_rr", 1400); }
SECTION("vcp") { test_dac(defs::VCP, "vcp", 1400); } SECTION("vcp") { test_dac(defs::VCP, "vcp", 1400); }
SECTION("vcn") { test_dac(defs::VCN, "vcn", 1400); } SECTION("vcn") { test_dac(defs::VCN, "vcn", 1400); }
SECTION("vis") { test_dac(defs::VIS, "vis", 1400); } SECTION("vishaper") { test_dac(defs::VISHAPER, "vishaper", 1400); }
SECTION("iodelay") { test_dac(defs::IO_DELAY, "iodelay", 1400); } SECTION("iodelay") { test_dac(defs::IO_DELAY, "iodelay", 1400); }
SECTION("vthreshold") { SECTION("vthreshold") {
// Read out individual vcmp to be able to reset after // Read out individual vcmp to be able to reset after
@ -171,9 +171,9 @@ TEST_CASE("Setting and reading back EIGER dacs", "[.cmd][.dacs][.new]") {
// Reset dacs after test // Reset dacs after test
for (int i = 0; i != det.size(); ++i) { for (int i = 0; i != det.size(); ++i) {
det.setDAC(defs::VCMP_LL, vcmp_ll[i], false, {i}); det.setDAC(defs::VCMP_LL, vcmp_ll[i], false, {i});
det.setDAC(defs::VCMP_LR, vcmp_ll[i], false, {i}); det.setDAC(defs::VCMP_LR, vcmp_lr[i], false, {i});
det.setDAC(defs::VCMP_RL, vcmp_ll[i], false, {i}); det.setDAC(defs::VCMP_RL, vcmp_rl[i], false, {i});
det.setDAC(defs::VCMP_RR, vcmp_ll[i], false, {i}); det.setDAC(defs::VCMP_RR, vcmp_rr[i], false, {i});
det.setDAC(defs::VCP, vcp[i], false, {i}); det.setDAC(defs::VCP, vcp[i], false, {i});
} }
} }
@ -187,17 +187,17 @@ TEST_CASE("Setting and reading back EIGER dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET));
// mythen3 // mythen3
REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET));

View File

@ -37,9 +37,9 @@ TEST_CASE("Setting and reading back GOTTHARD dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET));
@ -50,7 +50,7 @@ TEST_CASE("Setting and reading back GOTTHARD dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET));
// jungfrau // jungfrau
REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET));
@ -62,17 +62,17 @@ TEST_CASE("Setting and reading back GOTTHARD dacs", "[.cmd][.dacs][.new]") {
// REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET));
// mythen3 // mythen3
REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET));

View File

@ -55,9 +55,9 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET));
@ -68,7 +68,7 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET));
// gotthard // gotthard
REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET));
@ -89,17 +89,17 @@ TEST_CASE("Setting and reading back GOTTHARD2 dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET));
// mythen3 // mythen3
REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET));

View File

@ -36,9 +36,9 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET));
@ -49,7 +49,7 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET));
// gotthard // gotthard
// REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET));
@ -61,17 +61,17 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs][.new]") {
// REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET));
// mythen3 // mythen3
REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET));

View File

@ -40,9 +40,9 @@ TEST_CASE("Setting and reading back MOENCH dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vthreshold", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET));
@ -53,7 +53,7 @@ TEST_CASE("Setting and reading back MOENCH dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET));
// jungfrau // jungfrau
REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vb_comp", {}, -1, GET));
@ -74,17 +74,17 @@ TEST_CASE("Setting and reading back MOENCH dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_comp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("ib_test_c", {}, -1, GET));
// mythen3 // mythen3
REQUIRE_THROWS(proxy.Call("vpreamp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaper", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vshaperneg", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vrshaper_n", {}, -1, GET));
// REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vipre", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("viinsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vdcsh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth1", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth2", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vth3", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vpl", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_n", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vph", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcal_p", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcassh", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcas", {}, -1, GET));

View File

@ -25,28 +25,54 @@ TEST_CASE("Setting and reading back MYTHEN3 dacs", "[.cmd][.dacs][.new]") {
CmdProxy proxy(&det); CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash(); auto det_type = det.getDetectorType().squash();
if (det_type == defs::MYTHEN3) { if (det_type == defs::MYTHEN3) {
SECTION("vcassh") { test_dac(defs::CASSH, "vcassh", 1200); } SECTION("vcassh") { test_dac(defs::VCASSH, "vcassh", 1200); }
SECTION("vth2") { test_dac(defs::VTH2, "vth2", 2800); } SECTION("vth2") { test_dac(defs::VTH2, "vth2", 2800); }
SECTION("vshaper") { test_dac(defs::SHAPER1, "vshaper", 1280); } SECTION("vrshaper") { test_dac(defs::VRSHAPER, "vrshaper", 1280); }
SECTION("vshaperneg") { test_dac(defs::SHAPER2, "vshaperneg", 2800); } SECTION("vrshaper_n") {
test_dac(defs::VRSHAPER_N, "vrshaper_n", 2800);
}
SECTION("vipre_out") { test_dac(defs::VIPRE_OUT, "vipre_out", 1220); } SECTION("vipre_out") { test_dac(defs::VIPRE_OUT, "vipre_out", 1220); }
SECTION("vth3") { test_dac(defs::VTH3, "vth3", 2800); } SECTION("vth3") { test_dac(defs::VTH3, "vth3", 2800); }
SECTION("vth1") { test_dac(defs::THRESHOLD, "vth1", 2880); } SECTION("vth1") { test_dac(defs::VTH1, "vth1", 2880); }
SECTION("vicin") { test_dac(defs::VICIN, "vicin", 1708); } SECTION("vicin") { test_dac(defs::VICIN, "vicin", 1708); }
SECTION("vcas") { test_dac(defs::CAS, "vcas", 1800); } SECTION("vcas") { test_dac(defs::VCAS, "vcas", 1800); }
SECTION("vpreamp") { test_dac(defs::PREAMP, "vpreamp", 1100); } SECTION("vrpreamp") { test_dac(defs::VRPREAMP, "vrpreamp", 1100); }
SECTION("vpl") { test_dac(defs::VPL, "vpl", 1100); } SECTION("vcal_n") { test_dac(defs::VCAL_N, "vcal_n", 1100); }
SECTION("vipre") { test_dac(defs::VIPRE, "vipre", 2624); } SECTION("vipre") { test_dac(defs::VIPRE, "vipre", 2624); }
SECTION("viinsh") { test_dac(defs::VIINSH, "viinsh", 1708); } SECTION("vishaper") { test_dac(defs::VISHAPER, "vishaper", 1708); }
SECTION("vph") { test_dac(defs::CALIBRATION_PULSE, "vph", 1712); } SECTION("vcal_p") { test_dac(defs::VCAL_P, "vcal_p", 1712); }
SECTION("vtrim") { test_dac(defs::TRIMBIT_SIZE, "vtrim", 2800); } SECTION("vtrim") { test_dac(defs::VTRIM, "vtrim", 2800); }
SECTION("vdcsh") { test_dac(defs::VDCSH, "vdcsh", 800); } SECTION("vdcsh") { test_dac(defs::VDCSH, "vdcsh", 800); }
SECTION("vthreshold") {
// Read out individual vcmp to be able to reset after
// the test is done
auto vth1 = det.getDAC(defs::VTH1, false);
auto vth2 = det.getDAC(defs::VTH2, false);
auto vth3 = det.getDAC(defs::VTH3, false);
{
std::ostringstream oss;
proxy.Call("vthreshold", {"1234"}, -1, PUT, oss);
REQUIRE(oss.str() == "vthreshold 1234\n");
}
{
std::ostringstream oss;
proxy.Call("vthreshold", {}, -1, GET, oss);
REQUIRE(oss.str() == "vthreshold 1234\n");
}
// Reset dacs after test
for (int i = 0; i != det.size(); ++i) {
det.setDAC(defs::VTH1, vth1[i], false, {i});
det.setDAC(defs::VTH2, vth2[i], false, {i});
det.setDAC(defs::VTH3, vth3[i], false, {i});
}
}
REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vsvn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtr", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vtrim", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrf", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vrpreamp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vrs", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vrshaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vtgstv", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_ll", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcmp_lr", {}, -1, GET));
@ -57,7 +83,7 @@ TEST_CASE("Setting and reading back MYTHEN3 dacs", "[.cmd][.dacs][.new]") {
REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("rxb_lb", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcp", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcn", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vis", {}, -1, GET)); // REQUIRE_THROWS(proxy.Call("vishaper", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("iodelay", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vref_ds", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("vcascn_pb", {}, -1, GET)); REQUIRE_THROWS(proxy.Call("vcascn_pb", {}, -1, GET));

View File

@ -372,6 +372,13 @@ TEST_CASE("rx_lastclient", "[.cmd][.rx][.new]") {
} }
} }
TEST_CASE("rx_threads", "[.cmd][.rx][.new]") {
Detector det;
CmdProxy proxy(&det);
std::ostringstream oss;
REQUIRE_NOTHROW(proxy.Call("rx_threads", {}, -1, GET, oss));
}
/* File */ /* File */
TEST_CASE("fformat", "[.cmd][.new]") { TEST_CASE("fformat", "[.cmd][.new]") {

View File

@ -126,6 +126,18 @@ TEST_CASE("detsize", "[.cmd][.new]") {
REQUIRE_NOTHROW(proxy.Call("detsize", {}, -1, GET)); REQUIRE_NOTHROW(proxy.Call("detsize", {}, -1, GET));
} }
TEST_CASE("settingslist", "[.cmd][.new]") {
Detector det;
CmdProxy proxy(&det);
auto det_type = det.getDetectorType().squash();
if (det_type == defs::CHIPTESTBOARD || det_type == defs::MYTHEN3) {
REQUIRE_THROWS(proxy.Call("settingslist", {}, -1, GET));
} else {
REQUIRE_NOTHROW(proxy.Call("settingslist", {}, -1, GET));
REQUIRE_THROWS(proxy.Call("settingslist", {}, -1, PUT));
}
}
TEST_CASE("settings", "[.cmd][.new]") { TEST_CASE("settings", "[.cmd][.new]") {
Detector det; Detector det;
CmdProxy proxy(&det); CmdProxy proxy(&det);

View File

@ -36,6 +36,7 @@ ClientInterface::ClientInterface(int portNumber)
portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2), portNumber(portNumber > 0 ? portNumber : DEFAULT_PORTNO + 2),
server(portNumber) { server(portNumber) {
functionTable(); functionTable();
parentThreadId = syscall(SYS_gettid);
// start up tcp thread // start up tcp thread
tcpThread = tcpThread =
sls::make_unique<std::thread>(&ClientInterface::startTCPServer, this); sls::make_unique<std::thread>(&ClientInterface::startTCPServer, this);
@ -71,8 +72,8 @@ void ClientInterface::registerCallBackRawDataModifyReady(
} }
void ClientInterface::startTCPServer() { void ClientInterface::startTCPServer() {
LOG(logINFOBLUE) << "Created [ TCP server Tid: " << syscall(SYS_gettid) tcpThreadId = syscall(SYS_gettid);
<< "]"; LOG(logINFOBLUE) << "Created [ TCP server Tid: " << tcpThreadId << "]";
LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber LOG(logINFO) << "SLS Receiver starting TCP Server on port " << portNumber
<< '\n'; << '\n';
// server = sls::make_unique<sls::ServerSocket>(portNumber); // server = sls::make_unique<sls::ServerSocket>(portNumber);
@ -102,8 +103,7 @@ void ClientInterface::startTCPServer() {
if (receiver) { if (receiver) {
receiver->shutDownUDPSockets(); receiver->shutDownUDPSockets();
} }
LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << syscall(SYS_gettid) LOG(logINFOBLUE) << "Exiting [ TCP server Tid: " << tcpThreadId << "]";
<< "]";
} }
// clang-format off // clang-format off
@ -199,6 +199,7 @@ int ClientInterface::functionTable(){
flist[F_GET_RECEIVER_PROGRESS] = &ClientInterface::get_progress; flist[F_GET_RECEIVER_PROGRESS] = &ClientInterface::get_progress;
flist[F_SET_RECEIVER_NUM_GATES] = &ClientInterface::set_num_gates; flist[F_SET_RECEIVER_NUM_GATES] = &ClientInterface::set_num_gates;
flist[F_SET_RECEIVER_GATE_DELAY] = &ClientInterface::set_gate_delay; flist[F_SET_RECEIVER_GATE_DELAY] = &ClientInterface::set_gate_delay;
flist[F_GET_RECEIVER_THREAD_IDS] = &ClientInterface::get_thread_ids;
for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) { for (int i = NUM_DET_FUNCTIONS + 1; i < NUM_REC_FUNCTIONS ; i++) {
LOG(logDEBUG1) << "function fnum: " << i << " (" << LOG(logDEBUG1) << "function fnum: " << i << " (" <<
@ -564,6 +565,8 @@ void ClientInterface::setDetectorType(detectorType arg) {
if (rawDataModifyReadyCallBack != nullptr) if (rawDataModifyReadyCallBack != nullptr)
impl()->registerCallBackRawDataModifyReady(rawDataModifyReadyCallBack, impl()->registerCallBackRawDataModifyReady(rawDataModifyReadyCallBack,
pRawDataReady); pRawDataReady);
impl()->setThreadIds(parentThreadId, tcpThreadId);
} }
int ClientInterface::set_roi(Interface &socket) { int ClientInterface::set_roi(Interface &socket) {
@ -1747,3 +1750,9 @@ int ClientInterface::set_gate_delay(Interface &socket) {
} }
return socket.Send(OK); return socket.Send(OK);
} }
int ClientInterface::get_thread_ids(Interface &socket) {
auto retval = impl()->getThreadIds();
LOG(logDEBUG1) << "thread ids retval: " << sls::ToString(retval);
return socket.sendResult(retval);
}

View File

@ -155,6 +155,7 @@ class ClientInterface : private virtual slsDetectorDefs {
int get_progress(sls::ServerInterface &socket); int get_progress(sls::ServerInterface &socket);
int set_num_gates(sls::ServerInterface &socket); int set_num_gates(sls::ServerInterface &socket);
int set_gate_delay(sls::ServerInterface &socket); int set_gate_delay(sls::ServerInterface &socket);
int get_thread_ids(sls::ServerInterface &socket);
Implementation *impl() { Implementation *impl() {
if (receiver != nullptr) { if (receiver != nullptr) {
@ -179,4 +180,7 @@ class ClientInterface : private virtual slsDetectorDefs {
void (*rawDataModifyReadyCallBack)(char *, char *, uint32_t &, void (*rawDataModifyReadyCallBack)(char *, char *, uint32_t &,
void *) = nullptr; void *) = nullptr;
void *pRawDataReady{nullptr}; void *pRawDataReady{nullptr};
pid_t parentThreadId{0};
pid_t tcpThreadId{0};
}; };

View File

@ -31,48 +31,29 @@ HDF5File::HDF5File(int ind, uint32_t *maxf, int *nd, std::string *fname,
parameterNames.clear(); parameterNames.clear();
parameterDataTypes.clear(); parameterDataTypes.clear();
parameterNames.push_back("frame number"); parameterNames = std::vector<std::string>{
parameterDataTypes.push_back(PredType::STD_U64LE); "frame number",
"exp length or sub exposure time",
parameterNames.push_back("exp length or sub exposure time"); "packets caught",
parameterDataTypes.push_back(PredType::STD_U32LE); "bunch id",
"timestamp",
parameterNames.push_back("packets caught"); "mod id",
parameterDataTypes.push_back(PredType::STD_U32LE); "row",
"column",
parameterNames.push_back("bunch id"); "reserved",
parameterDataTypes.push_back(PredType::STD_U64LE); "debug",
"round robin number",
parameterNames.push_back("timestamp"); "detector type",
parameterDataTypes.push_back(PredType::STD_U64LE); "detector header version",
"packets caught bit mask",
parameterNames.push_back("mod id"); };
parameterDataTypes.push_back(PredType::STD_U16LE);
parameterNames.push_back("row");
parameterDataTypes.push_back(PredType::STD_U16LE);
parameterNames.push_back("column");
parameterDataTypes.push_back(PredType::STD_U16LE);
parameterNames.push_back("reserved");
parameterDataTypes.push_back(PredType::STD_U16LE);
parameterNames.push_back("debug");
parameterDataTypes.push_back(PredType::STD_U32LE);
parameterNames.push_back("round robin number");
parameterDataTypes.push_back(PredType::STD_U16LE);
parameterNames.push_back("detector type");
parameterDataTypes.push_back(PredType::STD_U8LE);
parameterNames.push_back("detector header version");
parameterDataTypes.push_back(PredType::STD_U8LE);
parameterNames.push_back("packets caught bit mask");
StrType strdatatype(PredType::C_S1, sizeof(bitset_storage)); StrType strdatatype(PredType::C_S1, sizeof(bitset_storage));
parameterDataTypes.push_back(strdatatype); parameterDataTypes = std::vector<DataType>{
PredType::STD_U64LE, PredType::STD_U32LE, PredType::STD_U32LE,
PredType::STD_U64LE, PredType::STD_U64LE, PredType::STD_U16LE,
PredType::STD_U16LE, PredType::STD_U16LE, PredType::STD_U16LE,
PredType::STD_U32LE, PredType::STD_U16LE, PredType::STD_U8LE,
PredType::STD_U8LE, strdatatype};
} }
HDF5File::~HDF5File() { CloseAllFiles(); } HDF5File::~HDF5File() { CloseAllFiles(); }
@ -461,8 +442,8 @@ void HDF5File::CreateDataFile() {
paralist.setChunk(1, chunkpara_dims); paralist.setChunk(1, chunkpara_dims);
for (unsigned int i = 0; i < parameterNames.size(); ++i) { for (unsigned int i = 0; i < parameterNames.size(); ++i) {
DataSet *ds = new DataSet( DataSet *ds = new DataSet(filefd->createDataSet(
filefd->createDataSet(parameterNames[i], parameterDataTypes[i], parameterNames[i].c_str(), parameterDataTypes[i],
*dataspace_para, paralist)); *dataspace_para, paralist));
dataset_para.push_back(ds); dataset_para.push_back(ds);
} }
@ -1011,7 +992,7 @@ void HDF5File::CreateVirtualDataFile(uint32_t maxFramesPerFile, uint64_t numf) {
for (unsigned int k = 0; k < parameterNames.size(); ++k) { for (unsigned int k = 0; k < parameterNames.size(); ++k) {
if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para,
relative_srcFileName.c_str(), relative_srcFileName.c_str(),
parameterNames[k], parameterNames[k].c_str(),
srcDataspace_para) < 0) { srcDataspace_para) < 0) {
throw sls::RuntimeError( throw sls::RuntimeError(
"Could not set mapping for paramter " + "Could not set mapping for paramter " +
@ -1043,7 +1024,7 @@ void HDF5File::CreateVirtualDataFile(uint32_t maxFramesPerFile, uint64_t numf) {
// virtual parameter dataset // virtual parameter dataset
for (unsigned int i = 0; i < parameterNames.size(); ++i) { for (unsigned int i = 0; i < parameterNames.size(); ++i) {
hid_t vdsdataset_para = H5Dcreate2( hid_t vdsdataset_para = H5Dcreate2(
virtualfd, parameterNames[i], virtualfd, parameterNames[i].c_str(),
GetDataTypeinC(parameterDataTypes[i]), vdsDataspace_para, GetDataTypeinC(parameterDataTypes[i]), vdsDataspace_para,
H5P_DEFAULT, dcpl_para[i], H5P_DEFAULT); H5P_DEFAULT, dcpl_para[i], H5P_DEFAULT);
if (vdsdataset_para < 0) if (vdsdataset_para < 0)
@ -1134,9 +1115,8 @@ void HDF5File::LinkVirtualInMaster(std::string fname, std::string dsetname) {
(std::string(parameterNames[i])).c_str()); (std::string(parameterNames[i])).c_str());
if (H5Lcreate_external(relative_virtualfname.c_str(), if (H5Lcreate_external(relative_virtualfname.c_str(),
(std::string(parameterNames[i])).c_str(), parameterNames[i].c_str(), mfd, linkname,
mfd, linkname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) {
H5P_DEFAULT) < 0) {
H5Fclose(mfd); H5Fclose(mfd);
mfd = 0; mfd = 0;
throw sls::RuntimeError( throw sls::RuntimeError(

View File

@ -84,7 +84,7 @@ class HDF5File : private virtual slsDetectorDefs, public File {
uint64_t numActualPacketsInFile; uint64_t numActualPacketsInFile;
int numFilesinAcquisition; int numFilesinAcquisition;
std::vector<const char *> parameterNames; std::vector<std::string> parameterNames;
std::vector<DataType> parameterDataTypes; std::vector<DataType> parameterDataTypes;
DataSpace *dataspace_para; DataSpace *dataspace_para;
std::vector<DataSet *> dataset_para; std::vector<DataSet *> dataset_para;

View File

@ -445,6 +445,37 @@ void Implementation::setFramePaddingEnable(const bool i) {
LOG(logINFO) << "Frame Padding: " << framePadding; LOG(logINFO) << "Frame Padding: " << framePadding;
} }
void Implementation::setThreadIds(const pid_t parentTid, const pid_t tcpTid) {
parentThreadId = parentTid;
tcpThreadId = tcpTid;
}
std::array<pid_t, NUM_RX_THREAD_IDS> Implementation::getThreadIds() const {
LOG(logDEBUG3) << __SHORT_AT__ << " called";
std::array<pid_t, NUM_RX_THREAD_IDS> retval{};
int id = 0;
retval[id++] = parentThreadId;
retval[id++] = tcpThreadId;
retval[id++] = listener[0]->GetThreadId();
retval[id++] = dataProcessor[0]->GetThreadId();
if (dataStreamEnable) {
retval[id++] = dataStreamer[0]->GetThreadId();
} else {
retval[id++] = 0;
}
if (numThreads == 2) {
retval[id++] = listener[1]->GetThreadId();
retval[id++] = dataProcessor[1]->GetThreadId();
if (dataStreamEnable) {
retval[id++] = dataStreamer[1]->GetThreadId();
} else {
retval[id++] = 0;
}
}
return retval;
}
/************************************************** /**************************************************
* * * *
* File Parameters * * File Parameters *

View File

@ -42,6 +42,8 @@ class Implementation : private virtual slsDetectorDefs {
void setFrameDiscardPolicy(const frameDiscardPolicy i); void setFrameDiscardPolicy(const frameDiscardPolicy i);
bool getFramePaddingEnable() const; bool getFramePaddingEnable() const;
void setFramePaddingEnable(const bool i); void setFramePaddingEnable(const bool i);
void setThreadIds(const pid_t parentTid, const pid_t tcpTid);
std::array<pid_t, NUM_RX_THREAD_IDS> getThreadIds() const;
/************************************************** /**************************************************
* * * *
@ -269,6 +271,8 @@ class Implementation : private virtual slsDetectorDefs {
uint32_t fifoDepth; uint32_t fifoDepth;
frameDiscardPolicy frameDiscardMode; frameDiscardPolicy frameDiscardMode;
bool framePadding; bool framePadding;
pid_t parentThreadId;
pid_t tcpThreadId;
// file parameters // file parameters
fileFormat fileFormatType; fileFormat fileFormatType;

View File

@ -28,6 +28,8 @@ ThreadObject::~ThreadObject() {
sem_destroy(&semaphore); sem_destroy(&semaphore);
} }
pid_t ThreadObject::GetThreadId() const { return threadId; }
bool ThreadObject::IsRunning() const { return runningFlag; } bool ThreadObject::IsRunning() const { return runningFlag; }
void ThreadObject::StartRunning() { runningFlag = true; } void ThreadObject::StartRunning() { runningFlag = true; }
@ -35,8 +37,9 @@ void ThreadObject::StartRunning() { runningFlag = true; }
void ThreadObject::StopRunning() { runningFlag = false; } void ThreadObject::StopRunning() { runningFlag = false; }
void ThreadObject::RunningThread() { void ThreadObject::RunningThread() {
threadId = syscall(SYS_gettid);
LOG(logINFOBLUE) << "Created [ " << type << "Thread " << index LOG(logINFOBLUE) << "Created [ " << type << "Thread " << index
<< ", Tid: " << syscall(SYS_gettid) << "]"; << ", Tid: " << threadId << "]";
while (!killThread) { while (!killThread) {
while (IsRunning()) { while (IsRunning()) {
ThreadExecution(); ThreadExecution();
@ -45,7 +48,8 @@ void ThreadObject::RunningThread() {
sem_wait(&semaphore); sem_wait(&semaphore);
} }
LOG(logINFOBLUE) << "Exiting [ " << type << " Thread " << index LOG(logINFOBLUE) << "Exiting [ " << type << " Thread " << index
<< ", Tid: " << syscall(SYS_gettid) << "]"; << ", Tid: " << threadId << "]";
threadId = 0;
} }
void ThreadObject::Continue() { sem_post(&semaphore); } void ThreadObject::Continue() { sem_post(&semaphore); }

View File

@ -25,10 +25,12 @@ class ThreadObject : private virtual slsDetectorDefs {
std::thread threadObject; std::thread threadObject;
sem_t semaphore; sem_t semaphore;
const std::string type; const std::string type;
pid_t threadId{0};
public: public:
ThreadObject(int threadIndex, std::string threadType); ThreadObject(int threadIndex, std::string threadType);
virtual ~ThreadObject(); virtual ~ThreadObject();
pid_t GetThreadId() const;
bool IsRunning() const; bool IsRunning() const;
void StartRunning(); void StartRunning();
void StopRunning(); void StopRunning();

View File

@ -34,6 +34,8 @@ std::string ToString(const defs::externalSignalFlag s);
std::string ToString(const defs::readoutMode s); std::string ToString(const defs::readoutMode s);
std::string ToString(const defs::frameModeType s); std::string ToString(const defs::frameModeType s);
std::string ToString(const defs::detectorModeType s); std::string ToString(const defs::detectorModeType s);
std::string ToString(const defs::dacIndex s);
std::string ToString(const std::vector<defs::dacIndex> &vec);
std::string ToString(const defs::burstMode s); std::string ToString(const defs::burstMode s);
std::string ToString(const defs::timingSourceType s); std::string ToString(const defs::timingSourceType s);
@ -261,4 +263,13 @@ ToString(const T &obj) {
return obj.str(); return obj.str();
} }
template <typename T>
std::vector<T> StringTo(const std::vector<std::string>& strings){
std::vector<T> result;
result.reserve(strings.size());
for (const auto& s : strings)
result.push_back(StringTo<T>(s));
return result;
}
} // namespace sls } // namespace sls

View File

@ -64,6 +64,8 @@
#define DEFAULT_STREAMING_TIMER_IN_MS 200 #define DEFAULT_STREAMING_TIMER_IN_MS 200
#define NUM_RX_THREAD_IDS 8
#ifdef __cplusplus #ifdef __cplusplus
class slsDetectorDefs { class slsDetectorDefs {
public: public:
@ -230,14 +232,42 @@ typedef struct {
detector dacs indexes detector dacs indexes
*/ */
enum dacIndex { enum dacIndex {
THRESHOLD, DAC_0,
CALIBRATION_PULSE, DAC_1,
TRIMBIT_SIZE, DAC_2,
PREAMP, DAC_3,
SHAPER1, DAC_4,
SHAPER2, DAC_5,
TEMPERATURE_ADC, DAC_6,
TEMPERATURE_FPGA, DAC_7,
DAC_8,
DAC_9,
DAC_10,
DAC_11,
DAC_12,
DAC_13,
DAC_14,
DAC_15,
DAC_16,
DAC_17,
VSVP,
VTRIM,
VRPREAMP,
VRSHAPER,
VSVN,
VTGSTV,
VCMP_LL,
VCMP_LR,
VCAL,
VCMP_RL,
RXB_RB,
RXB_LB,
VCMP_RR,
VCP,
VCN,
VISHAPER,
VTHRESHOLD,
IO_DELAY,
VREF_DS, VREF_DS,
VCASCN_PB, VCASCN_PB,
VCASCP_PB, VCASCP_PB,
@ -246,42 +276,12 @@ typedef struct {
VIN_CM, VIN_CM,
VREF_COMP, VREF_COMP,
IB_TESTC, IB_TESTC,
SVP, VB_COMP,
SVN, VDD_PROT,
VTR, VIN_COM,
VRF, VREF_PRECH,
VRS, VB_PIXBUF,
VTGSTV, VB_DS,
VCMP_LL,
VCMP_LR,
CAL,
VCMP_RL,
VCMP_RR,
RXB_RB,
RXB_LB,
VCP,
VCN,
VIS,
IO_DELAY,
ADC_VPP,
HIGH_VOLTAGE,
TEMPERATURE_FPGAEXT,
TEMPERATURE_10GE,
TEMPERATURE_DCDC,
TEMPERATURE_SODL,
TEMPERATURE_SODR,
TEMPERATURE_FPGA2,
TEMPERATURE_FPGA3,
VIPRE,
VIINSH,
VDCSH,
VTH2,
VPL,
VTH3,
CASSH,
CAS,
VICIN,
VIPRE_OUT,
VREF_H_ADC, VREF_H_ADC,
VB_COMP_FE, VB_COMP_FE,
VB_COMP_ADC, VB_COMP_ADC,
@ -290,22 +290,39 @@ typedef struct {
VB_OPA_1ST, VB_OPA_1ST,
VREF_COMP_FE, VREF_COMP_FE,
VCOM_ADC1, VCOM_ADC1,
VREF_PRECH,
VREF_L_ADC, VREF_L_ADC,
VREF_CDS, VREF_CDS,
VB_CS, VB_CS,
VB_OPA_FD, VB_OPA_FD,
VCOM_ADC2, VCOM_ADC2,
VB_DS, VCASSH,
VB_COMP, VTH2,
VB_PIXBUF, VRSHAPER_N,
VIN_COM, VIPRE_OUT,
VDD_PROT, VTH3,
VTH1,
VICIN,
VCAS,
VCAL_N,
VIPRE,
VCAL_P,
VDCSH,
VBP_COLBUF, VBP_COLBUF,
VB_SDA, VB_SDA,
VCASC_SFP, VCASC_SFP,
VIPRE_CDS, VIPRE_CDS,
IBIAS_SFP, IBIAS_SFP,
ADC_VPP,
HIGH_VOLTAGE,
TEMPERATURE_ADC,
TEMPERATURE_FPGA,
TEMPERATURE_FPGAEXT,
TEMPERATURE_10GE,
TEMPERATURE_DCDC,
TEMPERATURE_SODL,
TEMPERATURE_SODR,
TEMPERATURE_FPGA2,
TEMPERATURE_FPGA3,
V_POWER_A = 100, V_POWER_A = 100,
V_POWER_B = 101, V_POWER_B = 101,
V_POWER_C = 102, V_POWER_C = 102,

View File

@ -303,6 +303,7 @@ enum detFuncs {
F_SETUP_RECEIVER, F_SETUP_RECEIVER,
F_SET_RECEIVER_NUM_GATES, F_SET_RECEIVER_NUM_GATES,
F_SET_RECEIVER_GATE_DELAY, F_SET_RECEIVER_GATE_DELAY,
F_GET_RECEIVER_THREAD_IDS,
NUM_REC_FUNCTIONS NUM_REC_FUNCTIONS
}; };
@ -607,6 +608,7 @@ const char* getFunctionNameFromEnum(enum detFuncs func) {
case F_SETUP_RECEIVER: return "F_SETUP_RECEIVER"; case F_SETUP_RECEIVER: return "F_SETUP_RECEIVER";
case F_SET_RECEIVER_NUM_GATES: return "F_SET_RECEIVER_NUM_GATES"; case F_SET_RECEIVER_NUM_GATES: return "F_SET_RECEIVER_NUM_GATES";
case F_SET_RECEIVER_GATE_DELAY: return "F_SET_RECEIVER_GATE_DELAY"; case F_SET_RECEIVER_GATE_DELAY: return "F_SET_RECEIVER_GATE_DELAY";
case F_GET_RECEIVER_THREAD_IDS: return "F_GET_RECEIVER_THREAD_IDS";
case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS"; case NUM_REC_FUNCTIONS: return "NUM_REC_FUNCTIONS";
default: return "Unknown Function"; default: return "Unknown Function";

View File

@ -3,10 +3,10 @@
#define APILIB 0x200409 #define APILIB 0x200409
#define APIRECEIVER 0x200409 #define APIRECEIVER 0x200409
#define APIGUI 0x200409 #define APIGUI 0x200409
#define APICTB 0x200605 #define APICTB 0x200609
#define APIGOTTHARD 0x200605 #define APIGOTTHARD 0x200609
#define APIGOTTHARD2 0x200605 #define APIGOTTHARD2 0x200609
#define APIJUNGFRAU 0x200605 #define APIJUNGFRAU 0x200609
#define APIMOENCH 0x200605 #define APIMYTHEN3 0x200609
#define APIEIGER 0x200605 #define APIMOENCH 0x200608
#define APIMYTHEN3 0x200608 #define APIEIGER 0x200609

View File

@ -215,6 +215,184 @@ std::string ToString(const defs::detectorModeType s) {
} }
} }
std::string ToString(const defs::dacIndex s) {
switch (s) {
case defs::DAC_0:
return std::string("dac 0");
case defs::DAC_1:
return std::string("dac 1");
case defs::DAC_2:
return std::string("dac 2");
case defs::DAC_3:
return std::string("dac 3");
case defs::DAC_4:
return std::string("dac 4");
case defs::DAC_5:
return std::string("dac 5");
case defs::DAC_6:
return std::string("dac 6");
case defs::DAC_7:
return std::string("dac 7");
case defs::DAC_8:
return std::string("dac 8");
case defs::DAC_9:
return std::string("dac 9");
case defs::DAC_10:
return std::string("dac 10");
case defs::DAC_11:
return std::string("dac 11");
case defs::DAC_12:
return std::string("dac 12");
case defs::DAC_13:
return std::string("dac 13");
case defs::DAC_14:
return std::string("dac 14");
case defs::DAC_15:
return std::string("dac 15");
case defs::DAC_16:
return std::string("dac 16");
case defs::DAC_17:
return std::string("dac 17");
case defs::VSVP:
return std::string("vsvp");
case defs::VTRIM:
return std::string("vtrim");
case defs::VRPREAMP:
return std::string("vrpreamp");
case defs::VRSHAPER:
return std::string("vrshaper");
case defs::VSVN:
return std::string("vsvn");
case defs::VTGSTV:
return std::string("vtgstv");
case defs::VCMP_LL:
return std::string("vcmp_ll");
case defs::VCMP_LR:
return std::string("vcmp_lr");
case defs::VCAL:
return std::string("vcal");
case defs::VCMP_RL:
return std::string("vcmp_rl");
case defs::RXB_RB:
return std::string("rxb_rb");
case defs::RXB_LB:
return std::string("rxb_lb");
case defs::VCMP_RR:
return std::string("vcmp_rr");
case defs::VCP:
return std::string("vcp");
case defs::VCN:
return std::string("vcn");
case defs::VISHAPER:
return std::string("vishaper");
case defs::VTHRESHOLD:
return std::string("vthreshold");
case defs::VREF_DS:
return std::string("vref_ds");
case defs::VCASCN_PB:
return std::string("vcascn_pb");
case defs::VCASCP_PB:
return std::string("vcascp_pb");
case defs::VOUT_CM:
return std::string("vout_cm");
case defs::VCASC_OUT:
return std::string("vcasc_out");
case defs::VIN_CM:
return std::string("vin_cm");
case defs::VREF_COMP:
return std::string("vref_comp");
case defs::IB_TESTC:
return std::string("ib_test_c");
case defs::VB_COMP:
return std::string("vb_comp");
case defs::VDD_PROT:
return std::string("vdd_prot");
case defs::VIN_COM:
return std::string("vin_com");
case defs::VREF_PRECH:
return std::string("vref_prech");
case defs::VB_PIXBUF:
return std::string("vb_pixbuf");
case defs::VB_DS:
return std::string("vb_ds");
case defs::VREF_H_ADC:
return std::string("vref_h_adc");
case defs::VB_COMP_FE:
return std::string("vb_comp_fe");
case defs::VB_COMP_ADC:
return std::string("vb_comp_adc");
case defs::VCOM_CDS:
return std::string("vcom_cds");
case defs::VREF_RSTORE:
return std::string("vref_rstore");
case defs::VB_OPA_1ST:
return std::string("vb_opa_1st");
case defs::VREF_COMP_FE:
return std::string("vref_comp_fe");
case defs::VCOM_ADC1:
return std::string("vcom_adc1");
case defs::VREF_L_ADC:
return std::string("vref_l_adc");
case defs::VREF_CDS:
return std::string("vref_cds");
case defs::VB_CS:
return std::string("vb_cs");
case defs::VB_OPA_FD:
return std::string("vb_opa_fd");
case defs::VCOM_ADC2:
return std::string("vcom_adc2");
case defs::VCASSH:
return std::string("vcassh");
case defs::VTH2:
return std::string("vth2");
case defs::VRSHAPER_N:
return std::string("vrshaper_n");
case defs::VIPRE_OUT:
return std::string("vipre_out");
case defs::VTH3:
return std::string("vth3");
case defs::VTH1:
return std::string("vth1");
case defs::VICIN:
return std::string("vicin");
case defs::VCAS:
return std::string("vcas");
case defs::VCAL_N:
return std::string("vcal_n");
case defs::VIPRE:
return std::string("vipre");
case defs::VCAL_P:
return std::string("vcal_p");
case defs::VDCSH:
return std::string("vdcsh");
case defs::VBP_COLBUF:
return std::string("vbp_colbuf");
case defs::VB_SDA:
return std::string("vb_sda");
case defs::VCASC_SFP:
return std::string("vcasc_sfp");
case defs::VIPRE_CDS:
return std::string("vipre_cds");
case defs::IBIAS_SFP:
return std::string("ibias_sfp");
default:
return std::string("Unknown");
}
}
std::string ToString(const std::vector<defs::dacIndex> &vec) {
std::ostringstream os;
os << '[';
if (!vec.empty()) {
auto it = vec.begin();
os << ToString(*it++);
while (it != vec.end())
os << ", " << ToString(*it++);
}
os << ']';
return os.str();
}
std::string ToString(const defs::burstMode s) { std::string ToString(const defs::burstMode s) {
switch (s) { switch (s) {
case defs::BURST_OFF: case defs::BURST_OFF:
@ -392,26 +570,164 @@ template <> defs::detectorModeType StringTo(const std::string &s) {
} }
template <> defs::dacIndex StringTo(const std::string &s) { template <> defs::dacIndex StringTo(const std::string &s) {
if (s == "dac 0")
return defs::DAC_0;
if (s == "dac 1")
return defs::DAC_1;
if (s == "dac 2")
return defs::DAC_2;
if (s == "dac 3")
return defs::DAC_3;
if (s == "dac 4")
return defs::DAC_4;
if (s == "dac 5")
return defs::DAC_5;
if (s == "dac 6")
return defs::DAC_6;
if (s == "dac 7")
return defs::DAC_7;
if (s == "dac 8")
return defs::DAC_8;
if (s == "dac 9")
return defs::DAC_9;
if (s == "dac 10")
return defs::DAC_10;
if (s == "dac 11")
return defs::DAC_11;
if (s == "dac 12")
return defs::DAC_12;
if (s == "dac 13")
return defs::DAC_13;
if (s == "dac 14")
return defs::DAC_14;
if (s == "dac 15")
return defs::DAC_15;
if (s == "dac 16")
return defs::DAC_16;
if (s == "dac 17")
return defs::DAC_17;
if (s == "vsvp")
return defs::VSVP;
if (s == "vtrim")
return defs::VTRIM;
if (s == "vrpreamp")
return defs::VRPREAMP;
if (s == "vrshaper")
return defs::VRSHAPER;
if (s == "vsvn")
return defs::VSVN;
if (s == "vtgstv")
return defs::VTGSTV;
if (s == "vcmp_ll") if (s == "vcmp_ll")
return defs::VCMP_LL; return defs::VCMP_LL;
if (s == "vcmp_lr") if (s == "vcmp_lr")
return defs::VCMP_LR; return defs::VCMP_LR;
if (s == "vcal")
return defs::VCAL;
if (s == "vcmp_rl") if (s == "vcmp_rl")
return defs::VCMP_RL; return defs::VCMP_RL;
if (s == "rxb_rb")
return defs::RXB_RB;
if (s == "rxb_lb")
return defs::RXB_LB;
if (s == "vcmp_rr") if (s == "vcmp_rr")
return defs::VCMP_RR; return defs::VCMP_RR;
if (s == "vthreshold")
return defs::THRESHOLD;
if (s == "vrf")
return defs::VRF;
if (s == "vrs")
return defs::VRS;
if (s == "vtr")
return defs::VTR;
if (s == "vcall")
return defs::CAL;
if (s == "vcp") if (s == "vcp")
return defs::VCP; return defs::VCP;
if (s == "vcn")
return defs::VCN;
if (s == "vishaper")
return defs::VISHAPER;
if (s == "vthreshold")
return defs::VTHRESHOLD;
if (s == "vref_ds")
return defs::VREF_DS;
if (s == "vcascn_pb")
return defs::VCASCN_PB;
if (s == "vcascp_pb")
return defs::VCASCP_PB;
if (s == "vout_cm")
return defs::VOUT_CM;
if (s == "vcasc_out")
return defs::VCASC_OUT;
if (s == "vin_cm")
return defs::VIN_CM;
if (s == "vref_comp")
return defs::VREF_COMP;
if (s == "ib_test_c")
return defs::IB_TESTC;
if (s == "vb_comp")
return defs::VB_COMP;
if (s == "vdd_prot")
return defs::VDD_PROT;
if (s == "vin_com")
return defs::VIN_COM;
if (s == "vref_prech")
return defs::VREF_PRECH;
if (s == "vb_pixbuf")
return defs::VB_PIXBUF;
if (s == "vb_ds")
return defs::VB_DS;
if (s == "vref_h_adc")
return defs::VREF_H_ADC;
if (s == "vb_comp_fe")
return defs::VB_COMP_FE;
if (s == "vb_comp_adc")
return defs::VB_COMP_ADC;
if (s == "vcom_cds")
return defs::VCOM_CDS;
if (s == "vref_rstore")
return defs::VREF_RSTORE;
if (s == "vb_opa_1st")
return defs::VB_OPA_1ST;
if (s == "vref_comp_fe")
return defs::VREF_COMP_FE;
if (s == "vcom_adc1")
return defs::VCOM_ADC1;
if (s == "vref_l_adc")
return defs::VREF_L_ADC;
if (s == "vref_cds")
return defs::VREF_CDS;
if (s == "vb_cs")
return defs::VB_CS;
if (s == "vb_opa_fd")
return defs::VB_OPA_FD;
if (s == "vcom_adc2")
return defs::VCOM_ADC2;
if (s == "vcassh")
return defs::VCASSH;
if (s == "vth2")
return defs::VTH2;
if (s == "vrshaper_n")
return defs::VRSHAPER_N;
if (s == "vipre_out")
return defs::VIPRE_OUT;
if (s == "vth3")
return defs::VTH3;
if (s == "vth1")
return defs::VTH1;
if (s == "vicin")
return defs::VICIN;
if (s == "vcas")
return defs::VCAS;
if (s == "vcal_n")
return defs::VCAL_N;
if (s == "vipre")
return defs::VIPRE;
if (s == "vcal_p")
return defs::VCAL_P;
if (s == "vdcsh")
return defs::VDCSH;
if (s == "vbp_colbuf")
return defs::VBP_COLBUF;
if (s == "vb_sda")
return defs::VB_SDA;
if (s == "vcasc_sfp")
return defs::VCASC_SFP;
if (s == "vipre_cds")
return defs::VIPRE_CDS;
if (s == "ibias_sfp")
return defs::IBIAS_SFP;
throw sls::RuntimeError("Unknown dac Index " + s); throw sls::RuntimeError("Unknown dac Index " + s);
} }

View File

@ -237,4 +237,27 @@ TEST_CASE("std::array"){
REQUIRE(ToString(arr) == "[4, 6, 7]"); REQUIRE(ToString(arr) == "[4, 6, 7]");
} }
TEST_CASE("string to dac index") {
// test a few dacs
REQUIRE(defs::VCAL == StringTo<defs::dacIndex>("vcal"));
REQUIRE(defs::VIN_CM == StringTo<defs::dacIndex>("vin_cm"));
REQUIRE(defs::VB_DS == StringTo<defs::dacIndex>("vb_ds"));
}
TEST_CASE("dac index to string") {
REQUIRE(ToString(defs::VCAL) == "vcal");
REQUIRE(ToString(defs::VB_DS) == "vb_ds");
}
TEST_CASE("convert vector of strings to dac index") {
std::vector<std::string> dacs{"vcassh", "vth2", "vrshaper"};
std::vector<defs::dacIndex> daci{defs::VCASSH, defs::VTH2, defs::VRSHAPER};
auto r = StringTo<defs::dacIndex>(dacs);
REQUIRE(r == daci);
}
TEST_CASE("vector of dac index to string") {
std::vector<defs::dacIndex> daci{defs::VCASSH, defs::VTH2, defs::VRSHAPER};
auto r = ToString(daci);
REQUIRE(r == "[vcassh, vth2, vrshaper]");
}