Commit bb712967 authored by Olivier Kaufmann's avatar Olivier Kaufmann
Browse files

Renames length into duration for pulses and inj_time

Showing with 38 additions and 40 deletions
+38 -40
......@@ -10,12 +10,12 @@ k.exec_logger.setLevel(logging.INFO)
# Test _vab_pulse:
print('Testing positive _vab_pulse')
k._vab_pulse(vab=12, length=1., sampling_rate=k.rx.sampling_rate, polarity=1)
k._vab_pulse(vab=12, duration=1., sampling_rate=k.rx.sampling_rate, polarity=1)
r = k.readings[:,4]/k.readings[:,3]
print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms')
print('\nTesting negative _vab_pulse')
k._vab_pulse(vab=12, length=1., sampling_rate=k.rx.sampling_rate, polarity=-1)
k._vab_pulse(vab=12, duration=1., sampling_rate=k.rx.sampling_rate, polarity=-1)
r = k.readings[:,4]/k.readings[:,3]
print(f'Mean resistance: {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
print(f'sampling rate: {k.rx.sampling_rate:.1f} ms, mean sample spacing: {np.mean(np.diff(k.readings[:,0]))*1000.:.1f} ms')
......
......@@ -238,7 +238,7 @@ class MuxAbstract(ABC):
class TxAbstract(ABC):
def __init__(self, **kwargs):
self.board_name = kwargs.pop('board_name', 'unknown TX hardware')
inj_time = kwargs.pop('inj_time', 1.)
injection_duration = kwargs.pop('injection_duration', 1.)
self.exec_logger = kwargs.pop('exec_logger', None)
if self.exec_logger is None:
self.exec_logger = create_stdout_logger('exec_tx')
......@@ -248,9 +248,9 @@ class TxAbstract(ABC):
self.ctl = kwargs.pop('ctl', None)
self.pwr = kwargs.pop('pwr', None)
self._polarity = 0
self._inj_time = None
self._injection_duration = None
self._adc_gain = 1.
self.inj_time = inj_time
self.injection_duration = injection_duration
self._latency = kwargs.pop('latency', 0.)
self.tx_sync = kwargs.pop('tx_sync', Event())
self.exec_logger.debug(f'{self.board_name} TX initialization')
......@@ -273,30 +273,30 @@ class TxAbstract(ABC):
pass
@abstractmethod
def inject(self, polarity=1, inj_time=None):
def inject(self, polarity=1, injection_duration=None):
assert polarity in [-1, 0, 1]
if inj_time is None:
inj_time = self._inj_time
if injection_duration is None:
injection_duration = self._injection_duration
if np.abs(polarity) > 0:
self.pwr.turn_on()
self.tx_sync.set()
time.sleep(inj_time)
time.sleep(injection_duration)
self.pwr.turn_off()
else:
self.tx_sync.set()
self.pwr.turn_off()
time.sleep(inj_time)
time.sleep(injection_duration)
self.tx_sync.clear()
@property
def inj_time(self):
return self._inj_time
def injection_duration(self):
return self._injection_duration
@inj_time.setter
def inj_time(self, value):
@injection_duration.setter
def injection_duration(self, value):
assert isinstance(value, float)
assert value > 0.
self._inj_time = value
self._injection_duration = value
@property
def polarity(self):
......@@ -326,10 +326,10 @@ class TxAbstract(ABC):
Polarity of the pulse
"""
if length is None:
length = self.inj_time
length = self.injection_duration
self.pwr.voltage = voltage
self.exec_logger.debug(f'Voltage pulse of {polarity * self.pwr.voltage:.3f} V for {length:.3f} s')
self.inject(polarity=polarity, inj_time=length)
self.inject(polarity=polarity, injection_duration=length)
class RxAbstract(ABC):
......
......@@ -148,8 +148,8 @@ class Tx(TxAbstract):
assert TX_CONFIG['current_min'] <= value <= TX_CONFIG['current_max']
self.exec_logger.warning(f'Current pulse is not implemented for the {TX_CONFIG["model"]} board')
def inject(self, polarity=1, inj_time=None):
TxAbstract.inject(self, polarity=polarity, inj_time=inj_time)
def inject(self, polarity=1, injection_duration=None):
TxAbstract.inject(self, polarity=polarity, injection_duration=injection_duration)
# move this part in DPS5005
# if state=='on':
# self.DPS.write_register(0x09, 1) # DPS5005 on
......@@ -221,7 +221,7 @@ class Tx(TxAbstract):
"""
if length is None:
length = self.inj_time
length = self.injection_duration
if polarity is None:
polarity = self.polarity
self.polarity = polarity
......
......@@ -153,9 +153,9 @@ class Tx(TxAbstract):
assert TX_CONFIG['current_min'] <= value <= TX_CONFIG['current_max']
self.exec_logger.warning(f'Current pulse is not implemented for the {TX_CONFIG["model"]} board')
def inject(self, polarity=1, inj_time=None):
def inject(self, polarity=1, injection_duration=None):
self.polarity = polarity
TxAbstract.inject(self, polarity=polarity, inj_time=inj_time)
TxAbstract.inject(self, polarity=polarity, injection_duration=injection_duration)
@property
def polarity(self):
......@@ -203,12 +203,12 @@ class Tx(TxAbstract):
Polarity of the pulse
"""
self.exec_logger.event(f'{self.board_name}\ttx_voltage_pulse\tbegin\t{datetime.datetime.utcnow()}')
# self.exec_logger.info(f'inj_time: {length}') # TODO: delete me
# self.exec_logger.info(f'injection_duration: {length}') # TODO: delete me
if length is None:
length = self.inj_time
length = self.injection_duration
self.pwr.voltage = voltage
self.exec_logger.debug(f'Voltage pulse of {polarity*self.pwr.voltage:.3f} V for {length:.3f} s')
self.inject(polarity=polarity, inj_time=length)
self.inject(polarity=polarity, injection_duration=length)
self.exec_logger.event(f'{self.board_name}\ttx_voltage_pulse\tend\t{datetime.datetime.utcnow()}')
......
......@@ -145,10 +145,10 @@ class OhmPiHardware:
self.rx.adc_gain_auto()
self.exec_logger.event(f'OhmPiHardware\ttx_rx_gain_auto\tend\t{datetime.datetime.utcnow()}')
def _inject(self, polarity=1, inj_time=None): # TODO: deal with voltage or current pulse
def _inject(self, polarity=1, injection_duration=None): # TODO: deal with voltage or current pulse
self.exec_logger.event(f'OhmPiHardware\tinject\tbegin\t{datetime.datetime.utcnow()}')
# self.tx_sync.set()
self.tx.voltage_pulse(length=inj_time, polarity=polarity)
self.tx.voltage_pulse(length=injection_duration, polarity=polarity)
# self.tx_sync.clear()
self.exec_logger.event(f'OhmPiHardware\tinject\tend\t{datetime.datetime.utcnow()}')
......@@ -190,9 +190,7 @@ class OhmPiHardware:
sample += 1
sleep_time = self._start_time + datetime.timedelta(seconds=sample / sampling_rate) - lap
if sleep_time.total_seconds() < 0.:
# for i in range(int(sampling_rate * np.abs(sleep_time.total_seconds()))):
# _readings.append([elapsed_seconds(self._start_time), self._pulse, self.tx.polarity, np.nan, np.nan])
# sample += 1
# TODO: count how many samples were skipped to make a stat that could be used to qualify pulses
sample += int(sampling_rate * np.abs(sleep_time.total_seconds())) + 1
sleep_time = self._start_time + datetime.timedelta(seconds=sample / sampling_rate) - lap
time.sleep(np.max([0., sleep_time.total_seconds()]))
......@@ -286,7 +284,7 @@ class OhmPiHardware:
sampling_rate = 1000.0 / best_tx_injtime # TODO: check this...
else:
sampling_rate = self.tx.sampling_rate
self._vab_pulse(vab=vab, length=best_tx_injtime, sampling_rate=sampling_rate) # TODO: use a square wave pulse?
self._vab_pulse(vab=vab, duration=best_tx_injtime, sampling_rate=sampling_rate) # TODO: use a square wave pulse?
vmn = np.mean(self.readings[:, 4])
iab = np.mean(self.readings[:, 3])
# if np.abs(vmn) is too small (smaller than voltage_min), strategy is not constant and vab < vab_max ,
......@@ -327,21 +325,21 @@ class OhmPiHardware:
def calibrate_rx_bias(self):
self.rx._bias = (np.mean(self.readings[self.readings[:, 2] == 1, 4]) + np.mean(self.readings[self.readings[:, 2] == -1, 4])) / 2.
def vab_square_wave(self, vab, cycle_length, sampling_rate=None, cycles=3, polarity=1, append=False):
def vab_square_wave(self, vab, cycle_duration, sampling_rate=None, cycles=3, polarity=1, append=False):
self.exec_logger.event(f'OhmPiHardware\tvab_square_wave\tbegin\t{datetime.datetime.utcnow()}')
self.tx.polarity = polarity
lengths = [cycle_length/2]*2*cycles
durations = [cycle_duration/2]*2*cycles
# set gains automatically
gain_auto = Thread(target=self._gain_auto)
injection = Thread(target=self._inject, kwargs={'inj_time': 0.2, 'polarity': polarity})
injection = Thread(target=self._inject, kwargs={'injection_duration': 0.2, 'polarity': polarity})
gain_auto.start()
injection.start()
gain_auto.join()
injection.join()
self._vab_pulses(vab, lengths, sampling_rate, append=append)
self._vab_pulses(vab, durations, sampling_rate, append=append)
self.exec_logger.event(f'OhmPiHardware\tvab_square_wave\tend\t{datetime.datetime.utcnow()}')
def _vab_pulse(self, vab, length, sampling_rate=None, polarity=1, append=False):
def _vab_pulse(self, vab, duration, sampling_rate=None, polarity=1, append=False):
""" Gets VMN and IAB from a single voltage pulse
"""
self.tx.polarity = polarity
......@@ -352,7 +350,7 @@ class OhmPiHardware:
else:
vab = self.tx.pwr.voltage
# reads current and voltage during the pulse
injection = Thread(target=self._inject, kwargs={'inj_time': length, 'polarity': polarity})
injection = Thread(target=self._inject, kwargs={'injection_duration': duration, 'polarity': polarity})
readings = Thread(target=self._read_values, kwargs={'sampling_rate': sampling_rate, 'append': append})
readings.start()
injection.start()
......@@ -360,8 +358,8 @@ class OhmPiHardware:
injection.join()
self.tx.polarity = 0
def _vab_pulses(self, vab, lengths, sampling_rate, polarities=None, append=False):
n_pulses = len(lengths)
def _vab_pulses(self, vab, durations, sampling_rate, polarities=None, append=False):
n_pulses = len(durations)
if sampling_rate is None:
sampling_rate = RX_CONFIG['sampling_rate']
if polarities is not None:
......@@ -371,7 +369,7 @@ class OhmPiHardware:
if not append:
self._clear_values()
for i in range(n_pulses):
self._vab_pulse(self, length=lengths[i], sampling_rate=sampling_rate, polarity=polarities[i],
self._vab_pulse(self, duration=durations[i], sampling_rate=sampling_rate, polarity=polarities[i],
append=True)
def switch_mux(self, electrodes, roles=None, state='off', **kwargs):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment