Exemple #1
0
        public void PercentileTest3()
        {
            DFSBase target = DfsFileFactory.OpenFile(@"c:\temp\KFT-SJ_inv_3DSZ.dfs3");

            double[] Percentiles = new double[] { 0.1, 0.5, 0.9 };
            DFSBase  outf        = DfsFileFactory.CreateFile(@"c:\temp\TestDataSet_percentiles_limit.dfs3", Percentiles.Count());
            DFSBase  outf2       = DfsFileFactory.CreateFile(@"c:\temp\TestDataSet_percentiles.dfs3", Percentiles.Count());

            outf.CopyFromTemplate(target);
            outf2.CopyFromTemplate(target);
            int Item = 1;

            int k = 0;

            //Create the items
            foreach (double j in Percentiles)
            {
                outf.Items[k].EumItem  = target.Items[Item - 1].EumItem;
                outf.Items[k].EumUnit  = target.Items[Item - 1].EumUnit;
                outf.Items[k].Name     = j.ToString() + " Percentile";
                outf2.Items[k].EumItem = target.Items[Item - 1].EumItem;
                outf2.Items[k].EumUnit = target.Items[Item - 1].EumUnit;
                outf2.Items[k].Name    = j.ToString() + " Percentile";
                k++;
            }


            int[] TSteps = new int[target.NumberOfTimeSteps];
            for (int i = 0; i < target.NumberOfTimeSteps; i++)
            {
                TSteps[i] = i;
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();
            target.Percentile(Item, TSteps, outf, Percentiles, 300);
            sw.Stop();
            TimeSpan el = sw.Elapsed;

            sw.Reset();
            sw.Start();
            target.Percentile(Item, TSteps, outf2, Percentiles, 100);
            sw.Stop();
            TimeSpan el2 = sw.Elapsed;

            outf.Dispose();
            outf2.Dispose();
            target.Dispose();
        }
Exemple #2
0
        public void PercentileTest()
        {
            DFSBase target = DfsFileFactory.OpenFile(@"..\..\..\TestData\novomr4_indv_dfs0_ud1.dfs0");

            double[] Percentiles = new double[] { 0.1, 0.5, 0.9 };
            DFSBase  outf        = DfsFileFactory.CreateFile(@"..\..\..\TestData\novomr4_indv_dfs0_ud1_percentiles.dfs0", Percentiles.Count());

            outf.CopyFromTemplate(target);
            int Item = 1; // TODO: Initialize to an appropriate value

            int k = 0;

            //Create the items
            foreach (double j in Percentiles)
            {
                outf.Items[k].EumItem = target.Items[Item - 1].EumItem;
                outf.Items[k].EumUnit = target.Items[Item - 1].EumUnit;
                outf.Items[k].Name    = j.ToString() + " Percentile";
                k++;
            }

            int[] TSteps = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            target.Percentile(Item, TSteps, outf, Percentiles);
            outf.Dispose();
            target.Dispose();

            DFS0 df = new DFS0(@"..\..\..\TestData\novomr4_indv_dfs0_ud1_percentiles.dfs0");

            Assert.AreEqual(25952, df.GetData(0, 1), 0.5);
            Assert.AreEqual(27294, df.GetData(0, 2), 0.5);
            Assert.AreEqual(33422, df.GetData(0, 3), 0.5);

            df.Dispose();
        }
        /// <summary>
        /// Does simple factor math on all time steps and of selected items in a dfs-file.
        /// A different factor can be used for each month
        /// </summary>
        /// <param name="OperationData"></param>
        public static void Percentile(XElement OperationData)
        {
            DFS3.MaxEntriesInBuffer = 1;
            DFS2.MaxEntriesInBuffer = 1;

            int maxmem = 300; //Uses 300 mB of memory

            string File1   = OperationData.Element("DFSFileName").Value;
            string outfile = OperationData.Element("DFSOutputFileName").Value;

            DFSBase dfsinput = DfsFileFactory.OpenFile(File1);

            double[] Percentiles = ParseString(OperationData.Element("Percentiles").Value);
            int      Item        = int.Parse((OperationData.Element("Item").Value));

            int[] TimeSteps = ParseString(OperationData.Element("TimeSteps").Value, 0, dfsinput.NumberOfTimeSteps - 1);

            var TimeintervalElement = OperationData.Element("TimeInterval");


            string timeinterval = "";

            //Percentiles are wanted for either each month or each year.
            if (TimeintervalElement != null)
            {
                timeinterval = TimeintervalElement.Value.ToLower();
            }

            List <int> timesteps = new List <int>();
            string     ext       = Path.GetExtension(outfile);

            switch (timeinterval)
            {
            case "month":
                for (int i = 1; i <= 12; i++)
                {
                    timesteps.Clear();
                    foreach (int j in TimeSteps)
                    {
                        if (dfsinput.TimeSteps[j].Month == i)
                        {
                            timesteps.Add(j);
                        }
                    }

                    if (timesteps.Count > 3)
                    {
                        string FileName = outfile.Substring(0, outfile.Length - ext.Length) + "_Month_" + i + ext;
                        var    dfsoutm  = DfsFileFactory.CreateFile(FileName, Percentiles.Count());
                        dfsoutm.CopyFromTemplate(dfsinput);
                        dfsinput.Percentile(1, timesteps.ToArray(), dfsoutm, Percentiles, maxmem);
                        dfsoutm.Dispose();
                    }
                }
                break;

            case "year":
                int CurrentYear = dfsinput.TimeSteps[TimeSteps.First()].Year;
                foreach (int j in TimeSteps)
                {
                    if (CurrentYear == dfsinput.TimeSteps[j].Year)
                    {
                        timesteps.Add(j);
                    }
                    else
                    {
                        if (timesteps.Count > 3)
                        {
                            string FileName = outfile.Substring(0, outfile.Length - ext.Length) + "_Year_" + CurrentYear + ext;
                            var    dfsoutm  = DfsFileFactory.CreateFile(FileName, Percentiles.Count());
                            dfsoutm.CopyFromTemplate(dfsinput);
                            dfsinput.Percentile(1, timesteps.ToArray(), dfsoutm, Percentiles, maxmem);
                            dfsoutm.Dispose();
                        }
                        timesteps.Clear();
                        CurrentYear = dfsinput.TimeSteps[j].Year;
                        timesteps.Add(j);
                    }
                }
                break;

            default: //Just do percentile on everything when not month or year
                DFSBase dfs = DfsFileFactory.CreateFile(outfile, Percentiles.Count());
                dfs.CopyFromTemplate(dfsinput);
                dfsinput.Percentile(Item, TimeSteps, dfs, Percentiles, maxmem);
                dfs.Dispose();
                break;
            }
            dfsinput.Dispose();
        }
Exemple #4
0
        public void PercentileTest2()
        {
            DFSBase target = DfsFileFactory.OpenFile(@"..\..\..\TestData\TestDataSet.dfs2");

            double[] Percentiles = new double[] { 0.1, 0.5, 0.9 };
            DFSBase  outf        = DfsFileFactory.CreateFile(@"..\..\..\TestData\TestDataSet_percentiles_limit.dfs2", Percentiles.Count());
            DFSBase  outf2       = DfsFileFactory.CreateFile(@"..\..\..\TestData\TestDataSet_percentiles.dfs2", Percentiles.Count());

            outf.CopyFromTemplate(target);
            outf2.CopyFromTemplate(target);
            int Item = 1;

            int k = 0;

            //Create the items
            foreach (double j in Percentiles)
            {
                outf.Items[k].EumItem  = target.Items[Item - 1].EumItem;
                outf.Items[k].EumUnit  = target.Items[Item - 1].EumUnit;
                outf.Items[k].Name     = j.ToString() + " Percentile";
                outf2.Items[k].EumItem = target.Items[Item - 1].EumItem;
                outf2.Items[k].EumUnit = target.Items[Item - 1].EumUnit;
                outf2.Items[k].Name    = j.ToString() + " Percentile";
                k++;
            }


            int[] TSteps = new int[target.NumberOfTimeSteps];
            for (int i = 0; i < target.NumberOfTimeSteps; i++)
            {
                TSteps[i] = i;
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();
            target.Percentile(Item, TSteps, outf, Percentiles, 10);
            sw.Stop();
            TimeSpan el = sw.Elapsed;

            sw.Reset();
            sw.Start();
            target.Percentile(Item, TSteps, outf2, Percentiles);
            sw.Stop();
            TimeSpan el2 = sw.Elapsed;

            outf.Dispose();
            outf2.Dispose();
            target.Dispose();

            DFS2 fil1 = new DFS2(@"..\..\..\TestData\TestDataSet_percentiles_limit.dfs2");
            DFS2 fil2 = new DFS2(@"..\..\..\TestData\TestDataSet_percentiles.dfs2");

            for (int i = 1; i <= Percentiles.Count(); i++)
            {
                var m1 = fil1.GetData(0, i);
                var m2 = fil2.GetData(0, i);

                for (int j = 0; j < m1.Data.Count(); j++)
                {
                    Assert.AreEqual(m1.Data[j], m2.Data[j]);
                }
            }

            fil1.Dispose();
            fil2.Dispose();
        }