From bac1f20baacf6e8b094aeb1b1fbfc4f3d90dbc99 Mon Sep 17 00:00:00 2001
From: su530201 <olivier.kaufmann@umons.ac.be>
Date: Tue, 27 Jun 2023 17:10:40 +0200
Subject: [PATCH] Test duty_cycle in vab_square_wave

---
 ohmpi/hardware_system.py | 14 ++++++++++++--
 ohmpi/ohmpi.py           |  2 +-
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/ohmpi/hardware_system.py b/ohmpi/hardware_system.py
index 04b3dc17..7aaaef01 100644
--- a/ohmpi/hardware_system.py
+++ b/ohmpi/hardware_system.py
@@ -329,7 +329,8 @@ class OhmPiHardware:
         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_duration, sampling_rate=None, cycles=3, polarity=1, append=False):
+    def vab_square_wave(self, vab, cycle_duration, sampling_rate=None, cycles=3, polarity=1, duty_cycle=1.,
+                        append=False):
         self.exec_logger.event(f'OhmPiHardware\tvab_square_wave\tbegin\t{datetime.datetime.utcnow()}')
         self.tx.polarity = polarity
         durations = [cycle_duration/2]*2*cycles
@@ -340,7 +341,16 @@ class OhmPiHardware:
         injection.start()
         gain_auto.join()
         injection.join()
-        self._vab_pulses(vab, durations, sampling_rate, append=append)
+        assert 0. <= duty_cycle <= 1.
+        if duty_cycle < 1.:
+            durations = [cycle_duration/2 * duty_cycle, cycle_duration/2*(1.-duty_cycle)] * cycles
+            pol = [-self.tx.polarity * np.heaviside(i % 2, -1.) for i in range(cycles)]
+            polarities = [0] * (len(cycles) * 2)
+            polarities[0::2] = pol
+        else:
+            durations = [cycle_duration / 2] * 2 * cycles
+            polarities = None
+        self._vab_pulses(vab, durations, sampling_rate, polarities=polarities, duty_cycle=duty_cycle,  append=append)
         self.exec_logger.event(f'OhmPiHardware\tvab_square_wave\tend\t{datetime.datetime.utcnow()}')
 
     def _vab_pulse(self, vab, duration, sampling_rate=None, polarity=1, append=False):
diff --git a/ohmpi/ohmpi.py b/ohmpi/ohmpi.py
index 3c8f57cf..57a7a56b 100644
--- a/ohmpi/ohmpi.py
+++ b/ohmpi/ohmpi.py
@@ -453,7 +453,7 @@ class OhmPi(object):
         tx_volt = float(tx_volt)
         bypass_check = kwargs['bypass_check'] if 'bypass_check' in kwargs.keys() else False
         if self.switch_mux_on(quad, bypass_check=bypass_check, cmd_id=cmd_id):
-            self._hw.vab_square_wave(tx_volt, cycle_length=injection_duration*2, cycles=nb_stack)
+            self._hw.vab_square_wave(tx_volt, cycle_duration=injection_duration*2, cycles=nb_stack)
             d = {
                 "time": datetime.now().isoformat(),
                 "A": quad[0],
-- 
GitLab