From 755e1a0295acadc251c19c84dd9b291f8551b7e2 Mon Sep 17 00:00:00 2001
From: Runner PC Cavity Lab <johannes.schabbauer@tuwien.ac.at>
Date: Wed, 13 Nov 2024 15:27:25 +0100
Subject: [PATCH] Spectrum: Print crest factor in BLACS worker and some
 modifications in testing script

---
 SpectrumAWG/blacs_workers.py               |  2 +-
 SpectrumAWG/testing/SpectrumAWG_testing.py | 38 ++++++++++++++++------
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/SpectrumAWG/blacs_workers.py b/SpectrumAWG/blacs_workers.py
index 14ba2fd..2dc0b8c 100644
--- a/SpectrumAWG/blacs_workers.py
+++ b/SpectrumAWG/blacs_workers.py
@@ -91,7 +91,7 @@ class SpectrumAWGWorker(Worker):
                             freq = instruction[1:num_tones+1]
                             ampl = instruction[num_tones+1:2*num_tones+1]
                             phase= instruction[2*num_tones+1:]
-                            data = SpectrumCard.generate_multi_tone(freq,ampl,phase,num_samples,self.sample_rate)
+                            data = SpectrumCard.generate_multi_tone(freq,ampl,phase,num_samples,self.sample_rate, print_crest_factor=True)
                             initial_values[memory_index] = f"f:{freq}, a:{ampl}, p:{phase}"
                         else:
                             raise RuntimeError("Instruction length does not match, what happened??")
diff --git a/SpectrumAWG/testing/SpectrumAWG_testing.py b/SpectrumAWG/testing/SpectrumAWG_testing.py
index 5055a90..8b760c0 100644
--- a/SpectrumAWG/testing/SpectrumAWG_testing.py
+++ b/SpectrumAWG/testing/SpectrumAWG_testing.py
@@ -13,24 +13,30 @@ if __name__ == "__main__":
     # Set sampling rate, clock and output channels
     sample_rate = MEGA(1250)
     tweezerAWG.set_clock('external',MEGA(10))
+    # tweezerAWG.set_clock('internal')
     tweezerAWG.set_sample_rate(sample_rate)
     tweezerAWG.set_channel_status(0,True)
     tweezerAWG.set_channel_enable(0,True)
     tweezerAWG.set_channel_amplitude(0,100)
     tweezerAWG.set_channel_filter(0,False)
-    tweezerAWG.set_channel_mode(0,'double')
+    tweezerAWG.set_channel_status(1,False)
+    # tweezerAWG.set_channel_enable(1,False)
+    # tweezerAWG.set_channel_amplitude(1,100)
+    # tweezerAWG.set_channel_filter(1,False)
+    # tweezerAWG.set_channel_mode(0,'double')
+    tweezerAWG.set_channel_mode(0,None)
 
     # Trigger Settings
     #tweezerAWG.print_available_trigger_sources()
     #tweezerAWG.print_available_ext_trigger_modes()
     #tweezerAWG.print_available_and_trigger_sources()
     #tweezerAWG.print_available_or_trigger_sources()
-    tweezerAWG.set_ext_trigger_mode('ext0','pos',rearm=True)
-    tweezerAWG.set_ext_trigger_level('ext0',800,2000)
-    tweezerAWG.set_trigger_or_mask({'ext0'})
+    # tweezerAWG.set_ext_trigger_mode('ext0','pos',rearm=True)
+    # tweezerAWG.set_ext_trigger_level('ext0',800,2000)
+    # tweezerAWG.set_trigger_or_mask({'ext0'})
 
     # Set Generation Mode
-    demo_mode = 'seq' # 'single', 'seq', 'fifo'
+    demo_mode = 'single' # 'single', 'seq', 'fifo'
     # 'single': Configures the card for single-shot data replay, where a fixed set of data is played once after the first trigger.
     # 'seq': Sets the card to sequence mode, allowing for complex, multi-step sequences of data to be replayed in a specified order.
     # 'fifo': Configures the card for FIFO mode, enabling continuous data streaming by replenishing data in real-time.
@@ -51,8 +57,15 @@ if __name__ == "__main__":
         fundamental_frequency = sample_rate/num_samples # Only integer multiples of this frequency can be generated
 
         # Generate Single Tone
-        frequency = fundamental_frequency*100
+        frequency = fundamental_frequency*170000
+        # d_freq = fundamental_frequency*1000
+        # freqs = np.arange(frequency,frequency+d_freq*10,d_freq)
+        print(f"Frequency = {frequency*1e-6} MHz")
+        # print(f"delta freq= {d_freq*1e-6} MHz")
+        # print(freqs)
         samples = generate_single_tone(frequency, num_samples)
+        # phases = np.pi*np.arange(freqs.size)**2/freqs.size
+        # samples = generate_multi_tone(freqs,np.ones_like(freqs),phases,num_samples)
 
         # Generate Multi Frequency Tones
         #unique_random_numbers = random.sample(range(100, 2000, 10), 100)
@@ -71,10 +84,14 @@ if __name__ == "__main__":
         num_samples = 4096
         fundamental_frequency = sample_rate/num_samples
 
-        for i in range(100):
-            data = generate_single_tone(fundamental_frequency*(i+1),num_samples)
+        for i in range(50):
+            # if i%2==0:
+            #     data = generate_single_tone(fundamental_frequency*66,num_samples)
+            # else:
+            #     data = generate_single_tone(fundamental_frequency*330,num_samples)
+            data = generate_single_tone(fundamental_frequency*(4*i+1),num_samples)
             tweezerAWG.transfer_sequence_replay_samples(i,data)
-            if i < 99:
+            if i < 49:
                 tweezerAWG.seq_set_sequence_step(i,i,i+1,1,'on_trigger',last_step=False)
             else:
                 tweezerAWG.seq_set_sequence_step(i,i,0,1,'on_trigger',last_step=True)
@@ -89,8 +106,9 @@ if __name__ == "__main__":
         input()
 
     if demo_mode == 'seq':
-        for i in range(100):
+        for i in range(50):
             input()
+            print("Frequency [MHz]:", 1e-6*fundamental_frequency*(4*i+1))
             tweezerAWG.card_force_trigger()
 
     if demo_mode == 'fifo':
-- 
GitLab