Closedown
This commit is contained in:
@@ -35,7 +35,7 @@ DetectorMode=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:DETECTOR_MODE_
|
||||
PassEnergy=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:PASS_ENERGY_RBV|Read||true
|
||||
ElementSet=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:ELEMENT_SET_RBV|Read||true
|
||||
AnalyserSlit=ch.psi.pshell.epics.ChannelString|X03DA-SCIENTA:cam1:ANALYSER_SLIT_RBV|Read||
|
||||
ScientaDwellTime=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:AcquireTime_RBV|Read||
|
||||
ScientaDwellTime=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:AcquireTime_RBV|Read||true
|
||||
#AcquisitionModeNum=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:ACQ_MODE_RBV|Read||
|
||||
#EnergyModeNum=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:ENERGY_MODE_RBV|Read||
|
||||
#LensModeNum=ch.psi.pshell.epics.ChannelDouble|X03DA-SCIENTA:cam1:LENS_MODE_RBV|Read||
|
||||
|
||||
@@ -5,9 +5,12 @@ class Keithley(object):
|
||||
RANGE_STATES = ['AUTO', '20 mA', '2 mA', '200 uA', '20 uA', '2 uA', '200 nA', '20 nA', '2 nA', '200 pA', '20 pA']
|
||||
TTYPE_STATES = ['IMM', 'TLIN', 'BUS', 'EXT']
|
||||
USER_MODE_STATES = ['def setting', 'poll curr fast', 'poll curr medi', 'poll curr slow', 'trig setting', 'trigger BUS', 'trigger TLIN', 'trigger EXT', 'poll volt medi']
|
||||
SCAN_STATES = ['Passive', 'Event', 'I/O Intr', '10 second', '5 second', '2 second', '1 second', '.5 second', '.2 second', '.1 second']
|
||||
SCAN_INTERVALS = [0., 0., 0., 10., 5., 2., 1., .5, .2, .1]
|
||||
|
||||
def __init__(self, base_name, base_channel):
|
||||
self.dwell = 0.
|
||||
self.triggered = False
|
||||
self.base_channel = base_channel
|
||||
self.base_name = base_name
|
||||
self.rangeCh = None
|
||||
@@ -62,15 +65,27 @@ class Keithley(object):
|
||||
self.dosetdefaultCh.write(1)
|
||||
self.scanCh.write(9)
|
||||
|
||||
def prepare(self, dwell):
|
||||
def prepare(self, dwell, triggered):
|
||||
"""
|
||||
prepare keithley for gpib polling:
|
||||
scan passive, bus triggered, set dwell time
|
||||
|
||||
dwell = dwell time in seconds (0.1 - 20.0)
|
||||
dwell: dwell time in seconds.
|
||||
0.1 - 20.0 in triggered mode,
|
||||
0.1 - 1.0 in free running mode.
|
||||
triggered:
|
||||
True: wait for self.trig call and trigger once per call.
|
||||
False: 1 Hz free run using EPICS SCAN attribute.
|
||||
"""
|
||||
self.scanCh.write(0)
|
||||
self.ttypeCh.write(2)
|
||||
self.triggered = triggered
|
||||
if triggered:
|
||||
self.scanCh.write(0)
|
||||
self.ttypeCh.write(2)
|
||||
else:
|
||||
self.ttypeCh.write(0)
|
||||
self.scanCh.write(6)
|
||||
dwell = min(dwell, 1.)
|
||||
|
||||
nplc = 5.
|
||||
navg = dwell / 0.1
|
||||
if navg > 100:
|
||||
@@ -78,6 +93,7 @@ class Keithley(object):
|
||||
navg /= 2
|
||||
navg = min(navg, 100)
|
||||
nplc = min(nplc, 10.)
|
||||
|
||||
self.nplcCh.write(nplc)
|
||||
self.navgCh.write(navg)
|
||||
self.dwell = self.tottimeCh.read() / 1000.
|
||||
@@ -86,9 +102,13 @@ class Keithley(object):
|
||||
"""
|
||||
trigger keithleys, wait until done, and read the result into EPICS.
|
||||
the value can then be read by pshell from the channel.
|
||||
|
||||
if self.prepare was called with triggered = False,
|
||||
this method has no effect.
|
||||
"""
|
||||
self.doinitCh.write(1)
|
||||
self.dotriggerCh.write(1)
|
||||
if self.triggered:
|
||||
self.doinitCh.write(1)
|
||||
self.dotriggerCh.write(1)
|
||||
|
||||
def get_dwell(self):
|
||||
"""
|
||||
@@ -101,9 +121,12 @@ class Keithley(object):
|
||||
def fetch(self):
|
||||
"""
|
||||
fetch the current value from the keithley into EPICS.
|
||||
|
||||
if self.prepare was called with triggered = False,
|
||||
this method has no effect.
|
||||
"""
|
||||
#time.sleep(self.get_dwell())
|
||||
self.dofetchCh.write(1)
|
||||
if self.triggered:
|
||||
self.dofetchCh.write(1)
|
||||
|
||||
def read(self):
|
||||
"""
|
||||
@@ -114,11 +137,11 @@ class Keithley(object):
|
||||
def release(self):
|
||||
"""
|
||||
switch keithleys to free run.
|
||||
0.1 s polling and dwell time
|
||||
0.1 s dwell time, 1 s poll interval.
|
||||
"""
|
||||
self.nplcCh.write(5.)
|
||||
self.navgCh.write(1)
|
||||
self.scanCh.write(9)
|
||||
self.scanCh.write(6)
|
||||
self.ttypeCh.write(0)
|
||||
|
||||
def reset(self):
|
||||
|
||||
@@ -86,25 +86,21 @@ def trig_scienta():
|
||||
time.sleep(0.1)
|
||||
else:
|
||||
image_id = Scienta.currentImageCount
|
||||
# print time.time(), " trig_scienta: start"
|
||||
Scienta.start()
|
||||
# print time.time(), " trig_scienta: waitReady"
|
||||
Scienta.waitReady(-1)
|
||||
# print time.time(), " trig_scienta: waitNewImage"
|
||||
Scienta.waitNewImage(3000, image_id)
|
||||
# print time.time(), " trig_scienta: return"
|
||||
|
||||
from keithley import KeiSample, KeiReference
|
||||
|
||||
def prepare_keithleys(dwell):
|
||||
def prepare_keithleys(dwell, triggered):
|
||||
"""
|
||||
prepare keithleys for gpib polling:
|
||||
passive, bus triggered, dwell time
|
||||
|
||||
dwell = dwell time in seconds (0.1 - 20.0)
|
||||
"""
|
||||
KeiSample.prepare(dwell)
|
||||
KeiReference.prepare(dwell)
|
||||
KeiSample.prepare(dwell, triggered)
|
||||
KeiReference.prepare(dwell, triggered)
|
||||
|
||||
def trig_keithleys():
|
||||
"""
|
||||
@@ -144,7 +140,7 @@ diag_channels.append(Scienta.channelEnd) #diag_channels.append(ChannelDo
|
||||
diag_channels.append(Scienta.sliceBegin) # diag_channels.append(ChannelDouble("SliceBegin", "X03DA-SCIENTA:cam1:SLICE_BEGIN_RBV"))
|
||||
diag_channels.append(Scienta.sliceEnd) #diag_channels.append(ChannelDouble("StepTime", "X03DA-SCIENTA:cam1:SLICE_END_RBV"))
|
||||
diag_channels.append(Scienta.numSlices) # diag_channels.append(ChannelDouble("NumSlices", "X03DA-SCIENTA:cam1:SLICES_RBV"))
|
||||
diag_channels.append(Scienta.frames) # diag_channels.append(ChannelDouble("NumFrames", "X03DA-SCIENTA:cam1:FRAMES"))
|
||||
#diag_channels.append(Scienta.frames) # diag_channels.append(ChannelDouble("NumFrames", "X03DA-SCIENTA:cam1:FRAMES"))
|
||||
diag_channels.append(Scienta.numChannels) #diag_channels.append(ChannelDouble("NumChannels", "X03DA-SCIENTA:cam1:NUM_CHANNELS_RBV"))
|
||||
diag_channels.append(Scienta.lowEnergy) #diag_channels.append(ChannelDouble("LowEnergy", "X03DA-SCIENTA:cam1:LOW_ENERGY_RBV"))
|
||||
diag_channels.append(Scienta.centerEnergy) #diag_channels.append(ChannelDouble("CenterEnergy", "X03DA-SCIENTA:cam1:CENTRE_ENERGY_RBV"))
|
||||
@@ -288,18 +284,13 @@ def before_readout():
|
||||
sample_scienta = True
|
||||
break
|
||||
|
||||
#print time.time(), " before_readout: beam"
|
||||
wait_beam()
|
||||
#print time.time(), " before_readout: trig"
|
||||
trig_keithleys()
|
||||
#print time.time(), " before_readout: wait"
|
||||
if sample_scienta:
|
||||
trig_scienta()
|
||||
else:
|
||||
wait_keithleys()
|
||||
#print time.time(), " before_readout: fetch"
|
||||
fetch_keithleys()
|
||||
#print time.time(), " before_readout: return"
|
||||
|
||||
def after_readout(rec):
|
||||
if get_exec_pars().persist:
|
||||
@@ -318,7 +309,8 @@ def set_adc_averaging():
|
||||
dwell = Scienta.getStepTime().read()
|
||||
dwell = min(dwell, 20.0)
|
||||
dwell = max(dwell, 0.1)
|
||||
prepare_keithleys(dwell)
|
||||
fixed = AcquisitionMode.read() == "Fixed"
|
||||
prepare_keithleys(dwell, fixed)
|
||||
#value = Scienta.getStepTime().read() * 10.0 #averaging count in 100ms
|
||||
#SampleCurrentAveraging.write(value)
|
||||
#RefCurrentAveraging.write(value)
|
||||
|
||||
Reference in New Issue
Block a user