def __set_dev_grid(self): colourBackground = self.gridDev.GetLabelBackgroundColour() attributes = grid.GridCellAttr() attributes.SetBackgroundColour(colourBackground) self.gridDev.SetColAttr(self.COL_IND, attributes) self.gridDev.ClearGrid() i = 0 for device in self.devices: self.gridDev.SetReadOnly(i, self.COL_SEL, True) self.gridDev.SetReadOnly(i, self.COL_DEV, device.isDevice) self.gridDev.SetReadOnly(i, self.COL_TUN, True) self.gridDev.SetReadOnly(i, self.COL_SER, True) self.gridDev.SetReadOnly(i, self.COL_IND, True) self.gridDev.SetCellRenderer(i, self.COL_SEL, TickCellRenderer()) if device.isDevice: cell = grid.GridCellChoiceEditor(map(str, device.gains), allowOthers=False) self.gridDev.SetCellEditor(i, self.COL_GAIN, cell) self.gridDev.SetCellEditor(i, self.COL_CAL, grid.GridCellFloatEditor(-1, 3)) self.gridDev.SetCellEditor(i, self.COL_LO, grid.GridCellFloatEditor(-1, 3)) if device.isDevice: self.gridDev.SetCellValue(i, self.COL_DEV, device.name) self.gridDev.SetCellValue(i, self.COL_SER, str(device.serial)) self.gridDev.SetCellValue(i, self.COL_IND, str(i)) self.gridDev.SetCellBackgroundColour(i, self.COL_DEV, colourBackground) self.gridDev.SetCellValue(i, self.COL_GAIN, str(nearest(device.gain, device.gains))) else: self.gridDev.SetCellValue(i, self.COL_DEV, '{}:{}'.format(device.server, device.port)) self.gridDev.SetCellValue(i, self.COL_SER, '') self.gridDev.SetCellValue(i, self.COL_IND, '') self.gridDev.SetCellValue(i, self.COL_GAIN, str(device.gain)) self.gridDev.SetCellBackgroundColour(i, self.COL_SER, colourBackground) self.gridDev.SetCellValue(i, self.COL_TUN, TUNER[device.tuner]) self.gridDev.SetCellValue(i, self.COL_CAL, str(device.calibration)) self.gridDev.SetCellValue(i, self.COL_LO, str(device.lo)) self.gridDev.SetCellValue(i, self.COL_OFF, str(device.offset / 1e3)) i += 1 if self.settings.indexRtl >= len(self.devices): self.settings.indexRtl = len(self.devices) - 1 self.__select_row(self.settings.indexRtl) self.index = self.settings.indexRtl self.gridDev.AutoSize()
def __init__(self, pool, args): start = args.start end = args.end sweeps = args.sweeps gain = args.gain dwell = args.dwell nfft = args.fft lo = args.lo index = args.index remote = args.remote directory, filename = os.path.split(args.file) _null, ext = os.path.splitext(args.file) self.lock = threading.Lock() self.stepsTotal = 0 self.steps = 0 self.spectrum = {} self.settings = Settings(load=False) self.queue = Queue.Queue() error = None if end <= start: error = "Start should be lower than end" elif dwell <= 0: error = "Dwell should be positive" elif nfft <= 0: error = "FFT bins should be positive" elif ext != ".rfs" and File.get_type_index(ext) == -1: error = "File extension should be " error += File.get_type_pretty(File.Types.SAVE) error += File.get_type_pretty(File.Types.PLOT) else: device = DeviceRTL() if remote is None: self.settings.devicesRtl = get_devices_rtl() count = len(self.settings.devicesRtl) if index > count - 1: error = "Device not found ({} devices in total):\n".format(count) for device in self.settings.devicesRtl: error += "\t{}: {}\n".format(device.indexRtl, device.name) else: device.isDevice = False url = urlparse('//' + remote) if url.hostname is not None: device.server = url.hostname else: error = "Invalid hostname" if url.port is not None: device.port = url.port else: device.port = 1234 self.settings.devicesRtl.append(device) index = len(self.settings.devicesRtl) - 1 if error is not None: print "Error: {}".format(error) exit(1) if end - 1 < start: end = start + 1 if remote is None: gain = nearest(gain, self.settings.devicesRtl[index].gains) self.settings.start = start self.settings.stop = end self.settings.dwell = calc_real_dwell(dwell) self.settings.nfft = nfft self.settings.devicesRtl[index].gain = gain self.settings.devicesRtl[index].lo = lo print "{} - {}MHz".format(start, end) print "{} Sweeps".format(sweeps) print "{}dB Gain".format(gain) print "{}s Dwell".format(self.settings.dwell) print "{} FFT points".format(nfft) print "{}MHz LO".format(lo) if remote is not None: print remote else: print self.settings.devicesRtl[index].name self.__scan(sweeps, self.settings, index, pool) fullName = os.path.join(directory, filename) if ext == ".rfs": scanInfo = ScanInfo() scanInfo.set_from_settings(self.settings) save_plot(fullName, scanInfo, self.spectrum, {}) else: exportType = File.get_type_index(ext) export_plot(fullName, exportType, self.spectrum) print "Done"
def __init__(self, pool, args): start = args.start end = args.end sweeps = args.sweeps gain = args.gain dwell = args.dwell nfft = args.fft lo = args.lo index = args.index remote = args.remote directory, filename = os.path.split(args.file) _null, ext = os.path.splitext(args.file) self.lock = threading.Lock() self.stepsTotal = 0 self.steps = 0 self.spectrum = OrderedDict() self.locations = OrderedDict() self.settings = Settings(load=False) self.queueNotify = Queue.Queue() self.queueScan = Queue.Queue() self.queueLocation = Queue.Queue() self.threadLocation = None error = None if end <= start: error = "Start should be lower than end" elif dwell <= 0: error = "Dwell should be positive" elif nfft <= 0: error = "FFT bins should be positive" elif ext != ".rfs" and File.get_type_index(ext) == -1: error = "File extension should be " error += File.get_type_pretty(File.Types.SAVE) error += File.get_type_pretty(File.Types.PLOT) else: device = DeviceRTL() if remote is None: self.settings.devicesRtl = get_devices_rtl() count = len(self.settings.devicesRtl) if index > count - 1: error = "Device not found ({} devices in total):\n".format( count) for device in self.settings.devicesRtl: error += "\t{}: {}\n".format(device.indexRtl, device.name) else: device.isDevice = False url = urlparse('//' + remote) if url.hostname is not None: device.server = url.hostname else: error = "Invalid hostname" if url.port is not None: device.port = url.port else: device.port = 1234 self.settings.devicesRtl.append(device) index = len(self.settings.devicesRtl) - 1 if args.conf is not None: if os.path.exists(args.conf): error = self.settings.load_conf(args.conf) else: error = 'Cannot find {}'.format(args.conf) if end - 1 < start: end = start + 1 if remote is None: if len(self.settings.devicesRtl): gain = nearest(gain, self.settings.devicesRtl[index].gains) else: error = 'No devices found' if error is not None: print "Error: {}".format(error) exit(1) self.settings.start = start self.settings.stop = end self.settings.dwell = calc_real_dwell(dwell) self.settings.scanDelay = args.delay self.settings.nfft = nfft self.settings.devicesRtl[index].gain = gain self.settings.devicesRtl[index].lo = lo print "{} - {}MHz".format(start, end) print "{} Sweeps".format(sweeps) print "{}dB Gain".format(gain) print "{}s Dwell".format(self.settings.dwell) print "{} FFT points".format(nfft) print "{}MHz LO".format(lo) if remote is not None: print remote else: print self.settings.devicesRtl[index].name if len(self.settings.devicesGps): self.threadLocation = ThreadLocation(self.queueLocation, self.settings.devicesGps[0]) if not self.__gps_wait(): self.__gps_stop() exit(1) self.__scan(sweeps, self.settings, index, pool) fullName = os.path.join(directory, filename) if ext == ".rfs": scanInfo = ScanInfo() scanInfo.set_from_settings(self.settings) save_plot(fullName, scanInfo, self.spectrum, self.locations) else: exportType = File.get_type_index(ext) export_plot(fullName, exportType, self.spectrum) self.__gps_stop() print "Done"
def __init__(self, parent, devices, settings): self.settings = settings self.index = 0 wx.Dialog.__init__(self, parent=parent, title="Preferences") self.checkSaved = wx.CheckBox(self, wx.ID_ANY, "Save warning") self.checkSaved.SetValue(self.settings.saveWarn) self.checkSaved.SetToolTip(wx.ToolTip("Prompt to save scan on exit")) self.checkAnnotate = wx.CheckBox(self, wx.ID_ANY, "Label peak level") self.checkAnnotate.SetValue(self.settings.annotate) self.checkAnnotate.SetToolTip(wx.ToolTip("Annotate scan peak value")) self.checkRetain = wx.CheckBox(self, wx.ID_ANY, "Display previous scans") self.checkRetain.SetToolTip(wx.ToolTip("Can be slow")) self.checkRetain.SetValue(self.settings.retainScans) self.Bind(wx.EVT_CHECKBOX, self.on_check, self.checkRetain) self.checkFade = wx.CheckBox(self, wx.ID_ANY, "Fade previous scans") self.checkFade.SetValue(self.settings.fadeScans) textMaxScans = wx.StaticText(self, label="Max scans") self.spinCtrlMaxScans = wx.SpinCtrl(self) self.spinCtrlMaxScans.SetRange(2, 500) self.spinCtrlMaxScans.SetValue(self.settings.maxScans) self.spinCtrlMaxScans.SetToolTip(wx.ToolTip("Maximum previous scans to display")) self.on_check(None) textWarn = wx.StaticText(self, label="(Only the most recent scan is saved)") self.devices = devices self.gridDev = grid.Grid(self) self.gridDev.CreateGrid(len(self.devices), 8) self.gridDev.SetRowLabelSize(0) self.gridDev.SetColLabelValue(self.COL_SEL, "Select") self.gridDev.SetColLabelValue(self.COL_DEV, "Device") self.gridDev.SetColLabelValue(self.COL_SER, "Serial Number") self.gridDev.SetColLabelValue(self.COL_IND, "Index") self.gridDev.SetColLabelValue(self.COL_GAIN, "Gain\n(dB)") self.gridDev.SetColLabelValue(self.COL_CAL, "Calibration\n(ppm)") self.gridDev.SetColLabelValue(self.COL_LO, "LO\n(MHz)") self.gridDev.SetColLabelValue(self.COL_OFF, "Band Offset\n(kHz)") self.gridDev.SetColFormatFloat(self.COL_GAIN, -1, 1) self.gridDev.SetColFormatFloat(self.COL_CAL, -1, 3) self.gridDev.SetColFormatFloat(self.COL_LO, -1, 3) self.gridDev.SetColFormatFloat(self.COL_OFF, -1, 0) colourBackground = self.gridDev.GetLabelBackgroundColour() attributes = grid.GridCellAttr() attributes.SetBackgroundColour(colourBackground) self.gridDev.SetColAttr(self.COL_IND, attributes) i = 0 for device in self.devices: self.gridDev.SetReadOnly(i, self.COL_SEL, True) self.gridDev.SetReadOnly(i, self.COL_DEV, device.isDevice) self.gridDev.SetReadOnly(i, self.COL_SER, True) self.gridDev.SetReadOnly(i, self.COL_IND, True) self.gridDev.SetCellRenderer(i, self.COL_SEL, CellRenderer()) if device.isDevice: self.gridDev.SetCellEditor( i, self.COL_GAIN, grid.GridCellChoiceEditor(map(str, device.gains), allowOthers=False) ) self.gridDev.SetCellEditor(i, self.COL_CAL, grid.GridCellFloatEditor(-1, 3)) self.gridDev.SetCellEditor(i, self.COL_LO, grid.GridCellFloatEditor(-1, 3)) if device.isDevice: self.gridDev.SetCellValue(i, self.COL_DEV, device.name) self.gridDev.SetCellValue(i, self.COL_SER, str(device.serial)) self.gridDev.SetCellValue(i, self.COL_IND, str(i)) self.gridDev.SetCellBackgroundColour(i, self.COL_DEV, colourBackground) else: self.gridDev.SetCellValue(i, self.COL_DEV, "{0}:{1}".format(device.server, device.port)) self.gridDev.SetCellValue(i, self.COL_SER, "") self.gridDev.SetCellValue(i, self.COL_IND, "") self.gridDev.SetCellBackgroundColour(i, self.COL_SER, colourBackground) if device.isDevice: self.gridDev.SetCellValue(i, self.COL_GAIN, str(nearest(device.gain, device.gains))) else: self.gridDev.SetCellValue(i, self.COL_GAIN, str(device.gain)) self.gridDev.SetCellValue(i, self.COL_CAL, str(device.calibration)) self.gridDev.SetCellValue(i, self.COL_LO, str(device.lo)) self.gridDev.SetCellValue(i, self.COL_OFF, str(device.offset / 1e3)) i += 1 if settings.index >= len(self.devices): settings.index = len(self.devices) - 1 self.select_row(settings.index) self.index = settings.index self.gridDev.AutoSize() self.Bind(grid.EVT_GRID_CELL_LEFT_CLICK, self.on_click) sizerButtons = wx.StdDialogButtonSizer() buttonOk = wx.Button(self, wx.ID_OK) buttonCancel = wx.Button(self, wx.ID_CANCEL) sizerButtons.AddButton(buttonOk) sizerButtons.AddButton(buttonCancel) sizerButtons.Realize() self.Bind(wx.EVT_BUTTON, self.on_ok, buttonOk) optbox = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "General"), wx.VERTICAL) optbox.Add(self.checkSaved, 0, wx.ALL | wx.EXPAND, 10) optbox.Add(self.checkAnnotate, 0, wx.ALL | wx.EXPAND, 10) congrid = wx.GridBagSizer(10, 10) congrid.Add(self.checkRetain, pos=(0, 0), flag=wx.ALL) congrid.Add(textWarn, pos=(0, 1), flag=wx.ALL) congrid.Add(self.checkFade, pos=(1, 0), flag=wx.ALL) congrid.Add(textMaxScans, pos=(2, 0), flag=wx.ALL) congrid.Add(self.spinCtrlMaxScans, pos=(2, 1), flag=wx.ALL) conbox = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Continuous scans"), wx.VERTICAL) conbox.Add(congrid, 0, wx.ALL | wx.EXPAND, 10) devbox = wx.StaticBoxSizer(wx.StaticBox(self, wx.ID_ANY, "Devices"), wx.VERTICAL) devbox.Add(self.gridDev, 0, wx.ALL | wx.EXPAND, 10) vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add(optbox, 0, wx.ALL | wx.EXPAND, 10) vbox.Add(conbox, 0, wx.ALL | wx.EXPAND, 10) vbox.Add(devbox, 0, wx.ALL | wx.EXPAND, 10) vbox.Add(sizerButtons, 0, wx.ALL | wx.EXPAND, 10) self.SetSizerAndFit(vbox)
def __init__(self, pool, args): start = args.start end = args.end gain = args.gain dwell = args.dwell nfft = args.fft lo = args.lo index = args.index remote = args.remote directory, filename = os.path.split(args.file) _null, ext = os.path.splitext(args.file) self.stepsTotal = 0 self.steps = 0 self.spectrum = {} self.settings = Settings(load=False) error = None if end <= start: error = "Start should be lower than end" elif dwell <= 0: error = "Dwell should be positive" elif nfft <= 0: error = "FFT bins should be positive" elif ext != ".rfs" and ext != ".csv": error = "File extension should be .rfs or .csv" else: device = Device() if remote is None: self.settings.devices = get_devices() count = len(self.settings.devices) if index > count - 1: error = "Device not found ({0} devices in total):\n".format(count) for device in self.settings.devices: error += "\t{0}: {1}\n".format(device.index, device.name) else: device.isDevice = False url = urlparse('//' + remote) if url.hostname is not None: device.server = url.hostname else: error = "Invalid hostname" if url.port is not None: device.port = url.port else: device.port = 1234 self.settings.devices.append(device) index = len(self.settings.devices) - 1 if error is not None: print "Error: {0}".format(error) exit(1) if end - 1 < start: end = start + 1 if remote is None: gain = nearest(gain, self.settings.devices[index].gains) self.settings.start = start self.settings.stop = end self.settings.dwell = calc_real_dwell(dwell) self.settings.nfft = nfft self.settings.devices[index].gain = gain self.settings.devices[index].lo = lo print "{0} - {1}MHz".format(start, end) print "{0}dB Gain".format(gain) print "{0}s Dwell".format(self.settings.dwell) print "{0} FFT points".format(nfft) print "{0}MHz LO".format(lo) if remote is not None: print remote else: print self.settings.devices[index].name self.scan(self.settings, index, pool) if ext == ".rfs": scanInfo = ScanInfo() scanInfo.setFromSettings(self.settings) save_plot(directory, filename, scanInfo, self.spectrum) else: export_plot(directory, filename, self.spectrum) print "Done"