mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-20 02:40:03 +02:00
86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
import os
|
|
import re
|
|
from pathlib import Path
|
|
def remove_comments(text):
|
|
def replacer(match):
|
|
s = match.group(0)
|
|
if s.startswith('/'):
|
|
return " " # note: a space and not an empty string
|
|
else:
|
|
return s
|
|
pattern = re.compile(
|
|
r'//.*?$|/\*.*?\*/|\'(?:\\.|[^\\\'])*\'|"(?:\\.|[^\\"])*"',
|
|
re.DOTALL | re.MULTILINE
|
|
)
|
|
return re.sub(pattern, replacer, text)
|
|
|
|
|
|
# @CMAKE_CURRENT_BINARY_DIR@
|
|
|
|
print('\n\n\n\n SERVER CSV')
|
|
|
|
src = Path('@CMAKE_SOURCE_DIR@')/'slsDetectorServers/'
|
|
detectors = ['Mythen3', 'Gotthard2', 'Eiger',
|
|
'Jungfrau', 'Moench', 'Gotthard', 'Ctb']
|
|
|
|
|
|
for det in detectors:
|
|
print(det)
|
|
in_fname = src/f'{det.lower()}DetectorServer/slsDetectorServer_defs.h'
|
|
#print(f'Reading: {in_fname}')
|
|
with open(in_fname) as f:
|
|
lines = f.read().replace('\\\n', '')
|
|
lines = lines.splitlines(keepends = True)
|
|
|
|
lines = [l.strip('#define').strip(' ') for l in lines if l.startswith('#define')]
|
|
output = []
|
|
signals = []
|
|
fields = ['Name,', 'Value', 'Comment']
|
|
excluded = ['DAC_NAMES', 'DEFAULT_DAC_VALS', 'CLK_NAMES', 'ONCHIP_DAC_NAMES']
|
|
header = f'{fields[0]:35}{fields[1]:35}\n'
|
|
output.append(header)
|
|
signals.append(header)
|
|
dac_names = []
|
|
dac_values = []
|
|
for line in lines:
|
|
name, *parts = line.split()
|
|
arg = ' '.join(parts)
|
|
value, *comments = arg.split('//')
|
|
value = value.strip('() ')
|
|
# value = value.replace(', ', ' ')
|
|
value = value.replace('\"', '')
|
|
if name not in excluded:
|
|
name += ','
|
|
if name.startswith('SIGNAL_'):
|
|
signals.append(f'{name:35}{value}\n')
|
|
else:
|
|
output.append(f'{name:35}\"{value}\"\n')
|
|
elif name == 'DAC_NAMES':
|
|
dac_names = [v.strip(', ') for v in value.split()]
|
|
dac_names = [n+',' for n in dac_names]
|
|
elif name == 'DEFAULT_DAC_VALS':
|
|
dac_values = remove_comments(value).strip('{}; ')
|
|
dac_values = dac_values.replace(',', '').split()
|
|
dac_values = [v.strip('') for v in dac_values]
|
|
|
|
print(f"dac_names: {len(dac_names)}, dac_values={len(dac_values)}")
|
|
if len(dac_values) == 0:
|
|
dac_values = ['N/A']*len(dac_names)
|
|
|
|
|
|
|
|
rstpath = Path('@CMAKE_SOURCE_DIR@')/'docs/src/'
|
|
|
|
out_fname = Path.cwd()/f'src/{det.lower()}.csv'
|
|
out_dac_fname = Path.cwd()/f'src/{det.lower()}-dacs.csv'
|
|
#print(f'Writing: {out_fname}')
|
|
with open(out_fname, 'w') as f:
|
|
f.writelines(output)
|
|
|
|
output = [f'{n:35}{v}\n' for n,v in zip(dac_names, dac_values)]
|
|
output.insert(0, header)
|
|
|
|
with open(out_dac_fname, 'w') as f:
|
|
f.writelines(output)
|
|
|
|
print('END\n\n\n\n') |