def save_diagram_screenshot(path, diagram, title): print(" screenshot ", end='', flush=True) path.mkdirs() filename = path.file_path(title, ".png") diagram.save_screenshot_locally(filename, "PNG") with open(filename, 'rb') as f: print_check() return base64.b64encode(f.read()).decode()
def process_channel(path, channel, ports, settings): print("Channel {0}".format(channel.name), flush=True) if not settings.is_save_channels(): print(" sweep ", end='', flush=True) channel.sweep() print_check() return ch_name = channel.name path.cd_channel(ch_name) path.mkdirs() file_ext = ".s{0}p".format(len(ports)) filename = path.file_path(ch_name, file_ext) print(" touchstone ", end='', flush=True) channel.save_measurement_locally(filename, ports) print_check()
def process_prop_delay(diagram, title): data = OrderedDict() if is_prop_delay(title): print(" prop delay ", end='', flush=True) value = delta_50pct(diagram) data["prop delay"] = value print_check() if limit_in_title(title): print(" prop delay limit ", end='', flush=True) is_passed = eval_limits(title, value) if not is_passed: data['limits'] = "failed" elif 'limits' not in data: data['limits'] = "passed" print_check() return data
def process_vna(path, vna, settings): data = OrderedDict() if not settings.is_save_vna(): return data path.cd_vna_screenshot() if not settings['save']['disable screenshots']: path.mkdirs() filename = path.file_path("screenshot", ".png") print("Screenshot ", end='', flush=True) vna.save_screenshot_locally(filename, "PNG") print_check() if not settings['save']['disable global limit'] and vna.is_limits(): print("Global limit ", end='', flush=True) path.cd_vna_limits() path.mkdirs() if vna.passed: data["limits"] = "passed" touch(path.file_path("", "__PASSED__")) else: data["limits"] = "failed" touch(path.file_path("", "__FAILED__")) print_check() return data
def process_trace(path, trace, settings): data = OrderedDict() # Data (csv) files trc_name = trace.name path.cd_trace(trc_name) if not settings['save']['disable trace csv files']: print(" csv ", end='', flush=True) path.mkdirs() filename = path.file_path(trc_name, '.csv') if trace.time_domain.on: data["time domain"] = True trace.save_data_locally(filename) else: trace.save_complex_data_locally(filename) print_check() # Limits if not settings['save']['disable per-test limits']: print(" limits ", end='', flush=True) if trace.limits.on: if trace.limits.passed: data["limits"] = "passed" else: data["limits"] = "failed" print_check() # Markers if not settings['save']['disable markers']: print(" markers ", end='', flush=True) markers_data = data['markers'] = OrderedDict() for i in trace.markers: m = trace.marker(i) name = m.name marker_data = markers_data[name] = OrderedDict() x = OrderedDict() x['value'] = m.x x['units'] = str(trace.x_units()) y = OrderedDict() y['value'] = m.y y['units'] = str(trace.y_units()) marker_data['x'] = x marker_data['y'] = y print_check() return data
def measure(vna, serial_no, settings): data = OrderedDict() data['timestamp'] = timestamp() data['instrument'] = OrderedDict() data['instrument']['id string'] = vna.id_string() data['instrument']['options'] = vna.options_string() path = SavePath(settings['save']['directory'], serial_no, not settings['save']['organize by file']) path.mkdirs() # Sweep, save touchstone channels = vna.channels for i in channels: channel = vna.channel(i) ports = get_ports(vna, channel) process_channel(path, channel, ports, settings) # VNA screenshot, # global pass/fail data.update(process_vna(path, vna, settings)) # Diagram screenshots, # trace csv, # limits # markers, # other (skew, prop delay) if settings.is_save_diagrams() or settings.is_save_traces(): data['diagrams'] = OrderedDict() diagrams = vna.diagrams for d in diagrams: diagram = vna.diagram(d) title = strip_limit_from_title(diagram.title) if title: print("Diagram {0}".format(title), flush=True) else: title = "Diagram {0}".format(diagram.index) print(title, flush=True) diagram_data = data['diagrams'][title] \ = process_diagram(path, diagram, settings) traces_data = diagram_data['traces'] \ = OrderedDict() if settings.is_save_traces(): for t in diagram.traces: print(" Trace {0}".format(t), flush=True) trace = diagram._vna.trace(t) name = trace.name traces_data[name] = process_trace(path, trace, settings) if not settings['save']['disable per-test limits']: diagram_limits_from_data(diagram_data) # Create summary if not settings['save']['disable html summary']: print("HTML ", end='', flush=True) path.cd_summary() path.mkdirs() generate_html(path.file_path('summary', '.html'), serial_no, settings, data) print_check() # Remove screenshot binary from data if not settings['save']['disable screenshots']: remove_screenshots(data) # Write data if not settings['save']['disable results json']: print("JSON ", end='', flush=True) path.cd_json() path.mkdirs() with open(path.file_path('summary', '.json'), 'w') as f: json.dump(data, f) print_check() if settings['save']['enable project csv']: print("CSV ", end='', flush=True) filename = path.root_path / "cumulative.csv" filename = str(filename) generate_csv(filename, serial_no, data) print_check() return data