|
3 | 3 | import numpy as np
|
4 | 4 |
|
5 | 5 | from artiq.experiment import *
|
6 |
| - |
7 | 6 | from artiq.wavesynth.coefficients import SplineSource
|
8 | 7 |
|
| 8 | + |
9 | 9 | transport = SplineSource(
|
10 | 10 | x=np.linspace(0, 10, 101), # waveform time
|
11 | 11 | y=np.random.rand(4*3*3, 101)*1e-6, # waveform data,
|
12 | 12 | # 4 devices, 3 board each, 3 dacs each
|
13 | 13 | )
|
14 | 14 |
|
| 15 | + |
15 | 16 | class Transport(EnvExperiment):
|
16 | 17 | """Transport"""
|
17 | 18 |
|
18 | 19 | def build(self):
|
19 |
| - self.core = self.get_device("core") |
20 |
| - self.bd_sw = self.get_device("bd_sw") |
21 |
| - self.pmt = self.get_device("pmt") |
22 |
| - self.electrodes = self.get_device("electrodes") |
| 20 | + self.setattr_device("core") |
| 21 | + self.setattr_device("bd_sw") |
| 22 | + self.setattr_device("pmt") |
| 23 | + self.setattr_device("electrodes") |
23 | 24 |
|
24 |
| - self.wait_at_stop = self.get_argument("wait_at_stop", |
25 |
| - NumberValue(100*us)) |
26 |
| - self.speed = self.get_argument("speed", NumberValue(1.5)) |
27 |
| - self.repeats = self.get_argument("repeats", NumberValue(100)) |
28 |
| - self.nbins = self.get_argument("nbins", NumberValue(100)) |
| 25 | + self.setattr_argument("wait_at_stop", NumberValue(100*us)) |
| 26 | + self.setattr_argument("speed", NumberValue(1.5)) |
| 27 | + self.setattr_argument("repeats", NumberValue(100)) |
| 28 | + self.setattr_argument("bins", NumberValue(100)) |
29 | 29 |
|
30 | 30 | def calc_waveforms(self, stop):
|
31 | 31 | self.electrodes.disarm()
|
@@ -74,26 +74,34 @@ def one(self):
|
74 | 74 |
|
75 | 75 | @kernel
|
76 | 76 | def repeat(self):
|
77 |
| - self.histogram[:] = [0 for _ in range(self.nbins)] |
78 |
| - |
| 77 | + hist = [0 for _ in range(self.bins)] |
79 | 78 | for i in range(self.repeats):
|
80 | 79 | n = self.one()
|
81 |
| - if n >= self.nbins: |
82 |
| - n = self.nbins - 1 |
83 |
| - self.histogram[n] += 1 |
| 80 | + if n >= self.bins: |
| 81 | + n = self.bins - 1 |
| 82 | + hist[n] += 1 |
| 83 | + self.set_dataset("hist", hist) |
84 | 84 |
|
85 | 85 | def scan(self, stops):
|
86 | 86 | for s in stops:
|
87 |
| - self.histogram = [] |
| 87 | + self.histogram = [0 for _ in range(self.bins)] |
88 | 88 | # non-kernel, build frames
|
89 | 89 | # could also be rpc'ed from repeat()
|
90 | 90 | self.calc_waveforms(s)
|
91 | 91 | # kernel part
|
92 | 92 | self.repeat()
|
93 |
| - # live update 2d plot with current self.histogram |
94 |
| - # broadcast(s, self.histogram) |
95 | 93 |
|
96 | 94 | def run(self):
|
97 | 95 | # scan transport endpoint
|
98 | 96 | stops = range(10, len(transport.x), 10)
|
99 | 97 | self.scan(stops)
|
| 98 | + |
| 99 | + |
| 100 | +# class Benchmark(Transport): |
| 101 | +# def build(self): |
| 102 | +# Transport.build(self) |
| 103 | +# self.calc_waveforms(.3) |
| 104 | +# |
| 105 | +# @kernel |
| 106 | +# def run(self): |
| 107 | +# self.repeat() |
0 commit comments