diff --git a/libs/rapidjson/rapidjson/document.h b/libs/rapidjson/rapidjson/document.h index e3e20dfbd..f4073113d 100755 --- a/libs/rapidjson/rapidjson/document.h +++ b/libs/rapidjson/rapidjson/document.h @@ -17,13 +17,13 @@ /*! \file document.h */ -#include "reader.h" +#include "encodedstream.h" #include "internal/meta.h" #include "internal/strfunc.h" #include "memorystream.h" -#include "encodedstream.h" -#include // placement new +#include "reader.h" #include +#include // placement new RAPIDJSON_DIAG_PUSH #ifdef _MSC_VER diff --git a/libs/rapidjson/rapidjson/encodedstream.h b/libs/rapidjson/rapidjson/encodedstream.h index 145068386..252fdd575 100755 --- a/libs/rapidjson/rapidjson/encodedstream.h +++ b/libs/rapidjson/rapidjson/encodedstream.h @@ -15,8 +15,8 @@ #ifndef RAPIDJSON_ENCODEDSTREAM_H_ #define RAPIDJSON_ENCODEDSTREAM_H_ -#include "stream.h" #include "memorystream.h" +#include "stream.h" #ifdef __GNUC__ RAPIDJSON_DIAG_PUSH diff --git a/libs/rapidjson/rapidjson/internal/strtod.h b/libs/rapidjson/rapidjson/internal/strtod.h index 289c413b0..2bcbc8df9 100755 --- a/libs/rapidjson/rapidjson/internal/strtod.h +++ b/libs/rapidjson/rapidjson/internal/strtod.h @@ -15,9 +15,9 @@ #ifndef RAPIDJSON_STRTOD_ #define RAPIDJSON_STRTOD_ -#include "ieee754.h" #include "biginteger.h" #include "diyfp.h" +#include "ieee754.h" #include "pow10.h" RAPIDJSON_NAMESPACE_BEGIN diff --git a/libs/rapidjson/rapidjson/rapidjson.h b/libs/rapidjson/rapidjson/rapidjson.h index 053b2ce43..daf30fe00 100755 --- a/libs/rapidjson/rapidjson/rapidjson.h +++ b/libs/rapidjson/rapidjson/rapidjson.h @@ -164,8 +164,8 @@ #include "msinttypes/inttypes.h" #else // Other compilers should have this. -#include #include +#include #endif //!@endcond #ifdef RAPIDJSON_DOXYGEN_RUNNING diff --git a/libs/rapidjson/rapidjson/reader.h b/libs/rapidjson/rapidjson/reader.h index 19f8849b1..d196d54a9 100755 --- a/libs/rapidjson/rapidjson/reader.h +++ b/libs/rapidjson/rapidjson/reader.h @@ -18,11 +18,11 @@ /*! \file reader.h */ #include "allocators.h" -#include "stream.h" #include "encodedstream.h" #include "internal/meta.h" #include "internal/stack.h" #include "internal/strtod.h" +#include "stream.h" #include #if defined(RAPIDJSON_SIMD) && defined(_MSC_VER) diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt index dcd4effa7..2f88b948d 100755 --- a/python/CMakeLists.txt +++ b/python/CMakeLists.txt @@ -30,6 +30,7 @@ set( PYTHON_FILES errors.py ctb.py jungfrau.py + mythen3.py registers.py utils.py diff --git a/python/scripts/basic.py b/python/scripts/basic.py index a827171b5..c64cdd455 100755 --- a/python/scripts/basic.py +++ b/python/scripts/basic.py @@ -2,30 +2,14 @@ import os import sys import numpy as np sys.path.append(os.path.join(os.getcwd(), 'bin')) -# from sls_detector import Eiger, Jungfrau, Detector, defs -from sls_detector import Detector, Eiger, Jungfrau, DetectorDacs, Dac, Ctb +from sls_detector import Detector, Mythen3, Eiger, Jungfrau, DetectorDacs, Dac, Ctb from sls_detector import dacIndex -# d = Detector() +d = Detector() # e = Eiger() # c = Ctb() -j = Jungfrau() +# j = Jungfrau() +m = Mythen3() -# def tracefunc(frame, event, arg, indent=[0]): -# if event == "call": -# indent[0] += 2 -# print("-" * indent[0] + "> call function", frame.f_code.co_name) -# elif event == "return": -# print("<" + "-" * indent[0], "exit function", frame.f_code.co_name) -# indent[0] -= 2 -# return tracefunc - -# import sys -# sys.setprofile(tracefunc) -# print('------------------------------------------------------') -# j.dacs.vb_comp[:] = 1500 -# print('------------------------------------------------------') - -# # sys.setprofile(None) \ No newline at end of file diff --git a/python/sls_detector/__init__.py b/python/sls_detector/__init__.py index 9cc170a7e..e46467beb 100755 --- a/python/sls_detector/__init__.py +++ b/python/sls_detector/__init__.py @@ -4,6 +4,7 @@ from .ctb import Ctb from .dacs import DetectorDacs, Dac from .detector import Detector from .jungfrau import Jungfrau +from .mythen3 import Mythen3 # from .jungfrau_ctb import JungfrauCTB # from _sls_detector import DetectorApi diff --git a/python/sls_detector/detector.py b/python/sls_detector/detector.py index 51c3d1578..6c60b72bd 100755 --- a/python/sls_detector/detector.py +++ b/python/sls_detector/detector.py @@ -5,7 +5,7 @@ runStatus = slsDetectorDefs.runStatus speedLevel = slsDetectorDefs.speedLevel dacIndex = slsDetectorDefs.dacIndex -from .utils import element_if_equal, all_equal +from .utils import element_if_equal, all_equal, get_set_bits, list_to_bitmask from .utils import Geometry, to_geo from .registers import Register, Adc_register import datetime as dt @@ -752,6 +752,24 @@ class Detector(CppDetectorApi): self.setStoreInRamMode(value) + """ + Mythen3 specific + """ + + @property + def counters(self): + mask = self.getCounterMask() + mask = element_if_equal(mask) + if type(mask) == int: + return get_set_bits(mask) + else: + return [get_set_bits(m) for m in mask] + + + @counters.setter + def counters(self, values): + self.setCounterMask(list_to_bitmask(values)) + """ CTB stuff """ diff --git a/python/sls_detector/mythen3.py b/python/sls_detector/mythen3.py new file mode 100644 index 000000000..c5205ba1d --- /dev/null +++ b/python/sls_detector/mythen3.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +This file contains the specialization for the Jungfrau detector +""" + + +from .detector import Detector, freeze + +# from .adcs import Adc, DetectorAdcs +from .dacs import DetectorDacs +import _sls_detector +dacIndex = _sls_detector.slsDetectorDefs.dacIndex +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 +class Mythen3Dacs(DetectorDacs): + """ + Jungfrau specific DACs + """ + _dacs = [('vcassh', dacIndex.CASSH, 0, 4000, 1220), + ('vth2', dacIndex.VTH2, 0, 4000, 2800), + ('vshaper', dacIndex.SHAPER1, 0, 4000, 1280), + ('vshaperneg', dacIndex.SHAPER2, 0, 4000, 2800), + ('vipre_out', dacIndex.VIPRE_OUT, 0, 4000, 1220), + ('vth3', dacIndex.VTH3, 0, 4000, 2800), + ('vth1', dacIndex.THRESHOLD, 0, 4000, 2800), + ('vicin', dacIndex.VICIN, 0, 4000, 1708), + ('vcas', dacIndex.CAS, 0, 4000, 1800), + ('vpreamp', dacIndex.PREAMP, 0, 4000, 1100), + ('vpl', dacIndex.VPL, 0, 4000, 1100), + ('vipre', dacIndex.VIPRE, 0, 4000, 2624), + ('viinsh', dacIndex.VIINSH, 0, 4000, 1708), + ('vph', dacIndex.CALIBRATION_PULSE, 0, 4000, 1712), + ('vtrim', dacIndex.TRIMBIT_SIZE, 0, 4000, 2800), + ('vdcsh', dacIndex.VDCSH, 0, 4000, 800), + ] + _dacnames = [_d[0] for _d in _dacs] + + + + +@freeze +class Mythen3(Detector): + """ + Subclassing Detector to set up correct dacs and detector specific + functions. + """ + _detector_dynamic_range = [4, 8, 16, 32] + + + _settings = ['standard', 'highgain', 'lowgain', 'veryhighgain', 'verylowgain'] + """available settings for Eiger, note almost always standard""" + + def __init__(self, id=0): + super().__init__(id) + self._frozen = False + self._dacs = Mythen3Dacs(self) + + @property + def dacs(self): + return self._dacs \ No newline at end of file diff --git a/python/sls_detector/utils.py b/python/sls_detector/utils.py index 0032320cc..5c5835bc9 100755 --- a/python/sls_detector/utils.py +++ b/python/sls_detector/utils.py @@ -8,6 +8,23 @@ import functools Geometry = namedtuple('Geometry', ['x', 'y']) +def get_set_bits(mask): + """ + Return a list of the set bits in a python integer + """ + return [i for i in range(mask.bit_length()) if (mask>>i)&1] + +def list_to_bitmask(values): + """ + Convert a list of integers to a bitmask with set bits + where the list indicates + """ + mask = int(0) + values = list(set(values)) #Remove duplicates + for v in values: + mask += 1 << v + return mask + def to_geo(value): if isinstance(value, _sls_detector.xy): return Geometry(x = value.x, y = value.y) diff --git a/python/src/detector.cpp b/python/src/detector.cpp index 05136dfb9..85771dc14 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -441,6 +441,10 @@ void init_det(py::module &m) { .def("setBurstMode", &Detector::setBurstMode, py::arg(), py::arg() = Positions{}) .def("getBurstMode", &Detector::getBurstMode, py::arg() = Positions{}) + .def("getCounterMask", &Detector::getCounterMask, + py::arg() = Positions{}) + .def("setCounterMask", &Detector::setCounterMask, py::arg(), + py::arg() = Positions{}) .def("getNumberOfAnalogSamples", &Detector::getNumberOfAnalogSamples, py::arg() = Positions{}) .def("setNumberOfAnalogSamples", &Detector::setNumberOfAnalogSamples, diff --git a/python/unit-tests/detector_test.py b/python/unit-tests/detector_test.py index 55de8c801..6206204f0 100755 --- a/python/unit-tests/detector_test.py +++ b/python/unit-tests/detector_test.py @@ -1,8 +1,13 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ -Testing parameters and methods of the Detector class using mocks +Testing the Detector python class by mocking calls. +Should only be used when there is functionality in +the detector.py file. + +An example is converting a mask to a list of set bits. """ + from unittest.mock import Mock import pytest from pytest_mock import mocker @@ -13,459 +18,471 @@ sys.path.append('/home/l_frojdh/slsdetectorgrup/sls_detector') import _sls_detector from sls_detector.errors import DetectorValueError, DetectorError from sls_detector.utils import all_equal, element_if_equal + @pytest.fixture def d(): from sls_detector import Detector return Detector() +def test_length(d, mocker): + m = mocker.patch('sls_detector.Detector.size') + m.return_value = 5 + assert(len(d) == 5) -def test_length_zero(d): - assert len(d) == 0 +def test_counters_single(d, mocker): + m = mocker.patch('sls_detector.Detector.getCounterMask') + m.return_value = [7] + assert(d.counters == [0,1,2]) -def test_acq_call(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.acq') - d.acq() - m.assert_called_once_with() - - - -def test_busy_call(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getAcquiringFlag') - m.return_value = False - assert d.busy == False - -def test_set_busy(d): - d.busy = True - assert d.busy == True - assert d._api.getAcquiringFlag() == True - d.busy = False - assert d.busy == False - assert d._api.getAcquiringFlag() == False - -def test_error_mask(d): - d._api.setErrorMask(1) - assert d.error_mask == 1 - d.clear_errors() - -def test_error_handling(d): - with pytest.raises(DetectorError): - d._provoke_error() - -def test_assign_to_detector_type(d): - with pytest.raises(AttributeError): - d.detector_type = 'Eiger' - -def test_det_type(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getDetectorType') - m.return_value = 'Eiger' - assert d.detector_type == 'Eiger' - - -def test_get_exposure_time(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getExposureTime') - m.return_value = 100000000 - assert d.exposure_time == 0.1 - -def test_set_exposure_time(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setExposureTime') - d.exposure_time = 1.5 - m.assert_called_once_with(1500000000) - -def test_set_exposure_time_less_than_zero(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setExposureTime') - with pytest.raises(DetectorValueError): - d.exposure_time = -7 - - -def test_get_file_index(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getFileIndex') - m.return_value = 8 - assert d.file_index == 8 - -def test_set_file_index(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setFileIndex') - d.file_index = 9 - m.assert_called_with(9) - - -def file_index_with_no_detector(d): - assert d.file_index == -100 - -def dr_with_no_detector(d): - assert d.dynamic_range == -100 - -def test_set_file_index_raises_on_neg(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setFileIndex') - with pytest.raises(ValueError): - d.file_index = -9 - - -def test_get_file_name(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getFileName') - d.file_name - m.assert_called_once_with() - -def test_set_file_name(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setFileName') - d.file_name = 'hej' - m.assert_called_once_with('hej') - -def test_get_file_path(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getFilePath') - d.file_path - m.assert_called_once_with() - -def test_set_file_path_when_path_exists(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setFilePath') - #To avoid raising an exception because path is not there - mock_os = mocker.patch('os.path.exists') - mock_os.return_value = True - d.file_path = '/path/to/something/' - m.assert_called_once_with('/path/to/something/') - -def test_set_file_path_raises_when_not_exists(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setFilePath') - mock_os = mocker.patch('os.path.exists') - mock_os.return_value = False - with pytest.raises(FileNotFoundError): - d.file_path = '/path/to/something/' - -def test_get_file_write(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getFileWrite') - m.return_value = False - assert d.file_write == False - -def test_set_file_write(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setFileWrite') - d.file_write = True - m.assert_called_once_with(True) - - -def test_get_firmware_version(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getFirmwareVersion') - m.return_value = 20 - assert d.firmware_version == 20 - -def test_cannot_set_fw_version(d): - with pytest.raises(AttributeError): - d.firmware_version = 20 - -def test_get_high_voltage_call_signature(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getDac') - d.high_voltage - m.assert_called_once_with('vhighvoltage', -1) - -def test_get_high_voltage(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getDac') - m.return_value = 80 - assert d.high_voltage == 80 - -#self._api.setDac('vhighvoltage', -1, voltage) -def test_set_high_voltage(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setDac') - d.high_voltage = 80 - m.assert_called_once_with('vhighvoltage', -1, 80) - -def test_decode_hostname_two_names(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getHostname') - m.return_value = 'beb059+beb048+' - assert d.hostname == ['beb059', 'beb048'] - -def test_decode_hostname_four_names(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getHostname') - m.return_value = 'beb059+beb048+beb120+beb153+' - assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153'] - -def test_decode_hostname_blank(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getHostname') - m.return_value = '' - assert d.hostname == [] - -def test_get_image_size_gives_correct_size(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getImageSize') - m.return_value = (512,1024) - im_size = d.image_size - assert im_size.rows == 512 - assert im_size.cols == 1024 - - - -def test_load_config(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.readConfigurationFile') - #To avoid raising an exception because path is not there - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = True - d.load_config('/path/to/my/file.config') - m.assert_called_once_with('/path/to/my/file.config') - -def test_load_config_raises_when_file_is_not_found(d, mocker): - mocker.patch('_sls_detector.DetectorApi.readConfigurationFile') - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = False - with pytest.raises(FileNotFoundError): - d.load_config('/path/to/my/file.config') - -def test_load_parameters(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.readParametersFile') - #To avoid raising an exception because path is not there - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = True - d.load_parameters('/path/to/my/file.par') - m.assert_called_once_with('/path/to/my/file.par') - -def test_load_parameters_raises_when_file_is_not_found(d, mocker): - mocker.patch('_sls_detector.DetectorApi.readParametersFile') - mock_os = mocker.patch('os.path.isfile') - mock_os.return_value = False - with pytest.raises(FileNotFoundError): - d.load_parameters('/path/to/my/file.par') - -#getDetectorGeometry -def test_get_module_geometry_gives_correct_size(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry') - m.return_value = (13,7) - g = d.module_geometry - assert g.vertical == 7 - assert g.horizontal == 13 - -def test_get_module_geometry_access(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry') - m.return_value = (12,3) - assert d.module_geometry[0] == 12 - assert d.module_geometry[1] == 3 - assert d.module_geometry.vertical == 3 - assert d.module_geometry.horizontal == 12 - -def test_module_geometry_without_detectors(d): - t = d.module_geometry - assert t.horizontal == 0 - assert t.vertical == 0 - -def test_get_n_frames(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getNumberOfFrames') - m.return_value = 3 - assert d.n_frames == 3 - -def test_set_n_frames(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames') - d.n_frames = 9 - m.assert_called_once_with(9) - -def test_nframes_without_detector(d): - assert d.n_frames == -100 - -def test_set_n_frames_raises_on_neg(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames') - with pytest.raises(DetectorValueError): - d.n_frames = -1 - -def test_set_n_frames_raises_on_zero(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames') - with pytest.raises(DetectorValueError): - d.n_frames = 0 - -def test_n_cycles_without_detector(d): - assert d.n_cycles == -100 - -def test_set_n_cycles_raises_on_zero(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setCycles') - with pytest.raises(DetectorValueError): - d.n_cycles = 0 - -def test_set_n_cycles(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setCycles') - d.n_cycles = 56 - m.assert_called_once_with(56) - - - -def test_n_measurements_without_detector(d): - assert d.n_measurements == -100 - -def test_set_n_measurements_raises_on_zero(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setNumberOfMeasurements') - with pytest.raises(DetectorValueError): - d.n_measurements = 0 - -def test_set_n_measurements(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setNumberOfMeasurements') - d.n_measurements = 560 - m.assert_called_once_with(560) - -def test_get_n_modules_no_detector(d): - assert d.n_modules == 0 - -def test_get_n_modules(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors') - m.return_value = 12 - assert d.n_modules == 12 - -def test_get_period_time(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getPeriod') - m.return_value = 130000000 - assert d.period == 0.13 - -def test_set_period_time(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setPeriod') - d.period = 1.953 - m.assert_called_once_with(1953000000) - -def test_set_period_time_less_than_zero(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setPeriod') - with pytest.raises(ValueError): - d.period = -7 - - -def test_get_online(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getOnline') - d.online - m.assert_called_once_with() - -def test_set_online(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setOnline') - d.online = True - m.assert_called_once_with(True) - -def test_last_client_ip_no_detector(d): - assert d.last_client_ip == '' - -def test_last_cliten_ip_call(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getLastClientIP') - d.last_client_ip - m.assert_called_once_with() - -#-------------------------------------------------------------Rate correction -def test_get_rate_correction(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getRateCorrection') - m.return_value = [132,129] - assert d.rate_correction == [132,129] - -def test_set_rate_correction(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setRateCorrection') - mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors') - mock_n.return_value = 3 - d.rate_correction = [123,90,50] - m.assert_called_once_with([123,90,50]) - -def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker): - mocker.patch('_sls_detector.DetectorApi.setRateCorrection') - mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors') - mock_n.return_value = 4 - with pytest.raises(ValueError): - d.rate_correction = [123,90,50] - -#----------------------------------------------------------------Readout clock -def test_get_readout_clock_0(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') - m.return_value = 0 - assert d.readout_clock == 'Full Speed' - -def test_get_readout_clock_1(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') - m.return_value = 1 - assert d.readout_clock == 'Half Speed' - -def test_get_readout_clock_2(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') - m.return_value = 2 - assert d.readout_clock == 'Quarter Speed' - -def test_get_readout_clock_3(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') - m.return_value = 3 - assert d.readout_clock == 'Super Slow Speed' - -def test_set_readout_clock_0(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Full Speed' - m.assert_called_once_with(0) - -def test_set_readout_clock_1(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Half Speed' - m.assert_called_once_with(1) - -def test_set_readout_clock_2(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Quarter Speed' - m.assert_called_once_with(2) - -def test_set_readout_clock_3(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') - d.readout_clock = 'Super Slow Speed' - m.assert_called_once_with(3) - -#----------------------------------------------------------------rx_datastream -def test_get_rx_datastream(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getRxDataStreamStatus') - m.return_value = False - assert d.rx_datastream == False - -def test_set_rx_datastream(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setRxDataStreamStatus') - d.rx_datastream = True - m.assert_called_once_with(True) - -def test_get_rx_zmqip(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') - d.rx_zmqip - m.assert_called_once_with('rx_zmqip') - -def test_get_rx_zmqport_call(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') - d.rx_zmqport - m.assert_called_once_with('rx_zmqport') - -def test_get_rx_zmqport_decode(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') - m.return_value = ['30001', '30003'] - assert d.rx_zmqport == [30001, 30003] - -def test_get_rx_zmqport_empty(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') - m.return_value = '' - assert d.rx_zmqport == [] - - -#--------------------------------------------------------------------status -def test_status_call(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getRunStatus') - d.status - m.assert_called_once_with() - -def test_start_detecor(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.startAcquisition') - d.start_detector() - m.assert_called_once_with() - -def test_stop_acq_call(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.stopAcquisition') - d.stop_detector() - m.assert_called_once_with() - - - -#------------------------------------------------------------------timing mode -def test_get_timing_mode(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getTimingMode') - d.timing_mode - m.assert_called_once_with() - -def test_set_timing_mode(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setTimingMode') - d.timing_mode = 'auto' - m.assert_called_once_with('auto') - -#----------------------------------------------------------------vthreshold -def test_get_vthreshold(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.getDac') - d.vthreshold - m.assert_called_once_with('vthreshold', -1) - -def test_set_vthreshold(d, mocker): - m = mocker.patch('_sls_detector.DetectorApi.setDac') - d.vthreshold = 1675 - m.assert_called_once_with('vthreshold', -1, 1675) +def test_counters_multi(d, mocker): + m = mocker.patch('sls_detector.Detector.getCounterMask') + m.return_value = [7, 9] + assert(d.counters == [[0,1,2],[0,3]]) + +def test_set_counters_single(d, mocker): + m = mocker.patch('sls_detector.Detector.setCounterMask') + d.counters = [0,2] + m.assert_called_once_with(5) + + + +# def test_busy_call(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getAcquiringFlag') +# m.return_value = False +# assert d.busy == False + +# def test_set_busy(d): +# d.busy = True +# assert d.busy == True +# assert d._api.getAcquiringFlag() == True +# d.busy = False +# assert d.busy == False +# assert d._api.getAcquiringFlag() == False + +# def test_error_mask(d): +# d._api.setErrorMask(1) +# assert d.error_mask == 1 +# d.clear_errors() + +# def test_error_handling(d): +# with pytest.raises(DetectorError): +# d._provoke_error() + +# def test_assign_to_detector_type(d): +# with pytest.raises(AttributeError): +# d.detector_type = 'Eiger' + +# def test_det_type(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getDetectorType') +# m.return_value = 'Eiger' +# assert d.detector_type == 'Eiger' + + +# def test_get_exposure_time(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getExposureTime') +# m.return_value = 100000000 +# assert d.exposure_time == 0.1 + +# def test_set_exposure_time(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setExposureTime') +# d.exposure_time = 1.5 +# m.assert_called_once_with(1500000000) + +# def test_set_exposure_time_less_than_zero(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setExposureTime') +# with pytest.raises(DetectorValueError): +# d.exposure_time = -7 + + +# def test_get_file_index(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getFileIndex') +# m.return_value = 8 +# assert d.file_index == 8 + +# def test_set_file_index(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setFileIndex') +# d.file_index = 9 +# m.assert_called_with(9) + + +# def file_index_with_no_detector(d): +# assert d.file_index == -100 + +# def dr_with_no_detector(d): +# assert d.dynamic_range == -100 + +# def test_set_file_index_raises_on_neg(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setFileIndex') +# with pytest.raises(ValueError): +# d.file_index = -9 + + +# def test_get_file_name(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getFileName') +# d.file_name +# m.assert_called_once_with() + +# def test_set_file_name(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setFileName') +# d.file_name = 'hej' +# m.assert_called_once_with('hej') + +# def test_get_file_path(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getFilePath') +# d.file_path +# m.assert_called_once_with() + +# def test_set_file_path_when_path_exists(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setFilePath') +# #To avoid raising an exception because path is not there +# mock_os = mocker.patch('os.path.exists') +# mock_os.return_value = True +# d.file_path = '/path/to/something/' +# m.assert_called_once_with('/path/to/something/') + +# def test_set_file_path_raises_when_not_exists(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setFilePath') +# mock_os = mocker.patch('os.path.exists') +# mock_os.return_value = False +# with pytest.raises(FileNotFoundError): +# d.file_path = '/path/to/something/' + +# def test_get_file_write(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getFileWrite') +# m.return_value = False +# assert d.file_write == False + +# def test_set_file_write(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setFileWrite') +# d.file_write = True +# m.assert_called_once_with(True) + + +# def test_get_firmware_version(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getFirmwareVersion') +# m.return_value = 20 +# assert d.firmware_version == 20 + +# def test_cannot_set_fw_version(d): +# with pytest.raises(AttributeError): +# d.firmware_version = 20 + +# def test_get_high_voltage_call_signature(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getDac') +# d.high_voltage +# m.assert_called_once_with('vhighvoltage', -1) + +# def test_get_high_voltage(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getDac') +# m.return_value = 80 +# assert d.high_voltage == 80 + +# #self._api.setDac('vhighvoltage', -1, voltage) +# def test_set_high_voltage(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setDac') +# d.high_voltage = 80 +# m.assert_called_once_with('vhighvoltage', -1, 80) + +# def test_decode_hostname_two_names(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getHostname') +# m.return_value = 'beb059+beb048+' +# assert d.hostname == ['beb059', 'beb048'] + +# def test_decode_hostname_four_names(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getHostname') +# m.return_value = 'beb059+beb048+beb120+beb153+' +# assert d.hostname == ['beb059', 'beb048', 'beb120', 'beb153'] + +# def test_decode_hostname_blank(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getHostname') +# m.return_value = '' +# assert d.hostname == [] + +# def test_get_image_size_gives_correct_size(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getImageSize') +# m.return_value = (512,1024) +# im_size = d.image_size +# assert im_size.rows == 512 +# assert im_size.cols == 1024 + + + +# def test_load_config(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.readConfigurationFile') +# #To avoid raising an exception because path is not there +# mock_os = mocker.patch('os.path.isfile') +# mock_os.return_value = True +# d.load_config('/path/to/my/file.config') +# m.assert_called_once_with('/path/to/my/file.config') + +# def test_load_config_raises_when_file_is_not_found(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.readConfigurationFile') +# mock_os = mocker.patch('os.path.isfile') +# mock_os.return_value = False +# with pytest.raises(FileNotFoundError): +# d.load_config('/path/to/my/file.config') + +# def test_load_parameters(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.readParametersFile') +# #To avoid raising an exception because path is not there +# mock_os = mocker.patch('os.path.isfile') +# mock_os.return_value = True +# d.load_parameters('/path/to/my/file.par') +# m.assert_called_once_with('/path/to/my/file.par') + +# def test_load_parameters_raises_when_file_is_not_found(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.readParametersFile') +# mock_os = mocker.patch('os.path.isfile') +# mock_os.return_value = False +# with pytest.raises(FileNotFoundError): +# d.load_parameters('/path/to/my/file.par') + +# #getDetectorGeometry +# def test_get_module_geometry_gives_correct_size(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry') +# m.return_value = (13,7) +# g = d.module_geometry +# assert g.vertical == 7 +# assert g.horizontal == 13 + +# def test_get_module_geometry_access(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getDetectorGeometry') +# m.return_value = (12,3) +# assert d.module_geometry[0] == 12 +# assert d.module_geometry[1] == 3 +# assert d.module_geometry.vertical == 3 +# assert d.module_geometry.horizontal == 12 + +# def test_module_geometry_without_detectors(d): +# t = d.module_geometry +# assert t.horizontal == 0 +# assert t.vertical == 0 + +# def test_get_n_frames(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getNumberOfFrames') +# m.return_value = 3 +# assert d.n_frames == 3 + +# def test_set_n_frames(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames') +# d.n_frames = 9 +# m.assert_called_once_with(9) + +# def test_nframes_without_detector(d): +# assert d.n_frames == -100 + +# def test_set_n_frames_raises_on_neg(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames') +# with pytest.raises(DetectorValueError): +# d.n_frames = -1 + +# def test_set_n_frames_raises_on_zero(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setNumberOfFrames') +# with pytest.raises(DetectorValueError): +# d.n_frames = 0 + +# def test_n_cycles_without_detector(d): +# assert d.n_cycles == -100 + +# def test_set_n_cycles_raises_on_zero(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setCycles') +# with pytest.raises(DetectorValueError): +# d.n_cycles = 0 + +# def test_set_n_cycles(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setCycles') +# d.n_cycles = 56 +# m.assert_called_once_with(56) + + + +# def test_n_measurements_without_detector(d): +# assert d.n_measurements == -100 + +# def test_set_n_measurements_raises_on_zero(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setNumberOfMeasurements') +# with pytest.raises(DetectorValueError): +# d.n_measurements = 0 + +# def test_set_n_measurements(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setNumberOfMeasurements') +# d.n_measurements = 560 +# m.assert_called_once_with(560) + +# def test_get_n_modules_no_detector(d): +# assert d.n_modules == 0 + +# def test_get_n_modules(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors') +# m.return_value = 12 +# assert d.n_modules == 12 + +# def test_get_period_time(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getPeriod') +# m.return_value = 130000000 +# assert d.period == 0.13 + +# def test_set_period_time(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setPeriod') +# d.period = 1.953 +# m.assert_called_once_with(1953000000) + +# def test_set_period_time_less_than_zero(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setPeriod') +# with pytest.raises(ValueError): +# d.period = -7 + + +# def test_get_online(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getOnline') +# d.online +# m.assert_called_once_with() + +# def test_set_online(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setOnline') +# d.online = True +# m.assert_called_once_with(True) + +# def test_last_client_ip_no_detector(d): +# assert d.last_client_ip == '' + +# def test_last_cliten_ip_call(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getLastClientIP') +# d.last_client_ip +# m.assert_called_once_with() + +# #-------------------------------------------------------------Rate correction +# def test_get_rate_correction(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getRateCorrection') +# m.return_value = [132,129] +# assert d.rate_correction == [132,129] + +# def test_set_rate_correction(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setRateCorrection') +# mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors') +# mock_n.return_value = 3 +# d.rate_correction = [123,90,50] +# m.assert_called_once_with([123,90,50]) + +# def test_set_rate_correction_raises_on_wrong_number_of_values(d, mocker): +# mocker.patch('_sls_detector.DetectorApi.setRateCorrection') +# mock_n = mocker.patch('_sls_detector.DetectorApi.getNumberOfDetectors') +# mock_n.return_value = 4 +# with pytest.raises(ValueError): +# d.rate_correction = [123,90,50] + +# #----------------------------------------------------------------Readout clock +# def test_get_readout_clock_0(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') +# m.return_value = 0 +# assert d.readout_clock == 'Full Speed' + +# def test_get_readout_clock_1(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') +# m.return_value = 1 +# assert d.readout_clock == 'Half Speed' + +# def test_get_readout_clock_2(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') +# m.return_value = 2 +# assert d.readout_clock == 'Quarter Speed' + +# def test_get_readout_clock_3(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getReadoutClockSpeed') +# m.return_value = 3 +# assert d.readout_clock == 'Super Slow Speed' + +# def test_set_readout_clock_0(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') +# d.readout_clock = 'Full Speed' +# m.assert_called_once_with(0) + +# def test_set_readout_clock_1(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') +# d.readout_clock = 'Half Speed' +# m.assert_called_once_with(1) + +# def test_set_readout_clock_2(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') +# d.readout_clock = 'Quarter Speed' +# m.assert_called_once_with(2) + +# def test_set_readout_clock_3(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setReadoutClockSpeed') +# d.readout_clock = 'Super Slow Speed' +# m.assert_called_once_with(3) + +# #----------------------------------------------------------------rx_datastream +# def test_get_rx_datastream(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getRxDataStreamStatus') +# m.return_value = False +# assert d.rx_datastream == False + +# def test_set_rx_datastream(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setRxDataStreamStatus') +# d.rx_datastream = True +# m.assert_called_once_with(True) + +# def test_get_rx_zmqip(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') +# d.rx_zmqip +# m.assert_called_once_with('rx_zmqip') + +# def test_get_rx_zmqport_call(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') +# d.rx_zmqport +# m.assert_called_once_with('rx_zmqport') + +# def test_get_rx_zmqport_decode(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') +# m.return_value = ['30001', '30003'] +# assert d.rx_zmqport == [30001, 30003] + +# def test_get_rx_zmqport_empty(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getNetworkParameter') +# m.return_value = '' +# assert d.rx_zmqport == [] + + +# #--------------------------------------------------------------------status +# def test_status_call(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getRunStatus') +# d.status +# m.assert_called_once_with() + +# def test_start_detecor(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.startAcquisition') +# d.start_detector() +# m.assert_called_once_with() + +# def test_stop_acq_call(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.stopAcquisition') +# d.stop_detector() +# m.assert_called_once_with() + + + +# #------------------------------------------------------------------timing mode +# def test_get_timing_mode(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getTimingMode') +# d.timing_mode +# m.assert_called_once_with() + +# def test_set_timing_mode(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setTimingMode') +# d.timing_mode = 'auto' +# m.assert_called_once_with('auto') + +# #----------------------------------------------------------------vthreshold +# def test_get_vthreshold(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.getDac') +# d.vthreshold +# m.assert_called_once_with('vthreshold', -1) + +# def test_set_vthreshold(d, mocker): +# m = mocker.patch('_sls_detector.DetectorApi.setDac') +# d.vthreshold = 1675 +# m.assert_called_once_with('vthreshold', -1, 1675) diff --git a/python/unit-tests/test_utils.py b/python/unit-tests/test_utils.py index e759f6cb4..15e7aad20 100755 --- a/python/unit-tests/test_utils.py +++ b/python/unit-tests/test_utils.py @@ -1,12 +1,12 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ -Testing parameters and methods of the Detector class using mocks +Testing functions from utils.py """ import pytest -from sls_detector.utils import eiger_register_to_time -from sls_detector.utils import all_equal, element_if_equal +from sls_detector.utils import * + def test_convert_zero(): assert eiger_register_to_time(0) == 0 @@ -47,4 +47,16 @@ def test_element_if_equal_str(): assert element_if_equal('hhh') == 'h' def test_element_if_equal_int_fails(): - assert element_if_equal([5, 6, 7]) == [5, 6, 7] \ No newline at end of file + assert element_if_equal([5, 6, 7]) == [5, 6, 7] + +def test_get_set_bits(): + assert(get_set_bits(0) == []) + assert get_set_bits(7) == [0, 1, 2] + +def test_list_to_mask(): + assert(list_to_bitmask([0,1,2]) == 7) + assert(list_to_bitmask([]) == 0) + assert(list_to_bitmask([0]) == 1) + assert(list_to_bitmask([1]) == 2) + assert(list_to_bitmask([3]) == 8) + assert(list_to_bitmask([1,1,1]) == 2) \ No newline at end of file diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h index 50cffb95b..9ce25e4fa 100644 --- a/slsDetectorSoftware/include/Detector.h +++ b/slsDetectorSoftware/include/Detector.h @@ -1054,7 +1054,7 @@ class Detector { Result> getRxDbitList(Positions pos = {}) const; /** [CTB] list contains the set of bits (0-63) to save */ - void setRxDbitList(std::vector list, Positions pos = {}); + void setRxDbitList(const std::vector& list, Positions pos = {}); /** [CTB] */ Result getRxDbitOffset(Positions pos = {}) const; diff --git a/slsDetectorSoftware/include/detectorData.h b/slsDetectorSoftware/include/detectorData.h index 9be0215ca..528def82d 100755 --- a/slsDetectorSoftware/include/detectorData.h +++ b/slsDetectorSoftware/include/detectorData.h @@ -1,5 +1,5 @@ -#include #include +#include #pragma once /** @short data structure to hold the detector data after postprocessing diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index c998b884b..db42ce16a 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -2,8 +2,8 @@ #include "Detector.h" #include "Result.h" -#include "sls_detector_exceptions.h" #include "network_utils.h" +#include "sls_detector_exceptions.h" #include #include #include @@ -449,7 +449,7 @@ class CmdProxy { } inline unsigned int stoiHex(const std::string& s) { - unsigned long lresult = stoul(s, 0, 16); + unsigned long lresult = stoul(s, nullptr, 16); unsigned int result = lresult; if (result != lresult) { throw std::out_of_range("cannot convert to unsigned int"); @@ -458,7 +458,7 @@ class CmdProxy { } inline unsigned long int stoulHex(const std::string& s) { - unsigned long result = stoul(s, 0, 16); + unsigned long result = stoul(s, nullptr, 16); return result; } diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 49b29f1d5..473d87484 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -1414,7 +1414,7 @@ Result> Detector::getRxDbitList(Positions pos) const { return pimpl->Parallel(&slsDetector::getReceiverDbitList, pos); } -void Detector::setRxDbitList(std::vector list, Positions pos) { +void Detector::setRxDbitList(const std::vector& list, Positions pos) { pimpl->Parallel(&slsDetector::setReceiverDbitList, pos, list); } @@ -1776,6 +1776,7 @@ std::vector Detector::getPortNumbers(int start_port) { break; } std::vector res; + res.reserve(size()); for (int idet = 0; idet < size(); ++idet) { res.push_back(start_port + (idet * num_sockets_per_detector)); } diff --git a/slsDetectorSoftware/src/multiSlsDetector.cpp b/slsDetectorSoftware/src/multiSlsDetector.cpp index 0ba72c2bf..a6773b9d4 100755 --- a/slsDetectorSoftware/src/multiSlsDetector.cpp +++ b/slsDetectorSoftware/src/multiSlsDetector.cpp @@ -8,10 +8,10 @@ #include "sls_detector_exceptions.h" #include "versionAPI.h" +#include "ToString.h" #include "container_utils.h" #include "network_utils.h" #include "string_utils.h" -#include "ToString.h" #include #include @@ -643,7 +643,7 @@ void multiSlsDetector::readFrameFromReceiver() { << "\n\tsingledetrowoffset: " << singledetrowoffset << "\n\trowoffset: " << rowoffset; - if (eiger && (flippedDataX != 0u)) { + if (eiger && (flippedDataX != 0U)) { for (uint32_t i = 0; i < nPixelsY; ++i) { memcpy(((char *)multiframe) + ((yoffset + (nPixelsY - 1 - i)) * diff --git a/slsDetectorSoftware/src/slsDetector.cpp b/slsDetectorSoftware/src/slsDetector.cpp index 221fcf5be..b1178f1ea 100755 --- a/slsDetectorSoftware/src/slsDetector.cpp +++ b/slsDetectorSoftware/src/slsDetector.cpp @@ -1,12 +1,12 @@ #include "slsDetector.h" #include "ClientSocket.h" #include "SharedMemory.h" +#include "ToString.h" #include "file_utils.h" #include "network_utils.h" #include "sls_detector_exceptions.h" #include "string_utils.h" #include "versionAPI.h" -#include "ToString.h" #include #include @@ -343,9 +343,9 @@ void slsDetector::initializeDetectorStructure(detectorType type) { (detId * ((shm()->myDetectorType == EIGER) ? 2 : 1)); shm()->rxUpstream = false; shm()->rxReadFreq = 1; - shm()->zmqip = 0u; - shm()->rxZmqip = 0u; - shm()->gappixels = 0u; + shm()->zmqip = IpAddr{}; + shm()->rxZmqip = IpAddr{}; + shm()->gappixels = 0U; memset(shm()->rxAdditionalJsonHeader, 0, MAX_STR_LENGTH); shm()->rxFrameDiscardMode = NO_DISCARD; shm()->rxFramePadding = true; @@ -558,7 +558,7 @@ void slsDetector::updateNumberOfChannels() { nachans = 32; } else { for (int ich = 0; ich < 32; ++ich) { - if ((mask & (1 << ich)) != 0u) + if ((mask & (1 << ich)) != 0U) ++nachans; } } @@ -578,7 +578,7 @@ void slsDetector::updateNumberOfChannels() { } slsDetectorDefs::xy slsDetector::getNumberOfChannels() const { - slsDetectorDefs::xy coord; + slsDetectorDefs::xy coord{}; coord.x = (shm()->nChan.x * shm()->nChip.x + shm()->gappixels * shm()->nGappixels.x); coord.y = (shm()->nChan.y * shm()->nChip.y + @@ -591,7 +591,7 @@ bool slsDetector::getQuad() { FILE_LOG(logDEBUG1) << "Getting Quad Type"; sendToDetector(F_GET_QUAD, nullptr, retval); FILE_LOG(logDEBUG1) << "Quad Type :" << retval; - return (retval == 0 ? false : true); + return retval != 0; } void slsDetector::setQuad(const bool enable) { @@ -686,11 +686,11 @@ bool slsDetector::lockServer(int lock) { FILE_LOG(logDEBUG1) << "Setting detector server lock to " << lock; sendToDetector(F_LOCK_SERVER, lock, retval); FILE_LOG(logDEBUG1) << "Lock: " << retval; - return (retval == 1 ? true : false); + return retval == 1; } sls::IpAddr slsDetector::getLastClientIP() { - sls::IpAddr retval = 0u; + sls::IpAddr retval; FILE_LOG(logDEBUG1) << "Getting last client ip to detector server"; sendToDetector(F_GET_LAST_CLIENT_IP, nullptr, retval); FILE_LOG(logDEBUG1) << "Last client IP to detector: " << retval; @@ -709,7 +709,7 @@ void slsDetector::execCommand(const std::string &cmd) { sls::strcpy_safe(arg, cmd.c_str()); FILE_LOG(logDEBUG1) << "Sending command to detector " << arg; sendToDetector(F_EXEC_COMMAND, arg, retval); - if (strlen(retval) != 0u) { + if (strlen(retval) != 0U) { FILE_LOG(logINFO) << "Detector " << detId << " returned:\n" << retval; } } @@ -722,7 +722,7 @@ void slsDetector::updateCachedDetectorVariables() { FORCE_UPDATE) { int n = 0, i32 = 0; int64_t i64 = 0; - sls::IpAddr lastClientIP = 0u; + sls::IpAddr lastClientIP; n += client.Receive(&lastClientIP, sizeof(lastClientIP)); FILE_LOG(logDEBUG1) << "Updating detector last modified by " << lastClientIP; @@ -1612,7 +1612,7 @@ bool slsDetector::getStoreInRamMode() { } void slsDetector::setReadoutMode(const slsDetectorDefs::readoutMode mode) { - uint32_t arg = static_cast(mode); + auto arg = static_cast(mode); FILE_LOG(logDEBUG1) << "Setting readout mode to " << arg; sendToDetector(F_SET_READOUT_MODE, arg, nullptr); shm()->roMode = mode; @@ -1825,7 +1825,7 @@ void slsDetector::setSourceUDPMAC(const sls::MacAddr mac) { } sls::MacAddr slsDetector::getSourceUDPMAC() { - sls::MacAddr retval(0lu); + sls::MacAddr retval(0LU); FILE_LOG(logDEBUG1) << "Getting source udp mac"; sendToDetector(F_GET_SOURCE_UDP_MAC, nullptr, retval); FILE_LOG(logDEBUG1) << "Source udp mac: " << retval; @@ -1841,7 +1841,7 @@ void slsDetector::setSourceUDPMAC2(const sls::MacAddr mac) { } sls::MacAddr slsDetector::getSourceUDPMAC2() { - sls::MacAddr retval(0lu); + sls::MacAddr retval(0LU); FILE_LOG(logDEBUG1) << "Getting source udp mac2"; sendToDetector(F_GET_SOURCE_UDP_MAC2, nullptr, retval); FILE_LOG(logDEBUG1) << "Source udp mac2: " << retval; @@ -1858,7 +1858,7 @@ void slsDetector::setSourceUDPIP(const IpAddr ip) { } sls::IpAddr slsDetector::getSourceUDPIP() { - sls::IpAddr retval(0u); + sls::IpAddr retval(0U); FILE_LOG(logDEBUG1) << "Getting source udp ip"; sendToDetector(F_GET_SOURCE_UDP_IP, nullptr, retval); FILE_LOG(logDEBUG1) << "Source udp ip: " << retval; @@ -1875,7 +1875,7 @@ void slsDetector::setSourceUDPIP2(const IpAddr ip) { } sls::IpAddr slsDetector::getSourceUDPIP2() { - sls::IpAddr retval(0u); + sls::IpAddr retval(0U); FILE_LOG(logDEBUG1) << "Getting source udp ip2"; sendToDetector(F_GET_SOURCE_UDP_IP2, nullptr, retval); FILE_LOG(logDEBUG1) << "Source udp ip2: " << retval; @@ -1889,7 +1889,7 @@ void slsDetector::setDestinationUDPIP(const IpAddr ip) { } sendToDetector(F_SET_DEST_UDP_IP, ip, nullptr); if (shm()->useReceiverFlag) { - sls::MacAddr retval(0lu); + sls::MacAddr retval(0LU); sendToReceiver(F_SET_RECEIVER_UDP_IP, ip, retval); FILE_LOG(logINFO) << "Setting destination udp mac to " << retval; sendToDetector(F_SET_DEST_UDP_MAC, retval, nullptr); @@ -1897,7 +1897,7 @@ void slsDetector::setDestinationUDPIP(const IpAddr ip) { } sls::IpAddr slsDetector::getDestinationUDPIP() { - sls::IpAddr retval(0u); + sls::IpAddr retval(0U); FILE_LOG(logDEBUG1) << "Getting destination udp ip"; sendToDetector(F_GET_DEST_UDP_IP, nullptr, retval); FILE_LOG(logDEBUG1) << "Destination udp ip: " << retval; @@ -1908,7 +1908,7 @@ void slsDetector::updateRxDestinationUDPIP() { auto ip = getDestinationUDPIP(); if (ip == 0) { // Hostname could be ip try to decode otherwise look up the hostname - ip = shm()->rxHostname; + ip = sls::IpAddr{shm()->rxHostname}; if (ip == 0) { ip = HostnameToIp(shm()->rxHostname); } @@ -1925,7 +1925,7 @@ void slsDetector::setDestinationUDPIP2(const IpAddr ip) { sendToDetector(F_SET_DEST_UDP_IP2, ip, nullptr); if (shm()->useReceiverFlag) { - sls::MacAddr retval(0lu); + sls::MacAddr retval(0LU); sendToReceiver(F_SET_RECEIVER_UDP_IP2, ip, retval); FILE_LOG(logINFO) << "Setting destination udp mac2 to " << retval; sendToDetector(F_SET_DEST_UDP_MAC2, retval, nullptr); @@ -1933,7 +1933,7 @@ void slsDetector::setDestinationUDPIP2(const IpAddr ip) { } sls::IpAddr slsDetector::getDestinationUDPIP2() { - sls::IpAddr retval(0u); + sls::IpAddr retval(0U); FILE_LOG(logDEBUG1) << "Getting destination udp ip2"; sendToDetector(F_GET_DEST_UDP_IP2, nullptr, retval); FILE_LOG(logDEBUG1) << "Destination udp ip2: " << retval; @@ -1944,7 +1944,7 @@ void slsDetector::updateRxDestinationUDPIP2() { auto ip = getDestinationUDPIP2(); if (ip == 0) { // Hostname could be ip try to decode otherwise look up the hostname - ip = shm()->rxHostname; + ip = sls::IpAddr{shm()->rxHostname}; if (ip == 0) { ip = HostnameToIp(shm()->rxHostname); } @@ -1963,7 +1963,7 @@ void slsDetector::setDestinationUDPMAC(const MacAddr mac) { } sls::MacAddr slsDetector::getDestinationUDPMAC() { - sls::MacAddr retval(0lu); + sls::MacAddr retval(0LU); FILE_LOG(logDEBUG1) << "Getting destination udp mac"; sendToDetector(F_GET_DEST_UDP_MAC, nullptr, retval); FILE_LOG(logDEBUG1) << "Destination udp mac: " << retval; @@ -1980,7 +1980,7 @@ void slsDetector::setDestinationUDPMAC2(const MacAddr mac) { } sls::MacAddr slsDetector::getDestinationUDPMAC2() { - sls::MacAddr retval(0lu); + sls::MacAddr retval(0LU); FILE_LOG(logDEBUG1) << "Getting destination udp mac2"; sendToDetector(F_GET_DEST_UDP_MAC2, nullptr, retval); FILE_LOG(logDEBUG1) << "Destination udp mac2: " << retval; @@ -2116,7 +2116,7 @@ void slsDetector::updateReceiverStreamingIP() { auto ip = getReceiverStreamingIP(); if (ip == 0) { // Hostname could be ip try to decode otherwise look up the hostname - ip = shm()->rxHostname; + ip = sls::IpAddr{shm()->rxHostname}; if (ip == 0) { ip = HostnameToIp(shm()->rxHostname); } @@ -2130,7 +2130,7 @@ bool slsDetector::getTenGigaFlowControl() { int retval = -1; sendToDetector(F_GET_TEN_GIGA_FLOW_CONTROL, nullptr, retval); FILE_LOG(logDEBUG1) << "ten giga flow control :" << retval; - return retval == 1 ? true : false; + return retval == 1; } void slsDetector::setTenGigaFlowControl(bool enable) { @@ -2252,7 +2252,7 @@ std::string slsDetector::setAdditionalJsonParameter(const std::string &key, // key not found, append key value pair else { - if (header.length() != 0u) { + if (header.length() != 0U) { header.append(","); } header.append(keyLiteral + valueLiteral); @@ -2265,7 +2265,7 @@ std::string slsDetector::setAdditionalJsonParameter(const std::string &key, std::string slsDetector::getAdditionalJsonParameter(const std::string &key) { // additional json header is empty - if (strlen(shm()->rxAdditionalJsonHeader) == 0u) + if (strlen(shm()->rxAdditionalJsonHeader) == 0U) return std::string(); // add quotations before and after the key value @@ -2585,7 +2585,7 @@ void slsDetector::setADCEnableMask(uint32_t mask) { updateNumberOfChannels(); // send to processor - if (shm()->myDetectorType == MOENCH && shm()->tenGigaEnable == 0) + if (shm()->myDetectorType == MOENCH && !shm()->tenGigaEnable) setAdditionalJsonParameter("adcmask", std::to_string(shm()->adcEnableMaskOneGiga)); @@ -2620,7 +2620,7 @@ void slsDetector::setTenGigaADCEnableMask(uint32_t mask) { updateNumberOfChannels(); // send to processor - if (shm()->myDetectorType == MOENCH && shm()->tenGigaEnable == 1) + if (shm()->myDetectorType == MOENCH && shm()->tenGigaEnable) setAdditionalJsonParameter("adcmask", std::to_string(shm()->adcEnableMaskTenGiga)); @@ -2682,7 +2682,7 @@ int slsDetector::setExternalSampling(int value) { int slsDetector::getExternalSampling() { return setExternalSampling(-1); } -void slsDetector::setReceiverDbitList(std::vector list) { +void slsDetector::setReceiverDbitList(const std::vector& list) { FILE_LOG(logDEBUG1) << "Setting Receiver Dbit List"; if (list.size() > 64) { @@ -2811,7 +2811,7 @@ int slsDetector::enableGapPixels(int val) { return shm()->gappixels; } -int slsDetector::setTrimEn(std::vector energies) { +int slsDetector::setTrimEn(const std::vector& energies) { if (shm()->myDetectorType != EIGER) { throw RuntimeError("Not implemented for this detector."); } @@ -3152,7 +3152,7 @@ int slsDetector::lockReceiver(int lock) { } sls::IpAddr slsDetector::getReceiverLastClientIP() const { - sls::IpAddr retval = 0u; + sls::IpAddr retval; FILE_LOG(logDEBUG1) << "Getting last client ip to receiver server"; if (shm()->useReceiverFlag) { sendToReceiver(F_GET_LAST_RECEIVER_CLIENT_IP, nullptr, retval); @@ -3190,7 +3190,7 @@ void slsDetector::updateCachedReceiverVariables() const { int n = 0, i32 = 0; int64_t i64 = 0; char cstring[MAX_STR_LENGTH]{}; - IpAddr ip = 0u; + IpAddr ip; n += receiver.Receive(&ip, sizeof(ip)); FILE_LOG(logDEBUG1) @@ -3673,7 +3673,7 @@ void slsDetector::setPattern(const std::string &fname) { uint64_t addr = 0; FILE *fd = fopen(fname.c_str(), "r"); if (fd != nullptr) { - while (fread(&word, sizeof(word), 1, fd) != 0u) { + while (fread(&word, sizeof(word), 1, fd) != 0U) { setPatternWord(addr, word); // TODO! (Erik) do we need to send // pattern in 64bit chunks? ++addr; diff --git a/slsDetectorSoftware/src/slsDetector.h b/slsDetectorSoftware/src/slsDetector.h index a6ca0f03d..c7f287f65 100755 --- a/slsDetectorSoftware/src/slsDetector.h +++ b/slsDetectorSoftware/src/slsDetector.h @@ -1236,7 +1236,7 @@ class slsDetector : public virtual slsDetectorDefs { * @param list external sampling source (Option: 0-63) * @param detPos -1 for all detectors in list or specific detector position */ - void setReceiverDbitList(std::vector list); + void setReceiverDbitList(const std::vector& list); /** * Get external sampling source (CTB only) @@ -1317,7 +1317,7 @@ class slsDetector : public virtual slsDetectorDefs { * @param vector os trimmed energies * @returns number of trim energies */ - int setTrimEn(std::vector energies = {}); + int setTrimEn(const std::vector& energies = {}); /** * Returns a vector with the trimmed energies (Eiger) diff --git a/slsReceiverSoftware/include/GeneralData.h b/slsReceiverSoftware/include/GeneralData.h index 427b2c790..57aae95d2 100755 --- a/slsReceiverSoftware/include/GeneralData.h +++ b/slsReceiverSoftware/include/GeneralData.h @@ -571,12 +571,14 @@ public: } ncounters = n; nPixelsX = NCHAN * ncounters; + FILE_LOG(logINFO) << "nPixelsX: " << nPixelsX; imageSize = nPixelsX * nPixelsY * ((dr > 16) ? 4 : // 32 bit ((dr > 8) ? 2 : // 16 bit ((dr > 4) ? 0.5 : // 4 bit 0.125))); // 1 bit dataSize = imageSize / packetsPerFrame; packetSize = headerSizeinPacket + dataSize; + FILE_LOG(logINFO) << "PacketSize: " << packetSize; } /** @@ -590,7 +592,8 @@ public: ((dr > 4) ? 0.5 : // 4 bit 0.125))); // 1 bit dataSize = imageSize / packetsPerFrame; - packetSize = headerSizeinPacket + dataSize; + packetSize = headerSizeinPacket + dataSize; + FILE_LOG(logINFO) << "PacketSize: " << packetSize; } }; diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 15e0bbb18..b0d9006e7 100755 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -320,7 +320,7 @@ int ClientInterface::send_update(Interface &socket) { int64_t i64 = -1; char cstring[MAX_STR_LENGTH]{}; - sls::IpAddr ip = 0u; + sls::IpAddr ip; ip = server->getLastClient(); n += socket.Send(&ip, sizeof(ip)); @@ -920,7 +920,7 @@ int ClientInterface::set_streaming_port(Interface &socket) { } int ClientInterface::set_streaming_source_ip(Interface &socket) { - sls::IpAddr arg = 0u; + sls::IpAddr arg; socket.Receive(arg); verifyIdle(socket); FILE_LOG(logDEBUG1) << "Setting streaming source ip:" << arg; diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index 55e0c4fb4..9a03eb61c 100755 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -90,7 +90,7 @@ void Implementation::InitializeMembers() { streamingFrequency = 1; streamingTimerInMs = DEFAULT_STREAMING_TIMER_IN_MS; streamingPort = 0; - streamingSrcIP = 0u; + streamingSrcIP = sls::IpAddr{}; additionalJsonHeader = ""; // detector parameters @@ -1298,7 +1298,7 @@ void Implementation::setNumberofCounters(const int i) { numberOfCounters = i; if (myDetectorType == MYTHEN3) { - generalData->SetDynamicRange(i, tengigaEnable); + generalData->SetNumberofCounters(i, dynamicRange); // to update npixelsx, npixelsy in file writer for (const auto &it : dataProcessor) it->SetPixelDimension(); diff --git a/slsSupportLib/include/ToString.h b/slsSupportLib/include/ToString.h index 0b7bbb32d..6e9cca336 100644 --- a/slsSupportLib/include/ToString.h +++ b/slsSupportLib/include/ToString.h @@ -9,9 +9,9 @@ #include "TimeHelper.h" #include "TypeTraits.h" +#include "sls_detector_defs.h" #include "sls_detector_exceptions.h" #include "string_utils.h" -#include "sls_detector_defs.h" #include #include #include diff --git a/slsSupportLib/include/ZmqSocket.h b/slsSupportLib/include/ZmqSocket.h index 2e2f23d26..216bde8af 100755 --- a/slsSupportLib/include/ZmqSocket.h +++ b/slsSupportLib/include/ZmqSocket.h @@ -10,15 +10,15 @@ #include "ansi.h" #include "sls_detector_exceptions.h" -#include -#include -#include -#include //gethostbyname() #include //inet_ntoa +#include +#include +#include //gethostbyname() #include //json header in zmq stream #include #include //usleep in some machines #include +#include using namespace rapidjson; diff --git a/slsSupportLib/include/file_utils.h b/slsSupportLib/include/file_utils.h index 0b9ceadbb..dd208e62d 100755 --- a/slsSupportLib/include/file_utils.h +++ b/slsSupportLib/include/file_utils.h @@ -3,9 +3,9 @@ #include "sls_detector_defs.h" -#include +#include #include -#include +#include /** (used by multi and sls) diff --git a/slsSupportLib/include/logger.h b/slsSupportLib/include/logger.h index 8de0c2f49..5239cc0f2 100755 --- a/slsSupportLib/include/logger.h +++ b/slsSupportLib/include/logger.h @@ -1,10 +1,10 @@ #pragma once -#include -#include -#include -#include #include +#include +#include +#include +#include @@ -89,7 +89,7 @@ inline std::string NowTime() strftime(buffer, buffer_len, "%X", localtime_r(&t, &r)); buffer[buffer_len - 1] = 0; struct timeval tv; - gettimeofday(&tv, 0); + gettimeofday(&tv, nullptr); char result[100]; const int result_len = sizeof(result); snprintf(result, result_len, "%s.%03ld", buffer, (long)tv.tv_usec / 1000); diff --git a/slsSupportLib/include/network_utils.h b/slsSupportLib/include/network_utils.h index df411468d..faa2f3625 100755 --- a/slsSupportLib/include/network_utils.h +++ b/slsSupportLib/include/network_utils.h @@ -1,7 +1,7 @@ #pragma once +#include #include #include -#include namespace sls { @@ -10,10 +10,10 @@ class IpAddr { uint32_t addr_{0}; public: - constexpr IpAddr() noexcept{} - constexpr IpAddr(uint32_t address) noexcept : addr_{address} {} - IpAddr(const std::string &address); - IpAddr(const char *address); + constexpr IpAddr() noexcept = default; + explicit constexpr IpAddr(uint32_t address) noexcept : addr_{address} {} + explicit IpAddr(const std::string &address); + explicit IpAddr(const char *address); std::string str() const; std::string hex() const; std::array arr() const; @@ -38,8 +38,8 @@ class MacAddr { std::string to_hex(const char delimiter = 0) const; public: - constexpr MacAddr() noexcept{} - constexpr MacAddr(uint64_t mac) noexcept : addr_{mac} {} + constexpr MacAddr() noexcept = default; + explicit constexpr MacAddr(uint64_t mac) noexcept : addr_{mac} {} MacAddr(std::string mac); MacAddr(const char *address); std::string str() const; diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index 12e2ae757..5e6823adf 100755 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -14,14 +14,20 @@ #define __cplusplus #endif -#include +#include "ansi.h" + #ifdef __cplusplus +//C++ includes #include "sls_detector_exceptions.h" #include #include +#include #include +#else +//C includes +#include #endif -#include "ansi.h" + #define BIT32_MASK 0xFFFFFFFF #define MAX_RX_DBIT 64 @@ -72,7 +78,6 @@ #ifdef __cplusplus class slsDetectorDefs { public: - slsDetectorDefs(){}; #endif /** Type of the detector */ @@ -146,20 +151,13 @@ class slsDetectorDefs { #ifdef __cplusplus #define MAX_NUM_PACKETS 512 - - typedef std::bitset sls_bitset; - - typedef struct { + using sls_bitset = std::bitset; + using bitset_storage = uint8_t[MAX_NUM_PACKETS / 8]; + struct sls_receiver_header{ sls_detector_header detHeader; /**< is the detector header */ sls_bitset packetsMask; /**< is the packets caught bit mask */ - } sls_receiver_header; - - typedef uint8_t bitset_storage[MAX_NUM_PACKETS / 8]; - + }; #endif - /** - * frameDiscardPolicy - */ enum frameDiscardPolicy { GET_FRAME_DISCARD_POLICY = -1, /**< to get the missing packet mode */ NO_DISCARD, /**< pad incomplete packets with -1, default mode */ @@ -171,9 +169,6 @@ class slsDetectorDefs { NUM_DISCARD_POLICIES }; - /** -format - */ enum fileFormat { GET_FILE_FORMAT = -1, /**< the receiver will return its file format */ BINARY, /**< binary format */ @@ -214,8 +209,8 @@ format #ifdef __cplusplus struct xy { - int x; - int y; + int x{0}; + int y{0}; }; #endif @@ -466,8 +461,8 @@ struct detParameters { int nGappixelsX{0}; int nGappixelsY{0}; - detParameters() {} - detParameters(slsDetectorDefs::detectorType type) { + detParameters() = default; + explicit detParameters(slsDetectorDefs::detectorType type) { switch (type) { case slsDetectorDefs::detectorType::GOTTHARD: nChanX = 128; @@ -582,7 +577,7 @@ typedef struct { : serialnumber(0), nchan(0), nchip(0), ndac(0), reg(0), iodelay(0), tau(0), eV(0), dacs(nullptr), chanregs(nullptr) {} - sls_detector_module(slsDetectorDefs::detectorType type) + explicit sls_detector_module(slsDetectorDefs::detectorType type) : sls_detector_module() { detParameters parameters{type}; int nch = parameters.nChanX * parameters.nChanY; @@ -633,5 +628,5 @@ typedef struct { namespace sls{ using Positions = const std::vector &; using defs = slsDetectorDefs; -} +} // namespace sls #endif diff --git a/slsSupportLib/include/sls_detector_exceptions.h b/slsSupportLib/include/sls_detector_exceptions.h index c018ac716..af00c0515 100755 --- a/slsSupportLib/include/sls_detector_exceptions.h +++ b/slsSupportLib/include/sls_detector_exceptions.h @@ -11,7 +11,7 @@ public: RuntimeError(): runtime_error("SLS Detector Package Failed") { FILE_LOG(logERROR) << "SLS Detector Package Failed"; } - RuntimeError(std::string msg): runtime_error(msg) { + RuntimeError(const std::string& msg): runtime_error(msg) { FILE_LOG(logERROR) << msg; } RuntimeError(const char* msg): runtime_error(msg) { @@ -21,40 +21,40 @@ public: struct SharedMemoryError : public RuntimeError { public: - SharedMemoryError(std::string msg):RuntimeError(msg) {} + SharedMemoryError(const std::string& msg):RuntimeError(msg) {} }; struct SocketError : public RuntimeError { public: - SocketError(std::string msg):RuntimeError(msg) {} + SocketError(const std::string& msg):RuntimeError(msg) {} }; struct ZmqSocketError : public RuntimeError { public: - ZmqSocketError(std::string msg):RuntimeError(msg) {} + ZmqSocketError(const std::string& msg):RuntimeError(msg) {} }; struct NotImplementedError : public RuntimeError { public: - NotImplementedError(std::string msg):RuntimeError(msg) {} + NotImplementedError(const std::string& msg):RuntimeError(msg) {} }; struct DetectorError : public RuntimeError { public: - DetectorError(std::string msg):RuntimeError(msg) {} + DetectorError(const std::string& msg):RuntimeError(msg) {} }; struct ReceiverError : public RuntimeError { public: - ReceiverError(std::string msg):RuntimeError(msg) {} + ReceiverError(const std::string& msg):RuntimeError(msg) {} }; struct GuiError : public RuntimeError { public: - GuiError(std::string msg):RuntimeError(msg) {} + GuiError(const std::string& msg):RuntimeError(msg) {} }; -} +} // namespace sls diff --git a/slsSupportLib/src/ServerSocket.cpp b/slsSupportLib/src/ServerSocket.cpp index ea7c831f1..93c9398da 100755 --- a/slsSupportLib/src/ServerSocket.cpp +++ b/slsSupportLib/src/ServerSocket.cpp @@ -48,7 +48,7 @@ ServerInterface2 ServerSocket::accept() { } char tc[INET_ADDRSTRLEN]{}; inet_ntop(AF_INET, &(clientAddr.sin_addr), tc, INET_ADDRSTRLEN); - thisClient = tc; + thisClient = IpAddr{tc}; return ServerInterface2(newSocket); } diff --git a/slsSupportLib/src/network_utils.cpp b/slsSupportLib/src/network_utils.cpp index 98637cb03..a5630eb4e 100755 --- a/slsSupportLib/src/network_utils.cpp +++ b/slsSupportLib/src/network_utils.cpp @@ -106,7 +106,7 @@ std::string IpToInterfaceName(const std::string &ip) { strcpy(buf, "none"); getifaddrs(&addrs); - for (iap = addrs; iap != NULL; iap = iap->ifa_next) { + for (iap = addrs; iap != nullptr; iap = iap->ifa_next) { if (iap->ifa_addr && (iap->ifa_flags & IFF_UP) && iap->ifa_addr->sa_family == AF_INET) { sa = (struct sockaddr_in *)(iap->ifa_addr);