Skip to content
This repository has been archived by the owner on Feb 11, 2023. It is now read-only.

Commit

Permalink
Merge pull request #49 from SiLab-Bonn/rad_monitor
Browse files Browse the repository at this point in the history
Support for radiation monitor
  • Loading branch information
leloup314 authored Mar 31, 2022
2 parents 28d6d87 + c08f40d commit 93d8b94
Show file tree
Hide file tree
Showing 16 changed files with 634 additions and 19 deletions.
45 changes: 43 additions & 2 deletions irrad_control/converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,16 @@ def _add_server_data(self, server, server_setup):
# Create group at root
self.output_table.create_group(self.output_table.root, server_setup['name'])

# Dedicated flag for NTC readout of DAQ Board
has_ntc_daq_board_ro = False

if 'readout' in server_setup:

self.readout_setup[server] = server_setup['readout']

if 'ntc' in server_setup['readout']:
has_ntc_daq_board_ro = True

# Fill lookup dicts
self._lookups[server]['ro_type_idx'] = {rt: server_setup['readout']['types'].index(rt) for rt in ro.RO_TYPES
if rt in server_setup['readout']['types']}
Expand Down Expand Up @@ -137,13 +143,13 @@ def _add_server_data(self, server, server_setup):
self.output_table.create_array('/{}/Histogram/{}'.format(server_setup['name'], table_name), 'unit', np.array([self.hists[hist_name]['unit']]))

# We have temperature data
if 'ntc' in server_setup['readout'] or 'ArduinoNTCReadout' in server_setup['devices']:
if has_ntc_daq_board_ro or 'ArduinoNTCReadout' in server_setup['devices']:

# Make temperature measurement group in outfile
# Create group at root
self.output_table.create_group('/{}'.format(server_setup['name']), 'Temperature')

if 'ntc' in server_setup['readout']:
if has_ntc_daq_board_ro:

dtype = self.dtypes.generic_dtype(names=['timestamp', 'ntc_channel', 'temperature'],
dtypes=['<f8', '<S{}'.format(np.max([len(s) for s in server_setup['readout']['ntc'].values()])), '<f2'])
Expand Down Expand Up @@ -201,6 +207,23 @@ def _add_server_data(self, server, server_setup):
# Add flag
self.data_flags[server][dname] = False

if 'RadiationMonitor' in server_setup['devices']:

names = ['timestamp', 'dose_rate', 'frequency']
dtype = self.dtypes.generic_dtype(names=names, dtypes=['<f8', '<f4', '<f4'])
dname = 'rad_monitor'
node_name = 'RadMonitor'

# Create and store tables
self.data_tables[server][dname] = self.output_table.create_table('/{}'.format(server_setup['name']),
description=dtype,
name=node_name)
# Create arrays
self.data_arrays[server][dname] = np.zeros(shape=1, dtype=dtype)

# Add flag
self.data_flags[server][dname] = False

def _calc_drate(self, server, meta):

# Check if we have incoming data timing stored
Expand Down Expand Up @@ -669,6 +692,20 @@ def _interpret_arduino_temp_data(self, server, data, meta):

return temp_data

def _interpret_rad_monitor_data(self, server, data, meta):

rad_data = {'meta': {'timestamp': meta['timestamp'], 'name': server, 'type': 'dose_rate'},
'data': {}}

self.data_arrays[server]['rad_monitor']['timestamp'] = meta['timestamp']

for rad in data:
self.data_arrays[server]['rad_monitor'][rad] = rad_data['data'][rad] = data[rad]

self.data_flags[server]['rad_monitor'] = True

return rad_data

def interpret_data(self, raw_data):
"""Interpretation of the data"""

Expand Down Expand Up @@ -722,6 +759,10 @@ def interpret_data(self, raw_data):
temp_data = self._interpret_arduino_temp_data(server=server, data=data, meta=meta_data)
interpreted_data.append(temp_data)

elif meta_data['type'] == 'rad_monitor':
rad_data = self._interpret_rad_monitor_data(server=server, data=data, meta=meta_data)
interpreted_data.append(rad_data)

# If event is not set, store data to hdf5 file
if not self.interaction_flags[server]['write'].is_set():
self.store_data(server)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def counts(self):

@property
def frequency(self):
return int(self.query(self.create_command(self.CMDS['frequency'])))
return float(self.query(self.create_command(self.CMDS['frequency'])))

def __init__(self, port, baudrate=115200, timeout=1):
super().__init__(port, baudrate, timeout)
Expand Down
3 changes: 3 additions & 0 deletions irrad_control/devices/devices.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
# Arduino
from .arduino.ntc_readout.arduino_ntc import ArduinoNTCReadout

# RadMonitor
from .rad_monitor.rad_monitor import RadiationMonitor

# Integrated circuits
from .ic.ADS1256.pipyadc import ADS1256
from .ic.TCA9555.tca9555 import TCA9555
Expand Down
12 changes: 9 additions & 3 deletions irrad_control/devices/devices_config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ ADCBoard:

IrradDAQBoard:
init:
port: /dev/ttyUSB2
port: /dev/ttyACM1
version: v0.2
address: 0x20

ZaberXYStage:
init:
serial_port: /dev/ttyUSB1
serial_port: /dev/ttyACM2

ArduinoNTCReadout:
init:
Expand All @@ -25,4 +25,10 @@ ArduinoNTCReadout:
timeout: 5
ntc_lim:
- -55
- 125
- 125

RadiationMonitor:
init:
counter_type: GasCounter
counter_port: '/dev/ttyACM0'
hv_port: '/dev/ttyUSB1'
Empty file.
Loading

0 comments on commit 93d8b94

Please sign in to comment.