#!/usr/bin/python3 # TODO: Implement gloabl button actions, ie # --load template # --save template # TODO: Implement button actions in TRACE HEADERS # --build trace db : brings up data fields but does nothing with them # --list traces # --modify headers # --clear current # --clear update dictionary # TODO: Implement button actions in GLOBAL MODIFY # --build trace db : brings up data fields but does nothing with them # --global set # --clear current # --clear update dictionary # TODO: Implement button actions in TIME SHIFT # TODO: Implement button actions in ENDIANESS # TODO: Implement button actions in LOG # TODO: Improve indentation of text in HELP # What works: # Exit button # PopUp help checkbox # Find directories button in TRACE HEADERS # Clear directories button in TRACE HEADERS # Clear stations button in TRACE HEADERS # Find directories button in TRACE HEADERS # Template Format button in HELP from PySide6 import QtCore, QtGui, QtWidgets import os import sys import time # Global variables VERSION = "2022.1.0.0" # version of fixhdr DIRECTORY = os.getcwd() # current working directory initially listed in Data Directories class Ui_Window(object): def setupUi(self, Window): Window.setObjectName("Window") Window.setFixedSize(730, 530) # static window size ############################################################################################################# # GLOBAL WINDOW ASSETS # Bottom Frame around Load/Save/Exit self.bottom_frame = QtWidgets.QFrame(Window) self.bottom_frame.setGeometry(QtCore.QRect(0, 450, 721, 41)) self.bottom_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.bottom_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.bottom_frame.setObjectName("bottom_frame") # Load Template Button self.load_template_btn = QtWidgets.QPushButton(Window) self.load_template_btn.setGeometry(QtCore.QRect(360, 458, 121, 25)) self.load_template_btn.setObjectName("load_template_btn") self.load_template_btn.setStyleSheet("QPushButton::hover" "{" "background-color:green;" "}") # Save Template Button self.save_template_btn = QtWidgets.QPushButton(Window) self.save_template_btn.setGeometry(QtCore.QRect(480, 458, 121, 25)) self.save_template_btn.setObjectName("save_template_btn") self.save_template_btn.setStyleSheet("QPushButton::hover" "{" "background-color:green;" "}") # Exit button self.exit_btn = QtWidgets.QPushButton(Window) self.exit_btn.setGeometry(QtCore.QRect(600, 458, 121, 25)) self.exit_btn.setObjectName("exit_btn") #self.exit_btn.setCursor(QtGui.QCursor(QtCore.Qt.CursorShape.CrossCursor)) self.exit_btn.setStyleSheet("QPushButton::hover" "{" "background-color:rgb(165, 29, 45);" "}") self.exit_btn.clicked.connect(self.click_quit) # MSEED files found banner self.files_alert_textBrowser = QtWidgets.QTextBrowser(Window) self.files_alert_textBrowser.setGeometry(QtCore.QRect(0, 500, 730, 30)) font = QtGui.QFont() font.setFamily("DejaVu Sans") self.files_alert_textBrowser.setFont(font) self.files_alert_textBrowser.setObjectName("files_alert_textBrowser") self.files_alert_textBrowser.setStyleSheet("background-color:yellow") ############################################################################################################# # TRACE HEADERS # Tab Setup self.tabWidget = QtWidgets.QTabWidget(Window) self.tabWidget.setGeometry(QtCore.QRect(0, 10, 721, 431)) self.tabWidget.setObjectName("tabWidget") # Trace Headers Tab self.TraceHeaders = QtWidgets.QWidget() self.TraceHeaders.setObjectName("TraceHeaders") # Trace Headers Tab -- Data Directories Frame self.TH_dd_frame = QtWidgets.QFrame(self.TraceHeaders) self.TH_dd_frame.setGeometry(QtCore.QRect(-2, 5, 721, 41)) self.TH_dd_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.TH_dd_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.TH_dd_frame.setObjectName("TH_dd_frame") # Trace Headers Tab -- Data Directories Label self.TH_data_directories_label = QtWidgets.QLabel(self.TraceHeaders) self.TH_data_directories_label.setGeometry(QtCore.QRect(8, 17, 151, 17)) self.TH_data_directories_label.setObjectName("TH_display_messages_for_label") # Trace Headers Tab -- File Directory textEdit self.textEdit = QtWidgets.QTextEdit(self.TraceHeaders) self.textEdit.setGeometry(QtCore.QRect(130, 13, 350, 25)) self.textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.textEdit.setAcceptRichText(False) self.textEdit.setObjectName("textEdit") # Trace Headers Tab -- hidden frame + labels + textEdits # revealed by clicking the Build Trace button self.frame = QtWidgets.QFrame(self.TraceHeaders) self.frame.setGeometry(QtCore.QRect(-2, 100, 730, 259)) self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.frame.setObjectName("frame") self.frame.hide() self.stat_chan = QtWidgets.QLabel(self.TraceHeaders) self.stat_chan.setGeometry(QtCore.QRect(8, 100, 150, 40)) self.stat_chan.setObjectName("stat_chan") self.stat_chan.hide() self.stat_name = QtWidgets.QLabel(self.TraceHeaders) self.stat_name.setGeometry(QtCore.QRect(8, 125, 150, 40)) self.stat_name.setObjectName("stat_name") self.stat_name.hide() self.channel = QtWidgets.QLabel(self.TraceHeaders) self.channel.setGeometry(QtCore.QRect(8, 150, 150, 40)) self.channel.setObjectName("channel") self.channel.hide() self.loc_code = QtWidgets.QLabel(self.TraceHeaders) self.loc_code.setGeometry(QtCore.QRect(8, 175, 150, 40)) self.loc_code.setObjectName("loc_code") self.loc_code.hide() self.net_code = QtWidgets.QLabel(self.TraceHeaders) self.net_code.setGeometry(QtCore.QRect(8, 200, 150, 40)) self.net_code.setObjectName("net_code") self.net_code.hide() self.smpl_rt = QtWidgets.QLabel(self.TraceHeaders) self.smpl_rt.setGeometry(QtCore.QRect(8, 225, 150, 40)) self.smpl_rt.setObjectName("smpl_rt") self.smpl_rt.hide() self.textEdit1 = QtWidgets.QTextEdit(self.TraceHeaders) self.textEdit1.setGeometry(QtCore.QRect(180, 112, 150, 20)) self.textEdit1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.textEdit1.setAcceptRichText(False) self.textEdit1.hide() self.textEdit2 = QtWidgets.QTextEdit(self.TraceHeaders) self.textEdit2.setGeometry(QtCore.QRect(180, 137, 150, 20)) self.textEdit2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.textEdit2.setAcceptRichText(False) self.textEdit2.hide() self.textEdit3 = QtWidgets.QTextEdit(self.TraceHeaders) self.textEdit3.setGeometry(QtCore.QRect(180, 162, 150, 20)) self.textEdit3.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.textEdit3.setAcceptRichText(False) self.textEdit3.hide() self.textEdit4 = QtWidgets.QTextEdit(self.TraceHeaders) self.textEdit4.setGeometry(QtCore.QRect(180, 187, 150, 20)) self.textEdit4.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.textEdit4.setAcceptRichText(False) self.textEdit4.hide() self.textEdit5 = QtWidgets.QTextEdit(self.TraceHeaders) self.textEdit5.setGeometry(QtCore.QRect(180, 212, 150, 20)) self.textEdit5.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.textEdit5.setAcceptRichText(False) self.textEdit5.hide() self.textEdit6 = QtWidgets.QTextEdit(self.TraceHeaders) self.textEdit6.setGeometry(QtCore.QRect(180, 237, 150, 20)) self.textEdit6.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.textEdit6.setAcceptRichText(False) self.textEdit6.hide() self.new_val = QtWidgets.QLabel(self.TraceHeaders) self.new_val.setGeometry(QtCore.QRect(350, 102, 150, 40)) self.new_val.setObjectName("new_val") self.new_val.hide() self.nv_textEdit1 = QtWidgets.QTextEdit(self.TraceHeaders) self.nv_textEdit1.setGeometry(QtCore.QRect(349, 137, 150, 20)) self.nv_textEdit1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.nv_textEdit1.setAcceptRichText(False) self.nv_textEdit1.hide() self.nv_textEdit2 = QtWidgets.QTextEdit(self.TraceHeaders) self.nv_textEdit2.setGeometry(QtCore.QRect(349, 162, 150, 20)) self.nv_textEdit2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.nv_textEdit2.setAcceptRichText(False) self.nv_textEdit2.hide() self.nv_textEdit3 = QtWidgets.QTextEdit(self.TraceHeaders) self.nv_textEdit3.setGeometry(QtCore.QRect(349, 187, 150, 20)) self.nv_textEdit3.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.nv_textEdit3.setAcceptRichText(False) self.nv_textEdit3.hide() self.nv_textEdit4 = QtWidgets.QTextEdit(self.TraceHeaders) self.nv_textEdit4.setGeometry(QtCore.QRect(349, 212, 150, 20)) self.nv_textEdit4.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.nv_textEdit4.setAcceptRichText(False) self.nv_textEdit4.hide() self.applied = QtWidgets.QLabel(self.TraceHeaders) self.applied.setGeometry(QtCore.QRect(520, 102, 150, 40)) self.applied.setObjectName("applied") self.applied.hide() # Trace Headers Tab -- Build Trace button self.TH_build_trace_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_build_trace_btn.setGeometry(QtCore.QRect(494, 13, 110, 25)) self.TH_build_trace_btn.setObjectName("TH_build_traces_btn") self.TH_build_trace_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) self.TH_build_trace_btn.clicked.connect(self.click_build_trace) # Trace Headers Tab -- Find button self.TH_find_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_find_btn.setGeometry(QtCore.QRect(603, 13, 50, 25)) self.TH_find_btn.setObjectName("TH_find_btn") self.TH_find_btn.setStyleSheet("QPushButton::hover" "{" "background-color:green;" "}") self.TH_find_btn.clicked.connect(self.file_dialogue) # Trace Headers Tab -- Clear button self.TH_clear_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_clear_btn.setGeometry(QtCore.QRect(652, 13, 50, 25)) self.TH_clear_btn.setObjectName("TH_clear_btn") self.TH_clear_btn.setStyleSheet("QPushButton::hover" "{" "background-color:orange;" "}") self.TH_clear_btn.clicked.connect(self.click_TH_clear) # Trace Headers Tab -- Find Only Stations Frame self.TH_fos_frame = QtWidgets.QFrame(self.TraceHeaders) self.TH_fos_frame.setGeometry(QtCore.QRect(-2, 53, 721, 41)) self.TH_fos_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.TH_fos_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.TH_fos_frame.setObjectName("TH_fos_frame") # Trace Headers Tab -- Find Only Stations Label self.TH_fos_label = QtWidgets.QLabel(self.TraceHeaders) self.TH_fos_label.setGeometry(QtCore.QRect(8, 65, 280, 17)) self.TH_fos_label.setObjectName("TH_display_messages_for_label") # Trace Headers Tab -- 2nd Clear button self.TH_clear_2_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_clear_2_btn.setGeometry(QtCore.QRect(652, 61, 50, 25)) self.TH_clear_2_btn.setObjectName("TH_clear_2_btn") self.TH_clear_2_btn.setStyleSheet("QPushButton::hover" "{" "background-color:orange;" "}") self.TH_clear_2_btn.clicked.connect(self.click_TH_clear_2) # Trace Headers Tab -- Find Only Stations Directory text self.fos_textEdit = QtWidgets.QTextEdit(self.TraceHeaders) self.fos_textEdit.setGeometry(QtCore.QRect(280, 61, 358, 25)) self.fos_textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.fos_textEdit.setAcceptRichText(False) self.fos_textEdit.setObjectName("fos_textEdit") # Trace Headers Tab -- List Traces button self.TH_popup = QtWidgets.QMainWindow() self.TH_popup.setWindowTitle("Traces Listing") self.TH_popup.resize(750, 480) self.TH_popup.setObjectName("TH_popup") self.TH_popup_textBrowser = QtWidgets.QTextBrowser(self.TH_popup) self.TH_popup_textBrowser.setGeometry(QtCore.QRect(26, 25, 700, 400)) self.TH_popup_textBrowser.setObjectName("TH_textBrowser") self.TH_popup.hide() self.TH_dismiss_btn = QtWidgets.QPushButton(self.TH_popup) self.TH_dismiss_btn.setGeometry(QtCore.QRect(340, 440, 83, 25)) self.TH_dismiss_btn.setObjectName("TH_dismiss_btn") self.TH_dismiss_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234); } QPushButton::hover{ background-color:rgb(165, 29, 45); } """) self.TH_dismiss_btn.clicked.connect(self.TH_popup.close) self.TH_list_traces_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_list_traces_btn.setGeometry(QtCore.QRect(6, 368, 85, 25)) self.TH_list_traces_btn.setObjectName("TH_list_traces_btn") self.TH_list_traces_btn.setStyleSheet("QPushButton::hover" "{" "background-color:green;" "}") self.TH_list_traces_btn.clicked.connect(self.click_list_traces) # Trace Headers Tab -- Clear Update Dictionary button self.TH_clear_update_dictionary_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_clear_update_dictionary_btn.setGeometry(QtCore.QRect(540, 368, 171, 25)) self.TH_clear_update_dictionary_btn.setObjectName("TH_clear_update_dictionary_btn") self.TH_clear_update_dictionary_btn.setStyleSheet("QPushButton::hover" "{" "background-color:orange;" "}") # Trace Headers Tab -- Clear Current button self.TH_clear_current_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_clear_current_btn.setGeometry(QtCore.QRect(420, 368, 121, 25)) self.TH_clear_current_btn.setObjectName("TH_clear_current_btn") self.TH_clear_current_btn.setStyleSheet("QPushButton::hover" "{" "background-color:orange;" "}") # Trace Headers Tab -- Modify Headers button self.TH_modify_headers_btn = QtWidgets.QPushButton(self.TraceHeaders) self.TH_modify_headers_btn.setGeometry(QtCore.QRect(300, 368, 121, 25)) self.TH_modify_headers_btn.setObjectName("TH_modify_headers_btn") self.TH_modify_headers_btn.setStyleSheet("QPushButton::hover" "{" "background-color:green;" "}") self.tabWidget.addTab(self.TraceHeaders, "") ############################################################################################################# # GLOBAL MODIFY # Global Modify Tab self.GlobalModify = QtWidgets.QWidget() self.GlobalModify.setObjectName("GlobalModify") # Global Modify Tab -- Current Data Directories Frame self.GM_cdd_frame = QtWidgets.QFrame(self.GlobalModify) self.GM_cdd_frame.setGeometry(QtCore.QRect(-2, 5, 721, 41)) self.GM_cdd_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.GM_cdd_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.GM_cdd_frame.setObjectName("TH_cdd_frame") # Global Modify Tab -- Current Data Directories Label self.GM_cdd_label = QtWidgets.QLabel(self.GlobalModify) self.GM_cdd_label.setGeometry(QtCore.QRect(8, 17, 170, 17)) self.GM_cdd_label.setObjectName("TH_cdd_label") # Global Modify Tab -- File Directory text self.GM_cdd_textEdit = QtWidgets.QTextEdit(self.GlobalModify) self.GM_cdd_textEdit.setGeometry(QtCore.QRect(183, 13, 522, 25)) self.GM_cdd_textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_cdd_textEdit.setAcceptRichText(False) self.GM_cdd_textEdit.setObjectName("GM_cdd_textEdit") # Global Tab -- hidden frame + labels + textEdits self.GM_h_frame = QtWidgets.QFrame(self.GlobalModify) self.GM_h_frame.setGeometry(QtCore.QRect(-2, 53, 730, 306)) self.GM_h_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.GM_h_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.GM_h_frame.setObjectName("frame") self.GM_h_frame.hide() self.GM_for_headers_matching = QtWidgets.QLabel(self.GlobalModify) self.GM_for_headers_matching.setGeometry(QtCore.QRect(120, 53, 150, 40)) self.GM_for_headers_matching.setObjectName("GM_for_headers_matching") self.GM_for_headers_matching.hide() self.GM_sub_values = QtWidgets.QLabel(self.GlobalModify) self.GM_sub_values.setGeometry(QtCore.QRect(300, 53, 150, 40)) self.GM_sub_values.setObjectName("GM_for_headers_matching") self.GM_sub_values.hide() self.GM_stat_name = QtWidgets.QLabel(self.GlobalModify) self.GM_stat_name.setGeometry(QtCore.QRect(8, 75, 150, 40)) self.GM_stat_name.setObjectName("GM_stat_name") self.GM_stat_name.hide() self.GM_channel = QtWidgets.QLabel(self.GlobalModify) self.GM_channel.setGeometry(QtCore.QRect(8, 100, 150, 40)) self.GM_channel.setObjectName("GM_channel") self.GM_channel.hide() self.GM_loc_code = QtWidgets.QLabel(self.GlobalModify) self.GM_loc_code.setGeometry(QtCore.QRect(8, 125, 150, 40)) self.GM_loc_code.setObjectName("GM_loc_code") self.GM_loc_code.hide() self.GM_net_code = QtWidgets.QLabel(self.GlobalModify) self.GM_net_code.setGeometry(QtCore.QRect(8, 150, 150, 40)) self.GM_net_code.setObjectName("GM_net_code") self.GM_net_code.hide() self.GM_smpl_rt = QtWidgets.QLabel(self.GlobalModify) self.GM_smpl_rt.setGeometry(QtCore.QRect(8, 175, 150, 40)) self.GM_smpl_rt.setObjectName("GM_smpl_rt") self.GM_smpl_rt.hide() self.GM_textEdit1 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit1.setGeometry(QtCore.QRect(119, 88, 150, 20)) self.GM_textEdit1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit1.setAcceptRichText(False) self.GM_textEdit1.hide() self.GM_textEdit2 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit2.setGeometry(QtCore.QRect(119, 113, 150, 20)) self.GM_textEdit2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit2.setAcceptRichText(False) self.GM_textEdit2.hide() self.GM_textEdit3 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit3.setGeometry(QtCore.QRect(119, 138, 150, 20)) self.GM_textEdit3.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit3.setAcceptRichText(False) self.GM_textEdit3.hide() self.GM_textEdit4 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit4.setGeometry(QtCore.QRect(119, 163, 150, 20)) self.GM_textEdit4.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit4.setAcceptRichText(False) self.GM_textEdit4.hide() self.GM_textEdit5 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit5.setGeometry(QtCore.QRect(119, 188, 150, 20)) self.GM_textEdit5.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit5.setAcceptRichText(False) self.GM_textEdit5.hide() self.GM_textEdit6 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit6.setGeometry(QtCore.QRect(299, 88, 150, 20)) self.GM_textEdit6.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit6.setAcceptRichText(False) self.GM_textEdit6.hide() self.GM_textEdit7 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit7.setGeometry(QtCore.QRect(299, 113, 150, 20)) self.GM_textEdit7.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit7.setAcceptRichText(False) self.GM_textEdit7.hide() self.GM_textEdit8 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit8.setGeometry(QtCore.QRect(299, 138, 150, 20)) self.GM_textEdit8.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit8.setAcceptRichText(False) self.GM_textEdit8.hide() self.GM_textEdit9 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_textEdit9.setGeometry(QtCore.QRect(299, 163, 150, 20)) self.GM_textEdit9.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_textEdit9.setAcceptRichText(False) self.GM_textEdit9.hide() self.GM_sub_val = QtWidgets.QLabel(self.GlobalModify) self.GM_sub_val.setGeometry(QtCore.QRect(350, 102, 150, 40)) self.GM_sub_val.setObjectName("GM_sub_val") self.GM_sub_val.hide() self.GM_sv_textEdit1 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_sv_textEdit1.setGeometry(QtCore.QRect(349, 137, 150, 20)) self.GM_sv_textEdit1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_sv_textEdit1.setAcceptRichText(False) self.GM_sv_textEdit1.hide() self.GM_sv_textEdit2 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_sv_textEdit2.setGeometry(QtCore.QRect(349, 162, 150, 20)) self.GM_sv_textEdit2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_sv_textEdit2.setAcceptRichText(False) self.GM_sv_textEdit2.hide() self.GM_sv_textEdit3 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_sv_textEdit3.setGeometry(QtCore.QRect(349, 187, 150, 20)) self.GM_sv_textEdit3.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_sv_textEdit3.setAcceptRichText(False) self.GM_sv_textEdit3.hide() self.GM_sv_textEdit4 = QtWidgets.QTextEdit(self.GlobalModify) self.GM_sv_textEdit4.setGeometry(QtCore.QRect(349, 212, 150, 20)) self.GM_sv_textEdit4.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.GM_sv_textEdit4.setAcceptRichText(False) self.GM_sv_textEdit4.hide() # Global Modify Tab -- Global Set button self.GM_global_set_btn = QtWidgets.QPushButton(self.GlobalModify) self.GM_global_set_btn.setGeometry(QtCore.QRect(300, 368, 121, 25)) self.GM_global_set_btn.setObjectName("GM_global_set_btn") self.GM_global_set_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) # Global Modify Tab -- Clear Current button self.GM_clear_current_btn = QtWidgets.QPushButton(self.GlobalModify) self.GM_clear_current_btn.setGeometry(QtCore.QRect(420, 368, 121, 25)) self.GM_clear_current_btn.setObjectName("GM_clear_current_btn") self.GM_clear_current_btn.setStyleSheet("QPushButton::hover" "{" "background-color:orange;" "}") # Global Modify Tab -- Clear Update Dictionary button self.GM_clear_update_dictionary_btn = QtWidgets.QPushButton(self.GlobalModify) self.GM_clear_update_dictionary_btn.setGeometry(QtCore.QRect(540, 368, 171, 25)) self.GM_clear_update_dictionary_btn.setObjectName("GM_clear_update_dictionary_btn") self.GM_clear_update_dictionary_btn.setStyleSheet("QPushButton::hover" "{" "background-color:orange;" "}") self.tabWidget.addTab(self.GlobalModify, "") ############################################################################################################# # TIME SHIFT # Time Shift Tab self.TimeShift = QtWidgets.QWidget() self.TimeShift.setObjectName("TimeShift") # Time Shift Tab -- Current Data Directories Frame self.TS_dd_frame = QtWidgets.QFrame(self.TimeShift) self.TS_dd_frame.setGeometry(QtCore.QRect(-2, 5, 721, 41)) self.TS_dd_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.TS_dd_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.TS_dd_frame.setObjectName("TS_dd_frame") # Time Shift Tab -- Data Directories Label self.TS_cdd_label = QtWidgets.QLabel(self.TimeShift) self.TS_cdd_label.setGeometry(QtCore.QRect(8, 17, 165, 17)) self.TS_cdd_label.setObjectName("TS_cdd_label") # Time Shift Tab -- File Directory text self.TS_textEdit = QtWidgets.QTextEdit(self.TimeShift) self.TS_textEdit.setGeometry(QtCore.QRect(183, 13, 522, 25)) self.TS_textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.TS_textEdit.setAcceptRichText(False) self.TS_textEdit.setObjectName("TS_textEdit") # Time Shift Tab -- How To Treat Existing Corrections Frame self.TS_ec_frame = QtWidgets.QFrame(self.TimeShift) self.TS_ec_frame.setGeometry(QtCore.QRect(-2, 53, 721, 41)) self.TS_ec_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.TS_ec_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.TS_ec_frame.setObjectName("TS_fos_frame") # Time Shift Tab -- How To Treat Existing Corrections Label self.TS_ec_label = QtWidgets.QLabel(self.TimeShift) self.TS_ec_label.setGeometry(QtCore.QRect(8, 65, 280, 17)) self.TS_ec_label.setObjectName("TS_existing_corrections_label") # Time Shift Tab -- Add To radio button self.TS_add_to_rbtn = QtWidgets.QRadioButton(self.TimeShift) self.TS_add_to_rbtn.setGeometry(QtCore.QRect(240, 63, 70, 23)) self.TS_add_to_rbtn.setObjectName("TS_add_to_rbtn") self.TS_add_to_rbtn.setChecked(True) # Time Shift Tab -- Replace radio button self.TS__replace_rbtn = QtWidgets.QRadioButton(self.TimeShift) self.TS__replace_rbtn.setGeometry(QtCore.QRect(320, 63, 71, 23)) self.TS__replace_rbtn.setObjectName("TS__replace_rbtn") # Time Shift Tab -- Undo Time Corrections button self.TS_undo_tc_btn = QtWidgets.QPushButton(self.TimeShift) self.TS_undo_tc_btn.setGeometry(QtCore.QRect(540, 61, 165, 25)) self.TS_undo_tc_btn.setObjectName("TS_undo_tc_btn") self.TS_undo_tc_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234); } QPushButton::hover{ background-color:green; } """) # Time Shift Tab -- hidden self.TS_frame = QtWidgets.QFrame(self.TimeShift) self.TS_frame.setGeometry(QtCore.QRect(-2, 100, 730, 200)) self.TS_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.TS_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.TS_frame.setObjectName("TS_frame") self.TS_frame.hide() self.TS_for_traces_matching = QtWidgets.QLabel(self.TimeShift) self.TS_for_traces_matching.setGeometry(QtCore.QRect(101, 100, 150, 40)) self.TS_for_traces_matching.setObjectName("TS_for_traces_matching") self.TS_for_traces_matching.hide() self.TS_stat_loc_net = QtWidgets.QLabel(self.TimeShift) self.TS_stat_loc_net.setGeometry(QtCore.QRect(8, 125, 150, 40)) self.TS_stat_loc_net.setObjectName("TS_stat_loc_net") self.TS_stat_loc_net.hide() self.TS_textEdit1 = QtWidgets.QTextEdit(self.TimeShift) self.TS_textEdit1.setGeometry(QtCore.QRect(100, 135, 150, 20)) self.TS_textEdit1.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.TS_textEdit1.setAcceptRichText(False) self.TS_textEdit1.hide() self.TS_checkBox = QtWidgets.QCheckBox(self.TimeShift) self.TS_checkBox.setGeometry(QtCore.QRect(101, 160, 180, 23)) self.TS_checkBox.setObjectName("TS_checkBox") self.TS_checkBox.setChecked(False) self.TS_checkBox.hide() self.TS_time_shift = QtWidgets.QLabel(self.TimeShift) self.TS_time_shift.setGeometry(QtCore.QRect(431, 100, 150, 40)) self.TS_time_shift.setObjectName("TS_time_shift") self.TS_time_shift.hide() self.TS_applied = QtWidgets.QLabel(self.TimeShift) self.TS_applied.setGeometry(QtCore.QRect(600, 100, 150, 40)) self.TS_applied.setObjectName("TS_applied") self.TS_applied.hide() self.TS_start_time = QtWidgets.QLabel(self.TimeShift) self.TS_start_time.setGeometry(QtCore.QRect(351, 125, 150, 40)) self.TS_start_time.setObjectName("TS_start_time") self.TS_start_time.hide() self.TS_textEdit2 = QtWidgets.QTextEdit(self.TimeShift) self.TS_textEdit2.setGeometry(QtCore.QRect(430, 135, 150, 20)) self.TS_textEdit2.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.TS_textEdit2.setAcceptRichText(False) self.TS_textEdit2.hide() self.TS_end_time = QtWidgets.QLabel(self.TimeShift) self.TS_end_time.setGeometry(QtCore.QRect(358, 150, 150, 40)) self.TS_end_time.setObjectName("TS_end_time") self.TS_end_time.hide() self.TS_textEdit3 = QtWidgets.QTextEdit(self.TimeShift) self.TS_textEdit3.setGeometry(QtCore.QRect(430, 160, 150, 20)) self.TS_textEdit3.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.TS_textEdit3.setAcceptRichText(False) self.TS_textEdit3.hide() self.TS_time_shift_sec = QtWidgets.QLabel(self.TimeShift) self.TS_time_shift_sec.setGeometry(QtCore.QRect(324, 175, 150, 40)) self.TS_time_shift_sec.setObjectName("TS_time_shift_sec") self.TS_time_shift_sec.hide() self.TS_textEdit4 = QtWidgets.QTextEdit(self.TimeShift) self.TS_textEdit4.setGeometry(QtCore.QRect(430, 185, 150, 20)) self.TS_textEdit4.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.TS_textEdit4.setAcceptRichText(False) self.TS_textEdit4.hide() self.TS_tt_questionable = QtWidgets.QLabel(self.TimeShift) self.TS_tt_questionable.setGeometry(QtCore.QRect(257, 200, 165, 40)) self.TS_tt_questionable.setObjectName("TS_tt_questionable") self.TS_tt_questionable.hide() self.TS_textEdit5 = QtWidgets.QTextEdit(self.TimeShift) self.TS_textEdit5.setGeometry(QtCore.QRect(430, 210, 150, 20)) self.TS_textEdit5.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.TS_textEdit5.setAcceptRichText(False) self.TS_textEdit5.hide() # Time Shift Tab - List Time Corrections button self.TS_list_time_corrections_btn = QtWidgets.QPushButton(self.TimeShift) self.TS_list_time_corrections_btn.setGeometry(QtCore.QRect(50, 368, 161, 25)) self.TS_list_time_corrections_btn.setObjectName("TS_list_time_corrections_btn") self.TS_list_time_corrections_btn.setStyleSheet("QPushButton::hover" "{" "background-color:green;" "}") # Time Shift Tab - Apply Time Corrections button self.TS_apply_time_correction_btn = QtWidgets.QPushButton(self.TimeShift) self.TS_apply_time_correction_btn.setGeometry(QtCore.QRect(210, 368, 161, 25)) self.TS_apply_time_correction_btn.setObjectName("TS_apply_time_correction_btn") self.TS_apply_time_correction_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) # Time Shift Tab - Time Set button self.TS_time_set_btn = QtWidgets.QPushButton(self.TimeShift) self.TS_time_set_btn.setGeometry(QtCore.QRect(370, 368, 83, 25)) self.TS_time_set_btn.setObjectName("TS_time_set_btn") self.TS_time_set_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) # Time Shift Tab - Recalc Start/End button self.TS_recalc_start_end_btn = QtWidgets.QPushButton(self.TimeShift) self.TS_recalc_start_end_btn.setGeometry(QtCore.QRect(450, 368, 131, 25)) self.TS_recalc_start_end_btn.setObjectName("TS_recalc_start_end_btn") self.TS_recalc_start_end_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) # Time Shift Tab - Clear All button self.TS_clear_all_btn = QtWidgets.QPushButton(self.TimeShift) self.TS_clear_all_btn.setGeometry(QtCore.QRect(580, 368, 83, 25)) self.TS_clear_all_btn.setObjectName("TS_clear_all_btn") self.TS_clear_all_btn.setStyleSheet("QPushButton::hover" "{" "background-color:orange;" "}") self.tabWidget.addTab(self.TimeShift, "") ############################################################################################################# # ENDIANESS # Endianess Tab self.Endianess = QtWidgets.QWidget() self.Endianess.setObjectName("Endianess") # Endianess Tab -- Current Data Directories Frame self.E_cdd_frame = QtWidgets.QFrame(self.Endianess) self.E_cdd_frame.setGeometry(QtCore.QRect(-2, 5, 721, 41)) self.E_cdd_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.E_cdd_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.E_cdd_frame.setObjectName("E_cdd_frame") # Endianess Tab -- Current Data Directories Label self.E_cdd_label = QtWidgets.QLabel(self.Endianess) self.E_cdd_label.setGeometry(QtCore.QRect(8, 17, 170, 17)) self.E_cdd_label.setObjectName("E_cdd_label") # Endianess Tab -- File Directory text self.E_cdd_textEdit = QtWidgets.QTextEdit(self.Endianess) self.E_cdd_textEdit.setGeometry(QtCore.QRect(183, 13, 522, 25)) self.E_cdd_textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.E_cdd_textEdit.setAcceptRichText(False) self.E_cdd_textEdit.setObjectName("E_cdd_textEdit") # Endianess Tab -- Endian Files Found Frame self.E_files_frame = QtWidgets.QFrame(self.Endianess) self.E_files_frame.setGeometry(QtCore.QRect(-2, 53, 721, 73)) self.E_files_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.E_files_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.E_files_frame.setObjectName("E_files_frame") # Endianess Tab -- Little Endian Files Found Label self.E_little_label = QtWidgets.QLabel(self.Endianess) self.E_little_label.setGeometry(QtCore.QRect(8, 65, 170, 17)) self.E_cdd_label.setObjectName("E_little_label") # Endianess Tab -- Little Endian Files Found text self.E_little_textEdit = QtWidgets.QTextEdit(self.Endianess) self.E_little_textEdit.setGeometry(QtCore.QRect(180, 65, 70, 17)) self.E_little_textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.E_little_textEdit.setAcceptRichText(False) self.E_little_textEdit.setObjectName("E_little_textEdit") # Endianess Tab -- Convert to Big button self.E_ctb_btn = QtWidgets.QPushButton(self.Endianess) self.E_ctb_btn.setGeometry(QtCore.QRect(261, 61, 120, 25)) self.E_ctb_btn.setObjectName("E_ctb_btn") self.E_ctb_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) # Endianess Tab -- Big Endian Files Found Label self.E_big_label = QtWidgets.QLabel(self.Endianess) self.E_big_label.setGeometry(QtCore.QRect(8, 95, 170, 17)) self.E_big_label.setObjectName("E_big_label") # Endianess Tab -- Big Endian Files Found text self.E_big_textEdit = QtWidgets.QTextEdit(self.Endianess) self.E_big_textEdit.setGeometry(QtCore.QRect(180, 96, 70, 17)) self.E_big_textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.E_big_textEdit.setAcceptRichText(False) self.E_big_textEdit.setObjectName("E_big_textEdit") # Endianess Tab -- Convert to Little button self.E_ctl_btn = QtWidgets.QPushButton(self.Endianess) self.E_ctl_btn.setGeometry(QtCore.QRect(261, 93, 120, 25)) self.E_ctl_btn.setObjectName("E_ctl_btn") self.E_ctl_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) self.tabWidget.addTab(self.Endianess, "") ############################################################################################################# # LOG # Log Tab self.Log = QtWidgets.QWidget() self.Log.setObjectName("Log") # # Log Tab -- top buttons frame self.L_top_btns_frame = QtWidgets.QFrame(self.Log) self.L_top_btns_frame.setGeometry(QtCore.QRect(-2, 5, 721, 41)) self.L_top_btns_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.L_top_btns_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.L_top_btns_frame.setObjectName("top_btns_frame") # # Log Tab -- Display Messages frame self.L_display_frame = QtWidgets.QFrame(self.Log) self.L_display_frame.setGeometry(QtCore.QRect(-2, 53, 721, 41)) self.L_display_frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel) self.L_display_frame.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken) self.L_display_frame.setObjectName("L_display_frame") # Log Tab -- Print Update Dict button self.L_print_update_dict_btn = QtWidgets.QPushButton(self.Log) self.L_print_update_dict_btn.setGeometry(QtCore.QRect(350, 13, 141, 25)) self.L_print_update_dict_btn.setObjectName("L_print_update_dict_btn") self.L_print_update_dict_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234);; } QPushButton::hover{ background-color:green; } """) # Log Tab -- Save Log File button self.L_save_log_file_btn = QtWidgets.QPushButton(self.Log) self.L_save_log_file_btn.setGeometry(QtCore.QRect(490, 13, 111, 25)) self.L_save_log_file_btn.setObjectName("L_save_log_file_btn") self.L_save_log_file_btn.setStyleSheet("QPushButton::hover" "{" "background-color:green;" "}") # Log Tab -- Clear Logs button self.L_clear_logs_btn = QtWidgets.QPushButton(self.Log) self.L_clear_logs_btn.setGeometry(QtCore.QRect(600, 13, 101, 25)) self.L_clear_logs_btn.setObjectName("L_clear_logs_btn") self.L_clear_logs_btn.setStyleSheet("QPushButton::hover" "{" "background-color:rgb(165, 29, 45);" "}") # Log Tab -- Display Messages label self.L_display_messages_for_label = QtWidgets.QLabel(self.Log) self.L_display_messages_for_label.setGeometry(QtCore.QRect(8, 65, 151, 17)) self.L_display_messages_for_label.setObjectName("L_display_messages_for_label") # Log Tab -- All radio button self.L_all_rbtn = QtWidgets.QRadioButton(self.Log) self.L_all_rbtn.setGeometry(QtCore.QRect(170, 64, 41, 23)) self.L_all_rbtn.setObjectName("L_all_rbtn") self.L_all_rbtn.setChecked(True) # Log Tab -- Header radio button self.L_header_rbtn = QtWidgets.QRadioButton(self.Log) self.L_header_rbtn.setGeometry(QtCore.QRect(220, 64, 71, 23)) self.L_header_rbtn.setObjectName("L_header_rbtn") # Log Tab -- Timing radio button self.L_timing_rbtn = QtWidgets.QRadioButton(self.Log) self.L_timing_rbtn.setGeometry(QtCore.QRect(300, 64, 71, 23)) self.L_timing_rbtn.setObjectName("L_timing_rbtn") # Log Tab -- Endian radio button self.L_endian_rbtn = QtWidgets.QRadioButton(self.Log) self.L_endian_rbtn.setGeometry(QtCore.QRect(380, 64, 71, 23)) self.L_endian_rbtn.setObjectName("L_endian_rbtn") # Log Tab -- Log Message Window self.L_textBrowser = QtWidgets.QTextBrowser(self.Log) self.L_textBrowser.setGeometry(QtCore.QRect(30, 100, 661, 296)) font = QtGui.QFont() font.setFamily("DejaVu Sans") self.L_textBrowser.setFont(font) self.L_textBrowser.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.L_textBrowser.setObjectName("L_textBrowser") self.tabWidget.addTab(self.Log, "") ############################################################################################################# # HELP # Help Tab self.Help = QtWidgets.QWidget() self.Help.setObjectName("Help") # Template Format popup window self.popup = QtWidgets.QMainWindow() self.popup.setWindowTitle("Template Format") self.popup.resize(750, 480) self.popup.setObjectName("popup") self.popup_textBrowser = QtWidgets.QTextBrowser(self.popup) self.popup_textBrowser.setGeometry(QtCore.QRect(26, 25, 700, 400)) self.popup_textBrowser.setObjectName("textBrowser") self.done_btn = QtWidgets.QPushButton(self.popup) self.done_btn.setGeometry(QtCore.QRect(340, 440, 83, 25)) self.done_btn.setObjectName("done_btn") self.done_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234); } QPushButton::hover{ background-color:rgb(165, 29, 45); } """) self.done_btn.clicked.connect(self.popup.close) self.popup.hide() # Help Tab - Template Format button self.H_template_format_btn = QtWidgets.QPushButton(self.Help) self.H_template_format_btn.setGeometry(QtCore.QRect(570, 10, 131, 25)) self.H_template_format_btn.setObjectName("H_template_format_btn") self.H_template_format_btn.setStyleSheet(""" QPushButton{ background-color:rgb(98, 160, 234); } QPushButton::hover{ background-color:green; } """) self.H_template_format_btn.clicked.connect(self.template_format_window) self.H_textBrowser = QtWidgets.QTextBrowser(self.Help) self.H_textBrowser.setGeometry(QtCore.QRect(30, 46, 661, 325)) font = QtGui.QFont() font.setFamily("DejaVu Sans") self.H_textBrowser.setFont(font) self.H_textBrowser.setAcceptRichText(True) self.H_textBrowser.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.CursorShape.SizeVerCursor)) self.H_textBrowser.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarPolicy.ScrollBarAlwaysOff) self.H_textBrowser.setObjectName("H_textBrowser") self.tabWidget.addTab(self.Help, "") ############################################################################################################# # MSEED format # MSEED format Tab self.MSEEDformat = QtWidgets.QWidget() self.MSEEDformat.setObjectName("MSEEDformat") self.M_textBrowser = QtWidgets.QTextBrowser(self.MSEEDformat) self.M_textBrowser.setGeometry(QtCore.QRect(30, 30, 661, 341)) font = QtGui.QFont() font.setFamily("DejaVu Sans") self.M_textBrowser.setFont(font) self.M_textBrowser.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.CursorShape.SizeVerCursor)) self.M_textBrowser.setObjectName("M_textBrowser") self.tabWidget.addTab(self.MSEEDformat, "") ############################################################################################################# # PopUp Help Check box self.checkBox = QtWidgets.QCheckBox(Window) self.checkBox.setGeometry(QtCore.QRect(10, 459, 101, 23)) self.checkBox.setObjectName("checkBox") self.checkBox.setToolTip("Toggles 'PopUp Help' on and off") #self.checkBox.setChecked(True) self.checkBox.clicked.connect(self.click_help_popup) ############################################################################################################# # calls retranslateUi self.retranslateUi(Window) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(Window) ############################################################################################################# def retranslateUi(self, Window): _translate = QtCore.QCoreApplication.translate Window.setWindowTitle(_translate("Window", "fixhdr " + VERSION)) self.load_template_btn.setText(_translate("Window", "Load Template")) self.save_template_btn.setText(_translate("Window", "Save Template")) self.exit_btn.setText(_translate("Window", "Exit")) # Trace Headers Tab self.stat_chan.setText(_translate("Window", "Stat:Chan:Loc:Net:Sps:")) self.stat_name.setText(_translate("Window", "Station_name")) self.channel.setText(_translate("Window", "Channel")) self.loc_code.setText(_translate("Window", "Location_Code")) self.net_code.setText(_translate("Window", "Network_Code")) self.smpl_rt.setText(_translate("Window", "Sample_Rate")) self.new_val.setText(_translate("Window", "New Values")) self.applied.setText(_translate("Window", "Applied")) self.TH_list_traces_btn.setText(_translate("Window", "List Traces")) self.TH_dismiss_btn.setText(_translate("TH_popup", "Dismiss")) self.TH_clear_update_dictionary_btn.setText(_translate("Window", "Clear Update Dictionary")) self.TH_clear_current_btn.setText(_translate("Window", "Clear Current")) self.TH_modify_headers_btn.setText(_translate("Window", "Modify Headers")) self.TH_data_directories_label.setText(_translate("Window", "Data Directories:")) self.textEdit.setText(_translate("Window", "" + DIRECTORY)) self.TH_fos_label.setText(_translate("Window", "Find only stations (colon separated list):")) self.TH_build_trace_btn.setText(_translate("Window", "Build Trace db")) self.TH_find_btn.setText(_translate("Window", "Find")) self.TH_clear_btn.setText(_translate("Window", "Clear")) self.TH_clear_2_btn.setText(_translate("Window", "Clear")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.TraceHeaders), _translate("Window", "Trace Headers")) # Global Modify Tab self.GM_cdd_label.setText(_translate("Window", "Current Data Directories:")) self.GM_cdd_textEdit.setText(_translate("Window", "" + DIRECTORY)) self.GM_for_headers_matching.setText(_translate("Window", "For Headers Matching:")) self.GM_sub_values.setText(_translate("Window", "Substitute Values:")) self.GM_stat_name.setText(_translate("Window", "Station_Name")) self.GM_channel.setText(_translate("Window", "Channel")) self.GM_loc_code.setText(_translate("Window", "Location_Code")) self.GM_net_code.setText(_translate("Window", "Network_Code")) self.GM_smpl_rt.setText(_translate("Window", "Sample_Rate")) self.GM_global_set_btn.setText(_translate("Window", "Global Set")) self.GM_clear_current_btn.setText(_translate("Window", "Clear Current")) self.GM_clear_update_dictionary_btn.setText(_translate("Window", "Clear Update Dictionary")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.GlobalModify), _translate("Window", "Global Modify")) # Time Shift Tab self.TS_cdd_label.setText(_translate("Window", "Current Data Directories:")) self.TS_textEdit.setText(_translate("Window", "" + DIRECTORY)) self.TS_ec_label.setText(_translate("Window", "How to Treat Existing Corrections:")) self.TS_add_to_rbtn.setText(_translate("Window", "Add To")) self.TS__replace_rbtn.setText(_translate("Window", "Replace")) self.TS_undo_tc_btn.setText(_translate("Window", "Undo Time Corrections")) self.TS_stat_loc_net.setText(_translate("Window", "Stat:Loc:Net")) self.TS_for_traces_matching.setText(_translate("Window", "For Traces Matching:")) self.TS_checkBox.setText(_translate("Window", "Wildcard Location Code")) self.TS_time_shift.setText(_translate("Window", "Time Shift:")) self.TS_start_time.setText(_translate("Window", "Start_Time")) self.TS_end_time.setText(_translate("Window", "End_Time")) self.TS_time_shift_sec.setText(_translate("Window", "Time_Shift_sec")) self.TS_tt_questionable.setText(_translate("Window", "Time Tag is questionable:")) self.TS_applied.setText(_translate("Window", "Applied")) self.TS_list_time_corrections_btn.setText(_translate("Window", "List Time Corrections")) self.TS_apply_time_correction_btn.setText(_translate("Window", "Apply Time Correction")) self.TS_time_set_btn.setText(_translate("Window", "Time Set")) self.TS_recalc_start_end_btn.setText(_translate("Window", "Recalc Start/End")) self.TS_clear_all_btn.setText(_translate("Window", "Clear All")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.TimeShift), _translate("Window", "Time Shift")) # Endianess Tab self.tabWidget.setTabText(self.tabWidget.indexOf(self.Endianess), _translate("Window", "Endianess")) self.E_cdd_textEdit.setText(_translate("Window", "" + DIRECTORY)) self.E_cdd_label.setText(_translate("Window", "Current Data Directories:")) self.E_little_label.setText(_translate("Window", "Little Endian Files Found:")) self.E_big_label.setText(_translate("Window", "Big Endian Files Found:")) self.E_little_textEdit.setText(_translate("Window", "0")) self.E_big_textEdit.setText(_translate("Window", "0")) self.E_ctb_btn.setText(_translate("Window", "Convert to Big")) self.E_ctl_btn.setText(_translate("Window", "Convert to Little")) # Log Tab self.L_print_update_dict_btn.setText(_translate("Window", "Print Update Dict")) self.L_save_log_file_btn.setText(_translate("Window", "Save Log File")) self.L_clear_logs_btn.setText(_translate("Window", "Clear Logs")) self.L_display_messages_for_label.setText(_translate("Window", "Display messages for:")) self.L_all_rbtn.setText(_translate("Window", "All")) self.L_header_rbtn.setText(_translate("Window", "Header")) self.L_timing_rbtn.setText(_translate("Window", "Timing")) self.L_endian_rbtn.setText(_translate("Window", "Endian")) self.L_textBrowser.setText(_translate("Window", "")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.Log), _translate("Window", "Log")) # Help Tab self.H_template_format_btn.setText(_translate("Window", "Template Format")) self.done_btn.setText(_translate("popup", "Done")) self.popup_textBrowser.setHtml(_translate("popup", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" "</style></head><body style=\" font-family:\'Fira Sans Semi-Light\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">The Template file consists of two lists: <span style=\" color:#a51d2d;\">hdrlist</span> and <span style=\" color:#a51d2d;\">timelist</span>. </p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">These lists are delimmited by \'{}\'. Comments are allowed in the template file and are denoted by a \'#\' in the first column.</p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">For the <span style=\" color:#a51d2d;\">hdrlist</span> the columns are:</p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">stat:chan:loc:net:sps stat:chan:loc:net</p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">For the <span style=\" color:#a51d2d;\">timelist</span> the columns are:</p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">sta:loc:net Start_time End_Time Shift(s) Time_Tag Corr_type</p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">sta:loc:net yyyy:ddd:hh:mm:ss yyyy:ddd:hh:mm:ss float/NA set/unset/Na add/replace/NA</p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">EXAMPLE:</p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> # Header Changes</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> # stat:chan:loc:net:sps stat:chan:loc:net</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> hdrlist{</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> 01053:1C4::XX:40.0 SITE:BHZ::PI</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> 01053:1C5::XX:40.0 SITE:BHN::PI</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> 01053:1C6::XX:40.0 SITE:BHE::PI</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> }</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> </span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> # Timing Corrections</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> # sta:loc:net Start_Time End_Time Shifts(s) Time_Tag Corr_Type </span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> # sta:loc:net yyyy:ddd:hh:mm:ss yyyy:ddd:hh:mm:ss float/NA set/unset/NA add/replace/Na</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> timelist{</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> 9294::SS 2005:304:00:00:00 2005:305:22:15:10 0.56 set add</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1a5fb4;\"> }</span></p></body></html>")) self.H_textBrowser.setHtml(_translate("Window", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" "</style></head><body style=\" font-family:\'DejaVu Sans\'; font-size:10pt; font-weight:400; font-style:normal;\">\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">NAME</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">fixhdr - a GUI to modify mseed header fields (\'Station Name\', \'Channel\', \'Location Code\', and \'Network Code\'), to apply time shifts and to convert header endianess.</p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">VERSION</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">2022.1.0.0</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#1c71d8;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">SYNOPSIS</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">fixhdr</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">fixhdr -#</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">fixhdr -h</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">fixhdr [-d DataDirs] [-m batch_file] [-t batch_file] [-e endianess]</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#1c71d8;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">OPTIONS</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">-# returns version number</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">-h returns usage</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">-d DataDirs colon separated list of data directories [default: cwd]</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">-m batch_file correct mseed headers in batch mode using batch_file</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">-t batch_file correct trace timing in batch mode using batch_file</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">-e endianess convert trace headers to endianess [big or little]</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">NOTE: -m, -t, & -e are mutually exclusive. If you wish to do both timing and headers, run time corrections fist.</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#1c71d8;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">DESCRIPTION</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">fixhdr has seven notebooks: </span><span style=\" color:#26a269;\">[Trace Headers]</span><span style=\" color:#000000;\">, </span><span style=\" color:#26a269;\">[Global Modify]</span><span style=\" color:#000000;\">, </span><span style=\" color:#26a269;\">[Time Shift]</span><span style=\" color:#000000;\">, </span><span style=\" color:#26a269;\">[Endianess]</span><span style=\" color:#000000;\">, </span><span style=\" color:#26a269;\">[Log]</span><span style=\" color:#000000;\">, </span><span style=\" color:#26a269;\">[Help]</span><span style=\" color:#000000;\">, and </span><span style=\" color:#26a269;\">[MSEED format]</span><span style=\" color:#000000;\">. </span><span style=\" color:#26a269;\">[Trace Headers]</span><span style=\" color:#000000;\"> and </span><span style=\" color:#26a269;\">[Global Modify]</span><span style=\" color:#000000;\"> provide a means to read and modify mseed header fields (station, channel, location code, and network code) for files found beneath a specified directory list. </span><span style=\" color:#26a269;\">[Time Shift]</span><span style=\" color:#000000;\"> allows the user to apply a bulk time shift to traces that fall between a start and end time and to set a header flag indicating that the time tag is questionable. </span><span style=\" color:#26a269;\">[Endianess] </span><span style=\" color:#000000;\">converts traces between little and big, or big and little endian headers. The </span><span style=\" color:#26a269;\">[Log]</span><span style=\" color:#000000;\"> notebook maintains records of key events.</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#26a269;\">[Root window]</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">Buttons:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Load Template></span><span style=\" color:#000000;\">: loads a previously saved or user created mapping of header and timing modification that then can be applied.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Save Template></span><span style=\" color:#000000;\">: saves a map of all header and timing modifications.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Exit></span><span style=\" color:#000000;\">: Exits fixhdr and will query if not all mappings in Update_Dictionary have been applied.</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#26a269;\">[Trace Headers]</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">General:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> specify/load directories for header investigation/modifications</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> manipulate/edit individual <sta><chn><loc><net> entries for loaded headers</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> modify trace headers as specified in the "New Value" column for _ALL_ loaded headers</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> store and recall header modification templates</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">Buttons:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Build Trace db></span><span style=\" color:#000000;\">: Searches the directories listed in the "Data-Directories" entry box (a colon separated list) and builds a list of mseed files found indexing them on unique values of <sta><chn><loc><net><sps>. You can narrow your search by entering stations in the "Find Only Stations" entry box (a colon separated file).</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Find></span><span style=\" color:#000000;\">: Launches a file browser allowing the user to add directories to the "Data Directories" entry box. Double clicking selects the new directory.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Clear></span><span style=\" color:#000000;\">: Clears the "Data Directories" entry box.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><List Traces></span><span style=\" color:#000000;\">: Lists all traces for the selected Sta:Chan:Loc:Net:Sps.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Modify Headers></span><span style=\" color:#000000;\">: Applies all current values in the Update_Dictionary (that can be viewed in the [Log] notebook) to the current trace list that was built using </span><span style=\" color:#a51d2d;\"><Clear Current></span><span style=\" color:#000000;\">: clears all entries in the Update_Dictionary and display for the currently selected sta:chan:loc:net:sps that have not been applied.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Clear All></span><span style=\" color:#000000;\">: clears all entries in the Update_Dictionary that have not been applied.</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#26a269;\">[Global Modify]</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">General:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> specify header values in "For Headers Matching:" column, using drop-down menus. Wildcards are allowed and are the default.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> enter new header values in "Substitute Values:"</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">Buttons:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Global Set></span><span style=\" color:#000000;\">: inserts the values in "Substitute Values" into the "Update_Dictionary using For Headers Matching" entries to determine which <sta><chn><loc><net><sps> to modify. This only creates entries in the dictionary and does NOT apply them to the mseed headers. You must use </span><span style=\" color:#26a269;\">[Trace Headers]</span><span style=\" color:#000000;\">-></span><span style=\" color:#a51d2d;\"><Modify Headers></span><span style=\" color:#000000;\"> to apply these updates. </span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Clear All></span><span style=\" color:#000000;\">: clears all current entries. This does not affect the Update_Dictionary.</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#26a269;\">[Time Shift]</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">General:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> specify header values in "For Traces Matching:" column, using drop-down menus. Once selected first and last sample times will be displayed. The start and end time can be changed.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> enter time in seconds to be added to the blockette start times in then "Time_Shift_sec" window.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>>"Time Tag is questionable" allows you to flip a bit in the Data Quality flags in the mseed file\'s Fixed Section of Data Header</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> "Applied" indicators notify a user when corrections have been applied in this instance of fixhdr. </span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">Buttons:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><How to Treat Existing Correction></span><span style=\" color:#000000;\">: you can choose to either add to any correction listed in the Fixed Header or Replace any existing correction with the one entered.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Undo Time Corrections></span><span style=\" color:#000000;\">: Allows user to un-apply previously applied timing corrections. Note: Use with caution. This will only remove single and cumulative corrections. Review \'List Time Corrections\' to better understand corrections already applied to trace headers.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><List Time Corrections></span><span style=\" color:#000000;\">: Displays time corrections doe traces matching the selected Stat:Loc:Net key.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Apply Time Correction></span><span style=\" color:#000000;\">: Applies updates from <List Time Corrections>.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Time Set></span><span style=\" color:#000000;\">: Allows user to build a dictionary of timing corrections to be applied with the "Apply Time Corrections" button. ie. timing corrections for multiple Stat:Loc:Net selections can be set prior to applying in a single instance.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Recalc Start/End></span><span style=\" color:#000000;\">: resets the start and end times from the trace headers. The first time a trace is read in the start and end times are cached for future use. If you change these times, this button is used to update the cache and display.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Clear All></span><span style=\" color:#000000;\">: clears all current entries.</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#26a269;\">[Endianess]</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">General:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">>> displays the number of big and little endian files found. Allows user to convert between big and little endian headers.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">Buttons:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Convert to Big></span><span style=\" color:#000000;\">: Converts header from little to big endian</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Convert to Little></span><span style=\" color:#000000;\">: Converts headers from big to little endian</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#000000;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#26a269;\">[Log]</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">General:<br />>> displays key events (e.g. "Build Trace db", "Modify Headers", etc). Radio buttons allow you to select all log messages or window only those messages related to Header events, Time events, or changes in endianess.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">Buttons:</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Dump UpdateHdrDict></span><span style=\" color:#000000;\">: Dumps the current values in the Update_Dictionary and indicates whether or not they have been applied (i.e. <Modify Headers> has been run).</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Save Log File></span><span style=\" color:#000000;\">: Saves text window to an output file.</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#a51d2d;\"><Clear Log File></span><span style=\" color:#000000;\">: Clears text window and flushes buffer.</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#1c71d8;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">KEYWORDS</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">mseed; header information; header modification</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#1c71d8;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">SEE ALSO</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">mseedhdr & SEED manual</span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; color:#1c71d8;\"><br /></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#1c71d8;\">AUTHOR</span></p>\n" "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" color:#000000;\">Bruce Beaudoin <bruce@passcal.nmt.edu></span></p>\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p></body></html>")) self.H_textBrowser.setPlaceholderText(_translate("Window", "Testing")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.Help), _translate("Window", "Help")) # MSEED format Tab self.M_textBrowser.setText(_translate("Window", """ Appendix A From "SEED Reference Manual, v2.3, Feb. 1993: Channel Naming Contributed by Scott Halbert Seismologists have used many conventions for naming channels. Usually, these conventions are designed to meet the particular needs of one network. But general recording systems - such as the various Global Seismographic Network (GSN) systems that can record many channels at high sample rates - create a need for a standard to handle the variety of instruments that can be recorded. Modern instrumentation and the need for conformity among cooperating networks have greatly complicated the problem. Sensors are available in narrow band and broadband configurations with pass bands in very different parts of the spectrum of interest. Each sensor may have several different outputs with different spectral shaping. In addition, station processors often derive several data streams from one sensor channel by digital filtering. These possibilities require a comprehensive convention. The desire to combine data from cooperating networks and to search for like channels automatically requires standardization. The SEED format uses three letters to name seismic channels, and three letters to name weather or environmental channels. In the following convention, each letter describes one aspect of the instrumentation and its digitization. SEED does not require this convention, but we recommend it as a usage standard for Federation members to facilitate data exchange. Band Code The first letter specifies the general sampling rate and the response band of the instrument. (The "A" code is reserved for administrative functions such as miscellaneous state of health.) Band code Band type Sample rate (Hz) Corner period (sec) E Extremely Short Period >= 80 < 10 sec S Short Period >= 10 to < 80 < 10 sec H High Broad Band >= 80 >= 10 sec B Broad Band >= 10 to < 80 >= 10 sec M Mid Period > 1 to < 10 L Long Period ~ 1 V Very Long Period ~ 0.1 U Ultra Long Period ~ 0.01 R Extremely Long Period ~ 0.001 A Administrative W Weather/Environmental X Experimental Instrument Code and Orientation Code The second letter specifies the family to which the sensor belongs. The third letter specifies the physical configuration of the members of a multiple axis instrument package or other parameters as specified for each instrument. Seismometer: Measures displacement/velocity/acceleration along a line defined by the dip and azimuth. Instrument Code H High Gain Seismometer L Low Gain Seismometer G Gravimeter M Mass Position Seismometer N* Accelerometer *historically some channels from accelerometers have used instrumentation codes of L and G. The use of N is the FDSN convention as defined in August 2000. Orientation Code Z N E Traditional (Vertical, North-South, East-West) A B C Triaxial (Along the edges of a cube turned up on a corner) T R For formed beams (Transverse, Radial) 1 2 3 Orthogonal components but non traditional orientations U V W Optional components Dip/Azimuth: Ground motion vector (reverse dip/azimuth if signal polarity incorrect) Signal Units: M, M/S, M/S**2, (for G & M) M/S**2 (usually) Channel Flags: G Tilt Meter: Measures tilt from the horizontal plane. Azimuth is typically N/S or E/W. Instrument Code A Orientation Code N E Traditional Dip/Azimuth: Ground motion vector (reverse dip/azimuth if signal polarity incorrect) Signal Units: Radians Channel Flags: G Creep Meter: Measures the absolute movement between two sides of a fault by means of fixing a metal beam on one side of the fault and measuring its position on the other side. This is also done with light beams. The orientation and therefore the dip and azimuth would be perpendicular to the measuring beam (light or metal), which would be along the average travel vector for the fault. Positive/Negative travel would be arbitrary, but would be noted in the dip/azimuth. Another type of Creep Meter involves using a wire that is stretched across the fault. Changes in wire length are triangulated to form movement vector. Instrument Code B Orientation Code Unknown Dip/Azimuth: Along the fault or wire vector Signal Units: M Channel Flags: G Calibration Input: Usually only used for seismometers or other magnetic coil instruments. This signal monitors the input signal to the coil to be used in response evaluation. Usually tied to a specific instrument. Sometimes all instruments are calibrated together, sometimes horizontals are done separately from verticals. Instrument Code C Orientation Code A B C D... for when there are only a few cal sources for many devices. Blank if there is only one calibrator at a time or, Match Calibrated Channel (i.s. Z, N or E) Pressure: A barometer, or microbarometer measures pressure. Used to measure the weather pressure or sometimes for state of health monitoring down hole. This includes infrasonic and hydrophone measurements. Instrument Code D Orientation Code O Outside I Inside D Down Hole F Infrasound H Hydrophone U Underground Dip/Azimuth: Not applicable - Should be zero. Signal Units: Pa (Pascals) Channel Flags: W or H Electronic Test Point: Used to monitor circuitry inside recording system, local power or seismometer. Usually for power supply voltages, or line voltages. Instrument Code E Orientation code Designate as desired, make mnemonic as possible, use numbers for test points, etc. Dip/Azimuth: Not applicableSignal Units: V, A, Hz, Etc. Channel Flags: H Magnetometer: Measures the magnetic field where the instrument is sitting. They measure the part of the field vector which is aligned with the measurement coil. Many magnetometers are three axis. The instrument will typically be oriented to local magnetic north. The dip and azimuth should describe this in terms of the geographic north. Example: Local magnetic north is 13 degrees east of north in Albuquerque. So if the magnetometer is pointed to magnetic north, the azimuth would be + 103 for the E channel. Some magnetometers do not record any vector quantity associated with the signal, but record the total intensity. So, these would not have any dip/azimuth. Instrument Code F Orientation Code Z N E Magnetic Signal Units: T - Teslas Channel Flags: G Humidity: Absolute/Relative measurements of the humidity. Temperature recordings may also be essential for meaningful results. Instrument Code I Orientation Code O Outside Environment I Inside Building D Down Hole 1 2 3 4 Cabinet Sources All other letters available for mnemonic source types. Dip/Azimuth: Not applicable - Should be zero. Signal Units: % Channel Flags: W Temperature: Measurement of the temperature at some location. Typically used for measuring: 1. Weather - Outside Temperature 2. State of Health - Inside recording building - Down hole - Inside electronics Instrument Code K Orientation Code O Outside Environment I Inside Building D Down Hole 1 2 3 4 Cabinet sources All other letters available for mnemonic types. Dip Azimuth: Not applicable - Should be zero. Signal Units: deg C or deg K Channel Flags: W or H Water Current: This measurement measures the velocity of water in a given direction. The measurement may be at depth, within a borehole, or a variety of other locations. Instrument Code O Orientation Code Unknown Dip/Azimuth: Along current direction Signal Units: M/S Channel Flags: G Geophone: Very short period seismometer, with natural frequency 5 - 10 Hz or higher. Instrument Code P Orientation Code Z N E Traditional Dip/Azimuth: Ground Motion Vector (Reverse dip/azimuth if signal polarity incorrect) Signal Units: M, M/S, M/S Channel Flags: G Electric Potential: Measures the Electric Potential between two points. This is normally done using a high impedance voltmeter connected to two electrodes driven into the ground. In the case of magnetotelleuric work, this is one parameter that must be measured. Instrument Code Q Orientation Code Unknown Signal Units: V - Volts Channel Flags: G Rainfall: Measures total rainfall, or an amount per sampling interval. Instrument Code R Orientation Code Unknown Dip/Azimuth: Not applicable - Should be zero. Signal Units: M, M/S Channel Flags: W Linear Strain: One typical application is to build a very sensitive displacement measuring device, typically a long quartz rod. One end is affixed to a wall. On the free end, a pylon from the floor reaches up to the rod where something measures the position of the pylon on the rod (like a large LVDT). There are also some interferometry projects which measure distance with lasers. Dip/Azimuth are the line of the movement being measured. Positive values are obtained when stress/distance increases, negative, when they decrease. Instrument Code S Orientation Code Z N E Vertical, North-South, East-West Dip/Azimuth: Along axis of instrument Signal Units: M/M Channel Flags: G Tide : Not to be confused with lunar tidal filters or gravimeter output. Tide instruments measure the depth of the water at the monitoring site. Instrument Code T Orientation Code Z Always vertical Dip/Azimuth: Always vertical Signal Units: M - Relative to sea level or local ocean depth Channel Flags: G Bolometer: Infrared instrument used to evaluate average cloud cover. Used in astronomy to determine observability of sky. Instrument Code U Orientation Code Unknown Dip/Azimuth: Not applicable - Should be zero. . Signal Units: Unknown Channel Flags: W Volumetric Strain: Unknown Instrument Code V Orientation Code Unknown Dip/Azimuth: Not Applicable - Should be zero. Signal Units: M**3/M**3 Channel Flags: G Wind: Measures the wind vector or velocity. Normal notion of dip and azimuth does not apply. Instrument Code W Orientation Code S Wind speed D Wind Direction Vector - Relative to geographic North Dip/Azimuth: Not Applicable - Should be zero. Channel Flags: W Synthesized Beams: This is used when forming beams from individual elements of an array. Refer to blockettes 35, 400, & 405. Instrument Code Z Orientation Code I Incoherent Beam C Coherent Beam F FK Beam O Origin Beam Dip/Azimuth: Ground motion vector (reverse dip/azimuth if signal polarity incorrect) Signal Units: M, M/S, M/S**2, (for G & M) M/S**2 (usually) Channel Flags: G Channel Code We suggest that two sequences be reserved for special channels the "LOG" channel for the console log, and the "SOH" channel for the main state of health channel. Subsidiary logs and state of health channels should begin with the "A" code; the source and orientation fields can then be used in any way. Here are some typical channel arrangements used by a GSN system: Channel Description EHZ/EHN/EHE Short Period 100 sps BHZ/BHN/BHE Broad Band 20 sps LHZ/LHN/LHE Long Period 1 sps VHZ/VHN/VHE Very Long Period 0.1 sps BCI Broad Band Calibration Signal ECI Short Period Cal LOG Console Log NOTE: Log Records: Log records has a channel identifier code of "LOG" and a sample rate of zero. The number of samples field is the number of characters in the record (including the carriage return and line feed that terminates each line). Log messages are packed into records until a message falls into a new minute. Log records have no blockettes, so the strings start at offset 48. """)) self.tabWidget.setTabText(self.tabWidget.indexOf(self.MSEEDformat), _translate("Window", "MSEED format")) # PopUp Help Checkbox self.checkBox.setText(_translate("Window", "PopUp Help")) ############################################################################################################# # function for quit button def click_quit(self): quit() # function for what happens when PopUp Help is checked/unchecked def click_help_popup(self): toggle = self.checkBox.isChecked() # if checked, tool tips are visible if toggle == True: self.load_template_btn.setToolTip("Import saved header &\n" "timing corrections file") self.save_template_btn.setToolTip("Export saved header & timing corrections to file") self.exit_btn.setToolTip("Exit program") self.TH_data_directories_label.setToolTip("Search path(s) for finding mseed files.\n" "Colon separate multiple entries.") self.TH_build_trace_btn.setToolTip("Build a trace db using\n" "'Data Directories' as\n" "top level directories") self.TH_find_btn.setToolTip("Dialogue window to\n" "select Data Directories") self.TH_clear_btn.setToolTip("Clears 'Data Directories' entry") self.TH_clear_2_btn.setToolTip("Clear station filter") self.fos_textEdit.setToolTip("Filter trace search\n" "for these stations") self.TH_list_traces_btn.setToolTip("List traces for selected Stat:Chan:Loc:Net:Sps") self.TH_clear_update_dictionary_btn.setToolTip("Clear all updates in 'Update Dictionary'") self.TH_clear_current_btn.setToolTip("Clears entries in 'Update Dictionary' for selected Stat:Chan:Loc:Net:Sps") self.TH_modify_headers_btn.setToolTip("Modifies headers using current entries and all entries in 'Update Dictionary'") self.GM_cdd_label.setToolTip("Traces located beneath these directories") self.GM_global_set_btn.setToolTip("Add current entries to 'Update Dictionary'") self.GM_clear_current_btn.setToolTip("Clears all current entries") self.GM_clear_update_dictionary_btn.setToolTip("Clear all entries in 'Update Dictionary'") self.TS_cdd_label.setToolTip("Traces located beneath these\n" "directories") self.TS_ec_label.setToolTip("When applying time corrections:\n" "Add to existing or\n" "Zero and replace existing") self.TS_undo_tc_btn.setToolTip("Reverse applied time corrections") self.TS_list_time_corrections_btn.setToolTip("List time corrections currently in trace headers for for select Stat:Loc:Net") self.TS_apply_time_correction_btn.setToolTip("Modifies trace times using using current entries and all entries in 'Update Dictionary'") self.TS_time_set_btn.setToolTip("Add current entries to 'Update Dictionary'") self.TS_recalc_start_end_btn.setToolTip("Recalculate start and end times for selected traces") self.TS_clear_all_btn.setToolTip("Clears all current entries") self.E_cdd_label.setToolTip("Traces located beneath these directories") self.E_ctb_btn.setToolTip("Convert all little endian files\n" "to big endian") self.E_ctl_btn.setToolTip("Convert all big endian files\n" "to little endian") self.L_print_update_dict_btn.setToolTip("Print 'Update Dictionary' to log message window") self.L_save_log_file_btn.setToolTip("Save log messages to file") self.L_clear_logs_btn.setToolTip("Delete all log messages") self.L_display_messages_for_label.setToolTip("Filter log messages") self.H_template_format_btn.setToolTip("Display example format for 'Template' file") self.checkBox.setToolTip("Toggles 'PopUp Help' on and off") # if unchecked, tool tips are invisible if toggle == False: self.load_template_btn.setToolTip("") self.save_template_btn.setToolTip("") self.exit_btn.setToolTip("") self.TH_data_directories_label.setToolTip("") self.TH_build_trace_btn.setToolTip("") self.TH_find_btn.setToolTip("") self.TH_clear_btn.setToolTip("") self.TH_clear_2_btn.setToolTip("") self.fos_textEdit.setToolTip("") self.TH_list_traces_btn.setToolTip("") self.TH_clear_update_dictionary_btn.setToolTip("") self.TH_clear_current_btn.setToolTip("") self.TH_modify_headers_btn.setToolTip("") self.GM_cdd_label.setToolTip("") self.GM_global_set_btn.setToolTip("") self.GM_clear_current_btn.setToolTip("") self.GM_clear_update_dictionary_btn.setToolTip("") self.TS_cdd_label.setToolTip("") self.TS_ec_label.setToolTip("") self.TS_undo_tc_btn.setToolTip("") self.TS_list_time_corrections_btn.setToolTip("") self.TS_apply_time_correction_btn.setToolTip("") self.TS_time_set_btn.setToolTip("") self.TS_recalc_start_end_btn.setToolTip("") self.TS_clear_all_btn.setToolTip("") self.E_cdd_label.setToolTip("") self.E_ctb_btn.setToolTip("") self.E_ctl_btn.setToolTip("") self.L_print_update_dict_btn.setToolTip("") self.L_save_log_file_btn.setToolTip("") self.L_clear_logs_btn.setToolTip("") self.L_display_messages_for_label.setToolTip("") self.H_template_format_btn.setToolTip("") self.checkBox.setToolTip("") # function for clear button in TRACE HEADERS def click_TH_clear(self): _translate = QtCore.QCoreApplication.translate # clears all directory textEdits in TRACE HEADERS, # GLOBAL MODIFY, TIME SHIFT, and ENDIANESS self.textEdit.setText(_translate("Window", "")) self.GM_cdd_textEdit.setText(_translate("Window", "")) self.TS_textEdit.setText(_translate("Window", "")) self.E_cdd_textEdit.setText(_translate("Window", "")) # function for 2nd clear button in TRACE HEADERS def click_TH_clear_2(self): _translate = QtCore.QCoreApplication.translate # clears stations self.fos_textEdit.setText(_translate("Window", "")) # function for pop up Template Format window in HELP def template_format_window(self): self.popup.show() # function for file dialogue/choosing directory to search for mseed files def file_dialogue(self): # set timezone to UTC os.environ['TZ'] = 'GMT' time.tzname = ('GMT', 'GMT') time.timezone = 0 # TODO: MAKE IT LIST MULTIPLE DIRECTORIES self.search = QtWidgets.QFileDialog.getExistingDirectory() # if the user doesn't cancel the file directory popup: # updates directory in Trace Headers, Global Modify, Time Shift, # and Endianess if (self.search != ""): _translate = QtCore.QCoreApplication.translate # adds newly selected directory to Trace Headers self.textEdit.setText(_translate("Window", "" + self.search)) # updates the other textEdits in Global Modify, Time Shift, and Endianess self.GM_cdd_textEdit.setText(_translate("Window", "" + self.search)) self.TS_textEdit.setText(_translate("Window", "" + self.search)) self.E_cdd_textEdit.setText(_translate("Window", "" + self.search)) # scans chosen directory for mseed files # NOTE: it's set to identify an mseed file if it ends in '.312' # I'm not sure if this is true -- fix if false dir = os.scandir(self.search) for entry in dir: if entry.is_file(): if entry.name.endswith('.312'): print(entry.name) # function for what happens when the button List Traces # is clicked in TRACE HEADERS def click_list_traces(self): self.TH_popup.show() # function for what happens when the button Build Traces # is clicked in TRACE HEADERS def click_build_trace(self): self.frame.show() self.stat_chan.show() self.stat_name.show() self.channel.show() self.loc_code.show() self.net_code.show() self.smpl_rt.show() self.new_val.show() self.textEdit1.show() self.textEdit2.show() self.textEdit3.show() self.textEdit4.show() self.textEdit5.show() self.textEdit6.show() self.new_val.show() self.nv_textEdit1.show() self.nv_textEdit2.show() self.nv_textEdit3.show() self.nv_textEdit4.show() self.applied.show() self.GM_h_frame.show() self.GM_for_headers_matching.show() self.GM_sub_values.show() self.GM_stat_name.show() self.GM_channel.show() self.GM_loc_code.show() self.GM_net_code.show() self.GM_smpl_rt.show() self.GM_textEdit1.show() self.GM_textEdit2.show() self.GM_textEdit3.show() self.GM_textEdit4.show() self.GM_textEdit5.show() self.GM_textEdit6.show() self.GM_textEdit7.show() self.GM_textEdit8.show() self.GM_textEdit9.show() self.TS_frame.show() self.TS_stat_loc_net.show() self.TS_for_traces_matching.show() self.TS_textEdit1.show() self.TS_checkBox.show() self.TS_time_shift.show() self.TS_start_time.show() self.TS_end_time.show() self.TS_time_shift_sec.show() self.TS_tt_questionable.show() self.TS_textEdit2.show() self.TS_textEdit3.show() self.TS_textEdit4.show() self.TS_textEdit5.show() self.TS_applied.show() ############################################################################################################# if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) Window = QtWidgets.QWidget() ui = Ui_Window() ui.setupUi(Window) Window.show() sys.exit(app.exec())