Compare commits

..

1 Commits

Author SHA1 Message Date
froejdh_e
247b71a67a marked unused functions readDataFile/writeDataFile deprecated in file_utils.h 2025-12-16 17:13:46 +01:00
7 changed files with 51 additions and 97 deletions

View File

@@ -29,6 +29,7 @@ Checks: '*,
-llvmlibc-*'
HeaderFilterRegex: \.h
AnalyzeTemporaryDtors: false
FormatStyle: none
CheckOptions:
- { key: readability-identifier-naming.NamespaceCase, value: lower_case }

View File

@@ -37,6 +37,8 @@ Experimental support for building the detector client (including python bindings
``rx_dbitlist`` keeps the order of the passed bit list
Marked unused functions readDataFile/writeDataFile deprecated in file_utils.h
2 On-board Detector Server Compatibility
==========================================

View File

@@ -41,16 +41,15 @@ def pytest_collection_modifyitems(config, items):
#helper fixture for servers
@pytest.fixture
def servers(request):
""" Fixture to get server and num interaface from test marker. """
try:
return request.param # comes from @pytest.mark.parametrize(..., indirect=True)
except AttributeError:
# fallback default if the test did not parametrize
return [['eiger', 1], ['jungfrau', 1], ['jungfrau', 2], ['mythen3',1], ['gotthard2',1], ['ctb',1], ['moench',1], ['moench',2],['xilinx_ctb',1]]
return request.param
return ['eiger', 'jungfrau', 'mythen3', 'gotthard2', 'ctb', 'moench', 'xilinx_ctb']
return request.param
@pytest.fixture()
def test_with_specific_simulator(servers):
@pytest.fixture
def test_with_simulators(servers):
""" Fixture to automatically setup virtual detector servers for testing. """
LOG_PREFIX_FNAME = '/tmp/slsDetectorPackage_virtual_PythonAPI_test'
@@ -59,50 +58,23 @@ def test_with_specific_simulator(servers):
with open(MAIN_LOG_FNAME, 'w') as fp:
try:
nmods = 2
server, ninterface = servers
msg = f'Starting Python API Tests for {server}'
for server in servers:
for ninterfaces in range(1,2):
if ninterfaces == 2 and server != 'jungfrau' and server != 'moench':
continue
msg = f'Starting Python API Tests for {server}'
if server == 'jungfrau' or server == 'moench':
msg += f' with {ninterface} interfaces'
if server == 'jungfrau' or server == 'moench':
msg += f' with {ninterfaces} interfaces'
Log(LogLevel.INFOBLUE, msg, fp)
cleanup(fp)
startDetectorVirtualServer(server, nmods, fp)
startReceiver(nmods, fp)
d = loadConfig(name=server, log_file_fp=fp, num_mods=nmods, num_frames=1, num_interfaces=ninterface)
loadBasicSettings(name=server, d=d, fp=fp)
yield # run test
cleanup(fp) # teardown
except Exception as e:
with open(MAIN_LOG_FNAME, 'a') as fp_error:
traceback.print_exc(file=fp_error)
Log(LogLevel.ERROR, f'Tests Failed.', fp)
cleanup(fp)
@pytest.fixture(scope="module", params=[['eiger', 1], ['jungfrau', 1], ['jungfrau', 2], ['mythen3',1], ['gotthard2',1], ['ctb',1], ['moench',1], ['moench',2],['xilinx_ctb',1]])
def test_with_simulators(request):
""" Fixture to automatically setup virtual detector servers for testing. """
LOG_PREFIX_FNAME = '/tmp/slsDetectorPackage_virtual_PythonAPI_test'
MAIN_LOG_FNAME = LOG_PREFIX_FNAME + '_log.txt'
server, ninterfaces = request.param
with open(MAIN_LOG_FNAME, 'w') as fp:
try:
nmods = 2
msg = f'Starting Python API Tests for {server}'
if server == 'jungfrau' or server == 'moench':
msg += f' with {ninterfaces} interfaces'
Log(LogLevel.INFOBLUE, msg, fp)
cleanup(fp)
startDetectorVirtualServer(server, nmods, fp)
startReceiver(nmods, fp)
d = loadConfig(name=server, log_file_fp=fp, num_mods=nmods, num_frames=1, num_interfaces=ninterfaces)
loadBasicSettings(name=server, d=d, fp=fp)
yield # run test
Log(LogLevel.INFOBLUE, msg, fp)
cleanup(fp)
startDetectorVirtualServer(server, nmods, fp)
startReceiver(nmods, fp)
d = loadConfig(name=server, log_file_fp=fp, num_mods=nmods, num_frames=1, num_interfaces=ninterfaces)
loadBasicSettings(name=server, d=d, fp=fp)
yield # run test
cleanup(fp) # teardown
except Exception as e:
with open(MAIN_LOG_FNAME, 'a') as fp_error:

View File

@@ -5,67 +5,44 @@ from conftest import test_with_simulators
from slsdet import Detector
from slsdet._slsdet import slsDetectorDefs
detectorType = slsDetectorDefs.detectorType
@pytest.mark.withdetectorsimulators
def test_rx_ROI(test_with_simulators):
""" Test rx_ROI property of Detector class. """
@pytest.mark.parametrize("servers", [["moench"]], indirect=True)
def test_rx_ROI_moench(test_with_simulators, servers):
""" Test setting and getting rx_ROI property of Detector class for moench. """
d = Detector()
if d.type == detectorType.CHIPTESTBOARD or d.type == detectorType.XILINX_CHIPTESTBOARD:
pytest.skip("Skipping ROI test for ctb/xilinx_ctb detector types.")
d.rx_roi = (0, 10, 10, 20)
roi = d.rx_roi
assert roi == [(0, 10, 10, 20)]
if(d.type == detectorType.MYTHEN3 or d.type == detectorType.GOTTHARD2):
d.rx_roi = (0, 10)
roi = d.rx_roi
assert roi == [(0, 10, -1, -1)]
d.rx_roi = [5,15,15,25]
#d.rx_roi = [[5,15, 0, 1]] # not allowed for mythen3
assert d.rx_roi == [(5,15,15,25)]
d.rx_roi = [0,10, -1, -1]
d.rx_roi = [[0,10,0,20], [5,20,410,420]]
assert d.rx_roi == [(0,10,-1,-1)]
d.rx_clearroi()
else:
roi = d.rx_roi
assert roi == [(0,10,0,20), (5,20,410,420)]
d.rx_roi = (0, 10, 10, 20)
roi = d.rx_roi
assert roi == [(0, 10, 10, 20)]
d.rx_roi = [5,15,15,25]
assert d.rx_roi == [(5,15,15,25)]
if d.type != detectorType.JUNGFRAU and d.numinterfaces != 2:
d.rx_roi = [[0,10,0,20], [5,20,410,420]]
roi = d.rx_roi
assert roi == [(0,10,0,20), (5,20,410,420)] #in same file for jungfrau
d.rx_clearroi()
roi = d.rx_roi
assert roi == [(-1,-1,-1,-1)]
d.rx_clearroi()
roi = d.rx_roi
assert roi == [(-1,-1,-1,-1)]
@pytest.mark.withdetectorsimulators
@pytest.mark.parametrize("servers", [["moench", 1]], indirect=True)
def test_type(test_with_specific_simulator):
@pytest.mark.parametrize("servers", [["mythen3"]], indirect=True)
def test_rx_ROI_mythen(test_with_simulators, servers):
""" Test setting and getting rx_ROI property of Detector class for mythen. """
d = Detector()
assert d.type == detectorType.MOENCH
d.rx_roi = (0, 10)
roi = d.rx_roi
assert roi == [(0, 10, -1, -1)]
#d.rx_roi = [[5,15, 0, 1]] # not allowed for mythen3
@pytest.mark.withdetectorsimulators
@pytest.mark.parametrize("servers", [["moench", 1], ["jungfrau", 1]], indirect=True)
def test_numinterfaces(test_with_specific_simulator):
d.rx_roi = [0,10, -1, -1]
d = Detector()
assert d.numinterfaces == 1
assert d.rx_roi == [(0,10,-1,-1)]

View File

@@ -16,6 +16,7 @@ namespace sls {
* @param nch number of channels
* @param offset start channel value
*/
[[deprecated]]
int readDataFile(std::ifstream &infile, short int *data, int nch,
int offset = 0);
@@ -23,6 +24,7 @@ int readDataFile(std::ifstream &infile, short int *data, int nch,
* @param data array of data value
* @param nch number of channels
*/
[[deprecated]]
int readDataFile(std::string fname, short int *data, int nch);
std::vector<char> readBinaryFile(const std::string &fname,
@@ -33,6 +35,7 @@ std::vector<char> readBinaryFile(const std::string &fname,
* @param data array of data values
* @param offset start channel number
*/
[[deprecated]]
int writeDataFile(std::ofstream &outfile, int nch, short int *data,
int offset = 0);
@@ -40,6 +43,7 @@ int writeDataFile(std::ofstream &outfile, int nch, short int *data,
* @param nch number of channels
* @param data array of data values
*/
[[deprecated]]
int writeDataFile(std::string fname, int nch, short int *data);
// mkdir -p path implemented by recursive calls

View File

@@ -804,8 +804,6 @@ typedef struct {
}
sls_detector_module &operator=(const sls_detector_module &other) {
if(this == &other)
return *this;
delete[] dacs;
delete[] chanregs;
serialnumber = other.serialnumber;

View File

@@ -213,7 +213,7 @@ def loadConfig(name, rx_hostname = 'localhost', settingsdir = None, log_file_fp
d.numinterfaces = num_interfaces
d.udp_dstport = DEFAULT_UDP_DST_PORTNO
if name == 'eiger' or num_interfaces > 1:
if name == 'eiger' or name == 'jungfrau' or name == 'moench':
d.udp_dstport2 = DEFAULT_UDP_DST_PORTNO + 1
d.rx_hostname = rx_hostname
@@ -223,7 +223,7 @@ def loadConfig(name, rx_hostname = 'localhost', settingsdir = None, log_file_fp
if name != "eiger":
d.udp_srcip = 'auto'
if num_interfaces > 1:
if name == "jungfrau" or name == "moench":
d.udp_dstip2 = 'auto'
if name == "jungfrau" or name == "moench" or name == "xilinx_ctb":