From c394f08fa0a605b8e5b7972a262673c8745a17e1 Mon Sep 17 00:00:00 2001
From: Runner PC Cavity Lab <johannes.schabbauer@tuwien.ac.at>
Date: Fri, 7 Mar 2025 15:52:29 +0100
Subject: [PATCH] Conditional Tweezer programming: add arguments that we can
 pass to 'OccupationReceiver' (e.g. a target occupation)

---
 SpectrumAWG/blacs_workers.py     | 3 ++-
 SpectrumAWG/labscript_devices.py | 4 +++-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/SpectrumAWG/blacs_workers.py b/SpectrumAWG/blacs_workers.py
index aba623a..82621f3 100644
--- a/SpectrumAWG/blacs_workers.py
+++ b/SpectrumAWG/blacs_workers.py
@@ -72,6 +72,7 @@ class SpectrumAWGWorker(Worker):
         with h5py.File(h5_file,'r') as f:
             group = f[f"devices/{device_name}"]
             function_conditional_programming = group.attrs.get("function_conditional_programming", "")
+            function_conditional_programming_args = group.attrs.get("function_conditional_programming_args", ())
             for ch in self.channels:
                 if fresh or len(self.smart_cache)+len(group[ch].attrs) > self.memory_segments:
                     # Reset smart programming and start writing memory from the beginning
@@ -136,8 +137,8 @@ class SpectrumAWGWorker(Worker):
             freq = instruction[1:num_tones+1]
             ampl = instruction[num_tones+1:2*num_tones+1]
             phase= instruction[2*num_tones+1:]
+            self.occupation_receiver.set_function(function_conditional_programming, function_conditional_programming_args)
             self.occupation_receiver.last_tweezer_params(index+1, len(self.smart_cache), freq, ampl, phase, num_samples, self.sample_rate)
-            self.occupation_receiver.set_function(function_conditional_programming)
 
         return initial_values
 
diff --git a/SpectrumAWG/labscript_devices.py b/SpectrumAWG/labscript_devices.py
index b58c58f..84ce902 100644
--- a/SpectrumAWG/labscript_devices.py
+++ b/SpectrumAWG/labscript_devices.py
@@ -154,8 +154,9 @@ class SpectrumAWG(Device):
         internal_memory = 2**32 # 4GB
         self.max_sample_size = internal_memory//2//memory_segments
 
-    def set_conditional_reprogramming(self, function_name):
+    def set_conditional_reprogramming(self, function_name, function_args=None):
         self.function_conditional_programming = function_name
+        self.function_conditional_programming_args = function_args
 
     def do_checks(self):
         if len(self.child_devices)>1:
@@ -174,6 +175,7 @@ class SpectrumAWG(Device):
             group[output.connection].require_group("labels")
 
             group.attrs["function_conditional_programming"] = getattr(self,"function_conditional_programming","")
+            group.attrs["function_conditional_programming_args"] = getattr(self,"function_conditional_programming_args",tuple())
 
             for i,t in enumerate(np.sort(change_times)):
                 group[output.connection].attrs[str(i)] = output.instructions[t][:-1]
-- 
GitLab