コード例 #1
0
        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"));
                }
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        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());
        }
コード例 #4
0
 public ScenarioResult(string databasePath,Scenario scen, SWATModelType modelType, SWATResultIntervalType interval)
 {
     _databasePath = databasePath;
     _parentScenario = scen;
     _modelType = modelType;
     checkStatus();
     if (Status == ScenarioResultStatus.NORMAL)
          loadModelStructure();
 }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
ファイル: Project.cs プロジェクト: ajarbancina/swat-eclipse
 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;
     }
 }
コード例 #7
0
        public ScenarioResult getModelResult(SWATModelType modelType, SWATResultIntervalType interval)
        {
            string id = getResultID(modelType, interval);

            if (_results.ContainsKey(id))
            {
                return(_results[id]);
            }
            return(null);
        }
コード例 #8
0
        /// <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);
            }
        }
コード例 #9
0
        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("");
        }
コード例 #10
0
        /// <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("");
            }
        }
コード例 #11
0
ファイル: Project.cs プロジェクト: PolyHydrat/swat-eclipse
        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);
            }
        }
コード例 #12
0
        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;
        }
コード例 #13
0
        /// <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);
        }
コード例 #14
0
        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
                }
            }
        }
コード例 #15
0
        /// <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();
                    }
                }
            }
        }
コード例 #16
0
        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);
                    }
                }
            }
        }
コード例 #17
0
        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
                }
            }
        }
コード例 #18
0
 private string getResultID(SWATModelType modelType, SWATResultIntervalType interval)
 {
     return(modelType.ToString() + "_" + interval.ToString());
 }
コード例 #19
0
 public ScenarioResult(string databasePath, Scenario scen, SWATModelType modelType, SWATResultIntervalType interval)
 {
     _databasePath   = databasePath;
     _parentScenario = scen;
     _modelType      = modelType;
     checkStatus();
     if (Status == ScenarioResultStatus.NORMAL)
     {
         loadModelStructure();
     }
 }
コード例 #20
0
        /// <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);
        }
コード例 #21
0
        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;
        }