Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Qelec branch : for travis checks #27

Open
wants to merge 133 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
133 commits
Select commit Hold shift + click to select a range
146f75f
Basic structures for pulse sequence handling.
May 23, 2014
d6b3c91
WIP on pulse sequences.
MatthieuDartiailh May 30, 2014
3a13e92
More work on pulse sequences
MatthieuDartiailh May 31, 2014
a36284f
Fixing PEP8 rules.
MatthieuDartiailh Jun 1, 2014
c18d77a
First tests on pulses. WIP
MatthieuDartiailh Jun 3, 2014
27066fb
Test pulse, modulation, shape evaluations.
MatthieuDartiailh Jun 4, 2014
228af64
Debugging the sequence compilation.
MatthieuDartiailh Jun 5, 2014
2a9175d
Starting to test saving a pulse sequence.
MatthieuDartiailh Jun 6, 2014
a01d489
Update of pulse system.
MatthieuDartiailh Jun 25, 2014
bc54617
Make sampling time cached. Add a time conversion as a dict.
MatthieuDartiailh Jun 26, 2014
b425d99
Integrate Pierre AWG context and tweak it a bit.
MatthieuDartiailh Jun 26, 2014
0b3ab89
Complete Pierre implementaion of the AWG Context and add tests and be…
MatthieuDartiailh Jun 27, 2014
d839dfb
Add a convenience script for profiling the benchmarks of the base_pul…
MatthieuDartiailh Jun 27, 2014
20482b1
Move non-standard sequences into their own package.
MatthieuDartiailh Jul 1, 2014
14e34bc
Finish sequence walk method.
MatthieuDartiailh Jul 1, 2014
4d2ca3d
Implement build_from_config class method for Pulse and Sequence + tests.
MatthieuDartiailh Jul 2, 2014
7af7b84
Wip implementing the pulses manager.
MatthieuDartiailh Jul 3, 2014
49811db
Wip adding collections of build dependencies linked to pulses.
MatthieuDartiailh Jul 3, 2014
bd3dc54
Wip implementing display of pulse sequences.
MatthieuDartiailh Jul 3, 2014
0167eb7
Wip more work on pulses views.
MatthieuDartiailh Jul 3, 2014
01ed78e
Add AWGContextView and ConditionalSequenceView.
MatthieuDartiailh Jul 4, 2014
d644c13
Make only RootSequence context aware.
MatthieuDartiailh Jul 4, 2014
1168533
Adding basic tests for PulsesManagerPlugin, and fixing the bugs dicov…
MatthieuDartiailh Jul 7, 2014
44b1b71
Merge remote-tracking branch 'origin/master' into pulse-sequences
MatthieuDartiailh Aug 20, 2014
218651f
WIP on template sequence. Renamed external_variables to external_vars…
MatthieuDartiailh Aug 20, 2014
19a2298
WIP reorganizing the pulses package
MatthieuDartiailh Aug 24, 2014
9122800
Merge branch 'master' into pulse-sequences
MatthieuDartiailh Aug 25, 2014
aeab404
Merge remote-tracking branch 'origin/master' into pulse-sequences
MatthieuDartiailh Aug 26, 2014
c098c60
remove old visa tools (came from an issue in merging with master)
MatthieuDartiailh Aug 26, 2014
20b3ec4
Take into account that walks utilities function are now in utils.wals…
MatthieuDartiailh Aug 26, 2014
bae8bef
Fix import statement in pulses tests.
MatthieuDartiailh Aug 26, 2014
58552da
Fix stupid import.
MatthieuDartiailh Aug 26, 2014
1f022a4
Fix some wrong imports and the module exploration of the PulsePlugin …
MatthieuDartiailh Aug 26, 2014
f1a522b
Fixing all pulses tests.
MatthieuDartiailh Aug 26, 2014
06d2614
Fix test file header.
MatthieuDartiailh Aug 27, 2014
e356995
Adding what's needed to insert new pulses in sequences.
MatthieuDartiailh Aug 29, 2014
16736f6
Fix issue in pulse evaluation : last computed parameters was not corr…
MatthieuDartiailh Sep 5, 2014
777ec0d
WIP making sequences have optional time constraints (Moved a lot of c…
MatthieuDartiailh Sep 8, 2014
f70fa09
End of previous WIP tests are fixed and updated UI is not.
MatthieuDartiailh Sep 9, 2014
6013141
Give a parent to all item.
MatthieuDartiailh Sep 9, 2014
559578a
Update views to new system. (Solution for Sequences is suboptimal).
MatthieuDartiailh Sep 9, 2014
7eb7b5c
Fix AWG context tests (Travis should be happier now).
MatthieuDartiailh Sep 10, 2014
7663c30
Add back the external_vars member in root sequence. Split Sequence in…
MatthieuDartiailh Sep 10, 2014
e071150
Fix AWG context channel declaration.
MatthieuDartiailh Sep 10, 2014
196b307
Fix conditional sequence view.
MatthieuDartiailh Sep 10, 2014
bde3501
WIP on template sequences. Test are missing. Config is also missing.
MatthieuDartiailh Sep 10, 2014
7688550
Fix issue in sequence re-indexing (Pulse are not the only one which d…
MatthieuDartiailh Sep 10, 2014
14b30cd
Update template handling as a dependence. Building test for the Templ…
MatthieuDartiailh Sep 10, 2014
ddeff06
Fix issue in PulsesManagerPlugin : import errors where not correctly …
MatthieuDartiailh Sep 10, 2014
8c588ff
Fix plugin test. Path for temporary preferences was incorrect and led…
MatthieuDartiailh Sep 11, 2014
308bb70
Finish testing the template sequence and context.
MatthieuDartiailh Sep 11, 2014
307ecb0
Make sure that loading a template cannot corrupt the template vars (c…
MatthieuDartiailh Sep 11, 2014
b520ee1
Add a TemplateConfig to insert Templates in sequences. Need tests.
MatthieuDartiailh Sep 11, 2014
a3d1a65
Fix how the pulse sequences dependencies are collected.
MatthieuDartiailh Sep 16, 2014
5bcc7e4
Adding tests for the template config and an api file for the pulses p…
MatthieuDartiailh Sep 16, 2014
6713525
Fix broken tests.
MatthieuDartiailh Sep 16, 2014
ccb655d
Add a safety when compiling a template : all pulses must have a valid…
MatthieuDartiailh Sep 17, 2014
cd31672
WIP on pulse sequences workspace edition.
MatthieuDartiailh Sep 17, 2014
f44bcef
Wip on workspace (manifest and workspace are ready dialogs are missin…
MatthieuDartiailh Sep 23, 2014
b0f21f8
WIP on pulses workspace (ready for debug)
MatthieuDartiailh Sep 24, 2014
dd2b7c3
WIP debugging the GUI of pulses workspace.
MatthieuDartiailh Sep 25, 2014
3f61115
More debugging and still a lot to do ....
MatthieuDartiailh Sep 25, 2014
38d48a3
Fix tests (broken because of inconsistencies between kind of pulse lo…
MatthieuDartiailh Sep 29, 2014
71d8b93
Add widgets for editing root sequence duration.
MatthieuDartiailh Sep 29, 2014
5cea319
Modify state handling to avoid starting all plugins registering a sta…
MatthieuDartiailh Oct 4, 2014
83ae121
WIP : debug pulses workspace
MatthieuDartiailh Oct 4, 2014
ca7431d
Fix a bunch of typos and UI bugs.
MatthieuDartiailh Jan 29, 2015
be90073
WIP adding a task handling the compilation and transfer of pulse sequ…
MatthieuDartiailh Jan 29, 2015
82c9d9c
Fix stupid inversion in measure edition (tree).
MatthieuDartiailh Jan 31, 2015
145ef9c
WIP (close to an end) adding the PulseSequenceTransfer.
MatthieuDartiailh Jan 31, 2015
2d96be8
Merge remote-tracking branch 'origin/master' into pulse-sequences
MatthieuDartiailh Feb 1, 2015
cf85e2a
Fix failing test.
MatthieuDartiailh Feb 1, 2015
5214fb0
Add tests for transfer_pulse_sequence_task (save build_from_config).
MatthieuDartiailh Feb 1, 2015
ec9355e
Fix minors UI bugs in TransferPulseSequenceTask. Specific editor is n…
MatthieuDartiailh Feb 1, 2015
b44b06d
Add the missing select_sequence in the AWG channel driver and move to…
MatthieuDartiailh Feb 1, 2015
8acc00c
Wip adding an arbitrary pulse.
MatthieuDartiailh Feb 2, 2015
fee063d
Fix minor issues in eval_entries. Added future as a dependency.
MatthieuDartiailh Feb 2, 2015
21ca76e
Add future to travis build.
MatthieuDartiailh Feb 2, 2015
78998fd
Make the dict editor observe the underlying dict to avoid missing upd…
MatthieuDartiailh Feb 4, 2015
1f57a28
Fix UI issues in external vars editing for pulse sequences.
MatthieuDartiailh Feb 4, 2015
25253da
Fix autocompletion to include external_vars. Tweak a bit the UI
Feb 4, 2015
e8f5d5d
Override answer in TransferPulseSequenceTask as otherwise the sequenc…
MatthieuDartiailh Feb 4, 2015
f9d0520
Add better logging of error when something goes amiss in subprocess.
MatthieuDartiailh Feb 4, 2015
9c4208e
Use deepcopy in RootSequence to avoid destroying the passed config.
MatthieuDartiailh Feb 4, 2015
6396775
Fix mistake in subprocess error handling.
MatthieuDartiailh Feb 4, 2015
6accaa5
Fix sequence selection post transfer for the AWG interface.
MatthieuDartiailh Feb 5, 2015
29a21e5
Make sure no exception is raised when running _answer on pulse even i…
MatthieuDartiailh Feb 5, 2015
e466843
Fix AWG byte strings building and add the possibilty to reverse the m…
MatthieuDartiailh Feb 5, 2015
0c1445b
Add reopen connection to tektro awg channel and fix order of transfer…
MatthieuDartiailh Feb 6, 2015
49b71ca
ws
MatthieuDartiailh Feb 6, 2015
bac1e47
Make the errors display widget handle better a change of the error set.
MatthieuDartiailh Feb 16, 2015
9142ea9
Fix compilation dialog.
MatthieuDartiailh Feb 16, 2015
6a68dcd
Let output untouched when transferring a sequence in the TektroAWG in…
MatthieuDartiailh Feb 20, 2015
7987595
Fix bug when transferring a sequence (the ieee block was malformed, d…
MatthieuDartiailh Feb 20, 2015
d3bdb92
Permute byte order as the spurious comma was leading to that kind of …
MatthieuDartiailh Feb 20, 2015
268b3f3
Use post_setattr rather than observe in task_interface.
MatthieuDartiailh Feb 23, 2015
8c5cba3
Start adding task to choose Tektro AWG parameters.
MatthieuDartiailh Feb 23, 2015
f09eec4
Fill in a bit the abstract structure of SetAWGParameters.
MatthieuDartiailh Feb 23, 2015
649f17e
Write concrete implemetation for tektroAWG. Simply missing the views.
MatthieuDartiailh Feb 23, 2015
060362b
Tweak main measure editor spacings.
MatthieuDartiailh Feb 24, 2015
1b68dc0
Override _insert_interface_views in transfer_pulse_sequences_views to…
MatthieuDartiailh Feb 24, 2015
be60883
Add a view and debug the SetAWGParametersTask.
MatthieuDartiailh Feb 24, 2015
401b575
Fix check running (where not run previsouly).
MatthieuDartiailh Feb 24, 2015
5c97220
Change default of select after transfer in TektroAWG interface to True.
MatthieuDartiailh Feb 25, 2015
bb732e1
Fix test : allow non list args for InstrHelper which in this case sim…
MatthieuDartiailh Feb 27, 2015
c344e91
Merge remote-tracking branch 'origin/master' into pulse-sequences
MatthieuDartiailh Feb 27, 2015
618e205
Merge branch 'pulse-sequences' of https://github.com/MatthieuDartiail…
Jun 5, 2015
f12274e
wip on Tabor and Alazar
Apr 27, 2015
8adb08c
wip on Alazar
Apr 27, 2015
bf3b8ec
Add view for Alazar Task
May 5, 2015
e6e0cb9
Finalisation driver Alazar
Jun 5, 2015
b5c1cfd
Reshape of the data for demod
Sep 4, 2015
f52037f
bug resolved in demod_alazar
Sep 16, 2015
82d1838
bug solved in pulse sequence manager
Oct 28, 2015
0d9b8f0
Nouveau programme d'acquisition pour l'alazar, codé par Sébastien Jez…
Oct 30, 2015
e7ea347
Changement du visa du tektro par Sébastien Jezouin
Oct 30, 2015
6c02c7d
New Alazar acquisition with several IQ demod by SJ
Oct 30, 2015
c14a76e
AWG bugs fixed by SJ
Oct 30, 2015
112cc62
Change in Alazar : same phase reference for multiple IQ demod
Nov 4, 2015
7c7dcf7
Merge branch 'qelec' of https://github.com/bhuard/HQCMeas into qelec
Nov 4, 2015
0eb2ba3
Creation of a new Task allowing to save files in the HDF5 format.
Nov 10, 2015
38642e2
Modification of DemodAlazarTask in order to be able to record raw tra…
Nov 10, 2015
9269463
Modification of the PNA get trace so that it works even when SDATA (c…
Dec 4, 2015
c9f79ce
Old commits already in other branches that we think are necessary to …
Dec 4, 2015
5ec5295
Update demodAlazar in order to allow acquiring time traces of I and Q
Dec 4, 2015
f3f7bd3
solves a bug on AWG
Dec 4, 2015
dd7c38a
Merge branch 'qelec' of https://github.com/bhuard/HQCMeas into qelec
Dec 4, 2015
886fb97
Update demodAlazar in order to allow acquiring time traces of I and Q
Dec 4, 2015
43ed76e
Alazar IQ trace in progress
Dec 4, 2015
45677d2
Alazar IQ trace debugged
Dec 4, 2015
12aa173
IQ measurement ok, version global ok
Jun 10, 2016
ccdb42a
gaussian + arbitrary shapes ok
Jun 10, 2016
5f0d439
debug pulse transfer Tabor AWG
Jun 14, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .coveragerc~
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[report]
omit =
*/hqc_start.py
*/hqc_meas/instruments/drivers/visa/*
*/hqc_meas/instruments/drivers/dll/*
*/hqc_meas/utils/widgets/*
5 changes: 4 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ install:
- travis_retry sudo apt-get -qq -y install python-numpy python-nose python-setuptools > ${REDIRECT_TO};
- pip install -q coveralls nose-timer

# Install future
- pip install -q future

# Install atom enaml from pip
- pip install -q ply
- pip install -q atom
Expand All @@ -38,7 +41,7 @@ before_script:

script:
- cd ${SRC_DIR}
- nosetests -a '!no_travis' --with-coverage --cover-package hqc_meas
- nosetests -a '!no_travis' --with-coverage --cover-package hqc_meas

after_success:
# Need to run from source dir to execute appropriate "git" commands
Expand Down
4 changes: 2 additions & 2 deletions hqc_meas/app_closing.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# -*- coding: utf-8 -*-
#==============================================================================
# =============================================================================
# module : app_closing.py
# author : Matthieu Dartiailh
# license : MIT license
#==============================================================================
# =============================================================================

from atom.api import Callable, Unicode
from enaml.core.declarative import Declarative, d_
Expand Down
4 changes: 4 additions & 0 deletions hqc_meas/instruments/dll/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
# -*- coding: utf-8 -*-

import os
from pyclibrary.utils import (add_header_locations)

add_header_locations([os.path.join(os.path.dirname(__file__), 'headers')])
521 changes: 521 additions & 0 deletions hqc_meas/instruments/dll/alazar935x.py

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion hqc_meas/instruments/manager/manifest.enaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@ def show_starting_errors(event):
manager = event.workbench.get_plugin('hqc_meas.instr_manager')
ui = event.workbench.get_plugin('enaml.workbench.ui')
ErrorsDisplay(ui.window, title='Instr manager start up errors',
errors=manager.report()).exec_()
errors=manager.report(),
errors_type='Import failures').exec_()


def matching_drivers(event):
Expand Down
313 changes: 313 additions & 0 deletions hqc_meas/instruments/visa/tabor_awg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,313 @@
# -*- coding: utf-8 -*-
# =============================================================================
# module : AWG.py
# author : Pierre Heidmann and Nathanael Cottet
# license : MIT license
# =============================================================================
""" This module defines drivers for Tabor AWG using VISA library.

:Contains:
TaborAWGChannel
AWG


"""


from threading import Lock
from contextlib import contextmanager
from ..driver_tools import (BaseInstrument, InstrIOError, secure_communication,
instrument_property)
from ..visa_tools import VisaInstrument
from visa import VisaTypeError
from textwrap import fill
from inspect import cleandoc
import re
import time


class TaborAWGChannel(BaseInstrument):

def __init__(self, AWG, channel_num, caching_allowed=True,
caching_permissions={}):
super(TaborAWGChannel, self).__init__(None, caching_allowed,
caching_permissions)
self._AWG = AWG
self._channel = channel_num

def reopen_connection(self):
self._AWG.reopen_connection()


@contextmanager
def secure(self):
""" Lock acquire and release method

"""
i = 0
while not self._AWG.lock.acquire():
time.sleep(0.1)
i += 1
if i > 50:
raise InstrIOError
try:
yield
finally:
self._AWG.lock.release()

@instrument_property
@secure_communication()
def output_state(self):
""" Output getter method

"""
with self.secure():
self._AWG.write('INST {}'.format(self._channel))
output = self._AWG.ask('OUTP?'
)
if output == 'ON':
return 'ON'
elif output == 'OFF':
return 'OFF'
else:
mes = cleandoc('AWG channel {} did not return its output'
.format(self._channel))
raise InstrIOError(mes)

@output_state.setter
@secure_communication()
def output_state(self, value):
""" Output setter method. 'ON', 'OFF'

"""
with self.secure():
on = re.compile('on', re.IGNORECASE)
off = re.compile('off', re.IGNORECASE)
if on.match(value) or value == 1:

self._AWG.write('INST {}'.format(self._channel))
self._AWG.write('SOUR:FUNC:MODE USER')
self._AWG.write('OUTP ON')
if self._AWG.ask('OUTP?'
) != 'ON':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the output'''))
elif off.match(value) or value == 0:
self._AWG.write('INST {}'.format(self._channel))
self._AWG.write('SOUR:FUNC:MODE USER')
self._AWG.write('OUTP OFF')
if self._AWG.ask('OUTP?'
) != 'OFF':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the output'''))
else:
mess = fill(cleandoc('''The invalid value {} was sent to
switch_on_off method''').format(value), 80)
raise VisaTypeError(mess)




class TaborAWG(VisaInstrument):
"""
"""
caching_permissions = {'defined_channels': True}

def __init__(self, connection_info, caching_allowed=True,
caching_permissions={}, auto_open=True):
super(TaborAWG, self).__init__(connection_info, caching_allowed,
caching_permissions, auto_open)
self.channels = {}
self.lock = Lock()

def get_channel(self, num):
"""
"""
if num not in self.defined_channels:
return None

if num in self.channels:
return self.channels[num]
else:
channel = TaborAWGChannel(self, num)
self.channels[num] = channel
return channel

@secure_communication()
def to_send(self, waveform, ch_id):
"""Command to send to the instrument. waveform = string of a bytearray

"""
numbyte = len(waveform)
self.write('INST {}'.format(ch_id))
self.write('TRAC:MODE SING')
numApresDiese = len('{}'.format(numbyte))
header = "TRAC#{}{}".format(numApresDiese, numbyte)
self.write('{}{}'.format(header, waveform))

@instrument_property
@secure_communication()
def defined_channels(self):
"""
"""
defined_channels = [1, 2, 3, 4]
return defined_channels

@instrument_property
@secure_communication()
def oscillator_reference_external(self):
"""oscillator reference external getter method
"""
ore = self.ask("SOUR:ROSC:SOUR?")
if ore == 'EXT':
return 'True'
elif ore == 'INT':
return 'False'
else:
raise InstrIOError

@oscillator_reference_external.setter
@secure_communication()
def oscillator_reference_external(self, value):
"""oscillator reference external setter method
"""
if value in ('EXT', 1, 'True'):
self.write('SOUR:ROSC:SOUR EXT')
if self.ask('SOUR:ROSC:SOUR?') != 'EXT':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the oscillator
reference'''))
elif value in ('INT', 0, 'False'):
self.write('SOUR:ROSC:SOUR INT')
if self.ask('SOUR:ROSC:SOUR?') != 'INT':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the oscillator
reference'''))
else:
mess = fill(cleandoc('''The invalid value {} was sent to
oscillator_reference_external
method''').format(value), 80)
raise VisaTypeError(mess)

@instrument_property
@secure_communication()
def clock_source(self):
"""clock source getter method
"""

cle = self.ask("FREQ:RAST:SOUR?")
if cle is not None:
return cle
else:
raise InstrIOError

@clock_source.setter
@secure_communication()
def clock_source(self, value):
"""clock source setter method
"""
if value in ('EXT', 1, 'True'):
self.write(':FREQ:RAST:SOUR EXT')
if self.ask(':FREQ:RAST:SOUR?') != 'EXT':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the clock source'''))
elif value in ('INT', 0, 'False'):
self.write(':FREQ:RAST:SOUR INT')
if self.ask(':FREQ:RAST:SOUR?') != 'INT':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the clock source'''))
else:
mess = fill(cleandoc('''The invalid value {} was sent to
clock_source_external
method''').format(value), 80)
raise VisaTypeError(mess)

@instrument_property
@secure_communication()
def sampling_frequency(self):
"""sampling frequency getter method
"""
sampl_freq = self.ask_for_values("FREQ:RAST?")[0]
if sampl_freq is not None:
return sampl_freq
else:
raise InstrIOError

@sampling_frequency.setter
@secure_communication()
def sampling_frequency(self, value):
"""sampling frequency setter method
"""
self.write("FREQ:RAST {}".format(value))
result = self.ask_for_values("FREQ:RAST?")[0]
if abs(result - value) > 10**-12:
raise InstrIOError(cleandoc('''Instrument did not set correctly
the sampling frequency'''))

@instrument_property
@secure_communication()
def running(self):
"""Run state getter method
"""
return '2 : Intrument is running'

@running.setter
@secure_communication()
def running(self, value):
"""Run state setter method
"""


@instrument_property
@secure_communication()
def run_mode(self):
"""Run mode getter method
"""
run_cont = self.ask("INIT:CONT?")
run_gat=self.ask("INIT:GATE?")
if run_cont is not None:
if run_cont == 'ON':
return 'Continuous'
elif run_gat == 'ON':
return 'Gated'
else:
return 'Triggered'

else:
raise InstrIOError

@run_mode.setter
@secure_communication()
def run_mode(self, value):
"""Run mode setter method
"""
if value in ('CONT', 'CONTINUOUS', 'continuous'):
self.write('INIT:CONT ON')
if self.ask('INIT:CONT?') != 'ON':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the run mode'''))
elif value in ('TRIG', 'TRIGGERED', 'triggered'):
self.write('INIT:CONT OFF')
self.write('INIT:GATE OFF')
if self.ask('INIT:CONT?') != 'OFF':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the run mode'''))
elif self.ask('INIT:GATE?') != 'OFF':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the run mode'''))
elif value in ('GAT', 'GATED', 'gated'):
self.write('INIT:CONT OFF')
self.write('INIT:GATE ON')
if self.ask('INIT:CONT?') != 'OFF':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the run mode'''))
elif self.ask('INIT:GATE?') != 'ON':
raise InstrIOError(cleandoc('''Instrument did not set
correctly the run mode'''))
else:
mess = fill(cleandoc('''The invalid value {} was sent to
run mode method''').format(value), 80)
raise VisaTypeError(mess)


DRIVERS = {'TaborAWG': TaborAWG}
Loading