From 6c24e699fd950db6f108a79548543c8f4578b084 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Tue, 13 Jan 2015 19:12:35 +0800 Subject: [PATCH] examples: add realtime result demo --- examples/flopping_f_simulation.py | 45 +++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 examples/flopping_f_simulation.py diff --git a/examples/flopping_f_simulation.py b/examples/flopping_f_simulation.py new file mode 100644 index 000000000..6f1de1567 --- /dev/null +++ b/examples/flopping_f_simulation.py @@ -0,0 +1,45 @@ +from math import sqrt, cos, pi +import time + +from artiq import * + + +def model(x, F0=1500, A=80, B=40, t=0.02, tpi=0.03): + return A+(B-A)/2/(4*tpi**2*(x-F0)**2+1)*(1-cos(pi*t/tpi*sqrt(4*tpi**2*(x-F0)**2+1))) + + +class FloppingF(AutoDB): + class DBKeys: + implicit_core = False + + npoints = Argument(100) + min_freq = Argument(1000) + max_freq = Argument(2000) + + frequency = Result() + brightness = Result() + + flopping_freq = Parameter() + + @staticmethod + def realtime_results(): + return { + ("frequency", "brightness"): "xy" + } + + def run(self): + for i in range(self.npoints): + frequency = (self.max_freq-self.min_freq)*i/(self.npoints - 1) + self.min_freq + brightness = model(frequency) + self.frequency.append(frequency) + self.brightness.append(brightness) + time.sleep(0.1) + self.analyze() + + def analyze(self): + min_f = self.frequency.read[0] + min_b = self.brightness.read[0] + for f, b in zip(self.frequency.read, self.brightness.read): + if b < min_b: + min_f, min_b = f, b + self.flopping_freq = min_f