diff --git a/dev/test_measure_with_ohmpi_card_3_15.py b/dev/test_measure_with_ohmpi_card_3_15.py index 15fb147468a2e73fc4530f337c40e1278045ba36..e20f4802e2398c9c939fdb2822ada152e89a3b61 100644 --- a/dev/test_measure_with_ohmpi_card_3_15.py +++ b/dev/test_measure_with_ohmpi_card_3_15.py @@ -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') diff --git a/ohmpi/hardware_components/abstract_hardware_components.py b/ohmpi/hardware_components/abstract_hardware_components.py index 781b7b8f2b4a4c3b4043610a6ffa31d0994038b6..ae6f742964cf3cd3f44bb417e31eb3ac96848cd3 100644 --- a/ohmpi/hardware_components/abstract_hardware_components.py +++ b/ohmpi/hardware_components/abstract_hardware_components.py @@ -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): diff --git a/ohmpi/hardware_components/mb_2024_rev_0_0.py b/ohmpi/hardware_components/mb_2024_rev_0_0.py index b9fcbdcad0bf858891d17af111b4012057e788ec..241777f90927e8390814670538a55c64c870f6c1 100644 --- a/ohmpi/hardware_components/mb_2024_rev_0_0.py +++ b/ohmpi/hardware_components/mb_2024_rev_0_0.py @@ -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 diff --git a/ohmpi/hardware_components/ohmpi_card_3_15.py b/ohmpi/hardware_components/ohmpi_card_3_15.py index 89a453f515dafd8f1278cf0bb23d4f3fe2e9e5f5..20c93a1016c40e072d84543896a192b23ed70d6d 100644 --- a/ohmpi/hardware_components/ohmpi_card_3_15.py +++ b/ohmpi/hardware_components/ohmpi_card_3_15.py @@ -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()}') diff --git a/ohmpi/hardware_system.py b/ohmpi/hardware_system.py index f84de68ec5a819ad4ed1c43e72718a0d3314be72..16110b04a80d1778668752cf30a12febf0585df9 100644 --- a/ohmpi/hardware_system.py +++ b/ohmpi/hardware_system.py @@ -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):