# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'pyote.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1904, 1165)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
        MainWindow.setSizePolicy(sizePolicy)
        MainWindow.setMinimumSize(QtCore.QSize(1900, 1000))
        MainWindow.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.centralwidget.sizePolicy().hasHeightForWidth())
        self.centralwidget.setSizePolicy(sizePolicy)
        self.centralwidget.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_7 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_7.setObjectName("gridLayout_7")
        self.splitterThree = QtWidgets.QSplitter(self.centralwidget)
        self.splitterThree.setEnabled(True)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.splitterThree.sizePolicy().hasHeightForWidth())
        self.splitterThree.setSizePolicy(sizePolicy)
        self.splitterThree.setOrientation(QtCore.Qt.Vertical)
        self.splitterThree.setHandleWidth(10)
        self.splitterThree.setObjectName("splitterThree")
        self.splitterTwo = QtWidgets.QSplitter(self.splitterThree)
        self.splitterTwo.setOrientation(QtCore.Qt.Horizontal)
        self.splitterTwo.setHandleWidth(10)
        self.splitterTwo.setObjectName("splitterTwo")
        self.layoutWidget = QtWidgets.QWidget(self.splitterTwo)
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setSpacing(6)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.infoButton = QtWidgets.QPushButton(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.infoButton.sizePolicy().hasHeightForWidth())
        self.infoButton.setSizePolicy(sizePolicy)
        self.infoButton.setAutoDefault(False)
        self.infoButton.setObjectName("infoButton")
        self.gridLayout.addWidget(self.infoButton, 0, 0, 1, 1)
        self.plotHelpButton = QtWidgets.QPushButton(self.layoutWidget)
        self.plotHelpButton.setMaximumSize(QtCore.QSize(150, 16777215))
        self.plotHelpButton.setObjectName("plotHelpButton")
        self.gridLayout.addWidget(self.plotHelpButton, 0, 4, 1, 1)
        self.helpButton = QtWidgets.QPushButton(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.helpButton.sizePolicy().hasHeightForWidth())
        self.helpButton.setSizePolicy(sizePolicy)
        self.helpButton.setObjectName("helpButton")
        self.gridLayout.addWidget(self.helpButton, 0, 1, 1, 1)
        self.tutorialButton = QtWidgets.QPushButton(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.tutorialButton.sizePolicy().hasHeightForWidth())
        self.tutorialButton.setSizePolicy(sizePolicy)
        self.tutorialButton.setObjectName("tutorialButton")
        self.gridLayout.addWidget(self.tutorialButton, 0, 2, 1, 1)
        self.readData = QtWidgets.QPushButton(self.layoutWidget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Maximum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.readData.sizePolicy().hasHeightForWidth())
        self.readData.setSizePolicy(sizePolicy)
        self.readData.setToolTipDuration(-1)
        self.readData.setObjectName("readData")
        self.gridLayout.addWidget(self.readData, 0, 3, 1, 1)
        self.verticalLayout_2.addLayout(self.gridLayout)
        self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_6.setSpacing(6)
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.tabWidget = QtWidgets.QTabWidget(self.layoutWidget)
        self.tabWidget.setMovable(True)
        self.tabWidget.setObjectName("tabWidget")
        self.tab_2 = QtWidgets.QWidget()
        self.tab_2.setObjectName("tab_2")
        self.gridLayout_8 = QtWidgets.QGridLayout(self.tab_2)
        self.gridLayout_8.setObjectName("gridLayout_8")
        spacerItem = QtWidgets.QSpacerItem(378, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_8.addItem(spacerItem, 0, 0, 1, 1)
        self.lightcurvesHelpButton = QtWidgets.QPushButton(self.tab_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.lightcurvesHelpButton.sizePolicy().hasHeightForWidth())
        self.lightcurvesHelpButton.setSizePolicy(sizePolicy)
        self.lightcurvesHelpButton.setMinimumSize(QtCore.QSize(200, 60))
        self.lightcurvesHelpButton.setObjectName("lightcurvesHelpButton")
        self.gridLayout_8.addWidget(self.lightcurvesHelpButton, 0, 1, 1, 2)
        spacerItem1 = QtWidgets.QSpacerItem(296, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_8.addItem(spacerItem1, 0, 3, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(20, 25, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.gridLayout_8.addItem(spacerItem2, 1, 2, 1, 1)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label_30 = QtWidgets.QLabel(self.tab_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_30.sizePolicy().hasHeightForWidth())
        self.label_30.setSizePolicy(sizePolicy)
        self.label_30.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.label_30.setTextFormat(QtCore.Qt.PlainText)
        self.label_30.setObjectName("label_30")
        self.horizontalLayout.addWidget(self.label_30)
        spacerItem3 = QtWidgets.QSpacerItem(124, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem3)
        self.label_33 = QtWidgets.QLabel(self.tab_2)
        self.label_33.setMinimumSize(QtCore.QSize(200, 0))
        self.label_33.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.label_33.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_33.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_33.setObjectName("label_33")
        self.horizontalLayout.addWidget(self.label_33)
        self.yOffsetStep10radioButton = QtWidgets.QRadioButton(self.tab_2)
        self.yOffsetStep10radioButton.setChecked(True)
        self.yOffsetStep10radioButton.setObjectName("yOffsetStep10radioButton")
        self.horizontalLayout.addWidget(self.yOffsetStep10radioButton)
        self.yOffsetStep100radioButton = QtWidgets.QRadioButton(self.tab_2)
        self.yOffsetStep100radioButton.setObjectName("yOffsetStep100radioButton")
        self.horizontalLayout.addWidget(self.yOffsetStep100radioButton)
        self.yOffsetStep1000radioButton = QtWidgets.QRadioButton(self.tab_2)
        self.yOffsetStep1000radioButton.setObjectName("yOffsetStep1000radioButton")
        self.horizontalLayout.addWidget(self.yOffsetStep1000radioButton)
        spacerItem4 = QtWidgets.QSpacerItem(140, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem4)
        self.gridLayout_8.addLayout(self.horizontalLayout, 2, 0, 1, 4)
        self.verticalLayout_8 = QtWidgets.QVBoxLayout()
        self.verticalLayout_8.setObjectName("verticalLayout_8")
        self.horizontalLayout_28 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_28.setObjectName("horizontalLayout_28")
        self.label_36 = QtWidgets.QLabel(self.tab_2)
        self.label_36.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_36.setText("")
        self.label_36.setObjectName("label_36")
        self.horizontalLayout_28.addWidget(self.label_36)
        self.targetCheckBox_1 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_1.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_1.setText("")
        self.targetCheckBox_1.setObjectName("targetCheckBox_1")
        self.horizontalLayout_28.addWidget(self.targetCheckBox_1)
        spacerItem5 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_28.addItem(spacerItem5)
        self.referenceCheckBox_1 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_1.setText("")
        self.referenceCheckBox_1.setObjectName("referenceCheckBox_1")
        self.horizontalLayout_28.addWidget(self.referenceCheckBox_1)
        spacerItem6 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_28.addItem(spacerItem6)
        self.showCheckBox_1 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_1.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_1.setText("")
        self.showCheckBox_1.setObjectName("showCheckBox_1")
        self.horizontalLayout_28.addWidget(self.showCheckBox_1)
        self.label_56 = QtWidgets.QLabel(self.tab_2)
        self.label_56.setText("")
        self.label_56.setObjectName("label_56")
        self.horizontalLayout_28.addWidget(self.label_56)
        self.lightcurveTitle_1 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_1.setReadOnly(True)
        self.lightcurveTitle_1.setObjectName("lightcurveTitle_1")
        self.horizontalLayout_28.addWidget(self.lightcurveTitle_1)
        self.colorBlob0 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob0.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob0.setStyleSheet("color: rgb(255, 0, 0)")
        self.colorBlob0.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob0.setLineWidth(20)
        self.colorBlob0.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob0.setObjectName("colorBlob0")
        self.horizontalLayout_28.addWidget(self.colorBlob0)
        self.yOffsetLabel1 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel1.setObjectName("yOffsetLabel1")
        self.horizontalLayout_28.addWidget(self.yOffsetLabel1)
        self.yOffsetSpinBox_1 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_1.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_1.setMinimum(-9999999)
        self.yOffsetSpinBox_1.setMaximum(9999999)
        self.yOffsetSpinBox_1.setSingleStep(10)
        self.yOffsetSpinBox_1.setObjectName("yOffsetSpinBox_1")
        self.horizontalLayout_28.addWidget(self.yOffsetSpinBox_1)
        self.xOffsetLabel1 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel1.setObjectName("xOffsetLabel1")
        self.horizontalLayout_28.addWidget(self.xOffsetLabel1)
        self.xOffsetSpinBox_1 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_1.setEnabled(False)
        self.xOffsetSpinBox_1.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_1.setMinimum(-99999)
        self.xOffsetSpinBox_1.setMaximum(99999)
        self.xOffsetSpinBox_1.setSingleStep(1)
        self.xOffsetSpinBox_1.setObjectName("xOffsetSpinBox_1")
        self.horizontalLayout_28.addWidget(self.xOffsetSpinBox_1)
        self.verticalLayout_8.addLayout(self.horizontalLayout_28)
        self.horizontalLayout_29 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_29.setObjectName("horizontalLayout_29")
        self.label_37 = QtWidgets.QLabel(self.tab_2)
        self.label_37.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_37.setText("")
        self.label_37.setObjectName("label_37")
        self.horizontalLayout_29.addWidget(self.label_37)
        self.targetCheckBox_2 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_2.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_2.setText("")
        self.targetCheckBox_2.setObjectName("targetCheckBox_2")
        self.horizontalLayout_29.addWidget(self.targetCheckBox_2)
        spacerItem7 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_29.addItem(spacerItem7)
        self.referenceCheckBox_2 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_2.setText("")
        self.referenceCheckBox_2.setObjectName("referenceCheckBox_2")
        self.horizontalLayout_29.addWidget(self.referenceCheckBox_2)
        spacerItem8 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_29.addItem(spacerItem8)
        self.showCheckBox_2 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_2.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_2.setText("")
        self.showCheckBox_2.setObjectName("showCheckBox_2")
        self.horizontalLayout_29.addWidget(self.showCheckBox_2)
        self.label_57 = QtWidgets.QLabel(self.tab_2)
        self.label_57.setText("")
        self.label_57.setObjectName("label_57")
        self.horizontalLayout_29.addWidget(self.label_57)
        self.lightcurveTitle_2 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_2.setReadOnly(True)
        self.lightcurveTitle_2.setObjectName("lightcurveTitle_2")
        self.horizontalLayout_29.addWidget(self.lightcurveTitle_2)
        self.colorBlob1 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob1.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob1.setStyleSheet("color: rgb(160,32,255)")
        self.colorBlob1.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob1.setLineWidth(20)
        self.colorBlob1.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob1.setObjectName("colorBlob1")
        self.horizontalLayout_29.addWidget(self.colorBlob1)
        self.yOffsetLabel2 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel2.setObjectName("yOffsetLabel2")
        self.horizontalLayout_29.addWidget(self.yOffsetLabel2)
        self.yOffsetSpinBox_2 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_2.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_2.setMinimum(-9999999)
        self.yOffsetSpinBox_2.setMaximum(9999999)
        self.yOffsetSpinBox_2.setSingleStep(10)
        self.yOffsetSpinBox_2.setObjectName("yOffsetSpinBox_2")
        self.horizontalLayout_29.addWidget(self.yOffsetSpinBox_2)
        self.xOffsetLabel2 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel2.setObjectName("xOffsetLabel2")
        self.horizontalLayout_29.addWidget(self.xOffsetLabel2)
        self.xOffsetSpinBox_2 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_2.setEnabled(False)
        self.xOffsetSpinBox_2.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_2.setMinimum(-99999)
        self.xOffsetSpinBox_2.setMaximum(99999)
        self.xOffsetSpinBox_2.setSingleStep(1)
        self.xOffsetSpinBox_2.setObjectName("xOffsetSpinBox_2")
        self.horizontalLayout_29.addWidget(self.xOffsetSpinBox_2)
        self.verticalLayout_8.addLayout(self.horizontalLayout_29)
        self.horizontalLayout_30 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_30.setObjectName("horizontalLayout_30")
        self.label_40 = QtWidgets.QLabel(self.tab_2)
        self.label_40.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_40.setText("")
        self.label_40.setObjectName("label_40")
        self.horizontalLayout_30.addWidget(self.label_40)
        self.targetCheckBox_3 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_3.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_3.setText("")
        self.targetCheckBox_3.setObjectName("targetCheckBox_3")
        self.horizontalLayout_30.addWidget(self.targetCheckBox_3)
        spacerItem9 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_30.addItem(spacerItem9)
        self.referenceCheckBox_3 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_3.setText("")
        self.referenceCheckBox_3.setObjectName("referenceCheckBox_3")
        self.horizontalLayout_30.addWidget(self.referenceCheckBox_3)
        spacerItem10 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_30.addItem(spacerItem10)
        self.showCheckBox_3 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_3.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_3.setText("")
        self.showCheckBox_3.setObjectName("showCheckBox_3")
        self.horizontalLayout_30.addWidget(self.showCheckBox_3)
        self.label_58 = QtWidgets.QLabel(self.tab_2)
        self.label_58.setText("")
        self.label_58.setObjectName("label_58")
        self.horizontalLayout_30.addWidget(self.label_58)
        self.lightcurveTitle_3 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_3.setReadOnly(True)
        self.lightcurveTitle_3.setObjectName("lightcurveTitle_3")
        self.horizontalLayout_30.addWidget(self.lightcurveTitle_3)
        self.colorBlob2 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob2.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob2.setBaseSize(QtCore.QSize(20, 0))
        self.colorBlob2.setStyleSheet("color: rgb(80,208,255)")
        self.colorBlob2.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob2.setLineWidth(20)
        self.colorBlob2.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob2.setObjectName("colorBlob2")
        self.horizontalLayout_30.addWidget(self.colorBlob2)
        self.yOffsetLabel3 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel3.setObjectName("yOffsetLabel3")
        self.horizontalLayout_30.addWidget(self.yOffsetLabel3)
        self.yOffsetSpinBox_3 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_3.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_3.setMinimum(-9999999)
        self.yOffsetSpinBox_3.setMaximum(9999999)
        self.yOffsetSpinBox_3.setSingleStep(10)
        self.yOffsetSpinBox_3.setObjectName("yOffsetSpinBox_3")
        self.horizontalLayout_30.addWidget(self.yOffsetSpinBox_3)
        self.xOffsetLabel3 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel3.setObjectName("xOffsetLabel3")
        self.horizontalLayout_30.addWidget(self.xOffsetLabel3)
        self.xOffsetSpinBox_3 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_3.setEnabled(False)
        self.xOffsetSpinBox_3.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_3.setMinimum(-99999)
        self.xOffsetSpinBox_3.setMaximum(99999)
        self.xOffsetSpinBox_3.setSingleStep(1)
        self.xOffsetSpinBox_3.setObjectName("xOffsetSpinBox_3")
        self.horizontalLayout_30.addWidget(self.xOffsetSpinBox_3)
        self.verticalLayout_8.addLayout(self.horizontalLayout_30)
        self.horizontalLayout_31 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_31.setObjectName("horizontalLayout_31")
        self.label_42 = QtWidgets.QLabel(self.tab_2)
        self.label_42.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_42.setText("")
        self.label_42.setObjectName("label_42")
        self.horizontalLayout_31.addWidget(self.label_42)
        self.targetCheckBox_4 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_4.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_4.setText("")
        self.targetCheckBox_4.setObjectName("targetCheckBox_4")
        self.horizontalLayout_31.addWidget(self.targetCheckBox_4)
        spacerItem11 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_31.addItem(spacerItem11)
        self.referenceCheckBox_4 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_4.setText("")
        self.referenceCheckBox_4.setObjectName("referenceCheckBox_4")
        self.horizontalLayout_31.addWidget(self.referenceCheckBox_4)
        spacerItem12 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_31.addItem(spacerItem12)
        self.showCheckBox_4 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_4.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_4.setText("")
        self.showCheckBox_4.setObjectName("showCheckBox_4")
        self.horizontalLayout_31.addWidget(self.showCheckBox_4)
        self.label_59 = QtWidgets.QLabel(self.tab_2)
        self.label_59.setText("")
        self.label_59.setObjectName("label_59")
        self.horizontalLayout_31.addWidget(self.label_59)
        self.lightcurveTitle_4 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_4.setReadOnly(True)
        self.lightcurveTitle_4.setObjectName("lightcurveTitle_4")
        self.horizontalLayout_31.addWidget(self.lightcurveTitle_4)
        self.colorBlob3 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob3.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob3.setStyleSheet("color: rgb(96,255,128)")
        self.colorBlob3.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob3.setLineWidth(20)
        self.colorBlob3.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob3.setObjectName("colorBlob3")
        self.horizontalLayout_31.addWidget(self.colorBlob3)
        self.yOffsetLabel4 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel4.setObjectName("yOffsetLabel4")
        self.horizontalLayout_31.addWidget(self.yOffsetLabel4)
        self.yOffsetSpinBox_4 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_4.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_4.setMinimum(-9999999)
        self.yOffsetSpinBox_4.setMaximum(9999999)
        self.yOffsetSpinBox_4.setSingleStep(10)
        self.yOffsetSpinBox_4.setObjectName("yOffsetSpinBox_4")
        self.horizontalLayout_31.addWidget(self.yOffsetSpinBox_4)
        self.xOffsetLabel4 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel4.setObjectName("xOffsetLabel4")
        self.horizontalLayout_31.addWidget(self.xOffsetLabel4)
        self.xOffsetSpinBox_4 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_4.setEnabled(False)
        self.xOffsetSpinBox_4.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_4.setMinimum(-99999)
        self.xOffsetSpinBox_4.setMaximum(99999)
        self.xOffsetSpinBox_4.setSingleStep(1)
        self.xOffsetSpinBox_4.setObjectName("xOffsetSpinBox_4")
        self.horizontalLayout_31.addWidget(self.xOffsetSpinBox_4)
        self.verticalLayout_8.addLayout(self.horizontalLayout_31)
        self.horizontalLayout_32 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_32.setObjectName("horizontalLayout_32")
        self.label_44 = QtWidgets.QLabel(self.tab_2)
        self.label_44.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_44.setText("")
        self.label_44.setObjectName("label_44")
        self.horizontalLayout_32.addWidget(self.label_44)
        self.targetCheckBox_5 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_5.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_5.setText("")
        self.targetCheckBox_5.setObjectName("targetCheckBox_5")
        self.horizontalLayout_32.addWidget(self.targetCheckBox_5)
        spacerItem13 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_32.addItem(spacerItem13)
        self.referenceCheckBox_5 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_5.setText("")
        self.referenceCheckBox_5.setObjectName("referenceCheckBox_5")
        self.horizontalLayout_32.addWidget(self.referenceCheckBox_5)
        spacerItem14 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_32.addItem(spacerItem14)
        self.showCheckBox_5 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_5.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_5.setText("")
        self.showCheckBox_5.setObjectName("showCheckBox_5")
        self.horizontalLayout_32.addWidget(self.showCheckBox_5)
        self.label_60 = QtWidgets.QLabel(self.tab_2)
        self.label_60.setText("")
        self.label_60.setObjectName("label_60")
        self.horizontalLayout_32.addWidget(self.label_60)
        self.lightcurveTitle_5 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_5.setReadOnly(True)
        self.lightcurveTitle_5.setObjectName("lightcurveTitle_5")
        self.horizontalLayout_32.addWidget(self.lightcurveTitle_5)
        self.colorBlob4 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob4.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob4.setStyleSheet("color: rgb(255,224,32)")
        self.colorBlob4.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob4.setLineWidth(20)
        self.colorBlob4.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob4.setObjectName("colorBlob4")
        self.horizontalLayout_32.addWidget(self.colorBlob4)
        self.yOffsetLabel5 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel5.setObjectName("yOffsetLabel5")
        self.horizontalLayout_32.addWidget(self.yOffsetLabel5)
        self.yOffsetSpinBox_5 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_5.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_5.setMinimum(-9999999)
        self.yOffsetSpinBox_5.setMaximum(9999999)
        self.yOffsetSpinBox_5.setSingleStep(10)
        self.yOffsetSpinBox_5.setObjectName("yOffsetSpinBox_5")
        self.horizontalLayout_32.addWidget(self.yOffsetSpinBox_5)
        self.xOffsetLabel5 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel5.setObjectName("xOffsetLabel5")
        self.horizontalLayout_32.addWidget(self.xOffsetLabel5)
        self.xOffsetSpinBox_5 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_5.setEnabled(False)
        self.xOffsetSpinBox_5.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_5.setMinimum(-99999)
        self.xOffsetSpinBox_5.setMaximum(99999)
        self.xOffsetSpinBox_5.setSingleStep(1)
        self.xOffsetSpinBox_5.setObjectName("xOffsetSpinBox_5")
        self.horizontalLayout_32.addWidget(self.xOffsetSpinBox_5)
        self.verticalLayout_8.addLayout(self.horizontalLayout_32)
        self.horizontalLayout_33 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_33.setObjectName("horizontalLayout_33")
        self.label_46 = QtWidgets.QLabel(self.tab_2)
        self.label_46.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_46.setText("")
        self.label_46.setObjectName("label_46")
        self.horizontalLayout_33.addWidget(self.label_46)
        self.targetCheckBox_6 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_6.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_6.setText("")
        self.targetCheckBox_6.setObjectName("targetCheckBox_6")
        self.horizontalLayout_33.addWidget(self.targetCheckBox_6)
        spacerItem15 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_33.addItem(spacerItem15)
        self.referenceCheckBox_6 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_6.setText("")
        self.referenceCheckBox_6.setObjectName("referenceCheckBox_6")
        self.horizontalLayout_33.addWidget(self.referenceCheckBox_6)
        spacerItem16 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_33.addItem(spacerItem16)
        self.showCheckBox_6 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_6.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_6.setText("")
        self.showCheckBox_6.setObjectName("showCheckBox_6")
        self.horizontalLayout_33.addWidget(self.showCheckBox_6)
        self.label_61 = QtWidgets.QLabel(self.tab_2)
        self.label_61.setText("")
        self.label_61.setObjectName("label_61")
        self.horizontalLayout_33.addWidget(self.label_61)
        self.lightcurveTitle_6 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_6.setReadOnly(True)
        self.lightcurveTitle_6.setObjectName("lightcurveTitle_6")
        self.horizontalLayout_33.addWidget(self.lightcurveTitle_6)
        self.colorBlob5 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob5.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob5.setStyleSheet("color: rgb(255,160,16)")
        self.colorBlob5.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob5.setLineWidth(29)
        self.colorBlob5.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob5.setObjectName("colorBlob5")
        self.horizontalLayout_33.addWidget(self.colorBlob5)
        self.yOffsetLabel6 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel6.setObjectName("yOffsetLabel6")
        self.horizontalLayout_33.addWidget(self.yOffsetLabel6)
        self.yOffsetSpinBox_6 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_6.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_6.setMinimum(-9999999)
        self.yOffsetSpinBox_6.setMaximum(9999999)
        self.yOffsetSpinBox_6.setSingleStep(10)
        self.yOffsetSpinBox_6.setObjectName("yOffsetSpinBox_6")
        self.horizontalLayout_33.addWidget(self.yOffsetSpinBox_6)
        self.xOffsetLabel6 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel6.setObjectName("xOffsetLabel6")
        self.horizontalLayout_33.addWidget(self.xOffsetLabel6)
        self.xOffsetSpinBox_6 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_6.setEnabled(False)
        self.xOffsetSpinBox_6.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_6.setMinimum(-99999)
        self.xOffsetSpinBox_6.setMaximum(99999)
        self.xOffsetSpinBox_6.setSingleStep(1)
        self.xOffsetSpinBox_6.setObjectName("xOffsetSpinBox_6")
        self.horizontalLayout_33.addWidget(self.xOffsetSpinBox_6)
        self.verticalLayout_8.addLayout(self.horizontalLayout_33)
        self.horizontalLayout_34 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_34.setObjectName("horizontalLayout_34")
        self.label_48 = QtWidgets.QLabel(self.tab_2)
        self.label_48.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_48.setText("")
        self.label_48.setObjectName("label_48")
        self.horizontalLayout_34.addWidget(self.label_48)
        self.targetCheckBox_7 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_7.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_7.setText("")
        self.targetCheckBox_7.setObjectName("targetCheckBox_7")
        self.horizontalLayout_34.addWidget(self.targetCheckBox_7)
        spacerItem17 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_34.addItem(spacerItem17)
        self.referenceCheckBox_7 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_7.setText("")
        self.referenceCheckBox_7.setObjectName("referenceCheckBox_7")
        self.horizontalLayout_34.addWidget(self.referenceCheckBox_7)
        spacerItem18 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_34.addItem(spacerItem18)
        self.showCheckBox_7 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_7.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_7.setText("")
        self.showCheckBox_7.setObjectName("showCheckBox_7")
        self.horizontalLayout_34.addWidget(self.showCheckBox_7)
        self.label_62 = QtWidgets.QLabel(self.tab_2)
        self.label_62.setText("")
        self.label_62.setObjectName("label_62")
        self.horizontalLayout_34.addWidget(self.label_62)
        self.lightcurveTitle_7 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_7.setReadOnly(True)
        self.lightcurveTitle_7.setObjectName("lightcurveTitle_7")
        self.horizontalLayout_34.addWidget(self.lightcurveTitle_7)
        self.colorBlob6 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob6.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob6.setStyleSheet("color: rgb(160,128,96)")
        self.colorBlob6.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob6.setLineWidth(20)
        self.colorBlob6.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob6.setObjectName("colorBlob6")
        self.horizontalLayout_34.addWidget(self.colorBlob6)
        self.yOffsetLabel7 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel7.setObjectName("yOffsetLabel7")
        self.horizontalLayout_34.addWidget(self.yOffsetLabel7)
        self.yOffsetSpinBox_7 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_7.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_7.setMinimum(-9999999)
        self.yOffsetSpinBox_7.setMaximum(9999999)
        self.yOffsetSpinBox_7.setSingleStep(10)
        self.yOffsetSpinBox_7.setObjectName("yOffsetSpinBox_7")
        self.horizontalLayout_34.addWidget(self.yOffsetSpinBox_7)
        self.xOffsetLabel7 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel7.setObjectName("xOffsetLabel7")
        self.horizontalLayout_34.addWidget(self.xOffsetLabel7)
        self.xOffsetSpinBox_7 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_7.setEnabled(False)
        self.xOffsetSpinBox_7.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_7.setMinimum(-99999)
        self.xOffsetSpinBox_7.setMaximum(99999)
        self.xOffsetSpinBox_7.setSingleStep(1)
        self.xOffsetSpinBox_7.setObjectName("xOffsetSpinBox_7")
        self.horizontalLayout_34.addWidget(self.xOffsetSpinBox_7)
        self.verticalLayout_8.addLayout(self.horizontalLayout_34)
        self.horizontalLayout_35 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_35.setObjectName("horizontalLayout_35")
        self.label_50 = QtWidgets.QLabel(self.tab_2)
        self.label_50.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_50.setText("")
        self.label_50.setObjectName("label_50")
        self.horizontalLayout_35.addWidget(self.label_50)
        self.targetCheckBox_8 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_8.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_8.setText("")
        self.targetCheckBox_8.setObjectName("targetCheckBox_8")
        self.horizontalLayout_35.addWidget(self.targetCheckBox_8)
        spacerItem19 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_35.addItem(spacerItem19)
        self.referenceCheckBox_8 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_8.setText("")
        self.referenceCheckBox_8.setObjectName("referenceCheckBox_8")
        self.horizontalLayout_35.addWidget(self.referenceCheckBox_8)
        spacerItem20 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_35.addItem(spacerItem20)
        self.showCheckBox_8 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_8.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_8.setText("")
        self.showCheckBox_8.setObjectName("showCheckBox_8")
        self.horizontalLayout_35.addWidget(self.showCheckBox_8)
        self.label_63 = QtWidgets.QLabel(self.tab_2)
        self.label_63.setText("")
        self.label_63.setObjectName("label_63")
        self.horizontalLayout_35.addWidget(self.label_63)
        self.lightcurveTitle_8 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_8.setReadOnly(True)
        self.lightcurveTitle_8.setObjectName("lightcurveTitle_8")
        self.horizontalLayout_35.addWidget(self.lightcurveTitle_8)
        self.colorBlob7 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob7.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob7.setStyleSheet("color: rgb(64,64,64)")
        self.colorBlob7.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob7.setLineWidth(20)
        self.colorBlob7.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob7.setObjectName("colorBlob7")
        self.horizontalLayout_35.addWidget(self.colorBlob7)
        self.yOffsetLabel8 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel8.setObjectName("yOffsetLabel8")
        self.horizontalLayout_35.addWidget(self.yOffsetLabel8)
        self.yOffsetSpinBox_8 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_8.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_8.setMinimum(-9999999)
        self.yOffsetSpinBox_8.setMaximum(9999999)
        self.yOffsetSpinBox_8.setSingleStep(10)
        self.yOffsetSpinBox_8.setObjectName("yOffsetSpinBox_8")
        self.horizontalLayout_35.addWidget(self.yOffsetSpinBox_8)
        self.xOffsetLabel8 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel8.setObjectName("xOffsetLabel8")
        self.horizontalLayout_35.addWidget(self.xOffsetLabel8)
        self.xOffsetSpinBox_8 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_8.setEnabled(False)
        self.xOffsetSpinBox_8.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_8.setMinimum(-99999)
        self.xOffsetSpinBox_8.setMaximum(99999)
        self.xOffsetSpinBox_8.setSingleStep(1)
        self.xOffsetSpinBox_8.setObjectName("xOffsetSpinBox_8")
        self.horizontalLayout_35.addWidget(self.xOffsetSpinBox_8)
        self.verticalLayout_8.addLayout(self.horizontalLayout_35)
        self.horizontalLayout_36 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_36.setObjectName("horizontalLayout_36")
        self.label_52 = QtWidgets.QLabel(self.tab_2)
        self.label_52.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_52.setText("")
        self.label_52.setObjectName("label_52")
        self.horizontalLayout_36.addWidget(self.label_52)
        self.targetCheckBox_9 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_9.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_9.setText("")
        self.targetCheckBox_9.setObjectName("targetCheckBox_9")
        self.horizontalLayout_36.addWidget(self.targetCheckBox_9)
        spacerItem21 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_36.addItem(spacerItem21)
        self.referenceCheckBox_9 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_9.setText("")
        self.referenceCheckBox_9.setObjectName("referenceCheckBox_9")
        self.horizontalLayout_36.addWidget(self.referenceCheckBox_9)
        spacerItem22 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_36.addItem(spacerItem22)
        self.showCheckBox_9 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_9.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_9.setText("")
        self.showCheckBox_9.setObjectName("showCheckBox_9")
        self.horizontalLayout_36.addWidget(self.showCheckBox_9)
        self.label_64 = QtWidgets.QLabel(self.tab_2)
        self.label_64.setText("")
        self.label_64.setObjectName("label_64")
        self.horizontalLayout_36.addWidget(self.label_64)
        self.lightcurveTitle_9 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_9.setReadOnly(True)
        self.lightcurveTitle_9.setObjectName("lightcurveTitle_9")
        self.horizontalLayout_36.addWidget(self.lightcurveTitle_9)
        self.colorBlob8 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob8.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob8.setStyleSheet("color: rgb(255,208,160)")
        self.colorBlob8.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob8.setLineWidth(20)
        self.colorBlob8.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob8.setObjectName("colorBlob8")
        self.horizontalLayout_36.addWidget(self.colorBlob8)
        self.yOffsetLabel9 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel9.setObjectName("yOffsetLabel9")
        self.horizontalLayout_36.addWidget(self.yOffsetLabel9)
        self.yOffsetSpinBox_9 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_9.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_9.setMinimum(-9999999)
        self.yOffsetSpinBox_9.setMaximum(9999999)
        self.yOffsetSpinBox_9.setSingleStep(10)
        self.yOffsetSpinBox_9.setObjectName("yOffsetSpinBox_9")
        self.horizontalLayout_36.addWidget(self.yOffsetSpinBox_9)
        self.xOffsetLabel9 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel9.setObjectName("xOffsetLabel9")
        self.horizontalLayout_36.addWidget(self.xOffsetLabel9)
        self.xOffsetSpinBox_9 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_9.setEnabled(False)
        self.xOffsetSpinBox_9.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_9.setMinimum(-99999)
        self.xOffsetSpinBox_9.setMaximum(99999)
        self.xOffsetSpinBox_9.setSingleStep(1)
        self.xOffsetSpinBox_9.setObjectName("xOffsetSpinBox_9")
        self.horizontalLayout_36.addWidget(self.xOffsetSpinBox_9)
        self.verticalLayout_8.addLayout(self.horizontalLayout_36)
        self.horizontalLayout_37 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_37.setObjectName("horizontalLayout_37")
        self.label_54 = QtWidgets.QLabel(self.tab_2)
        self.label_54.setMaximumSize(QtCore.QSize(8, 16777215))
        self.label_54.setText("")
        self.label_54.setObjectName("label_54")
        self.horizontalLayout_37.addWidget(self.label_54)
        self.targetCheckBox_10 = QtWidgets.QCheckBox(self.tab_2)
        self.targetCheckBox_10.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.targetCheckBox_10.setText("")
        self.targetCheckBox_10.setObjectName("targetCheckBox_10")
        self.horizontalLayout_37.addWidget(self.targetCheckBox_10)
        spacerItem23 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_37.addItem(spacerItem23)
        self.referenceCheckBox_10 = QtWidgets.QCheckBox(self.tab_2)
        self.referenceCheckBox_10.setText("")
        self.referenceCheckBox_10.setObjectName("referenceCheckBox_10")
        self.horizontalLayout_37.addWidget(self.referenceCheckBox_10)
        spacerItem24 = QtWidgets.QSpacerItem(30, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_37.addItem(spacerItem24)
        self.showCheckBox_10 = QtWidgets.QCheckBox(self.tab_2)
        self.showCheckBox_10.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.showCheckBox_10.setText("")
        self.showCheckBox_10.setObjectName("showCheckBox_10")
        self.horizontalLayout_37.addWidget(self.showCheckBox_10)
        self.label_65 = QtWidgets.QLabel(self.tab_2)
        self.label_65.setText("")
        self.label_65.setObjectName("label_65")
        self.horizontalLayout_37.addWidget(self.label_65)
        self.lightcurveTitle_10 = QtWidgets.QLineEdit(self.tab_2)
        self.lightcurveTitle_10.setReadOnly(True)
        self.lightcurveTitle_10.setObjectName("lightcurveTitle_10")
        self.horizontalLayout_37.addWidget(self.lightcurveTitle_10)
        self.colorBlob9 = QtWidgets.QFrame(self.tab_2)
        self.colorBlob9.setMinimumSize(QtCore.QSize(20, 0))
        self.colorBlob9.setStyleSheet("color: rgb(0,128,0)")
        self.colorBlob9.setFrameShadow(QtWidgets.QFrame.Plain)
        self.colorBlob9.setLineWidth(20)
        self.colorBlob9.setFrameShape(QtWidgets.QFrame.VLine)
        self.colorBlob9.setObjectName("colorBlob9")
        self.horizontalLayout_37.addWidget(self.colorBlob9)
        self.yOffsetLabel10 = QtWidgets.QLabel(self.tab_2)
        self.yOffsetLabel10.setObjectName("yOffsetLabel10")
        self.horizontalLayout_37.addWidget(self.yOffsetLabel10)
        self.yOffsetSpinBox_10 = QtWidgets.QSpinBox(self.tab_2)
        self.yOffsetSpinBox_10.setMinimumSize(QtCore.QSize(80, 0))
        self.yOffsetSpinBox_10.setMinimum(-9999999)
        self.yOffsetSpinBox_10.setMaximum(9999999)
        self.yOffsetSpinBox_10.setSingleStep(10)
        self.yOffsetSpinBox_10.setObjectName("yOffsetSpinBox_10")
        self.horizontalLayout_37.addWidget(self.yOffsetSpinBox_10)
        self.xOffsetLabel10 = QtWidgets.QLabel(self.tab_2)
        self.xOffsetLabel10.setObjectName("xOffsetLabel10")
        self.horizontalLayout_37.addWidget(self.xOffsetLabel10)
        self.xOffsetSpinBox_10 = QtWidgets.QSpinBox(self.tab_2)
        self.xOffsetSpinBox_10.setEnabled(False)
        self.xOffsetSpinBox_10.setMinimumSize(QtCore.QSize(80, 0))
        self.xOffsetSpinBox_10.setMinimum(-99999)
        self.xOffsetSpinBox_10.setMaximum(99999)
        self.xOffsetSpinBox_10.setSingleStep(1)
        self.xOffsetSpinBox_10.setObjectName("xOffsetSpinBox_10")
        self.horizontalLayout_37.addWidget(self.xOffsetSpinBox_10)
        self.verticalLayout_8.addLayout(self.horizontalLayout_37)
        self.gridLayout_8.addLayout(self.verticalLayout_8, 3, 0, 1, 4)
        spacerItem25 = QtWidgets.QSpacerItem(143, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_8.addItem(spacerItem25, 3, 4, 1, 1)
        spacerItem26 = QtWidgets.QSpacerItem(20, 13, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.gridLayout_8.addItem(spacerItem26, 4, 0, 1, 1)
        spacerItem27 = QtWidgets.QSpacerItem(133, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_8.addItem(spacerItem27, 5, 4, 1, 1)
        spacerItem28 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_8.addItem(spacerItem28, 6, 1, 1, 1)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.smoothingLabel = QtWidgets.QLabel(self.tab_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.smoothingLabel.sizePolicy().hasHeightForWidth())
        self.smoothingLabel.setSizePolicy(sizePolicy)
        self.smoothingLabel.setMinimumSize(QtCore.QSize(0, 0))
        self.smoothingLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.smoothingLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.smoothingLabel.setObjectName("smoothingLabel")
        self.horizontalLayout_2.addWidget(self.smoothingLabel)
        self.smoothingIntervalSpinBox = QtWidgets.QSpinBox(self.tab_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.smoothingIntervalSpinBox.sizePolicy().hasHeightForWidth())
        self.smoothingIntervalSpinBox.setSizePolicy(sizePolicy)
        self.smoothingIntervalSpinBox.setMinimumSize(QtCore.QSize(60, 0))
        self.smoothingIntervalSpinBox.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.smoothingIntervalSpinBox.setMaximum(9999)
        self.smoothingIntervalSpinBox.setSingleStep(2)
        self.smoothingIntervalSpinBox.setObjectName("smoothingIntervalSpinBox")
        self.horizontalLayout_2.addWidget(self.smoothingIntervalSpinBox)
        self.label_32 = QtWidgets.QLabel(self.tab_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_32.sizePolicy().hasHeightForWidth())
        self.label_32.setSizePolicy(sizePolicy)
        self.label_32.setMinimumSize(QtCore.QSize(100, 0))
        self.label_32.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.label_32.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.label_32.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_32.setObjectName("label_32")
        self.horizontalLayout_2.addWidget(self.label_32)
        self.stepBy2radioButton = QtWidgets.QRadioButton(self.tab_2)
        self.stepBy2radioButton.setChecked(True)
        self.stepBy2radioButton.setObjectName("stepBy2radioButton")
        self.horizontalLayout_2.addWidget(self.stepBy2radioButton)
        self.stepBy10radioButton = QtWidgets.QRadioButton(self.tab_2)
        self.stepBy10radioButton.setObjectName("stepBy10radioButton")
        self.horizontalLayout_2.addWidget(self.stepBy10radioButton)
        self.stepBy100radioButton = QtWidgets.QRadioButton(self.tab_2)
        self.stepBy100radioButton.setObjectName("stepBy100radioButton")
        self.horizontalLayout_2.addWidget(self.stepBy100radioButton)
        spacerItem29 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem29)
        self.normMarkBaselineRegionButton = QtWidgets.QPushButton(self.tab_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.normMarkBaselineRegionButton.sizePolicy().hasHeightForWidth())
        self.normMarkBaselineRegionButton.setSizePolicy(sizePolicy)
        self.normMarkBaselineRegionButton.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.normMarkBaselineRegionButton.setObjectName("normMarkBaselineRegionButton")
        self.horizontalLayout_2.addWidget(self.normMarkBaselineRegionButton)
        self.clearMetricPointsButton = QtWidgets.QPushButton(self.tab_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.clearMetricPointsButton.sizePolicy().hasHeightForWidth())
        self.clearMetricPointsButton.setSizePolicy(sizePolicy)
        self.clearMetricPointsButton.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.clearMetricPointsButton.setObjectName("clearMetricPointsButton")
        self.horizontalLayout_2.addWidget(self.clearMetricPointsButton)
        self.gridLayout_8.addLayout(self.horizontalLayout_2, 5, 0, 1, 4)
        self.tabWidget.addTab(self.tab_2, "")
        self.analysisTab = QtWidgets.QWidget()
        self.analysisTab.setObjectName("analysisTab")
        self.gridLayout_4 = QtWidgets.QGridLayout(self.analysisTab)
        self.gridLayout_4.setObjectName("gridLayout_4")
        self.line_2 = QtWidgets.QFrame(self.analysisTab)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_2.setLineWidth(4)
        self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_2.setObjectName("line_2")
        self.gridLayout_4.addWidget(self.line_2, 13, 1, 1, 3)
        self.line = QtWidgets.QFrame(self.analysisTab)
        self.line.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line.setLineWidth(4)
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setObjectName("line")
        self.gridLayout_4.addWidget(self.line, 6, 1, 1, 3)
        self.singlePointDropButton = QtWidgets.QPushButton(self.analysisTab)
        self.singlePointDropButton.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.singlePointDropButton.sizePolicy().hasHeightForWidth())
        self.singlePointDropButton.setSizePolicy(sizePolicy)
        self.singlePointDropButton.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.singlePointDropButton.setObjectName("singlePointDropButton")
        self.gridLayout_4.addWidget(self.singlePointDropButton, 5, 1, 1, 1)
        self.verticalLayout_5 = QtWidgets.QVBoxLayout()
        self.verticalLayout_5.setObjectName("verticalLayout_5")
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
        self.writePlot = QtWidgets.QPushButton(self.analysisTab)
        self.writePlot.setEnabled(False)
        self.writePlot.setObjectName("writePlot")
        self.horizontalLayout_5.addWidget(self.writePlot)
        self.writeBarPlots = QtWidgets.QPushButton(self.analysisTab)
        self.writeBarPlots.setEnabled(False)
        self.writeBarPlots.setObjectName("writeBarPlots")
        self.horizontalLayout_5.addWidget(self.writeBarPlots)
        self.writeCSVButton = QtWidgets.QPushButton(self.analysisTab)
        self.writeCSVButton.setEnabled(False)
        self.writeCSVButton.setObjectName("writeCSVButton")
        self.horizontalLayout_5.addWidget(self.writeCSVButton)
        self.verticalLayout_5.addLayout(self.horizontalLayout_5)
        self.startOver = QtWidgets.QPushButton(self.analysisTab)
        self.startOver.setEnabled(False)
        self.startOver.setObjectName("startOver")
        self.verticalLayout_5.addWidget(self.startOver)
        self.gridLayout_4.addLayout(self.verticalLayout_5, 19, 1, 1, 1)
        self.findEventLabel = QtWidgets.QLabel(self.analysisTab)
        self.findEventLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.findEventLabel.setObjectName("findEventLabel")
        self.gridLayout_4.addWidget(self.findEventLabel, 14, 1, 1, 1)
        spacerItem30 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_4.addItem(spacerItem30, 20, 3, 1, 1)
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
        self.locateEvent = QtWidgets.QPushButton(self.analysisTab)
        self.locateEvent.setEnabled(False)
        self.locateEvent.setObjectName("locateEvent")
        self.horizontalLayout_4.addWidget(self.locateEvent)
        self.calcErrBars = QtWidgets.QPushButton(self.analysisTab)
        self.calcErrBars.setEnabled(False)
        self.calcErrBars.setObjectName("calcErrBars")
        self.horizontalLayout_4.addWidget(self.calcErrBars)
        self.helpLabelForFalsePositive = QtWidgets.QLabel(self.analysisTab)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.helpLabelForFalsePositive.sizePolicy().hasHeightForWidth())
        self.helpLabelForFalsePositive.setSizePolicy(sizePolicy)
        self.helpLabelForFalsePositive.setMinimumSize(QtCore.QSize(10, 0))
        self.helpLabelForFalsePositive.setText("")
        self.helpLabelForFalsePositive.setObjectName("helpLabelForFalsePositive")
        self.horizontalLayout_4.addWidget(self.helpLabelForFalsePositive)
        self.fillExcelReportButton = QtWidgets.QPushButton(self.analysisTab)
        self.fillExcelReportButton.setEnabled(False)
        self.fillExcelReportButton.setObjectName("fillExcelReportButton")
        self.horizontalLayout_4.addWidget(self.fillExcelReportButton)
        self.gridLayout_4.addLayout(self.horizontalLayout_4, 15, 1, 1, 1)
        self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_7.setObjectName("horizontalLayout_7")
        self.progressBar = QtWidgets.QProgressBar(self.analysisTab)
        self.progressBar.setProperty("value", 0)
        self.progressBar.setObjectName("progressBar")
        self.horizontalLayout_7.addWidget(self.progressBar)
        self.cancelButton = QtWidgets.QPushButton(self.analysisTab)
        self.cancelButton.setObjectName("cancelButton")
        self.horizontalLayout_7.addWidget(self.cancelButton)
        self.gridLayout_4.addLayout(self.horizontalLayout_7, 17, 1, 1, 1)
        self.horizontalLayout_42 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_42.setObjectName("horizontalLayout_42")
        self.doBlockIntegration = QtWidgets.QPushButton(self.analysisTab)
        self.doBlockIntegration.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.doBlockIntegration.sizePolicy().hasHeightForWidth())
        self.doBlockIntegration.setSizePolicy(sizePolicy)
        self.doBlockIntegration.setObjectName("doBlockIntegration")
        self.horizontalLayout_42.addWidget(self.doBlockIntegration)
        self.blockSizeEdit = QtWidgets.QLineEdit(self.analysisTab)
        self.blockSizeEdit.setEnabled(False)
        self.blockSizeEdit.setMaximumSize(QtCore.QSize(40, 16777215))
        self.blockSizeEdit.setObjectName("blockSizeEdit")
        self.horizontalLayout_42.addWidget(self.blockSizeEdit)
        self.blockSizeLabel = QtWidgets.QLabel(self.analysisTab)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.blockSizeLabel.sizePolicy().hasHeightForWidth())
        self.blockSizeLabel.setSizePolicy(sizePolicy)
        self.blockSizeLabel.setMaximumSize(QtCore.QSize(80, 16777215))
        self.blockSizeLabel.setObjectName("blockSizeLabel")
        self.horizontalLayout_42.addWidget(self.blockSizeLabel)
        self.gridLayout_4.addLayout(self.horizontalLayout_42, 2, 1, 1, 1)
        self.minMaxLabel = QtWidgets.QLabel(self.analysisTab)
        self.minMaxLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.minMaxLabel.setObjectName("minMaxLabel")
        self.gridLayout_4.addWidget(self.minMaxLabel, 11, 1, 1, 1)
        self.acceptBlockIntegration = QtWidgets.QPushButton(self.analysisTab)
        self.acceptBlockIntegration.setEnabled(False)
        self.acceptBlockIntegration.setObjectName("acceptBlockIntegration")
        self.gridLayout_4.addWidget(self.acceptBlockIntegration, 3, 1, 1, 1)
        spacerItem31 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_4.addItem(spacerItem31, 12, 4, 1, 1)
        self.line_6 = QtWidgets.QFrame(self.analysisTab)
        self.line_6.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_6.setLineWidth(4)
        self.line_6.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_6.setObjectName("line_6")
        self.gridLayout_4.addWidget(self.line_6, 18, 1, 1, 3)
        self.horizontalLayout_46 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_46.setObjectName("horizontalLayout_46")
        spacerItem32 = QtWidgets.QSpacerItem(200, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_46.addItem(spacerItem32)
        self.helpSqWaveButton = QtWidgets.QPushButton(self.analysisTab)
        self.helpSqWaveButton.setObjectName("helpSqWaveButton")
        self.horizontalLayout_46.addWidget(self.helpSqWaveButton)
        spacerItem33 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_46.addItem(spacerItem33)
        self.gridLayout_4.addLayout(self.horizontalLayout_46, 1, 1, 1, 1)
        self.setDataLimits = QtWidgets.QPushButton(self.analysisTab)
        self.setDataLimits.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.setDataLimits.sizePolicy().hasHeightForWidth())
        self.setDataLimits.setSizePolicy(sizePolicy)
        self.setDataLimits.setToolTipDuration(-1)
        self.setDataLimits.setObjectName("setDataLimits")
        self.gridLayout_4.addWidget(self.setDataLimits, 4, 1, 1, 1)
        spacerItem34 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_4.addItem(spacerItem34, 0, 2, 1, 1)
        self.horizontalLayout_12 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_12.setObjectName("horizontalLayout_12")
        self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_10.setObjectName("horizontalLayout_10")
        spacerItem35 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_10.addItem(spacerItem35)
        self.minEventLabel = QtWidgets.QLabel(self.analysisTab)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.minEventLabel.sizePolicy().hasHeightForWidth())
        self.minEventLabel.setSizePolicy(sizePolicy)
        self.minEventLabel.setMinimumSize(QtCore.QSize(50, 0))
        self.minEventLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.minEventLabel.setObjectName("minEventLabel")
        self.horizontalLayout_10.addWidget(self.minEventLabel)
        self.minEventEdit = QtWidgets.QLineEdit(self.analysisTab)
        self.minEventEdit.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.minEventEdit.sizePolicy().hasHeightForWidth())
        self.minEventEdit.setSizePolicy(sizePolicy)
        self.minEventEdit.setMinimumSize(QtCore.QSize(0, 0))
        self.minEventEdit.setMaximumSize(QtCore.QSize(70, 16777215))
        self.minEventEdit.setObjectName("minEventEdit")
        self.horizontalLayout_10.addWidget(self.minEventEdit)
        self.horizontalLayout_12.addLayout(self.horizontalLayout_10)
        spacerItem36 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_12.addItem(spacerItem36)
        self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_11.setObjectName("horizontalLayout_11")
        self.maxEventLabel = QtWidgets.QLabel(self.analysisTab)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.maxEventLabel.sizePolicy().hasHeightForWidth())
        self.maxEventLabel.setSizePolicy(sizePolicy)
        self.maxEventLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.maxEventLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.maxEventLabel.setObjectName("maxEventLabel")
        self.horizontalLayout_11.addWidget(self.maxEventLabel)
        self.maxEventEdit = QtWidgets.QLineEdit(self.analysisTab)
        self.maxEventEdit.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.maxEventEdit.sizePolicy().hasHeightForWidth())
        self.maxEventEdit.setSizePolicy(sizePolicy)
        self.maxEventEdit.setMaximumSize(QtCore.QSize(70, 16777215))
        self.maxEventEdit.setObjectName("maxEventEdit")
        self.horizontalLayout_11.addWidget(self.maxEventEdit)
        spacerItem37 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_11.addItem(spacerItem37)
        self.horizontalLayout_12.addLayout(self.horizontalLayout_11)
        self.gridLayout_4.addLayout(self.horizontalLayout_12, 12, 1, 1, 1)
        self.horizontalLayout_43 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_43.setObjectName("horizontalLayout_43")
        self.magDropSqwaveLabel = QtWidgets.QLabel(self.analysisTab)
        self.magDropSqwaveLabel.setObjectName("magDropSqwaveLabel")
        self.horizontalLayout_43.addWidget(self.magDropSqwaveLabel)
        self.magDropSqwaveEdit = QtWidgets.QLineEdit(self.analysisTab)
        self.magDropSqwaveEdit.setEnabled(False)
        self.magDropSqwaveEdit.setMaximumSize(QtCore.QSize(80, 16777215))
        self.magDropSqwaveEdit.setObjectName("magDropSqwaveEdit")
        self.horizontalLayout_43.addWidget(self.magDropSqwaveEdit)
        self.gridLayout_4.addLayout(self.horizontalLayout_43, 7, 1, 1, 1)
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.markDzone = QtWidgets.QPushButton(self.analysisTab)
        self.markDzone.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.markDzone.sizePolicy().hasHeightForWidth())
        self.markDzone.setSizePolicy(sizePolicy)
        self.markDzone.setObjectName("markDzone")
        self.horizontalLayout_3.addWidget(self.markDzone)
        self.markRzone = QtWidgets.QPushButton(self.analysisTab)
        self.markRzone.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.markRzone.sizePolicy().hasHeightForWidth())
        self.markRzone.setSizePolicy(sizePolicy)
        self.markRzone.setObjectName("markRzone")
        self.horizontalLayout_3.addWidget(self.markRzone)
        self.markEzone = QtWidgets.QPushButton(self.analysisTab)
        self.markEzone.setEnabled(False)
        self.markEzone.setObjectName("markEzone")
        self.horizontalLayout_3.addWidget(self.markEzone)
        self.gridLayout_4.addLayout(self.horizontalLayout_3, 10, 1, 1, 1)
        self.line_3 = QtWidgets.QFrame(self.analysisTab)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.line_3.sizePolicy().hasHeightForWidth())
        self.line_3.setSizePolicy(sizePolicy)
        self.line_3.setMinimumSize(QtCore.QSize(0, 0))
        self.line_3.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_3.setLineWidth(5)
        self.line_3.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_3.setObjectName("line_3")
        self.gridLayout_4.addWidget(self.line_3, 8, 1, 1, 3)
        self.markRegionsLabel = QtWidgets.QLabel(self.analysisTab)
        self.markRegionsLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.markRegionsLabel.setObjectName("markRegionsLabel")
        self.gridLayout_4.addWidget(self.markRegionsLabel, 9, 1, 1, 1)
        spacerItem38 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_4.addItem(spacerItem38, 12, 0, 1, 1)
        self.tabWidget.addTab(self.analysisTab, "")
        self.tab_4 = QtWidgets.QWidget()
        self.tab_4.setObjectName("tab_4")
        self.vizierShowPlotButton = QtWidgets.QPushButton(self.tab_4)
        self.vizierShowPlotButton.setGeometry(QtCore.QRect(50, 410, 240, 18))
        self.vizierShowPlotButton.setMinimumSize(QtCore.QSize(240, 0))
        self.vizierShowPlotButton.setMaximumSize(QtCore.QSize(240, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vizierShowPlotButton.setFont(font)
        self.vizierShowPlotButton.setObjectName("vizierShowPlotButton")
        self.vizierExportButton = QtWidgets.QPushButton(self.tab_4)
        self.vizierExportButton.setGeometry(QtCore.QRect(300, 380, 240, 18))
        self.vizierExportButton.setMinimumSize(QtCore.QSize(240, 0))
        self.vizierExportButton.setMaximumSize(QtCore.QSize(240, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vizierExportButton.setFont(font)
        self.vizierExportButton.setObjectName("vizierExportButton")
        self.label_13 = QtWidgets.QLabel(self.tab_4)
        self.label_13.setGeometry(QtCore.QRect(60, 70, 361, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.label_13.setFont(font)
        self.label_13.setTextFormat(QtCore.Qt.AutoText)
        self.label_13.setObjectName("label_13")
        self.layoutWidget1 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget1.setGeometry(QtCore.QRect(270, 30, 101, 24))
        self.layoutWidget1.setObjectName("layoutWidget1")
        self.horizontalLayout_49 = QtWidgets.QHBoxLayout(self.layoutWidget1)
        self.horizontalLayout_49.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_49.setObjectName("horizontalLayout_49")
        self.label_11 = QtWidgets.QLabel(self.layoutWidget1)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_11.setFont(font)
        self.label_11.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_11.setObjectName("label_11")
        self.horizontalLayout_49.addWidget(self.label_11)
        self.vzDateMonthSpinner = QtWidgets.QSpinBox(self.layoutWidget1)
        self.vzDateMonthSpinner.setMinimumSize(QtCore.QSize(50, 0))
        self.vzDateMonthSpinner.setMaximumSize(QtCore.QSize(50, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzDateMonthSpinner.setFont(font)
        self.vzDateMonthSpinner.setMinimum(1)
        self.vzDateMonthSpinner.setMaximum(12)
        self.vzDateMonthSpinner.setObjectName("vzDateMonthSpinner")
        self.horizontalLayout_49.addWidget(self.vzDateMonthSpinner)
        self.layoutWidget2 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget2.setGeometry(QtCore.QRect(370, 30, 91, 24))
        self.layoutWidget2.setObjectName("layoutWidget2")
        self.horizontalLayout_50 = QtWidgets.QHBoxLayout(self.layoutWidget2)
        self.horizontalLayout_50.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_50.setObjectName("horizontalLayout_50")
        self.label_12 = QtWidgets.QLabel(self.layoutWidget2)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_12.setFont(font)
        self.label_12.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_12.setObjectName("label_12")
        self.horizontalLayout_50.addWidget(self.label_12)
        self.vzDateDaySpinner = QtWidgets.QSpinBox(self.layoutWidget2)
        self.vzDateDaySpinner.setMinimumSize(QtCore.QSize(50, 0))
        self.vzDateDaySpinner.setMaximumSize(QtCore.QSize(50, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzDateDaySpinner.setFont(font)
        self.vzDateDaySpinner.setMinimum(1)
        self.vzDateDaySpinner.setMaximum(31)
        self.vzDateDaySpinner.setObjectName("vzDateDaySpinner")
        self.horizontalLayout_50.addWidget(self.vzDateDaySpinner)
        self.label_20 = QtWidgets.QLabel(self.tab_4)
        self.label_20.setGeometry(QtCore.QRect(449, 70, 221, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.label_20.setFont(font)
        self.label_20.setTextFormat(QtCore.Qt.PlainText)
        self.label_20.setObjectName("label_20")
        self.layoutWidget_2 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_2.setGeometry(QtCore.QRect(410, 120, 241, 24))
        self.layoutWidget_2.setObjectName("layoutWidget_2")
        self.horizontalLayout_58 = QtWidgets.QHBoxLayout(self.layoutWidget_2)
        self.horizontalLayout_58.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_58.setObjectName("horizontalLayout_58")
        spacerItem39 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_58.addItem(spacerItem39)
        self.label_22 = QtWidgets.QLabel(self.layoutWidget_2)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_22.setFont(font)
        self.label_22.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_22.setObjectName("label_22")
        self.horizontalLayout_58.addWidget(self.label_22)
        self.vzSiteLongMinEdit = QtWidgets.QLineEdit(self.layoutWidget_2)
        self.vzSiteLongMinEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzSiteLongMinEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzSiteLongMinEdit.setMaxLength(2)
        self.vzSiteLongMinEdit.setObjectName("vzSiteLongMinEdit")
        self.horizontalLayout_58.addWidget(self.vzSiteLongMinEdit)
        self.layoutWidget_3 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_3.setGeometry(QtCore.QRect(410, 150, 241, 24))
        self.layoutWidget_3.setObjectName("layoutWidget_3")
        self.horizontalLayout_59 = QtWidgets.QHBoxLayout(self.layoutWidget_3)
        self.horizontalLayout_59.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_59.setObjectName("horizontalLayout_59")
        spacerItem40 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_59.addItem(spacerItem40)
        self.label_23 = QtWidgets.QLabel(self.layoutWidget_3)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_23.setFont(font)
        self.label_23.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_23.setObjectName("label_23")
        self.horizontalLayout_59.addWidget(self.label_23)
        self.vzSiteLongSecsEdit = QtWidgets.QLineEdit(self.layoutWidget_3)
        self.vzSiteLongSecsEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzSiteLongSecsEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzSiteLongSecsEdit.setMaxLength(5)
        self.vzSiteLongSecsEdit.setObjectName("vzSiteLongSecsEdit")
        self.horizontalLayout_59.addWidget(self.vzSiteLongSecsEdit)
        self.layoutWidget_4 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_4.setGeometry(QtCore.QRect(410, 190, 241, 24))
        self.layoutWidget_4.setObjectName("layoutWidget_4")
        self.horizontalLayout_60 = QtWidgets.QHBoxLayout(self.layoutWidget_4)
        self.horizontalLayout_60.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_60.setObjectName("horizontalLayout_60")
        spacerItem41 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_60.addItem(spacerItem41)
        self.vzSiteLatLabel = QtWidgets.QLabel(self.layoutWidget_4)
        font = QtGui.QFont()
        font.setBold(True)
        self.vzSiteLatLabel.setFont(font)
        self.vzSiteLatLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.vzSiteLatLabel.setObjectName("vzSiteLatLabel")
        self.horizontalLayout_60.addWidget(self.vzSiteLatLabel)
        self.vzSiteLatDegEdit = QtWidgets.QLineEdit(self.layoutWidget_4)
        self.vzSiteLatDegEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzSiteLatDegEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzSiteLatDegEdit.setMaxLength(3)
        self.vzSiteLatDegEdit.setObjectName("vzSiteLatDegEdit")
        self.horizontalLayout_60.addWidget(self.vzSiteLatDegEdit)
        self.layoutWidget_5 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_5.setGeometry(QtCore.QRect(410, 220, 241, 24))
        self.layoutWidget_5.setObjectName("layoutWidget_5")
        self.horizontalLayout_61 = QtWidgets.QHBoxLayout(self.layoutWidget_5)
        self.horizontalLayout_61.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_61.setObjectName("horizontalLayout_61")
        spacerItem42 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_61.addItem(spacerItem42)
        self.label_25 = QtWidgets.QLabel(self.layoutWidget_5)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_25.setFont(font)
        self.label_25.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_25.setObjectName("label_25")
        self.horizontalLayout_61.addWidget(self.label_25)
        self.vzSiteLatMinEdit = QtWidgets.QLineEdit(self.layoutWidget_5)
        self.vzSiteLatMinEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzSiteLatMinEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzSiteLatMinEdit.setMaxLength(2)
        self.vzSiteLatMinEdit.setObjectName("vzSiteLatMinEdit")
        self.horizontalLayout_61.addWidget(self.vzSiteLatMinEdit)
        self.layoutWidget_6 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_6.setGeometry(QtCore.QRect(410, 250, 241, 24))
        self.layoutWidget_6.setObjectName("layoutWidget_6")
        self.horizontalLayout_62 = QtWidgets.QHBoxLayout(self.layoutWidget_6)
        self.horizontalLayout_62.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_62.setObjectName("horizontalLayout_62")
        spacerItem43 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_62.addItem(spacerItem43)
        self.label_26 = QtWidgets.QLabel(self.layoutWidget_6)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_26.setFont(font)
        self.label_26.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_26.setObjectName("label_26")
        self.horizontalLayout_62.addWidget(self.label_26)
        self.vzSiteLatSecsEdit = QtWidgets.QLineEdit(self.layoutWidget_6)
        self.vzSiteLatSecsEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzSiteLatSecsEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzSiteLatSecsEdit.setMaxLength(5)
        self.vzSiteLatSecsEdit.setObjectName("vzSiteLatSecsEdit")
        self.horizontalLayout_62.addWidget(self.vzSiteLatSecsEdit)
        self.layoutWidget_7 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_7.setGeometry(QtCore.QRect(350, 330, 301, 24))
        self.layoutWidget_7.setObjectName("layoutWidget_7")
        self.horizontalLayout_63 = QtWidgets.QHBoxLayout(self.layoutWidget_7)
        self.horizontalLayout_63.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_63.setObjectName("horizontalLayout_63")
        spacerItem44 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_63.addItem(spacerItem44)
        self.label_27 = QtWidgets.QLabel(self.layoutWidget_7)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_27.setFont(font)
        self.label_27.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_27.setObjectName("label_27")
        self.horizontalLayout_63.addWidget(self.label_27)
        self.vzObserverNameEdit = QtWidgets.QLineEdit(self.layoutWidget_7)
        self.vzObserverNameEdit.setMinimumSize(QtCore.QSize(120, 0))
        self.vzObserverNameEdit.setMaximumSize(QtCore.QSize(120, 16777215))
        self.vzObserverNameEdit.setMaxLength(16)
        self.vzObserverNameEdit.setObjectName("vzObserverNameEdit")
        self.horizontalLayout_63.addWidget(self.vzObserverNameEdit)
        self.label_28 = QtWidgets.QLabel(self.tab_4)
        self.label_28.setGeometry(QtCore.QRect(60, 220, 221, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.label_28.setFont(font)
        self.label_28.setTextFormat(QtCore.Qt.PlainText)
        self.label_28.setObjectName("label_28")
        self.layoutWidget_8 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_8.setGeometry(QtCore.QRect(0, 240, 271, 24))
        self.layoutWidget_8.setObjectName("layoutWidget_8")
        self.horizontalLayout_64 = QtWidgets.QHBoxLayout(self.layoutWidget_8)
        self.horizontalLayout_64.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_64.setObjectName("horizontalLayout_64")
        spacerItem45 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_64.addItem(spacerItem45)
        self.label_29 = QtWidgets.QLabel(self.layoutWidget_8)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_29.setFont(font)
        self.label_29.setTextFormat(QtCore.Qt.PlainText)
        self.label_29.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_29.setObjectName("label_29")
        self.horizontalLayout_64.addWidget(self.label_29)
        self.vzAsteroidNumberEdit = QtWidgets.QLineEdit(self.layoutWidget_8)
        self.vzAsteroidNumberEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzAsteroidNumberEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzAsteroidNumberEdit.setMaxLength(6)
        self.vzAsteroidNumberEdit.setObjectName("vzAsteroidNumberEdit")
        self.horizontalLayout_64.addWidget(self.vzAsteroidNumberEdit)
        self.layoutWidget_9 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_9.setGeometry(QtCore.QRect(30, 270, 241, 24))
        self.layoutWidget_9.setObjectName("layoutWidget_9")
        self.horizontalLayout_65 = QtWidgets.QHBoxLayout(self.layoutWidget_9)
        self.horizontalLayout_65.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_65.setObjectName("horizontalLayout_65")
        spacerItem46 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_65.addItem(spacerItem46)
        self.label_34 = QtWidgets.QLabel(self.layoutWidget_9)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_34.setFont(font)
        self.label_34.setTextFormat(QtCore.Qt.AutoText)
        self.label_34.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_34.setObjectName("label_34")
        self.horizontalLayout_65.addWidget(self.label_34)
        self.vzAsteroidNameEdit = QtWidgets.QLineEdit(self.layoutWidget_9)
        self.vzAsteroidNameEdit.setMinimumSize(QtCore.QSize(120, 0))
        self.vzAsteroidNameEdit.setMaximumSize(QtCore.QSize(120, 16777215))
        self.vzAsteroidNameEdit.setMaxLength(16)
        self.vzAsteroidNameEdit.setObjectName("vzAsteroidNameEdit")
        self.horizontalLayout_65.addWidget(self.vzAsteroidNameEdit)
        self.layoutWidget_10 = QtWidgets.QWidget(self.tab_4)
        self.layoutWidget_10.setGeometry(QtCore.QRect(410, 290, 241, 24))
        self.layoutWidget_10.setObjectName("layoutWidget_10")
        self.horizontalLayout_66 = QtWidgets.QHBoxLayout(self.layoutWidget_10)
        self.horizontalLayout_66.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_66.setObjectName("horizontalLayout_66")
        spacerItem47 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_66.addItem(spacerItem47)
        self.label_38 = QtWidgets.QLabel(self.layoutWidget_10)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_38.setFont(font)
        self.label_38.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_38.setObjectName("label_38")
        self.horizontalLayout_66.addWidget(self.label_38)
        self.vzSiteAltitudeEdit = QtWidgets.QLineEdit(self.layoutWidget_10)
        self.vzSiteAltitudeEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzSiteAltitudeEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzSiteAltitudeEdit.setMaxLength(5)
        self.vzSiteAltitudeEdit.setObjectName("vzSiteAltitudeEdit")
        self.horizontalLayout_66.addWidget(self.vzSiteAltitudeEdit)
        self.vzTrimButton = QtWidgets.QPushButton(self.tab_4)
        self.vzTrimButton.setGeometry(QtCore.QRect(50, 380, 240, 18))
        self.vzTrimButton.setMinimumSize(QtCore.QSize(240, 0))
        self.vzTrimButton.setMaximumSize(QtCore.QSize(240, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzTrimButton.setFont(font)
        self.vzTrimButton.setObjectName("vzTrimButton")
        self.vzStartOverButton = QtWidgets.QPushButton(self.tab_4)
        self.vzStartOverButton.setGeometry(QtCore.QRect(50, 440, 240, 18))
        self.vzStartOverButton.setMinimumSize(QtCore.QSize(240, 0))
        self.vzStartOverButton.setMaximumSize(QtCore.QSize(240, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzStartOverButton.setFont(font)
        self.vzStartOverButton.setObjectName("vzStartOverButton")
        self.vizierLabel = QtWidgets.QLabel(self.tab_4)
        self.vizierLabel.setGeometry(QtCore.QRect(40, 10, 191, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.vizierLabel.setFont(font)
        self.vizierLabel.setObjectName("vizierLabel")
        self.vizierZipButton = QtWidgets.QPushButton(self.tab_4)
        self.vizierZipButton.setGeometry(QtCore.QRect(300, 440, 240, 18))
        self.vizierZipButton.setMinimumSize(QtCore.QSize(240, 0))
        self.vizierZipButton.setMaximumSize(QtCore.QSize(240, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vizierZipButton.setFont(font)
        self.vizierZipButton.setObjectName("vizierZipButton")
        self.vizierLabel_2 = QtWidgets.QLabel(self.tab_4)
        self.vizierLabel_2.setGeometry(QtCore.QRect(30, 34, 131, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.vizierLabel_2.setFont(font)
        self.vizierLabel_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.vizierLabel_2.setObjectName("vizierLabel_2")
        self.vzInfoButton = QtWidgets.QPushButton(self.tab_4)
        self.vzInfoButton.setGeometry(QtCore.QRect(530, 10, 121, 18))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzInfoButton.setFont(font)
        self.vzInfoButton.setObjectName("vzInfoButton")
        self.label_9 = QtWidgets.QLabel(self.tab_4)
        self.label_9.setGeometry(QtCore.QRect(530, 40, 241, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.label_9.setFont(font)
        self.label_9.setObjectName("label_9")
        self.vzWhereToSendButton = QtWidgets.QPushButton(self.tab_4)
        self.vzWhereToSendButton.setGeometry(QtCore.QRect(550, 440, 240, 18))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzWhereToSendButton.setFont(font)
        self.vzWhereToSendButton.setObjectName("vzWhereToSendButton")
        self.widget = QtWidgets.QWidget(self.tab_4)
        self.widget.setGeometry(QtCore.QRect(30, 150, 271, 24))
        self.widget.setObjectName("widget")
        self.horizontalLayout_47 = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout_47.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_47.setObjectName("horizontalLayout_47")
        spacerItem48 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_47.addItem(spacerItem48)
        self.label_14 = QtWidgets.QLabel(self.widget)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_14.setFont(font)
        self.label_14.setTextFormat(QtCore.Qt.PlainText)
        self.label_14.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_14.setObjectName("label_14")
        self.horizontalLayout_47.addWidget(self.label_14)
        self.vzStarHipparcosEdit = QtWidgets.QLineEdit(self.widget)
        self.vzStarHipparcosEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzStarHipparcosEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzStarHipparcosEdit.setMaxLength(6)
        self.vzStarHipparcosEdit.setObjectName("vzStarHipparcosEdit")
        self.horizontalLayout_47.addWidget(self.vzStarHipparcosEdit)
        self.widget1 = QtWidgets.QWidget(self.tab_4)
        self.widget1.setGeometry(QtCore.QRect(30, 120, 271, 24))
        self.widget1.setObjectName("widget1")
        self.horizontalLayout_55 = QtWidgets.QHBoxLayout(self.widget1)
        self.horizontalLayout_55.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_55.setObjectName("horizontalLayout_55")
        spacerItem49 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_55.addItem(spacerItem49)
        self.label_18 = QtWidgets.QLabel(self.widget1)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_18.setFont(font)
        self.label_18.setTextFormat(QtCore.Qt.PlainText)
        self.label_18.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_18.setObjectName("label_18")
        self.horizontalLayout_55.addWidget(self.label_18)
        self.vzStarTycho2Edit = QtWidgets.QLineEdit(self.widget1)
        self.vzStarTycho2Edit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzStarTycho2Edit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzStarTycho2Edit.setMaxLength(12)
        self.vzStarTycho2Edit.setObjectName("vzStarTycho2Edit")
        self.horizontalLayout_55.addWidget(self.vzStarTycho2Edit)
        self.widget2 = QtWidgets.QWidget(self.tab_4)
        self.widget2.setGeometry(QtCore.QRect(30, 90, 271, 24))
        self.widget2.setObjectName("widget2")
        self.horizontalLayout_56 = QtWidgets.QHBoxLayout(self.widget2)
        self.horizontalLayout_56.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_56.setObjectName("horizontalLayout_56")
        spacerItem50 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_56.addItem(spacerItem50)
        self.label_19 = QtWidgets.QLabel(self.widget2)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_19.setFont(font)
        self.label_19.setTextFormat(QtCore.Qt.PlainText)
        self.label_19.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_19.setObjectName("label_19")
        self.horizontalLayout_56.addWidget(self.label_19)
        self.vzStarUCAC4Edit = QtWidgets.QLineEdit(self.widget2)
        self.vzStarUCAC4Edit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzStarUCAC4Edit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzStarUCAC4Edit.setMaxLength(10)
        self.vzStarUCAC4Edit.setObjectName("vzStarUCAC4Edit")
        self.horizontalLayout_56.addWidget(self.vzStarUCAC4Edit)
        self.widget3 = QtWidgets.QWidget(self.tab_4)
        self.widget3.setGeometry(QtCore.QRect(410, 90, 241, 24))
        self.widget3.setObjectName("widget3")
        self.horizontalLayout_57 = QtWidgets.QHBoxLayout(self.widget3)
        self.horizontalLayout_57.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_57.setObjectName("horizontalLayout_57")
        spacerItem51 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_57.addItem(spacerItem51)
        self.vzSiteLongLabel = QtWidgets.QLabel(self.widget3)
        font = QtGui.QFont()
        font.setBold(True)
        self.vzSiteLongLabel.setFont(font)
        self.vzSiteLongLabel.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.vzSiteLongLabel.setObjectName("vzSiteLongLabel")
        self.horizontalLayout_57.addWidget(self.vzSiteLongLabel)
        self.vzSiteLongDegEdit = QtWidgets.QLineEdit(self.widget3)
        self.vzSiteLongDegEdit.setMinimumSize(QtCore.QSize(90, 0))
        self.vzSiteLongDegEdit.setMaximumSize(QtCore.QSize(90, 16777215))
        self.vzSiteLongDegEdit.setMaxLength(4)
        self.vzSiteLongDegEdit.setObjectName("vzSiteLongDegEdit")
        self.horizontalLayout_57.addWidget(self.vzSiteLongDegEdit)
        self.widget4 = QtWidgets.QWidget(self.tab_4)
        self.widget4.setGeometry(QtCore.QRect(60, 470, 97, 23))
        self.widget4.setObjectName("widget4")
        self.horizontalLayout_67 = QtWidgets.QHBoxLayout(self.widget4)
        self.horizontalLayout_67.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_67.setObjectName("horizontalLayout_67")
        self.label_35 = QtWidgets.QLabel(self.widget4)
        self.label_35.setMinimumSize(QtCore.QSize(60, 0))
        self.label_35.setMaximumSize(QtCore.QSize(60, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.label_35.setFont(font)
        self.label_35.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_35.setObjectName("label_35")
        self.horizontalLayout_67.addWidget(self.label_35)
        self.vzDotSizeSpinner = QtWidgets.QSpinBox(self.widget4)
        font = QtGui.QFont()
        font.setBold(True)
        self.vzDotSizeSpinner.setFont(font)
        self.vzDotSizeSpinner.setMinimum(1)
        self.vzDotSizeSpinner.setMaximum(12)
        self.vzDotSizeSpinner.setProperty("value", 3)
        self.vzDotSizeSpinner.setObjectName("vzDotSizeSpinner")
        self.horizontalLayout_67.addWidget(self.vzDotSizeSpinner)
        self.widget5 = QtWidgets.QWidget(self.tab_4)
        self.widget5.setGeometry(QtCore.QRect(300, 410, 296, 23))
        self.widget5.setObjectName("widget5")
        self.horizontalLayout_54 = QtWidgets.QHBoxLayout(self.widget5)
        self.horizontalLayout_54.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_54.setObjectName("horizontalLayout_54")
        self.vzNagLevelSpinbox = QtWidgets.QSpinBox(self.widget5)
        self.vzNagLevelSpinbox.setMinimumSize(QtCore.QSize(50, 0))
        self.vzNagLevelSpinbox.setMaximumSize(QtCore.QSize(50, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzNagLevelSpinbox.setFont(font)
        self.vzNagLevelSpinbox.setMinimum(1)
        self.vzNagLevelSpinbox.setObjectName("vzNagLevelSpinbox")
        self.horizontalLayout_54.addWidget(self.vzNagLevelSpinbox)
        self.vzNagLevelLabel = QtWidgets.QLabel(self.widget5)
        self.vzNagLevelLabel.setMinimumSize(QtCore.QSize(240, 0))
        self.vzNagLevelLabel.setMaximumSize(QtCore.QSize(150, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzNagLevelLabel.setFont(font)
        self.vzNagLevelLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.vzNagLevelLabel.setObjectName("vzNagLevelLabel")
        self.horizontalLayout_54.addWidget(self.vzNagLevelLabel)
        self.widget6 = QtWidgets.QWidget(self.tab_4)
        self.widget6.setGeometry(QtCore.QRect(169, 30, 97, 23))
        self.widget6.setObjectName("widget6")
        self.horizontalLayout_48 = QtWidgets.QHBoxLayout(self.widget6)
        self.horizontalLayout_48.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_48.setObjectName("horizontalLayout_48")
        self.label_10 = QtWidgets.QLabel(self.widget6)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.label_10.sizePolicy().hasHeightForWidth())
        self.label_10.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setBold(True)
        self.label_10.setFont(font)
        self.label_10.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
        self.label_10.setObjectName("label_10")
        self.horizontalLayout_48.addWidget(self.label_10)
        self.vzDateYearSpinner = QtWidgets.QSpinBox(self.widget6)
        self.vzDateYearSpinner.setMinimumSize(QtCore.QSize(70, 0))
        self.vzDateYearSpinner.setMaximumSize(QtCore.QSize(70, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzDateYearSpinner.setFont(font)
        self.vzDateYearSpinner.setMinimum(1950)
        self.vzDateYearSpinner.setMaximum(3050)
        self.vzDateYearSpinner.setObjectName("vzDateYearSpinner")
        self.horizontalLayout_48.addWidget(self.vzDateYearSpinner)
        self.widget7 = QtWidgets.QWidget(self.tab_4)
        self.widget7.setGeometry(QtCore.QRect(290, 470, 501, 24))
        self.widget7.setObjectName("widget7")
        self.horizontalLayout_51 = QtWidgets.QHBoxLayout(self.widget7)
        self.horizontalLayout_51.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_51.setObjectName("horizontalLayout_51")
        spacerItem52 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_51.addItem(spacerItem52)
        self.vzSaveSiteCoordButton = QtWidgets.QPushButton(self.widget7)
        self.vzSaveSiteCoordButton.setMinimumSize(QtCore.QSize(240, 0))
        self.vzSaveSiteCoordButton.setMaximumSize(QtCore.QSize(240, 16777215))
        font = QtGui.QFont()
        font.setBold(True)
        self.vzSaveSiteCoordButton.setFont(font)
        self.vzSaveSiteCoordButton.setObjectName("vzSaveSiteCoordButton")
        self.horizontalLayout_51.addWidget(self.vzSaveSiteCoordButton)
        self.vzSiteCoordNameEdit = QtWidgets.QLineEdit(self.widget7)
        self.vzSiteCoordNameEdit.setMinimumSize(QtCore.QSize(120, 0))
        self.vzSiteCoordNameEdit.setMaximumSize(QtCore.QSize(120, 16777215))
        self.vzSiteCoordNameEdit.setObjectName("vzSiteCoordNameEdit")
        self.horizontalLayout_51.addWidget(self.vzSiteCoordNameEdit)
        self.vzCoordsComboBox = QtWidgets.QComboBox(self.widget7)
        self.vzCoordsComboBox.setMinimumSize(QtCore.QSize(120, 0))
        self.vzCoordsComboBox.setMaximumSize(QtCore.QSize(120, 16777215))
        self.vzCoordsComboBox.setObjectName("vzCoordsComboBox")
        self.horizontalLayout_51.addWidget(self.vzCoordsComboBox)
        self.tabWidget.addTab(self.tab_4, "")
        self.tab_3 = QtWidgets.QWidget()
        self.tab_3.setObjectName("tab_3")
        self.layoutWidget_23 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget_23.setGeometry(QtCore.QRect(20, 100, 121, 100))
        self.layoutWidget_23.setObjectName("layoutWidget_23")
        self.verticalLayout_41 = QtWidgets.QVBoxLayout(self.layoutWidget_23)
        self.verticalLayout_41.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_41.setObjectName("verticalLayout_41")
        self.frameTimeLabel = QtWidgets.QLabel(self.layoutWidget_23)
        font = QtGui.QFont()
        font.setBold(True)
        self.frameTimeLabel.setFont(font)
        self.frameTimeLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.frameTimeLabel.setObjectName("frameTimeLabel")
        self.verticalLayout_41.addWidget(self.frameTimeLabel)
        self.frameTimeEdit = QtWidgets.QLineEdit(self.layoutWidget_23)
        self.frameTimeEdit.setObjectName("frameTimeEdit")
        self.verticalLayout_41.addWidget(self.frameTimeEdit)
        self.missDistanceLabel = QtWidgets.QLabel(self.layoutWidget_23)
        font = QtGui.QFont()
        font.setBold(True)
        self.missDistanceLabel.setFont(font)
        self.missDistanceLabel.setObjectName("missDistanceLabel")
        self.verticalLayout_41.addWidget(self.missDistanceLabel)
        self.missDistanceKmEdit = QtWidgets.QLineEdit(self.layoutWidget_23)
        self.missDistanceKmEdit.setObjectName("missDistanceKmEdit")
        self.verticalLayout_41.addWidget(self.missDistanceKmEdit)
        self.layoutWidget_24 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget_24.setGeometry(QtCore.QRect(350, 220, 111, 82))
        self.layoutWidget_24.setObjectName("layoutWidget_24")
        self.verticalLayout_42 = QtWidgets.QVBoxLayout(self.layoutWidget_24)
        self.verticalLayout_42.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_42.setObjectName("verticalLayout_42")
        self.limbAnglesLabel = QtWidgets.QLabel(self.layoutWidget_24)
        font = QtGui.QFont()
        font.setBold(True)
        self.limbAnglesLabel.setFont(font)
        self.limbAnglesLabel.setObjectName("limbAnglesLabel")
        self.verticalLayout_42.addWidget(self.limbAnglesLabel)
        self.horizontalLayout_131 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_131.setObjectName("horizontalLayout_131")
        self.DdegreesEdit = QtWidgets.QLineEdit(self.layoutWidget_24)
        self.DdegreesEdit.setObjectName("DdegreesEdit")
        self.horizontalLayout_131.addWidget(self.DdegreesEdit)
        self.DdegreesLabel = QtWidgets.QLabel(self.layoutWidget_24)
        font = QtGui.QFont()
        font.setBold(True)
        self.DdegreesLabel.setFont(font)
        self.DdegreesLabel.setObjectName("DdegreesLabel")
        self.horizontalLayout_131.addWidget(self.DdegreesLabel)
        self.verticalLayout_42.addLayout(self.horizontalLayout_131)
        self.horizontalLayout_132 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_132.setObjectName("horizontalLayout_132")
        self.RdegreesEdit = QtWidgets.QLineEdit(self.layoutWidget_24)
        self.RdegreesEdit.setObjectName("RdegreesEdit")
        self.horizontalLayout_132.addWidget(self.RdegreesEdit)
        self.RdegreesLabel = QtWidgets.QLabel(self.layoutWidget_24)
        font = QtGui.QFont()
        font.setBold(True)
        self.RdegreesLabel.setFont(font)
        self.RdegreesLabel.setObjectName("RdegreesLabel")
        self.horizontalLayout_132.addWidget(self.RdegreesLabel)
        self.verticalLayout_42.addLayout(self.horizontalLayout_132)
        self.layoutWidget_25 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget_25.setGeometry(QtCore.QRect(470, 220, 111, 82))
        self.layoutWidget_25.setObjectName("layoutWidget_25")
        self.verticalLayout_43 = QtWidgets.QVBoxLayout(self.layoutWidget_25)
        self.verticalLayout_43.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_43.setObjectName("verticalLayout_43")
        self.chordSizeLabel = QtWidgets.QLabel(self.layoutWidget_25)
        font = QtGui.QFont()
        font.setBold(True)
        self.chordSizeLabel.setFont(font)
        self.chordSizeLabel.setObjectName("chordSizeLabel")
        self.verticalLayout_43.addWidget(self.chordSizeLabel)
        self.horizontalLayout_133 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_133.setObjectName("horizontalLayout_133")
        self.chordSizeSecondsEdit = QtWidgets.QLineEdit(self.layoutWidget_25)
        self.chordSizeSecondsEdit.setObjectName("chordSizeSecondsEdit")
        self.horizontalLayout_133.addWidget(self.chordSizeSecondsEdit)
        self.chordSizeSecondsLabel = QtWidgets.QLabel(self.layoutWidget_25)
        font = QtGui.QFont()
        font.setBold(True)
        self.chordSizeSecondsLabel.setFont(font)
        self.chordSizeSecondsLabel.setObjectName("chordSizeSecondsLabel")
        self.horizontalLayout_133.addWidget(self.chordSizeSecondsLabel)
        self.verticalLayout_43.addLayout(self.horizontalLayout_133)
        self.horizontalLayout_134 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_134.setObjectName("horizontalLayout_134")
        self.chordSizeKmEdit = QtWidgets.QLineEdit(self.layoutWidget_25)
        self.chordSizeKmEdit.setObjectName("chordSizeKmEdit")
        self.horizontalLayout_134.addWidget(self.chordSizeKmEdit)
        self.chordSizeKmLabel = QtWidgets.QLabel(self.layoutWidget_25)
        font = QtGui.QFont()
        font.setBold(True)
        self.chordSizeKmLabel.setFont(font)
        self.chordSizeKmLabel.setObjectName("chordSizeKmLabel")
        self.horizontalLayout_134.addWidget(self.chordSizeKmLabel)
        self.verticalLayout_43.addLayout(self.horizontalLayout_134)
        self.layoutWidget_26 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget_26.setGeometry(QtCore.QRect(530, 100, 111, 82))
        self.layoutWidget_26.setObjectName("layoutWidget_26")
        self.verticalLayout_44 = QtWidgets.QVBoxLayout(self.layoutWidget_26)
        self.verticalLayout_44.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_44.setObjectName("verticalLayout_44")
        self.asteroidDistLabel = QtWidgets.QLabel(self.layoutWidget_26)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidDistLabel.setFont(font)
        self.asteroidDistLabel.setObjectName("asteroidDistLabel")
        self.verticalLayout_44.addWidget(self.asteroidDistLabel)
        self.horizontalLayout_135 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_135.setObjectName("horizontalLayout_135")
        self.asteroidDistAUedit = QtWidgets.QLineEdit(self.layoutWidget_26)
        self.asteroidDistAUedit.setObjectName("asteroidDistAUedit")
        self.horizontalLayout_135.addWidget(self.asteroidDistAUedit)
        self.asteroidDistAUlabel = QtWidgets.QLabel(self.layoutWidget_26)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidDistAUlabel.setFont(font)
        self.asteroidDistAUlabel.setObjectName("asteroidDistAUlabel")
        self.horizontalLayout_135.addWidget(self.asteroidDistAUlabel)
        self.verticalLayout_44.addLayout(self.horizontalLayout_135)
        self.horizontalLayout_136 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_136.setObjectName("horizontalLayout_136")
        self.asteroidDistArcsecEdit = QtWidgets.QLineEdit(self.layoutWidget_26)
        self.asteroidDistArcsecEdit.setObjectName("asteroidDistArcsecEdit")
        self.horizontalLayout_136.addWidget(self.asteroidDistArcsecEdit)
        self.asteroidDistArcsecLabel = QtWidgets.QLabel(self.layoutWidget_26)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidDistArcsecLabel.setFont(font)
        self.asteroidDistArcsecLabel.setObjectName("asteroidDistArcsecLabel")
        self.horizontalLayout_136.addWidget(self.asteroidDistArcsecLabel)
        self.verticalLayout_44.addLayout(self.horizontalLayout_136)
        self.layoutWidget_27 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget_27.setGeometry(QtCore.QRect(680, 100, 110, 51))
        self.layoutWidget_27.setObjectName("layoutWidget_27")
        self.verticalLayout_45 = QtWidgets.QVBoxLayout(self.layoutWidget_27)
        self.verticalLayout_45.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_45.setObjectName("verticalLayout_45")
        self.wavelengthLabel = QtWidgets.QLabel(self.layoutWidget_27)
        font = QtGui.QFont()
        font.setBold(True)
        self.wavelengthLabel.setFont(font)
        self.wavelengthLabel.setObjectName("wavelengthLabel")
        self.verticalLayout_45.addWidget(self.wavelengthLabel)
        self.wavelengthEdit = QtWidgets.QLineEdit(self.layoutWidget_27)
        self.wavelengthEdit.setObjectName("wavelengthEdit")
        self.verticalLayout_45.addWidget(self.wavelengthEdit)
        self.layoutWidget_29 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget_29.setGeometry(QtCore.QRect(320, 100, 171, 82))
        self.layoutWidget_29.setObjectName("layoutWidget_29")
        self.verticalLayout_47 = QtWidgets.QVBoxLayout(self.layoutWidget_29)
        self.verticalLayout_47.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_47.setObjectName("verticalLayout_47")
        self.asteroidSpeedLabel = QtWidgets.QLabel(self.layoutWidget_29)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidSpeedLabel.setFont(font)
        self.asteroidSpeedLabel.setObjectName("asteroidSpeedLabel")
        self.verticalLayout_47.addWidget(self.asteroidSpeedLabel)
        self.horizontalLayout_139 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_139.setObjectName("horizontalLayout_139")
        self.asteroidSpeedShadowEdit = QtWidgets.QLineEdit(self.layoutWidget_29)
        self.asteroidSpeedShadowEdit.setObjectName("asteroidSpeedShadowEdit")
        self.horizontalLayout_139.addWidget(self.asteroidSpeedShadowEdit)
        self.asteroidSpeedShadowLabel = QtWidgets.QLabel(self.layoutWidget_29)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidSpeedShadowLabel.setFont(font)
        self.asteroidSpeedShadowLabel.setObjectName("asteroidSpeedShadowLabel")
        self.horizontalLayout_139.addWidget(self.asteroidSpeedShadowLabel)
        self.verticalLayout_47.addLayout(self.horizontalLayout_139)
        self.horizontalLayout_140 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_140.setObjectName("horizontalLayout_140")
        self.asteroidSpeedSkyEdit = QtWidgets.QLineEdit(self.layoutWidget_29)
        self.asteroidSpeedSkyEdit.setObjectName("asteroidSpeedSkyEdit")
        self.horizontalLayout_140.addWidget(self.asteroidSpeedSkyEdit)
        self.asteroidSpeedSkyLabel = QtWidgets.QLabel(self.layoutWidget_29)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidSpeedSkyLabel.setFont(font)
        self.asteroidSpeedSkyLabel.setObjectName("asteroidSpeedSkyLabel")
        self.horizontalLayout_140.addWidget(self.asteroidSpeedSkyLabel)
        self.verticalLayout_47.addLayout(self.horizontalLayout_140)
        self.helpPdfButton = QtWidgets.QPushButton(self.tab_3)
        self.helpPdfButton.setGeometry(QtCore.QRect(660, 10, 131, 21))
        font = QtGui.QFont()
        font.setBold(True)
        self.helpPdfButton.setFont(font)
        self.helpPdfButton.setObjectName("helpPdfButton")
        self.modelToUseLabel = QtWidgets.QLabel(self.tab_3)
        self.modelToUseLabel.setGeometry(QtCore.QRect(20, 330, 111, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.modelToUseLabel.setFont(font)
        self.modelToUseLabel.setObjectName("modelToUseLabel")
        self.currentEventLabel = QtWidgets.QLabel(self.tab_3)
        self.currentEventLabel.setGeometry(QtCore.QRect(190, 30, 121, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.currentEventLabel.setFont(font)
        self.currentEventLabel.setObjectName("currentEventLabel")
        self.pastEventsLabel = QtWidgets.QLabel(self.tab_3)
        self.pastEventsLabel.setGeometry(QtCore.QRect(570, 30, 111, 16))
        font = QtGui.QFont()
        font.setBold(True)
        self.pastEventsLabel.setFont(font)
        self.pastEventsLabel.setObjectName("pastEventsLabel")
        self.layoutWidget3 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget3.setGeometry(QtCore.QRect(20, 350, 96, 108))
        self.layoutWidget3.setObjectName("layoutWidget3")
        self.verticalLayout_48 = QtWidgets.QVBoxLayout(self.layoutWidget3)
        self.verticalLayout_48.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_48.setObjectName("verticalLayout_48")
        self.diffractionRadioButton = QtWidgets.QRadioButton(self.layoutWidget3)
        self.diffractionRadioButton.setChecked(False)
        self.diffractionRadioButton.setObjectName("diffractionRadioButton")
        self.verticalLayout_48.addWidget(self.diffractionRadioButton)
        self.edgeOnDiskRadioButton = QtWidgets.QRadioButton(self.layoutWidget3)
        self.edgeOnDiskRadioButton.setObjectName("edgeOnDiskRadioButton")
        self.verticalLayout_48.addWidget(self.edgeOnDiskRadioButton)
        self.diskOnDiskRadioButton = QtWidgets.QRadioButton(self.layoutWidget3)
        self.diskOnDiskRadioButton.setObjectName("diskOnDiskRadioButton")
        self.verticalLayout_48.addWidget(self.diskOnDiskRadioButton)
        self.squareWaveRadioButton = QtWidgets.QRadioButton(self.layoutWidget3)
        self.squareWaveRadioButton.setChecked(True)
        self.squareWaveRadioButton.setObjectName("squareWaveRadioButton")
        self.verticalLayout_48.addWidget(self.squareWaveRadioButton)
        self.layoutWidget4 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget4.setGeometry(QtCore.QRect(130, 330, 198, 176))
        self.layoutWidget4.setObjectName("layoutWidget4")
        self.verticalLayout_49 = QtWidgets.QVBoxLayout(self.layoutWidget4)
        self.verticalLayout_49.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_49.setObjectName("verticalLayout_49")
        self.fitLightcurveButton = QtWidgets.QPushButton(self.layoutWidget4)
        self.fitLightcurveButton.setObjectName("fitLightcurveButton")
        self.verticalLayout_49.addWidget(self.fitLightcurveButton)
        self.pauseFitButton = QtWidgets.QPushButton(self.layoutWidget4)
        self.pauseFitButton.setObjectName("pauseFitButton")
        self.verticalLayout_49.addWidget(self.pauseFitButton)
        self.askAdviceButton = QtWidgets.QPushButton(self.layoutWidget4)
        self.askAdviceButton.setObjectName("askAdviceButton")
        self.verticalLayout_49.addWidget(self.askAdviceButton)
        self.showDiffractionButton = QtWidgets.QPushButton(self.layoutWidget4)
        self.showDiffractionButton.setObjectName("showDiffractionButton")
        self.verticalLayout_49.addWidget(self.showDiffractionButton)
        self.demoModelButton = QtWidgets.QPushButton(self.layoutWidget4)
        self.demoModelButton.setObjectName("demoModelButton")
        self.verticalLayout_49.addWidget(self.demoModelButton)
        self.printEventParametersButton = QtWidgets.QPushButton(self.layoutWidget4)
        self.printEventParametersButton.setObjectName("printEventParametersButton")
        self.verticalLayout_49.addWidget(self.printEventParametersButton)
        self.layoutWidget5 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget5.setGeometry(QtCore.QRect(360, 370, 301, 26))
        self.layoutWidget5.setObjectName("layoutWidget5")
        self.horizontalLayout_142 = QtWidgets.QHBoxLayout(self.layoutWidget5)
        self.horizontalLayout_142.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_142.setSpacing(0)
        self.horizontalLayout_142.setObjectName("horizontalLayout_142")
        self.fitMetricEdit = QtWidgets.QLineEdit(self.layoutWidget5)
        self.fitMetricEdit.setReadOnly(True)
        self.fitMetricEdit.setObjectName("fitMetricEdit")
        self.horizontalLayout_142.addWidget(self.fitMetricEdit)
        self.fitMetricLabel = QtWidgets.QLabel(self.layoutWidget5)
        font = QtGui.QFont()
        font.setBold(True)
        self.fitMetricLabel.setFont(font)
        self.fitMetricLabel.setObjectName("fitMetricLabel")
        self.horizontalLayout_142.addWidget(self.fitMetricLabel)
        self.fitMetricChangeEdit = QtWidgets.QLineEdit(self.layoutWidget5)
        self.fitMetricChangeEdit.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.fitMetricChangeEdit.setAutoFillBackground(False)
        self.fitMetricChangeEdit.setReadOnly(True)
        self.fitMetricChangeEdit.setObjectName("fitMetricChangeEdit")
        self.horizontalLayout_142.addWidget(self.fitMetricChangeEdit)
        self.layoutWidget6 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget6.setGeometry(QtCore.QRect(21, 50, 771, 26))
        self.layoutWidget6.setObjectName("layoutWidget6")
        self.horizontalLayout_141 = QtWidgets.QHBoxLayout(self.layoutWidget6)
        self.horizontalLayout_141.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_141.setObjectName("horizontalLayout_141")
        self.currentEventEdit = QtWidgets.QLineEdit(self.layoutWidget6)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.currentEventEdit.sizePolicy().hasHeightForWidth())
        self.currentEventEdit.setSizePolicy(sizePolicy)
        self.currentEventEdit.setObjectName("currentEventEdit")
        self.horizontalLayout_141.addWidget(self.currentEventEdit)
        self.saveCurrentEventButton = QtWidgets.QPushButton(self.layoutWidget6)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.saveCurrentEventButton.sizePolicy().hasHeightForWidth())
        self.saveCurrentEventButton.setSizePolicy(sizePolicy)
        self.saveCurrentEventButton.setMinimumSize(QtCore.QSize(0, 0))
        self.saveCurrentEventButton.setMaximumSize(QtCore.QSize(80, 16777215))
        self.saveCurrentEventButton.setObjectName("saveCurrentEventButton")
        self.horizontalLayout_141.addWidget(self.saveCurrentEventButton)
        self.pastEventsComboBox = QtWidgets.QComboBox(self.layoutWidget6)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.pastEventsComboBox.sizePolicy().hasHeightForWidth())
        self.pastEventsComboBox.setSizePolicy(sizePolicy)
        self.pastEventsComboBox.setMinimumSize(QtCore.QSize(300, 0))
        self.pastEventsComboBox.setMaxVisibleItems(20)
        self.pastEventsComboBox.setObjectName("pastEventsComboBox")
        self.horizontalLayout_141.addWidget(self.pastEventsComboBox)
        self.deleteEventButton = QtWidgets.QPushButton(self.layoutWidget6)
        self.deleteEventButton.setMaximumSize(QtCore.QSize(80, 16777215))
        self.deleteEventButton.setObjectName("deleteEventButton")
        self.horizontalLayout_141.addWidget(self.deleteEventButton)
        self.layoutWidget7 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget7.setGeometry(QtCore.QRect(590, 220, 91, 82))
        self.layoutWidget7.setObjectName("layoutWidget7")
        self.verticalLayout_50 = QtWidgets.QVBoxLayout(self.layoutWidget7)
        self.verticalLayout_50.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_50.setObjectName("verticalLayout_50")
        self.starSizeLabel = QtWidgets.QLabel(self.layoutWidget7)
        font = QtGui.QFont()
        font.setBold(True)
        self.starSizeLabel.setFont(font)
        self.starSizeLabel.setObjectName("starSizeLabel")
        self.verticalLayout_50.addWidget(self.starSizeLabel)
        self.horizontalLayout_144 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_144.setObjectName("horizontalLayout_144")
        self.starSizeMasEdit = QtWidgets.QLineEdit(self.layoutWidget7)
        self.starSizeMasEdit.setObjectName("starSizeMasEdit")
        self.horizontalLayout_144.addWidget(self.starSizeMasEdit)
        self.starSizeMasLabel = QtWidgets.QLabel(self.layoutWidget7)
        font = QtGui.QFont()
        font.setBold(True)
        self.starSizeMasLabel.setFont(font)
        self.starSizeMasLabel.setObjectName("starSizeMasLabel")
        self.horizontalLayout_144.addWidget(self.starSizeMasLabel)
        self.verticalLayout_50.addLayout(self.horizontalLayout_144)
        self.horizontalLayout_143 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_143.setObjectName("horizontalLayout_143")
        self.starSizeKmEdit = QtWidgets.QLineEdit(self.layoutWidget7)
        self.starSizeKmEdit.setObjectName("starSizeKmEdit")
        self.horizontalLayout_143.addWidget(self.starSizeKmEdit)
        self.starSizeKmLabel = QtWidgets.QLabel(self.layoutWidget7)
        font = QtGui.QFont()
        font.setBold(True)
        self.starSizeKmLabel.setFont(font)
        self.starSizeKmLabel.setObjectName("starSizeKmLabel")
        self.horizontalLayout_143.addWidget(self.starSizeKmLabel)
        self.verticalLayout_50.addLayout(self.horizontalLayout_143)
        self.line_4 = QtWidgets.QFrame(self.tab_3)
        self.line_4.setGeometry(QtCore.QRect(20, 80, 771, 20))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.line_4.sizePolicy().hasHeightForWidth())
        self.line_4.setSizePolicy(sizePolicy)
        self.line_4.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_4.setLineWidth(3)
        self.line_4.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_4.setObjectName("line_4")
        self.line_17 = QtWidgets.QFrame(self.tab_3)
        self.line_17.setGeometry(QtCore.QRect(20, 200, 771, 20))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.line_17.sizePolicy().hasHeightForWidth())
        self.line_17.setSizePolicy(sizePolicy)
        self.line_17.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_17.setLineWidth(3)
        self.line_17.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_17.setObjectName("line_17")
        self.line_18 = QtWidgets.QFrame(self.tab_3)
        self.line_18.setGeometry(QtCore.QRect(20, 310, 771, 20))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.line_18.sizePolicy().hasHeightForWidth())
        self.line_18.setSizePolicy(sizePolicy)
        self.line_18.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_18.setLineWidth(3)
        self.line_18.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_18.setObjectName("line_18")
        self.showAnnotationsCheckBox = QtWidgets.QCheckBox(self.tab_3)
        self.showAnnotationsCheckBox.setGeometry(QtCore.QRect(590, 340, 91, 22))
        self.showAnnotationsCheckBox.setObjectName("showAnnotationsCheckBox")
        self.showLegendsCheckBox = QtWidgets.QCheckBox(self.tab_3)
        self.showLegendsCheckBox.setGeometry(QtCore.QRect(690, 340, 101, 22))
        self.showLegendsCheckBox.setObjectName("showLegendsCheckBox")
        self.versusTimeCheckBox = QtWidgets.QCheckBox(self.tab_3)
        self.versusTimeCheckBox.setGeometry(QtCore.QRect(490, 340, 91, 22))
        self.versusTimeCheckBox.setChecked(False)
        self.versusTimeCheckBox.setObjectName("versusTimeCheckBox")
        self.showDetailsCheckBox = QtWidgets.QCheckBox(self.tab_3)
        self.showDetailsCheckBox.setGeometry(QtCore.QRect(360, 340, 121, 22))
        self.showDetailsCheckBox.setChecked(False)
        self.showDetailsCheckBox.setObjectName("showDetailsCheckBox")
        self.layoutWidget8 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget8.setGeometry(QtCore.QRect(170, 100, 121, 82))
        self.layoutWidget8.setObjectName("layoutWidget8")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget8)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.asteroidDiameterLabel = QtWidgets.QLabel(self.layoutWidget8)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidDiameterLabel.setFont(font)
        self.asteroidDiameterLabel.setObjectName("asteroidDiameterLabel")
        self.verticalLayout.addWidget(self.asteroidDiameterLabel)
        self.horizontalLayout_8 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_8.setObjectName("horizontalLayout_8")
        self.asteroidDiameterKmEdit = QtWidgets.QLineEdit(self.layoutWidget8)
        self.asteroidDiameterKmEdit.setMinimumSize(QtCore.QSize(66, 0))
        self.asteroidDiameterKmEdit.setMaximumSize(QtCore.QSize(66, 16777215))
        self.asteroidDiameterKmEdit.setObjectName("asteroidDiameterKmEdit")
        self.horizontalLayout_8.addWidget(self.asteroidDiameterKmEdit)
        self.asteroidDiameterKmLabel = QtWidgets.QLabel(self.layoutWidget8)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidDiameterKmLabel.setFont(font)
        self.asteroidDiameterKmLabel.setObjectName("asteroidDiameterKmLabel")
        self.horizontalLayout_8.addWidget(self.asteroidDiameterKmLabel)
        self.verticalLayout.addLayout(self.horizontalLayout_8)
        self.horizontalLayout_38 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_38.setObjectName("horizontalLayout_38")
        self.asteroidDiameterMasEdit = QtWidgets.QLineEdit(self.layoutWidget8)
        self.asteroidDiameterMasEdit.setMaximumSize(QtCore.QSize(66, 16777215))
        self.asteroidDiameterMasEdit.setObjectName("asteroidDiameterMasEdit")
        self.horizontalLayout_38.addWidget(self.asteroidDiameterMasEdit)
        self.asteroidDiameterMasLabel = QtWidgets.QLabel(self.layoutWidget8)
        font = QtGui.QFont()
        font.setBold(True)
        self.asteroidDiameterMasLabel.setFont(font)
        self.asteroidDiameterMasLabel.setObjectName("asteroidDiameterMasLabel")
        self.horizontalLayout_38.addWidget(self.asteroidDiameterMasLabel)
        self.verticalLayout.addLayout(self.horizontalLayout_38)
        self.layoutWidget9 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget9.setGeometry(QtCore.QRect(21, 221, 151, 80))
        self.layoutWidget9.setObjectName("layoutWidget9")
        self.verticalLayout_9 = QtWidgets.QVBoxLayout(self.layoutWidget9)
        self.verticalLayout_9.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_9.setObjectName("verticalLayout_9")
        self.baselineADUlabel = QtWidgets.QLabel(self.layoutWidget9)
        font = QtGui.QFont()
        font.setBold(True)
        self.baselineADUlabel.setFont(font)
        self.baselineADUlabel.setAlignment(QtCore.Qt.AlignCenter)
        self.baselineADUlabel.setObjectName("baselineADUlabel")
        self.verticalLayout_9.addWidget(self.baselineADUlabel)
        self.baselineADUedit = QtWidgets.QLineEdit(self.layoutWidget9)
        self.baselineADUedit.setReadOnly(True)
        self.baselineADUedit.setObjectName("baselineADUedit")
        self.verticalLayout_9.addWidget(self.baselineADUedit)
        self.horizontalLayout_40 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_40.setObjectName("horizontalLayout_40")
        self.baselineADUbutton = QtWidgets.QPushButton(self.layoutWidget9)
        self.baselineADUbutton.setObjectName("baselineADUbutton")
        self.horizontalLayout_40.addWidget(self.baselineADUbutton)
        self.calcBaselineADUbutton = QtWidgets.QPushButton(self.layoutWidget9)
        self.calcBaselineADUbutton.setObjectName("calcBaselineADUbutton")
        self.horizontalLayout_40.addWidget(self.calcBaselineADUbutton)
        self.clearBaselineADUselectionButton = QtWidgets.QPushButton(self.layoutWidget9)
        self.clearBaselineADUselectionButton.setObjectName("clearBaselineADUselectionButton")
        self.horizontalLayout_40.addWidget(self.clearBaselineADUselectionButton)
        self.verticalLayout_9.addLayout(self.horizontalLayout_40)
        self.layoutWidget10 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget10.setGeometry(QtCore.QRect(180, 220, 161, 80))
        self.layoutWidget10.setObjectName("layoutWidget10")
        self.verticalLayout_10 = QtWidgets.QVBoxLayout(self.layoutWidget10)
        self.verticalLayout_10.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_10.setObjectName("verticalLayout_10")
        self.bottomADUlabel = QtWidgets.QLabel(self.layoutWidget10)
        font = QtGui.QFont()
        font.setBold(True)
        self.bottomADUlabel.setFont(font)
        self.bottomADUlabel.setAlignment(QtCore.Qt.AlignCenter)
        self.bottomADUlabel.setObjectName("bottomADUlabel")
        self.verticalLayout_10.addWidget(self.bottomADUlabel)
        self.bottomADUedit = QtWidgets.QLineEdit(self.layoutWidget10)
        self.bottomADUedit.setObjectName("bottomADUedit")
        self.verticalLayout_10.addWidget(self.bottomADUedit)
        self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_13.setObjectName("horizontalLayout_13")
        self.magdropLabel = QtWidgets.QLabel(self.layoutWidget10)
        font = QtGui.QFont()
        font.setBold(True)
        self.magdropLabel.setFont(font)
        self.magdropLabel.setObjectName("magdropLabel")
        self.horizontalLayout_13.addWidget(self.magdropLabel)
        self.magDropEdit = QtWidgets.QLineEdit(self.layoutWidget10)
        self.magDropEdit.setObjectName("magDropEdit")
        self.horizontalLayout_13.addWidget(self.magDropEdit)
        self.verticalLayout_10.addLayout(self.horizontalLayout_13)
        self.layoutWidget11 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget11.setGeometry(QtCore.QRect(690, 220, 101, 82))
        self.layoutWidget11.setObjectName("layoutWidget11")
        self.verticalLayout_11 = QtWidgets.QVBoxLayout(self.layoutWidget11)
        self.verticalLayout_11.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_11.setObjectName("verticalLayout_11")
        self.fresnelSizeLabel = QtWidgets.QLabel(self.layoutWidget11)
        font = QtGui.QFont()
        font.setBold(True)
        self.fresnelSizeLabel.setFont(font)
        self.fresnelSizeLabel.setObjectName("fresnelSizeLabel")
        self.verticalLayout_11.addWidget(self.fresnelSizeLabel)
        self.horizontalLayout_138 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_138.setObjectName("horizontalLayout_138")
        self.fresnelSizeSecondsEdit = QtWidgets.QLineEdit(self.layoutWidget11)
        self.fresnelSizeSecondsEdit.setReadOnly(True)
        self.fresnelSizeSecondsEdit.setObjectName("fresnelSizeSecondsEdit")
        self.horizontalLayout_138.addWidget(self.fresnelSizeSecondsEdit)
        self.fresnelSizeSecondsLabel = QtWidgets.QLabel(self.layoutWidget11)
        font = QtGui.QFont()
        font.setBold(True)
        self.fresnelSizeSecondsLabel.setFont(font)
        self.fresnelSizeSecondsLabel.setObjectName("fresnelSizeSecondsLabel")
        self.horizontalLayout_138.addWidget(self.fresnelSizeSecondsLabel)
        self.verticalLayout_11.addLayout(self.horizontalLayout_138)
        self.horizontalLayout_137 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_137.setObjectName("horizontalLayout_137")
        self.fresnelSizeKmEdit = QtWidgets.QLineEdit(self.layoutWidget11)
        self.fresnelSizeKmEdit.setReadOnly(True)
        self.fresnelSizeKmEdit.setObjectName("fresnelSizeKmEdit")
        self.horizontalLayout_137.addWidget(self.fresnelSizeKmEdit)
        self.fresnelSizeKmLabel = QtWidgets.QLabel(self.layoutWidget11)
        font = QtGui.QFont()
        font.setBold(True)
        self.fresnelSizeKmLabel.setFont(font)
        self.fresnelSizeKmLabel.setObjectName("fresnelSizeKmLabel")
        self.horizontalLayout_137.addWidget(self.fresnelSizeKmLabel)
        self.verticalLayout_11.addLayout(self.horizontalLayout_137)
        self.layoutWidget12 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget12.setGeometry(QtCore.QRect(340, 430, 491, 77))
        self.layoutWidget12.setObjectName("layoutWidget12")
        self.verticalLayout_15 = QtWidgets.QVBoxLayout(self.layoutWidget12)
        self.verticalLayout_15.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_15.setObjectName("verticalLayout_15")
        self.fitPrecisionLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.fitPrecisionLabel.setFont(font)
        self.fitPrecisionLabel.setObjectName("fitPrecisionLabel")
        self.verticalLayout_15.addWidget(self.fitPrecisionLabel)
        self.horizontalLayout_41 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_41.setObjectName("horizontalLayout_41")
        self.verticalLayout_12 = QtWidgets.QVBoxLayout()
        self.verticalLayout_12.setSpacing(6)
        self.verticalLayout_12.setObjectName("verticalLayout_12")
        self.edgeTimePrecisionLabel = QtWidgets.QLabel(self.layoutWidget12)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.edgeTimePrecisionLabel.sizePolicy().hasHeightForWidth())
        self.edgeTimePrecisionLabel.setSizePolicy(sizePolicy)
        self.edgeTimePrecisionLabel.setMinimumSize(QtCore.QSize(0, 0))
        font = QtGui.QFont()
        font.setBold(True)
        self.edgeTimePrecisionLabel.setFont(font)
        self.edgeTimePrecisionLabel.setObjectName("edgeTimePrecisionLabel")
        self.verticalLayout_12.addWidget(self.edgeTimePrecisionLabel)
        self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_14.setObjectName("horizontalLayout_14")
        self.edgeTimePrecisionEdit = QtWidgets.QLineEdit(self.layoutWidget12)
        self.edgeTimePrecisionEdit.setMinimumSize(QtCore.QSize(50, 0))
        self.edgeTimePrecisionEdit.setMaximumSize(QtCore.QSize(50, 16777215))
        self.edgeTimePrecisionEdit.setPlaceholderText("")
        self.edgeTimePrecisionEdit.setObjectName("edgeTimePrecisionEdit")
        self.horizontalLayout_14.addWidget(self.edgeTimePrecisionEdit)
        self.edgeTimePrecisionUnitsLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.edgeTimePrecisionUnitsLabel.setFont(font)
        self.edgeTimePrecisionUnitsLabel.setObjectName("edgeTimePrecisionUnitsLabel")
        self.horizontalLayout_14.addWidget(self.edgeTimePrecisionUnitsLabel)
        self.verticalLayout_12.addLayout(self.horizontalLayout_14)
        self.horizontalLayout_41.addLayout(self.verticalLayout_12)
        self.verticalLayout_13 = QtWidgets.QVBoxLayout()
        self.verticalLayout_13.setObjectName("verticalLayout_13")
        self.chordDurationPrecisionLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.chordDurationPrecisionLabel.setFont(font)
        self.chordDurationPrecisionLabel.setObjectName("chordDurationPrecisionLabel")
        self.verticalLayout_13.addWidget(self.chordDurationPrecisionLabel)
        self.horizontalLayout_15 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_15.setObjectName("horizontalLayout_15")
        self.chordDurationPrecisionEdit = QtWidgets.QLineEdit(self.layoutWidget12)
        self.chordDurationPrecisionEdit.setMinimumSize(QtCore.QSize(50, 0))
        self.chordDurationPrecisionEdit.setMaximumSize(QtCore.QSize(50, 16777215))
        self.chordDurationPrecisionEdit.setObjectName("chordDurationPrecisionEdit")
        self.horizontalLayout_15.addWidget(self.chordDurationPrecisionEdit)
        self.chordDurationUnitsLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.chordDurationUnitsLabel.setFont(font)
        self.chordDurationUnitsLabel.setObjectName("chordDurationUnitsLabel")
        self.horizontalLayout_15.addWidget(self.chordDurationUnitsLabel)
        self.verticalLayout_13.addLayout(self.horizontalLayout_15)
        self.horizontalLayout_41.addLayout(self.verticalLayout_13)
        self.verticalLayout_14 = QtWidgets.QVBoxLayout()
        self.verticalLayout_14.setObjectName("verticalLayout_14")
        self.limbAnglePrecisionLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.limbAnglePrecisionLabel.setFont(font)
        self.limbAnglePrecisionLabel.setObjectName("limbAnglePrecisionLabel")
        self.verticalLayout_14.addWidget(self.limbAnglePrecisionLabel)
        self.horizontalLayout_16 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_16.setObjectName("horizontalLayout_16")
        self.limbAnglePrecisionEdit = QtWidgets.QLineEdit(self.layoutWidget12)
        self.limbAnglePrecisionEdit.setMinimumSize(QtCore.QSize(50, 0))
        self.limbAnglePrecisionEdit.setMaximumSize(QtCore.QSize(50, 16777215))
        self.limbAnglePrecisionEdit.setObjectName("limbAnglePrecisionEdit")
        self.horizontalLayout_16.addWidget(self.limbAnglePrecisionEdit)
        self.limbAnglePrecisionUnitsLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.limbAnglePrecisionUnitsLabel.setFont(font)
        self.limbAnglePrecisionUnitsLabel.setObjectName("limbAnglePrecisionUnitsLabel")
        self.horizontalLayout_16.addWidget(self.limbAnglePrecisionUnitsLabel)
        self.verticalLayout_14.addLayout(self.horizontalLayout_16)
        self.horizontalLayout_41.addLayout(self.verticalLayout_14)
        self.verticalLayout_16 = QtWidgets.QVBoxLayout()
        self.verticalLayout_16.setObjectName("verticalLayout_16")
        self.missDistancePrecisionLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.missDistancePrecisionLabel.setFont(font)
        self.missDistancePrecisionLabel.setObjectName("missDistancePrecisionLabel")
        self.verticalLayout_16.addWidget(self.missDistancePrecisionLabel)
        self.horizontalLayout_45 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_45.setObjectName("horizontalLayout_45")
        self.missDistancePrecisionEdit = QtWidgets.QLineEdit(self.layoutWidget12)
        self.missDistancePrecisionEdit.setMinimumSize(QtCore.QSize(50, 0))
        self.missDistancePrecisionEdit.setMaximumSize(QtCore.QSize(50, 16777215))
        self.missDistancePrecisionEdit.setObjectName("missDistancePrecisionEdit")
        self.horizontalLayout_45.addWidget(self.missDistancePrecisionEdit)
        self.missDistancePrecisionUnitsLabel = QtWidgets.QLabel(self.layoutWidget12)
        font = QtGui.QFont()
        font.setBold(True)
        self.missDistancePrecisionUnitsLabel.setFont(font)
        self.missDistancePrecisionUnitsLabel.setObjectName("missDistancePrecisionUnitsLabel")
        self.horizontalLayout_45.addWidget(self.missDistancePrecisionUnitsLabel)
        self.verticalLayout_16.addLayout(self.horizontalLayout_45)
        self.horizontalLayout_41.addLayout(self.verticalLayout_16)
        self.verticalLayout_15.addLayout(self.horizontalLayout_41)
        self.layoutWidget13 = QtWidgets.QWidget(self.tab_3)
        self.layoutWidget13.setGeometry(QtCore.QRect(360, 400, 241, 26))
        self.layoutWidget13.setObjectName("layoutWidget13")
        self.horizontalLayout_44 = QtWidgets.QHBoxLayout(self.layoutWidget13)
        self.horizontalLayout_44.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_44.setObjectName("horizontalLayout_44")
        self.beingOptimizedEdit = QtWidgets.QLineEdit(self.layoutWidget13)
        self.beingOptimizedEdit.setObjectName("beingOptimizedEdit")
        self.horizontalLayout_44.addWidget(self.beingOptimizedEdit)
        self.beingOptimizedLabel = QtWidgets.QLabel(self.layoutWidget13)
        font = QtGui.QFont()
        font.setBold(True)
        self.beingOptimizedLabel.setFont(font)
        self.beingOptimizedLabel.setObjectName("beingOptimizedLabel")
        self.horizontalLayout_44.addWidget(self.beingOptimizedLabel)
        self.tabWidget.addTab(self.tab_3, "")
        self.tab_9 = QtWidgets.QWidget()
        self.tab_9.setObjectName("tab_9")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.tab_9)
        self.gridLayout_3.setObjectName("gridLayout_3")
        spacerItem53 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_3.addItem(spacerItem53, 0, 1, 1, 1)
        spacerItem54 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_3.addItem(spacerItem54, 1, 0, 1, 1)
        self.verticalLayout_4 = QtWidgets.QVBoxLayout()
        self.verticalLayout_4.setObjectName("verticalLayout_4")
        self.calcFlashEdge = QtWidgets.QPushButton(self.tab_9)
        self.calcFlashEdge.setEnabled(False)
        self.calcFlashEdge.setObjectName("calcFlashEdge")
        self.verticalLayout_4.addWidget(self.calcFlashEdge)
        self.horizontalLayout_22 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_22.setObjectName("horizontalLayout_22")
        self.manualEntryPushButton = QtWidgets.QPushButton(self.tab_9)
        self.manualEntryPushButton.setEnabled(True)
        self.manualEntryPushButton.setObjectName("manualEntryPushButton")
        self.horizontalLayout_22.addWidget(self.manualEntryPushButton)
        self.verticalLayout_4.addLayout(self.horizontalLayout_22)
        self.gridLayout_3.addLayout(self.verticalLayout_4, 1, 1, 1, 1)
        spacerItem55 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_3.addItem(spacerItem55, 1, 2, 1, 1)
        spacerItem56 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_3.addItem(spacerItem56, 2, 1, 1, 1)
        self.tabWidget.addTab(self.tab_9, "")
        self.settingsTab = QtWidgets.QWidget()
        self.settingsTab.setObjectName("settingsTab")
        self.gridLayout_5 = QtWidgets.QGridLayout(self.settingsTab)
        self.gridLayout_5.setObjectName("gridLayout_5")
        spacerItem57 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_5.addItem(spacerItem57, 0, 2, 1, 1)
        self.allowNewVersionPopupCheckbox = QtWidgets.QCheckBox(self.settingsTab)
        self.allowNewVersionPopupCheckbox.setChecked(True)
        self.allowNewVersionPopupCheckbox.setObjectName("allowNewVersionPopupCheckbox")
        self.gridLayout_5.addWidget(self.allowNewVersionPopupCheckbox, 1, 1, 1, 1)
        self.line_16 = QtWidgets.QFrame(self.settingsTab)
        self.line_16.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_16.setLineWidth(4)
        self.line_16.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_16.setObjectName("line_16")
        self.gridLayout_5.addWidget(self.line_16, 2, 1, 1, 3)
        self.label = QtWidgets.QLabel(self.settingsTab)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.gridLayout_5.addWidget(self.label, 3, 1, 1, 2)
        self.horizontalLayout_17 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_17.setObjectName("horizontalLayout_17")
        self.showTimestampErrors = QtWidgets.QCheckBox(self.settingsTab)
        self.showTimestampErrors.setEnabled(False)
        self.showTimestampErrors.setObjectName("showTimestampErrors")
        self.horizontalLayout_17.addWidget(self.showTimestampErrors)
        self.showCameraResponseCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.showCameraResponseCheckBox.setChecked(True)
        self.showCameraResponseCheckBox.setObjectName("showCameraResponseCheckBox")
        self.horizontalLayout_17.addWidget(self.showCameraResponseCheckBox)
        self.showUnderlyingLightcurveCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.showUnderlyingLightcurveCheckBox.setChecked(False)
        self.showUnderlyingLightcurveCheckBox.setObjectName("showUnderlyingLightcurveCheckBox")
        self.horizontalLayout_17.addWidget(self.showUnderlyingLightcurveCheckBox)
        self.showErrBarsCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.showErrBarsCheckBox.setChecked(True)
        self.showErrBarsCheckBox.setObjectName("showErrBarsCheckBox")
        self.horizontalLayout_17.addWidget(self.showErrBarsCheckBox)
        self.showEdgesCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.showEdgesCheckBox.setChecked(True)
        self.showEdgesCheckBox.setObjectName("showEdgesCheckBox")
        self.horizontalLayout_17.addWidget(self.showEdgesCheckBox)
        self.showOCRcheckFramesCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.showOCRcheckFramesCheckBox.setChecked(True)
        self.showOCRcheckFramesCheckBox.setObjectName("showOCRcheckFramesCheckBox")
        self.horizontalLayout_17.addWidget(self.showOCRcheckFramesCheckBox)
        self.showTimestampsCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.showTimestampsCheckBox.setObjectName("showTimestampsCheckBox")
        self.horizontalLayout_17.addWidget(self.showTimestampsCheckBox)
        self.gridLayout_5.addLayout(self.horizontalLayout_17, 4, 1, 1, 2)
        self.line_5 = QtWidgets.QFrame(self.settingsTab)
        self.line_5.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_5.setLineWidth(4)
        self.line_5.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_5.setObjectName("line_5")
        self.gridLayout_5.addWidget(self.line_5, 5, 1, 1, 3)
        spacerItem58 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_5.addItem(spacerItem58, 5, 4, 2, 1)
        self.label_2 = QtWidgets.QLabel(self.settingsTab)
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.gridLayout_5.addWidget(self.label_2, 6, 1, 1, 2)
        self.horizontalLayout_18 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_18.setObjectName("horizontalLayout_18")
        self.viewFrameButton = QtWidgets.QPushButton(self.settingsTab)
        self.viewFrameButton.setEnabled(False)
        self.viewFrameButton.setObjectName("viewFrameButton")
        self.horizontalLayout_18.addWidget(self.viewFrameButton)
        self.frameNumSpinBox = QtWidgets.QSpinBox(self.settingsTab)
        self.frameNumSpinBox.setEnabled(False)
        self.frameNumSpinBox.setMaximumSize(QtCore.QSize(100, 16777215))
        self.frameNumSpinBox.setSizeIncrement(QtCore.QSize(0, 0))
        self.frameNumSpinBox.setMaximum(99999)
        self.frameNumSpinBox.setObjectName("frameNumSpinBox")
        self.horizontalLayout_18.addWidget(self.frameNumSpinBox)
        self.gridLayout_5.addLayout(self.horizontalLayout_18, 7, 1, 1, 1)
        self.line_11 = QtWidgets.QFrame(self.settingsTab)
        self.line_11.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_11.setLineWidth(4)
        self.line_11.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_11.setObjectName("line_11")
        self.gridLayout_5.addWidget(self.line_11, 8, 1, 1, 3)
        self.label_3 = QtWidgets.QLabel(self.settingsTab)
        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
        self.label_3.setObjectName("label_3")
        self.gridLayout_5.addWidget(self.label_3, 9, 1, 1, 2)
        self.horizontalLayout_19 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_19.setObjectName("horizontalLayout_19")
        self.fieldViewCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.fieldViewCheckBox.setEnabled(False)
        self.fieldViewCheckBox.setObjectName("fieldViewCheckBox")
        self.horizontalLayout_19.addWidget(self.fieldViewCheckBox)
        self.flipYaxisCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.flipYaxisCheckBox.setEnabled(False)
        self.flipYaxisCheckBox.setObjectName("flipYaxisCheckBox")
        self.horizontalLayout_19.addWidget(self.flipYaxisCheckBox)
        self.flipXaxisCheckBox = QtWidgets.QCheckBox(self.settingsTab)
        self.flipXaxisCheckBox.setEnabled(False)
        self.flipXaxisCheckBox.setObjectName("flipXaxisCheckBox")
        self.horizontalLayout_19.addWidget(self.flipXaxisCheckBox)
        self.gridLayout_5.addLayout(self.horizontalLayout_19, 10, 1, 1, 1)
        spacerItem59 = QtWidgets.QSpacerItem(155, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_5.addItem(spacerItem59, 11, 0, 2, 1)
        self.line_9 = QtWidgets.QFrame(self.settingsTab)
        self.line_9.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_9.setLineWidth(4)
        self.line_9.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_9.setObjectName("line_9")
        self.gridLayout_5.addWidget(self.line_9, 11, 1, 1, 3)
        self.label_4 = QtWidgets.QLabel(self.settingsTab)
        self.label_4.setObjectName("label_4")
        self.gridLayout_5.addWidget(self.label_4, 12, 1, 1, 2)
        self.horizontalLayout_20 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_20.setObjectName("horizontalLayout_20")
        self.lineWidthLabel = QtWidgets.QLabel(self.settingsTab)
        self.lineWidthLabel.setObjectName("lineWidthLabel")
        self.horizontalLayout_20.addWidget(self.lineWidthLabel)
        self.lineWidthSpinner = QtWidgets.QSpinBox(self.settingsTab)
        self.lineWidthSpinner.setMinimum(1)
        self.lineWidthSpinner.setMaximum(9)
        self.lineWidthSpinner.setProperty("value", 5)
        self.lineWidthSpinner.setObjectName("lineWidthSpinner")
        self.horizontalLayout_20.addWidget(self.lineWidthSpinner)
        spacerItem60 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_20.addItem(spacerItem60)
        self.gridLayout_5.addLayout(self.horizontalLayout_20, 13, 1, 1, 1)
        self.line_13 = QtWidgets.QFrame(self.settingsTab)
        self.line_13.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_13.setLineWidth(4)
        self.line_13.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_13.setObjectName("line_13")
        self.gridLayout_5.addWidget(self.line_13, 14, 1, 1, 3)
        self.label_31 = QtWidgets.QLabel(self.settingsTab)
        self.label_31.setObjectName("label_31")
        self.gridLayout_5.addWidget(self.label_31, 15, 1, 1, 1)
        self.horizontalLayout_39 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_39.setObjectName("horizontalLayout_39")
        self.lineWidthLabel_2 = QtWidgets.QLabel(self.settingsTab)
        self.lineWidthLabel_2.setObjectName("lineWidthLabel_2")
        self.horizontalLayout_39.addWidget(self.lineWidthLabel_2)
        self.dotSizeSpinner = QtWidgets.QSpinBox(self.settingsTab)
        self.dotSizeSpinner.setMinimum(1)
        self.dotSizeSpinner.setMaximum(12)
        self.dotSizeSpinner.setProperty("value", 8)
        self.dotSizeSpinner.setObjectName("dotSizeSpinner")
        self.horizontalLayout_39.addWidget(self.dotSizeSpinner)
        spacerItem61 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_39.addItem(spacerItem61)
        self.gridLayout_5.addLayout(self.horizontalLayout_39, 16, 1, 1, 1)
        self.line_26 = QtWidgets.QFrame(self.settingsTab)
        self.line_26.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_26.setLineWidth(4)
        self.line_26.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_26.setObjectName("line_26")
        self.gridLayout_5.addWidget(self.line_26, 17, 1, 1, 3)
        self.label_6 = QtWidgets.QLabel(self.settingsTab)
        self.label_6.setObjectName("label_6")
        self.gridLayout_5.addWidget(self.label_6, 18, 1, 1, 2)
        self.label_7 = QtWidgets.QLabel(self.settingsTab)
        self.label_7.setObjectName("label_7")
        self.gridLayout_5.addWidget(self.label_7, 19, 1, 1, 2)
        self.label_8 = QtWidgets.QLabel(self.settingsTab)
        self.label_8.setObjectName("label_8")
        self.gridLayout_5.addWidget(self.label_8, 20, 1, 1, 3)
        self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_9.setObjectName("horizontalLayout_9")
        self.pymovieDataColumnPrefixComboBox = QtWidgets.QComboBox(self.settingsTab)
        self.pymovieDataColumnPrefixComboBox.setCurrentText("")
        self.pymovieDataColumnPrefixComboBox.setObjectName("pymovieDataColumnPrefixComboBox")
        self.horizontalLayout_9.addWidget(self.pymovieDataColumnPrefixComboBox)
        self.label_5 = QtWidgets.QLabel(self.settingsTab)
        self.label_5.setObjectName("label_5")
        self.horizontalLayout_9.addWidget(self.label_5)
        spacerItem62 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_9.addItem(spacerItem62)
        self.gridLayout_5.addLayout(self.horizontalLayout_9, 21, 1, 1, 1)
        spacerItem63 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_5.addItem(spacerItem63, 22, 3, 1, 1)
        self.tabWidget.addTab(self.settingsTab, "")
        self.tab_8 = QtWidgets.QWidget()
        self.tab_8.setObjectName("tab_8")
        self.gridLayout_6 = QtWidgets.QGridLayout(self.tab_8)
        self.gridLayout_6.setObjectName("gridLayout_6")
        spacerItem64 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_6.addItem(spacerItem64, 0, 1, 1, 1)
        self.verticalLayout_3 = QtWidgets.QVBoxLayout()
        self.verticalLayout_3.setObjectName("verticalLayout_3")
        self.detectabilityHelpButton = QtWidgets.QPushButton(self.tab_8)
        self.detectabilityHelpButton.setObjectName("detectabilityHelpButton")
        self.verticalLayout_3.addWidget(self.detectabilityHelpButton)
        self.line_12 = QtWidgets.QFrame(self.tab_8)
        self.line_12.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_12.setLineWidth(4)
        self.line_12.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_12.setObjectName("line_12")
        self.verticalLayout_3.addWidget(self.line_12)
        self.markBaselineRegionButton = QtWidgets.QPushButton(self.tab_8)
        self.markBaselineRegionButton.setObjectName("markBaselineRegionButton")
        self.verticalLayout_3.addWidget(self.markBaselineRegionButton)
        self.clearBaselineRegionsButton = QtWidgets.QPushButton(self.tab_8)
        self.clearBaselineRegionsButton.setObjectName("clearBaselineRegionsButton")
        self.verticalLayout_3.addWidget(self.clearBaselineRegionsButton)
        self.calcStatsFromBaselineRegionsButton = QtWidgets.QPushButton(self.tab_8)
        self.calcStatsFromBaselineRegionsButton.setObjectName("calcStatsFromBaselineRegionsButton")
        self.verticalLayout_3.addWidget(self.calcStatsFromBaselineRegionsButton)
        self.line_10 = QtWidgets.QFrame(self.tab_8)
        self.line_10.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_10.setLineWidth(4)
        self.line_10.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_10.setObjectName("line_10")
        self.verticalLayout_3.addWidget(self.line_10)
        self.gridLayout_6.addLayout(self.verticalLayout_3, 1, 1, 1, 1)
        spacerItem65 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_6.addItem(spacerItem65, 2, 0, 1, 1)
        self.horizontalLayout_21 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_21.setObjectName("horizontalLayout_21")
        self.obsDurLabel = QtWidgets.QLabel(self.tab_8)
        self.obsDurLabel.setObjectName("obsDurLabel")
        self.horizontalLayout_21.addWidget(self.obsDurLabel)
        self.observationDurEdit = QtWidgets.QLineEdit(self.tab_8)
        self.observationDurEdit.setMinimumSize(QtCore.QSize(0, 0))
        self.observationDurEdit.setMaximumSize(QtCore.QSize(80, 16777215))
        self.observationDurEdit.setObjectName("observationDurEdit")
        self.horizontalLayout_21.addWidget(self.observationDurEdit)
        self.eventDurLabel = QtWidgets.QLabel(self.tab_8)
        self.eventDurLabel.setObjectName("eventDurLabel")
        self.horizontalLayout_21.addWidget(self.eventDurLabel)
        self.eventDurationEdit = QtWidgets.QLineEdit(self.tab_8)
        self.eventDurationEdit.setMaximumSize(QtCore.QSize(80, 16777215))
        self.eventDurationEdit.setObjectName("eventDurationEdit")
        self.horizontalLayout_21.addWidget(self.eventDurationEdit)
        self.durStepLabel = QtWidgets.QLabel(self.tab_8)
        self.durStepLabel.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.durStepLabel.setObjectName("durStepLabel")
        self.horizontalLayout_21.addWidget(self.durStepLabel)
        self.durStepEdit = QtWidgets.QLineEdit(self.tab_8)
        self.durStepEdit.setMaximumSize(QtCore.QSize(60, 16777215))
        self.durStepEdit.setObjectName("durStepEdit")
        self.horizontalLayout_21.addWidget(self.durStepEdit)
        spacerItem66 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_21.addItem(spacerItem66)
        self.detectMagDropLabel = QtWidgets.QLabel(self.tab_8)
        self.detectMagDropLabel.setObjectName("detectMagDropLabel")
        self.horizontalLayout_21.addWidget(self.detectMagDropLabel)
        self.detectabilityMagDropEdit = QtWidgets.QLineEdit(self.tab_8)
        self.detectabilityMagDropEdit.setMaximumSize(QtCore.QSize(60, 16777215))
        self.detectabilityMagDropEdit.setObjectName("detectabilityMagDropEdit")
        self.horizontalLayout_21.addWidget(self.detectabilityMagDropEdit)
        self.gridLayout_6.addLayout(self.horizontalLayout_21, 2, 1, 1, 1)
        spacerItem67 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_6.addItem(spacerItem67, 2, 2, 1, 1)
        self.horizontalLayout_27 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_27.setObjectName("horizontalLayout_27")
        self.calcDetectabilityButton = QtWidgets.QPushButton(self.tab_8)
        self.calcDetectabilityButton.setMinimumSize(QtCore.QSize(500, 0))
        self.calcDetectabilityButton.setObjectName("calcDetectabilityButton")
        self.horizontalLayout_27.addWidget(self.calcDetectabilityButton)
        spacerItem68 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_27.addItem(spacerItem68)
        self.writeExampleLightcurveCheckBox = QtWidgets.QCheckBox(self.tab_8)
        self.writeExampleLightcurveCheckBox.setObjectName("writeExampleLightcurveCheckBox")
        self.horizontalLayout_27.addWidget(self.writeExampleLightcurveCheckBox)
        self.gridLayout_6.addLayout(self.horizontalLayout_27, 3, 1, 1, 1)
        spacerItem69 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_6.addItem(spacerItem69, 4, 1, 1, 1)
        self.tabWidget.addTab(self.tab_8, "")
        self.tab = QtWidgets.QWidget()
        self.tab.setObjectName("tab")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.tab)
        self.gridLayout_2.setObjectName("gridLayout_2")
        spacerItem70 = QtWidgets.QSpacerItem(20, 247, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_2.addItem(spacerItem70, 0, 1, 1, 1)
        self.verticalLayout_7 = QtWidgets.QVBoxLayout()
        self.verticalLayout_7.setObjectName("verticalLayout_7")
        self.ne3ExplanationButton = QtWidgets.QPushButton(self.tab)
        self.ne3ExplanationButton.setObjectName("ne3ExplanationButton")
        self.verticalLayout_7.addWidget(self.ne3ExplanationButton)
        self.ne3NotInUseRadioButton = QtWidgets.QRadioButton(self.tab)
        self.ne3NotInUseRadioButton.setChecked(True)
        self.ne3NotInUseRadioButton.setObjectName("ne3NotInUseRadioButton")
        self.verticalLayout_7.addWidget(self.ne3NotInUseRadioButton)
        self.line_14 = QtWidgets.QFrame(self.tab)
        self.line_14.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_14.setLineWidth(5)
        self.line_14.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_14.setObjectName("line_14")
        self.verticalLayout_7.addWidget(self.line_14)
        self.dnrOffRadioButton = QtWidgets.QRadioButton(self.tab)
        self.dnrOffRadioButton.setChecked(False)
        self.dnrOffRadioButton.setObjectName("dnrOffRadioButton")
        self.verticalLayout_7.addWidget(self.dnrOffRadioButton)
        self.gridLayout_2.addLayout(self.verticalLayout_7, 1, 1, 1, 1)
        self.horizontalLayout_23 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_23.setObjectName("horizontalLayout_23")
        self.dnrLowRadioButton = QtWidgets.QRadioButton(self.tab)
        self.dnrLowRadioButton.setObjectName("dnrLowRadioButton")
        self.horizontalLayout_23.addWidget(self.dnrLowRadioButton)
        spacerItem71 = QtWidgets.QSpacerItem(113, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_23.addItem(spacerItem71)
        self.dnrLowDtcLabel = QtWidgets.QLabel(self.tab)
        self.dnrLowDtcLabel.setObjectName("dnrLowDtcLabel")
        self.horizontalLayout_23.addWidget(self.dnrLowDtcLabel)
        self.dnrLowDspinBox = QtWidgets.QDoubleSpinBox(self.tab)
        self.dnrLowDspinBox.setMinimumSize(QtCore.QSize(70, 0))
        self.dnrLowDspinBox.setMinimum(0.1)
        self.dnrLowDspinBox.setMaximum(1.0)
        self.dnrLowDspinBox.setSingleStep(0.1)
        self.dnrLowDspinBox.setProperty("value", 0.5)
        self.dnrLowDspinBox.setObjectName("dnrLowDspinBox")
        self.horizontalLayout_23.addWidget(self.dnrLowDspinBox)
        self.dnrLowRtcLabel = QtWidgets.QLabel(self.tab)
        self.dnrLowRtcLabel.setObjectName("dnrLowRtcLabel")
        self.horizontalLayout_23.addWidget(self.dnrLowRtcLabel)
        self.dnrLowRspinBox = QtWidgets.QDoubleSpinBox(self.tab)
        self.dnrLowRspinBox.setMinimumSize(QtCore.QSize(70, 0))
        self.dnrLowRspinBox.setMaximum(1.0)
        self.dnrLowRspinBox.setSingleStep(0.1)
        self.dnrLowRspinBox.setProperty("value", 0.5)
        self.dnrLowRspinBox.setObjectName("dnrLowRspinBox")
        self.horizontalLayout_23.addWidget(self.dnrLowRspinBox)
        self.gridLayout_2.addLayout(self.horizontalLayout_23, 2, 1, 1, 1)
        spacerItem72 = QtWidgets.QSpacerItem(190, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_2.addItem(spacerItem72, 3, 0, 1, 1)
        self.horizontalLayout_24 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_24.setObjectName("horizontalLayout_24")
        self.dnrMiddleRadioButton = QtWidgets.QRadioButton(self.tab)
        self.dnrMiddleRadioButton.setObjectName("dnrMiddleRadioButton")
        self.horizontalLayout_24.addWidget(self.dnrMiddleRadioButton)
        spacerItem73 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_24.addItem(spacerItem73)
        self.dnrMiddleDtcLabel = QtWidgets.QLabel(self.tab)
        self.dnrMiddleDtcLabel.setObjectName("dnrMiddleDtcLabel")
        self.horizontalLayout_24.addWidget(self.dnrMiddleDtcLabel)
        self.dnrMiddleDspinBox = QtWidgets.QDoubleSpinBox(self.tab)
        self.dnrMiddleDspinBox.setMinimumSize(QtCore.QSize(70, 0))
        self.dnrMiddleDspinBox.setMinimum(0.5)
        self.dnrMiddleDspinBox.setMaximum(5.0)
        self.dnrMiddleDspinBox.setSingleStep(0.1)
        self.dnrMiddleDspinBox.setProperty("value", 1.0)
        self.dnrMiddleDspinBox.setObjectName("dnrMiddleDspinBox")
        self.horizontalLayout_24.addWidget(self.dnrMiddleDspinBox)
        self.dnrMiddleRtcLabel = QtWidgets.QLabel(self.tab)
        self.dnrMiddleRtcLabel.setObjectName("dnrMiddleRtcLabel")
        self.horizontalLayout_24.addWidget(self.dnrMiddleRtcLabel)
        self.dnrMiddleRspinBox = QtWidgets.QDoubleSpinBox(self.tab)
        self.dnrMiddleRspinBox.setMinimumSize(QtCore.QSize(70, 0))
        self.dnrMiddleRspinBox.setMinimum(0.5)
        self.dnrMiddleRspinBox.setMaximum(5.0)
        self.dnrMiddleRspinBox.setSingleStep(0.1)
        self.dnrMiddleRspinBox.setProperty("value", 1.0)
        self.dnrMiddleRspinBox.setObjectName("dnrMiddleRspinBox")
        self.horizontalLayout_24.addWidget(self.dnrMiddleRspinBox)
        self.gridLayout_2.addLayout(self.horizontalLayout_24, 3, 1, 1, 1)
        spacerItem74 = QtWidgets.QSpacerItem(113, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_2.addItem(spacerItem74, 3, 2, 1, 1)
        self.horizontalLayout_25 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_25.setObjectName("horizontalLayout_25")
        self.dnrHighRadioButton = QtWidgets.QRadioButton(self.tab)
        self.dnrHighRadioButton.setObjectName("dnrHighRadioButton")
        self.horizontalLayout_25.addWidget(self.dnrHighRadioButton)
        spacerItem75 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_25.addItem(spacerItem75)
        self.dnrHighDtcLabel = QtWidgets.QLabel(self.tab)
        self.dnrHighDtcLabel.setObjectName("dnrHighDtcLabel")
        self.horizontalLayout_25.addWidget(self.dnrHighDtcLabel)
        self.dnrHighDspinBox = QtWidgets.QDoubleSpinBox(self.tab)
        self.dnrHighDspinBox.setMinimumSize(QtCore.QSize(70, 0))
        self.dnrHighDspinBox.setMinimum(1.0)
        self.dnrHighDspinBox.setMaximum(10.0)
        self.dnrHighDspinBox.setSingleStep(0.1)
        self.dnrHighDspinBox.setProperty("value", 4.5)
        self.dnrHighDspinBox.setObjectName("dnrHighDspinBox")
        self.horizontalLayout_25.addWidget(self.dnrHighDspinBox)
        self.dnrHighRtcLabel = QtWidgets.QLabel(self.tab)
        self.dnrHighRtcLabel.setObjectName("dnrHighRtcLabel")
        self.horizontalLayout_25.addWidget(self.dnrHighRtcLabel)
        self.dnrHighRspinBox = QtWidgets.QDoubleSpinBox(self.tab)
        self.dnrHighRspinBox.setMinimumSize(QtCore.QSize(70, 0))
        self.dnrHighRspinBox.setMinimum(1.0)
        self.dnrHighRspinBox.setMaximum(10.0)
        self.dnrHighRspinBox.setSingleStep(0.1)
        self.dnrHighRspinBox.setProperty("value", 2.0)
        self.dnrHighRspinBox.setObjectName("dnrHighRspinBox")
        self.horizontalLayout_25.addWidget(self.dnrHighRspinBox)
        self.gridLayout_2.addLayout(self.horizontalLayout_25, 4, 1, 1, 1)
        self.line_15 = QtWidgets.QFrame(self.tab)
        self.line_15.setFrameShadow(QtWidgets.QFrame.Plain)
        self.line_15.setLineWidth(5)
        self.line_15.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_15.setObjectName("line_15")
        self.gridLayout_2.addWidget(self.line_15, 5, 1, 1, 1)
        self.horizontalLayout_26 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_26.setObjectName("horizontalLayout_26")
        spacerItem76 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_26.addItem(spacerItem76)
        self.yPositionLabel = QtWidgets.QLabel(self.tab)
        self.yPositionLabel.setObjectName("yPositionLabel")
        self.horizontalLayout_26.addWidget(self.yPositionLabel)
        self.targetStarYpositionSpinBox = QtWidgets.QSpinBox(self.tab)
        self.targetStarYpositionSpinBox.setMinimumSize(QtCore.QSize(80, 0))
        self.targetStarYpositionSpinBox.setMaximum(479)
        self.targetStarYpositionSpinBox.setObjectName("targetStarYpositionSpinBox")
        self.horizontalLayout_26.addWidget(self.targetStarYpositionSpinBox)
        spacerItem77 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_26.addItem(spacerItem77)
        self.gridLayout_2.addLayout(self.horizontalLayout_26, 6, 1, 1, 1)
        spacerItem78 = QtWidgets.QSpacerItem(20, 259, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout_2.addItem(spacerItem78, 7, 1, 1, 1)
        self.tabWidget.addTab(self.tab, "")
        self.horizontalLayout_6.addWidget(self.tabWidget)
        self.verticalLayout_2.addLayout(self.horizontalLayout_6)
        self.helpLabelForDataGrid = QtWidgets.QLabel(self.layoutWidget)
        self.helpLabelForDataGrid.setObjectName("helpLabelForDataGrid")
        self.verticalLayout_2.addWidget(self.helpLabelForDataGrid)
        self.mainPlot = PlotWidget(self.splitterTwo)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(1)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.mainPlot.sizePolicy().hasHeightForWidth())
        self.mainPlot.setSizePolicy(sizePolicy)
        self.mainPlot.setMinimumSize(QtCore.QSize(0, 0))
        self.mainPlot.viewport().setProperty("cursor", QtGui.QCursor(QtCore.Qt.IBeamCursor))
        self.mainPlot.setObjectName("mainPlot")
        self.splitterOne = QtWidgets.QSplitter(self.splitterThree)
        self.splitterOne.setOrientation(QtCore.Qt.Horizontal)
        self.splitterOne.setHandleWidth(10)
        self.splitterOne.setObjectName("splitterOne")
        self.table = QtWidgets.QTableWidget(self.splitterOne)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.table.sizePolicy().hasHeightForWidth())
        self.table.setSizePolicy(sizePolicy)
        self.table.setMinimumSize(QtCore.QSize(0, 0))
        self.table.setToolTipDuration(4000)
        self.table.setRowCount(11)
        self.table.setColumnCount(4)
        self.table.setObjectName("table")
        self.textOut = QtWidgets.QTextEdit(self.splitterOne)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.textOut.sizePolicy().hasHeightForWidth())
        self.textOut.setSizePolicy(sizePolicy)
        font = QtGui.QFont()
        font.setFamily("Courier New")
        self.textOut.setFont(font)
        self.textOut.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.textOut.setUndoRedoEnabled(False)
        self.textOut.setLineWrapMode(QtWidgets.QTextEdit.NoWrap)
        self.textOut.setReadOnly(True)
        self.textOut.setObjectName("textOut")
        self.gridLayout_7.addWidget(self.splitterThree, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        self.tabWidget.setCurrentIndex(1)
        self.pymovieDataColumnPrefixComboBox.setCurrentIndex(-1)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        MainWindow.setTabOrder(self.plotHelpButton, self.infoButton)
        MainWindow.setTabOrder(self.infoButton, self.readData)
        MainWindow.setTabOrder(self.readData, self.helpButton)
        MainWindow.setTabOrder(self.helpButton, self.tutorialButton)
        MainWindow.setTabOrder(self.tutorialButton, self.tabWidget)
        MainWindow.setTabOrder(self.tabWidget, self.lightcurvesHelpButton)
        MainWindow.setTabOrder(self.lightcurvesHelpButton, self.yOffsetStep10radioButton)
        MainWindow.setTabOrder(self.yOffsetStep10radioButton, self.yOffsetStep100radioButton)
        MainWindow.setTabOrder(self.yOffsetStep100radioButton, self.yOffsetStep1000radioButton)
        MainWindow.setTabOrder(self.yOffsetStep1000radioButton, self.targetCheckBox_1)
        MainWindow.setTabOrder(self.targetCheckBox_1, self.referenceCheckBox_1)
        MainWindow.setTabOrder(self.referenceCheckBox_1, self.showCheckBox_1)
        MainWindow.setTabOrder(self.showCheckBox_1, self.lightcurveTitle_1)
        MainWindow.setTabOrder(self.lightcurveTitle_1, self.yOffsetSpinBox_1)
        MainWindow.setTabOrder(self.yOffsetSpinBox_1, self.xOffsetSpinBox_1)
        MainWindow.setTabOrder(self.xOffsetSpinBox_1, self.targetCheckBox_2)
        MainWindow.setTabOrder(self.targetCheckBox_2, self.referenceCheckBox_2)
        MainWindow.setTabOrder(self.referenceCheckBox_2, self.showCheckBox_2)
        MainWindow.setTabOrder(self.showCheckBox_2, self.lightcurveTitle_2)
        MainWindow.setTabOrder(self.lightcurveTitle_2, self.yOffsetSpinBox_2)
        MainWindow.setTabOrder(self.yOffsetSpinBox_2, self.xOffsetSpinBox_2)
        MainWindow.setTabOrder(self.xOffsetSpinBox_2, self.targetCheckBox_3)
        MainWindow.setTabOrder(self.targetCheckBox_3, self.referenceCheckBox_3)
        MainWindow.setTabOrder(self.referenceCheckBox_3, self.showCheckBox_3)
        MainWindow.setTabOrder(self.showCheckBox_3, self.lightcurveTitle_3)
        MainWindow.setTabOrder(self.lightcurveTitle_3, self.yOffsetSpinBox_3)
        MainWindow.setTabOrder(self.yOffsetSpinBox_3, self.xOffsetSpinBox_3)
        MainWindow.setTabOrder(self.xOffsetSpinBox_3, self.targetCheckBox_4)
        MainWindow.setTabOrder(self.targetCheckBox_4, self.referenceCheckBox_4)
        MainWindow.setTabOrder(self.referenceCheckBox_4, self.showCheckBox_4)
        MainWindow.setTabOrder(self.showCheckBox_4, self.lightcurveTitle_4)
        MainWindow.setTabOrder(self.lightcurveTitle_4, self.yOffsetSpinBox_4)
        MainWindow.setTabOrder(self.yOffsetSpinBox_4, self.xOffsetSpinBox_4)
        MainWindow.setTabOrder(self.xOffsetSpinBox_4, self.targetCheckBox_5)
        MainWindow.setTabOrder(self.targetCheckBox_5, self.referenceCheckBox_5)
        MainWindow.setTabOrder(self.referenceCheckBox_5, self.showCheckBox_5)
        MainWindow.setTabOrder(self.showCheckBox_5, self.lightcurveTitle_5)
        MainWindow.setTabOrder(self.lightcurveTitle_5, self.yOffsetSpinBox_5)
        MainWindow.setTabOrder(self.yOffsetSpinBox_5, self.xOffsetSpinBox_5)
        MainWindow.setTabOrder(self.xOffsetSpinBox_5, self.targetCheckBox_6)
        MainWindow.setTabOrder(self.targetCheckBox_6, self.referenceCheckBox_6)
        MainWindow.setTabOrder(self.referenceCheckBox_6, self.showCheckBox_6)
        MainWindow.setTabOrder(self.showCheckBox_6, self.lightcurveTitle_6)
        MainWindow.setTabOrder(self.lightcurveTitle_6, self.yOffsetSpinBox_6)
        MainWindow.setTabOrder(self.yOffsetSpinBox_6, self.xOffsetSpinBox_6)
        MainWindow.setTabOrder(self.xOffsetSpinBox_6, self.targetCheckBox_7)
        MainWindow.setTabOrder(self.targetCheckBox_7, self.referenceCheckBox_7)
        MainWindow.setTabOrder(self.referenceCheckBox_7, self.showCheckBox_7)
        MainWindow.setTabOrder(self.showCheckBox_7, self.lightcurveTitle_7)
        MainWindow.setTabOrder(self.lightcurveTitle_7, self.yOffsetSpinBox_7)
        MainWindow.setTabOrder(self.yOffsetSpinBox_7, self.xOffsetSpinBox_7)
        MainWindow.setTabOrder(self.xOffsetSpinBox_7, self.targetCheckBox_8)
        MainWindow.setTabOrder(self.targetCheckBox_8, self.referenceCheckBox_8)
        MainWindow.setTabOrder(self.referenceCheckBox_8, self.showCheckBox_8)
        MainWindow.setTabOrder(self.showCheckBox_8, self.lightcurveTitle_8)
        MainWindow.setTabOrder(self.lightcurveTitle_8, self.yOffsetSpinBox_8)
        MainWindow.setTabOrder(self.yOffsetSpinBox_8, self.xOffsetSpinBox_8)
        MainWindow.setTabOrder(self.xOffsetSpinBox_8, self.targetCheckBox_9)
        MainWindow.setTabOrder(self.targetCheckBox_9, self.referenceCheckBox_9)
        MainWindow.setTabOrder(self.referenceCheckBox_9, self.showCheckBox_9)
        MainWindow.setTabOrder(self.showCheckBox_9, self.lightcurveTitle_9)
        MainWindow.setTabOrder(self.lightcurveTitle_9, self.yOffsetSpinBox_9)
        MainWindow.setTabOrder(self.yOffsetSpinBox_9, self.xOffsetSpinBox_9)
        MainWindow.setTabOrder(self.xOffsetSpinBox_9, self.targetCheckBox_10)
        MainWindow.setTabOrder(self.targetCheckBox_10, self.referenceCheckBox_10)
        MainWindow.setTabOrder(self.referenceCheckBox_10, self.showCheckBox_10)
        MainWindow.setTabOrder(self.showCheckBox_10, self.lightcurveTitle_10)
        MainWindow.setTabOrder(self.lightcurveTitle_10, self.yOffsetSpinBox_10)
        MainWindow.setTabOrder(self.yOffsetSpinBox_10, self.xOffsetSpinBox_10)
        MainWindow.setTabOrder(self.xOffsetSpinBox_10, self.smoothingIntervalSpinBox)
        MainWindow.setTabOrder(self.smoothingIntervalSpinBox, self.stepBy2radioButton)
        MainWindow.setTabOrder(self.stepBy2radioButton, self.stepBy10radioButton)
        MainWindow.setTabOrder(self.stepBy10radioButton, self.stepBy100radioButton)
        MainWindow.setTabOrder(self.stepBy100radioButton, self.normMarkBaselineRegionButton)
        MainWindow.setTabOrder(self.normMarkBaselineRegionButton, self.clearMetricPointsButton)
        MainWindow.setTabOrder(self.clearMetricPointsButton, self.minEventEdit)
        MainWindow.setTabOrder(self.minEventEdit, self.maxEventEdit)
        MainWindow.setTabOrder(self.maxEventEdit, self.markDzone)
        MainWindow.setTabOrder(self.markDzone, self.markRzone)
        MainWindow.setTabOrder(self.markRzone, self.markEzone)
        MainWindow.setTabOrder(self.markEzone, self.doBlockIntegration)
        MainWindow.setTabOrder(self.doBlockIntegration, self.acceptBlockIntegration)
        MainWindow.setTabOrder(self.acceptBlockIntegration, self.setDataLimits)
        MainWindow.setTabOrder(self.setDataLimits, self.locateEvent)
        MainWindow.setTabOrder(self.locateEvent, self.calcErrBars)
        MainWindow.setTabOrder(self.calcErrBars, self.fillExcelReportButton)
        MainWindow.setTabOrder(self.fillExcelReportButton, self.cancelButton)
        MainWindow.setTabOrder(self.cancelButton, self.writePlot)
        MainWindow.setTabOrder(self.writePlot, self.writeBarPlots)
        MainWindow.setTabOrder(self.writeBarPlots, self.writeCSVButton)
        MainWindow.setTabOrder(self.writeCSVButton, self.startOver)
        MainWindow.setTabOrder(self.startOver, self.currentEventEdit)
        MainWindow.setTabOrder(self.currentEventEdit, self.frameTimeEdit)
        MainWindow.setTabOrder(self.frameTimeEdit, self.asteroidDiameterKmEdit)
        MainWindow.setTabOrder(self.asteroidDiameterKmEdit, self.asteroidDiameterMasEdit)
        MainWindow.setTabOrder(self.asteroidDiameterMasEdit, self.asteroidSpeedShadowEdit)
        MainWindow.setTabOrder(self.asteroidSpeedShadowEdit, self.asteroidSpeedSkyEdit)
        MainWindow.setTabOrder(self.asteroidSpeedSkyEdit, self.asteroidDistAUedit)
        MainWindow.setTabOrder(self.asteroidDistAUedit, self.asteroidDistArcsecEdit)
        MainWindow.setTabOrder(self.asteroidDistArcsecEdit, self.wavelengthEdit)
        MainWindow.setTabOrder(self.wavelengthEdit, self.missDistanceKmEdit)
        MainWindow.setTabOrder(self.missDistanceKmEdit, self.baselineADUedit)
        MainWindow.setTabOrder(self.baselineADUedit, self.bottomADUedit)
        MainWindow.setTabOrder(self.bottomADUedit, self.magDropEdit)
        MainWindow.setTabOrder(self.magDropEdit, self.DdegreesEdit)
        MainWindow.setTabOrder(self.DdegreesEdit, self.RdegreesEdit)
        MainWindow.setTabOrder(self.RdegreesEdit, self.chordSizeSecondsEdit)
        MainWindow.setTabOrder(self.chordSizeSecondsEdit, self.chordSizeKmEdit)
        MainWindow.setTabOrder(self.chordSizeKmEdit, self.starSizeMasEdit)
        MainWindow.setTabOrder(self.starSizeMasEdit, self.starSizeKmEdit)
        MainWindow.setTabOrder(self.starSizeKmEdit, self.fresnelSizeSecondsEdit)
        MainWindow.setTabOrder(self.fresnelSizeSecondsEdit, self.fresnelSizeKmEdit)
        MainWindow.setTabOrder(self.fresnelSizeKmEdit, self.baselineADUbutton)
        MainWindow.setTabOrder(self.baselineADUbutton, self.helpPdfButton)
        MainWindow.setTabOrder(self.helpPdfButton, self.diffractionRadioButton)
        MainWindow.setTabOrder(self.diffractionRadioButton, self.edgeOnDiskRadioButton)
        MainWindow.setTabOrder(self.edgeOnDiskRadioButton, self.diskOnDiskRadioButton)
        MainWindow.setTabOrder(self.diskOnDiskRadioButton, self.fitLightcurveButton)
        MainWindow.setTabOrder(self.fitLightcurveButton, self.askAdviceButton)
        MainWindow.setTabOrder(self.askAdviceButton, self.showDiffractionButton)
        MainWindow.setTabOrder(self.showDiffractionButton, self.fitMetricEdit)
        MainWindow.setTabOrder(self.fitMetricEdit, self.fitMetricChangeEdit)
        MainWindow.setTabOrder(self.fitMetricChangeEdit, self.pastEventsComboBox)
        MainWindow.setTabOrder(self.pastEventsComboBox, self.calcFlashEdge)
        MainWindow.setTabOrder(self.calcFlashEdge, self.manualEntryPushButton)
        MainWindow.setTabOrder(self.manualEntryPushButton, self.allowNewVersionPopupCheckbox)
        MainWindow.setTabOrder(self.allowNewVersionPopupCheckbox, self.showTimestampErrors)
        MainWindow.setTabOrder(self.showTimestampErrors, self.showCameraResponseCheckBox)
        MainWindow.setTabOrder(self.showCameraResponseCheckBox, self.showUnderlyingLightcurveCheckBox)
        MainWindow.setTabOrder(self.showUnderlyingLightcurveCheckBox, self.showErrBarsCheckBox)
        MainWindow.setTabOrder(self.showErrBarsCheckBox, self.showEdgesCheckBox)
        MainWindow.setTabOrder(self.showEdgesCheckBox, self.showOCRcheckFramesCheckBox)
        MainWindow.setTabOrder(self.showOCRcheckFramesCheckBox, self.showTimestampsCheckBox)
        MainWindow.setTabOrder(self.showTimestampsCheckBox, self.viewFrameButton)
        MainWindow.setTabOrder(self.viewFrameButton, self.frameNumSpinBox)
        MainWindow.setTabOrder(self.frameNumSpinBox, self.fieldViewCheckBox)
        MainWindow.setTabOrder(self.fieldViewCheckBox, self.flipYaxisCheckBox)
        MainWindow.setTabOrder(self.flipYaxisCheckBox, self.flipXaxisCheckBox)
        MainWindow.setTabOrder(self.flipXaxisCheckBox, self.lineWidthSpinner)
        MainWindow.setTabOrder(self.lineWidthSpinner, self.dotSizeSpinner)
        MainWindow.setTabOrder(self.dotSizeSpinner, self.pymovieDataColumnPrefixComboBox)
        MainWindow.setTabOrder(self.pymovieDataColumnPrefixComboBox, self.detectabilityHelpButton)
        MainWindow.setTabOrder(self.detectabilityHelpButton, self.markBaselineRegionButton)
        MainWindow.setTabOrder(self.markBaselineRegionButton, self.clearBaselineRegionsButton)
        MainWindow.setTabOrder(self.clearBaselineRegionsButton, self.calcStatsFromBaselineRegionsButton)
        MainWindow.setTabOrder(self.calcStatsFromBaselineRegionsButton, self.observationDurEdit)
        MainWindow.setTabOrder(self.observationDurEdit, self.eventDurationEdit)
        MainWindow.setTabOrder(self.eventDurationEdit, self.durStepEdit)
        MainWindow.setTabOrder(self.durStepEdit, self.detectabilityMagDropEdit)
        MainWindow.setTabOrder(self.detectabilityMagDropEdit, self.calcDetectabilityButton)
        MainWindow.setTabOrder(self.calcDetectabilityButton, self.writeExampleLightcurveCheckBox)
        MainWindow.setTabOrder(self.writeExampleLightcurveCheckBox, self.ne3ExplanationButton)
        MainWindow.setTabOrder(self.ne3ExplanationButton, self.ne3NotInUseRadioButton)
        MainWindow.setTabOrder(self.ne3NotInUseRadioButton, self.dnrOffRadioButton)
        MainWindow.setTabOrder(self.dnrOffRadioButton, self.dnrLowRadioButton)
        MainWindow.setTabOrder(self.dnrLowRadioButton, self.dnrLowDspinBox)
        MainWindow.setTabOrder(self.dnrLowDspinBox, self.dnrLowRspinBox)
        MainWindow.setTabOrder(self.dnrLowRspinBox, self.dnrMiddleRadioButton)
        MainWindow.setTabOrder(self.dnrMiddleRadioButton, self.dnrMiddleDspinBox)
        MainWindow.setTabOrder(self.dnrMiddleDspinBox, self.dnrMiddleRspinBox)
        MainWindow.setTabOrder(self.dnrMiddleRspinBox, self.dnrHighRadioButton)
        MainWindow.setTabOrder(self.dnrHighRadioButton, self.dnrHighDspinBox)
        MainWindow.setTabOrder(self.dnrHighDspinBox, self.dnrHighRspinBox)
        MainWindow.setTabOrder(self.dnrHighRspinBox, self.targetStarYpositionSpinBox)
        MainWindow.setTabOrder(self.targetStarYpositionSpinBox, self.mainPlot)
        MainWindow.setTabOrder(self.mainPlot, self.table)
        MainWindow.setTabOrder(self.table, self.textOut)
        MainWindow.setTabOrder(self.textOut, self.saveCurrentEventButton)
        MainWindow.setTabOrder(self.saveCurrentEventButton, self.squareWaveRadioButton)
        MainWindow.setTabOrder(self.squareWaveRadioButton, self.showAnnotationsCheckBox)
        MainWindow.setTabOrder(self.showAnnotationsCheckBox, self.showLegendsCheckBox)
        MainWindow.setTabOrder(self.showLegendsCheckBox, self.versusTimeCheckBox)
        MainWindow.setTabOrder(self.versusTimeCheckBox, self.showDetailsCheckBox)
        MainWindow.setTabOrder(self.showDetailsCheckBox, self.calcBaselineADUbutton)
        MainWindow.setTabOrder(self.calcBaselineADUbutton, self.clearBaselineADUselectionButton)
        MainWindow.setTabOrder(self.clearBaselineADUselectionButton, self.blockSizeEdit)
        MainWindow.setTabOrder(self.blockSizeEdit, self.singlePointDropButton)
        MainWindow.setTabOrder(self.singlePointDropButton, self.magDropSqwaveEdit)
        MainWindow.setTabOrder(self.magDropSqwaveEdit, self.pauseFitButton)
        MainWindow.setTabOrder(self.pauseFitButton, self.demoModelButton)
        MainWindow.setTabOrder(self.demoModelButton, self.printEventParametersButton)
        MainWindow.setTabOrder(self.printEventParametersButton, self.deleteEventButton)
        MainWindow.setTabOrder(self.deleteEventButton, self.edgeTimePrecisionEdit)
        MainWindow.setTabOrder(self.edgeTimePrecisionEdit, self.chordDurationPrecisionEdit)
        MainWindow.setTabOrder(self.chordDurationPrecisionEdit, self.limbAnglePrecisionEdit)
        MainWindow.setTabOrder(self.limbAnglePrecisionEdit, self.missDistancePrecisionEdit)
        MainWindow.setTabOrder(self.missDistancePrecisionEdit, self.beingOptimizedEdit)
        MainWindow.setTabOrder(self.beingOptimizedEdit, self.helpSqWaveButton)
        MainWindow.setTabOrder(self.helpSqWaveButton, self.vzDateYearSpinner)
        MainWindow.setTabOrder(self.vzDateYearSpinner, self.vzDateMonthSpinner)
        MainWindow.setTabOrder(self.vzDateMonthSpinner, self.vzDateDaySpinner)
        MainWindow.setTabOrder(self.vzDateDaySpinner, self.vzStarUCAC4Edit)
        MainWindow.setTabOrder(self.vzStarUCAC4Edit, self.vzStarTycho2Edit)
        MainWindow.setTabOrder(self.vzStarTycho2Edit, self.vzStarHipparcosEdit)
        MainWindow.setTabOrder(self.vzStarHipparcosEdit, self.vzSiteLongDegEdit)
        MainWindow.setTabOrder(self.vzSiteLongDegEdit, self.vzSiteLongMinEdit)
        MainWindow.setTabOrder(self.vzSiteLongMinEdit, self.vzSiteLongSecsEdit)
        MainWindow.setTabOrder(self.vzSiteLongSecsEdit, self.vzSiteLatDegEdit)
        MainWindow.setTabOrder(self.vzSiteLatDegEdit, self.vzSiteLatMinEdit)
        MainWindow.setTabOrder(self.vzSiteLatMinEdit, self.vzSiteLatSecsEdit)
        MainWindow.setTabOrder(self.vzSiteLatSecsEdit, self.vzSiteAltitudeEdit)
        MainWindow.setTabOrder(self.vzSiteAltitudeEdit, self.vzObserverNameEdit)
        MainWindow.setTabOrder(self.vzObserverNameEdit, self.vzAsteroidNumberEdit)
        MainWindow.setTabOrder(self.vzAsteroidNumberEdit, self.vzAsteroidNameEdit)
        MainWindow.setTabOrder(self.vzAsteroidNameEdit, self.vzSiteCoordNameEdit)
        MainWindow.setTabOrder(self.vzSiteCoordNameEdit, self.vzTrimButton)
        MainWindow.setTabOrder(self.vzTrimButton, self.vzStartOverButton)
        MainWindow.setTabOrder(self.vzStartOverButton, self.vizierShowPlotButton)
        MainWindow.setTabOrder(self.vizierShowPlotButton, self.vizierExportButton)
        MainWindow.setTabOrder(self.vizierExportButton, self.vzDotSizeSpinner)
        MainWindow.setTabOrder(self.vzDotSizeSpinner, self.vizierZipButton)
        MainWindow.setTabOrder(self.vizierZipButton, self.vzNagLevelSpinbox)
        MainWindow.setTabOrder(self.vzNagLevelSpinbox, self.vzCoordsComboBox)
        MainWindow.setTabOrder(self.vzCoordsComboBox, self.vzSaveSiteCoordButton)
        MainWindow.setTabOrder(self.vzSaveSiteCoordButton, self.vzInfoButton)
        MainWindow.setTabOrder(self.vzInfoButton, self.vzWhereToSendButton)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "PY-OTE"))
        self.infoButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Click this button to to open the <span style=\" color:#ff0000;\">help.pdf</span> file that is included in the installation. The file will open in whatever PDF viewer you have assigned as the default viewer for pdf files.</p><p>The first part of this file is version info that should be examined every time a new version of PyOTE is installed.</p><p>At the bottom of this version info is a brief introduction to PyOTE that should be read by new users.</p></body></html>"))
        self.infoButton.setWhatsThis(_translate("MainWindow", "How does this show up?"))
        self.infoButton.setText(_translate("MainWindow", "Info"))
        self.plotHelpButton.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-weight:600; color:#0000ff;\">Once data from an observation is being displayed in the panel to the right, the following functions are available:</span></p><p>&gt;&gt;&gt; moving the mouse cursor into the plot area causes a thin vertical line to appear to show the x position</p><p>&gt;&gt;&gt; a left-click will toggle the selection of the data point at the x position of the mouse (watch the thin vertical line)</p><p>&gt;&gt;&gt; the plot can be zoomed horizontally using the scroll wheel (or equivalent) on the mouse</p><p>&gt;&gt;&gt; holding down the shift key will cause the mouse cursor to appear, useful for the following operation...</p><p>&gt;&gt;&gt; a left-click/hold/drag will create a selection box --- on left-button release, a zoomed image will appear</p><p>&gt;&gt;&gt; a right-click undoes any scroll/zoom modifications that have been performed</p><p><span style=\" font-weight:600; color:#0000ff;\">Timestamp errors:</span></p><p>If the csv file included timestamps, there may be a few (or many) thin vertical red or yellow lines, each appearing between adjacent data points. These indicate that the time step computed from the adjacent data points was not within 20% of the \'expected\' time step (shown as a yellow line - indicating a likely cadence discrepancy caused by high frame rates) or was 80% or greater than the expected time step (shown as a red line - indicating likely dropped frames). The expected value is computed from the median of all time steps. There is a checkbox to the left that can be used to suppress this display if it is too intrusive.</p><p><span style=\" font-weight:600; color:#0000ff;\">When a \'solution\' has been found, there will be displayed:</span></p><p>+++ in brown: the underlying lightcurve (theoretical lightcurve with diffraction and finite star disk effects included)</p><p>+++ in blue: the camera response --- this is the underlying lightcurve integrated by the exposure time of the camera</p><p>+++ vertical dashed lines: these show the position of the occultation\'s geometrical edges (red: D green: R)</p><p><span style=\" font-weight:600; color:#0000ff;\">After a \'... write report\' has been performed:</span></p><p>=== the 95% containment interval for the D and/or R edges are shown with shortened vertical dotted enclosing the central value</p></body></html>"))
        self.plotHelpButton.setText(_translate("MainWindow", "Help for plot -->"))
        self.helpButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>\'Help\' is available for most GUI items by right-clicking on the item.</p><p>If an item already has a different action assigned to a right-click, there will be a nearby text line or button that can be clicked on instead.</p><p>There is no need to close the help panel before right-clicking on another GUI item. One can use this feature to get a quick survey of the \'help\' that is available by sequentially clicking on all GUI items.</p></body></html>"))
        self.helpButton.setText(_translate("MainWindow", "Help"))
        self.tutorialButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Tip: right-click on buttons and labels. An explanation (help screen) will usually appear. Use that technique to learn about features that are not covered in this basic tutorial/recipe.</p><p>1. Start by clicking the<span style=\" font-weight:600; color:#0000ff;\"> Read light curve</span> button. (Usually, the camera exposure value will be read from the csv file and automatically inserted in the <span style=\" font-weight:600; color:#0000ff;\">exp:</span> edit box in the <span style=\" font-weight:600; color:#0000ff;\">parameters</span> panel. If that did not happen, you will need to manually fill in that value in before trying to find an event fit.)</p><p>2. If timestamp errors have been detected during the loading of the csv file, the affected points will be bracketed by vertical redlines and the <span style=\" font-weight:600; color:#0000ff;\">Show time err</span> checkbox will have been set by the program. Those red lines will likely have served their purpose and can/should be turned off so that a clear view of the light-curve is presented.</p><p>3. If the csv file contained multiple light-curves (it usually will), use the <span style=\" font-weight:600; color:#0000ff;\">Lightcurves</span> tab/panel to select the target lightcurve (the lightcurve containing the occultation)</p><p>4. The next step is to give the \'event finder\' information that can speed up the search. </p><p>4a. If the event has a wide enough bottom, the quickest way to provide speed-up information is mark the D and R regions. Right-click on those buttons for a how-to.</p><p>4b. If the event is so small that it is hard or impossible to mark D and R regions, the speed-up information is then best supplied by placing the smallest event duration in the <span style=\" font-weight:600; color:#0000ff;\">min event duration</span> edit box and the maximum event duration in the <span style=\" font-weight:600; color:#0000ff;\">max event duration</span> edit box. The \'finder\' will then search for all events in the range of durations given, located anywhere in the light-curve.</p><p>5. Next, click the <span style=\" font-weight:600; color:#0000ff;\">Find event, then ...</span> button to initiate the search.</p><p>6. Assuming the search was successful, the final step is to click the <span style=\" font-weight:600; color:#0000ff;\">... write report</span> button.</p><p>Every step you took is recorded in a log file in the directory where the light-curve was read from. This is important information to provide to anyone that you might go to for assistance. Give them the csv file and the log file and they will be able to reproduce your session.</p></body></html>"))
        self.tutorialButton.setText(_translate("MainWindow", "Tutorial"))
        self.readData.setToolTip(_translate("MainWindow", "<html><head/><body><p>PYOTE reads Limovie, R-OTE, and Tangra files and includes up to four light curves from those file types.  For PyMovie files, PYOTE will read an unlimited number of light curves.</p><p>Normally (but not required) object1 is the occulted star; other (optional) objects are reference stars to be used for normalizing the occulted star light curve or flash curves from an LED timer.</p><p><span style=\" font-weight:600; text-decoration: underline; color:#0000ff;\">Mouse button functions within the light curve plot:</span></p><p><span style=\" font-weight:600; color:#ff0000;\">Left click</span>: selects/deselects points on the primary (dark blue) light curve that intersect with the vertical hairline (the mouse cursor is disabled).</p><p><span style=\" font-weight:600; color:#ff0000;\">Left click and drag</span>: rectangular zoom is available to more clearly see points for selection (but point selection can also be accomplished through clicks in the tabular data display at the lower left)</p><p><span style=\" font-weight:600;\">Note! The shift key will toggle the mouse cursor on/off in the light curve plot.</span> This enables the starting corner for the zoom to be seen. (But points cannot be selected/deselected while the mouse cursor is visible. A right click will always \'blank\' the mouse cursor.) </p><p><span style=\" font-weight:600; color:#ff0000;\">Right click</span>: undo zoom</p><p><span style=\" color:#996633;\">Timestamp errors are shown with vertical red hairlines when a file is first read. These will disappear after the first point is selected so that the working view is as clear as possible. The red hairlines will re-appear permanently after the error bars have been calculated and the final report written to the log.</span></p></body></html>"))
        self.readData.setText(_translate("MainWindow", "Read light curve"))
        self.lightcurvesHelpButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This panel allows up to 10 lightcurves to be displayed at the same time. If the csv file has more than 10 lightcurves, the first 10 are displayed.</p><p>The<span style=\" font-weight:600; color:#0000ff;\"> targe</span>t lightcurve is always drawn with bright blue dots.</p><p>If a lightcurve is selected as a <span style=\" font-weight:600; color:#0000ff;\">reference</span> to be used for normalization, it is always drawn with bright green dots. If a non-zero value is present in the <span style=\" font-weight:600; color:#0000ff;\">smoothing readings</span> spinbox, a smoothed version of the <span style=\" font-weight:600; color:#0000ff;\">reference</span> curve will be displayed as well (color is brown). This smoothed curve is produced by a double application of a first order Savitzky-Golay filter (a straight line) to the points - extrapolation is enabled to deal with the points at either end. <span style=\" font-weight:600; color:#fc0107;\">Note:</span> The Savitzky-Golay algorithm requires an odd number of smoothing points. PyOTE makes your entry odd by adding 1 when necessary.</p><p>Unless a lightcurve is designated as a <span style=\" font-weight:600; color:#0000ff;\">target</span> (which is always the curve to be analyzed for an event) or is designated as a <span style=\" font-weight:600; color:#0000ff;\">reference</span> lightcurve, its dot color depends on the row it is in - every row has a unique color other than blue or green - there is a sample color shown at the right of the lightcurve title.</p><p><span style=\" font-weight:600; color:#fc0107;\">Tip:</span> it is easier to compare the color sample with the dots in the curve plot if the dots are larger - dot size can be changed by a spinbox that is on the <span style=\" font-weight:600; color:#0000ff;\">Settings/Misc.</span> tab.</p><p>Lightcurves can be displaced up or down using the<span style=\" font-weight:600; color:#0000ff;\"> Y offset</span> spinner to control the displacement. This affects the display position only; the underlying values are not affected. This facility was added to allow the separation of lightcurves that would otherwise overlap in a confusing manner.</p><p>There can only be one lightcurve selected as <span style=\" font-weight:600; color:#0000ff;\">target</span>. That curve always has its <span style=\" font-weight:600; color:#0000ff;\">Y offset</span> spinner disabled with a value of zero. If there is some lightcurve that overlaps with the <span style=\" font-weight:600; color:#0000ff;\">target</span>, move that one out of the way.</p><p>There can be either 0 or 1 lightcurve selected as a <span style=\" font-weight:600; color:#0000ff;\">reference</span> for normalization.</p><p>Normalization is applied whenever the<span style=\" font-weight:600; color:#0000ff;\"> smoothing readings</span> spinbox is changed from 0 and the return/enter key is depressed. Whenever this number is changed, a new normalization will result. If this number is returned to zero, all normalization is removed and the original values restored.</p><p>If the <span style=\" font-weight:600; color:#0000ff;\">reference</span> curve is changed, any previously applied normalization is removed and the <span style=\" font-weight:600; color:#0000ff;\">smoothing readings</span> spinbox is set to 0.</p><p>The <span style=\" font-weight:600; color:#0000ff;\">X offset</span> spinbox is used to shift the <span style=\" font-weight:600; color:#0000ff;\">reference</span> curve left or right (a time shift) for those cases where a drifting cloud affects the <span style=\" font-weight:600; color:#0000ff;\">target</span> lightcurves at a slightly different time.</p></body></html>"))
        self.lightcurvesHelpButton.setText(_translate("MainWindow", "Help"))
        self.label_30.setText(_translate("MainWindow", " target     ref      show"))
        self.label_33.setText(_translate("MainWindow", "Y offset step size:"))
        self.yOffsetStep10radioButton.setText(_translate("MainWindow", "10"))
        self.yOffsetStep100radioButton.setText(_translate("MainWindow", "100"))
        self.yOffsetStep1000radioButton.setText(_translate("MainWindow", "1000"))
        self.yOffsetLabel1.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel1.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel1.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel1.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel2.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel2.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel2.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel2.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel3.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel3.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel3.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel3.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel4.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel4.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel4.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel4.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel5.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel5.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel5.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel5.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel6.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel6.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel6.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel6.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel7.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel7.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel7.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel7.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel8.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel8.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel8.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel8.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel9.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel9.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel9.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel9.setText(_translate("MainWindow", "    X offset:"))
        self.yOffsetLabel10.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.yOffsetLabel10.setText(_translate("MainWindow", "Y offset:"))
        self.xOffsetLabel10.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.xOffsetLabel10.setText(_translate("MainWindow", "    X offset:"))
        self.smoothingLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>The value entered in this box does not take effect until either the <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> key is pressed or this box loses focus when you click on some other widget.</p><p><span style=\" font-weight:600; color:#fc0107;\">Best practice:</span> Click inside the box, then use the <span style=\" font-weight:600; color:#0000ff;\">up/down arrow</span> keys to set the desired value, then press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span>. Repeating is easy because the cursor does not leave the box.</p><p>Of course, you can always edit the value directly using the keyboard - just remember to press <span style=\" font-weight:600; color:#0000ff;\">return/enter</span> to complete the operation.</p></body></html>"))
        self.smoothingLabel.setText(_translate("MainWindow", "smoothing readings"))
        self.label_32.setText(_translate("MainWindow", "Set step:"))
        self.stepBy2radioButton.setText(_translate("MainWindow", "2"))
        self.stepBy10radioButton.setText(_translate("MainWindow", "10"))
        self.stepBy100radioButton.setText(_translate("MainWindow", "100"))
        self.normMarkBaselineRegionButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This button is used to select the points in the normalized target lightcurve to be used in calculating the metric that, when minimized, results in the flattest and most level target lightcurve.</p><p>It is sometimes useful to only include some regions of the target lightcurve. To do this, click on two points that enclose the points to be included, then click this button. The included points will change color.</p><p>Multiple regions can be selected. Just repeat the above procedure.</p><p>The selected regions can be cleared by clicking on the button (<span style=\" font-weight:600; color:#0000ff;\">Clear metric points</span>) to the right of this button.</p></body></html>"))
        self.normMarkBaselineRegionButton.setText(_translate("MainWindow", "Mark metric points"))
        self.clearMetricPointsButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Click this button to erase any previously selected regions of metric points.</p></body></html>"))
        self.clearMetricPointsButton.setText(_translate("MainWindow", "Clear metric points"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "Lightcurves"))
        self.singlePointDropButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Sometimes an occultation event may be so short that there will be only a single point recorded. In this case, because it is not possible to determine the duration of the event (only an upper bound can be stated) and the noise level during the event is also not measurable, the usual light-curve fitting procedure cannot (should not) be carried out.</p><p>But, it is possible to use the mechanism of the False-Positive report to determine whether the observed drop is just an artifact of baseline noise or is a deep enough drop that it is statistically unlikely that the drop is due to noise alone and so a positive can be reported with an appropriately chosen duration and error bar to reflect the timing ambiguity inherent in such a single point event.</p><p>To use this tool, first go to the Noise Analysis/Detectability tab and use the baseline points selection tool to identify the points that are considered valid baseline points (by multiple applications of the <span style=\" font-weight:600; color:#0000ff;\">Mark baseline region </span><span style=\" color:#000000;\">button</span>) excluding the point to be tested, then click the <span style=\" font-weight:600; color:#0000ff;\">Calc baseline mean/sigma/corr coeff</span> button.</p><p>Then, click on the single point to be tested (the point will change to a red dot), and click this button.</p></body></html>"))
        self.singlePointDropButton.setText(_translate("MainWindow", "Validate a potential single point event"))
        self.writePlot.setToolTip(_translate("MainWindow", "<html><head/><body><p>Note: At the conclusion of error bar calculations, PYOTE automatically writes the main plot to a png file using the name and directory of the just-processed csv file. </p><p>If you want/need to record other versions of that plot, click here to open a dialog that will let you specify a different name and/or location for the storage of the new graphics.<br/></p></body></html>"))
        self.writePlot.setText(_translate("MainWindow", "Write current plot"))
        self.writeBarPlots.setToolTip(_translate("MainWindow", "<html><head/><body><p>Note: At the conclusion of error bar calculations, PYOTE automatically writes the error bar plots to appropriately named png files using the name and directory of the just-processed csv file. </p><p>If you want/need to record other versions of those plots, click here to open a dialog that will let you specify a different name and/or location for the storage of the new graphics.</p></body></html>"))
        self.writeBarPlots.setText(_translate("MainWindow", "Write error bar plot"))
        self.writeCSVButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use this button to write the contents of the data table below to a csv file.</p><p>The comment lines from the original input file are preserved.</p><p>The most common use for this function is to capture the result of a successful Manual Timestamp Entry for later use (without the need to again go through the manual timestamp entry procedure). It will also reflect any Block Integration that was applied.</p></body></html>"))
        self.writeCSVButton.setText(_translate("MainWindow", "Save current light curve to .csv"))
        self.startOver.setToolTip(_translate("MainWindow", "<html><head/><body><p>This button removes any trim that is in effect, clears a solution that may have been found,  and removes any D or R region showing.</p><p>It does <span style=\" font-weight:600; font-style:italic; color:#fc0107;\">not</span> undo block integration -- you must reload the light curve file to recover from a block integration.</p><p>Normalization can be undone by simply returning the smoothing inteval number to 0 (This is in the <span style=\" font-weight:600; color:#0000ff;\">lightcurves</span> panel.)</p></body></html>"))
        self.startOver.setText(_translate("MainWindow", "Start over"))
        self.findEventLabel.setText(_translate("MainWindow", "Finally, click on \'Find event\' and, if event found, click \'... write report\'"))
        self.locateEvent.setText(_translate("MainWindow", "Find event, then ..."))
        self.calcErrBars.setToolTip(_translate("MainWindow", "<html><head/><body><p>To get a \'Final Report\', error bars are required. Clicking this button will start the computation of those error bars and, when complete, trigger the preparation of a \'Final Report\'</p></body></html>"))
        self.calcErrBars.setText(_translate("MainWindow", "... write report"))
        self.helpLabelForFalsePositive.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-weight:600; color:#fc0107;\">Advisory =============================================</span></p><p>Assuming that you have been diligent in removing common lightcurve artifacts (dips caused by something other than an occultation, &nbsp;like clouds,&nbsp;or a contrail,&nbsp;or ...) using the normalization function,&nbsp;please be aware that ...</p><p>... a non-zero False Positive probability (red bar to the left of the black bar) is usually sufficient reason to report a \'miss\' (but see note below).<span style=\" font-weight:600; color:#fc0107;\"> But</span>,&nbsp;before reporting a \'miss\',&nbsp;you should use the Event Detectability calculator to determine if the event was \'detectable\'.&nbsp;If the event was \'detectable\' and yet a \'miss\',&nbsp;the observation has value in constraining one edge of the asteroid.&nbsp;If the \'miss\' was of an \'undetectable\' event,&nbsp;its value as a constraint on the asteroid edge is greatly diminished.</p><p><span style=\" font-weight:600; color:#fc0107;\">However</span>,&nbsp; a False Positive probability of zero (red bar to the right of the black bar) should <span style=\" font-weight:600; color:#fc0107;\">NEVER</span> be the sole reason to report a \'positive\'.</p><p>If you get a zero False Positive probability <span style=\" font-weight:600; text-decoration: underline;\">and this is the only available chord</span>,&nbsp;look at the False Positive distribution plot and only consider reporting a \'positive\' if the measured drop is well to the right of the black bar (which shows the biggest drop found during the simulation run). \'Well to the right\' is rather vague,&nbsp;so consult with your area coordinator whenever you are uncertain.</p><p><span style=\" font-weight:600; color:#fc0107;\">Note:</span> if your observed \'drop\' (red bar) is near the black bar (on either side!) AND there are nearby chords reporting \'positives\',&nbsp;there may be value in your observation in spite of the False Positive probability calculation result;&nbsp;your observation may increase confidence in the event recorded by the nearby chords.<br/></p></body></html>"))
        self.fillExcelReportButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use this button to copy your results to the Asteroid Occultation Report Form (.xlsx spreadsheet - note file type is .xlsx, not .xls). This button will be inactive (grayed out) until a succesful <span style=\" font-weight:600; color:#0000ff;\">... write report</span> has been accomplished.</p><p>The expected workflow is:</p><p>1) Given that PyOTE now has a solution that you wish to report (an occultation), leave PyOTE open ...</p><p>2) Run OccultWatcher to enter your event result report. Be sure to ask for a \'prefill\' of the .xls version of the report ...</p><p><span style=\" font-weight:600; color:#fc0107;\">3) Convert that .xls file to .xlsx using either Excel (Windows) or LibreOffice (Mac or Linux)</span></p><p>4) Go back to PyOTE and click this button ...</p><p>5) A file dialog will open; locate and select the prefilled and converted .xlsx report from steps 2 and 3.</p><p>6) If the file selected in step 5 was a valid Asteroid Occultation Report Form .xlsx file, the PyOTE results will be inserted.</p><p><span style=\" font-weight:600; color:#0000ff;\">Note: the excel format change from .xls to .xlsx will not affect the downstream processing adversely as the tool in use accepts either format equally well.</span></p><p><br/>The values that are inserted are:</p><p>--- all error bars</p><p>--- uncorrected D and/or R times</p><p>--- SNR</p><p>--- OTA used (PYOTE)</p><p>---A sentence summarizing magDrop information will be added in the Comments box</p></body></html>"))
        self.fillExcelReportButton.setText(_translate("MainWindow", "... fill Excel report"))
        self.cancelButton.setText(_translate("MainWindow", "Cancel"))
        self.doBlockIntegration.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">Light curves from integrated videos must be block integrated before further processing is carried out.</span></p><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">An automatic determination of the correct block size and starting point (offset) will be performed if no points have been selected.&nbsp;You will have the opportunity to accept or reject the result of this automatic process using the button to the right (</span><span style=\" font-family:\'arial,sans-serif\'; font-weight:600; color:#fc0107;\">Accept auto integration</span><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">).</span></p><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">If a manual selection is necessary,&nbsp;then the procedure stated below can be performed:</span></p><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">Zoom into a small portion of the light curve and locate a clearly identifiable group of data points that belong to an integration block,&nbsp;click on the first and last point of that data point group,&nbsp;then press this button to integrate all such groups in the light curve into a single data points.</span></p><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">&nbsp;A block integration,&nbsp;either manual or automatic,&nbsp;can be performed only once per data file;&nbsp;it cannnot be undone by use of the </span><span style=\" font-family:\'arial,sans-serif\'; font-weight:600; color:#fc0107;\">Start over</span><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\"> button.&nbsp;Instead,&nbsp;you will need to re-read the file.</span></p></body></html>"))
        self.doBlockIntegration.setText(_translate("MainWindow", "Manual/automatic block integrate"))
        self.blockSizeEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you know the integration level of the observation (block size) but not the offset, enter the known block size here and the block integration routine will find the best offset value for you.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note: </span>block sizes are normally powers of 2, but that is not enforced here, so be careful.</p><p>We allow for unusual block sizes simply because there might be a use-case.</p></body></html>"))
        self.blockSizeLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you know the integration level of the observation (block size) but not the offset, enter the known block size here and the block integration routine will find the best offset value for you.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> block sizes are normally powers of 2, but that is not enforced here, so be careful.</p><p>We allow for unusual block sizes simply because there might be a use-case.</p></body></html>"))
        self.blockSizeLabel.setText(_translate("MainWindow", "Block size"))
        self.minMaxLabel.setText(_translate("MainWindow", "... otherwise use the entries below to place bounds on the event size."))
        self.acceptBlockIntegration.setToolTip(_translate("MainWindow", "<html><head/><body><p>This button will be enabled only after pyote has proposed a block integration. If, after examining the proposed block size and offset shown on the light curve, you wish to apply the integration, press this button.</p></body></html>"))
        self.acceptBlockIntegration.setText(_translate("MainWindow", "Accept auto block integration"))
        self.helpSqWaveButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This tab is used to perform block integration of videos when that is needed.</p><p>It is also where the square wave model is utilized to extract chord duration and edge times.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> A square wave model is only appropriate to use when the star disk is zero or very small, and diffraction effects are not noticeable. Diffraction effects are always present, of course, but those effects often happen so fast compared to the frame time of the camera that they are \'integrated out\'. If a prominent peak does not appear just before the D edge and immediately following the R edge, it is reasonable to use the square wave model.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> If diffraction peaks are visible or there is a gradual transition during the D and R edges, then a different model should be used. Switch to the <span style=\" font-weight:700; color:#0000ff;\">Other models</span> tab in such a case.</p><p><br/></p><p><br/></p></body></html>"))
        self.helpSqWaveButton.setText(_translate("MainWindow", "Help"))
        self.setDataLimits.setToolTip(_translate("MainWindow", "<html><head/><body><p>If exactly two data points have been selected, this button will <span style=\" font-weight:600; text-decoration: underline;\">trim</span> off (exclude) data points to the left and right of the selected points. The excluded points will shown in light gray.</p><p>If no points have been selected, then all data points will be selected as the default.</p><p>Once a trim has been performed, its effects can be removed by clicking on the <span style=\" font-weight:600; color:#fc0107;\">Start over</span> button.</p></body></html>"))
        self.setDataLimits.setText(_translate("MainWindow", "Trim left/right"))
        self.minEventLabel.setText(_translate("MainWindow", "min event:"))
        self.minEventEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>Enter smallest event size (in number of readings) to search for.</p></body></html>"))
        self.maxEventLabel.setText(_translate("MainWindow", "max event:"))
        self.maxEventEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>Enter largest event size (in number of readings) to search for.</p></body></html>"))
        self.magDropSqwaveLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you enter a value for the expected magDrop of a squarewave event, it will be used during the display of the \'solution\' and will give you a good visual of how your observation matched the expected magDrop.</p><p><span style=\" font-weight:700; color:#ff0000;\">NOTE:</span> This does <span style=\" font-weight:700; color:#ff0000;\">NOT</span> affect the calculation of the actual magDrop of the observation - that calculation and report remains unchanged.</p></body></html>"))
        self.magDropSqwaveLabel.setText(_translate("MainWindow", "<html><head/><body><p>Optional: enter the expected magDrop for the event to get a visual of how that event level matches your observation.</p></body></html>"))
        self.magDropSqwaveEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you enter a value for the expected magDrop of a squarewave event, it will be used during the display of the \'solution\' and will give you a good visual of how your observation matched the expected magDrop.</p><p><span style=\" font-weight:700; color:#ff0000;\">NOTE:</span> This does <span style=\" font-weight:700; color:#ff0000;\">NOT</span> affect the calculation of the actual magDrop of the observation - that calculation and report remains unchanged.</p></body></html>"))
        self.markDzone.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">Select two points in the primary (dark blue) light curve, one on each side of where the star ‘disappears’, then click this button to create a D search area.</span><br/></p><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">If no points are selected, a search for a D transition will not be performed --- this becomes an \'R only\' event.</span></p></body></html>"))
        self.markDzone.setText(_translate("MainWindow", "Mark D region"))
        self.markRzone.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">Select two points in the primary (dark blue) light curve, one on each side of where the star ‘reappears’, then click this button to create an R search area.</span><br/></p><p><span style=\" font-family:\'arial,sans-serif\'; color:#222222;\">If no points are selected, a search for an R transition will not be performed --- this becomes a \'D only\' event.</span></p></body></html>"))
        self.markRzone.setText(_translate("MainWindow", "Mark R region"))
        self.markEzone.setToolTip(_translate("MainWindow", "<html><head/><body><p>This button is only active when a Night Eagle 3 analysis is being performed.</p><p>The Night Eagle 3 has an effective noise reduction system that has the side effect of producing an exponential decay of intensity toward the ultimate event intensity level during a D transition. As a result, only a portion of the points in the event bottom are reliable indicators of the correct event intensity. This effect is visually obvious for the DNR:HIGH setting, much less so for the DNR:MIDDLE setting, and hard to detect at the DNR:LOW setting.</p><p>Usage is simple: click on two points that enclose the desired points to use for event parameter estimation (mean and noise), then click this button.</p><p>Clicking this button with no points selected will clear any previous selections.</p></body></html>"))
        self.markEzone.setText(_translate("MainWindow", "mark Event points to use"))
        self.markRegionsLabel.setText(_translate("MainWindow", "<html><head/><body><p>When edges are clearly visible, mark points to specify region and click ...</p></body></html>"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.analysisTab), _translate("MainWindow", "SqWave model"))
        self.vizierShowPlotButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Click this button to get a plot of the <span style=\" font-weight:700; color:#ff0000;\">VizieR</span> trimmed and scaled lightcurve before you click the <span style=\" font-weight:700; color:#0000ff;\">Add lightcurve to VizieR folder </span><span style=\" color:#000000;\">button</span>.</p><p>Any dropped readings detected within the trimmed zone will appear as gaps in the main plot and red dots on the x axis.</p></body></html>"))
        self.vizierShowPlotButton.setText(_translate("MainWindow", "Show VizieR lightcurve (trimmed)"))
        self.vizierExportButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>After previewing the proposed submission, click this button to add a VizieR-formatted .dat file to the <span style=\" font-weight:700; color:#0000ff;\">VizieR_lightcurves</span> folder located inside your <span style=\" font-weight:700; color:#0000ff;\">Documents</span> folder.</p><p>Whenever you \'zip\' these for emailing (the <span style=\" font-weight:700; color:#0000ff;\">ZIP *.dat files in VizieR folder</span> button is used for this), the files \'zipped\' will have an extension of .zipped added to the filename so that an accidental resubmission can be avoided as only files with a .dat extension will be read and placed in a specially named zip-archive.</p><p>Of course, you can always remove this extension manually should there be a need to re-zip and send.</p></body></html>"))
        self.vizierExportButton.setText(_translate("MainWindow", "Add lightcurve to VizieR folder"))
        self.label_13.setText(_translate("MainWindow", "<html><head/><body><p>Star number (with format where x is an integer)</p></body></html>"))
        self.label_11.setText(_translate("MainWindow", "month"))
        self.label_12.setText(_translate("MainWindow", "day"))
        self.label_20.setText(_translate("MainWindow", "Observer site coordinates ..."))
        self.label_22.setText(_translate("MainWindow", "<html><head/><body><p>Site longitude (min)</p></body></html>"))
        self.label_23.setText(_translate("MainWindow", "<html><head/><body><p>Site longitude (sec)</p></body></html>"))
        self.vzSiteLatLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use a minus sign to indicate South latitude.</p><p>If no sign is supplied, North latitude is assumed.</p></body></html>"))
        self.vzSiteLatLabel.setText(_translate("MainWindow", "Site latitude (+/- deg)"))
        self.label_25.setText(_translate("MainWindow", "<html><head/><body><p>Site latitude (min)</p></body></html>"))
        self.label_26.setText(_translate("MainWindow", "<html><head/><body><p>Site latitude (sec)</p></body></html>"))
        self.label_27.setText(_translate("MainWindow", "<html><head/><body><p>Observer name</p></body></html>"))
        self.label_28.setText(_translate("MainWindow", "Asteriod identification ..."))
        self.label_29.setText(_translate("MainWindow", "Asteroid number (xxxxxx)"))
        self.label_34.setText(_translate("MainWindow", "<html><head/><body><p>Asteroid name</p></body></html>"))
        self.label_38.setText(_translate("MainWindow", "<html><head/><body><p>Site altitude (meters)</p></body></html>"))
        self.vzTrimButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>It is not necessary or desirable to submit lightcurves with many readings before and after an event. Enough points before and after an event should be included so that a reasonable assessment of the baseline noise can be made, but no more.</p><p>To trim the lightcurve for submission under this policy, mark the leftmost point that should be included by clicking on it. Similarly, mark the rightmost point. Then click this button.</p><p>The button below named <span style=\" font-weight:700; color:#0000ff;\">Show VizieR lightcurve (trimmed)</span> can then be clicked to give a preview of the data submission (scaled to the VizieR standard).</p></body></html>"))
        self.vzTrimButton.setText(_translate("MainWindow", "Trim left and right"))
        self.vzStartOverButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you want to select a different trim range, clear any previous trim zone by clicking this button.</p></body></html>"))
        self.vzStartOverButton.setText(_translate("MainWindow", "Clear trim settings"))
        self.vizierLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">Email your report, or a group of reports, with your zipped file of lightcurves as an attachment to:</span></p><p><a href=\"mailto:HeraldDR@bigpond.com\"><span style=\" font-family:\'Arial\'; text-decoration: underline; text-decoration-color:#000000; color:#1155cc;\">HeraldDR@bigpond.com</span></a></p><p><span style=\" font-family:\'Arial\'; font-weight:700; color:#ff0000;\">Note:</span><span style=\" font-family:\'Arial\'; color:#000000;\"> This is </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000;\">NOT</span><span style=\" font-family:\'Arial\'; color:#000000;\"> Dave Herald\'s \'regular\' email address but rather a special one for receiving these reports!</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">The Subject line of the email </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\">must </span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">be (to avoid being treated as spam)</span></p><p><span style=\" font-family:\'Arial\'; font-weight:700; color:#ff0000; background-color:#ffffff;\">Light curve report</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">There is no need to say anything in the body of the email, but if you do so, include the word </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\">attachment</span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">. Some email clients will notice that word</span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\"> AND</span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\"> the fact that you didn\'t actually add any attachment and warn you about that!</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">You should receive an automatic acknowledgement of your email in a few minutes.</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">If there are any problems with the content of your report, you will be notified when the next batch of light curve reports are being processed. This may not be for several weeks or more.</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">Your light curve will be visible within Occult4 after it has been vetted - this may take a couple of weeks. It will later be archived at Vizier in Catalogue B/occ, which can be accessed at</span></p><p><a href=\"https://vizier.u-strasbg.fr/viz-bin/VizieR?-source=B/occ\"><span style=\" font-family:\'Times New Roman\'; font-size:12pt; text-decoration: underline; text-decoration-color:#000000; color:#1155cc;\">https://vizier.u-strasbg.fr/viz-bin/VizieR?-source=B/occ</span></a></p></body></html>"))
        self.vizierLabel.setText(_translate("MainWindow", "VizieR lightcurve archive data"))
        self.vizierZipButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button will cause the creation of a zip-file archive containing all of the lightcurves in your <span style=\" font-weight:700; color:#0000ff;\">Documents\\VizieR_lightcurves</span> folder that have a .dat extension.</p><p>The zip-file archive will be created in your Documents folder and named <span style=\" font-weight:700; color:#0000ff;\">VizieR_lightcurves_yyyy-mm-dd_&lt;username&gt;_xxxxxxxx.zip</span> where <span style=\" font-weight:700; color:#550000;\">&lt;username&gt;</span> is your computer user name, <span style=\" font-weight:700; color:#550000;\">yyyy-mm-dd</span> is the date when this file was created, and <span style=\" font-weight:700; color:#550000;\">xxxxxxxx</span> is a crc32 hash value of all the included .dat files, thus guaranteeing that will be no filename clashes.</p></body></html>"))
        self.vizierZipButton.setText(_translate("MainWindow", "ZIP *.dat files in VizieR folder"))
        self.vizierLabel_2.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">Email your report, or a group of reports, with your zipped file of lightcurves as an attachment to:</span></p><p><a href=\"mailto:HeraldDR@bigpond.com\"><span style=\" font-family:\'Arial\'; text-decoration: underline; text-decoration-color:#000000; color:#1155cc;\">HeraldDR@bigpond.com</span></a></p><p><span style=\" font-family:\'Arial\'; font-weight:700; color:#ff0000;\">Note:</span><span style=\" font-family:\'Arial\'; color:#000000;\"> This is </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000;\">NOT</span><span style=\" font-family:\'Arial\'; color:#000000;\"> Dave Herald\'s \'regular\' email address but rather a special one for receiving these reports!</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">The Subject line of the email must be </span></p><p><span style=\" font-family:\'Arial\'; font-weight:700; color:#ff0000; background-color:#ffffff;\">Light curve report</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">There is no need to say anything in the body of the email, but if you do so, include the word </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\">attachment</span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">. Some email clients will notice that word</span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\"> AND</span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\"> the fact that you didn\'t actually add any attachment and warn you about that!</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">You should receive an automatic acknowledgement of your email.</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">If there are any problems with the content of your report, you will be notified when the next batch of light curve reports are being processed. This may not be for several weeks or more.</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">Your light curve will be available within Occult. It will be archived at Vizier in Catalogue B/occ, which can be accessed at</span></p><p><a href=\"https://vizier.u-strasbg.fr/viz-bin/VizieR?-source=B/occ\"><span style=\" font-family:\'Times New Roman\'; font-size:12pt; text-decoration: underline; text-decoration-color:#000000; color:#1155cc;\">https://vizier.u-strasbg.fr/viz-bin/VizieR?-source=B/occ</span></a></p></body></html>"))
        self.vizierLabel_2.setText(_translate("MainWindow", "<html><head/><body><p>Observation date (UT):</p></body></html>"))
        self.vzInfoButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Light Curve Archive</p><p><span style=\" font-weight:700; color:#0000ff;\">Introduction</span></p><p>Occultation light curves can be archived for posterity to provide a demonstration of the basis of the occultation observation event details recorded in the Historical data set of Occultation Observations (<span style=\" color:#00aa00;\">ref 1</span>) . This data set alone provides the source of astrometry and asteroid profile diameters, including matching to Light Curve Inversion modelling. However the old adage of <span style=\" font-weight:700; color:#ff0000;\">A picture is worth a thousand words</span> remains true, so a means to archive the light curve data has been created and is offered for all occultation observations.</p><p><span style=\" font-weight:700; color:#0000ff;\">VizieR</span></p><p>VizieR (<span style=\" color:#00aa00;\">ref 2</span>) provides the most complete library of published astronomical catalogues and the Light Curve Archive consists of two sub-categories, B/occ/Moon and B/occ/asteroid. (Pyote supports only the creation of data for the asteroid subcategory.) The Vizier website provides a means to search for a record by various fields and to display the light curve image.</p><p><span style=\" font-weight:700; color:#0000ff;\">Format</span></p><p>VizieR requires the data to be submitted as an asci text file, which includes some of the circumstances of the observation. The archiving of a raster image type (..jpg etc) is not offered.</p><p><span style=\" font-weight:700; color:#0000ff;\">Occult4</span></p><p>All submissions are emailed to a Global Collector and Occult (<span style=\" color:#00aa00;\">ref 3</span>) is used to collect and provide some Quality Assurance. The light curves are distributed within Occult for displaying when an event is opened using the Asteroid Observation Editor. Occult is also used to generate the files that are periodically archived at VizieR.</p><p><span style=\" font-weight:700; color:#0000ff;\">Why bother archiving your light curves?</span></p><p>Going to the trouble of archiving light curves provides pictorial evidence of the observation to anyone who wants it, in a free and open manner, forever. It can be used to depict unusual observations like slow, stepped or double transitions that may well involve Fresnel Diffraction, double stars, binary asteroids or moons. Some observers may choose to archive unusual observations only, however it is hoped that all observations are added to the archive. Indeed some observers may choose to reprocess their entire back-file of observations if available.</p><p><span style=\" font-weight:700; color:#0000ff;\">References</span></p><p>1) NASA PDS Small Bodies Asteroid/Dust Subnode - https://sbn.psi.edu/pds/resource/occ.html</p><p>2) VizieR - https://vizier.unistra.fr/</p><p>3) Occult - http://www.lunar-occultations.com/iota/occult4.htm</p></body></html>"))
        self.vzInfoButton.setText(_translate("MainWindow", "Info"))
        self.label_9.setText(_translate("MainWindow", "<html><head/><body><p>Right-click on items for additional info</p></body></html>"))
        self.vzWhereToSendButton.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">Email your report, or a group of reports, with your zipped file of lightcurves as an attachment to:</span></p><p><a href=\"mailto:HeraldDR@bigpond.com\"><span style=\" font-family:\'Arial\'; text-decoration: underline; text-decoration-color:#000000; color:#1155cc;\">HeraldDR@bigpond.com</span></a></p><p><span style=\" font-family:\'Arial\'; font-weight:700; color:#ff0000;\">Note:</span><span style=\" font-family:\'Arial\'; color:#000000;\"> This is </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000;\">NOT</span><span style=\" font-family:\'Arial\'; color:#000000;\"> Dave Herald\'s \'regular\' email address but rather a special one for receiving these reports!</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">The Subject line of the email </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\">must </span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">be (to avoid being treated as spam)</span></p><p><span style=\" font-family:\'Arial\'; font-weight:700; color:#ff0000; background-color:#ffffff;\">Light curve report</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">There is no need to say anything in the body of the email, but if you do so, include the word </span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\">attachment</span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">. Some email clients will notice that word</span><span style=\" font-family:\'Arial\'; font-weight:700; color:#000000; background-color:#ffffff;\"> AND</span><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\"> the fact that you didn\'t actually add any attachment and warn you about that!</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">You should receive an automatic acknowledgement of your email in a few minutes.</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">If there are any problems with the content of your report, you will be notified when the next batch of light curve reports are being processed. This may not be for several weeks or more.</span></p><p><span style=\" font-family:\'Arial\'; color:#000000; background-color:#ffffff;\">Your light curve will be visible within Occult4 after it has been vetted - this may take a couple of weeks. It will later be archived at Vizier in Catalogue B/occ, which can be accessed at</span></p><p><a href=\"https://vizier.u-strasbg.fr/viz-bin/VizieR?-source=B/occ\"><span style=\" font-family:\'Times New Roman\'; font-size:12pt; text-decoration: underline; text-decoration-color:#000000; color:#1155cc;\">https://vizier.u-strasbg.fr/viz-bin/VizieR?-source=B/occ</span></a></p></body></html>"))
        self.vzWhereToSendButton.setText(_translate("MainWindow", "Where to send ZIP file"))
        self.label_14.setText(_translate("MainWindow", "Hipparcos (xxxxxx)"))
        self.label_18.setText(_translate("MainWindow", "Tycho2 (xxxx-xxxxx-x)"))
        self.label_19.setText(_translate("MainWindow", "UCAC4 (xxx-xxxxxx)"))
        self.vzSiteLongLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use a minus sign to indicate West longitude.</p><p>If no sign is provided, East longitude is assumed.</p></body></html>"))
        self.vzSiteLongLabel.setText(_translate("MainWindow", "Site longitude (+/- deg)"))
        self.label_35.setText(_translate("MainWindow", "Dot size: "))
        self.vzNagLevelSpinbox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spinner controls a \'nag\' that will remind you that you have lightcurves available in your <span style=\" font-weight:700; color:#0000ff;\">Documents\\VizieR_lightcurves</span> folder that have not been zipped for sending. </p><p>If you have a personal policy to only submit lightcurves when you have at least 5 (say) processed but not sent, set this spinner to 5. Whenever you start PyOTE, it will count the available lightcurves and alert you when that count is 5 or more with a popup message.</p></body></html>"))
        self.vzNagLevelLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spinner controls a \'nag\' that will remind you that you have lightcurves available in your <span style=\" font-weight:700; color:#0000ff;\">Documents\\VizieR_lightcurves</span> folder that have not been zipped for sending. </p><p>If you have a personal policy to only submit lightcurves when you have at least 5 (say) processed but not sent, set this spinner to 5. Whenever you start PyOTE, it will count the available lightcurves and alert you when that count is 5 or more with a popup message.</p></body></html>"))
        self.vzNagLevelLabel.setText(_translate("MainWindow", "Time-to-send alert level "))
        self.label_10.setText(_translate("MainWindow", "year "))
        self.vzSaveSiteCoordButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Entry of GPS site coordinates is error prone. The correctness of the site location is crucial, particularly for multi-chord campaigns. To help with this problem, this button can be used to save the longitude, latitude, altitude, and observer name as a named record (that name must be placed in the edit box to the right before this button will do anything) for later retrieval.</p></body></html>"))
        self.vzSaveSiteCoordButton.setText(_translate("MainWindow", "Save site coords to:"))
        self.vzSiteCoordNameEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>Name the record of GPS site information when a \'save data\' is performed (button to the left) This allows for later retrieval by use of the dropdown box to the right. This name will appear in the dropdown list.</p></body></html>"))
        self.vzCoordsComboBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This comboBox contains a dropdown list of GPS site coordinates that have been previously entered, named, and saved. Click on an entry in the dropdown list to restore that GPS data.</p></body></html>"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("MainWindow", "VizieR export"))
        self.frameTimeLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This value can be changed if it is not grayed out.  It is normally derived from the csv file (and any subsequent block integration procedure applied to the observation data), so there should be no need to manually change this value.</p><p>If grayed out, you may have to use the <span style=\" font-weight:700; color:#0000ff;\">Manual timestamps</span> tab to manually insert the correct frame time and/or time stamp information into the csv file.</p></body></html>"))
        self.frameTimeLabel.setText(_translate("MainWindow", "Frame time (sec)"))
        self.missDistanceLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>In an <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span> or <span style=\" font-weight:700; color:#0000ff;\">disk on disk</span> event, the star center sometimes does not intersect the asteroid, yet the asteroid <span style=\" text-decoration: underline;\">does</span> overlap a portion of the star disk. This is defined as a \'miss\' and the distance from the geometric edge of the asteroid to the star center path is defined as the <span style=\" font-weight:700; color:#0000ff;\">Miss distance (km)</span>.</p><p>A similar situation can occur when a diffraction model is in use. Because of diffraction, light appears outside the geometric outline of the asteroid and if your observaton point is outside this geometric edge, that will be a \'miss\', but there may be observable changes to the light curve that can be utilized to, in conjuction with other observers, put a \'fence\' around the asteroid position.</p><p>In the diffraction plots, you will not find <span style=\" font-weight:700; color:#0000ff;\">miss_distance_km</span> in the plot notes. Instead, you will find the term <span style=\" font-weight:700; color:#0000ff;\">graze_offset_km</span>. This is defined as:</p><p><span style=\" font-weight:700; color:#ff0000;\">graze_offset_km = asteroid_radius_km + miss_distance_km</span></p></body></html>"))
        self.missDistanceLabel.setText(_translate("MainWindow", "Miss distance (km)"))
        self.limbAnglesLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Limb angles are only relevant when an edge on disk model has been selected for use. They will be disabled (grayed out) and empty for all other models.</p><p>In an edge on disk model, the part of asteroid that occults the star is modeled as a straight edge (which is usually at an angle with respect to the direction of motion of the star). The D and R <span style=\" font-weight:700; color:#0000ff;\">Limb angles</span> are used to describe the slope of the asteroid edge at the point where the star is occulted by the asteroid. The convention used is that 90 degrees represents a direct \'hit\' while smaller values indicate an ever increasing slope to the intersection of the asteroid edge with the star disk.</p></body></html>"))
        self.limbAnglesLabel.setText(_translate("MainWindow", "Limb angles"))
        self.DdegreesEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>If this box is grayed out and empty, it is because <span style=\" font-weight:700; color:#0000ff;\">Model to use:</span> is not <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span>.</p></body></html>"))
        self.DdegreesEdit.setText(_translate("MainWindow", "90"))
        self.DdegreesLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>If this box is grayed out and empty, it is because <span style=\" font-weight:700; color:#0000ff;\">Model to use:</span> is not <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span>.</p></body></html>"))
        self.DdegreesLabel.setText(_translate("MainWindow", "D (deg)"))
        self.RdegreesEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>If this box is grayed out and empty, it is because <span style=\" font-weight:700; color:#0000ff;\">Model to use:</span> is not <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span>.</p></body></html>"))
        self.RdegreesEdit.setText(_translate("MainWindow", "90"))
        self.RdegreesLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>If this box is grayed out and empty, it is because <span style=\" font-weight:700; color:#0000ff;\">Model to use:</span> is not <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span>.</p></body></html>"))
        self.RdegreesLabel.setText(_translate("MainWindow", "R (deg)"))
        self.chordSizeLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>&quot;Chord&quot; is defined as the distance or time from the D event (the star <span style=\" text-decoration: underline;\">center </span>first intersects the asteroid edge) to the R event (the star <span style=\" text-decoration: underline;\">center</span> exits the asteroid).</p><p>Note: the case where a star disk is occulted by the asteroid but the star center does <span style=\" text-decoration: underline;\">not</span> intersect the asteroid is called a miss. This is indicated by a non-zero entry in the <span style=\" font-weight:700; color:#0000ff;\">Miss distance (km)</span> edit box and 0.00000 values in the <span style=\" font-weight:700; color:#0000ff;\">Chord estimate</span> edit boxes (automatically enforced whenever a non-zero entry is made in the <span style=\" font-weight:700; color:#0000ff;\">Miss distance (km)</span> edit box).</p></body></html>"))
        self.chordSizeLabel.setText(_translate("MainWindow", "<html><head/><body><p>Chord estimate</p></body></html>"))
        self.chordSizeSecondsLabel.setText(_translate("MainWindow", "secs"))
        self.chordSizeKmLabel.setText(_translate("MainWindow", "<html><head/><body><p>km </p></body></html>"))
        self.asteroidDistLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-weight:700; color:#0000ff;\">Asteroid distance</span> can be entered either in units of <span style=\" font-weight:700; color:#0000ff;\">AU</span> (astronomical units) or <span style=\" font-weight:700; color:#0000ff;\">arcsec</span> (parallax in arc second units). Once a units selection has been made by typing a value into the box, the other associated edit box will become read-only. The value of that entry will be calculated and filled in once all the parameters between these two black bars have a value in each column. This is done to avoid the possibilty of an inconsistent value being entered.</p></body></html>"))
        self.asteroidDistLabel.setText(_translate("MainWindow", "Asteroid distance"))
        self.asteroidDistAUlabel.setText(_translate("MainWindow", "AU     "))
        self.asteroidDistArcsecLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This is the distance to the asteroid specified as a parallax value (in arc seconds)</p></body></html>"))
        self.asteroidDistArcsecLabel.setText(_translate("MainWindow", "arcsec"))
        self.wavelengthLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This is the wavelength to be used for Fresnel length calulations.</p><p>The fresnel definition used in this program is: </p><p><span style=\" font-weight:700; color:#ff0000;\">fresnel_length = sqrt(asteroid_distance * wavelength / 2)</span></p><p><br/></p></body></html>"))
        self.wavelengthLabel.setText(_translate("MainWindow", "Wavelength (nm)"))
        self.asteroidSpeedLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>The <span style=\" font-weight:700; color:#0000ff;\">Asteroid speed</span> can be entered either in units of <span style=\" font-weight:700; color:#0000ff;\">km/sec</span> (Shadow speed) or <span style=\" font-weight:700; color:#0000ff;\">mas/sec</span> (Sky speed). Once a units selection has been made by typing a value into the box, the other associated edit box will become read-only. The value of that entry will be calculated and filled in once all the parameters between these two black bars have a value in each column. This is done to avoid the possibilty of an inconsistent value being entered.</p></body></html>"))
        self.asteroidSpeedLabel.setText(_translate("MainWindow", "Asteroid speed"))
        self.asteroidSpeedShadowLabel.setText(_translate("MainWindow", "Shadow(km/sec)"))
        self.asteroidSpeedSkyLabel.setText(_translate("MainWindow", "Sky (mas/sec)     "))
        self.helpPdfButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button opens a \'white paper\' pdf that explains and demonstrates the various models. It also introduces the terminology that is used consistently in the specific context help that is provied for each the widgets and labels on this tab (right-click on gui elements to popup this \'help\').</p><p>You are encouraged to routinely right click on labels, buttons, and edit boxes to elicit specific help and tips related to that gui item.</p></body></html>"))
        self.helpPdfButton.setText(_translate("MainWindow", "Help (pdf)"))
        self.modelToUseLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use this radio button list to choose the model that you wish to apply to the observation data.</p><p>If <span style=\" font-weight:700; color:#0000ff;\">square wave</span> is active, you will automatically be switched to the <span style=\" font-weight:700; color:#0000ff;\">Analysis</span> tab if the <span style=\" font-weight:700; color:#0000ff;\">Fit model to observation points</span> button is clicked, which is where square wave (geometrical optics) are handled.</p><p>If the star has an observable disk (<span style=\" font-weight:700; color:#0000ff;\">Star diameter mas</span> &gt; 0), the <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span> and <span style=\" font-weight:700; color:#0000ff;\">disk on disk</span> models can be used.</p><p>If <span style=\" font-weight:700; color:#0000ff;\">Star diameter mas</span> is zero, or very small, the <span style=\" font-weight:700; color:#0000ff;\">diffraction</span> model may be the one to use.</p><p>Pressing the <span style=\" font-weight:700; color:#0000ff;\">Ask advice on model to use</span> button will produce a message about the best model to use if you are unsure which to start with. The advice is generally good, but based on a few simple heuristics and may not always be the best choice, so keep that in mind.</p><p><br/></p></body></html>"))
        self.modelToUseLabel.setText(_translate("MainWindow", "Model to use:"))
        self.currentEventLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Provide a name for this set of asteroid event data for future reference. After a successful <span style=\" font-weight:700; color:#0000ff;\">Save event</span>, the data set can be restored by using the <span style=\" font-weight:700; color:#0000ff;\">Past events</span> dropdown selector available at the right.</p><p>This makes the entries that define this occultation (asteroid size, distance, speed, etc.) \'sticky\' in the sense that the data unique to this occultation event can be recovered later.</p><p>A <span style=\" font-weight:700; color:#0000ff;\">Save event</span> attempt will only work if a complete set of data has been filled in. That means that all the edit boxes enclosed in the three black bars must be filled in.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note: </span>Until some text has been entered in this edit box, all the edit boxes between the three black bars will be disabled, so this is the starting point for a new event. The expected workflow is: read a csv file, name the event, fill in the edit boxes, and click <span style=\" font-weight:700; color:#0000ff;\">Save event</span>. The name of the csv file currently in use is added to the saved data during this process so event data is tied to a specific file.</p></body></html>"))
        self.currentEventLabel.setText(_translate("MainWindow", "Current event"))
        self.pastEventsLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This box contains a list of previous event data sets that have been saved by clicking on the <span style=\" font-weight:700; color:#0000ff;\">Save event </span>button to the left.</p><p>The first entry in this list is always titled <span style=\" font-weight:700; color:#0000ff;\">&lt;clear event data&gt;</span> and, if selected (by clicking on it), will clear all of the edit boxes between the three black bars. Clicking any other entry will restore the saved data and fill in all the edit boxes between the three black bars.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> when you select a data set, there is the possibility that you will receive a <span style=\" font-weight:700; color:#0000ff;\">\'file mismatch\' </span>warning. This means that the data set was first created and saved in conjunction with a different csv file than the one in use at the moment. This is usually a mistake and usually due to selecting the wrong data set. But sometimes this can be deliberate, in which case the warning can be simply ignored - or, you can click on the <span style=\" font-weight:700; color:#0000ff;\">Save event</span> button to change the file association to the one currently in use.</p></body></html>"))
        self.pastEventsLabel.setText(_translate("MainWindow", "Past events"))
        self.diffractionRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This model is typically used only when <span style=\" font-weight:700; color:#0000ff;\">Star diameter mas</span> is zero or very small. Even when this is true, diffraction effects may not be observable because the diffraction fringe times are small compared to the camera frame time. Use the <span style=\" font-weight:700; color:#0000ff;\">Ask advice on model to use</span> button to get an opinion from the program.</p></body></html>"))
        self.diffractionRadioButton.setText(_translate("MainWindow", "diffraction"))
        self.edgeOnDiskRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This model can only be used when the star has an observable disk (i.e., <span style=\" font-weight:700; color:#0000ff;\">Star diameter mas</span> &gt; 0).</p><p>In this model, the part of asteroid that occults the star is modeled as a straight edge (which is usually at an angle with respect to the direction of motion of the asteroid). The D and R <span style=\" font-weight:700; color:#0000ff;\">Limb angles</span> are used to describe the slope of the asteroid edge at the point where the star is occulted by the asteroid. The convention used is that 90 degrees represents a direct \'hit\' while smaller values indicate an ever increasing slope to the intersection of the asteroid edge with the star disk.</p></body></html>"))
        self.edgeOnDiskRadioButton.setText(_translate("MainWindow", "edge on disk"))
        self.diskOnDiskRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This model can only be used when the star has an observable disk (i.e., <span style=\" font-weight:700; color:#0000ff;\">Star diameter mas</span> &gt; 0).</p><p>In this model, the asteroid disk is geometrically occulting (diffraction ignored) a star disk (limb angles are ignored as these are relevant only to the <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span> model).</p></body></html>"))
        self.diskOnDiskRadioButton.setText(_translate("MainWindow", "disk on disk"))
        self.squareWaveRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Square wave models are <span style=\" text-decoration: underline;\">not</span> handled by this tab. They are instead handled on the <span style=\" font-weight:700; color:#0000ff;\">Analysis</span> tab. </p><p>If one tries a <span style=\" font-weight:700; color:#0000ff;\">Fit model to observations points</span> with this radiobutton selected, they will be automatically switched to the <span style=\" font-weight:700; color:#0000ff;\">Analysis</span> tab.</p></body></html>"))
        self.squareWaveRadioButton.setText(_translate("MainWindow", "square wave"))
        self.fitLightcurveButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button activates the automated fit optimization process.</p><p>The title and color of this button will change to show what process is currently being performed.</p></body></html>"))
        self.fitLightcurveButton.setText(_translate("MainWindow", "Fit model to observation points"))
        self.pauseFitButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button will set a flag to request that the fitting process stop at the next change of <span style=\" font-weight:700; color:#0000ff;\">Parameter being optimized</span>.</p><p>The response may be slow if a low rho diffraction model calculation is in process at the time this request is posted - be patient.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> rho is ratio of the asteroid radius to the Fresnel length. For rho values less than 32, a full diffraction calculation must be utilized. Even though DFFT (Discrete Fast Fourier Transform) methods are employed, this takes approximately 20 times the compute time compared to a high rho event where the standard analytical expression for diffraction at an edge can be used.</p></body></html>"))
        self.pauseFitButton.setText(_translate("MainWindow", "Pause fit in progress"))
        self.askAdviceButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button will cause a message to popup that advises which model is appropriate to use, given the event data.</p><p>A heuristic is applied in determining this message and you may disagree with the advice. It is always possible to try a model other than the one suggested.</p></body></html>"))
        self.askAdviceButton.setText(_translate("MainWindow", "Ask advice on model to use"))
        self.showDiffractionButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>When a diffraction model is in use, clicking this button will show a single-wavelength diffraction light pattern projected on the ground. The wavelength used is taken from the <span style=\" font-weight:700; color:#0000ff;\">Wavelength (nm)</span> edit box.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> There is no real value to this display other than educational. It may help demonstrate the fact that, particularly for low rho events (rho = asteroid_radius / Fresnel_length), your observation point may be outside the geometric edge of the asteroid shadow (i.e., a miss), yet the observed lightcurve can show the effect of the asteroid passage, often with an <span style=\" text-decoration: underline;\">increase</span> in light!</p></body></html>"))
        self.showDiffractionButton.setText(_translate("MainWindow", "Show diffraction pattern on ground"))
        self.demoModelButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button will calculate and display a model ligtcurve superimposed on the event lightcurve, using the current set of parameters. It will be positioned around a point selected by the User where it appears the center of the \'event\' is located.</p><p>An error message will appear if exactly one point is not selected.</p><p>The selected point will remain shown so that if a new position is clearly needed, an easy assessment of where a better selection point should be placed will be eased. Just be sure to remove the old point so that only a single point is left selected.</p><p>In any case, once a fit process is started, the selected point will be erased.</p><p>If the <span style=\" font-weight:700; color:#0000ff;\">Enable plot ---:</span> box is checked, a theoretical model based on the input parameters will be shown, along with a graphic (cartoon?) portrayal of the relative path of the asteroid past the star.</p></body></html>"))
        self.demoModelButton.setText(_translate("MainWindow", "Demo model lightcurve"))
        self.printEventParametersButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button causes a listing of all the current lightcurve parameters to be shown in the log panel.</p><p>This is the same action that is automatically called at the end of a successful fit to provide a completed final report, so normally one would have no need to use this button.</p><p>One possible time to use this button is if <span style=\" font-weight:700; color:#0000ff;\">Pause fit in progress</span> was clicked and you wish the current fit achieved to be treated as the best fit and want to add the current lightcurve settings to the final report.</p></body></html>"))
        self.printEventParametersButton.setText(_translate("MainWindow", "Print event parameters"))
        self.fitMetricEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>This is a read-only indicator of the current value of the <span style=\" font-weight:700; color:#0000ff;\">Fit metric</span> (a normalized chi-squared metric is used where the normalization is done by dividing the raw chi-squared value by the variance of the baseline data points and dividing again by the nummber of points that are being compared).</p></body></html>"))
        self.fitMetricLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>These are read-only indicators of the current value of the <span style=\" font-weight:700; color:#0000ff;\">Fit metric </span>and the <span style=\" font-weight:700; color:#0000ff;\">change</span> caused by an optimization step applied to one of the fitting parameters. </p><p>A normalized chi-squared metric is used where the normalization is done by dividing the raw chi-squared value by the variance of the baseline data points and dividing again by the number of points that are being compared) and the change caused by an optimization step applied to one of the fitting parameters.</p><p>The metric in use is to be minimized, so favorable changes are negative (the step taken caused the metric to get smaller) and shown in green, while unfavorable changes are positive (the step taken caused the metric to increase) and are shown in red.</p><p>When the optimization process is underway, the parameter being optimized will be shown in the <span style=\" font-weight:700; color:#0000ff;\">Parameter being optimized</span> box. In addition, the parameter being optimized will be highlighted in light blue to make is easy for a user to see what is being changed as the optimization progresses.</p></body></html>"))
        self.fitMetricLabel.setText(_translate("MainWindow", "<--Fit metric    change-->"))
        self.fitMetricChangeEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>This is a read-only indicator of the <span style=\" font-weight:700; color:#0000ff;\">change</span> caused by an optimization step applied to one of the fitting parameters. </p><p>A normalized chi-squared metric is used where the normalization is done by dividing the raw chi-squared value by the variance of the baseline data points and dividing again by the number of points that are being compared) and the change caused by an optimization step applied to one of the fitting parameters.</p><p>The metric in use is to be minimized, so favorable changes are negative (the step taken caused the metric to get smaller) and shown in green, while unfavorable changes are positive (the step taken caused the metric to increase) and are shown in red.</p></body></html>"))
        self.currentEventEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>Provide a name for this set of asteroid event data for future reference. After a successful <span style=\" font-weight:700; color:#0000ff;\">Save event</span>, the data set can be restored by using the <span style=\" font-weight:700; color:#0000ff;\">Past events</span> dropdown selector available at the right.</p><p>This makes the entries that define this occultation (asteroid size, distance, speed, etc.) \'sticky\' in the sense that the data unique to this occultation event can be recovered later.</p><p>A <span style=\" font-weight:700; color:#0000ff;\">Save event</span> attempt will become possible once a complete set of core data has been filled in. That means that all the edit boxes enclosed between the top two horizontal black bars have been filled in. At this point, such a <span style=\" font-weight:700; color:#0000ff;\">Save event</span> would be of partial data - the edit boxes that are between the bottom two horizontal black bars are empty at this point. This is useful for someone who is processing multiple lightcurves from the same event as it allows a \'template\' file to be created with the details for the individual lightcurves left unfilled (the entries between the bottom two horizontal bars). This template file can then be copied into the folder for each lightcurve csv file where it can be reopened and the data specific to that particular lightcurve/observation can be added.</p><p>For someone processing their own lightcurve, the <span style=\" font-weight:700; color:#0000ff;\">Save event</span> should be performed only after all data between all the horizontal black bars have been filled in,</p><p><span style=\" font-weight:700; color:#ff0000;\">Note: </span>Until some text has been entered in this edit box, all the edit boxes between the three horizontal black bars will be disabled, so this is the starting point for a new event. The expected workflow is: read a csv file, name the event, fill in the edit boxes, and click <span style=\" font-weight:700; color:#0000ff;\">Save event</span>. The name of the csv file currently in use is added to the saved data during this process so that the event data is tied to a specific file.</p></body></html>"))
        self.saveCurrentEventButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>If all of the edit boxes enclosed in the three black bars below have been filled in, clicking this button will save the data to a special file in your home directory using the name provided in the <span style=\" font-weight:700; color:#0000ff;\">Current event</span> edit box.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> the event data is saved together with the name of the csv file in use at the moment. When this data set is selected in the future, if the csv file in use at that time does not match the name of the csv file in use when <span style=\" font-weight:700; color:#0000ff;\">Save event</span> was clicked, you will receive a warning message as this is often a mistake of some kind.</p></body></html>"))
        self.saveCurrentEventButton.setText(_translate("MainWindow", "Save event"))
        self.pastEventsComboBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This box contains a list of previous event data sets that have been saved by clicking on the <span style=\" font-weight:700; color:#0000ff;\">Save event </span>button to the left.</p><p>The first entry in this list is always titled <span style=\" font-weight:700; color:#0000ff;\">&lt;clear event data&gt;</span> and, if selected (by clicking on it), will clear all of the edit boxes between the three black bars. Clicking any other entry will restore the saved data and fill in all the edit boxes between the three black bars.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> when you select a data set, there is the possibility that you will receive a <span style=\" font-weight:700; color:#0000ff;\">\'file mismatch\' </span>warning. This means that the data set was first created and saved in conjunction with a different csv file than the one in use at the moment. This is usually a mistake and usually due to selecting the wrong data set. But sometimes this can be deliberate, in which case the warning can be simply ignored - or, you can click on the <span style=\" font-weight:700; color:#0000ff;\">Save event</span> button to change the file association to the one currently in use.</p></body></html>"))
        self.deleteEventButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking this button will delete the currently selected data set. You will need to answer a <span style=\" font-weight:700; color:#0000ff;\">\'do you really mean it?\'</span> message to complete the action.</p></body></html>"))
        self.deleteEventButton.setText(_translate("MainWindow", "Delete event"))
        self.starSizeLabel.setText(_translate("MainWindow", "Star diameter"))
        self.starSizeMasLabel.setText(_translate("MainWindow", "mas"))
        self.starSizeKmLabel.setText(_translate("MainWindow", "km "))
        self.showAnnotationsCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>When a popup plot of the theoretical lightcurve is produced, a set of notes can be added that show the values of the most signficant parameters used to produce the lightcurve. This checkbox enables that data to be added to the plot. If the resulting plot appears too cluttered, leave this box unchecked.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> a plot will be produced only in response to a click on the <span style=\" font-weight:700; color:#0000ff;\">Demo model lightcurve</span> button while the <span style=\" font-weight:700; color:#0000ff;\">Enable plot</span> checkbox to the left is checked. These plots have a set of controls (icons along the top of the plot) that can be used to zoom, pan, and change other aspects of the plot. Experiment with these if you are using these plots for documentation purposes.</p></body></html>"))
        self.showAnnotationsCheckBox.setText(_translate("MainWindow", "with notes"))
        self.showLegendsCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>When a popup plot of the theoretical lightcurve is produced, a legend can be added that shows the colors of the theoretical underlying lightcurve and the camera response (which adds the effect of the frame time integration produced by the camera). This checkbox enables that legend to be added to the plot. If the resulting plot appears too cluttered, leave this box unchecked.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> a plot will be produced only in response to a click on the <span style=\" font-weight:700; color:#0000ff;\">Demo model lightcurve</span> button while the <span style=\" font-weight:700; color:#0000ff;\">Enable plot</span> checkbox to the left is checked. These plots have a set of controls (icons along the top of the plot) that can be used to zoom, pan, and change other aspects of the plot. Experiment with these if you are using these plots for documentation purposes.</p></body></html>"))
        self.showLegendsCheckBox.setText(_translate("MainWindow", "with  legends"))
        self.versusTimeCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>When a popup plot of the theoretical lightcurve is produced, the x axis can be either time (seconds) or distance (km). This checkbox controls which units will be used for the x axis.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> a plot will be produced only in response to a click on the <span style=\" font-weight:700; color:#0000ff;\">Demo model lightcurve</span> button while the <span style=\" font-weight:700; color:#0000ff;\">Enable plot</span> checkbox to the left is checked. These plots have a set of controls (icons along the top of the plot) that can be used to zoom, pan, and change other aspects of the plot. Experiment with these if you are using these plots for documentation purposes.</p></body></html>"))
        self.versusTimeCheckBox.setText(_translate("MainWindow", "versus time"))
        self.showDetailsCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>If this box is checked when the <span style=\" font-weight:700; color:#0000ff;\">Demo model lightcurve</span> button is clicked, a two part popup plot showing the theoretical lightcurve and a depiction of the event will be produced.</p><p><span style=\" font-weight:700; color:#ff0000;\">Note:</span> these plots have a set of controls (icons along the top of the plot) that can be used to zoom, pan, and change other aspects of the plot. Experiment with these if you are using these plots for documentation purposes.</p></body></html>"))
        self.showDetailsCheckBox.setText(_translate("MainWindow", "Enable plot ---:"))
        self.asteroidDiameterLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>The <span style=\" font-weight:700; color:#0000ff;\">Asteroid diameter</span> can be entered either in units of <span style=\" font-weight:700; color:#0000ff;\">Km</span> or <span style=\" font-weight:700; color:#0000ff;\">mas</span> (milli-arc-seconds). Once a units selection has been made by typing a value into the box, the other associated edit box will become read-only. The value of that entry will be calculated and filled in once all the parameters between these two black bars have a value in each column. This is done to avoid the posibilty of an inconsistent value being entered.</p></body></html>"))
        self.asteroidDiameterLabel.setText(_translate("MainWindow", "Asteroid diameter"))
        self.asteroidDiameterKmLabel.setText(_translate("MainWindow", "Km"))
        self.asteroidDiameterMasLabel.setText(_translate("MainWindow", "mas"))
        self.baselineADUlabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This is a read-only edit box. It is filled in by the user selecting point pairs in the observation data and clicking the <span style=\" font-weight:700; color:#0000ff;\">Select</span> button below. This may be repeated multiple times. Once all desired points have been select, click the <span style=\" font-weight:700; color:#0000ff;\">Calc</span> button to extract the baseline statistics. These are used to fill in the <span style=\" font-weight:700; color:#0000ff;\">Baseline ADU</span> value and provide the baseline noise variance for use in the fit metric calculation.</p></body></html>"))
        self.baselineADUlabel.setText(_translate("MainWindow", "Baseline ADU"))
        self.baselineADUbutton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Click this button once a point pair has been placed on the baseline area that exludes any event data. The points selected will be changed to a salmon color.</p><p>This operation may be reated multiple time.</p></body></html>"))
        self.baselineADUbutton.setText(_translate("MainWindow", "Select"))
        self.calcBaselineADUbutton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Click this button once the baseline points that are useful in determing the baseline intensity and variance have been selected.</p><p>This will cause the <span style=\" font-weight:700; color:#0000ff;\">Baseline ADU</span> edit box to be filled in and, if a <span style=\" font-weight:700; color:#0000ff;\">MagDrop</span> value is available, the <span style=\" font-weight:700; color:#0000ff;\">Bottom ADU</span> value as well.</p><p>It automatically clears the selected points, puts the edit cursor into the <span style=\" font-weight:700; color:#0000ff;\">Predicted magDrop</span> box, and pops up a message reminging you to enter the predicted magDrop.</p></body></html>"))
        self.calcBaselineADUbutton.setText(_translate("MainWindow", "Calc"))
        self.clearBaselineADUselectionButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This button removes the salmon coloring of the points selected by using the <span style=\" font-weight:700; color:#0000ff;\">Select</span> button.</p></body></html>"))
        self.clearBaselineADUselectionButton.setText(_translate("MainWindow", "Clear"))
        self.bottomADUlabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This is a read-only value that is filled in automatically once both a <span style=\" font-weight:700; color:#0000ff;\">Baseline ADU</span> value is available and a <span style=\" font-weight:700; color:#0000ff;\">MagDrop</span> value has been entered in the edit box below.</p></body></html>"))
        self.bottomADUlabel.setText(_translate("MainWindow", "Bottom ADU"))
        self.magdropLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>When a value is entered in this edit box, if there is already a value present in the <span style=\" font-weight:700; color:#0000ff;\">Baseline ADU</span> edit box, the <span style=\" font-weight:700; color:#0000ff;\">Bottom ADU</span> value will be automatically calculated from the predicted magDrop for the event.</p></body></html>"))
        self.magdropLabel.setText(_translate("MainWindow", "<html><head/><body><p>magDrop</p></body></html>"))
        self.fresnelSizeLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This is a read-only display of the Fresnel length (km) and time (seconds) calculated using the <span style=\" font-weight:700; color:#0000ff;\">Wavelength (nm)</span> displayed in the edit box above, in conjunction with <span style=\" font-weight:700; color:#0000ff;\">Asteroid distance</span>.</p><p>The fresnel definition used in this program is: </p><p><span style=\" font-weight:700; color:#ff0000;\">fresnel_length = sqrt(asteroid_distance * wavelength / 2)</span></p></body></html>"))
        self.fresnelSizeLabel.setText(_translate("MainWindow", "Fresnel size"))
        self.fresnelSizeSecondsLabel.setText(_translate("MainWindow", "seconds"))
        self.fresnelSizeKmLabel.setText(_translate("MainWindow", "km        "))
        self.fitPrecisionLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This set of edit boxes controls the size of the step changes tried during a fit optimization of the various parameters.</p></body></html>"))
        self.fitPrecisionLabel.setText(_translate("MainWindow", "<html><head/><body><p>Precision of \'fit\' parameters (step size for parameter changes):</p></body></html>"))
        self.edgeTimePrecisionLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size of each time step taken during the search for best fit. This is referred to as <span style=\" font-weight:700; color:#0000ff;\">Position</span> because it is used to determine the best positioning of the model lightcurve on the x (time) axis.</p><p>Acceptable values are &gt;= 0.0001 (units are seconds)</p><p>It is often quicker to arrive at a rough solution by setting the value to 0.1 or 0.05 to let the optimization routine search more quickly by taking larger steps. Once a rough fit is found, you can select smaller steps to refine the fit.</p></body></html>"))
        self.edgeTimePrecisionLabel.setText(_translate("MainWindow", "Position step size"))
        self.edgeTimePrecisionEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size of each time step taken during the search for best fit. This is referred to as <span style=\" font-weight:700; color:#0000ff;\">Position</span> because it is used to determine the best positioning of the model lightcurve on the x (time) axis.</p><p>Acceptable values are &gt;= 0.0001 (units are seconds)</p><p>It is often quicker to arrive at a rough solution by setting the value to 0.1 or 0.05 to let the optimization routine search more quickly by taking larger steps. Once a rough fit is found, you can select smaller steps to refine the fit.</p></body></html>"))
        self.edgeTimePrecisionUnitsLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size of each time step taken during the search for best fit. This is referred to as <span style=\" font-weight:700; color:#0000ff;\">Position</span> because it is used to determine the best positioning of the model lightcurve on the x (time) axis.</p><p>Acceptable values are &gt;= 0.0001 (units are seconds)</p><p>It is often quicker to arrive at a rough solution by setting the value to 0.1 or 0.05 to let the optimization routine search more quickly by taking larger steps. Once a rough fit is found, you can select smaller steps to refine the fit.</p></body></html>"))
        self.edgeTimePrecisionUnitsLabel.setText(_translate("MainWindow", "seconds"))
        self.chordDurationPrecisionLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size (in seconds) of the steps used when optimizing the fit by changing the chord duration.</p><p>Setting this value to zero will cause chord optimization to be skipped.</p><p>As a best first guess, set the chord duration to the approximate duration of the occultation event at the 50% brightness level. Then, adjust the step levels as described for <span style=\" font-weight:700; color:#0000ff;\">Position step size</span>.</p></body></html>"))
        self.chordDurationPrecisionLabel.setText(_translate("MainWindow", "Chord dur step size"))
        self.chordDurationPrecisionEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size (in seconds) of the steps used when optimizing the fit by changing the chord duration.</p><p>Setting this value to zero will cause chord optimization to be skipped.</p><p>As a best first guess, set the chord duration to the approximate duration of the occultation event at the 50% brightness level. Then, adjust the step levels as described for <span style=\" font-weight:700; color:#0000ff;\">Position step size</span>.</p></body></html>"))
        self.chordDurationUnitsLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size (in seconds) of the steps used when optimizing the fit by changing the chord duration.</p><p>Setting this value to zero will cause chord optimization to be skipped.</p><p>As a best first guess, set the chord duration to the approximate duration of the occultation event at the 50% brightness level. Then, adjust the step levels as described for <span style=\" font-weight:700; color:#0000ff;\">Position step size</span>.</p></body></html>"))
        self.chordDurationUnitsLabel.setText(_translate("MainWindow", "seconds"))
        self.limbAnglePrecisionLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size (in degrees) of the steps used when optimizing the fit by changing the D or R limb angle. This is applicable only to the edge on disk model and plays no part in any other model. If this box is grayed out, it is because <span style=\" font-weight:700; color:#0000ff;\">Model to use:</span> is not <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span>.</p><p>Setting this value to zero will cause angle optimization to be skipped.</p></body></html>"))
        self.limbAnglePrecisionLabel.setText(_translate("MainWindow", "Limb angle step"))
        self.limbAnglePrecisionEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size (in degrees) of the steps used when optimizing the fit by changing the D or R limb angle. This is applicable only to the edge on disk model and plays no part in any other model. If this box is grayed out, it is because <span style=\" font-weight:700; color:#0000ff;\">Model to use:</span> is not <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span>.</p><p>Setting this value to zero will cause angle optimization to be skipped.</p></body></html>"))
        self.limbAnglePrecisionUnitsLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size (in degrees) of the steps used when optimizing the fit by changing the D or R limb angle. This is applicable only to the edge on disk model and plays no part in any other model. If this box is grayed out, it is because <span style=\" font-weight:700; color:#0000ff;\">Model to use:</span> is not <span style=\" font-weight:700; color:#0000ff;\">edge on disk</span>.</p><p>Setting this value to zero will cause angle optimization to be skipped.</p></body></html>"))
        self.limbAnglePrecisionUnitsLabel.setText(_translate("MainWindow", "degrees"))
        self.missDistancePrecisionLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This entry sets the size (in km) of the steps used when optimizing the fit by changing the <span style=\" font-weight:700; color:#0000ff;\">Miss distance</span>.</p><p>This entry is relevant only when the event has a <span style=\" font-weight:700; color:#0000ff;\">Miss distance (km)</span> setting greater than 0.</p><p>Setting this value to zero will force <span style=\" font-weight:700; color:#0000ff;\">Miss distance</span> optimization to be skipped.</p></body></html>"))
        self.missDistancePrecisionLabel.setText(_translate("MainWindow", "Miss distance step"))
        self.missDistancePrecisionEdit.setToolTip(_translate("MainWindow", "This entry sets the size (in km) of the steps used when optimizing the fit by changing the Miss distance.\n"
"This entry is relevant only when the event has a Miss distance (km) setting greater than 0.\n"
"Setting this value to zero will force Miss distance optimization to be skipped."))
        self.missDistancePrecisionUnitsLabel.setToolTip(_translate("MainWindow", "This entry sets the size (in km) of the steps used when optimizing the fit by changing the Miss distance.\n"
"This entry is relevant only when the event has a Miss distance (km) setting greater than 0.\n"
"Setting this value to zero will force Miss distance optimization to be skipped."))
        self.missDistancePrecisionUnitsLabel.setText(_translate("MainWindow", "km         "))
        self.beingOptimizedEdit.setToolTip(_translate("MainWindow", "<html><head/><body><p>When the optimization process is underway, the parameter being optimized will be shown in this box. In addition, the parameter being optimized will be highlighted in light blue to make it easy for a user to see what is being changed as the optimization progresses.</p></body></html>"))
        self.beingOptimizedLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>When the optimization process is underway, the parameter being optimized will be shown in this box. In addition, the parameter being optimized will be highlighted in light blue to make it easy for a user to see what is being changed as the optimization progresses.</p></body></html>"))
        self.beingOptimizedLabel.setText(_translate("MainWindow", "Parameter being optimized"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "Other models"))
        self.calcFlashEdge.setToolTip(_translate("MainWindow", "<html><head/><body><p>This button calculates the fractional frame number at which the start of a timing flash occurred.</p><p>Click a point on either side of the R event (leading edge) of a timing flash, then click the <span style=\" font-weight:600; color:#fc0107;\">Calc flash edge</span> button (this one). Start with the earliest edge, then repeat the procedure on the second edge (if present --- it is highly recommended to use goal-post flashes that bracket the event).</p><p>Next, click the <span style=\" color:#fc0107;\">M</span><span style=\" font-weight:600; color:#fc0107;\">anual timestamp entry</span> button to bring up a dialog for entering manual timestamp data. The calculated frame values for the edges will be automatically pre-filled in the form. You only need enter the corresponding flash time values from the flash app log and click <span style=\" font-weight:600; color:#fc0107;\">Ok </span><span style=\" color:#000000;\">to trigger timestamp calculations for all points</span>.</p><p><br/></p></body></html>"))
        self.calcFlashEdge.setText(_translate("MainWindow", "Calc flash edge"))
        self.manualEntryPushButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This button causes a dialog to appear in which timestamp information may be entered. This is needed if \'flash timing\' is being utilized.</p><p>It is also useful when OCR of a VTI overlay has a high error rate, but enough entries have been properly read that \'goal post\' timing (use of two times that bracket the event to provide the timing information by interpolation) can be used.</p><p>NOTE: timestamps are ALWAYS treated as start-of-exposure times.</p></body></html>"))
        self.manualEntryPushButton.setText(_translate("MainWindow", "Manual timestamp entry"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_9), _translate("MainWindow", "Manual timestamps"))
        self.allowNewVersionPopupCheckbox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This splash screen can be disabled on the <span style=\" font-weight:700; color:#0000ff;\">Settings/Misc.</span> tab.</p><p><span style=\" font-weight:700; color:#ff0000;\">What\'s new with this version:</span></p><p><span style=\" color:#000000;\">There is a new tab named </span><span style=\" font-weight:700; color:#0000ff;\">VizieR export</span><span style=\" color:#000000;\"> that supports the submission of asteroid occultation lightcurves to </span><span style=\" font-weight:700; color:#0000ff;\">VizieR</span><span style=\" color:#000000;\">. The lightcurves will - after processing through Occult4 under the supervision of Dave Herald - get added to the VizieR repository at: </span></p><p><a href=\"https://vizier.cds.unistra.fr/viz-bin/VizieR-3?-source=B/occ/asteroid\"><span style=\" text-decoration: underline; color:#0000ff;\">https://vizier.cds.unistra.fr/viz-bin/VizieR-3?-source=B/occ/asteroid </span></a></p><p><a href=\"https://vizier.cds.unistra.fr/viz-bin/VizieR-3?-source=B/occ/asteroid\"><span style=\" color:#000000;\">Use of this system to memorialize your lightcurves and make them available in the public domain is encouraged.</span></a></p><p><span style=\" font-weight:700; color:#ff0000;\">What\'s sort-of new:</span></p><p>A small change is that during automatic block integration, if a block size is filled in (there is an edit box added to the right of the <span style=\" font-weight:700; color:#0000ff;\">Manual/automatic block integrate</span> button on the analysis tab), then the program will determine the optimum offset for only that block size. This speeds up the process when the block size is known and avoids interference from a deep and/or long occultation.</p><p>Another small change involves the reporting of magDrop error bars. It is possible for a magDrop error bar calculation to produce an unreasonable answer - that is, the error bars imply a possible negative magDrop (such as magDrop = 1.5 +/- 4.2). In this case, an error bar is not reported and a % drop is reported instead.</p><p><span style=\" font-weight:700; color:#ff0000;\">Model selection tab:</span></p><p>The previous big change was the addition of a new tab that provides comprehensive modeling of: optical diffraction (including a central spot when the asteroid rho is low enough for that to be significant); disk-on-disk for cases where the star disk and asteroid disk are not too different (geometric optics is used); and edge-on-disk where there is a significant star disk being occulted by a large asteroid - in which case a penumbral curve results and limb angles become an interesting parameter to fit (again, geometrical optics are employed).</p><p>For all models, it is possible to have a \'miss\' (defined as the case where the star center does not intersect the asteroid) yet the observation will record some light changes - a \'miss\' is a limiting case of a \'graze\' where the centerline of the star passage lies outside the perimeter of the asteroid. In the case of a low rho asteroid (i.e., an asteroid that is less than 16 fresnel lengths in radius) diffraction event, such a \'miss\' can even result in the light <span style=\" font-weight:700; color:#0000ff;\">increasing</span> during the event. Such \'miss\' events are fully modeled because, even though a chord duration cannot be computed, the \'miss\' distance can be used to establish a limit to the edge of an asteroid.</p><p>A folder of example csv files has been written to C:\\Users\\&lt;you&gt;\\Documents\\model-examples. They are useful in \'playing\' with the new features as they include a \'noisy\' version of a model lightcurve along within a noise-free version. This is useful in experimenting with the automatic fitting procedure. </p></body></html>"))
        self.allowNewVersionPopupCheckbox.setText(_translate("MainWindow", "allow \'new version\' information pop-up"))
        self.label.setText(_translate("MainWindow", "Check any of the following plot options you wish to be active during the analysis."))
        self.showTimestampErrors.setToolTip(_translate("MainWindow", "<html><head/><body><p>Timestamp errors are indicated by red or orange lines to show where a time step was abnormal.</p><p>A red line indicates a time step that was greater than 1.8 * expected and are likely dropped readings.</p><p>A red line will also appear where the time step was less than 0.2 times the expected value. This is probably a duplicated reading.</p><p>Orange lines indicate a cadence error, which is defined as a time step that is not within +/- 30% of the expected value (but not so far outside to be considered a dropped or duplicated reading). Cadence errors are most commonly found in high frame rate recordings and indicate that some part of the processing/recording pipeline is not able to keep up with the data flow.</p><p>Sometimes there are so many red and orange lines that is becomes hard to see the plot. In that case, uncheck this box to suppress the red line display.</p></body></html>"))
        self.showTimestampErrors.setText(_translate("MainWindow", "time err "))
        self.showCameraResponseCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>The \'camera response curve\' shows what the camera output would be given the underlying light curve (shown in brown) position.</p><p>It assumes the camera linearly accumulates light during the exposure interval. The model is: the camera integrates/accumulates light during the exposure time, then emits tha result immediately (which may not be true for many cameras, but the camera delay tables used during final reports will make the needed correction).</p></body></html>"))
        self.showCameraResponseCheckBox.setText(_translate("MainWindow", "camera response"))
        self.showUnderlyingLightcurveCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>Check this box if you want a plot of the \'light\' the camera sees.</p></body></html>"))
        self.showUnderlyingLightcurveCheckBox.setText(_translate("MainWindow", "raw light"))
        self.showErrBarsCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you do not want to see the vertical dashed lines that show the 95% containment interval error bars for D and/or R, uncheck this box.</p></body></html>"))
        self.showErrBarsCheckBox.setText(_translate("MainWindow", "err bars"))
        self.showEdgesCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you do not want to see the D and/or R edges marked with a vertical dashed line on the \'solution\', uncheck this box.</p></body></html>"))
        self.showEdgesCheckBox.setText(_translate("MainWindow", "edges"))
        self.showOCRcheckFramesCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>Uncheck this box if you do not need to see the D and/or R frames from the video automatically displayed to verify that timestamp OCR was correct.</p><p><span style=\" font-weight:600; color:#0000ff;\">Background:</span> if the video that produced the csv being analyzed is still in its original location, PyOTE will access that video whenever an event has been found and the critical frames that determine the reported times will be displayed. The timing data used for the report is displayed in the title of each displayed frame, allowing a user to visually confirm that the OCR timestamp extraction was correct.</p><p>NOTE: timestamps are ALWAY treated as start-of-exposure times.</p></body></html>"))
        self.showOCRcheckFramesCheckBox.setText(_translate("MainWindow", "Do OCR check"))
        self.showTimestampsCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>If you want frame numbers used on the x-xaxis,&nbsp;uncheck this box.&nbsp;Otherwise,&nbsp;if timestamps are available,&nbsp;they will be used to annotate the x-axis.</p></body></html>"))
        self.showTimestampsCheckBox.setText(_translate("MainWindow", "timestamps"))
        self.label_2.setText(_translate("MainWindow", "Use View Frame to import a video image of a specific frame number."))
        self.viewFrameButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use this button to view a frame from the video that was used by PyMovie or Limovie to prepare the csv file that is currently being analyzed. Currently .avi and .ser files are viewable in this manner as well as .fits files inside a FITS folder.</p><p>If this button is disabled, it is because the csv file did not come from PyMovie or Limovie or simply cannot be found/opened.</p><p>This feature can/should be used as a final quality control check for a video that contains timestamps extracted using OCR. It is possible for OCR to fail in manner that is <span style=\" font-weight:600; color:#fc0107;\">not detected</span> by PyOTE because the program only verifies that there is a consistent step (delata time) between frames. If a high order digit has been consistently misread, like reading an 8 as a 9 in the minutes field, the steps can be consistent but the reported time of the event will be wrong.</p><p>ALL time reporting is derived from the single timestamp(s) associated with D and/or R (the integer values, not the sub-frame values). If those timestamps are correct, the reported times will be correct even when there may be a few missing or duplicated frames and all other timestamps are wrong. So, best practice is to enter the D frame value in the spin box and visually confirm that the timestamp that you can see is the same as that extracted by the OCR procedure. Repeat for R.</p><p>Another use for this feature is to handle the case where there is a visual timestamp that can be seen in the video, but either OCR was not activated during the .csv preparation, or the timestamp overlay came from an unsupported VTI type. The workflow in this case is to let PyOTE find the D and R values, but before doing <span style=\" font-weight:600; color:#fc0107;\">... write report</span>, do a <span style=\" font-weight:600; color:#fc0107;\">Manual timestamp entry</span> for the D and R values found by viewing the relevant frames and entering the correct times in the Manual timestamp dialog.</p><p>Note that timestamps can be entered manually even if timestamps are already present in the file. The manual timestamps will be calculated and used to replace those already there.</p></body></html>"))
        self.viewFrameButton.setText(_translate("MainWindow", "View frame from associated video"))
        self.frameNumSpinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use this spin box (which may be directly edited) to select the number of the frame/image you want to see.</p><p>The upper limit and lower limits for allowed numbers in this spin box are set when the csv is read, which sometimes only contains a subset of the frames available in the video.  If your \'edit\' is refused, it is because you are trying to enter a number outside the range allowed, which is always restricted to frame numbers that actually appear in the csv file.</p></body></html>"))
        self.label_3.setText(_translate("MainWindow", "Use the check boxes to change the view of the imported video image."))
        self.fieldViewCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>For videos from a composite video camera, check this box to view the frame as two fields.</p></body></html>"))
        self.fieldViewCheckBox.setText(_translate("MainWindow", "field view"))
        self.flipYaxisCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>Checking this box will rotate/flip the image around the horizontal axis. (Flips top to bottom.)</p></body></html>"))
        self.flipYaxisCheckBox.setText(_translate("MainWindow", "flip top/bottom"))
        self.flipXaxisCheckBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>Check this box if you need to rotate/flip the image around the vertical axis. (Flip left to right.)</p></body></html>"))
        self.flipXaxisCheckBox.setText(_translate("MainWindow", "flip left/right"))
        self.label_4.setText(_translate("MainWindow", "Set the width of the error bars and light curve lines in the light curve plot."))
        self.lineWidthLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spinner sets the line width (in pixels) of the error bar lines, the geometric edge lines, and the lightcurve lines.  Adjust this to show these lines according to your taste and the resolution of your screen.</p></body></html>"))
        self.lineWidthLabel.setText(_translate("MainWindow", "line width"))
        self.label_31.setText(_translate("MainWindow", "<html><head/><body><p>Set the size of the dots used in lightcurve plots.</p></body></html>"))
        self.lineWidthLabel_2.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spinner sets the line width (in pixels) of the error bar lines, the geometric edge lines, and the lightcurve lines.  Adjust this to show these lines according to your taste and the resolution of your screen.</p></body></html>"))
        self.lineWidthLabel_2.setText(_translate("MainWindow", "dot size"))
        self.label_6.setText(_translate("MainWindow", "If the file is from PyMovie, you can select the kind of data to analyze ..."))
        self.label_7.setText(_translate("MainWindow", "... signal (background subtracted)  appsum (no background subtraction) ..."))
        self.label_8.setText(_translate("MainWindow", "... avgbkg (background value)  stdbkg (noise in background)  nmaskpx (pixel count in mask)"))
        self.label_5.setText(_translate("MainWindow", "PyMovie data column prefix"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.settingsTab), _translate("MainWindow", "Settings/Misc."))
        self.detectabilityHelpButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>The primary use of this tool is to perform a \'detectability\' estimate. That estimate can be used to decide whether to attempt a future occultation observation or, to analyze an actual occultation observation to decide whether to report a <span style=\" color:#fc0107;\">\'miss\'</span><span style=\" color:#000000;\">,</span><span style=\" color:#fc0107;\"> \'qualified miss\'</span><span style=\" color:#000000;\">,</span><span style=\" color:#fc0107;\"/>or <span style=\" color:#fc0107;\">\'no observation\'</span>. Do this as follows:</p><p>1) If PyOTE could not find an event in an actual occultation observation and this tool says the event was detectable at a duration as short as one data frame, report a <span style=\" color:#fc0107;\">\'miss\'</span><span style=\" color:#000000;\">.</span></p><p><span style=\" color:#000000;\">2) If PyOTE could not find an event in an actual occultation observation and this tool says the event was detectable at more than one data frame duration, then report a</span><span style=\" color:#fc0107;\"> \'qualified miss for a duration greater than the detectable limit\'</span><span style=\" color:#000000;\"> and a </span><span style=\" color:#fc0107;\">\'no observation\'</span><span style=\" color:#000000;\"> for a duration shorter than the detectable limit.</span></p><p><span style=\" color:#000000;\">3) If PyOTE could not find an event in actual occultation observation and the tool says the event was not detectable at a duration of more than 1.5 X the predicted duration, then report a </span><span style=\" color:#fc0107;\">\'no observation\'</span><span style=\" color:#000000;\">.</span></p><p>This tool is also useful with observations that have employed a \'GPS Flasher\' to provide timing for the video observation. A side effect of having an LED light up at the entrance of your telescope is that it will affect the baseline values of the target star (and others) and so make it more difficult to extract the best possible baseline statistics (mean and noise-sigma and noise-correlation-coefficients) which benefit from having more points involved in the calculation. This tool allows the user to tell PyOTE where the baseline values are reliable enough(unaffected by flashes, or wind gusts, or telescope jostling, etc) to be used during baseline statistics calculation.</p><p>By repeatedly selecting pairs of points on the light curve being analyzed and clicking the <span style=\" font-weight:600; color:#0000ff;\">Mark baseline region</span> button, the regions of \'reliable baseline/event data\' can be designated. They will be shown as orangish points instead of the normal blue color.</p><p><span style=\" font-weight:600; color:#0000ff;\">NOTE:</span> Regions marked on one curve are automatically applied to all curves. </p><p>In general, normalization against a reference star should be performed first, then this operation. That will remove any \'trends\' that would affect the mean and noise-sigma.</p><p><span style=\" font-weight:600; color:#0000ff;\">FYI:</span> One can also use this feature to calculate statistics on some set of points of interest (like a statistics in the event bottom) or for reference stars or ...</p></body></html>"))
        self.detectabilityHelpButton.setText(_translate("MainWindow", "Help"))
        self.markBaselineRegionButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Click on pairs of points that enclose points that are valid to use for noise (and mean value) calculations. This can be repeated to select disjoint sets of valid points.</p></body></html>"))
        self.markBaselineRegionButton.setText(_translate("MainWindow", "Mark baseline region"))
        self.clearBaselineRegionsButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clear all marked regions and any statistics that may have been extracted by clicking on this button: <span style=\" font-weight:600; color:#0000ff;\">Calc baseline mean/sigma/corr coeffs</span></p></body></html>"))
        self.clearBaselineRegionsButton.setText(_translate("MainWindow", "Clear baseline regions"))
        self.calcStatsFromBaselineRegionsButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>When this button is clicked, all the points included in the marked regions will be collected and used to calculate the baseline/event mean, noise-sigma, and the noise-correlation coefficients. Unless a \'trim\' is performed, these values will be used during error bar estimations and \'false-positive\' estimation.</p><p><span style=\" font-weight:600; color:#0000ff;\">NOTE:</span> If a \'trim\' is performed, <span style=\" font-weight:600;\">the baseline mean will be determined from the \'fit\' to the trimmed data,</span> but the noise-sigma and noise-correlation coefficients extracted from the marked \'background\' regions will continue to override those obtained from the trimmed light-curve.</p><p>This is done so that if the mean baseline level on either side of the event appears to be a little different than the overall baseline, one can get improved baseline noise stats by using points from the entire light-curve, yet trim the light-curve around the event and allow the \'finder/fitter\' to calculate a baseline mean from the immediately adjacent points.</p></body></html>"))
        self.calcStatsFromBaselineRegionsButton.setText(_translate("MainWindow", "Calc baseline mean/sigma/corr coeffs"))
        self.obsDurLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Enter the length of the observation (in seconds). This allow the User to see how the detectability limit event looks in the context of a typical observation duration. Typically, 120 seconds is used (2 minutes).</p><p>A simulated observation light curve will be plotted. If you want to save this lightcurve as a csv file, put a check mark in the <span style=\" font-weight:600; color:#0000ff;\">Write example to csv file</span> checkbox.</p></body></html>"))
        self.obsDurLabel.setText(_translate("MainWindow", "ObservationDur(secs):"))
        self.eventDurLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Enter the expected duration of the event in seconds (a duration of 1.5 times the predicted duration is recommended). </p></body></html>"))
        self.eventDurLabel.setText(_translate("MainWindow", "EventDur(secs):"))
        self.durStepLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>If this box contains 0 or is empty, a single detectability calculation and plot will be made for the <span style=\" font-weight:600; color:#0000ff;\">EventDur(secs)</span> entered.</p><p>If a non-zero entry is made in this edit box, a series of detectability calculations and plots will be made at ever shorter durations, decremented by the <span style=\" font-weight:600; color:#0000ff;\">duration step</span> entered, until the false-positive probability of the event becomes non-zero (greater than 0.0000).</p><p>The units here are seconds.</p></body></html>"))
        self.durStepLabel.setText(_translate("MainWindow", "  duration step:"))
        self.detectMagDropLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Enter the expected (predicted) magDrop as a positive number.</p></body></html>"))
        self.detectMagDropLabel.setText(_translate("MainWindow", "magDrop:"))
        self.calcDetectabilityButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>The use of this tool is to perform a \'detectability\' estimate. That estimate can be used to decide whether to attempt a future occultation observation or, to analyze an actual occultation observation to decide whether to report a <span style=\" color:#fc0107;\">\'miss\'</span><span style=\" color:#000000;\">,</span><span style=\" color:#fc0107;\"> \'qualified miss\'</span><span style=\" color:#000000;\">,</span>or <span style=\" color:#fc0107;\">\'no observation\'</span>. Do this as follows:</p><p>1) If PyOTE could not find an event in an actual occultation observation and this tool says the event was <span style=\" text-decoration: underline;\">detectable</span> at a duration as short as one data frame, report a <span style=\" color:#fc0107;\">\'miss\'</span><span style=\" color:#000000;\">.</span></p><p><span style=\" color:#000000;\">2) If PyOTE could not find an event in an actual occultation observation and this tool says the event was </span><span style=\" text-decoration: underline; color:#000000;\">detectable</span><span style=\" color:#000000;\"> at more than one data frame duration, then report a</span><span style=\" color:#fc0107;\"> \'qualified miss for a duration greater than the detectable limit\'</span><span style=\" color:#000000;\"> and a </span><span style=\" color:#fc0107;\">\'no observation\'</span><span style=\" color:#000000;\"> for a duration shorter than the detectable limit.</span></p><p><span style=\" color:#000000;\">3) If PyOTE could not find an event in actual occultation observation and the tool says the event was not detectable at a duration of more than 1.5 X the predicted duration, then report a </span><span style=\" color:#fc0107;\">\'no observation\'</span><span style=\" color:#000000;\">.</span></p><p><span style=\" color:#fc0107;\">Please keep in mind that this is a simulation using random numbers, so repeated calculations with the same duration and magDrop will naturally give slightly different answers.</span></p><p>The workflow for determining the detectability of a future event is as follows:</p><p>1. Make a video of the target star with at least a few hundred frames. The video needs to be long enough and under the anticipated observation conditions and camera settings to be used during the actual event so that a valid estimate of the expected intensity of the target star, the noise level, and the correlation coefficients of that noise during the actual event can be obtained.</p><p>2. Use PyMovie (or Tangra or LiMovie) to extract a light-curve from the video.</p><p>3. Read the light-curve into PyOTE, then click on pairs of points in the light-curve plot to designate those points that should be used for the needed intensity and noise calculations. Click the <span style=\" font-weight:600; color:#0000ff;\">Mark Baseline Region</span> button to record your selection. This step can be repeated multiple times to select disjoint sets of points.</p><p>4. Now click the <span style=\" font-weight:600; color:#0000ff;\">Calc baseline mean/sigma/corr coefs</span> button - this is what triggers the extraction of the needed intensity and noise data, a pre-requisite to performing the next step:<span style=\" font-weight:600; color:#0000ff;\"> Calc detectability</span>.</p><p>5. Before clicking the <span style=\" font-weight:600; color:#0000ff;\">Calc detectability</span> button, you must fill in the observation duration (<span style=\" font-weight:600; color:#0000ff;\">ObservationDur</span>) in seconds and the expected duration of the event (<span style=\" font-weight:600; color:#0000ff;\">EventDur</span>) in seconds.</p><p>6. If you want the calculator to iteratively find the smallest duration of a detectable event for you, set <span style=\" font-weight:600; color:#0000ff;\">duration step</span> to a non-zero value (in seconds).</p><p>6. Next, fill in the expected <span style=\" font-weight:600; color:#0000ff;\">magDrop</span> (a positive number).</p><p>7. Click the<span style=\" font-weight:600; color:#0000ff;\"> Calc detectability</span> button and, after a pause while 50,000 trial observations are computed, a False-Positive plot will appear. The position of the red vertical line relative to the black line tells the detectability story: if the red line is to right of the black line, the event has a high probabilty of being detected - if the red line is to the left of the black line it has a lower probability of detection, with that probablity decreasing as the black line moves more and more to the right (red) line. <span style=\" font-weight:600; color:#fc0107;\">Note:</span> the red line may not be visible on some computer displays due to resolution differences and so will appear off screen to the right. Resize the plot to make the red line visible in this case. </p><p>If the event (possibly a minimum event duration discovered during a search) was found to be detectable, a sample light-curve is displayed that shows an example observation with such an event included.</p><p>If the result was no detectable event, a False-Positive plot will be shown instead of the first duration that failed (red bar to left of black bar). The sequnce of detectability tests and the event duration where an event is determined to be undectable will be recorded in a separate .detectability.PYOTE.log file written in the occultation event folder.</p><p><br/></p></body></html>"))
        self.calcDetectabilityButton.setText(_translate("MainWindow", "Calc detectability"))
        self.writeExampleLightcurveCheckBox.setText(_translate("MainWindow", "Write example lightcurve to csv file"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_8), _translate("MainWindow", "Noise analysis/Detectability"))
        self.ne3ExplanationButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>This tab is provided for users of the RunCam Night Eagle 3 camera</p><p>The Night Eagle 3 is a <span style=\" color:#fc0107;\">rolling shutter CMOS camera</span>. As a result, with this camera, the timing of an occultation depends on which row the occulted star is at when the occultation occurs. PyOTE will automatically calculate the needed time correction from the y (row) position that you enter in the spin/entry box at the bottom of this tab.</p><p>For the Night Eagle 3, times extracted by PyOTE require only a VTI correction (if you use an IOTA VTI, there is no correction at all needed).</p><p>Note: if the recording was <span style=\" font-weight:600;\">not</span> made with a tracking telescope (so the target star is moving across the image), you will need to watch the video and record the row of the occultation for use in this program. Normally, with a tracking telescope, you will be able to use the y position of the \'target\' aperture directly. PyMovie includes this information in the comment lines of the csv file.</p><p>The Night Eagle 3 has a very effective noise reduction system called DNR (Dynamic Noise Reduction). There are 4 levels of noise reduction and you will need to indicate on this tab page what DNR setting your recording was made with.</p><p>The noise reduction is not without a small cost, however - the edges of an occultation light-curve will no longer be a step change. Instead, the edges will follow an exponential curve, approaching maximum and minimum intensities asymptotically. PyOTE has the ability to fit such an exponential curve to the D and R transitions, so the time resolution will be restored during the least squares fit of a \'theoretical\' exponential transition curve and you should feel free to use whatever level of noise reduction you may need. It is recommended that you run your NE3 at a gamma of 0.75 (1.0 gamma is not available) AND that you use PyMovie to linearize the recording (i.e., invert the 0.75 gamma curve of the camera).</p><p>The D and R exponential curves each have their own time constant, measured in frames, that control the frame rate of exponential curve growth. The default values provided are usually enough to allow a good fit to be found. <span style=\" color:#fc0107;\">PyOTE uses those values as the starting point for a least-squares search for better values. This usually works well, but it is possible that a starting value is too far from the correct value and the least-squares refinement process will find a local minimum that is visually wrong. In that case, you should change the starting value to something closer to \'correct\' and let the \'solver\' try again.</span></p><p>When the exponential curve fit algorithm is in use, the light-curve plot PyOTE displays will be changed. Gone is the blue \'camera response\' curve, replaced by brown dotted \'theoretical\' exponential edge curves that you can use to judge for yourself the goodness of a \'fit\'.</p><p><span style=\" color:#0000ff;\">When recording an an event video with the Night Eagle 3 camera, you can use any of the DNR settings, but make sure that your expected event duration is long enough that the D transition exponential curve has time to settle to the bottom plus some time to allow a good determination of the event bottom intensity. At </span><span style=\" font-weight:600; color:#fc0107;\">DNR:HIGH</span><span style=\" color:#0000ff;\">, your expected time should be greater than 30 frames (1 second) to use this setting. I suggest the following rules-of-thumb: use </span><span style=\" font-weight:600; color:#fc0107;\">DNR:LOW</span><span style=\" color:#0000ff;\"> for all recordings except when stars are at the limit of the camera are being observed, then use incrementally stronger levels of DNR to the point where the star is visible on-screen.</span></p></body></html>"))
        self.ne3ExplanationButton.setText(_translate("MainWindow", "Night Eagle 3  (explanation and help)"))
        self.ne3NotInUseRadioButton.setText(_translate("MainWindow", "Night Eagle 3 not in use"))
        self.dnrOffRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>The NE3, operating with a DNR setting of OFF does no noise reduction and there is no exponential transition zone for step changes of light. So, unlike the other DNR settings, there is no need for \'edge\' time constant values.</p></body></html>"))
        self.dnrOffRadioButton.setText(_translate("MainWindow", "DNR: Off"))
        self.dnrLowRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>The NE3 operating with an active DNR setting (i.e., other than OFF) reduces noise but also creates a light-curve that has exponential transitions (i.e., an asymptotic approach to the ultimate event or baseline intensity) at D and R edges in response to a step change in light. PyOTE will fit a \'theoretical\' exponential curve to the light-curve using a least-squares fit of the \'theoretical\' edge. This procedure utilizes the timing information that has been \'smeared\' across the transition region in such a way that timing resolution is restored.</p><p><span style=\" font-weight:600; color:#0000ff;\">Note: TC stands for time constant. It is measured in frames.</span></p><p><span style=\" color:#000000;\">The shape of the \'theoretical\' transition is governed by the time constant used at each edge. The TC values in the spin/entry boxes to the right give PyOTE starting values to use in a least-squares driven search for better TC values that will produce transition curves that better fit the observed values.</span></p><p><span style=\" color:#000000;\">It is possible that the starting TC value is too far from the \'correct\' values and the least-squares search routine, as a consequence, finds a local minimum that produces a visibly incorrect fit. In this case, change the starting value to something closer to \'correct\' and try again.</span></p></body></html>"))
        self.dnrLowRadioButton.setText(_translate("MainWindow", "DNR: Low"))
        self.dnrLowDtcLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrLowDtcLabel.setText(_translate("MainWindow", "TC:D edge"))
        self.dnrLowDspinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrLowRtcLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrLowRtcLabel.setText(_translate("MainWindow", "TC:R edge"))
        self.dnrLowRspinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrMiddleRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>The NE3 operating with an active DNR setting (i.e., other than OFF) reduces noise but also creates a light-curve that has exponential transitions (i.e., an asymptotic approach to the ultimate event or baseline intensity) at D and R edges in response to a step change in light. PyOTE will fit a \'theoretical\' exponential curve to the light-curve using a least-squares fit of the \'theoretical\' edge. This procedure utilizes the timing information that has been \'smeared\' across the transition region in such a way that timing resolution is restored.</p><p><span style=\" font-weight:600; color:#0000ff;\">Note: TC stands for time constant. It is measured in frames.</span></p><p><span style=\" color:#000000;\">The shape of the \'theoretical\' transition is governed by the time constant used at each edge. The TC values in the spin/entry boxes to the right give PyOTE starting values to use in a least-squares driven search for better TC values that will produce transition curves that better fit the observed values.</span></p><p><span style=\" color:#000000;\">It is possible that the starting TC value is too far from the \'correct\' values and the least-squares search routine, as a consequence, finds a local minimum that produces a visibly incorrect fit. In this case, change the starting value to something closer to \'correct\' and try again.</span></p></body></html>"))
        self.dnrMiddleRadioButton.setText(_translate("MainWindow", "DNR: Middle"))
        self.dnrMiddleDtcLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrMiddleDtcLabel.setText(_translate("MainWindow", "TC:D edge"))
        self.dnrMiddleDspinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrMiddleRtcLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrMiddleRtcLabel.setText(_translate("MainWindow", "TC:R edge"))
        self.dnrMiddleRspinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrHighRadioButton.setToolTip(_translate("MainWindow", "<html><head/><body><p>The NE3 operating with an active DNR setting (i.e., other than OFF) reduces noise but also creates a light-curve that has exponential transitions (i.e., an asymptotic approach to the ultimate event or baseline intensity) at D and R edges in response to a step change in light. PyOTE will fit a \'theoretical\' exponential curve to the light-curve using a least-squares fit of the \'theoretical\' edge. This procedure utilizes the timing information that has been \'smeared\' across the transition region in such a way that timing resolution is restored.</p><p><span style=\" font-weight:600; color:#0000ff;\">Note: TC stands for time constant. It is measured in frames.</span></p><p><span style=\" color:#000000;\">The shape of the \'theoretical\' transition is governed by the time constant used at each edge. The TC values in the spin/entry boxes to the right give PyOTE starting values to use in a least-squares driven search for better TC values that will produce transition curves that better fit the observed values.</span></p><p><span style=\" color:#000000;\">It is possible that the starting TC value is too far from the \'correct\' values and the least-squares search routine, as a consequence, finds a local minimum that produces a visibly incorrect fit. In this case, change the starting value to something closer to \'correct\' and try again.</span></p></body></html>"))
        self.dnrHighRadioButton.setText(_translate("MainWindow", "DNR: High"))
        self.dnrHighDtcLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrHighDtcLabel.setText(_translate("MainWindow", "TC:D edge"))
        self.dnrHighDspinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrHighRtcLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.dnrHighRtcLabel.setText(_translate("MainWindow", "TC:R edge"))
        self.dnrHighRspinBox.setToolTip(_translate("MainWindow", "<html><head/><body><p>This spin box provides the starting time constant value (TC) - it is given to PyOTE to be used during a least-squares search for a better value.</p><p>It sometimes happens that this initial value is too far from the \'correct\' value and the least-squares improvement algorithm will settle on a local minimum that is visually obviously wrong. In this case, change this starting value to something closer to \'correct\' and try again.</p></body></html>"))
        self.yPositionLabel.setToolTip(_translate("MainWindow", "<html><head/><body><p>Use this spin/entry box to enter the image row the target star was on when the occultation occured.</p><p>The Night Eagle 3 is a rolling shutter CMOS camera. As a result, with this camera, the timing of an occultation depends on which row the occulted star is at when the occultation occurs. PyOTE will automatically calculate the needed time correction from the y (row) position that you enter in this box.</p><p>For the Night Eagle 3, times extracted by PyOTE require only a VTI correction (if you use an IOTA VTI, there is no correction at all needed).</p><p>Note: if the recording was <span style=\" font-weight:600;\">not</span> made with a tracking telescope (so the targer star is moving across the image), you will need to watch the video and record the row of the occultation for use in this program. Normally, with a tracking telescope, you will be able to use the y position of the \'target\' aperture directly. PyMovie includes this information in the comment lines of the csv file.</p></body></html>"))
        self.yPositionLabel.setText(_translate("MainWindow", "y position of target star"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "Night Eagle 3"))
        self.helpLabelForDataGrid.setToolTip(_translate("MainWindow", "<html><head/><body><p>Clicking at the left-edge of a data line will cause the corresponding data point in the main display to be highlighted. Only one such point can be high-lighted at a time.</p><p>Clicking a point in the main data plot will cause this data grid to be positioned at that data point with the row shown in red. Clicking anywhere in this row will \'toggle\' the selection of that point, useful when the main data plot is very dense.</p></body></html>"))
        self.helpLabelForDataGrid.setText(_translate("MainWindow", "Right-click this label to get explanation of data grid below:"))
        self.table.setToolTip(_translate("MainWindow", "<html><head/><body><p><span style=\" font-size:18pt;\">The data displayed in this table is read from the input file. The Timestamp column in this table will be filled in in response to a successful Manual Timestamp Entry procedure. The results of smoothing and normalization are NOT reflected in this table. The results of a Block Integration ARE reflected in this table.  This policy allows this table to be used as the source when a user requests that a csv file be written, presumably to capture timestamps filled in by Manual Timestamp Entry and a possible Block Integration, thus speeding future re-analysis efforts.</span></p><p><span style=\" font-size:18pt;\">Clicking on a data row (at the extreme left) in this panel will cause the corresponding point to be highlighted in the light curve plot. The highlighted point is shown as a largish yellow dot with a red rim --- it may be hard to see/find, but look for it.</span></p><p><span style=\" font-size:18pt; font-weight:600;\">Clicking on a data cell in a row will select/deselect that point in the primary (dark blue) light curve plot. This is provided as an alternative method to clicking on points in the main light curve plot to select/deslect them.</span></p><p><span style=\" font-size:18pt;\">Note: Clicking on a point in the primary (dark blue) light curve will cause the data row for that point to be selected/positioned.</span></p></body></html>"))
from pyqtgraph import PlotWidget
