#!/usr/bin/python

from Gpib import *
from matplotlib.matlab import *
from string import *
from time import *

# set up GPIB comms and clear device
scope = gpib.find('scope')
gpib.clear(scope)

# set SRQ operation
gpib.write(scope,'DESE 1')
gpib.write(scope,'*ESE 1')
gpib.write(scope,'*SRE 32')

# turn off response headers
gpib.write(scope,'head 0')

# get instrument settings
gpib.write(scope,'ch1:scale?')
volts = float(gpib.read(scope,80))
voltsbit = volts/25.6
print 'voltsbit = ',voltsbit
if volts >= 1:
	volt_string = '%i V / div' % volts
else:
	volt_string = '%i mv / div' % (volts * 1000)

gpib.write(scope,'hor:mai:sca?')
tmp = float(gpib.read(scope,80))
if tmp >= 1:
	sweep_val = tmp
	sweep_suf = "S"
if tmp < 1:
	sweep_val = tmp * 10e2
	sweep_suf = "mS"
	if tmp < 0.001:
		sweep_val = tmp * 10e5
		sweep_suf = "uS"
		if tmp < 0.000001:
			sweep_val = tmp * 10e8
			sweep_suf = "nS"
sweep_val = '%.f' % (sweep_val)
sweep_string = sweep_val + ' ' + sweep_suf + " / div"

# acquire
gpib.write(scope,'acquire:state on')

# read curve
gpib.write(scope,'curv?')
sleep(1.0)
tmp = gpib.read(scope,8192)

# convert comma delimited string to list of floats; scale by voltsbit
tmplist = split(tmp,",")
trace = []
for x in tmplist[0:-1]:
	trace.append(float(x)*voltsbit)

sleep(1.0)
# get some measurements, just for fun
tmp = 9.9E37
gpib.write(scope,'measu:imm:typ PK2;:measu:imm:sou CH1')
sleep(0.1)
gpib.write(scope,'measu:imm:val?')
tmp = gpib.read(scope,80)
tmp = float(tmp)
if tmp != 9.9E37:
	peak_string = 'Pk-Pk: %.3f V' % (tmp)
else: peak_string = ''

gpib.write(scope,'measu:imm:typ MEAN;:measu:imm:sou CH1')
sleep(0.1)
gpib.write(scope,'measu:imm:val?')
tmp = float(gpib.read(scope,80))
if tmp != 9.9E37:
	mean_string = 'Mean: %.3f V' % (tmp)
else: mean_string = ''

gpib.write(scope,'measu:imm:typ PERI;:measu:imm:sou CH1')
sleep(0.1)
gpib.write(scope,'measu:imm:val?')
tmp = float(gpib.read(scope,80))
if tmp >= 1:
	period_val = tmp
	period_suf = "S"
if tmp < 1:
	period_val = tmp * 10e2
	period_suf = "mS"
	if tmp < 0.001:
		sweep_val = tmp * 10e5
		sweep_suf = "uS"
		if tmp < 0.000001:
			period_val = tmp * 10e8
			period_suf = "nS"
if tmp != 9.9E37:
	period_string = 'Period: %.3f' % (period_val) + ' ' + period_suf
else: period_string = ''

gpib.write(scope,'measu:imm:typ FREQ;:measu:imm:sou CH1')
sleep(0.1)
gpib.write(scope,'measu:imm:val?')
tmp = float(gpib.read(scope,80))
if tmp < 1e3:
	freq_val = tmp
	freq_suf = "Hz"
if tmp < 1e6:
	freq_val = tmp / 10e2
	freq_suf = "kHz"
if tmp >= 1e6:
	freq_val = tmp / 10e5
	freq_suf = "MHz"

if tmp != 9.9E37:
	freq_string = 'Freq: %.3f' % (freq_val) + ' ' + freq_suf
else: freq_string = ''


# plot
xlen = len(trace)
plot(range(xlen),trace)
axis([0,xlen,-128*voltsbit,128*voltsbit])
xlabel(sweep_string)
ylabel(volt_string)
set(gca(), 'xticklabels', [])
if not gca().is_first_col():
	set(gca(), 'yticklabels', [])
if not gca().is_last_row():
	set(gca(), 'xticklabels', [])
grid(1)

text(70,-125*voltsbit, peak_string)
text(70,-112*voltsbit, mean_string)
text(0.72*xlen,-127*voltsbit, freq_string)
text(0.72*xlen,-112*voltsbit, period_string)

show()

