From bdee1776bddeb63338adbfb62de18b884af97085 Mon Sep 17 00:00:00 2001
From: Lan Dam <ldam@passcal.nmt.edu>
Date: Tue, 25 Apr 2023 13:04:23 -0600
Subject: [PATCH] Replot for TPS to apply colorange inside TPS only

---
 .../10 _ Change TPS Color Range.help.md       |  78 ++++++++++++++++++
 ...splay.help.md => 11 _ Gap Display.help.md} |   0
 documentation/images/tps/tps_color_range.png  | Bin 0 -> 18290 bytes
 sohstationviewer/database/soh.db              | Bin 61440 -> 61440 bytes
 .../plotting/time_power_squared_dialog.py     |  42 ++++++++--
 tests/test_database/test_extract_data.py      |   2 +-
 6 files changed, 113 insertions(+), 9 deletions(-)
 create mode 100644 documentation/10 _ Change TPS Color Range.help.md
 rename documentation/{10 _ Gap Display.help.md => 11 _ Gap Display.help.md} (100%)
 create mode 100644 documentation/images/tps/tps_color_range.png

diff --git a/documentation/10 _ Change TPS Color Range.help.md b/documentation/10 _ Change TPS Color Range.help.md
new file mode 100644
index 000000000..9dd01dbde
--- /dev/null
+++ b/documentation/10 _ Change TPS Color Range.help.md	
@@ -0,0 +1,78 @@
+# Change TPS Color Range
+
+<br />
+<br />
+<img alt="Change TPS Color Range" src="images/tps/tps_color_range.png" height="100" />
+<br />
+<br />
+
+---------------------------
+---------------------------
+
+## TPS plot
+The TPS plot shows the square root of the average of the sum of the squares of 
+the data amplitudes over each 5-minute period of each day covering the time 
+range of the data on the main display. Each horizontal line is one UT day.
+
+Each 5-minute block is color-coded according to the average amplitude 
+during the period.
+<br />
+
+## Selecting Color Range
+Select the desired color range from the dropdown list. There are 4 different 
+color ranges in the list: Antarctica, Low, Medium and High
+<br />
+
+**Antarctica**
+* Dark Grey/Black: there was no data for that period or the average really 
+was 0.0 (not likely)
+* Dark blue: the average was +/-10 counts
+* Cyan: +/-100 counts
+* Green: +/-1,000 counts
+* Yellow: +/-10,000 counts
+* Red: +/-100,000 counts
+* Magenta: +/-1,000,000 counts
+* Light Grey/White: > +/-1,000,000 counts
+<br />
+
+**Low**
+* Dark Grey/Black: there was no data for that period or the average 
+really was 0.0 (not likely)
+* Dark blue: the average was +/-20 counts
+* Cyan: +/-200 counts 
+* Green: +/-2,000 counts
+* Yellow: +/-20,000 counts
+* Red: +/-200,000 counts
+* Magenta: +/-2,000,000 counts
+* Light Grey/White: > +/-2,000,000 counts
+<br />
+
+**Medium**
+* Dark Grey/Black: there was no data for that period or the average really
+was 0.0 (not likely)
+* Dark blue: the average was +/-50 counts
+* Cyan: +/-500 counts
+* Green: +/-5,000 counts
+* Yellow: +/-50,000 counts
+* Red: +/-500,000 counts
+* Magenta: +/-5,000,000 counts
+* Light Grey/White: > +/-5,000,000 counts
+<br />
+
+**High**
+* Dark Grey/Black: there was no data for that period or the average really
+was 0.0 (not likely)
+* Dark blue: the average was +/-80 counts
+* Cyan: +/-800 counts
+* Green: +/-8,000 counts
+* Yellow: +/-80,000 counts 
+* Red: +/-800,000 counts
+* Magenta: +/-8,000,000 counts
+* Light Grey/White: > +/-8,000,000 counts
+
+<br />
+
+## Applying the selected Color Range
+Click button "RePlot" to re-plot TPS with new selected color range.
+
+<br />
diff --git a/documentation/10 _ Gap Display.help.md b/documentation/11 _ Gap Display.help.md
similarity index 100%
rename from documentation/10 _ Gap Display.help.md
rename to documentation/11 _ Gap Display.help.md
diff --git a/documentation/images/tps/tps_color_range.png b/documentation/images/tps/tps_color_range.png
new file mode 100644
index 0000000000000000000000000000000000000000..2cb04de38fcb8bf021bb478fe87af733fe888c45
GIT binary patch
literal 18290
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

literal 0
HcmV?d00001

diff --git a/sohstationviewer/database/soh.db b/sohstationviewer/database/soh.db
index 20da913532058a61b3717a6304197081d24bb4f1..e705fa6ba04f1b7c745e28769bc6dc5dccb82a53 100755
GIT binary patch
delta 181
zcmZp8z})bFd4e?K_K7mijN3OREY#=czsJDBe}aMk1OIdW6Z}^;3mWX;*W+SlmSprz
zP01|HHR51l7G?CvOwR~lU|`^6%uP)(VrOC&X7tG~7vW=MR%CSC{LOx<JWo}AmSJ&P
zdI?aK%tS|t&FkZX3V8W%0!=^1!2gN=A^)q*0tx&0wHX+=;D$2;6?0?&&E|mG!NLwP
QnTeNKk<)SW_xqdz0Ijt#tN;K2

delta 158
zcmZp8z})bFd4e?KmWeXXj9WG)EY#;`U|?Y3zrw)(f&V%GJ^m}31s5FQSK?q{7G=!H
zOwR~lXJ!^=%uP)(VrK#}a`MYX_!yZL851{uv!5!@Q;=+sm0^~W1vErvqNBv-_3=Rk
u5EE}Q@PFdJ$^VM~5zxew{Bj&n16kN1<}rh4pm9vR%!-_eo4?=Z6aWBb=PY*s

diff --git a/sohstationviewer/view/plotting/time_power_squared_dialog.py b/sohstationviewer/view/plotting/time_power_squared_dialog.py
index 33c71e076..8caef189b 100755
--- a/sohstationviewer/view/plotting/time_power_squared_dialog.py
+++ b/sohstationviewer/view/plotting/time_power_squared_dialog.py
@@ -87,6 +87,7 @@ class TimePowerSquaredWidget(plotting_widget.PlottingWidget):
         :param end_tm: requested end time to read
         """
         self.is_working = True
+        self.set_key = key
         self.plotting_data1 = d_obj.waveform_data[key]
 
         self.plotting_bot = const.BOTTOM
@@ -458,13 +459,28 @@ class TimePowerSquaredWidget(plotting_widget.PlottingWidget):
         for processor in self.tps_processors:
             processor.request_stop()
 
+    def replot(self):
+        """
+        Reuse tps_data calculated in the first plotting to replot
+        with new color range selected.
+        """
+        self.clear()
+        self.plotting_bot = const.BOTTOM
+        title = get_title(self.set_key, self.min_x, self.max_x, self.date_mode)
+        self.timestamp_bar_top = self.plotting_axes.add_timestamp_bar(0.)
+        self.plotting_axes.set_title(title, y=0, v_align='bottom')
+        for chan_id in self.plotting_data1:
+            c_data = self.plotting_data1[chan_id]
+            self.plot_channel(c_data, chan_id)
+        self.done()
+
 
 class TimePowerSquaredDialog(QtWidgets.QWidget):
     def __init__(self, parent):
         """
         Dialog to display time power square data for waveform channels. Users
-            are allowed to select different Color Ranges (antarctica, low,
-            medium, high) for differences values vs. colors map to draw
+            are allowed to select different Color Ranges (Antarctica, Low,
+            Medium and High) for differences values vs. colors map to draw
             time power square for each 5-minute data
 
         :param parent: QMainWindow/QWidget - the parent widget
@@ -503,8 +519,13 @@ class TimePowerSquaredDialog(QtWidgets.QWidget):
         bottom_layout.addSpacing(20)
         main_layout.addLayout(bottom_layout)
 
+        buttons_layout = QtWidgets.QVBoxLayout()
+        bottom_layout.addLayout(buttons_layout)
+
         # ################ Color range #################
-        bottom_layout.addWidget(QtWidgets.QLabel("Color Range"))
+        color_layout = QtWidgets.QHBoxLayout()
+        buttons_layout.addLayout(color_layout)
+        color_layout.addWidget(QtWidgets.QLabel("Color Range"))
 
         """
         color_def: [str,] -  list of color codes in order of values to be
@@ -521,7 +542,7 @@ class TimePowerSquaredDialog(QtWidgets.QWidget):
         self.sel_col_labels = []
         """
         color_ranges: [str,] - name of color:value map for user to choose
-            'antarctica'/'low'/'med'/'high'
+            'Antarctica'/'Low'/'Medium'/'High'
         all_square_counts: [[int,],] - time-power-squared values
         color_label: [str,] - labels that define count range for colors to show
             in the legend of the tps plotting widget
@@ -536,11 +557,15 @@ class TimePowerSquaredDialog(QtWidgets.QWidget):
         """
         self.color_range_choice = QtWidgets.QComboBox(self)
         self.color_range_choice.addItems(self.color_ranges)
-        self.color_range_choice.setCurrentText('high')
-        bottom_layout.addWidget(self.color_range_choice)
-        ################################################
+        self.color_range_choice.setCurrentText('High')
+        color_layout.addWidget(self.color_range_choice)
+        # ##################### Replot button ########################
+        self.replot_button = QtWidgets.QPushButton("RePlot", self)
+        buttons_layout.addWidget(self.replot_button)
+
+        # ##################### Save button ##########################
         self.save_button = QtWidgets.QPushButton('Save', self)
-        bottom_layout.addWidget(self.save_button)
+        buttons_layout.addWidget(self.save_button)
 
         self.info_text_browser.setFixedHeight(60)
         bottom_layout.addWidget(self.info_text_browser)
@@ -574,6 +599,7 @@ class TimePowerSquaredDialog(QtWidgets.QWidget):
         Connect functions to widgets
         """
         self.save_button.clicked.connect(self.save)
+        self.replot_button.clicked.connect(self.plotting_widget.replot)
         self.color_range_choice.currentTextChanged.connect(
             self.color_range_changed)
 
diff --git a/tests/test_database/test_extract_data.py b/tests/test_database/test_extract_data.py
index e8cd50781..64e7e1da1 100644
--- a/tests/test_database/test_extract_data.py
+++ b/tests/test_database/test_extract_data.py
@@ -165,7 +165,7 @@ class TestExtractData(unittest.TestCase):
         names, all_counts, all_display_strings = get_color_ranges()
         num_color_def = 7
 
-        expected_names = ['antarctica', 'low', 'med', 'high']
+        expected_names = ['Antarctica', 'Low', 'Medium', 'High']
         self.assertEqual(names, expected_names)
 
         # Check that each name correspond to a list of counts and list of
-- 
GitLab