""" automated sample finder (EXPERIMENTAL) """ import math # --- do not edit below --- RELATIVE = True LATENCY = 0.0 ZIGZAG = False ENDSCAN = False adjust_sensors() set_adc_averaging() # time per scienta acquisition in seconds time1 = time.time() trig_scienta() time2 = time.time() scienta_time = (time2 - time1) print "scienta time: ", scienta_time SENSORS = (Counts, SampleCurrent, RefCurrent, MachineCurrent) MOTORS = ManipulatorY RANGE = (-5., +5.) STEP = 0.2 MOTORS.move(0.) # time for one scan in seconds SPEED = STEP / scienta_time print "speed: ", SPEED fly_time = (RANGE[1] - RANGE[0]) / SPEED STEPS = int(fly_time / scienta_time) + 1 print "scan time: ", fly_time set_exec_pars(keep=True) 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 counts[idx] >= thresh] lo_edge = min(sample_positions) hi_edge = max(sample_positions) print "low and high edge: ", lo_edge, ", ", hi_edge MOTORS.move(lo_edge) RANGE = (-0.4, +0.4) STEP = 0.01 result = cscan(MOTORS, SENSORS, RANGE[0], RANGE[1], STEPS, time=fly_time, before_read=before_readout, after_read = after_readout, check_positions = False) MOTORS.move(hi_edge) RANGE = (-0.4, +0.4) STEP = 0.01 result = cscan(MOTORS, SENSORS, RANGE[0], RANGE[1], STEPS, time=fly_time, before_read=before_readout, after_read = after_readout, check_positions = False)