aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony LaTorre <devnull@localhost>2013-04-02 17:48:09 -0500
committerAnthony LaTorre <devnull@localhost>2013-04-02 17:48:09 -0500
commita698974c40e5d86ecf008ce71d50662368158c5f (patch)
treed960c31a12dbd3f71bfd264f9049b08db07a14f9
parentcb9b9ca7f58bf0dc63079c79211bb994bb8f825f (diff)
downloadlecrunch-a698974c40e5d86ecf008ce71d50662368158c5f.tar.gz
lecrunch-a698974c40e5d86ecf008ce71d50662368158c5f.tar.bz2
lecrunch-a698974c40e5d86ecf008ce71d50662368158c5f.zip
fix saving of header state in a few functions. acquire method now blocks until waveform is acquired.
-rw-r--r--tektronix.py23
1 files changed, 16 insertions, 7 deletions
diff --git a/tektronix.py b/tektronix.py
index 4577d00..ddf0274 100644
--- a/tektronix.py
+++ b/tektronix.py
@@ -20,6 +20,8 @@ preamble_fields = {'BYT_NR': int, # data width for waveform
'YUNIT' : str,
'NR_FR' : int }
+header_regex = re.compile('(?::HEADER ){0,1}(\d)')
+
def get_dtype(preamble):
"""Returns the numpy dtype for the raw waveform data given the preamble."""
if preamble['BYT_OR'] == 'MSB':
@@ -91,10 +93,15 @@ class TekScope(object):
"""Trigger and acquire a new waveform."""
self.send('acquire:state run\n')
+ acquire_regex = re.compile('(?::ACQUIRE:STATE ){0,1}(\d)')
+
+ while int(acquire_regex.match(self.query('acquire:state?')).group(1)):
+ pass
+
def get_preamble(self, channel):
"""Returns a dictionary containing information about the waveform
format for a channel."""
- header = self.query('header?\n')
+ header = int(header_regex.match(self.query('header?\n')).group(1))
# turn header on so that we know preamble field names
self.send('header 1\n')
@@ -110,14 +117,14 @@ class TekScope(object):
preamble[key] = preamble_fields[key](value)
# reset header format and data:source
- self.send(header)
+ self.send('header %i' % header)
self.send(source)
return preamble
def get_active_channels(self):
"""Returns a list of the active (displayed) channel numbers."""
- header = self.query('header?\n')
+ header = int(header_regex.match(self.query('header?\n')).group(1))
self.send('header 1\n')
@@ -131,7 +138,7 @@ class TekScope(object):
if state != 0:
channels.append(ch)
- self.send(header)
+ self.send('header %i' % header)
return channels
@@ -139,7 +146,7 @@ class TekScope(object):
"""Returns the waveform from channel as a numpy array. If dtype is
specified, the function does not need to query the scope for the data
format which will be much quicker."""
- header = self.query('header?\n')
+ header = int(header_regex.match(self.query('header?\n')).group(1))
self.send('header 0\n')
@@ -173,7 +180,7 @@ class TekScope(object):
if eom != '\n':
raise Exception("eom != '\n'")
- self.send(header)
+ self.send('header %i' % header)
return waveform
@@ -211,12 +218,14 @@ if __name__ == '__main__':
for run in range(options.nruns):
if options.nruns > 1:
- fileid = str(run).zfill(int(math.log10(options.nruns))+1)
+ fileid = '_' + str(run).zfill(int(math.log10(options.nruns))+1)
else:
fileid = ''
filename = root + fileid + ext
+ print 'saving to %s' % filename
+
t0 = time.time()
with h5py.File(filename, 'w') as f: