import traceback is_panel = get_exec_pars().source != CommandSource.ui #Must be checked before callin "run" run("Devices/Elements") run("Devices/WireScanner") set_exec_pars(save=False) BPM_SENSORS = [("x","X1"), ("y","Y1"), ("q","Q1")] #(logic name sufix, channel sufix) #Paramter parsing prefix = args[0] if is_panel else "S30CB09-DWSC440" #"SINDI01-DWSC090" scan_type = args[1] if is_panel else WireScanner.WireX1 scan_range = args[2] if is_panel else [-200, 200, -200, 200] cycles = args[3] if is_panel else 3 velocity = args[4] if is_panel else 200 bpms = args[5] if is_panel else get_wire_scanners_bpms(prefix) blms = args[6] if is_panel else get_wire_scanners_blms(prefix) bkgrd = args[7] if is_panel else 10 do_elog = True if is_panel else True print "WireScan parameters: ", prefix, scan_type, scan_range, cycles, cycles, bpms #Creating WireScanner object print "Creating scanner..." if prefix not in get_wire_scanners(): raise Exception("Invalid wire scan: " + prefix) scanner = WireScanner(prefix, scan_range, cycles, velocity, True) #List of stream channels channels = [("m_pos", scanner.motor_bs_readback.get_name()), ("cur_cycle", scanner.curr_cycl.get_name()), ("scanning", scanner.status_channels[0].get_name())] for i in range (len(blms)): channels.append (("blm" + str(i+1), blms[i] + ":B1_LOSS")) for i in range (len(bpms)): for sensor in BPM_SENSORS: channels.append (("bpm" + str(i+1) + "_" + sensor[0], bpms[i] + ":" + sensor[1])) #Stream creation print "Starting stream..." st = Stream("pulse_id", dispatcher) for c in channels: st.addScalar(c[0], c[1], 10, 0) st.initialize() st.start() st.waitCacheChange(10000) #Wait stream be running before starting scan try: bscan(st, 1000) finally: scanner.close() st.close()