diff --git a/pyside6/fixhdr.py b/pyside6/fixhdr.py new file mode 100644 index 0000000000000000000000000000000000000000..fbece66f0e58a8dc82db501139d4dfd06b2a79ce --- /dev/null +++ b/pyside6/fixhdr.py @@ -0,0 +1,1841 @@ +#!/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())