def buildGUI(self): self.setWindowTitle('Fragmentation Staff') app_icon = QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self)
def buildGUI(self): self.setWindowTitle('Trajectory Interpolator') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'preferences.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) _, self.high_point = createLabelEditObj('Maximum Height', layout, 0, width=1, h_shift=0, tool_tip='', validate='float', default_txt='50000') _, self.low_point = createLabelEditObj('Minimum Height', layout, 1, width=1, h_shift=0, tool_tip='', validate='float', default_txt='17000') _, self.divisions = createLabelEditObj('Divisions', layout, 2, width=1, h_shift=0, tool_tip='', validate='int', default_txt='250') save_button = QPushButton('Save to CSV') layout.addWidget(save_button, 3, 1) save_button.clicked.connect(self.trajInterp) save_to_file_button = QPushButton('Save to Event') layout.addWidget(save_to_file_button, 3, 2) save_to_file_button.clicked.connect(self.saveEvent)
def buildGUI(self): self.setWindowTitle('Station Download Sources') app_icon = QtGui.QIcon() app_icon.addFile(os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.s = [None]*20 self.s[1]= createToggle('IRIS Data Management Center', layout, 1, width=1, h_shift=0, tool_tip='') self.s[2]= createToggle('Northern California Earthquake Data Center', layout, 2, width=1, h_shift=0, tool_tip='') self.s[3]= createToggle('Southern California Earthquake Data Center', layout, 3, width=1, h_shift=0, tool_tip='') self.s[4]= createToggle('TexNet – Texas Earthquake Data Center', layout, 4, width=1, h_shift=0, tool_tip='') self.s[5]= createToggle('BGR Hannover, Germany', layout, 5, width=1, h_shift=0, tool_tip='') self.s[6]= createToggle('Boğaziçi University, Kandilli Observatory', layout, 6, width=1, h_shift=0, tool_tip='') self.s[7]= createToggle('ETHZ', layout, 7, width=1, h_shift=0, tool_tip='') self.s[8]= createToggle('GEOFON Program, GFZ', layout, 8, width=1, h_shift=0, tool_tip='') self.s[9]= createToggle('ICGC', layout, 9, width=1, h_shift=0, tool_tip='') self.s[10] = createToggle('IPGP Data Center', layout, 10, width=1, h_shift=0, tool_tip='') self.s[11] = createToggle('INGV', layout, 11, width=1, h_shift=0, tool_tip='') self.s[12] = createToggle('LMU Munich, Germany', layout, 12, width=1, h_shift=0, tool_tip='') self.s[13] = createToggle('NIEP, Romania', layout, 13, width=1, h_shift=0, tool_tip='') self.s[14] = createToggle('NOA, Greece', layout, 14, width=1, h_shift=0, tool_tip='') self.s[15] = createToggle('ORFEUS Data Center', layout, 15, width=1, h_shift=0, tool_tip='') self.s[16] = createToggle('RESIF', layout, 16, width=1, h_shift=0, tool_tip='') self.s[17] = createToggle('USP Seismological Center, Brazil', layout, 17, width=1, h_shift=0, tool_tip='') self.s[18] = createToggle('Raspberry Shake, S.A', layout, 18, width=1, h_shift=0, tool_tip='') self.s[19] = createToggle('AusPass, Australia', layout, 19, width=1, h_shift=0, tool_tip='') try: with open(os.path.join('supra', 'Misc', 'BAMStationprefs.bam'), 'rb') as f: sources = pickle.load(f) for i in range(len(sources)): if sources[i] == 1: self.s[i+1].setChecked(True) except: self.selectAll() createButton('Select All', layout, 20, 1, self.selectAll) createButton('Select None', layout, 20, 2, self.selectNone) createButton('Save', layout, 20, 3, self.saveStats)
def initMainGUICosmetic(obj): obj.setWindowTitle('Bolide Acoustic Modelling') app_icon = QtGui.QIcon() app_icon.addFile(os.path.join('supra', 'GUI', 'Images', 'BAM.png'), QtCore.QSize(16, 16)) obj.setWindowIcon(app_icon) p = obj.palette() p.setColor(obj.backgroundRole(), Qt.black) obj.setPalette(p) obj.colors = [(0, 255, 26), (3, 252, 219), (252, 3, 3), (223, 252, 3), (255, 133, 3), (149, 0, 255), (76, 128, 4), (82, 27, 27), (101, 128, 125), (255, 230, 249)] theme(obj)
def buildGUI(self): self.setWindowTitle('Polarization from Rotation') app_icon = QtGui.QIcon() app_icon.addFile(os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.zne_canvas = [None]*3 self.zne_plot_view = pg.GraphicsLayoutWidget() self.zne_canvas[0] = self.zne_plot_view.addPlot() self.zne_plot_view.nextRow() self.zne_canvas[1] = self.zne_plot_view.addPlot() self.zne_plot_view.nextRow() self.zne_canvas[2]= self.zne_plot_view.addPlot() self.zne_plot_view.setBackground((0,0,0)) self.zne_canvas[0].getAxis('bottom').setPen((255, 255, 255)) self.zne_canvas[0].getAxis('left').setPen((255, 255, 255)) self.zne_canvas[1].getAxis('bottom').setPen((255, 255, 255)) self.zne_canvas[1].getAxis('left').setPen((255, 255, 255)) self.zne_canvas[2].getAxis('bottom').setPen((255, 255, 255)) self.zne_canvas[2].getAxis('left').setPen((255, 255, 255)) self.zne_canvas[1].setXLink(self.zne_canvas[0]) self.zne_canvas[2].setXLink(self.zne_canvas[0]) self.zne_canvas[1].setYLink(self.zne_canvas[0]) self.zne_canvas[2].setYLink(self.zne_canvas[0]) self.backaz_view = pg.GraphicsLayoutWidget() self.backaz_canvas = self.backaz_view.addPlot() layout.addWidget(self.backaz_view, 2, 4, 1, 1) layout.addWidget(self.zne_plot_view, 1, 1, 3, 3) self.runsim = createButton("Run", layout, 1, 4, self.procGUI)
def buildGUI(self): self.setWindowTitle('Add Source') app_icon = QtGui.QIcon() app_icon.addFile(os.path.join('supra', 'GUI', 'Images', 'Trajectory.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) self.layout = QGridLayout() self.setLayout(self.layout) _, self.source_type = createComboBoxObj("Source Type", self.layout, 3, items=["Fragmentation", "Ballistic"], width=1, h_shift=0, tool_tip='') self.source_type.currentIndexChanged.connect(self.sourceChanged) self.clearLayout() self.sourceChanged()
def buildGUI(self): self.setWindowTitle('Generate Report') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'preferences.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.general_info = QCheckBox('General Information') layout.addWidget(self.general_info, 0, 1) self.def_info = QCheckBox('Definitions/Methods') layout.addWidget(self.def_info, 1, 1) self.traj_info = QCheckBox('Trajectory') layout.addWidget(self.traj_info, 2, 1) self.frag_info = QCheckBox('Fragmentation(s)') layout.addWidget(self.frag_info, 3, 1) self.stat_info = QCheckBox('Stations') layout.addWidget(self.stat_info, 4, 1) self.atmos_info = QCheckBox('Atmosphere') layout.addWidget(self.atmos_info, 5, 1) self.supra_info = QCheckBox('Supracenter Solution') layout.addWidget(self.supra_info, 6, 1) save_button = QPushButton('Generate Report') layout.addWidget(save_button, 8, 2) save_button.clicked.connect(self.genRep)
def buildGUI(self): self.setWindowTitle('Add Station From File') p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) _, self.edit, self.btn = createFileSearchObj('Source File', layout, 1, width=1, h_shift=0, tool_tip='') self.btn.clicked.connect( partial(fileSearch, ['Mini SEED (*.mseed)', 'SAC File (*.sac)'], self.edit)) self.edit.textChanged.connect(self.loadStn) _, self.mresp_browser_edits, self.mresp_browser_buton = createFileSearchObj( 'Response File: ', layout, 2, width=1, h_shift=0) self.mresp_browser_buton.clicked.connect( partial(fileSearch, ['Response File (*.XML)'], self.mresp_browser_edits)) _, self.network = createLabelEditObj('Network', layout, 3) _, self.code = createLabelEditObj('Code', layout, 4) _, self.lat = createLabelEditObj('Latitude', layout, 5) _, self.lon = createLabelEditObj('Longitude', layout, 6) _, self.elev = createLabelEditObj('Elevation', layout, 7) _, self.name = createLabelEditObj('Name', layout, 8) self.save_btn = createButton('Save Station', layout, 9, 2, self.saveStn)
def __init__(self, setup, stn_list, position, pert_idx): QWidget.__init__(self) self.setWindowTitle('Height Solver') self.setup = setup self.stn_list = stn_list p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) menu_bar = QMenuBar(self) #layout.addWidget(menu_bar, 0, 1) file_menu = menu_bar.addMenu('&File') select_menu = menu_bar.addMenu('&Select') self.selected = False file_export = QAction("Export Selected Menu", self) file_export.setShortcut('Ctrl+E') file_export.setStatusTip( 'Brings up the Export Menu with the selected stations') file_export.triggered.connect(self.export) file_menu.addAction(file_export) select_all = QAction("Select All", self) select_all.setShortcut('Ctrl+A') select_all.setStatusTip('Selects all') select_all.triggered.connect(self.select) select_menu.addAction(select_all) theme(self) self.position = position point = position widget = QWidget() self.layout = QVBoxLayout(widget) self.layout.setAlignment(Qt.AlignTop) for point in position: print('Best Position: {:}'.format(point)) ref_pos = Position(self.setup.lat_centre, self.setup.lon_centre, 0) count = 0 max_steps = len(stn_list) * len(position) * self.setup.perturb_times dataset = parseWeather(self.setup) self.save_button = [] self.stn_view = [] self.stn_canvas = [] self.invert = [] self.waveform_data = [None] * len(stn_list) A = self.setup.trajectory.pos_i B = self.setup.trajectory.pos_f A.pos_loc(B) B.pos_loc(B) # Get prediction of time of the meteor, so the timing of each fragmentation can be known length_of_meteor = np.sqrt((A.x - B.x)**2 + (A.y - B.y)**2 + (A.z - B.z)**2) time_of_meteor = length_of_meteor / self.setup.trajectory.v for index in range(len(stn_list)): stn = stn_list[index] station_layout = QGridLayout() self.layout.addLayout(station_layout) label_layout = QVBoxLayout() control_layout = QGridLayout() waveform_layout = QVBoxLayout() station_layout.addLayout(label_layout, 0, 100, 1, 100) station_layout.addLayout(control_layout, 0, 0, 1, 100) station_layout.addLayout(waveform_layout, 0, 200, 1, 100) label_layout.addWidget( QLabel('Station: {:} - {:}'.format(stn_list[index].network, stn_list[index].code))) label_layout.addWidget( QLabel('Channel: {:}'.format(stn_list[index].channel))) label_layout.addWidget( QLabel('Name: {:}'.format(stn_list[index].name))) label_layout.addWidget( QLabel('Lat: {:}'.format(stn_list[index].position.lat))) label_layout.addWidget( QLabel('Lon: {:}'.format(stn_list[index].position.lon))) label_layout.addWidget( QLabel('Elev: {:}'.format(stn_list[index].position.elev))) self.save_button.append(QPushButton('Select')) self.save_button[index].clicked.connect( partial(self.saveButton, index)) control_layout.addWidget(self.save_button[index], 0, 0) control_layout.addWidget(QPushButton('-'), 0, 1) control_layout.addWidget(QPushButton('-'), 1, 0) control_layout.addWidget(QPushButton('-'), 1, 1) self.stn_view.append(pg.GraphicsLayoutWidget()) self.stn_canvas.append(self.stn_view[index].addPlot()) waveform_layout.addWidget(self.stn_view[index]) self.invert.append(False) min_point, max_point = self.discountDrawWaveform( setup, index, self.stn_canvas[index]) # for ptb_n in range(self.setup.perturb_times): for p, point in enumerate(position): for ptb_n in range(self.setup.perturb_times): dataset = self.perturbGenerate(ptb_n, dataset, self.perturbSetup()) zProfile, _ = getWeather(np.array([point.lat, point.lon, point.elev]), np.array([stn.position.lat, stn.position.lon, stn.position.elev]), self.setup.weather_type, \ ref_pos, dataset, convert=True) point.pos_loc(ref_pos) stn.position.pos_loc(ref_pos) f_time, _, _, _ = cyscan(np.array([point.x, point.y, point.z]), np.array([stn.position.x, stn.position.y, stn.position.z]), zProfile, wind=True, \ n_theta=self.setup.n_theta, n_phi=self.setup.n_phi, h_tol=self.setup.h_tol, v_tol=self.setup.v_tol) correction = time_of_meteor - A.z / self.setup.trajectory.pos_i.elev * ( time_of_meteor) nom_time = f_time + correction with warnings.catch_warnings(): warnings.simplefilter("ignore") try: self.stn_canvas[index].plot( x=[f_time, f_time], y=[min_point, max_point], pen=PEN[p % 7], brush=PEN[p % 7]) except: pass count += 1 loadingBar("Generating Plots", count, max_steps) try: self.stn_canvas[index].setXRange(nom_time - 25, nom_time + 25, padding=1) except: avg_time = stn.position.pos_distance(point) / 330 self.stn_canvas[index].setXRange(avg_time - 25, avg_time + 25, padding=1) self.setWidget(widget) self.setWidgetResizable(True)
def __init__(self, invert, setup, stn_list, position): self.link = False self.grid = False QWidget.__init__(self) self.selected_stn_view = pg.GraphicsLayoutWidget() self.stn_canvas = [] self.stn_list = stn_list self.setup = setup self.waveform_data = [None]*len(stn_list) ref_pos = Position(self.setup.lat_centre, self.setup.lon_centre, 0) count = 0 max_steps = len(position)*len(stn_list)*setup.perturb_times dataset = parseWeather(self.setup) theme(self) for ii, index in enumerate(invert): if index: stn = stn_list[ii] self.stn_canvas.append(self.selected_stn_view.addPlot()) self.selected_stn_view.nextRow() min_point, max_point = self.discountDrawWaveform(setup, ii, self.stn_canvas[-1]) self.stn_canvas[-1].getAxis('bottom').setPen((0, 0, 0)) self.stn_canvas[-1].getAxis('left').setPen((0, 0, 0)) self.waveform_data[ii].setPen((0, 0, 0)) #self.stn_canvas[-1].addItem(pg.LabelItem(text="{:}-{:}".format(stn.network, stn.code), color=(0, 0, 0))) self.stn_canvas[-1].setTitle("{:}-{:}".format(stn.network, stn.code), color=(0, 0, 0)) for p, point in enumerate(position): for ptb_n in range(self.setup.perturb_times): dataset = self.perturbGenerate(ptb_n, dataset, self.perturbSetup()) zProfile, _ = getWeather(np.array([point.lat, point.lon, point.elev]), np.array([stn.position.lat, stn.position.lon, stn.position.elev]), self.setup.weather_type, \ [ref_pos.lat, ref_pos.lon, ref_pos.elev], dataset, convert=False) point.pos_loc(ref_pos) stn.position.pos_loc(ref_pos) f_time, _, _, _ = cyscan(np.array([point.x, point.y, point.z]), np.array([stn.position.x, stn.position.y, stn.position.z]), zProfile, wind=True, \ n_theta=self.setup.n_theta, n_phi=self.setup.n_phi, h_tol=self.setup.h_tol, v_tol=self.setup.v_tol) A = self.setup.trajectory.pos_i B = self.setup.trajectory.pos_f A.pos_loc(B) B.pos_loc(B) # Get prediction of time of the meteor, so the timing of each fragmentation can be known length_of_meteor = np.sqrt((A.x - B.x)**2 + (A.y - B.y)**2 + (A.z - B.z)**2) time_of_meteor = length_of_meteor/self.setup.trajectory.v correction = time_of_meteor - A.z/self.setup.trajectory.pos_i.elev*(time_of_meteor) nom_time = f_time + correction with warnings.catch_warnings(): warnings.simplefilter("ignore") try: self.stn_canvas[-1].plot(x=[f_time, f_time], y=[min_point, max_point], pen=PEN[p%7], brush=PEN[p%7]) except: pass count += 1 loadingBar("Generating Plots", count, max_steps) try: self.stn_canvas[-1].setXRange(nom_time-25, nom_time+25, padding=1) except: pass self.selected_stn_view.setBackground((255, 255, 255)) layout = QVBoxLayout() layout.addWidget(self.selected_stn_view) self.setLayout(layout) toggle_group = QGroupBox("Toggles") layout.addWidget(toggle_group) toggle_group_layout = QVBoxLayout() toggle_group.setLayout(toggle_group_layout) sync_button = QCheckBox('Sync') toggle_group_layout.addWidget(sync_button) sync_button.stateChanged.connect(self.sync) grid_button = QCheckBox('Grid') toggle_group_layout.addWidget(grid_button) grid_button.stateChanged.connect(self.grid_toggle) export_button = QPushButton("Export") export_button.clicked.connect(self.export) layout.addWidget(export_button)
def buildGUI(self): self.setWindowTitle('Polmap') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.polmap_view = pg.GraphicsLayoutWidget() self.polmap_canvas = self.polmap_view.addPlot() self.polmap_canvas.scene().sigMouseClicked.connect(self.mouseClicked) self.polmap_height = QSlider(Qt.Horizontal) self.polmap_grid = QSlider(Qt.Horizontal) self.polmap_height.setMinimum(0) self.polmap_height.setMaximum(500) self.polmap_height.setValue(340) self.polmap_height.setSingleStep(1) self.polmap_height.sliderMoved.connect(self.heightChange) self.polmap_height.valueChanged.connect(self.heightChange) self.polmap_grid.setMinimum(1) self.polmap_grid.setMaximum(100) self.polmap_grid.setValue(10) self.polmap_grid.setSingleStep(1) self.polmap_grid.sliderMoved.connect(self.gridChange) self.polmap_grid.valueChanged.connect(self.gridChange) self.polmap_height_l = QLabel("34000") self.polmap_grid_l = QLabel("0.01") height_tol_label = QLabel("Height Tolerance [m]") time_tol_label = QLabel("Time Tolerance [s]") self.height_tol = QLineEdit("1000") self.time_tol = QLineEdit("4") layout.addWidget(self.polmap_view, 0, 0, 1, 3) layout.addWidget(self.polmap_height, 2, 0) layout.addWidget(self.polmap_grid, 3, 0) layout.addWidget(self.polmap_height_l, 2, 1) layout.addWidget(self.polmap_grid_l, 3, 1) layout.addWidget(height_tol_label, 4, 1) layout.addWidget(self.height_tol, 4, 0) layout.addWidget(time_tol_label, 5, 1) layout.addWidget(self.time_tol, 5, 0) self.tog_picks = ToggleButton(False, 1) self.tog_picks.setToolTip("Click the map to make a pick") self.tog_picks.clicked.connect(self.tog_picks.clickedEvt) layout.addWidget(self.tog_picks, 2, 2) self.station_marker = [None] * len(self.bam.stn_list) for ii, stn in enumerate(self.bam.stn_list): self.station_marker[ii] = pg.ScatterPlotItem() if len(stn.polarization.azimuth) > 0: color = stn.color else: color = (255, 255, 255) self.station_marker[ii].setPoints(x=[stn.metadata.position.lon], y=[stn.metadata.position.lat], pen=color, brush=color, symbol='t') self.polmap_canvas.addItem(self.station_marker[ii], update=True) txt = pg.TextItem("{:}".format(stn.metadata.code)) txt.setPos(stn.metadata.position.lon, stn.metadata.position.lat) self.polmap_canvas.addItem(txt) ref_pos = Position(self.bam.setup.lat_centre, self.bam.setup.lon_centre, 0) radius = self.bam.setup.deg_radius min_lat = ref_pos.lat - radius max_lat = ref_pos.lat + radius min_lon = ref_pos.lon - radius max_lon = ref_pos.lon + radius self.time_txt = QLabel() layout.addWidget(self.time_txt, 1, 0)
def buildGUI(self): self.setWindowTitle('Geminus (Silber 2014)') app_icon = QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) layout = QHBoxLayout() self.setLayout(layout) graph_layout = QVBoxLayout() layout.addLayout(graph_layout) right_panels = QVBoxLayout() layout.addLayout(right_panels) input_panels = QGridLayout() right_panels.addLayout(input_panels) output_panels = QGridLayout() right_panels.addLayout(output_panels) stn_name_list = [] for stn in self.bam.stn_list: stn_name_list.append("{:}-{:}".format(stn.metadata.network, stn.metadata.code)) control_panel = QGridLayout() input_panels.addLayout(control_panel, 6, 1, 3, 3) _, self.source_height = createLabelEditObj( 'Source Height Along Trajectory [m]', input_panels, 1, width=1, h_shift=0, tool_tip='') _, self.station_combo = createComboBoxObj('Station', input_panels, 2, items=stn_name_list, width=1, h_shift=0, tool_tip='') _, self.blast_radius = createLabelEditObj('Blast Radius [m]', input_panels, 3, width=1, h_shift=0, tool_tip='') _, self.dom_period = createLabelEditObj('Dominant Period [s]', input_panels, 4, width=1, h_shift=0, tool_tip='') _, self.over_pres = createLabelEditObj('Overpressure [Pa]', input_panels, 5, width=1, h_shift=0, tool_tip='') self.vary_period = createToggle('Vary Period', control_panel, 1, width=1, h_shift=1, tool_tip='') self.add_winds = createToggle('Include Winds', control_panel, 2, width=1, h_shift=1, tool_tip='') self.doppler = createToggle('Doppler Shift', control_panel, 3, width=1, h_shift=1, tool_tip='') self.overpressure_run = createButton("Run Blast Radius Simulation", control_panel, 4, 1, self.overpressure, args=["normal"]) self.overpressure_period_finder = createButton("Run Period Search", control_panel, 4, 2, self.overpressure, args=["period"]) self.overpressure_pres_finder = createButton("Run Overpressure Search", control_panel, 4, 3, self.overpressure, args=["pres"]) self.pro_sim = createButton("Period vs. Blast Radius", control_panel, 5, 1, self.overpressure, args=["pro"]) self.proE_sim = createButton("Period vs. Energy", control_panel, 5, 2, self.overpressure, args=["proE"]) self.infra_curve = createButton("Infrasound Curve", control_panel, 5, 3, self.infraCurve) self.clear_infra = createButton("Clear Curve", control_panel, 6, 1, self.clearInfra) self.save_energy = createButton("Save Energy", control_panel, 6, 2, self.saveInfra) self.vary_period.setChecked(True) self.add_winds.setChecked(True) self.doppler.setChecked(True) self.overpressure_plot = MatplotlibPyQT() self.overpressure_plot.ax = self.overpressure_plot.figure.add_subplot( 111) graph_layout.addWidget(self.overpressure_plot) theme(self)
def buildGUI(self): self.setWindowTitle('Bandpass Optimizer') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.bandpass_view = pg.GraphicsLayoutWidget() self.bandpass_canvas = self.bandpass_view.addPlot() self.bp_button = createButton('Bandpass', layout, 4, 2, self.bandpass) self.save_button = createButton('Save', layout, 4, 3, self.bandpassSave) layout.addWidget(self.bandpass_view, 1, 1, 1, 2) _, self.low_bandpass_edits = createLabelEditObj('Low Bandpass', layout, 2, width=1, h_shift=0, tool_tip='', validate='float', default_txt='2') _, self.high_bandpass_edits = createLabelEditObj('High Bandpass', layout, 3, width=1, h_shift=0, tool_tip='', validate='float', default_txt='8') self.stream = self.stn.stream.select( channel="{:}".format(self.channel)) st = self.stn.stream.select(channel="{:}".format(self.channel))[0] self.orig_trace = st.copy() stn = self.stn delta = self.orig_trace.stats.delta start_datetime = self.orig_trace.stats.starttime.datetime end_datetime = self.orig_trace.stats.endtime.datetime stn.offset = (start_datetime - self.bam.setup.fireball_datetime).total_seconds() self.current_waveform_delta = delta self.current_waveform_time = np.arange(0, self.orig_trace.stats.npts / self.orig_trace.stats.sampling_rate, \ delta) time_data = np.copy(self.current_waveform_time) self.orig_trace.detrend() resp = stn.response if resp is not None: self.orig_trace = self.orig_trace.remove_response(inventory=resp, output="DISP") # st.remove_sensitivity(resp) waveform_data = self.orig_trace.data self.orig_data = np.copy(waveform_data) waveform_data = waveform_data[:len(time_data)] time_data = time_data[:len(waveform_data)] + stn.offset self.current_waveform_processed = waveform_data # Init the butterworth bandpass filter butter_b, butter_a = butterworthBandpassFilter(2, 8, \ 1.0/self.current_waveform_delta, order=6) # Filter the data waveform_data = scipy.signal.filtfilt(butter_b, butter_a, np.copy(waveform_data)) self.current_station_waveform = pg.PlotDataItem(x=time_data, y=waveform_data, pen='w') self.bandpass_canvas.addItem(self.current_station_waveform) self.bandpass_canvas.setXRange(self.t_arrival - 100, self.t_arrival + 100, padding=1) self.bandpass_canvas.setLabel( 'bottom', "Time after {:} s".format(self.bam.setup.fireball_datetime)) self.bandpass_canvas.setLabel('left', "Signal Response") self.bandpass_canvas.plot(x=[-10000, 10000], y=[0, 0], pen=pg.mkPen(color=(100, 100, 100))) self.noise_selector = pg.LinearRegionItem(values=[0, 10], brush=(255, 0, 0, 100)) self.signal_selector = pg.LinearRegionItem(values=[200, 210], brush=(0, 255, 0, 100)) self.bandpass_canvas.addItem(self.noise_selector) self.bandpass_canvas.addItem(self.signal_selector) self.bandpass_graph = MatplotlibPyQT() self.bandpass_graph.ax1 = self.bandpass_graph.figure.add_subplot(211) self.bandpass_graph.ax2 = self.bandpass_graph.figure.add_subplot(212) layout.addWidget(self.bandpass_graph, 1, 4, 1, 2)
def buildGUI(self): self.setWindowTitle('Luminous Efficiency') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) main_layout = QGridLayout() self.light_curve = MatplotlibPyQT() self.light_curve.ax = self.light_curve.figure.add_subplot(111) main_layout.addWidget(self.light_curve, 1, 101, 1, 100) self.lum_curve = MatplotlibPyQT() self.lum_curve.ax = self.lum_curve.figure.add_subplot(111) main_layout.addWidget(self.lum_curve, 1, 202, 1, 100) self.lightCurve() self.sources_table = QScrollArea() # self.sources_layout.addWidget(self.sources_table) self.sources_table.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.sources_table.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.sources_table.setWidgetResizable(True) container = QWidget() container.setStyleSheet(""" QWidget { background-color: rgb(0, 0, 0); } """) self.sources_table.setWidget(container) self.sources_table_layout = QVBoxLayout(container) self.sources_table_layout.setSpacing(10) main_layout.addWidget(self.sources_table, 1, 1, 1, 100) l, self.tau_edits, b = createFileSearchObj("Tau Curve File", main_layout, 3, width=1, h_shift=0, tool_tip='') b.clicked.connect(partial(fileSearch, ['CSV (*.csv)'], self.tau_edits)) self.redraw_button = createButton("Plot", main_layout, 2, 1, self.redraw, args=[]) self.cla_button = createButton("Clear All", main_layout, 2, 2, self.clearEnergy, args=[]) self.setLayout(main_layout)
def buildGUI(self): self.setWindowTitle('Ray-Trace Viewer') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.rtv_graph = MatplotlibPyQT() self.rtv_graph.ax = self.rtv_graph.figure.add_subplot(111, projection='3d') layout.addWidget(self.rtv_graph, 1, 1, 15, 1) self.hvt_graph = MatplotlibPyQT() self.hvt_graph.ax = self.hvt_graph.figure.add_subplot(111) layout.addWidget(self.hvt_graph, 16, 1, 15, 1) stn_name_list = [] for stn in self.bam.stn_list: stn_name_list.append("{:}-{:}".format(stn.metadata.network, stn.metadata.code)) _, self.source_height = createLabelEditObj( 'Source Height Along Trajectory [m]', layout, 1, width=1, h_shift=1, tool_tip='', validate='float') _, self.station_combo = createComboBoxObj('Station', layout, 2, items=stn_name_list, width=1, h_shift=1, tool_tip='') self.trajmode = createToggle("Plot Trajectory?", layout, 3, width=1, h_shift=2, tool_tip='') self.netmode = createToggle("Run Ray Net?", layout, 9, width=1, h_shift=2, tool_tip='') self.run_trace_button = createButton("Run", layout, 4, 3, self.runRayTrace) self.clear_trace_button = createButton("Clear", layout, 5, 3, self.clearRayTrace) # _, self.ray_frac = createLabelEditObj('Fraction of Rays to Show', layout, 5, width=1, h_shift=1, tool_tip='', validate='int', default_txt='50') _, self.horizontal_tol = createLabelEditObj('Horizontal Tolerance', layout, 6, width=1, h_shift=1, tool_tip='', validate='float', default_txt='330') _, self.vertical_tol = createLabelEditObj('Vertical Tolerance', layout, 7, width=1, h_shift=1, tool_tip='', validate='float', default_txt='3000') self.pertstog = createToggle("Use Pertubations", layout, 8, width=1, h_shift=2, tool_tip='') _, self.source_lat = createLabelEditObj('Source Latitude', layout, 10, width=1, h_shift=1, tool_tip='', validate='float') _, self.source_lon = createLabelEditObj('Source Longitude', layout, 11, width=1, h_shift=1, tool_tip='', validate='float') self.save_ray = createButton("Export Ray", layout, 12, 3, self.exportRay) self.load_ray_label, self.load_ray_edits, self.load_ray_buton = createFileSearchObj( 'Load Ray Trace: ', layout, 13, width=1, h_shift=1) self.load_ray_buton.clicked.connect( partial(fileSearch, ['DAT (*.dat)'], self.load_ray_edits)) self.load_ray_buton.clicked.connect(self.plotLoadedRay) self.draw_stat = createButton("Draw Station", layout, 14, 3, self.drawStat) self.draw_src = createButton("Draw Source", layout, 15, 3, self.drawSrc) self.draw_traj = createButton("Draw Trajectory", layout, 16, 3, self.drawTraj) _, self.draw_beam = createLabelEditObj('Beam Azimuth', layout, 17, width=1, h_shift=1, tool_tip='', validate='float') self.draw_beam_button = createButton("Draw", layout, 17, 4, self.drawBeam) _, self.draw_exp_time = createLabelEditObj('Expected Arrival Time [s]', layout, 18, width=1, h_shift=1, tool_tip='', validate='float') self.trace_rev_button = createButton("Trace Reverse", layout, 18, 4, self.traceRev) self.hvt_graph.ax.set_xlabel("Time after Source [s]") self.hvt_graph.ax.set_ylabel("Height [km]") self.load_glm_label, self.load_glm_edits, self.load_glm_buton = createFileSearchObj( 'Load GLM: ', layout, 19, width=1, h_shift=1) self.load_glm_buton.clicked.connect( partial(fileSearch, ['CSV (*.csv)'], self.load_glm_edits)) self.load_glm_buton.clicked.connect(partial(self.procGLM, True)) self.fireball_datetime_label, self.fireball_datetime_edits = createLabelDateEditObj( "GLM Initial Datetime", layout, 20, h_shift=1) self.glm2lc = createButton("GLM to Light Curve", layout, 21, 4, self.glm2LC) self.pol_graph = MatplotlibPyQT() self.pol_graph.ax1 = self.pol_graph.figure.add_subplot(211) self.pol_graph.ax2 = self.pol_graph.figure.add_subplot(212) layout.addWidget(self.pol_graph, 1, 5, 25, 1) self.load_baz_label, self.load_baz_edits, self.load_baz_buton = createFileSearchObj( 'Load Backazimuth: ', layout, 22, width=1, h_shift=1) self.load_baz_buton.clicked.connect( partial(fileSearch, ['CSV (*.csv)'], self.load_baz_edits)) self.load_baz_buton.clicked.connect(self.loadAngleCSV) self.height_unc_button = createButton("Height Uncertainty", layout, 23, 4, self.heightUnc)
def buildGUI(self, time): self.setWindowTitle('Edit Annotation') p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) title_label = QLabel("Title: ") layout.addWidget(title_label, 1, 1, 1, 1) self.title_edits = QLineEdit() layout.addWidget(self.title_edits, 1, 2, 1, 1) self.color_button = QPushButton() layout.addWidget(self.color_button, 1, 3, 1, 1) self.color_button.clicked.connect(self.color_picker) group_label = QLabel("Group: ") layout.addWidget(group_label, 2, 1, 1, 1) self.group_edits = QComboBox() layout.addWidget(self.group_edits, 2, 2, 1, 1) _, self.low_bandpass_edits = createLabelEditObj("Lowpass", layout, 3, width=1, h_shift=0, tool_tip='', validate='float', default_txt='2') _, self.high_bandpass_edits = createLabelEditObj("Highpass", layout, 4, width=1, h_shift=0, tool_tip='', validate='float', default_txt='8') self.group_edits.addItem("[Unknown]") if hasattr(self.bam, "source_list"): for s in self.bam.source_list: self.group_edits.addItem(s.title) time_label = QLabel("Time: ") layout.addWidget(time_label, 5, 1, 1, 1) self.time_edits = QLineEdit("{:.2f}".format(time)) layout.addWidget(self.time_edits, 5, 2, 1, 1) self.time_edits.setValidator(QDoubleValidator()) length_label = QLabel("Length: ") layout.addWidget(length_label, 6, 1, 1, 1) self.length_edits = QLineEdit('0') layout.addWidget(self.length_edits, 6, 2, 1, 1) self.length_edits.setValidator(QDoubleValidator()) source_label = QLabel("Source: ") layout.addWidget(source_label, 7, 1, 1, 1) self.source_edits = QComboBox() layout.addWidget(self.source_edits, 7, 2, 1, 1) for s in ["[None]", "Fragmentation", "Ballisitc"]: self.source_edits.addItem(s) height_label = QLabel("Height: ") layout.addWidget(height_label, 8, 1, 1, 1) self.height_edits = QLineEdit('0') layout.addWidget(self.height_edits, 8, 2, 1, 1) self.height_edits.setValidator(QDoubleValidator()) notes_label = QLabel("Notes: ") layout.addWidget(notes_label, 9, 1, 1, 1) self.notes_box = QPlainTextEdit() layout.addWidget(self.notes_box, 9, 2, 1, 2) # self.group_edits.currentIndexChanged.connect(self.groupRefresh) self.annote_waveform_view = pg.GraphicsLayoutWidget() self.annote_waveform_canvas = self.annote_waveform_view.addPlot() layout.addWidget(self.annote_waveform_view, 10, 1, 1, 4) self.annote_waveform_canvas.setLabel('bottom', "Time after Reference", units='s') self.annote_waveform_canvas.setLabel('left', "Amplitude") self.annote_fft_view = pg.GraphicsLayoutWidget() self.annote_fft_canvas = self.annote_fft_view.addPlot() layout.addWidget(self.annote_fft_view, 2, 3, 9, 4) self.annote_fft_canvas.setLogMode(True, True) self.annote_fft_canvas.setLabel('bottom', "Frequency", units='Hz') self.annote_fft_canvas.setLabel('left', "Amplitude") save_button = QPushButton('Save') layout.addWidget(save_button, 12, 2, 1, 1) save_button.clicked.connect(self.addAnnote) del_button = QPushButton('Delete') layout.addWidget(del_button, 12, 1, 1, 1) del_button.clicked.connect(self.delAnnote)
def buildGUI(self): self.setWindowTitle('Traj Space') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.pvh_graph = MatplotlibPyQT() # self.pvh_graph.ax1 = self.pvh_graph.figure.add_subplot(611) self.pvh_graph.ax2 = self.pvh_graph.figure.add_subplot(411) self.pvh_graph.ax3 = self.pvh_graph.figure.add_subplot(412) # self.pvh_graph.ax4 = self.pvh_graph.figure.add_subplot(513) self.pvh_graph.ax5 = self.pvh_graph.figure.add_subplot(413) self.pvh_graph.ax6 = self.pvh_graph.figure.add_subplot(414) layout.addWidget(self.pvh_graph, 1, 1, 100, 1) export_raw = createButton("Export Overpressures and Periods", layout, 101, 1, self.exportraw, args=[]) run_button = createButton("Make Plots", layout, 1, 3, self.calculate, args=[]) _, self.N_edits = createLabelEditObj("Number of Windows", layout, 2, width=1, h_shift=1, tool_tip='', validate='int', default_txt='100') _, self.l_edits = createLabelEditObj("Percent Overlap", layout, 3, width=1, h_shift=1, tool_tip='', validate='float', default_txt='0.5') self.h_space_tog = createToggle("Height Space", layout, 4, width=1, h_shift=2, tool_tip='') self.h_space_tog.setChecked(True) self.auto_gain = createToggle("Auto Gain Limits", layout, 5, width=1, h_shift=2, tool_tip='') _, self.gain_edits = createLabelEditObj("Gain Cutoff", layout, 6, width=1, h_shift=1, tool_tip='', validate='float', default_txt='5') self.auto_gain.setChecked(True) ro_button = createButton("Calculate Relaxation Radii", layout, 7, 3, self.geminusify, args=[]) _, self.min_height_edits = createLabelEditObj("Minimum Height [km]", layout, 8, width=1, h_shift=1, tool_tip='', validate='float', default_txt='17') _, self.max_height_edits = createLabelEditObj("Maximum Height [km]", layout, 9, width=1, h_shift=1, tool_tip='', validate='float', default_txt='40') self.branchselector = createToggle("Use Branch 2", layout, 10, width=1, h_shift=2, tool_tip='') self.branchselector.setChecked(True) _, self.min_time_edits = createLabelEditObj("Minimum Time [s]", layout, 11, width=1, h_shift=1, tool_tip='', validate='float', default_txt='300') _, self.max_time_edits = createLabelEditObj("Maximum Time [s]", layout, 12, width=1, h_shift=1, tool_tip='', validate='float', default_txt='600') self.stat_bandpass = createToggle("Use Station Bandpass", layout, 13, width=1, h_shift=2, tool_tip='') _, self.bin_edits = createLabelEditObj("Size of Bins [m]", layout, 14, width=1, h_shift=1, tool_tip='', validate='float', default_txt='100') self.bin_edits.editingFinished.connect(self.binify) self.ro_graph = MatplotlibPyQT() self.ro_graph.ax = self.ro_graph.figure.add_subplot(111) layout.addWidget(self.ro_graph, 15, 2, 90, 2) export_ro = createButton("Export Relaxation Radii Curve", layout, 105, 3, self.exportro, args=[])
def buildGUI(self): self.setWindowTitle('Particle Motion') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QHBoxLayout() self.setLayout(layout) left_pane = QGridLayout() right_pane = QGridLayout() rightest_pane = QHBoxLayout() layout.addLayout(left_pane) layout.addLayout(right_pane) layout.addLayout(rightest_pane) self.added = False ################ # LEFT PANE ################ stn_label = QLabel("Station: {:}-{:} {:} | Channel: {:}*".format(self.stn.metadata.network, \ self.stn.metadata.code, self.stn.metadata.name, self.channel[0:2])) self.chn_label = [QLabel(), QLabel(), QLabel()] self.zne_canvas = [None] * 3 self.zne_plot_view = pg.GraphicsLayoutWidget() self.zne_canvas[0] = self.zne_plot_view.addPlot() self.zne_plot_view.nextRow() self.zne_canvas[1] = self.zne_plot_view.addPlot() self.zne_plot_view.nextRow() self.zne_canvas[2] = self.zne_plot_view.addPlot() self.zne_plot_view.setBackground((0, 0, 0)) self.zne_canvas[0].getAxis('bottom').setPen((255, 255, 255)) self.zne_canvas[0].getAxis('left').setPen((255, 255, 255)) self.zne_canvas[1].getAxis('bottom').setPen((255, 255, 255)) self.zne_canvas[1].getAxis('left').setPen((255, 255, 255)) self.zne_canvas[2].getAxis('bottom').setPen((255, 255, 255)) self.zne_canvas[2].getAxis('left').setPen((255, 255, 255)) self.zne_canvas[1].setXLink(self.zne_canvas[0]) self.zne_canvas[2].setXLink(self.zne_canvas[0]) self.zne_canvas[1].setYLink(self.zne_canvas[0]) self.zne_canvas[2].setYLink(self.zne_canvas[0]) left_pane.addWidget(stn_label, 0, 1) left_pane.addWidget(self.zne_plot_view, 1, 1, 3, 1) for i in range(len(self.chn_label)): left_pane.addWidget(self.chn_label[i], i + 1, 0) _, self.low_edits = createLabelEditObj("Low", left_pane, 5, width=1, h_shift=0, tool_tip='', validate='float', default_txt='2') _, self.high_edits = createLabelEditObj("High", left_pane, 6, width=1, h_shift=0, tool_tip='', validate='float', default_txt='8') self.low_edits.returnPressed.connect(self.selectorPlot) self.high_edits.returnPressed.connect(self.selectorPlot) self.load_button = createButton('Load', left_pane, 7, 0, self.loadButton) ################# # RIGHT PANE ################# self.particle_motion_view = pg.GraphicsLayoutWidget() self.particle_motion_canvas = self.particle_motion_view.addPlot() self.waveform_plot_view = pg.GraphicsLayoutWidget() self.waveform_canvas = self.waveform_plot_view.addPlot() self.waveform_plot_view.setBackground((0, 0, 0)) self.waveform_canvas.getAxis('bottom').setPen((255, 255, 255)) self.waveform_canvas.getAxis('left').setPen((255, 255, 255)) self.waveform_fft_view = pg.GraphicsLayoutWidget() self.waveform_fft_canvas = self.waveform_fft_view.addPlot() self.waveform_fft_view.setBackground((0, 0, 0)) self.waveform_fft_canvas.getAxis('bottom').setPen((255, 255, 255)) self.waveform_fft_canvas.getAxis('left').setPen((255, 255, 255)) self.waveform_hist_view = pg.GraphicsLayoutWidget() self.plot_type = QComboBox() self.plot_type.addItem('Azimuth') self.plot_type.addItem('Incidence') self.plot_type.addItem('Azimuth Window') self.plot_type.addItem('Jurkevic Azimuth') self.plot_type.addItem('Azimuth Colourmap') # self.plot_type.addItem('Abercrombie 1995') self.plot_type.currentIndexChanged.connect(self.selectorPlot) right_pane.addWidget(self.waveform_fft_view, 0, 0) self.waveform_fft_canvas.setLogMode(True, True) right_pane.addWidget(self.waveform_plot_view, 1, 0) self.waveform_canvas.setXLink(self.particle_motion_canvas) rightest_pane.addWidget(self.waveform_hist_view) right_pane.addWidget(self.particle_motion_view, 2, 0) right_pane.addWidget(self.plot_type, 3, 0) self.mark_button = createButton('Mark', right_pane, 4, 0, self.markWaveform) h_label = QLabel("Height") right_pane.addWidget(h_label, 5, 0) self.ray_height = QLineEdit("50000") right_pane.addWidget(self.ray_height, 5, 1) win_len_label = QLabel("Window Length") right_pane.addWidget(win_len_label, 6, 0) self.win_len_e = QLineEdit("2") right_pane.addWidget(self.win_len_e, 6, 1) win_frac_label = QLabel("Window Fraction") right_pane.addWidget(win_frac_label, 7, 0) self.win_frac_e = QLineEdit("0.05") right_pane.addWidget(self.win_frac_e, 7, 1) self.win_len_e.returnPressed.connect(self.selectorPlot) self.win_frac_e.returnPressed.connect(self.selectorPlot)
def buildGUI(self): self.setWindowTitle('Program Wide Preferences') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'preferences.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) tab_widget = QTabWidget() tab_widget.blockSignals(True) tab_widget.blockSignals(False) layout.addWidget(tab_widget, 1, 1, 1, 2) general_tab, general_tab_layout = createTab(tab_widget, 'General') _, self.workdir = createLabelEditObj('Working Directory', general_tab_layout, 0, width=1, h_shift=0, tool_tip='') _, self.avg_sp_sound = createLabelEditObj('Average Speed of Sound', general_tab_layout, 1, width=1, h_shift=0, tool_tip='', validate='float', default_txt='310') _, self.contour_res = createLabelEditObj('Contour Resolution', general_tab_layout, 2, width=1, h_shift=0, tool_tip='', validate='float', default_txt='25') self.debug = createToggle('Debug', general_tab_layout, 3, width=1, h_shift=1, tool_tip='') self.ballistic_en = createToggle('Show Ballistic', general_tab_layout, 4, width=1, h_shift=1, tool_tip='') self.frag_en = createToggle('Show Fragmentation', general_tab_layout, 5, width=1, h_shift=1, tool_tip='') self.recalc_times = createToggle('Recalculate Times', general_tab_layout, 6, width=1, h_shift=1, tool_tip='') # self.recalc_sigs = createToggle('Recalculate Signals', general_tab_layout, 7, width=1, h_shift=1, tool_tip='') browse_button = QPushButton('Browse') general_tab_layout.addWidget(browse_button, 0, 3) browse_button.clicked.connect(partial(folderSearch, self.workdir)) atmos_tab, atmos_tab_layout = createTab(tab_widget, 'Atmospheric') self.wind_en = createToggle('Enable Winds', atmos_tab_layout, 0, width=1, h_shift=1, tool_tip='') self.pert_en = createToggle('Enable Perturbations', atmos_tab_layout, 1, width=1, h_shift=1, tool_tip='') _, self.atm_type = createComboBoxObj('Atmosphere Type', atmos_tab_layout, 2, items=['none', 'ecmwf'], width=1, h_shift=0, tool_tip='') _, self.pert_type = createComboBoxObj('Perturbation Type', atmos_tab_layout, 3, items=['none', 'spread'], width=1, h_shift=0, tool_tip='') _, self.pert_num = createLabelEditObj('Perturb Times', atmos_tab_layout, 4, width=1, h_shift=0, tool_tip='', validate='int', default_txt='1') pso_tab, pso_tab_layout = createTab(tab_widget, 'PSO Search') self.pso_debug = createToggle('PSO Debug', pso_tab_layout, 0, width=1, h_shift=1, tool_tip='') # _, self.pso_theta = createLabelEditObj('Theta Resolution', pso_tab_layout, 1, width=1, h_shift=0, tool_tip='', validate='int', default_txt='90') # _, self.pso_phi = createLabelEditObj('Phi Resolution', pso_tab_layout, 2, width=1, h_shift=0, tool_tip='', validate='int', default_txt='90') # _, self.pso_min_ang = createLabelEditObj('Horizontal Tolerance', pso_tab_layout, 3, width=1, h_shift=0, tool_tip='', validate='float', default_txt='1e-5') # _, self.pso_min_dist = createLabelEditObj('Vertical Tolerance', pso_tab_layout, 4, width=1, h_shift=0, tool_tip='', validate='float', default_txt='1000.0') _, self.pso_max_iter = createLabelEditObj('Maximum Iterations', pso_tab_layout, 2, width=1, h_shift=0, tool_tip='', validate='int', default_txt='100') _, self.pso_swarm_size = createLabelEditObj('Swarm Size', pso_tab_layout, 3, width=1, h_shift=0, tool_tip='', validate='int', default_txt='100') # _, self.pso_run_times = createLabelEditObj('Run Times', pso_tab_layout, 7, width=1, h_shift=0, tool_tip='', validate='int', default_txt='1') _, self.pso_min_error = createLabelEditObj('Minimum Error', pso_tab_layout, 4, width=1, h_shift=0, tool_tip='', validate='float', default_txt='1e-8') _, self.pso_min_step = createLabelEditObj('Minimum Step', pso_tab_layout, 5, width=1, h_shift=0, tool_tip='', validate='float', default_txt='1e-8') _, self.pso_phi_p = createLabelEditObj('Phi_p', pso_tab_layout, 6, width=1, h_shift=0, tool_tip='', validate='float', default_txt='0.5') _, self.pso_phi_g = createLabelEditObj('Phi_g', pso_tab_layout, 7, width=1, h_shift=0, tool_tip='', validate='float', default_txt='0.5') _, self.pso_omega = createLabelEditObj('Omega', pso_tab_layout, 8, width=1, h_shift=0, tool_tip='', validate='float', default_txt='0.5') ray_trace_tab, ray_trace_layout = createTab(tab_widget, 'Ray-Tracing') _, self.pso_min_ang = createLabelEditObj('Horizontal Tolerance', ray_trace_layout, 1, width=1, h_shift=0, tool_tip='', validate='float', default_txt='330') _, self.pso_min_dist = createLabelEditObj('Vertical Tolerance', ray_trace_layout, 2, width=1, h_shift=0, tool_tip='', validate='float', default_txt='330') save_button = QPushButton('Save') layout.addWidget(save_button, 2, 2) save_button.clicked.connect(self.savePref)
def buildGUI(self): self.setWindowTitle('Ray-Trace Viewer') app_icon = QtGui.QIcon() app_icon.addFile( os.path.join('supra', 'GUI', 'Images', 'BAM_no_wave.png'), QtCore.QSize(16, 16)) self.setWindowIcon(app_icon) p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) theme(self) layout = QGridLayout() self.setLayout(layout) self.glm_graph = MatplotlibPyQT() self.glm_graph.ax = self.glm_graph.figure.add_subplot(111) layout.addWidget(self.glm_graph, 1, 1, 15, 1) # self.hvt_graph = MatplotlibPyQT() # self.hvt_graph.ax = self.hvt_graph.figure.add_subplot(111) # layout.addWidget(self.hvt_graph, 16, 1, 15, 1) # stn_name_list = [] # for stn in self.bam.stn_list: # stn_name_list.append("{:}-{:}".format(stn.metadata.network, stn.metadata.code)) # _, self.source_height = createLabelEditObj('Source Height Along Trajectory [m]', layout, 1, width=1, h_shift=1, tool_tip='', validate='float') # _, self.station_combo = createComboBoxObj('Station', layout, 2, items=stn_name_list, width=1, h_shift=1, tool_tip='') # self.trajmode = createToggle("Plot Trajectory?", layout, 3, width=1, h_shift=2, tool_tip='') # self.netmode = createToggle("Run Ray Net?", layout, 9, width=1, h_shift=2, tool_tip='') # self.run_trace_button = createButton("Run", layout, 4, 3, self.runRayTrace) # self.clear_trace_button = createButton("Clear", layout, 5, 3, self.clearRayTrace) # # _, self.ray_frac = createLabelEditObj('Fraction of Rays to Show', layout, 5, width=1, h_shift=1, tool_tip='', validate='int', default_txt='50') # _, self.horizontal_tol = createLabelEditObj('Horizontal Tolerance', layout, 6, width=1, h_shift=1, tool_tip='', validate='float', default_txt='330') # _, self.vertical_tol = createLabelEditObj('Vertical Tolerance', layout, 7, width=1, h_shift=1, tool_tip='', validate='float', default_txt='3000') # self.pertstog = createToggle("Use Pertubations", layout, 8, width=1, h_shift=2, tool_tip='') # _, self.source_lat = createLabelEditObj('Source Latitude', layout, 10, width=1, h_shift=1, tool_tip='', validate='float') # _, self.source_lon = createLabelEditObj('Source Longitude', layout, 11, width=1, h_shift=1, tool_tip='', validate='float') # self.save_ray = createButton("Export Ray", layout, 12, 3, self.exportRay) self.load_glm_label, self.load_glm_edits, self.load_glm_buton = createFileSearchObj( 'Load GLM: ', layout, 13, width=1, h_shift=1) self.load_glm_buton.clicked.connect( partial(fileSearch, ['CSV (*.csv)'], self.load_glm_edits)) self.load_glm_buton.clicked.connect(self.procGLM) self.for_met_sim = createButton("Save For MetSim", layout, 13, 2, self.saveMetSim) # self.draw_stat = createButton("Draw Station", layout, 14, 3, self.drawStat) # self.draw_src = createButton("Draw Source", layout, 15, 3, self.drawSrc) # self.draw_traj = createButton("Draw Trajectory", layout, 16, 3, self.drawTraj) # _, self.draw_beam = createLabelEditObj('Beam Azimuth', layout, 17, width=1, h_shift=1, tool_tip='', validate='float') # self.draw_beam_button = createButton("Draw", layout, 17, 4, self.drawBeam) # self.hvt_graph.ax.set_xlabel("Time after Source [s]") # self.hvt_graph.ax.set_ylabel("Height [km]") traj = self.bam.setup.trajectory # define line bottom boundary max_height = traj.pos_i.elev min_height = traj.pos_f.elev points = traj.trajInterp2(div=50, min_p=min_height, max_p=max_height) for pp, p in enumerate(points): if pp == 0: self.glm_graph.ax.scatter(p[1], p[0], c="g", label="Source Trajectory") else: self.glm_graph.ax.scatter(p[1], p[0], c="g") self.glm_graph.ax.legend()
def __init__(self, bam, prefs, current_station): ################# # Initialize GUI ################# QWidget.__init__(self) self.setWindowTitle('Yields') p = self.palette() p.setColor(self.backgroundRole(), Qt.black) self.setPalette(p) self.prefs = prefs self.bam = bam self.setup = bam.setup self.stn_list = bam.stn_list self.current_station = current_station self.iterator = 0 theme(self) self.count = 0 layout = QHBoxLayout() self.setLayout(layout) pane1 = QGridLayout() layout.addLayout(pane1) pane2 = QVBoxLayout() layout.addLayout(pane2) self.station_label = QLabel('Station: {:}'.format( self.stn_list[self.current_station].metadata.code)) pane1.addWidget(self.station_label, 0, 1, 1, 1) self.station1_label = QLabel('Nominal') pane1.addWidget(self.station1_label, 0, 2, 1, 1) self.height_label, self.height_edits = createLabelEditObj( 'Height', pane1, 1) self.range_label, self.range_edits = createLabelEditObj( 'Range', pane1, 2) self.pressure_label, self.pressure_edits = createLabelEditObj( 'Explosion Height Pressure', pane1, 3) self.overpressure_label, self.overpressure_edits = createLabelEditObj( 'Overpressure', pane1, 4) self.afi_label, self.afi_edits = createLabelEditObj( 'Attenuation Integration Factor', pane1, 5) self.geo_label, self.geo_edits = createLabelEditObj( 'Geometric Factor', pane1, 6) self.p_a_label, self.p_a_edits = createLabelEditObj( 'Ambient Pressure', pane1, 7) self.Jd_label, self.Jd_edits = createLabelEditObj( 'Positive Phase Length [ms]', pane1, 8) self.fd_label, self.fd_edits = createLabelEditObj( 'Transmission Factor', pane1, 9) _, self.freq_edits = createLabelEditObj("Dominant Period", pane1, 10) _, self.rfangle_edits = createLabelEditObj("Refraction Angle", pane1, 11) # _, self.I_A_edits = createLabelEditObj("Impulse per Area (Area under curve)", pane1, 12) # self.fyield_button = QPushButton('Calculate Yield (Frequency)') # pane1.addWidget(self.fyield_button, 15, 1, 1, 4) # self.fyield_button.clicked.connect(self.freqYield) self.yield_button = QPushButton('Calculate Yield') pane1.addWidget(self.yield_button, 14, 1, 1, 4) self.yield_button.clicked.connect(self.yieldCalc) self.integrate_button = QPushButton('Integrate') pane1.addWidget(self.integrate_button, 13, 1, 1, 4) self.integrate_button.clicked.connect(self.intCalc) # Constants - Reed 1972 self.W_0 = 4.184e6 # Standard reference explosion yield (1 kg of Chemical TNT) self.P_0 = 101325 # Standard pressure self.b = 1 / consts.SCALE_HEIGHT self.k = consts.ABSORPTION_COEFF self.J_m = 0.375 # Avg positive period of reference explosion self.c_m = 347 # Sound speed of reference explosion # self.blastline_view = pg.GraphicsLayoutWidget() # self.blastline_canvas = self.blastline_view.addPlot() # pane2.addWidget(self.blastline_view) # self.blastline_view.sizeHint = lambda: pg.QtCore.QSize(100, 100) self.blastline_plot = MatplotlibPyQT() self.blastline_plot.ax = self.blastline_plot.figure.add_subplot(111) pane2.addWidget(self.blastline_plot)