public void Get_Data_Count_Test() { MCP_tool ThisMCP = new MCP_tool(); Stats These_Stats = new Stats(); string filename = "C:\\Users\\OEE2015_12\\Dropbox (OEE)\\Software - Development\\MCP\\v1.0\\QA Backup files\\MERRA2_Lat_41.5_Long_-84.375_19850101_to_20151231_50mWS_50mWD_10mTemp.csv"; ThisMCP.Import_Reference_data(filename); ThisMCP.Num_WD_Sectors = 16; ThisMCP.Num_Hourly_Ints = 1; ThisMCP.Num_Temp_bins = 2; ThisMCP.Find_Min_Max_temp(); DateTime Start = Convert.ToDateTime("3/4/2009 4:00:00 AM"); DateTime End = Convert.ToDateTime("5/16/2009 4:00:00 PM"); // Test 1 int This_Count = These_Stats.Get_Data_Count(ThisMCP.Ref_Data, Start, End, 7, 0, 1, ThisMCP, false); Assert.AreEqual(This_Count, 45, 0, "Wrong data count"); ThisMCP.Num_WD_Sectors = 4; ThisMCP.Num_Hourly_Ints = 2; ThisMCP.Num_Temp_bins = 2; ThisMCP.Find_Min_Max_temp(); Start = Convert.ToDateTime("1/1/1985 12:00:00 AM"); End = Convert.ToDateTime("12/31/2015 12:00:00 AM"); // Test 2 This_Count = These_Stats.Get_Data_Count(ThisMCP.Ref_Data, Start, End, 0, 1, 0, ThisMCP, false); Assert.AreEqual(This_Count, 14114, 0, "Wrong data count"); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> Returns the count of Site_data for specified start/end time, WD bounds, Hourly bin /// and Temp bin. </summary> /// /// <remarks> Liz, 5/26/2017. </remarks> /// /// <param name="Site"> Target or Reference Site_data. </param> /// <param name="Start_time"> Start time. </param> /// <param name="End_time"> End time. </param> /// <param name="WD_index"> Wind direction index. </param> /// <param name="Hourly_index"> Hourly bin. </param> /// <param name="Temp_index"> Temperature bin. </param> /// <param name="This_MCP"> MCP object. </param> /// <param name="Get_All"> True to get count of all data. </param> /// /// <returns> The data count. </returns> //////////////////////////////////////////////////////////////////////////////////////////////////// public int Get_Data_Count(MCP_tool.Site_data[] Site, DateTime Start_time, DateTime End_time, int WD_index, int Hourly_index, int Temp_index, MCP_tool This_MCP, bool Get_All) { int Avg_count = 0; int This_WD_ind = 0; int This_Hour_ind = 0; int This_Temp_ind = 0; foreach (MCP_tool.Site_data This_Site in Site) { if (This_Site.This_Date >= Start_time && This_Site.This_Date <= End_time) { if (Get_All == true) { Avg_count++; } else { This_WD_ind = This_MCP.Get_WD_ind(This_Site.This_WD, This_MCP.Get_Num_WD()); This_Hour_ind = This_MCP.Get_Hourly_Index(This_Site.This_Date.Hour); This_Temp_ind = This_MCP.Get_Temp_ind(This_WD_ind, This_Hour_ind, This_Site.This_Temp); if ((This_WD_ind == WD_index) && (This_Hour_ind == Hourly_index) && (This_Temp_ind == Temp_index)) { Avg_count++; } } } } return(Avg_count); }
public void Calc_Avg_WS_Test() { MCP_tool ThisMCP = new MCP_tool(); string filename = "C:\\Users\\OEE2015_12\\Dropbox (OEE)\\Software - Development\\MCP\\v1.0\\QA Backup files\\Paulding 10-min data_hourly.csv"; ThisMCP.Import_Target_Data(filename); Stats ThisStats = new Stats(); DateTime Start = Convert.ToDateTime("10/1/2008 12:00:00 AM"); DateTime End = Convert.ToDateTime("10/31/2008 11:00:00 PM"); // Test 1 float This_Avg = ThisStats.Calc_Avg_WS(ThisMCP.Target_Data, 6, 7, Start, End, 90, 270, true, 0, true, 0, ThisMCP); Assert.AreEqual(This_Avg, 6.49889, 0.001, "Wrong Avg WS"); // Test 2 Start = Convert.ToDateTime("2/1/2009 12:00:00 AM"); End = Convert.ToDateTime("2/13/2009 1:00:00 PM"); ThisMCP.Num_Hourly_Ints = 2; This_Avg = ThisStats.Calc_Avg_WS(ThisMCP.Target_Data, 5, 10, Start, End, 210, 300, false, 0, true, 0, ThisMCP); Assert.AreEqual(This_Avg, 6.783322, 0.001, "Wrong Avg WS"); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> Calculates and returns the average wind speed at Site for specified WS bounds, /// start/end time, hourly bin and WD bounds</summary> /// /// <remarks> Liz, 5/26/2017. </remarks> /// /// <param name="Site"> WS, WD and temperature time series data. </param> /// <param name="Min_WS"> Wind speed filter minimum. </param> /// <param name="Max_WS"> Wind speed filter maximum. </param> /// <param name="Start_time"> Start time. </param> /// <param name="End_time"> End time. </param> /// <param name="Min_WD"> Wind direction filter minimum. </param> /// <param name="Max_WD"> Wind direction filter maximum. </param> /// <param name="All_hours"> True if all hours are to be used in average WS calculation. </param> /// <param name="Hourly_index"> Zero-based index of the hour of day. </param> /// <param name="All_Temps"> True if all temperature bins are to be used in average WS calculation. </param> /// <param name="Temp_index"> Zero-based index of hour of day. </param> /// <param name="This_MCP"> MCP object </param> /// /// <returns> The calculated average wind speed. </returns> //////////////////////////////////////////////////////////////////////////////////////////////////// public float Calc_Avg_WS(MCP_tool.Site_data[] Site, float Min_WS, float Max_WS, DateTime Start_time, DateTime End_time, float Min_WD, float Max_WD, bool All_hours, int Hourly_index, bool All_Temps, int Temp_index, MCP_tool This_MCP) { float Avg_WS = 0; int Avg_count = 0; int This_WD_ind = 0; int This_Hour_ind = 0; int This_Temp_ind = 0; foreach (MCP_tool.Site_data This_Site in Site) { This_WD_ind = This_MCP.Get_WD_ind(This_Site.This_WD, This_MCP.Get_Num_WD()); This_Hour_ind = This_MCP.Get_Hourly_Index(This_Site.This_Date.Hour); This_Temp_ind = This_MCP.Get_Temp_ind(This_WD_ind, This_Hour_ind, This_Site.This_Temp); if (This_Site.This_Date >= Start_time && This_Site.This_Date <= End_time && This_Site.This_WS > Min_WS && This_Site.This_WS < Max_WS && (All_hours == true || This_Hour_ind == Hourly_index) && (All_Temps == true || This_Temp_ind == Temp_index)) { if (Max_WD > Min_WD) { if (This_Site.This_WD >= Min_WD && This_Site.This_WD <= Max_WD) { Avg_WS = Avg_WS + This_Site.This_WS; Avg_count = Avg_count + 1; } } else if (This_Site.This_WD >= Min_WD || This_Site.This_WD <= Max_WD) { Avg_WS = Avg_WS + This_Site.This_WS; Avg_count = Avg_count + 1; } } } if (Avg_count > 0) { Avg_WS = Avg_WS / Avg_count; } return(Avg_WS); }