private decimal CalculateExpUsageForNomalizing(ReadingsQueryResult result, HeatingCoolingDegreeDays heatingCoolingDegreeDays) { double? resultAsDouble = (result.B1 * result.Days) + (result.B2 * heatingCoolingDegreeDays.HDD) + (result.B4 * heatingCoolingDegreeDays.CDD); decimal resultAsDecimal = decimal.Round(Convert.ToDecimal(resultAsDouble), 4, MidpointRounding.AwayFromZero); return(resultAsDecimal); }
private HeatingCoolingDegreeDays HeatingCoolingDegreeDaysValueOf(ReadingsQueryResult result, List <WeatherData> weatherDataList) { HeatingCoolingDegreeDays hcdd = new HeatingCoolingDegreeDays { CDD = 0.0, HDD = 0.0, }; foreach (WeatherData weatherData in weatherDataList) { if (!weatherData.AvgTmp.HasValue) { throw new Exception("WeatherData.AvgTmp is null for " + weatherData.ZipCode + " on " + weatherData.RDate); } else if (result.B5 > 0 && weatherData.AvgTmp >= result.B5) { hcdd.CDD += (weatherData.AvgTmp.Value - result.B5); } else if (result.B3 > 0 && weatherData.AvgTmp < result.B3) { hcdd.HDD += (result.B3 - weatherData.AvgTmp.Value); } } return(hcdd); }
private HeatingCoolingDegreeDays HeatingCoolingDegreeDaysValueOf(BalancePointPair balancePointPair, List <WeatherData> weatherDataList) { HeatingCoolingDegreeDays hcdd = new HeatingCoolingDegreeDays { CDD = 0.0, HDD = 0.0, }; foreach (WeatherData weatherData in weatherDataList) { if (!weatherData.AvgTmp.HasValue) { throw new Exception("WeatherData.AvgTmp is null for " + weatherData.ZipCode + " on " + weatherData.RDate); } else if (balancePointPair.CoolingBalancePoint > 0 && weatherData.AvgTmp >= balancePointPair.CoolingBalancePoint) { hcdd.CDD += (weatherData.AvgTmp.Value - balancePointPair.CoolingBalancePoint); } else if (balancePointPair.HeatingBalancePoint > 0 && weatherData.AvgTmp < balancePointPair.HeatingBalancePoint) { hcdd.HDD += (balancePointPair.HeatingBalancePoint - weatherData.AvgTmp.Value); } } return(hcdd); }
private decimal CalculateExpUsage(ReadingsQueryResult result, HeatingCoolingDegreeDays heatingCoolingDegreeDays) { // Normalized Energy Usage = E = B1(DAYS) + B2(HDDB3) + B4(CDDB5) double? resultAsDouble = (result.B1 * result.Days) + (result.B2 * heatingCoolingDegreeDays.HDD) + (result.B4 * heatingCoolingDegreeDays.CDD); decimal resultAsDecimal = decimal.Round(Convert.ToDecimal(resultAsDouble), 4, MidpointRounding.AwayFromZero); bool success = _weatherRepository.InsertWthExpUsage(result.RdngID, resultAsDecimal, result.AccID, result.UtilID, result.RUnitID); if (success) { Log.Information($"Inserted into WthExpUsage >> RdngID: {result.RdngID} WthExpUsage: {resultAsDecimal} ... B1: {result.B1} B2: {result.B2} " + $"B3: {result.B3} Hdd: {heatingCoolingDegreeDays.HDD} B4: {result.B4} B5: {result.B5} Cdd: {heatingCoolingDegreeDays.CDD} " + $"RdngUnitID: {result.RUnitID} WthNormalParamsUnitID: {result.WnpUnitID}"); actualWthExpUsageInserts++; } else { Log.Error($"FAILED attempt: insert into WthExpUsage >> RdngID: {result.RdngID} WthExpUsage: {resultAsDecimal} ... B1: {result.B1} B2: " + $"{result.B2} B3: {result.B3} Hdd: {heatingCoolingDegreeDays.HDD} B4: {result.B4} B5: {result.B5} Cdd: {heatingCoolingDegreeDays.CDD} " + $"RdngUnitID: {result.RUnitID} WthNormalParamsUnitID: {result.WnpUnitID}"); } return(resultAsDecimal); }
private void PopulateMyWthExpUsage() { //List<ReadingsQueryResult> allReadings = _weatherRepository.GetReadingsFromExpUsageOriginal(); List <ReadingsQueryResult> allReadings = _weatherRepository.GetReadingsFromExpUsageOriginalCorrected(); var readingsByAccount = allReadings.GroupBy(r => new { r.AccID, r.UtilID, r.RUnitID }); foreach (var group in readingsByAccount) { try { List <ReadingsQueryResult> readings = group.ToList(); WthNormalParams _params = _weatherRepository.GetParamsForReading(readings.First().AccID, readings.First().UtilID, readings.First().RUnitID); foreach (ReadingsQueryResult reading in readings) { WthExpUsage wthExpUsage = new WthExpUsage(); wthExpUsage.RdngID = reading.RdngID; wthExpUsage.AccID = reading.AccID; wthExpUsage.UtilID = reading.UtilID; wthExpUsage.UnitID = reading.RUnitID; decimal expUsage_Old = decimal.Round(Convert.ToDecimal(reading.ExpUsage), 4, MidpointRounding.AwayFromZero); wthExpUsage.ExpUsage_Old = expUsage_Old; wthExpUsage.Units = reading.Units; List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(_params.WthZipCode, reading.DateStart, reading.DateEnd); reading.B3 = _params.B3_New; reading.B5 = _params.B5_New; HeatingCoolingDegreeDays hcdd = HeatingCoolingDegreeDaysValueOf(reading, weatherDataList); decimal expUsage_New = _params.B1_New * reading.Days + (_params.B2_New * decimal.Round(Convert.ToDecimal(hcdd.HDD), 4, MidpointRounding.AwayFromZero)) + (_params.B4_New * decimal.Round(Convert.ToDecimal(hcdd.CDD), 4, MidpointRounding.AwayFromZero)); wthExpUsage.ExpUsage_New = expUsage_New; if (reading.Units != 0) { wthExpUsage.PercentDelta_Old = Math.Abs((expUsage_Old - reading.Units) / reading.Units); wthExpUsage.PercentDelta_New = Math.Abs((expUsage_New - reading.Units) / reading.Units); } wthExpUsage.DateStart = reading.DateStart; wthExpUsage.DateEnd = reading.DateEnd; _weatherRepository.InsertMyWthExpUsage(wthExpUsage); } } catch (Exception e) { Console.WriteLine(e.Message + " " + group.ToList().First().RdngID + " " + group.ToList().First().AccID + " " + group.ToList().First().RUnitID + "\n" + e.StackTrace); } } }
private bool[] DoCalculation(ReadingsQueryResult result, HeatingCoolingDegreeDays heatingCoolingDegreeDays) { double resultAsDouble = (result.B1 * result.Days) + (result.B2 * heatingCoolingDegreeDays.HDD) + (result.B4 * heatingCoolingDegreeDays.CDD); decimal resultAsDecimal = decimal.Round(Convert.ToDecimal(resultAsDouble), 4, MidpointRounding.AwayFromZero); bool exists = _weatherRepository.GetWthExpUsageExists(result.RdngID); bool success; if (exists) { success = _weatherRepository.UpdateWthExpUsage(result.RdngID, resultAsDecimal); } else { success = _weatherRepository.InsertWthExpUsage(result.RdngID, resultAsDecimal); } if (exists && success) { Log.Information($"Update WthExpUsage >> RdngID: {result.RdngID} WthExpUsage: {resultAsDecimal} ... B1: {result.B1} B2: {result.B2} " + $"B3: {result.B3} Hdd: {heatingCoolingDegreeDays.HDD} B4: {result.B4} B5: {result.B5} Cdd: {heatingCoolingDegreeDays.CDD} " + $"RdngUnitID: {result.RUnitID} WthNormalParamsUnitID: {result.WnpUnitID}"); } else if (exists && !success) { Log.Error($"FAILED attempt: Update WthExpUsage >> RdngID: {result.RdngID} WthExpUsage: {resultAsDecimal} ... B1: {result.B1} B2: " + $"{result.B2} B3: {result.B3} Hdd: {heatingCoolingDegreeDays.HDD} B4: {result.B4} B5: {result.B5} Cdd: {heatingCoolingDegreeDays.CDD} " + $"RdngUnitID: {result.RUnitID} WthNormalParamsUnitID: {result.WnpUnitID}"); } else if (!exists && success) { Log.Information($"Inserted into WthExpUsage >> RdngID: {result.RdngID} WthExpUsage: {resultAsDecimal} ... B1: {result.B1} B2: {result.B2} " + $"B3: {result.B3} Hdd: {heatingCoolingDegreeDays.HDD} B4: {result.B4} B5: {result.B5} Cdd: {heatingCoolingDegreeDays.CDD} " + $"RdngUnitID: {result.RUnitID} WthNormalParamsUnitID: {result.WnpUnitID}"); } else if (!exists && !success) { Log.Error($"FAILED attempt: Insert into WthExpUsage >> RdngID: {result.RdngID} WthExpUsage: {resultAsDecimal} ... B1: {result.B1} B2: " + $"{result.B2} B3: {result.B3} Hdd: {heatingCoolingDegreeDays.HDD} B4: {result.B4} B5: {result.B5} Cdd: {heatingCoolingDegreeDays.CDD} " + $"RdngUnitID: {result.RUnitID} WthNormalParamsUnitID: {result.WnpUnitID}"); } return(new bool[] { exists, success }); }
private void PopulateWthExpUsageTable() { Log.Information("Starting PopulateWthExpUsage()..."); string fromDateStartStr = $"{_fromDateStart.Month}-{_fromDateStart.Day}-{_fromDateStart.Year}"; try { List <ReadingsQueryResult> readings = _weatherRepository.GetReadings(fromDateStartStr); expectedWthExpUsageInserts = readings.Count; foreach (ReadingsQueryResult result in readings) { //Console.WriteLine(result.DateStart + ", " + result.DateEnd + ", " + result.Days + ", result.B1 = " + result.B1 + ", result.B2 = " + result.B2 + ", result.B3 = " + result.B3 + ", result.B4 = " + result.B4); try { List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(result.Zip, result.DateStart, result.DateEnd); HeatingCoolingDegreeDays heatingCoolingDegreeDays = HeatingCoolingDegreeDaysValueOf(result, weatherDataList); CalculateExpUsage(result, heatingCoolingDegreeDays); } catch (Exception e) { Log.Error(e.Message); Log.Error(e.StackTrace); } } } catch (Exception ex) { Log.Error(ex.Message); Log.Error(ex.StackTrace); } int expectedTotalWthExpUsageEntries = _weatherRepository.GetExpectedWthExpUsageRowCount(fromDateStartStr); int actualTotalWthExpUsageEntries = _weatherRepository.GetActualWthExpUsageRowCount(); Log.Information($"Finished PopulateWthExpUsage(). Expected inserts: {expectedWthExpUsageInserts}, Actual: {actualWthExpUsageInserts}"); Log.Information($"Expected WthExpUsage total entries: {expectedTotalWthExpUsageEntries}, Actual: {actualTotalWthExpUsageEntries}.\n"); expectedWthExpUsageInserts = 0; actualWthExpUsageInserts = 0; }
private void PopulateMyWthExpUsage(AccordResult accord) { //List<ReadingsQueryResult> allReadings = _weatherRepository.GetReadingsFromExpUsageOriginal(); List <ReadingsQueryResult> allReadings = _weatherRepository.GetReadingsFromExpUsageOriginalCorrected(accord); var readingsByAccount = allReadings.GroupBy(r => new { r.AccID, r.UtilID, r.RUnitID }); foreach (var group in readingsByAccount) { try { List <ReadingsQueryResult> readings = group.ToList(); WthNormalParams _params = _weatherRepository.GetParamsForReading(readings.First().AccID, readings.First().UtilID, readings.First().RUnitID); foreach (ReadingsQueryResult reading in readings) { WthExpUsage wthExpUsage = new WthExpUsage(); wthExpUsage.RdngID = reading.RdngID; wthExpUsage.AccID = reading.AccID; wthExpUsage.UtilID = reading.UtilID; wthExpUsage.UnitID = reading.RUnitID; decimal expUsage_Old = decimal.Round(Convert.ToDecimal(reading.ExpUsage), 4, MidpointRounding.AwayFromZero); wthExpUsage.ExpUsage_Old = expUsage_Old; wthExpUsage.Units = reading.Units; List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(_params.WthZipCode, reading.DateStart, reading.DateEnd); decimal B1 = 0; decimal B2 = 0; decimal B4 = 0; reading.B3 = accord.HeatingBP; reading.B5 = accord.CoolingBP; if (accord.IsSimpleSingleRegression) { if (reading.B3 > 0) { B1 = decimal.Round(Convert.ToDecimal(accord.SimpleLinearRegression.Intercept), 12, MidpointRounding.AwayFromZero); B2 = decimal.Round(Convert.ToDecimal(accord.SimpleLinearRegression.Slope), 12, MidpointRounding.AwayFromZero); B4 = 0; } else if (reading.B5 > 0) { B1 = decimal.Round(Convert.ToDecimal(accord.SimpleLinearRegression.Intercept), 12, MidpointRounding.AwayFromZero); B2 = 0; B4 = decimal.Round(Convert.ToDecimal(accord.SimpleLinearRegression.Slope), 12, MidpointRounding.AwayFromZero); } } else { if (reading.B3 > 0 && reading.B5 > 0) { B1 = decimal.Round(Convert.ToDecimal(accord.MultipleRegression.Weights[0]), 12, MidpointRounding.AwayFromZero); B2 = decimal.Round(Convert.ToDecimal(accord.MultipleRegression.Weights[1]), 12, MidpointRounding.AwayFromZero); B4 = decimal.Round(Convert.ToDecimal(accord.MultipleRegression.Weights[2]), 12, MidpointRounding.AwayFromZero); } else if (reading.B3 > 0) { B1 = decimal.Round(Convert.ToDecimal(accord.MultipleRegression.Weights[0]), 12, MidpointRounding.AwayFromZero); B2 = decimal.Round(Convert.ToDecimal(accord.MultipleRegression.Weights[1]), 12, MidpointRounding.AwayFromZero); } else if (reading.B5 > 0) { B1 = decimal.Round(Convert.ToDecimal(accord.MultipleRegression.Weights[0]), 12, MidpointRounding.AwayFromZero); B4 = decimal.Round(Convert.ToDecimal(accord.MultipleRegression.Weights[1]), 12, MidpointRounding.AwayFromZero); } } HeatingCoolingDegreeDays hcdd = HeatingCoolingDegreeDaysValueOf(reading, weatherDataList); decimal expUsage_New = (B1 * reading.Days) + (B2 * decimal.Round(Convert.ToDecimal(hcdd.HDD), 12, MidpointRounding.AwayFromZero)) + (B4 * decimal.Round(Convert.ToDecimal(hcdd.CDD), 12, MidpointRounding.AwayFromZero)); wthExpUsage.ExpUsage_New = expUsage_New; if (reading.Units != 0) { wthExpUsage.PercentDelta_Old = Math.Abs((expUsage_Old - reading.Units) / reading.Units); wthExpUsage.PercentDelta_New = Math.Abs((expUsage_New - reading.Units) / reading.Units); } wthExpUsage.DateStart = reading.DateStart; wthExpUsage.DateEnd = reading.DateEnd; _weatherRepository.InsertMyWthExpUsage(wthExpUsage, Accord: true); } } catch (Exception e) { Console.WriteLine(e.Message + " " + group.ToList().First().RdngID + " " + group.ToList().First().AccID + " " + group.ToList().First().RUnitID + "\n" + e.StackTrace); } } }
private List <BalancePointPair> CalculateOneYearOfDegreeDaysForAllBalancePoints(string DesiredStartDate, WthNormalParams accountUtilAndUnit) { List <BalancePointPair> allBalancePointPairs = new List <BalancePointPair>(); List <ReadingsQueryResult> readings = _weatherRepository.GetReadingsForRegressionYear(DesiredStartDate, accountUtilAndUnit); if (readings.Count == 0) { return(allBalancePointPairs); } DateTime _ReadDateStart = readings.First().DateStart; DateTime _ReadDateEnd = readings.Last().DateEnd; int days = 0; foreach (ReadingsQueryResult reading in readings) { days += reading.Days; } foreach (ReadingsQueryResult reading in readings) { HeatingCoolingDegreeDays hcdd = new HeatingCoolingDegreeDays { CDD = 0.0, HDD = 0.0 }; List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(reading.Zip, reading.DateStart, reading.DateEnd); int rangeMin = 45; int rangeMax = 75; int range = rangeMax - rangeMin + 1; List <int[]> comboList = new List <int[]>(); for (int i = 0; i < range; i++) { int[] hdsOnly = new int[2] { rangeMin + i, 0 }; int[] cdsOnly = new int[2] { 0, rangeMin + i }; comboList.Add(hdsOnly); comboList.Add(cdsOnly); int k = range - 1 - i; while (k >= 0) { int[] both = new int[2] { rangeMin + i, rangeMin + i + k }; k--; comboList.Add(both); } //for (int j = 0; j < range; j++) //{ // int[] allBoth = new int[2] { rangeMin + i, rangeMin + j }; // comboList.Add(allBoth); //} } comboList.Add(new int[] { 0, 0 }); //int expectedComboListCount = 0; ///* cases where (heating bp) != (cooling bp) */ //expectedComboListCount = (range + 1) * ((range) / 2); //if (range % 2 != 0) //{ // expectedComboListCount += ((range) / 2) + 1; //} ///* cases where (heating bp) != 0 && (cooling bp) == 0 or // * (heating bp) == 0 && (cooling bp) != 0; and // * (heating bp) == 0 && (cooling bp) == 0. // */ //expectedComboListCount += (range * 2) + 1; foreach (int[] combo in comboList) { reading.B3 = combo[0]; reading.B5 = combo[1]; hcdd = HeatingCoolingDegreeDaysValueOf(reading, weatherDataList); BalancePointPair balancePoint = new BalancePointPair { RdngID = reading.RdngID, DaysInReading = reading.Days, CoolingBalancePoint = reading.B5, HeatingBalancePoint = reading.B3, CoolingDegreeDays = hcdd.CDD, HeatingDegreeDays = hcdd.HDD, ActualUsage = reading.Units, YearOfReadsDateStart = _ReadDateStart, YearOfReadsDateEnd = _ReadDateEnd, ReadingsInNormalYear = readings.Count, DaysInNormalYear = days, WthZipCode = reading.Zip }; allBalancePointPairs.Add(balancePoint); } } return(allBalancePointPairs); }
private void UpdateWthExpUsage(List <WthNormalParams> newNormalParamsList) { Log.Information("Starting UpdateWthExpUsage()..."); string fromDateStartStr = $"{fromDateStart.Month}-{fromDateStart.Day}-{fromDateStart.Year}"; int updateCount = 0; int insertCount = 0; int failCount = 0; foreach (WthNormalParams normalParams in newNormalParamsList) { try { List <ReadingsQueryResult> readings = _weatherRepository.GetReadingsForExpUsageUpdate(fromDateStartStr, normalParams); foreach (ReadingsQueryResult result in readings) { try { List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(result.Zip, result.DateStart, result.DateEnd); if (weatherDataList.Count != result.Days) { Log.Error($"WeatherDataList.Count != reading.Days; WeatherDataList.Count = {weatherDataList.Count} reading.Days = {result.Days}. " + $"RdngID: {result.RdngID}."); } BalancePointPair balancePointPair = new BalancePointPair() { HeatingBalancePoint = normalParams.B3, CoolingBalancePoint = normalParams.B5 }; HeatingCoolingDegreeDays heatingCoolingDegreeDays = HeatingCoolingDegreeDaysValueOf(balancePointPair, weatherDataList); bool[] existsSuccess = DoCalculation(result, heatingCoolingDegreeDays); if (existsSuccess[1]) { if (existsSuccess[0]) { updateCount++; } else { insertCount++; } } else { failCount++; } } catch (Exception e) { Log.Error(e.Message + " " + e.StackTrace); } } } catch (Exception ex) { Log.Error(ex.Message + " " + ex.StackTrace); } } Log.Information($"Finished UpdateWthExpUsage(). Inserts: {insertCount}, Updates: {updateCount}. Failures: {failCount}."); }
private List <BalancePointPair> CalculateOneYearOfDegreeDaysForAllBalancePoints(List <WNRdngData> wNRdngData) { List <BalancePointPair> allBalancePointPairs = new List <BalancePointPair>(); DateTime _yearOfReadsDateStart = wNRdngData.First().DateStart; DateTime _yearOfReadsDateEnd = wNRdngData.Last().DateEnd; int _readingsCount = wNRdngData.First().MoID; int daysInYear = 0; foreach (WNRdngData reading in wNRdngData) { var t = reading.DateEnd.Subtract(reading.DateStart).Days; daysInYear += t; } foreach (WNRdngData reading in wNRdngData) { int daysInReading = reading.DateEnd.Subtract(reading.DateStart).Days; HeatingCoolingDegreeDays hcdd = new HeatingCoolingDegreeDays { CDD = 0.0, HDD = 0.0 }; List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(reading.Zip, reading.DateStart, reading.DateEnd); if (weatherDataList.Count != daysInReading) { Log.Error($"WeatherData.Count != daysInReading: " + weatherDataList.Count + " " + daysInReading + " AccID: " + reading.AccID + " UtilID: " + reading.UtilID + " UnitID: " + reading.UnitID + " Zip: " + reading.Zip + " MoID: " + reading.MoID); } int rangeMin = 45; int rangeMax = 75; int range = rangeMax - rangeMin + 1; List <int[]> comboList = new List <int[]>(); for (int i = 0; i < range; i++) { int[] hdsOnly = new int[2] { rangeMin + i, 0 }; int[] cdsOnly = new int[2] { 0, rangeMin + i }; comboList.Add(hdsOnly); comboList.Add(cdsOnly); int k = range - 1 - i; while (k >= 0) { int[] both = new int[2] { rangeMin + i, rangeMin + i + k }; k--; comboList.Add(both); } } comboList.Add(new int[] { 0, 0 }); foreach (int[] combo in comboList) { BalancePointPair bpPair = new BalancePointPair { CoolingBalancePoint = combo[1], HeatingBalancePoint = combo[0] }; hcdd = HeatingCoolingDegreeDaysValueOf(bpPair, weatherDataList); bpPair.CoolingDegreeDays = hcdd.CDD; bpPair.HeatingDegreeDays = hcdd.HDD; bpPair.ActualUsage = reading.Units; bpPair.ZipCode = reading.Zip; bpPair.DaysInReading = daysInReading; bpPair.DaysInYear = daysInYear; allBalancePointPairs.Add(bpPair); } } return(allBalancePointPairs); }
private List <BPPairAccord> CalculateOneYearOfDegreeDaysForAllBalancePoints(List <WNRdngData> wNRdngData) { List <BPPairAccord> allBalancePointPairs = new List <BPPairAccord>(); DateTime _yearOfReadsDateStart = wNRdngData.First().DateStart; DateTime _yearOfReadsDateEnd = wNRdngData.Last().DateEnd; int _readingsCount = wNRdngData.First().MoID; int daysInYear = 0; foreach (WNRdngData reading in wNRdngData) { var t = reading.DateEnd.Subtract(reading.DateStart).Days; daysInYear += t; } foreach (WNRdngData reading in wNRdngData) { int daysInReading = reading.DateEnd.Subtract(reading.DateStart).Days; HeatingCoolingDegreeDays hcdd = new HeatingCoolingDegreeDays { CDD = 0.0, HDD = 0.0 }; List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(reading.Zip, reading.DateStart, reading.DateEnd); if (weatherDataList.Count != daysInReading) { Log.Error($"WeatherData.Count != daysInReading: " + weatherDataList.Count + " " + daysInReading + " AccID: " + reading.AccID + " UtilID: " + reading.UtilID + " UnitID: " + reading.UnitID + " Zip: " + reading.Zip + " MoID: " + reading.MoID); } int rangeMin = 45; int rangeMax = 75; int range = rangeMax - rangeMin + 1; List <int[]> comboList = new List <int[]>(); for (int i = 0; i < range; i++) { int[] hdsOnly = new int[2] { rangeMin + i, 0 }; int[] cdsOnly = new int[2] { 0, rangeMin + i }; comboList.Add(hdsOnly); comboList.Add(cdsOnly); int k = range - 1 - i; while (k >= 0) { int[] both = new int[2] { rangeMin + i, rangeMin + i + k }; k--; comboList.Add(both); } } comboList.Add(new int[] { 0, 0 }); //int expectedComboListCount = 0; ///* cases where (heating bp) != (cooling bp) */ //expectedComboListCount = (range + 1) * ((range) / 2); //if (range % 2 != 0) //{ // expectedComboListCount += ((range) / 2) + 1; //} ///* cases where (heating bp) != 0 && (cooling bp) == 0 or // * (heating bp) == 0 && (cooling bp) != 0; and // * (heating bp) == 0 && (cooling bp) == 0. // */ //expectedComboListCount += (range * 2) + 1; foreach (int[] combo in comboList) { //BalancePointPair bpPair = new BalancePointPair //{ // CoolingBalancePoint = combo[1], // HeatingBalancePoint = combo[0] //}; //hcdd = HeatingCoolingDegreeDaysValueOf(bpPair, weatherDataList); //bpPair.CoolingDegreeDays = hcdd.CDD; //bpPair.HeatingDegreeDays = hcdd.HDD; //bpPair.ActualUsage = reading.Units; //bpPair.YearOfReadsDateStart = _yearOfReadsDateStart; //bpPair.YearOfReadsDateEnd = _yearOfReadsDateEnd; //bpPair.ReadingsInNormalYear = _readingsCount; ////DaysInNormalYear = days; //bpPair.WthZipCode = reading.Zip; //bpPair.DaysInReading = daysInReading; BPPairAccord bpPair = new BPPairAccord { CoolingBalancePoint = combo[1], HeatingBalancePoint = combo[0] }; hcdd = HeatingCoolingDegreeDaysValueOf(bpPair, weatherDataList); bpPair.CoolingDegreeDays = hcdd.CDD; bpPair.HeatingDegreeDays = hcdd.HDD; bpPair.ActualUsage = reading.Units; bpPair.ZipCode = reading.Zip; bpPair.DaysInReading = daysInReading; bpPair.DaysInYear = daysInYear; allBalancePointPairs.Add(bpPair); } } return(allBalancePointPairs); }
private List <BalancePointPair> CalculateOneYearExpUsageForAllBalancePoints(string DesiredStartDate, WthNormalParams accountUtilAndUnit) { List <BalancePointPair> allBalancePointPairs = new List <BalancePointPair>(); List <ReadingsQueryResult> readings = _weatherRepository.GetReadingsForRegressionYear(DesiredStartDate, accountUtilAndUnit); DateTime _ReadDateStart = readings.First().DateStart; DateTime _ReadDateEnd = readings.Last().DateEnd; int days = 0; decimal expUsage_Original = 0; foreach (ReadingsQueryResult reading in readings) { days += reading.Days; //expUsage_Original += _weatherRepository.GetExpUsageOriginal(reading.RdngID); } foreach (ReadingsQueryResult reading in readings) { HeatingCoolingDegreeDays hcdd = new HeatingCoolingDegreeDays { CDD = 0.0, HDD = 0.0 }; List <WeatherData> weatherDataList = _weatherRepository.GetWeatherDataByZipStartAndEndDate(reading.Zip, reading.DateStart, reading.DateEnd); int coolingBalancePoint = reading.B5; int heatingBalancePoint = reading.B3; double coolingCoefficiant = reading.B4; double heatingCoefficiant = reading.B2; if (heatingCoefficiant == 0 && coolingCoefficiant == 0) { decimal expUsage = CalculateExpUsageForNomalizing(reading, hcdd); BalancePointPair balancePointPair = new BalancePointPair { RdngID = reading.RdngID, DaysInReading = reading.Days, CoolingBalancePoint = reading.B5, HeatingBalancePoint = reading.B3, CoolingDegreeDays = (double)hcdd.CDD, HeatingDegreeDays = (double)hcdd.HDD, ExpUsage_New = expUsage, ActualUsage = reading.Units, ExpUsage_Original = expUsage_Original, YearOfReadsDateStart = _ReadDateStart, YearOfReadsDateEnd = _ReadDateEnd, ReadingsInNormalYear = readings.Count, DaysInNormalYear = days, WthZipCode = reading.Zip }; allBalancePointPairs.Add(balancePointPair); } else { int[] allCoolingBalancePoints = new int[31]; for (int k = 45; k <= 75; k++) { allCoolingBalancePoints[k - 45] = k; } int[] allHeatingBalancePoints = new int[31]; for (int k = 45; k <= 75; k++) { allHeatingBalancePoints[k - 45] = k; } if (coolingCoefficiant > 0) { foreach (int coolingPointInstance in allCoolingBalancePoints) { reading.B5 = coolingPointInstance; if (heatingCoefficiant > 0) { foreach (int heatingPointInstance in allHeatingBalancePoints) { reading.B3 = heatingPointInstance; hcdd = HeatingCoolingDegreeDaysValueOf(reading, weatherDataList); decimal expUsage = CalculateExpUsageForNomalizing(reading, hcdd); BalancePointPair balancePoint = new BalancePointPair { RdngID = reading.RdngID, DaysInReading = reading.Days, CoolingBalancePoint = reading.B5, HeatingBalancePoint = reading.B3, CoolingDegreeDays = (double)hcdd.CDD, HeatingDegreeDays = (double)hcdd.HDD, ExpUsage_New = expUsage, ActualUsage = reading.Units, //ExpUsageOriginal = WthExpUsageOriginal, YearOfReadsDateStart = _ReadDateStart, YearOfReadsDateEnd = _ReadDateEnd, ReadingsInNormalYear = readings.Count, DaysInNormalYear = days, WthZipCode = reading.Zip }; allBalancePointPairs.Add(balancePoint); } } else { hcdd = HeatingCoolingDegreeDaysValueOf(reading, weatherDataList); decimal expUsage = CalculateExpUsageForNomalizing(reading, hcdd); BalancePointPair balancePoint = new BalancePointPair { RdngID = reading.RdngID, DaysInReading = reading.Days, CoolingBalancePoint = reading.B5, HeatingBalancePoint = reading.B3, CoolingDegreeDays = (double)hcdd.CDD, HeatingDegreeDays = (double)hcdd.HDD, ExpUsage_New = expUsage, ActualUsage = reading.Units, //ExpUsageOriginal = WthExpUsageOriginal, YearOfReadsDateStart = _ReadDateStart, YearOfReadsDateEnd = _ReadDateEnd, ReadingsInNormalYear = readings.Count, DaysInNormalYear = days, WthZipCode = reading.Zip }; allBalancePointPairs.Add(balancePoint); } } } else if (heatingCoefficiant > 0) { foreach (int heatingIncrement in allHeatingBalancePoints) { reading.B3 = heatingIncrement; hcdd = HeatingCoolingDegreeDaysValueOf(reading, weatherDataList); decimal expUsage = CalculateExpUsageForNomalizing(reading, hcdd); BalancePointPair balancePoint = new BalancePointPair { RdngID = reading.RdngID, DaysInReading = reading.Days, CoolingBalancePoint = reading.B5, HeatingBalancePoint = reading.B3, CoolingDegreeDays = (double)hcdd.CDD, HeatingDegreeDays = (double)hcdd.HDD, ExpUsage_New = expUsage, ActualUsage = reading.Units, //ExpUsageOriginal = WthExpUsageOriginal, YearOfReadsDateStart = _ReadDateStart, YearOfReadsDateEnd = _ReadDateEnd, ReadingsInNormalYear = readings.Count, DaysInNormalYear = days, WthZipCode = reading.Zip }; allBalancePointPairs.Add(balancePoint); } } } } return(allBalancePointPairs); }