def set_CN(self): props = [] for i in range(0, len(CurveNumberInfiltration.metadata)): if "subcatch" in CurveNumberInfiltration.metadata[i].label.lower(): continue elif "conduct" in CurveNumberInfiltration.metadata[i].label.lower(): continue else: props.append(CurveNumberInfiltration.metadata[i].label) self.tblGeneric.setRowCount(len(props)) self.tblGeneric.setVerticalHeaderLabels(props) #self.infil_model = CurveNumberInfiltration() for i in range(0, self.tblGeneric.rowCount()): vtitle = self.tblGeneric.verticalHeaderItem(i).text().lower() if "curve" in vtitle: val, val_is_good = ParseData.floatTryParse(self.defaults.infil_model_cn.curve_number) if val_is_good: self.tblGeneric.setItem(i,0, QtGui.QTableWidgetItem(unicode(val))) else: self.tblGeneric.setItem(i,0, QtGui.QTableWidgetItem(unicode(self.defaults.infil_model_cn.default_CN()))) elif "dry" in vtitle: val, val_is_good = ParseData.floatTryParse(self.defaults.infil_model_cn.dry_days) if val_is_good: self.tblGeneric.setItem(i,0, QtGui.QTableWidgetItem(unicode(val))) else: self.tblGeneric.setItem(i,0, QtGui.QTableWidgetItem(unicode(self.defaults.infil_model_cn.default_dry_time())))
def GetData(self): """ construct pandas time series from grid data Returns: """ del self.X[:] #datetime del self.Y[:] #value self.hour_only = True if self.tblTime.item(0, 0): if self.tblTime.item(0, 0).text(): self.hour_only = False n = 0 ldate = "" ltime = "" for row in range(self.tblTime.rowCount()): if self.tblTime.item(row, 2): y_val, y_val_good = ParseData.floatTryParse( self.tblTime.item(row, 2).text()) if y_val_good: # as long as the value is good, then start parsing time stamp self.Y.append(y_val) if self.tblTime.item(row, 0): if self.tblTime.item(row, 0).text(): ldate = self.tblTime.item(row, 0).text() if self.tblTime.item(row, 1): ltime, ltime_good = ParseData.floatTryParse( self.tblTime.item(row, 1).text()) if ltime_good: if self.tblTime.item(row, 1).text(): ltime = self.tblTime.item(row, 1).text() if self.hour_only: if ":" in ltime: arr = ltime.split(":") hr = 0 mm = 0 ss = 0 if len(arr) > 0: hr = int(arr[0]) if len(arr) > 1: mm = int(arr[1]) if len(arr) > 2: ss = int(arr[2]) stamp = hr + mm / 60.0 + ss / 3600.0 else: # if not in H:M format, then it is just fraction hours from beginning stamp = float(ltime) else: stamp = pd.Timestamp(ldate + " " + ltime) self.X.append(stamp) n += 1 else: return n return n
def GetData(self): n = 0 for row in range(self.tblMult.rowCount()): if self.tblMult.item(row,0) and self.tblMult.item(row,1): x_val, x_val_good = ParseData.floatTryParse(self.tblMult.item(row, 0).text()) y_val, y_val_good = ParseData.floatTryParse(self.tblMult.item(row, 1).text()) if x_val_good and y_val_good: if row + 1 >= self.MAXPOINTS: break else: self.X[row + 1] = x_val self.Y[row + 1] = y_val n += 1 else: return n return n
def tbl_3_changed(self, row, col): if not self.loaded: return if self.tbl_3.verticalHeaderItem(row) is None: return item = self.tbl_3.item(row, col) if item is None: return key = self.tbl_3.verticalHeaderItem(row).text() if "flow units" in key.lower() or \ "headloss" in key.lower() or \ "unbalanced" in key.lower() or \ "status report" in key.lower(): # do nothing pass elif "maximum trials" in key.lower() or \ "default pattern" in key.lower() or \ "check freq" in key.lower() or \ "max check" in key.lower(): val, val_is_good = ParseData.intTryParse(item.text()) if val_is_good: self.defaults.parameters_values[key] = val else: val, val_is_good = ParseData.floatTryParse(item.text()) if val_is_good: self.defaults.parameters_values[key] = val self.parameter_changed = True pass
def GetData(self): # construct pandas time series from grid data del self.X[:] del self.Y[:] n = 0 for row in range(self.tblMult.rowCount()): if self.tblMult.item(row, 1): y_val, y_val_good = ParseData.floatTryParse( self.tblMult.item(row, 1).text()) x_val, x_val_good = ParseData.floatTryParse( self.tblMult.item(row, 0).text()) if y_val_good and x_val_good: # as long as the values are good self.Y.append(y_val) self.X.append(x_val) n += 1 else: return n return n
def load_curve_data(self): directory = self._main_form.program_settings.value("DataDir", "") file_name, ftype = QFileDialog.getOpenFileName(self, "Open Curve Data File", directory, "Curve Files (*.dat)") if os.path.exists(file_name): self._main_form.program_settings.setValue( "DataDir", os.path.dirname(file_name)) self._main_form.program_settings.sync() if file_name: with open(file_name, "r") as open_file: lines = open_file.readlines() if len(lines) > 1: a = lines[1].split() self.txtDescription.setText(a[len(a) - 1]) if len(lines) > 2: curve_xy = [] for i in range(2, len(lines)): try: x, y = lines[i].split() xval, xval_is_good = ParseData.floatTryParse(x) yval, yval_is_good = ParseData.floatTryParse(y) if xval_is_good and yval_is_good: curve_xy.append((x, y)) point_count = -1 for point in curve_xy: point_count += 1 led = QLineEdit(str(point[0])) self.tblMult.setItem(point_count, 0, QTableWidgetItem(led.text())) led = QLineEdit(str(point[1])) self.tblMult.setItem(point_count, 1, QTableWidgetItem(led.text())) pass except Exception as ex: pass
def tbl_2_changed(self, row, col): if not self.loaded: return if self.tbl_2.verticalHeaderItem(row) is None: return item = self.tbl_2.item(row, col) if item is None: return key = self.tbl_2.verticalHeaderItem(row).text() if "infiltration model" in key.lower(): self.defaults.properties_sub_values[key] = item.currentText() else: val, val_is_good = ParseData.floatTryParse(item.text()) if val_is_good: self.defaults.properties_sub_values[key] = val self.property_sub_changed = True pass
def cmdOK_Clicked(self): section = self._main_form.project.options.dates orig_start_date = section.start_date orig_start_time = section.start_time orig_report_start_date = section.report_start_date orig_report_start_time = section.report_start_time orig_end_date = section.end_date orig_end_time = section.end_time orig_sweep_end = section.sweep_end orig_sweep_start = section.sweep_start orig_dry_days = section.dry_days section.start_date = self.dedStart.date().toString(section.DATE_FORMAT) section.start_time = self.tmeStart.time().toString(section.TIME_FORMAT) section.report_start_date = self.dedStartReport.date().toString( section.DATE_FORMAT) section.report_start_time = self.tmeReport.time().toString( section.TIME_FORMAT) section.end_date = self.dedEnd.date().toString(section.DATE_FORMAT) section.end_time = self.tmeEnd.time().toString(section.TIME_FORMAT) section.sweep_end = self.dedSweepEnd.date().toString( section.DATE_SWEEP_FORMAT) section.sweep_start = self.dedSweepStart.date().toString( section.DATE_SWEEP_FORMAT) val, val_is_good = ParseData.floatTryParse(self.txtAntecedent.text()) if val_is_good and val >= 0: section.dry_days = val if orig_start_date != section.start_date or \ orig_start_time != section.start_time or \ orig_report_start_date != section.report_start_date or \ orig_report_start_time != section.report_start_time or \ orig_end_date != section.end_date or \ orig_end_time != section.end_time or \ orig_sweep_end != section.sweep_end or \ orig_sweep_start != section.sweep_start or \ orig_dry_days != section.dry_days: self._main_form.mark_project_as_unsaved() self._main_form.program_settings.setValue( "Geometry/" + "frmDates_geometry", self.saveGeometry()) self._main_form.program_settings.setValue( "Geometry/" + "frmDates_state", self.saveState()) self.close()
def cmdOK_Clicked(self): section = self._main_form.project.options.dates section.start_date = self.dedStart.date().toString(section.DATE_FORMAT) section.start_time = self.tmeStart.time().toString(section.TIME_FORMAT) section.report_start_date = self.dedStartReport.date().toString( section.DATE_FORMAT) section.report_start_time = self.tmeReport.time().toString( section.TIME_FORMAT) section.end_date = self.dedEnd.date().toString(section.DATE_FORMAT) section.end_time = self.tmeEnd.time().toString(section.TIME_FORMAT) section.sweep_end = self.dedSweepEnd.date().toString( section.DATE_SWEEP_FORMAT) section.sweep_start = self.dedSweepStart.date().toString( section.DATE_SWEEP_FORMAT) val, val_is_good = ParseData.floatTryParse(self.txtAntecedent.text()) if val_is_good and val >= 0: section.dry_days = val self.close()
def tbl_3_changed(self, row, col): if not self.loaded: return if self.tbl_3.verticalHeaderItem(row) is None: return item = self.tbl_3.item(row, col) if item is None: return key = self.tbl_3.verticalHeaderItem(row).text() if "flow units" in key.lower() or \ "link offsets" in key.lower() or \ "routing" in key.lower() or \ "force main" in key.lower(): # do nothing pass elif "conduit geometry" in key.lower(): #self.defaults.xsection.shape = CrossSection[item.text()] pass else: val, val_is_good = ParseData.floatTryParse(item.text()) if val_is_good: self.defaults.parameters_values[key] = val self.parameter_changed = True pass
def table_itemChanged(self, item): if self.tblGeneric.currentItem() is None: return new_val, new_val_is_good = ParseData.floatTryParse(self.tblGeneric.currentItem().text()) if not new_val_is_good: return vtitle = self.tblGeneric.verticalHeaderItem(self.tblGeneric.currentRow()).text() attr_name = "" for i in range(0, len(self.meta)): if self.meta[i].label == vtitle: attr_name = self.meta[i].attribute break if len(attr_name) == 0: return enum_val = E_InfilModel[self.cboInfilModel.currentText().upper()] if enum_val == E_InfilModel.MODIFIED_HORTON: self.defaults.infil_model_horton.__dict__[attr_name] = new_val elif enum_val == E_InfilModel.MODIFIED_GREEN_AMPT: self.defaults.infil_model_ga.__dict__[attr_name] = new_val elif enum_val == E_InfilModel.CURVE_NUMBER: self.defaults.infil_model_cn.__dict__[attr_name] = new_val pass
def set_all(self, project): evap_section = project.evaporation # "Constant Value","Time Series","Climate File","Monthly Averages","Temperatures" self.evap_pan_list = evap_section.monthly_pan_coefficients self.evap_monthly_list = evap_section.monthly if evap_section.format == EvaporationFormat.UNSET: self.cboEvap.setCurrentIndex(0) self.cboEvap_currentIndexChanged(0) elif evap_section.format == EvaporationFormat.CONSTANT: self.cboEvap.setCurrentIndex(0) self.cboEvap_currentIndexChanged(0) elif evap_section.format == EvaporationFormat.MONTHLY: self.cboEvap.setCurrentIndex(3) self.cboEvap_currentIndexChanged(3) elif evap_section.format == EvaporationFormat.TIMESERIES: self.cboEvap.setCurrentIndex(1) self.cboEvap_currentIndexChanged(1) elif evap_section.format == EvaporationFormat.TEMPERATURE: self.cboEvap.setCurrentIndex(4) self.cboEvap_currentIndexChanged(4) elif evap_section.format == EvaporationFormat.FILE: self.cboEvap.setCurrentIndex(2) self.cboEvap_currentIndexChanged(2) if evap_section.constant == '': evap_section.constant = 0.0 self.txtDaily.setText(str(evap_section.constant)) self.cbxDry.setChecked(evap_section.dry_only) time_series_section = project.find_section("TIMESERIES") time_series_list = time_series_section.value[0:] self.cboEvapTs.clear() selected_index = 0 for value in time_series_list: self.cboEvapTs.addItem(value.name) if value.name == evap_section.timeseries: selected_index = int(self.cboEvapTs.count()) - 1 self.cboEvapTs.setCurrentIndex(selected_index) pattern_section = project.find_section("PATTERNS") pattern_list = pattern_section.value[0:] self.cboMonthly.clear() self.cboMonthly.addItem("") selected_index = 0 previous_pattern = "" for value in pattern_list: if value.name and value.name != previous_pattern: self.cboMonthly.addItem(value.name) previous_pattern = value.name if value.name == evap_section.recovery_pattern: selected_index = int(self.cboMonthly.count()) - 1 self.cboMonthly.setCurrentIndex(selected_index) temp_section = project.temperature if temp_section.source == TemperatureSource.UNSET: self.rbnTimeseries.setChecked(False) self.rbnExternal.setChecked(False) self.rbnNoData.setChecked(True) elif temp_section.source == TemperatureSource.TIMESERIES and temp_section.timeseries: self.rbnTimeseries.setChecked(True) self.rbnExternal.setChecked(False) self.rbnNoData.setChecked(False) elif temp_section.source == TemperatureSource.FILE: self.rbnTimeseries.setChecked(False) self.rbnExternal.setChecked(True) self.rbnNoData.setChecked(False) else: self.rbnTimeseries.setChecked(False) self.rbnExternal.setChecked(False) self.rbnNoData.setChecked(True) time_series_section = project.timeseries time_series_list = time_series_section.value[0:] self.cboTimeSeries.clear() self.cboTimeSeries.addItem('') selected_index = 0 for value in time_series_list: self.cboTimeSeries.addItem(value.name) if value.name == temp_section.timeseries: selected_index = self.cboTimeSeries.count() self.cboTimeSeries.setCurrentIndex(selected_index) self.txtClimate.setText(temp_section.filename) self.dedStart.setDate( QtCore.QDate.fromString(temp_section.start_date, "MM/dd/yyyy")) if temp_section.start_date: self.cbxStart.setChecked(True) # wind speed tab if temp_section.wind_speed.source == WindSource.MONTHLY: self.rbnMonthly.setChecked(True) monthly_list = temp_section.wind_speed.wind_speed_monthly point_count = -1 for value in monthly_list: point_count += 1 led = QtGui.QLineEdit(str(value)) self.tblWind.setItem(0, point_count, QtGui.QTableWidgetItem(led.text())) elif temp_section.wind_speed.source == WindSource.FILE: self.rbnUseClimate.setChecked(True) # snow melt tab val, val_is_good = ParseData.floatTryParse( temp_section.snow_melt.snow_temp) if not val_is_good: val = 34 self.txtSnowDivide.setText(str(val)) self.txtSnowATI.setText(str(temp_section.snow_melt.ati_weight)) self.txtSnowMelt.setText( str(temp_section.snow_melt.negative_melt_ratio)) self.txtSnowElevation.setText(str(temp_section.snow_melt.elevation)) val, val_is_good = ParseData.floatTryParse( temp_section.snow_melt.latitude) if not val_is_good or val == 0.0: val = 50.0 self.txtSnowLatitude.setText(str(val)) self.txtSnowLongitude.setText( str(temp_section.snow_melt.time_correction)) # areal depletion areal_list = temp_section.areal_depletion.adc_impervious if len(areal_list) > 0: point_count = -1 for value in areal_list: point_count += 1 led = QtGui.QLineEdit(str(value)) self.tblAreal.setItem(point_count, 0, QtGui.QTableWidgetItem(led.text())) else: self.btnImpNo_Clicked() areal_list = temp_section.areal_depletion.adc_pervious if len(areal_list) > 0: point_count = -1 for value in areal_list: point_count += 1 led = QtGui.QLineEdit(str(value)) self.tblAreal.setItem(point_count, 1, QtGui.QTableWidgetItem(led.text())) pass else: self.btnPerNo_Clicked() # self.tblAreal.resizeColumnsToContents() # adjustments for temp, evap, rain, cond adjustments_section = project.find_section("ADJUSTMENTS") temp_list = adjustments_section.temperature point_count = -1 for value in temp_list: point_count += 1 led = QtGui.QLineEdit(str(value)) self.tblAdjustments.setItem(point_count, 0, QtGui.QTableWidgetItem(led.text())) evap_list = adjustments_section.evaporation point_count = -1 for value in evap_list: point_count += 1 led = QtGui.QLineEdit(str(value)) self.tblAdjustments.setItem(point_count, 1, QtGui.QTableWidgetItem(led.text())) rain_list = adjustments_section.rainfall point_count = -1 for value in rain_list: point_count += 1 led = QtGui.QLineEdit(str(value)) self.tblAdjustments.setItem(point_count, 2, QtGui.QTableWidgetItem(led.text())) cond_list = adjustments_section.soil_conductivity point_count = -1 for value in cond_list: point_count += 1 led = QtGui.QLineEdit(str(value)) self.tblAdjustments.setItem(point_count, 3, QtGui.QTableWidgetItem(led.text()))
def check_coords(self): # check source LL coordinates new_src_LL = Coordinate() val, val_is_good = ParseData.floatTryParse(self.ui.txtLL_src_x.text()) if val_is_good: new_src_LL.x = val else: return False val, val_is_good = ParseData.floatTryParse(self.ui.txtLL_src_y.text()) if val_is_good: new_src_LL.y = val else: return False # check source UR coordinates new_src_UR = Coordinate() val, val_is_good = ParseData.floatTryParse(self.ui.txtUR_src_x.text()) if val_is_good: new_src_UR.x = val else: return False val, val_is_good = ParseData.floatTryParse(self.ui.txtUR_src_y.text()) if val_is_good: new_src_UR.y = val else: return False # check destination LL coordinates new_dst_LL = Coordinate() val, val_is_good = ParseData.floatTryParse(self.ui.txtLL_dst_x.text()) if val_is_good: new_dst_LL.x = val else: return False val, val_is_good = ParseData.floatTryParse(self.ui.txtLL_dst_y.text()) if val_is_good: new_dst_LL.y = val else: return False # check destination UR coordinates new_dst_UR = Coordinate() val, val_is_good = ParseData.floatTryParse(self.ui.txtUR_dst_x.text()) if val_is_good: new_dst_UR.x = val else: return False val, val_is_good = ParseData.floatTryParse(self.ui.txtUR_dst_y.text()) if val_is_good: new_dst_UR.y = val else: return False self.pt_src_ll.x = new_src_LL.x self.pt_src_ll.y = new_src_LL.y self.pt_src_ur.x = new_src_UR.x self.pt_src_ur.y = new_src_UR.y if not self.pt_dst_ll: self.pt_dst_ll = type(self.pt_src_ll)() if not self.pt_dst_ur: self.pt_dst_ur = type(self.pt_src_ur)() self.pt_dst_ll.x = new_dst_LL.x self.pt_dst_ll.y = new_dst_LL.y self.pt_dst_ur.x = new_dst_UR.x self.pt_dst_ur.y = new_dst_UR.y return True