""" automated sample finder (EXPERIMENTAL) """ import math # --- do not edit below --- RELATIVE = False LATENCY = 0.0 ZIGZAG = False ENDSCAN = False START_POS = 0.0 SENSORS = (Counts, SampleCurrent, RefCurrent, MachineCurrent) MOTORS = ManipulatorY RANGE = (START_POS + 5., START_POS - 5.) Scienta.setExposure(0.5) scienta_time = 3.75 print "scienta time: ", scienta_time STEP = 0.2 SPEED = STEP / scienta_time fly_time = abs(RANGE[1] - RANGE[0]) / SPEED STEPS = int(fly_time / scienta_time) + 1 print "coarse scan" print "speed: ", SPEED print "scan time: ", fly_time set_exec_pars(keep=True) adjust_sensors() set_adc_averaging() result = cscan(MOTORS, SENSORS, RANGE[0], RANGE[1], STEPS, time=fly_time, before_read=before_readout, after_read = after_readout, check_positions = False) readable = result.getReadable(0) positions = result.getPositions(0) min_counts = min(readable) max_counts = max(readable) thresh = (max_counts - min_counts) / 2. + min_counts print "threshhold: ", thresh sample_positions = [pos for idx, pos in enumerate(positions) if readable[idx] >= thresh] lo_edge = min(sample_positions) hi_edge = max(sample_positions) print "lower edge, upper edge: ", lo_edge, ", ", hi_edge RANGE = (lo_edge - 0.4, lo_edge + 0.4) STEP = 0.01 SPEED = STEP / scienta_time fly_time = abs(RANGE[1] - RANGE[0]) / SPEED STEPS = int(fly_time / scienta_time) + 1 print "lower edge scan" print "speed: ", SPEED print "scan time: ", fly_time cscan(MOTORS, SENSORS, RANGE[0], RANGE[1], STEPS, time=fly_time, before_read=before_readout, after_read = after_readout, check_positions = False) RANGE = (hi_edge - 0.4, hi_edge + 0.4) STEP = 0.01 SPEED = STEP / scienta_time fly_time = abs(RANGE[1] - RANGE[0]) / SPEED STEPS = int(fly_time / scienta_time) + 1 print "upper edge scan" print "speed: ", SPEED print "scan time: ", fly_time cscan(MOTORS, SENSORS, RANGE[0], RANGE[1], STEPS, time=fly_time, before_read=before_readout, after_read = after_readout, check_positions = False)