From 66a9e933948ff73600734bdb021a755c4b23fa39 Mon Sep 17 00:00:00 2001
From: su530201 <olivier.kaufmann@umons.ac.be>
Date: Sun, 23 Apr 2023 11:44:23 +0200
Subject: [PATCH] Adds an sp property

---
 measure.py                           | 19 +++++++++++++++++++
 test_measure_with_ohmpi_card_3_15.py | 11 ++++++++---
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/measure.py b/measure.py
index b3e9139f..3033b3c5 100644
--- a/measure.py
+++ b/measure.py
@@ -82,6 +82,25 @@ class OhmPiHardware:
         self.readings = np.array(_readings)
         self._pulse += 1
 
+    @property
+    def sp(self):
+        if len(self.readings[self.readings[:,2]==1, :]) < 1 or len(self.readings[self.readings[:,2]==-1, :]) < 1:
+            self.exec_logger.warning('Unable to compute sp: readings should at least contain one positive and one negative pulse')
+            return 0.
+        else:
+            n_pulses = int(np.max(self.readings[:, 1]))
+            polarity = np.array([np.mean(self.readings[self.readings[:, 1] == i, 2]) for i in range(n_pulses + 1)])
+            mean_vmn = []
+            mean_iab = []
+            for i in range(n_pulses + 1):
+                mean_vmn.append(np.mean(self.readings[self.readings[:, 1] == i, 4]))
+                mean_iab.append(np.mean(self.readings[self.readings[:, 1] == i, 3]))
+            mean_vmn = np.array(mean_vmn)
+            mean_iab = np.array(mean_iab)
+            print(f'Vmn: {mean_vmn}, Iab: {mean_iab}')
+            sp = np.mean(mean_vmn[np.ix_(polarity==1)] - mean_vmn[np.ix_(polarity==-1)]) / 2
+            return sp
+
     def _compute_tx_volt(self, best_tx_injtime=0.1, strategy='vmax', tx_volt=5,
                          vab_max=voltage_max, vmn_min=voltage_min):
         """Estimates best Tx voltage based on different strategies.
diff --git a/test_measure_with_ohmpi_card_3_15.py b/test_measure_with_ohmpi_card_3_15.py
index da60b4cb..eca45fbb 100644
--- a/test_measure_with_ohmpi_card_3_15.py
+++ b/test_measure_with_ohmpi_card_3_15.py
@@ -8,11 +8,16 @@ from OhmPi.measure import OhmPiHardware
 k = OhmPiHardware()
 k.exec_logger.setLevel(logging.INFO)
 # Test #1:
-print('Testing _vab_pulse')
+print('Testing positive _vab_pulse')
 k._vab_pulse(vab=12, length=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('Testing negative _vab_pulse')
+k._vab_pulse(vab=12, length=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')
 
 # Test #2:
 print('\n\nTesting vab_square_wave')
@@ -42,8 +47,8 @@ mean_vmn = np.array(mean_vmn)
 mean_iab = np.array(mean_iab)
 print(f'Vmn: {mean_vmn}, Iab: {mean_iab}')
 sp = np.mean(mean_vmn[np.ix_([0,2,4])]-mean_vmn[np.ix_([1,3,5])])/2
-print(f'SP: {sp} mV')
-r = ((k.readings[:,4]+k.readings[:,1]*sp)/k.readings[:,3])
+print(f'SP: {sp} mV, sp property: {k.sp}')
+r = ((k.readings[:,4]-k.readings[:,2]*sp)/k.readings[:,3])
 print(f'Mean resistance with sp correction : {np.mean(r):.3f} Ohms, Dev. {100*np.std(r)/np.mean(r):.1f} %')
 change_config('config_default.py', verbose=False)
 
-- 
GitLab