Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PR: Improve how the BRF period is set and plotted #240

Merged
merged 44 commits into from
Dec 20, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
57ebff0
Rename self._datastart to self.date_start_edit
jnsebgosselin Dec 18, 2018
db666d1
Rename self._dataend to self.date_end_edit
jnsebgosselin Dec 18, 2018
0e23213
Add a missing docstring to set_datarange
jnsebgosselin Dec 18, 2018
e72bc4d
Add qdate_from_xldate in utils/date.py
jnsebgosselin Dec 18, 2018
c51ec5a
Add test_qdate_from_xldate
jnsebgosselin Dec 18, 2018
04ad666
Update copyright notice
jnsebgosselin Dec 18, 2018
725c0fe
Remove blank
jnsebgosselin Dec 18, 2018
a280a1e
Rename select_BRF to select_brf_period
jnsebgosselin Dec 18, 2018
644d73c
Rename plot_BRFperiod to plot_brf_period
jnsebgosselin Dec 18, 2018
2ff843b
make_brf_period_valid when setting wldset
jnsebgosselin Dec 18, 2018
ac6409e
Use new utils function qdate_from_xldate
jnsebgosselin Dec 18, 2018
aa055b7
Don't set date_range when switching wldset
jnsebgosselin Dec 18, 2018
c6b6786
Move test_brf_mod to the brf module
jnsebgosselin Dec 19, 2018
1418656
Refactoring of the tests for the BRF mod
jnsebgosselin Dec 19, 2018
1a2d4a9
Simplify requirements
jnsebgosselin Dec 19, 2018
71960cf
Refactoring brf period setter/getter
jnsebgosselin Dec 19, 2018
40d8e0a
Add get/save brf period in wldset object
jnsebgosselin Dec 19, 2018
b53141a
Add missing dosctrings
jnsebgosselin Dec 19, 2018
c9056dd
Rename get_brfAt to get_brfname_at
jnsebgosselin Dec 19, 2018
bdfbcc5
Add a missing method docstring
jnsebgosselin Dec 19, 2018
4c75e3c
Remove blanks
jnsebgosselin Dec 19, 2018
92297d2
Clean unused imports
jnsebgosselin Dec 19, 2018
b68ba13
Rename all brf_period to brfperiod
jnsebgosselin Dec 19, 2018
7423555
Refactoring to use one period per dset
jnsebgosselin Dec 19, 2018
fcec1c1
Minor codestyle changes
jnsebgosselin Dec 19, 2018
bb23e67
Show brf period only when tool is visible
jnsebgosselin Dec 19, 2018
8adb25c
... complete last commit
jnsebgosselin Dec 19, 2018
cf2bf0c
Fix test_install_kgs_brf
jnsebgosselin Dec 19, 2018
577cab2
Emit brfperiod signal
jnsebgosselin Dec 19, 2018
f213b94
Make brfperiod a list instead of tuple
jnsebgosselin Dec 19, 2018
fcaae3b
Untoggle brf period selection
jnsebgosselin Dec 19, 2018
7abf30b
Handle when brf selection is cancelled
jnsebgosselin Dec 19, 2018
d4ceee7
Reduce datafile size and save as csv
jnsebgosselin Dec 19, 2018
8bd0549
Flush to file after saving brfperiod
jnsebgosselin Dec 20, 2018
d024f7b
Remove superflux logic
jnsebgosselin Dec 20, 2018
99e1327
Save brf period when widget value change
jnsebgosselin Dec 20, 2018
df4ee46
Add tooltip to self.btn_seldata
jnsebgosselin Dec 20, 2018
2dc48b1
Rename __init_figure__ to _setup_mpl_canvas
jnsebgosselin Dec 20, 2018
10bfdca
Use OnOffToolButton for self.btn_seldata
jnsebgosselin Dec 20, 2018
cc9a586
Refactoring of toggle_brfperiod_selection
jnsebgosselin Dec 20, 2018
b4d4b35
set_daterange refactoring
jnsebgosselin Dec 20, 2018
5a5029c
Connect sig_brfperiod_changed again
jnsebgosselin Dec 20, 2018
b30674a
Skip test_worker_updates on Travis
jnsebgosselin Dec 20, 2018
396e389
Sort values when setting the brfperiod
jnsebgosselin Dec 20, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 74 additions & 62 deletions gwhat/HydroCalc2.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,12 +66,17 @@ def __init__(self, datamanager, parent=None):
self.dmngr.wxdsetChanged.connect(self.set_wxdset)
self.dmngr.sig_workdir_changed.connect(self.set_dialog_dir)

# Setup recharge calculation tool.
self.rechg_eval_widget = RechgEvalWidget(parent=self)
self.rechg_eval_widget.sig_new_gluedf.connect(self.draw_glue_wl)

# Setup BRF calculation tool.
self.brf_eval_widget = BRFManager(parent=self)
self.brf_eval_widget.btn_seldata.clicked.connect(
self.aToolbarBtn_isClicked)
self.brf_eval_widget.sig_brfperiod_changed.connect(self.set_brfperiod)
self.brf_eval_widget.btn_seldata.sig_value_changed.connect(
lambda: self.toggle_brfperiod_selection(
self.brf_eval_widget.btn_seldata.value())
)

self.__figbckground = None
self.__addPeakVisible = True
Expand Down Expand Up @@ -99,26 +104,24 @@ def __init__(self, datamanager, parent=None):
self.peak_memory = [np.array([]).astype(int)]

# Barometric Response Function :

self.brfperiod = [None, None]
self.__brfcount = 0
self.selected_brfperiod = [None, None]
self._select_brfperiod_flag = False

# Soil Profiles :

self.soilFilename = []
self.SOILPROFIL = SoilProfil()

# ---- Initialize the GUI

self.precip_bwidth = 7
self.__init_figure__()
self._setup_mpl_canvas()
self.__initUI__()
self.btn_pan.setValue(True)
self.setup_ax_margins(None)
self.set_wldset(self.dmngr.get_current_wldset())
self.set_wxdset(self.dmngr.get_current_wxdset())

def __init_figure__(self):
def _setup_mpl_canvas(self):

# ---- Setup the canvas

Expand Down Expand Up @@ -422,6 +425,9 @@ def __initUI__(self):
2, ("<p>A tool to evaluate the barometric response function of"
" the well.</p>"))

tooltab.currentChanged.connect(
lambda: self.toggle_brfperiod_selection(False))

# ---- Right Panel

self.right_panel = myqt.QFrameLayout()
Expand Down Expand Up @@ -461,16 +467,19 @@ def wxdset(self):

def set_wldset(self, wldset):
"""Set the namespace for the water level dataset."""
self.brf_eval_widget.set_wldset(wldset)
self.rechg_eval_widget.set_wldset(wldset)
self.mrc_eval_widget.setEnabled(self.wldset is not None)

if wldset is None:
self.water_lvl = np.array([])
self.time = np.array([])
else:
self.water_lvl = wldset['WL']
self.time = wldset['Time']
self.rechg_eval_widget.set_wldset(wldset)
self.mrc_eval_widget.setEnabled(self.wldset is not None)

# Setup BRF widget.
self.brf_eval_widget.set_wldset(wldset)
self.set_brfperiod(self.brf_eval_widget.get_brfperiod())

self.setup_hydrograph()
self.toolbar.update()
self.load_mrc_from_wldset()
Expand Down Expand Up @@ -569,42 +578,54 @@ def btn_mrc2rechg_isClicked(self):
self.SOILPROFIL.zlayer, self.SOILPROFIL.Sy)

# ---- BRF handlers
def set_brfperiod(self, period):
"""Set and plot the value of the BRF calculation period."""
self.selected_brfperiod = period
self.plot_brfperiod()

def plot_BRFperiod(self):
if self.brfperiod[0]:
x = self.brfperiod[0] + self.dt4xls2mpl*self.dformat
self.h_brf1.set_xdata(x)
self.h_brf1.set_visible(True)
else:
self.h_brf1.set_visible(False)

if self.brfperiod[1]:
x = self.brfperiod[1] + self.dt4xls2mpl*self.dformat
self.h_brf2.set_xdata(x)
self.h_brf2.set_visible(True)
else:
self.h_brf2.set_visible(False)

def plot_brfperiod(self):
"""
Plot on the graph the vertical lines that are used to define the period
over which the BRF is evaluated.
"""
period = (self.selected_brfperiod if
self.brf_eval_widget.isVisible() else [None, None])
for x, vline in zip(period, [self.h_brf1, self.h_brf2]):
vline.set_visible(x is not None)
if x is not None:
x = x + self.dt4xls2mpl*self.dformat
vline.set_xdata(x)
self.draw()

def select_BRF(self):
def toggle_brfperiod_selection(self, value):
"""
Handle when the button to select a period to compute the BRF is
clicked.
Toggle on or off the option to select the BRF calculation period on
the graph.
"""
btn = self.brf_eval_widget.btn_seldata
btn.setAutoRaise(not btn.autoRaise())
if btn.autoRaise() is False:
self.brfperiod = [None, None]
self.plot_BRFperiod()
if self.wldset is None:
self._select_brfperiod_flag = False
self.brf_eval_widget.btn_seldata.setValue(False, silent=True)
if value is True:
self.emit_warning("Please import a valid water "
"level dataset first.")
return

self.brf_eval_widget.btn_seldata.setValue(value, silent=True)
self._select_brfperiod_flag = value
if value is True:
self.btn_addpeak.setValue(False)
self.btn_delpeak.setValue(False)
self.btn_zoom_to_rect.setValue(False)
self.btn_pan.setValue(False)
self.selected_brfperiod = [None, None]
elif value is False:
if not all(self.selected_brfperiod):
# The selection of the BRF calculation period was cancelled,
# we reset the period to its previous value.
self.selected_brfperiod = self.brf_eval_widget.get_brfperiod()
self.plot_brfperiod()

# ---- Peaks handlers

def find_peak(self):

n_j, n_add = local_extrema(self.water_lvl, 4 * 5)
Expand Down Expand Up @@ -632,9 +653,7 @@ def btn_addpeak_isclicked(self):
self.btn_delpeak.setValue(False)
self.btn_pan.setValue(False)
self.btn_zoom_to_rect.setValue(False)
self.brf_eval_widget.btn_seldata.setAutoRaise(True)
self.brfperiod = [None, None]
self.__brfcount = 0
self.toggle_brfperiod_selection(False)
self.draw()

def btn_delpeak_isclicked(self):
Expand All @@ -644,9 +663,7 @@ def btn_delpeak_isclicked(self):
self.btn_addpeak.setValue(False)
self.btn_pan.setValue(False)
self.btn_zoom_to_rect.setValue(False)
self.brf_eval_widget.btn_seldata.setAutoRaise(True)
self.brfperiod = [None, None]
self.__brfcount = 0
self.toggle_brfperiod_selection(False)
self.draw()

def clear_all_peaks(self):
Expand All @@ -668,8 +685,6 @@ def aToolbarBtn_isClicked(self):
sender = self.sender()
if sender == self.btn_MRCalc:
self.btn_MRCalc_isClicked()
elif sender == self.brf_eval_widget.btn_seldata:
self.select_BRF()

@property
def zoom_is_active(self):
Expand All @@ -683,7 +698,7 @@ def zoom_is_active_changed(self, zoom_is_active):
self.btn_pan.setValue(False)
self.btn_delpeak.setValue(False)
self.btn_addpeak.setValue(False)
self.brf_eval_widget.btn_seldata.setAutoRaise(True)
self.toggle_brfperiod_selection(False)
if self.toolbar._active is None:
self.toolbar.zoom()
else:
Expand All @@ -702,7 +717,7 @@ def pan_is_active_changed(self, pan_is_active):
self.btn_zoom_to_rect.setValue(False)
self.btn_delpeak.setValue(False)
self.btn_addpeak.setValue(False)
self.brf_eval_widget.btn_seldata.setAutoRaise(True)
self.toggle_brfperiod_selection(False)
if self.toolbar._active is None:
self.toolbar.pan()
else:
Expand Down Expand Up @@ -1301,27 +1316,24 @@ def onclick(self, event):

self.__addPeakVisible = False
self.draw()
elif not self.brf_eval_widget.btn_seldata.autoRaise():
# Select the BRF period.
elif self.brf_eval_widget.btn_seldata.value() is True:
# Select the BRF calculation period.
xclic = event.xdata
if xclic is None:
return
x = self.time + self.dt4xls2mpl*self.dformat
y = self.water_lvl

d = np.abs(xclic - x)
indx = np.argmin(d)
self.brfperiod[self.__brfcount] = self.time[indx]
if self.__brfcount == 0:
self.__brfcount += 1
self.plot_BRFperiod()
elif self.__brfcount == 1:
self.__brfcount = 0
self.select_BRF()
self.plot_BRFperiod()
self.brf_eval_widget.set_datarange(self.brfperiod)
xclic = xclic - self.dt4xls2mpl*self.dformat
argmin = np.argmin(np.abs(xclic - self.time))
i = 0 if self.selected_brfperiod[0] is None else 1
self.selected_brfperiod[i] = self.time[argmin]

if all(self.selected_brfperiod):
# Toggle off the selection of the BRF evaluation period and
# send the values to the BRF eval widget.
self.brf_eval_widget.set_brfperiod(self.selected_brfperiod)
self.toggle_brfperiod_selection(False)
else:
raise ValueError('Something is wrong in the code')
self.plot_brfperiod()
else:
self.draw()

Expand Down
Loading