Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
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)
Esempio n. 5
0
    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)
Esempio n. 6
0
    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()
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
    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)
Esempio n. 10
0
    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)
Esempio n. 11
0
    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)
Esempio n. 12
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)
Esempio n. 13
0
    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)
Esempio n. 14
0
    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)
Esempio n. 15
0
    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)
Esempio n. 16
0
    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)
Esempio n. 17
0
    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=[])
Esempio n. 18
0
    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)
Esempio n. 19
0
    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)
Esempio n. 20
0
    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()
Esempio n. 21
0
    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)