private void getBasicInformation() { DataTable dt = Extract("select * from ave_annual_basin"); if (dt.Rows.Count == 0) { return; } foreach (DataRow r in dt.Rows) { RowItem item = new RowItem(r); string name = item.getColumnValue_String("NAME"); if (name.Equals("START_YEAR_OUTPUT")) { _startYear = item.getColumnValue_Int("VALUE"); } else if (name.Equals("END_YEAR")) { _endYear = item.getColumnValue_Int("VALUE"); } else if (name.Equals("OUTPUT_INTERVAL")) { _interval = (SWATResultIntervalType)(item.getColumnValue_Int("VALUE")); } } }
/// <summary> /// Compare result and observed data /// </summary> /// <param name="result"></param> public SWATUnitColumnYearCompareResult(SWATUnitColumnYearResult result) { if (result == null) { return; } SWATUnitColumnYearObservationData observed = result.ObservedData; if (observed == null) { return; } _result1 = result; _data2 = observed; _interval = _result1.UnitResult.Interval; _chartColumns.Add(_result1.ColumnCompare); _chartColumns.Add(_data2.ColumnCompare); _tableColumns.Add(_result1.ColumnCompare); _tableColumns.Add(_data2.ColumnCompare); //_tableColumns.Add("ABSOLUTE"); //_tableColumns.Add("RELATIVE"); _statistic = new StatisticCompare(this, SeasonType.WholeYear); }
public string getResultStatus(SWATModelType modelType) { StringBuilder status = new StringBuilder(); for (int j = Convert.ToInt32(SWATResultIntervalType.MONTHLY); j <= Convert.ToInt32(SWATResultIntervalType.YEARLY); j++) { SWATResultIntervalType interval = (SWATResultIntervalType)j; ScenarioResult result = getModelResult(modelType, interval); if (result == null) { continue; } if (status.Length > 0) { status.Append(";"); } status.Append(interval); status.Append(":"); if (result.Status != ScenarioResultStatus.NORMAL) { status.Append(result.Status); } else { status.Append(string.Format("{0:yyyy-MM-dd hh:mm:ss}", result.SimulationTime)); } } return(status.ToString()); }
public ScenarioResult(string databasePath,Scenario scen, SWATModelType modelType, SWATResultIntervalType interval) { _databasePath = databasePath; _parentScenario = scen; _modelType = modelType; checkStatus(); if (Status == ScenarioResultStatus.NORMAL) loadModelStructure(); }
/// <summary> /// Compare two results /// </summary> /// <param name="result1"></param> /// <param name="result2"></param> public SWATUnitColumnYearCompareResult(SWATUnitColumnYearResult result1, SWATUnitColumnYearResult result2) { if (result1 == null || result2 == null) { return; } if (result1.UnitResult.Unit.Scenario.Scenario.Name.Equals(result2.UnitResult.Unit.Scenario.Scenario.Name)) //same scenario { if (result1.UnitResult.Unit.Scenario.ModelType == result2.UnitResult.Unit.Scenario.ModelType) //same model type { return; } } else //different scenario { if (result1.UnitResult.Unit.Scenario.ModelType != result2.UnitResult.Unit.Scenario.ModelType) //different model type { return; } } if (result1.UnitResult.Unit.Type != result2.UnitResult.Unit.Type || result1.UnitResult.Unit.ID != result2.UnitResult.Unit.ID) { return; //differnt unit type or id } if (!result1.UnitResult.Name.Equals(result2.UnitResult.Name) || result1.UnitResult.Interval != result2.UnitResult.Interval) { return; //differnt data table or interval } if (!result1.Column.Equals(result2.Column) || result1.Year != result2.Year) { return; //different data column or year } _result1 = result1; _data2 = result2; _interval = _result1.UnitResult.Interval; _chartColumns.Add(_result1.ColumnCompare); _chartColumns.Add(_data2.ColumnCompare); _tableColumns.Add(_result1.ColumnCompare); _tableColumns.Add(_data2.ColumnCompare); //_tableColumns.Add("ABSOLUTE"); //_tableColumns.Add("RELATIVE"); if (_result1.ObservedData != null) { _chartColumns.Add(_result1.ObservedData.ColumnCompare); _tableColumns.Add(_result1.ObservedData.ColumnCompare); } _statistic = new StatisticCompare(this, SeasonType.WholeYear); }
public ObservationData Observation(SWATResultIntervalType interval) { switch (interval) { case SWATResultIntervalType.DAILY: return _observation_daily; case SWATResultIntervalType.MONTHLY: return _observation_monthly; case SWATResultIntervalType.YEARLY: return _observation_yearly; default: return null; } }
public ScenarioResult getModelResult(SWATModelType modelType, SWATResultIntervalType interval) { string id = getResultID(modelType, interval); if (_results.ContainsKey(id)) { return(_results[id]); } return(null); }
/// <summary> /// Re-read results when it's simulated again. /// </summary> /// <param name="modelType"></param> public void reReadResults(SWATModelType modelType, SWATResultIntervalType interval) { ScenarioResult result = getModelResult(modelType, interval); if (result != null) { _results[getResultID(modelType, interval)] = new ScenarioResult( _modelfolder + @"\" + ScenarioResultStructure.getDatabaseName(modelType, interval), this, modelType, interval); } }
public static string getDatabaseName(SWATModelType modelType, SWATResultIntervalType interval) { int index = Convert.ToInt32(modelType); if (index >= 0 && index < DATABASE_NAMES.Length) { return(DATABASE_NAMES[index] + "_" + interval.ToString().ToLower() + DATABASE_NAME_EXT); } return(""); }
/// <summary> /// Retrieve data columns for given result interval /// </summary> /// <param name="type"></param> /// <returns></returns> public static string getDateColumns(SWATResultIntervalType type) { switch (type) { case SWATResultIntervalType.DAILY: return(DATE_COLUMNS_DAILY); case SWATResultIntervalType.MONTHLY: return(DATE_COLUMNS_MONTHLY); case SWATResultIntervalType.YEARLY: return(DATE_COLUMNS_YEARLY); default: return(""); } }
public ObservationData Observation(SWATResultIntervalType interval) { switch (interval) { case SWATResultIntervalType.DAILY: return(_observation_daily); case SWATResultIntervalType.MONTHLY: return(_observation_monthly); case SWATResultIntervalType.YEARLY: return(_observation_yearly); default: return(null); } }
private void checkStatus() { if (DatabasePath == null || !File.Exists(DatabasePath)) { _status = ScenarioResultStatus.NO_EXIST; return; } DataTable dt = Query.GetDataTable("select * from " + ScenarioResultStructure.TABLE_NAME_WATERSHED_AVERAGE_ANNUAL, DatabasePath); if (dt.Rows.Count == 0) { _status = ScenarioResultStatus.UNSUCCESS; return; } foreach (DataRow r in dt.Rows) { RowItem item = new RowItem(r); string name = item.getColumnValue_String("NAME"); if (name.Equals(ScenarioResultStructure.NAME_STATUS_START_YEAR)) { _startYear = item.getColumnValue_Int("VALUE"); } else if (name.Equals("END_YEAR")) { _endYear = item.getColumnValue_Int("VALUE"); } else if (name.Equals("OUTPUT_INTERVAL")) { _interval = (SWATResultIntervalType)(item.getColumnValue_Int("VALUE")); } else if (name.Equals("SUCCESS")) { _status = ScenarioResultStatus.NORMAL; } } //some version don't have this output, need to upgrade if (_startYear == ScenarioResultStructure.UNKONWN_ID) { throw new Exception("Missing output starting year. Please upgrade your SWAT executable."); } _generationTime = (new System.IO.FileInfo(DatabasePath)).LastWriteTime; }
/// <summary> /// Compare two results /// </summary> /// <param name="result1"></param> /// <param name="result2"></param> public SWATUnitColumnYearCompareResult(SWATUnitColumnYearResult result1, SWATUnitColumnYearResult result2) { if(result1 == null || result2 == null) return; if (result1.UnitResult.Unit.Scenario.Scenario.Name.Equals(result2.UnitResult.Unit.Scenario.Scenario.Name)) //same scenario { if (result1.UnitResult.Unit.Scenario.ModelType == result2.UnitResult.Unit.Scenario.ModelType) //same model type return; } else //different scenario { if (result1.UnitResult.Unit.Scenario.ModelType != result2.UnitResult.Unit.Scenario.ModelType) //different model type return; } if (result1.UnitResult.Unit.Type != result2.UnitResult.Unit.Type || result1.UnitResult.Unit.ID != result2.UnitResult.Unit.ID) return; //differnt unit type or id if (!result1.UnitResult.Name.Equals(result2.UnitResult.Name) || result1.UnitResult.Interval != result2.UnitResult.Interval) return; //differnt data table or interval if (!result1.Column.Equals(result2.Column) || result1.Year != result2.Year) return; //different data column or year _result1 = result1; _data2 = result2; _interval = _result1.UnitResult.Interval; _chartColumns.Add(_result1.ColumnCompare); _chartColumns.Add(_data2.ColumnCompare); _tableColumns.Add(_result1.ColumnCompare); _tableColumns.Add(_data2.ColumnCompare); //_tableColumns.Add("ABSOLUTE"); //_tableColumns.Add("RELATIVE"); if (_result1.ObservedData != null) { _chartColumns.Add(_result1.ObservedData.ColumnCompare); _tableColumns.Add(_result1.ObservedData.ColumnCompare); } _statistic = new StatisticCompare(this,SeasonType.WholeYear); }
private static void copyData(SWATResultIntervalType interval, DataTable combineTable, ColumnYearData data) { //add new column for result2 combineTable.Columns.Add(data.ColumnCompare, typeof(double)); //copy data from result2 to the combine table int newColIndex = combineTable.Columns.Count - 1; for (int i = 0; i < combineTable.Rows.Count; i++) { if (data is SWATUnitColumnYearResult) { ArcSWAT.RowItem item = new ArcSWAT.RowItem(data.Table.Rows[i]); combineTable.Rows[i][newColIndex] = item.getColumnValue_Double(data.Column); } else if (data is SWATUnitColumnYearObservationData) { //see if the oberved data is missing DateTime d = DateTime.Parse(combineTable.Rows[i][SWATUnitResult.COLUMN_NAME_DATE].ToString()); DataRow[] rs = null; if (interval == SWATResultIntervalType.MONTHLY) { //in phase I, the monthly data is using day 15 for each month, and I would use day 1 for each month, so here for monthly observed data, use both conditions rs = data.Table.Select(string.Format("{0}='{1:yyyy-MM-01}' or {0}='{1:yyyy-MM-15}'", SWATUnitResult.COLUMN_NAME_DATE, d)); } else if (interval == SWATResultIntervalType.DAILY) { rs = data.Table.Select(string.Format("{0}='{1:yyyy-MM-dd}'", SWATUnitResult.COLUMN_NAME_DATE, d)); } if (rs != null && rs.Length > 0) { combineTable.Rows[i][newColIndex] = double.Parse(rs[0][data.Column].ToString()); } else { combineTable.Rows[i][newColIndex] = ScenarioResultStructure.EMPTY_OBSERVED_VALUE; //missing observed data, shouldn't use 0 as for daily observed data they may be 0 } //changed to -0.000001 to make the chart better } } }
/// <summary> /// Modify output interval in file.cio to run model in different mode /// </summary> /// <param name="interval"></param> public void modifyOutputInterval(SWATResultIntervalType interval) { if (interval == SWATResultIntervalType.UNKNOWN) { return; } //find file.cio string cioFile = _modelfolder + @"\file.cio"; if (!System.IO.File.Exists(cioFile)) { throw new Exception("Couldn't find " + cioFile); } //modify file.cio with given output interval, which is located in line 59 string cio = null; using (System.IO.StreamReader reader = new StreamReader(cioFile)) { cio = reader.ReadToEnd(); } using (System.IO.StreamWriter writer = new StreamWriter(cioFile)) { using (System.IO.StringReader reader = new StringReader(cio)) { string oneline = reader.ReadLine(); while (oneline != null) { if (oneline.Contains("IPRINT")) { oneline = string.Format("{0} | IPRINT: print code (month, day, year)", Convert.ToInt32(interval).ToString().PadLeft(16)); } writer.WriteLine(oneline); oneline = reader.ReadLine(); } } } }
public Scenario(string f, Project prj) : base(f) { if (IsValid) { _prj = prj; _modelfolder = Folder + DEFAULT_TXTINOUT_NAME; if (!Directory.Exists(_modelfolder)) { _modelfolder = null; _isValid = false; _error = _modelfolder + " doesn't exist!"; return; } _name = (new DirectoryInfo(Folder)).Name; //Regular SWAT and CanSWAT could run one a same model _hasResults = false; for (int i = Convert.ToInt32(ArcSWAT.SWATModelType.SWAT_488); i <= Convert.ToInt32(ArcSWAT.SWATModelType.CanSWAT); i++) { SWATModelType modelType = (SWATModelType)i; for (int j = Convert.ToInt32(SWATResultIntervalType.MONTHLY); j <= Convert.ToInt32(SWATResultIntervalType.YEARLY); j++) { SWATResultIntervalType interval = (SWATResultIntervalType)j; ScenarioResult result = new ScenarioResult( _modelfolder + @"\" + ScenarioResultStructure.getDatabaseName(modelType, interval), this, modelType, interval); if (result.Status == ScenarioResultStatus.NORMAL) { _hasResults = true; } _results.Add(getResultID(modelType, interval), result); } } } }
private static void copyData(SWATResultIntervalType interval, DataTable combineTable, ColumnYearData data) { //add new column for result2 combineTable.Columns.Add(data.ColumnCompare, typeof(double)); //copy data from result2 to the combine table int newColIndex = combineTable.Columns.Count - 1; for (int i = 0; i < combineTable.Rows.Count; i++) { if (data is SWATUnitColumnYearResult) { ArcSWAT.RowItem item = new ArcSWAT.RowItem(data.Table.Rows[i]); combineTable.Rows[i][newColIndex] = item.getColumnValue_Double(data.Column); } else if (data is SWATUnitColumnYearObservationData) { //see if the oberved data is missing DateTime d = DateTime.Parse(combineTable.Rows[i][SWATUnitResult.COLUMN_NAME_DATE].ToString()); DataRow[] rs = null; if (interval == SWATResultIntervalType.MONTHLY) //in phase I, the monthly data is using day 15 for each month, and I would use day 1 for each month, so here for monthly observed data, use both conditions rs = data.Table.Select(string.Format("{0}='{1:yyyy-MM-01}' or {0}='{1:yyyy-MM-15}'", SWATUnitResult.COLUMN_NAME_DATE, d)); else if (interval == SWATResultIntervalType.DAILY) rs = data.Table.Select(string.Format("{0}='{1:yyyy-MM-dd}'", SWATUnitResult.COLUMN_NAME_DATE, d)); if (rs != null && rs.Length > 0) combineTable.Rows[i][newColIndex] = double.Parse(rs[0][data.Column].ToString()); else combineTable.Rows[i][newColIndex] = ScenarioResultStructure.EMPTY_OBSERVED_VALUE; //missing observed data, shouldn't use 0 as for daily observed data they may be 0 //changed to -0.000001 to make the chart better } } }
private string getResultID(SWATModelType modelType, SWATResultIntervalType interval) { return(modelType.ToString() + "_" + interval.ToString()); }
public ScenarioResult(string databasePath, Scenario scen, SWATModelType modelType, SWATResultIntervalType interval) { _databasePath = databasePath; _parentScenario = scen; _modelType = modelType; checkStatus(); if (Status == ScenarioResultStatus.NORMAL) { loadModelStructure(); } }
/// <summary> /// Compare result and observed data /// </summary> /// <param name="result"></param> public SWATUnitColumnYearCompareResult(SWATUnitColumnYearResult result) { if (result == null) return; SWATUnitColumnYearObservationData observed = result.ObservedData; if (observed == null) return; _result1 = result; _data2 = observed; _interval = _result1.UnitResult.Interval; _chartColumns.Add(_result1.ColumnCompare); _chartColumns.Add(_data2.ColumnCompare); _tableColumns.Add(_result1.ColumnCompare); _tableColumns.Add(_data2.ColumnCompare); //_tableColumns.Add("ABSOLUTE"); //_tableColumns.Add("RELATIVE"); _statistic = new StatisticCompare(this,SeasonType.WholeYear); }
private void checkStatus() { if (DatabasePath == null || !File.Exists(DatabasePath)) { _status = ScenarioResultStatus.NO_EXIST; return; } DataTable dt = Query.GetDataTable("select * from " + ScenarioResultStructure.TABLE_NAME_WATERSHED_AVERAGE_ANNUAL, DatabasePath); if (dt.Rows.Count == 0) { _status = ScenarioResultStatus.UNSUCCESS; return; } foreach (DataRow r in dt.Rows) { RowItem item = new RowItem(r); string name = item.getColumnValue_String("NAME"); if (name.Equals(ScenarioResultStructure.NAME_STATUS_START_YEAR)) _startYear = item.getColumnValue_Int("VALUE"); else if (name.Equals("END_YEAR")) _endYear = item.getColumnValue_Int("VALUE"); else if (name.Equals("OUTPUT_INTERVAL")) _interval = (SWATResultIntervalType)(item.getColumnValue_Int("VALUE")); else if (name.Equals("SUCCESS")) _status = ScenarioResultStatus.NORMAL; } //some version don't have this output, need to upgrade if (_startYear == ScenarioResultStructure.UNKONWN_ID) throw new Exception("Missing output starting year. Please upgrade your SWAT executable."); _generationTime = (new System.IO.FileInfo(DatabasePath)).LastWriteTime; }