is_panel = get_exec_pars().source != CommandSource.ui #Must be checked before callin "run" run("Devices/Elements") run("Devices/WireScanner") #BPM_SENSORS = {"x":"X1", "y":"Y1", "q":"Q1"} BPM_SENSORS = {"x":"X1"} if is_panel: prefix = args[0] sel = args[1] start = args[2] end = args[3] cycles = args[4] velocity = args[5] bpm3 = args[6] else: prefix = "S30CB09-DWSC440" #"SARCL02-DWSC270" # "SINDI01-DWSC090" #"SARCL02-DWSC270" sel = WireScanner.W1X start = -200 end = 200 cycles = 5 velocity = 200 bpm3 = None print prefix, sel, start, end, cycles, cycles, bpm3 #Creating WireScanner object if prefix not in get_wire_scans(): raise Exception("Invalid wire scan: " + prefix) scanner = WireScanner(prefix, sel, start, end, cycles, velocity, True) scanner.init() scanner.waitValue("At start", 60000) #Stream channels bs_position = scanner.motor_bs_readback.get_name() bpms = get_wire_scans_bpms(prefix) if bpms is None: raise Exception("Cannot determine wire scan bpms: " + prefix) channels = [("w_pos", scanner.motor_bs_readback.get_name()), ("cur_cycle", scanner.curr_cycl.get_name()), ("scanning", scanner.status_channels[0].get_name())] if bpm3 is not None: bpms.append(bpm3) bpms = ["SINDI01-DBPM060", "SINDI02-DBPM010"] for i in range (len(bpms)): for sensor in BPM_SENSORS.keys(): channels.append (("bpm" + str(i+1) + "_" + sensor, bpms[i] + ":" + BPM_SENSORS[sensor])) channels.append (("timer", "SINDI01-RLLE-STA:SLAVE1-CPUTIMER")) #Stream creation st = Stream("pulse_id", dispatcher) #st.setFilter(scanner.status_channels[0].get_name() + ">0") #Not used because we must the reansition to know when the finished scanner.curr_cycl.write(0) st.setFilter(scanner.curr_cycl.get_name() + ">0") for c in channels: print c[1] st.addScalar(c[0], c[1], 10, 0) st.initialize() st.start() st.waitCacheChange(10000) scanner.scan() scanner.waitState(State.Busy, 60000) #End of scan checking scan_complete=False def check_end_scan(record, scan): global scan_complete #print record[1] ,scanner.readback if record[3]<1: print "Data aquisition completed" scan_complete=True scan.abort() #Metadata def write_metadata(path): try: set_attribute(path, "Wire Scan", prefix) set_attribute(path, "Selection", sel) set_attribute(path, "Range", scaner.scan_range) set_attribute(path, "Cycles", scanner.cycles ) set_attribute(path, "Velocity", scanner.velocity ) except: pass #Scan try: mscan (st, st.getReadables(), -1, -1, after_read =check_end_scan) except: if not scanner.isReady(): print "Aborting Wire Scan" scanner.abort() if not scan_complete: raise finally: write_metadata(get_exec_pars().scanPath) print "Closing scanner" scanner.close() st.close()