From f03ae25e4f8fa9f71031ca9ea25d06fcb9889cdd Mon Sep 17 00:00:00 2001 From: Markus Rosenstihl Date: Tue, 4 Apr 2017 12:52:21 +0200 Subject: [PATCH] added rf_pulse method to Experiment class (gating, sources, etc include) --- src/experiments/Experiment.py | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/experiments/Experiment.py b/src/experiments/Experiment.py index ab73ea8..3ead596 100644 --- a/src/experiments/Experiment.py +++ b/src/experiments/Experiment.py @@ -77,14 +77,19 @@ class Experiment: job_id = 0 - def __init__(self): + def __init__(self, gating=None, rf_sources=[], rf_gates=[]): self.job_id = Experiment.job_id Experiment.job_id += 1 self.state_list = StateList() self.list_stack = [] self.description = { } - + self.gating = gating + assert type(rf_sources) == type(list()), "rf_sources needs to be a list with the channels" + assert type(rf_gates) == type(list()), "rf_gates needs to be a list with the channels" + assert len(rf_gates) == len(rf_sources), "rf_sources and rf_gates must have equal number of entries" + self.rf_sources = rf_sources + self.rf_gates = rf_gates # Commands ------------------------------------------------------------------------------------- @@ -129,6 +134,23 @@ class Experiment: self.state_list.append(StateSimple(length, s_content)) else: self.state_list.append(s_content) + + ## Same as ttl_pulse, but no *channel* keyword + def rf_pulse(self, length=None, phase=0, source=0): + """ + make an rf pulse, including gating and phase switching + + :param float length: pulse length + :param float phase: pulse phase + :param int source: source id + :return: + """ + if not self.gating: + raise SyntaxError("Can not use rf_pulse without configuration: Experiment(gating=None, rf_sources=[], rf_gates=[]") + self.set_phase(phase, ttls=self.rf_gates[source]) + self.ttls(length=self.gating-0.5e-6,value=self.rf_gates[source]) + self.ttls(length=length, value=self.rf_gates[source]+self.rf_sources[source]) + ## Beginning of a new state def state_start(self, time): """ @@ -147,14 +169,17 @@ class Experiment: ## An empty state doing nothing # @param time Duration of this state # @param ttls Additinional ttl channels - def wait(self, time, ttls=None): + def wait(self, time, ttls=None, gating=False): """ Wait specified **time** doing nothing. :param float time: seconds to wait :param int ttls: lines to set (integer) + :param bool gating: reduce time by gating, i.e. wat in front of rf_pulse :return: """ + if gating: + time -= self.gating if ttls is not None: s_content = '' % ttls self.state_list.append(StateSimple(time,s_content)) @@ -500,7 +525,7 @@ def self_test(): e.set_description("key", "value") e.set_frequency(85e6, 90, ttls=16) e.wait(1e-6) - e.rf_pulse(1, 1e-6/3) # val = 1 + #e.rf_pulse(1, 1e-6/3) # val = 1 e.ttl_pulse(1e-6/3, 1) # val = 2 e.ttl_pulse(1e-6/3, None, 7) # val = 7 if True: