Files
x03da/script/test/HoloFlyScan.py
gac-x03da 0c8f9cff52 Closedown
2018-04-17 19:17:27 +02:00

69 lines
2.2 KiB
Python

"""
Flying hologram scan (experimental)
Arguments:
THETA_RANGE (tuple (min, max))
PHI_RANGE (tuple (min, max))
THETA_STEP (scalar)
PHI_STEP (scalar)
ZIGZAG (BOOLEAN)
LATENCY (float) in seconds
SENSORS (list of devices)
"""
import traceback
THETA_RANGE = (-9.0, 81.0)
THETA_STEP = 1.0
PHI_RANGE = (-40.0, +40.0)
#PHI_RANGE = (-160.0, +160.0)
PHI_STEP = 40.0
LATENCY = 0.0
ZIGZAG = True
ENDSCAN = True
MOTORS = (ManipulatorTheta)
#SENSORS = (Counts, Scienta.spectrum, SampleCurrent, RefCurrent, MachineCurrent)
SENSORS = (Counts, Scienta.dataMatrix, SampleCurrent, RefCurrent, MachineCurrent)
#set_preference(Preference.ENABLED_PLOTS, [ManipulatorPhi, ManipulatorTheta, Scienta.dataMatrix, ImageIntegrator])
#set_preference(Preference.PLOT_TYPES,{'ImageIntegrator':1})
adjust_sensors()
set_adc_averaging()
set_preference(Preference.PLOT_TYPES, {'Scienta spectrum':1})
# time per scienta acquisition in seconds
time1 = time.time()
trig_scienta()
time2 = time.time()
scienta_time = (time2 - time1) # + 1.0
print "scienta_time: ", scienta_time
# time for one theta scan in seconds
THETA_NSTEPS = int((THETA_RANGE[1] - THETA_RANGE[0]) / THETA_STEP) + 1
theta_time = scienta_time * THETA_NSTEPS
print "theta_time: ", theta_time
PHI_NSTEPS = int((PHI_RANGE[1] - PHI_RANGE[0]) / PHI_STEP) + 1
phi_positions = [PHI_RANGE[0] + PHI_STEP * i for i in range(PHI_NSTEPS)]
print "phi_positions: ", phi_positions
try:
for phi in phi_positions:
ManipulatorPhi.write(phi)
print "phi = ", phi
ManipulatorPhi.waitValueInRange(phi, 1.0, 100)
#try:
#check_positions = False makes scan not to abort if cannot keep time base: can get less points
cscan(MOTORS, SENSORS, THETA_RANGE[0], THETA_RANGE[1], THETA_NSTEPS - 1, time=theta_time, before_read=before_readout, after_read = after_readout, check_positions = False)
#except ContinuousScanFollowingErrorException:
# print time.time(), " cscan: exception at (theta, phi) = ({th}, {ph})".format(th=ManipulatorTheta.read(), ph=phi)
if ZIGZAG:
THETA_RANGE = (THETA_RANGE[1], THETA_RANGE[0])
except:
traceback.print_exc()
finally:
if ENDSCAN:
after_scan()