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(); }
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(); }
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(); }