From 8c960b1bb00070107a868f98c87258f6ed1213e2 Mon Sep 17 00:00:00 2001
From: su530201 <olivier.kaufmann@umons.ac.be>
Date: Sat, 15 Apr 2023 22:03:44 +0200
Subject: [PATCH] Sets sampling rate for _compute_tx_volt

---
 hardware/abstract_hardware.py | 11 +++++++++++
 hardware/ohmpi_card_3_15.py   |  1 +
 measure.py                    | 12 ++++++++----
 3 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/hardware/abstract_hardware.py b/hardware/abstract_hardware.py
index b4c7e43b..c90bc112 100644
--- a/hardware/abstract_hardware.py
+++ b/hardware/abstract_hardware.py
@@ -150,6 +150,7 @@ class RxAbstract(ABC):
             self.exec_logger = create_stdout_logger('exec_tx')
         self.soh_logger = kwargs.pop('soh_logger', None)
         self.board_name = kwargs.pop('board_name', 'unknown RX hardware')
+        self._sampling_rate = kwargs.pop('sampling_rate', 1)
         self.exec_logger.debug(f'{self.board_name} RX initialization')
         self._adc_gain = 1.
 
@@ -167,6 +168,16 @@ class RxAbstract(ABC):
     def adc_gain_auto(self):
         pass
 
+    @property
+    def sampling_rate(self):
+        return self._sampling_rate
+
+    @sampling_rate.setter
+    def sampling_rate(self, value):
+        assert value > 0.
+        self._sampling_rate = value
+        self.exec_logger.debug(f'Sampling rate set to {value}')
+
     @property
     @abstractmethod
     def voltage(self):
diff --git a/hardware/ohmpi_card_3_15.py b/hardware/ohmpi_card_3_15.py
index ee623c59..3de6a26b 100644
--- a/hardware/ohmpi_card_3_15.py
+++ b/hardware/ohmpi_card_3_15.py
@@ -214,6 +214,7 @@ class Rx(RxAbstract):
         self._ads_voltage_address = 0x49
         self._adc_gain = 2/3
         self._ads_voltage = ads.ADS1115(self.controller.bus, gain=self._adc_gain, data_rate=860, address=self._ads_voltage_address)
+        self._sampling_rate = kwargs.pop('sampling_rate', sampling_rate)
 
     @property
     def adc_gain(self):
diff --git a/measure.py b/measure.py
index 917fc12a..428cc625 100644
--- a/measure.py
+++ b/measure.py
@@ -48,6 +48,7 @@ class OhmPiHardware:
         self.mux = kwargs.pop('mux', mux_module.Mux(exec_logger=self.exec_logger,
                                                     data_logger=self.data_logger,
                                                     soh_logger=self.soh_logger))
+        self.readings=np.array([])
 
     def _inject(self, duration):
             self.tx_sync.set()
@@ -86,9 +87,6 @@ class OhmPiHardware:
         injection.start()
         readings.join()
         injection.join()
-        iab = self.tx.current  # measure current
-        vmn = self.rx.voltage
-        return iab, vmn
 
     def _compute_tx_volt(self, best_tx_injtime=0.1, strategy='vmax', tx_volt=5,
                          vab_max=voltage_max, vmn_min=voltage_min):
@@ -136,7 +134,13 @@ class OhmPiHardware:
         vab = np.min([np.abs(tx_volt), vab_max])
         self.tx.polarity = 1
         self.tx.turn_on()
-        vmn, iab = self._vab_pulse(vab=vab, length=best_tx_injtime)
+        if self.rx.sampling_rate*1000 > best_tx_injtime:
+            sampling_rate = best_tx_injtime
+        else:
+            sampling_rate = self.tx.sampling_rate
+        self._vab_pulse(vab=vab, length=best_tx_injtime, sampling_rate=sampling_rate)
+        vmn = np.mean(self.readings[:,2])
+        iab = np.mean(self.readings[:,1])
         # if np.abs(vmn) is too small (smaller than voltage_min), strategy is not constant and vab < vab_max ,
         # then we could call _compute_tx_volt with a tx_volt increased to np.min([vab_max, tx_volt*2.]) for example
         if strategy == 'vmax':
-- 
GitLab