diff --git a/gwhat/projet/manager_data.py b/gwhat/projet/manager_data.py index 4fc60e690..3f05b90b5 100644 --- a/gwhat/projet/manager_data.py +++ b/gwhat/projet/manager_data.py @@ -198,6 +198,7 @@ def wldataset_count(self): return len(self.projet.wldsets) def import_wldataset(self): + """Open a dialog window to import a water level dataset from a file.""" if self.projet is None: msg = ('Please first select a valid WHAT project or ' 'create a new one.') @@ -281,6 +282,7 @@ def wxdataset_count(self): return len(self.projet.wxdsets) def import_wxdataset(self): + """Open a dialog window to import a weather dataset from a file.""" if self.projet is None: msg = ("Please first select a valid project or create a new one.") btn = QMessageBox.Ok @@ -443,9 +445,9 @@ def __initUI__(self): "on how to format your input data files correctly." "" ) % (self._datatype.capitalize(), url_i) - self._msg = QLabel(msg) - self._msg.setVisible(False) - self._msg.setOpenExternalLinks(True) + self._error_lbl = QLabel(msg) + self._error_lbl.setVisible(False) + self._error_lbl.setOpenExternalLinks(True) # Select Dataset Layout @@ -458,10 +460,10 @@ def __initUI__(self): grp_dset.addWidget(self.directory, row, 1) grp_dset.addWidget(self.btn_browse, row, 3) row += 1 - grp_dset.addWidget(self._msg, row, 1, 1, 3) + grp_dset.addWidget(self._error_lbl, row, 1, 1, 3) grp_dset.setContentsMargins(0, 0, 0, 15) - grp_dset.setColumnStretch(2, 100) + grp_dset.setColumnStretch(1, 100) grp_dset.setVerticalSpacing(15) # ----- Station Info Groupbox @@ -539,6 +541,8 @@ def __initUI__(self): layout.addLayout(toolbar, 2, 0) layout.setRowMinimumHeight(3, 15) + layout.setRowStretch(10, 100) + layout.setColumnStretch(0, 100) def _add_info_field(self, label, widget): """Add a new field to the Station Info group box.""" @@ -624,9 +628,8 @@ def load_dataset(self, filename): # Load the Data : QApplication.setOverrideCursor(Qt.WaitCursor) - msg = 'Loading %s data...' % self._datatype - print(msg) - self.ConsoleSignal.emit('%s' % msg) + self.ConsoleSignal.emit( + "Loading %s data..." % self._datatype) for i in range(5): QCoreApplication.processEvents() @@ -678,7 +681,7 @@ def update_gui(self, filename=None): dsetname = dsetname.replace(char, '_') self._dset_name.setText(dsetname) - self._msg.setVisible( + self._error_lbl.setVisible( self._dataset is None and self.directory.text() != '') self.btn_ok.setEnabled(self._dataset is not None) self.grp_info.setEnabled(self._dataset is not None) @@ -742,11 +745,6 @@ def close(self): self.directory.clear() self.update_gui() - def show(self): - """Qt method override.""" - super(NewDatasetDialog, self).show() - self.setFixedSize(self.size()) - class ExportWeatherButton(QToolButtonBase): """ diff --git a/gwhat/projet/reader_waterlvl.py b/gwhat/projet/reader_waterlvl.py index 7e4776953..3ca0a5ac1 100644 --- a/gwhat/projet/reader_waterlvl.py +++ b/gwhat/projet/reader_waterlvl.py @@ -21,15 +21,32 @@ # ---- Read and Load Water Level Datafiles -def read_water_level_datafile(filename): - """Load a water level dataset from a csv or Excel file.""" +def open_water_level_datafile(filename): + """Open a water level data file and return the data.""" root, ext = os.path.splitext(filename) if ext not in FILE_EXTS: - print("ERROR: supported file format are: ", FILE_EXTS) - return None + raise ValueError("Supported file format are: ", FILE_EXTS) else: print('Loading waterlvl time-series from %s file...' % ext[1:]) + if ext == '.csv': + with open(filename, 'r', encoding='utf8') as f: + data = list(csv.reader(f, delimiter=',')) + elif ext in ['.xls', '.xlsx']: + with xlrd.open_workbook(filename, on_demand=True) as wb: + sheet = wb.sheet_by_index(0) + data = [sheet.row_values(rowx, start_colx=0, end_colx=None) for + rowx in range(sheet.nrows)] + + return data + + +def read_water_level_datafile(filename): + """Load a water level dataset from a csv or Excel file.""" + data = open_water_level_datafile(filename) + if data is None: + return None + df = {'filename': filename, 'Well': '', 'Well ID': '', @@ -43,20 +60,12 @@ def read_water_level_datafile(filename): 'BP': np.array([]), 'ET': np.array([])} - if ext == '.csv': - with open(filename, 'r', encoding='utf8') as f: - data = list(csv.reader(f, delimiter=',')) - elif ext in ['.xls', '.xlsx']: - with xlrd.open_workbook(filename, on_demand=True) as wb: - sheet = wb.sheet_by_index(0) - data = [sheet.row_values(rowx, start_colx=0, end_colx=None) for - rowx in range(sheet.nrows)] - # ---- Read the Header for row, line in enumerate(data): if len(line) == 0: continue + try: label = line[0].lower().replace(":", "").replace("=", "").strip() except AttributeError: @@ -110,12 +119,17 @@ def read_water_level_datafile(filename): df['Time'] = data[:, 0].astype(float) df['WL'] = data[:, 1].astype(float) except ValueError: - print('ERROR: The water level datafile is not formatted correctly') + print('The water level datafile is not formatted correctly') return None else: print('Waterlvl time-series for well %s loaded successfully.' % df['Well']) + # The data are not monotically increasing in time. + if np.min(np.diff(df['Time'])) <= 0: + print("The data are not monotically increasing in time.") + return None + # Read the barometric data try: @@ -139,9 +153,6 @@ def read_water_level_datafile(filename): return df -# ============================================================================= - - def make_waterlvl_continuous(t, wl): # This method produce a continuous daily water level time series. # Missing data are filled with nan values.