From 7ab0b6ee7495cb1b03cb61364755386221252fb0 Mon Sep 17 00:00:00 2001 From: Arnaud Watlet <arnaud.watlet@umons.ac.be> Date: Fri, 1 Dec 2023 16:20:15 +0100 Subject: [PATCH] Fixes issue on delay for selecting samples --- ohmpi/hardware_system.py | 23 +++++++++++++++++------ ohmpi/ohmpi.py | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/ohmpi/hardware_system.py b/ohmpi/hardware_system.py index 080fbd4c..82a85e6a 100644 --- a/ohmpi/hardware_system.py +++ b/ohmpi/hardware_system.py @@ -292,8 +292,19 @@ class OhmPiHardware: self._pulse += 1 self.exec_logger.event(f'OhmPiHardware\tread_values\tend\t{datetime.datetime.utcnow()}') + def select_samples(self, delay=0.): + x = [] + for pulse in range(int(max(self._hw.readings[:, 1]))): + v = np.where((self._hw.readings[:, 1] == pulse))[0] + + t_start_pulse = min(self._hw.readings[v, 0]) + x.append(np.where((k._hw.readings[:, 0] >= t_start_pulse + delay) & (self._hw.readings[:, 2] != 0) & ( + self._hw.readings[:, 1] == pulse))[0]) + x = np.concatenate(np.array(x)) + return x + def last_resistance(self, delay=0.): - v = np.where((self.readings[:, 0] >= delay) & (self.readings[:, 2] != 0))[0] + v = self.select_samples(delay) if len(v) > 1: # return np.mean(np.abs(self.readings[v, 4] - self.sp) / self.readings[v, 3]) return np.mean(self.readings[v, 2] * (self.readings[v, 4] - self.sp) / self.readings[v, 3]) @@ -301,35 +312,35 @@ class OhmPiHardware: return np.nan def last_dev(self, delay=0.): - v = np.where((self.readings[:, 0] >= delay) & (self.readings[:, 2] != 0))[0] + v = self.select_samples(delay) if len(v) > 1: return 100. * np.std(self.readings[v, 2] * (self.readings[v, 4] - self.sp) / self.readings[v, 3]) / self.last_resistance(delay=delay) else: return np.nan def last_vmn(self, delay=0.): - v = np.where((self.readings[:, 0] >= delay) & (self.readings[:, 2] != 0))[0] + v = self.select_samples(delay) if len(v) > 1: return np.mean(self.readings[v, 2] * (self.readings[v, 4] - self.sp)) else: return np.nan def last_vmn_dev(self, delay=0.): # TODO: should compute std per stack because this does not account for SP... - v = np.where((self.readings[:, 0] >= delay) & (self.readings[:, 2] != 0))[0] + v = self.select_samples(delay) if len(v) > 1: return 100. * np.std(self.readings[v, 2] * (self.readings[v, 4] - self.sp)) / self.last_vmn(delay=delay) else: return np.nan def last_iab(self, delay=0.): - v = np.where((self.readings[:, 0] >= delay) & (self.readings[:, 2] != 0))[0] + v = self.select_samples(delay) if len(v) > 1: return np.mean(self.readings[v, 3]) else: return np.nan def last_iab_dev(self, delay=0.): - v = np.where((self.readings[:, 0] >= delay) & (self.readings[:, 2] != 0))[0] + v = self.select_samples(delay) if len(v) > 1: return 100. * np.std(self.readings[v, 3]) / self.last_iab(delay=delay) else: diff --git a/ohmpi/ohmpi.py b/ohmpi/ohmpi.py index 46b242dd..bc4a537f 100644 --- a/ohmpi/ohmpi.py +++ b/ohmpi/ohmpi.py @@ -526,7 +526,7 @@ class OhmPi(object): delay = injection_duration else: delay = injection_duration * 2/3 # TODO: check if this is ok and if last point is not taken the end of injection - x = np.where((self._hw.readings[:, 0] >= delay) & (self._hw.readings[:, 2] != 0))[0] + x = self._hw.select_samples(delay) Vmn = self._hw.last_vmn(delay=delay) Vmn_std = self._hw.last_vmn_dev(delay=delay) I = self._hw.last_iab(delay=delay) -- GitLab