mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-12-26 14:11:18 +01:00
readout speed added to json and h5 master files. Also fixed master file inconsistencies Sserver binaries - update server binaries because readoutspeed needs to be sent to receiver with rx_hostname command API - added const to Detector class set/getburstmode Python - updated python bindings (burstmode const and roi arguments) Cmd generation - added pragma once in Caller.in.h as Caller is included in test files m3: num channels due to #counters < 3 * workaround for m3 for messed up num channels (client always assumes all counters enabled and adds them to num channels), fix for hdf5 g2: exptime master file inconsistency - exptime didnt match because of round of when setting burst mode (sets to a different clk divider) - so updating actual time for all timers (exptime, period, subexptime etc, ) in Module class, get timer values from detector when setting it and then send to receiver to write in master file ctb image size incorrect: - write actual size into master file and not the reserved size (digital reduces depending on dbit list and dbit offset) - added a calculate ctb image size free function in generalData.h that is used there as well as for the tests. master file inconsistencies - refactored master attributes writing using templates - names changed to keep it consistent between json and hdf5 master file (Version, Pixels, Exposure Times, GateDelays, Acquisition Period, etc.) - datatypes changed to keep it simple where possible: imageSize, dynamicRange, tengiga, quad, readnrows, analog, analogsamples, digital, digitalsamples, dbitreorder, dbitoffset, transceivermask, transeiver, transceiversamples, countermask, gates =>int - replacing "toString" with arrays, objects etc for eg for scan, rois, etc. - json header always written (empty dataset or empty brackets) - hdf5 needs const char* so have to convert strings to it, but taking care that strings exist prior to push_back - master attributes (redundant string literals->error prone tests for master file - suppressed deprecated functions in rapidjson warnings just for the tests - added slsREceiverSoftware/src to allow access to receiver_defs.h to test binary/hdf5 version - refactored acquire tests by moving all the acquire tests from individual detector type files to a single one=test-Caller-acquire.cpp - set some default settings (loadBasicSettings) for a basic acquire at load config part for the test_simulator python scripts. so minimum number of settings for detector to be set for any acquire tests. - added tests to test master files for json and hdf5= test-Caller-master-attributes.cpp - added option to add '-m' markers for tests using test_simulator python script
120 lines
3.8 KiB
Python
120 lines
3.8 KiB
Python
# SPDX-License-Identifier: LGPL-3.0-or-other
|
|
# Copyright (C) 2021 Contributors to the SLS Detector Package
|
|
'''
|
|
This file is used to start up simulators, receivers and test roi for every detector in many configurations.
|
|
'''
|
|
|
|
import sys, time
|
|
import traceback
|
|
|
|
from slsdet import Detector, burstMode
|
|
from slsdet.defines import DEFAULT_TCP_RX_PORTNO, DEFAULT_UDP_DST_PORTNO
|
|
from datetime import timedelta
|
|
|
|
|
|
from utils_for_test import (
|
|
Log,
|
|
LogLevel,
|
|
RuntimeException,
|
|
cleanup,
|
|
startProcessInBackground,
|
|
startDetectorVirtualServer,
|
|
connectToVirtualServers,
|
|
loadBasicSettings,
|
|
runProcessWithLogFile
|
|
)
|
|
|
|
LOG_PREFIX_FNAME = '/tmp/slsDetectorPackage_virtual_roi_test'
|
|
MAIN_LOG_FNAME = LOG_PREFIX_FNAME + '_log.txt'
|
|
ROI_TEST_FNAME = LOG_PREFIX_FNAME + '_results_'
|
|
|
|
def startReceiver(num_mods, fp):
|
|
if num_mods == 1:
|
|
cmd = ['slsReceiver']
|
|
else:
|
|
cmd = ['slsMultiReceiver', str(DEFAULT_TCP_RX_PORTNO), str(num_mods)]
|
|
# in 10.0.0
|
|
#cmd = ['slsMultiReceiver', '-p', str(DEFAULT_TCP_RX_PORTNO), '-n', str(num_mods)]
|
|
startProcessInBackground(cmd, fp)
|
|
time.sleep(1)
|
|
|
|
|
|
def loadConfigForRoi(name, fp, num_mods = 1, num_interfaces = 1):
|
|
Log(LogLevel.INFO, 'Loading config')
|
|
Log(LogLevel.INFO, 'Loading config', fp)
|
|
try:
|
|
d = connectToVirtualServers(name, num_mods)
|
|
|
|
if name == 'jungfrau' or name == 'moench':
|
|
d.numinterfaces = num_interfaces
|
|
|
|
d.udp_dstport = DEFAULT_UDP_DST_PORTNO
|
|
if name == 'eiger' or name == 'jungfrau' or name == 'moench':
|
|
d.udp_dstport2 = DEFAULT_UDP_DST_PORTNO + 1
|
|
|
|
d.rx_hostname = 'localhost'
|
|
d.udp_dstip = 'auto'
|
|
if name != "eiger":
|
|
d.udp_srcip = 'auto'
|
|
if name == 'jungfrau' or name == 'moench':
|
|
d.udp_dstip2 = 'auto'
|
|
d.powerchip = 1
|
|
|
|
d.frames = 5
|
|
|
|
except Exception as e:
|
|
raise RuntimeException(f'Could not load config for {name}. Error: {str(e)}') from e
|
|
|
|
return d
|
|
|
|
def startTestsForAll(fp):
|
|
servers = [
|
|
'eiger',
|
|
'jungfrau',
|
|
'mythen3',
|
|
'gotthard2',
|
|
'moench',
|
|
]
|
|
nmods = 2
|
|
for server in servers:
|
|
for ninterfaces in range(1, 2):
|
|
if ninterfaces == 2 and server != 'jungfrau' and server != 'moench':
|
|
continue
|
|
try:
|
|
msg = f'Starting Roi Tests for {server}'
|
|
if server == 'jungfrau' or server == 'moench':
|
|
msg += f' with {ninterfaces} interfaces'
|
|
Log(LogLevel.INFOBLUE, msg)
|
|
Log(LogLevel.INFOBLUE, msg, fp)
|
|
cleanup(fp)
|
|
startDetectorVirtualServer(server, nmods, fp)
|
|
startReceiver(nmods, fp)
|
|
d = loadConfigForRoi(name=server, fp=fp, num_mods=nmods, num_interfaces=ninterfaces)
|
|
loadBasicSettings(name=server, d=d, fp=fp)
|
|
|
|
fname = ROI_TEST_FNAME + server + '.txt'
|
|
cmd = ['tests', 'rx_roi', '--abort', '-s']
|
|
runProcessWithLogFile('Roi Tests for ' + server, cmd, fp, fname)
|
|
Log(LogLevel.INFO, '\n')
|
|
except Exception as e:
|
|
raise RuntimeException(f'Roi Tests failed') from e
|
|
|
|
Log(LogLevel.INFOGREEN, 'Passed all Roi tests for all detectors \n' + str(servers))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
Log(LogLevel.INFOBLUE, '\nLog File: ' + MAIN_LOG_FNAME + '\n')
|
|
|
|
with open(MAIN_LOG_FNAME, 'w') as fp:
|
|
try:
|
|
startTestsForAll(fp)
|
|
#TODO: check master file as well for both json and hdf5 as well
|
|
cleanup(fp)
|
|
except Exception as e:
|
|
with open(MAIN_LOG_FNAME, 'a') as fp_error:
|
|
traceback.print_exc(file=fp_error)
|
|
cleanup(fp)
|
|
Log(LogLevel.ERROR, f'Tests Failed.')
|
|
|
|
|