public ReadingsSummary( DateTime beginStamp, DateTime endStamp, ReadingValues min, ReadingValues max, ReadingValues mean, ReadingValues sampleStandardDeviation, int count, Dictionary<double, int> tempCounts, Dictionary<double, int> presCounts, Dictionary<double, int> humCounts, Dictionary<double, int> speedCounts, Dictionary<double, int> dirCounts ) { BeginStamp = beginStamp; EndStamp = endStamp; Min = min; Max = max; Mean = mean; SampleStandardDeviation = sampleStandardDeviation; Count = count; TemperatureCounts = RoundAndCombine(tempCounts); PressureCounts = RoundAndCombine(presCounts); HumidityCounts = RoundAndCombine(humCounts); WindSpeedCounts = RoundAndCombine(speedCounts,2); WindDirectionCounts = RoundAndCombine(dirCounts); }
public ReadingsSummary( DateTime beginStamp, DateTime endStamp, ReadingValues min, ReadingValues max, ReadingValues mean, ReadingValues sampleStandardDeviation, int count, Dictionary <double, int> tempCounts, Dictionary <double, int> presCounts, Dictionary <double, int> humCounts, Dictionary <double, int> speedCounts, Dictionary <double, int> dirCounts ) { BeginStamp = beginStamp; EndStamp = endStamp; Min = min; Max = max; Mean = mean; SampleStandardDeviation = sampleStandardDeviation; Count = count; TemperatureCounts = RoundAndCombine(tempCounts); PressureCounts = RoundAndCombine(presCounts); HumidityCounts = RoundAndCombine(humCounts); WindSpeedCounts = RoundAndCombine(speedCounts, 2); WindDirectionCounts = RoundAndCombine(dirCounts); }
public void ReadingValuesConverterCacheTestA() { var converterCache = ReadingValuesConverterCache <IReadingValues, ReadingValues> .Default; var inputA = new ReadingValues(0, 0, 0, 0, 0); var expectedA = new ReadingValues(32, 0, 0, 0, 0); Assert.AreEqual( expectedA, converterCache.Get( TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit, SpeedUnit.MetersPerSec, SpeedUnit.MetersPerSec, PressureUnit.Millibar, PressureUnit.KiloPascals ).Convert(inputA) ); var inputB = new ReadingValues(30, 1000, .9, 98, 14); var expectedB = new ReadingValues(86, 100, .9, 98, 14); Assert.AreEqual( expectedB, converterCache.Get( TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit, SpeedUnit.MetersPerSec, SpeedUnit.MetersPerSec, PressureUnit.Millibar, PressureUnit.KiloPascals ).Convert(inputB) ); }
public void ReadingValuesConverterCacheTestA() { var converterCache = ReadingValuesConverterCache<IReadingValues, ReadingValues>.Default; var inputA = new ReadingValues(0, 0, 0, 0, 0); var expectedA = new ReadingValues(32, 0, 0, 0, 0); Assert.AreEqual( expectedA, converterCache.Get( TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit, SpeedUnit.MetersPerSec, SpeedUnit.MetersPerSec, PressureUnit.Millibar, PressureUnit.KiloPascals ).Convert(inputA) ); var inputB = new ReadingValues(30, 1000, .9, 98, 14); var expectedB = new ReadingValues(86, 100, .9, 98, 14); Assert.AreEqual( expectedB, converterCache.Get( TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit, SpeedUnit.MetersPerSec, SpeedUnit.MetersPerSec, PressureUnit.Millibar, PressureUnit.KiloPascals ).Convert(inputB) ); }
public ReadingValuesRange(ReadingValuesRange ranges) { Temperature = new Range(ranges.Temperature); Humidity = new Range(ranges.Humidity); Pressure = new Range(ranges.Pressure); WindSpeed = new Range(ranges.WindSpeed); WindDirection = new Range(ranges.WindDirection); _min = _max = null; }
public ReadingValuesRange( Range temperature, Range humidity, Range pressure, Range windSpeed, Range windDirection ) { Temperature = new Range(temperature); Humidity = new Range(humidity); Pressure = new Range(pressure); WindSpeed = new Range(windSpeed); WindDirection = new Range(windDirection); _min = _max = null; }
/// <summary> /// Constructs a new persistent state store with default values. /// </summary> public PersistentState() { IsDirty = true; MinRangeSizes = new ReadingValues(10, 5, 0.20, 0, 0); MinRangeSizeDewPoint = 10; MinRangeSizeAirDensity = 0.05; HeightAboveSeaLevel = Double.NaN; UserGraphAttribute = default(UserCalculatedAttribute); PressureUnit = default(PressureUnit); TemperatureUnit = default(TemperatureUnit); SpeedUnit = default(SpeedUnit); SelectedDatabases = null; //StationNames = null; AutoSyncClock = false; }
/// <summary> /// Constructs a new persistent state store with default values. /// </summary> public PersistentState() { IsDirty = true; MinRangeSizes = new ReadingValues(10, 5, 0.20, 0, 0); MinRangeSizeDewPoint = 10; MinRangeSizeAirDensity = 0.05; HeightAboveSeaLevel = Double.NaN; UserGraphAttribute = default(UserCalculatedAttribute); PressureUnit = default(PressureUnit); TemperatureUnit = default(TemperatureUnit); SpeedUnit = default(SpeedUnit); SelectedDatabases = null; StationNames = null; AutoSyncClock = false; }
public void ReadingValuesConverterTestA() { var converter = new ReadingValuesConverter<ReadingValues, ReadingValues>( new TemperatureConverter(TemperatureUnit.Celsius,TemperatureUnit.Fahrenheit), new SpeedConverter(SpeedUnit.MetersPerSec, SpeedUnit.MetersPerSec), new PressureConverter(PressureUnit.Millibar, PressureUnit.KiloPascals) ); var inputA = new ReadingValues(0, 0, 0, 0, 0); var expectedA = new ReadingValues(32, 0, 0, 0, 0); Assert.AreEqual(expectedA, converter.Convert(inputA)); var inputB = new ReadingValues(30, 1000, .9, 98, 14); var expectedB = new ReadingValues(86, 100, .9, 98, 14); Assert.AreEqual(expectedB, converter.Convert(inputB)); }
public void ReadingValuesConverterTestA() { var converter = new ReadingValuesConverter <ReadingValues, ReadingValues>( new TemperatureConverter(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit), new SpeedConverter(SpeedUnit.MetersPerSec, SpeedUnit.MetersPerSec), new PressureConverter(PressureUnit.Millibar, PressureUnit.KiloPascals) ); var inputA = new ReadingValues(0, 0, 0, 0, 0); var expectedA = new ReadingValues(32, 0, 0, 0, 0); Assert.AreEqual(expectedA, converter.Convert(inputA)); var inputB = new ReadingValues(30, 1000, .9, 98, 14); var expectedB = new ReadingValues(86, 100, .9, 98, 14); Assert.AreEqual(expectedB, converter.Convert(inputB)); }
public void TestFixtureSetUp() { _values = new[] { new ReadingValues(1.0, 2.0, Double.NaN, 180, 4.0), new ReadingValues(2.0, Double.NaN, Double.NaN, 45, 6.0), new ReadingValues(3.0, 6.0, Double.NaN, 315, Double.NaN), new ReadingValues(Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN) }; var minMaxCalc = new ReadingValueMinMaxCalculator <ReadingValues>(); var meanCalc = new ReadingValuesMeanCalculator <ReadingValues>(); foreach (var readingValues in _values) { minMaxCalc.Proccess(readingValues); meanCalc.Proccess(readingValues); } _min = minMaxCalc.Result.Min; _max = minMaxCalc.Result.Max; _mean = meanCalc.Result; _median = ReadingValues.CreateInvalid(); }
public void ConstructorGetTest() { var values = new ReadingValues( // ReSharper disable RedundantArgumentName temperature: 11.1, pressure: 22.2, humidity: 33.3, windDirection: 44.4, windSpeed: 55.5 // ReSharper restore RedundantArgumentName ); Assert.AreEqual(11.1, values.Temperature); Assert.AreEqual(22.2, values.Pressure); Assert.AreEqual(33.3, values.Humidity); Assert.AreEqual(44.4, values.WindDirection); Assert.AreEqual(55.5, values.WindSpeed); Assert.IsTrue(values.IsValid); Assert.IsTrue(values.IsHumidityValid); Assert.IsTrue(values.IsTemperatureValid); Assert.IsTrue(values.IsPressureValid); Assert.IsTrue(values.IsWindSpeedValid); Assert.IsTrue(values.IsWindDirectionValid); }
public void TestFixtureSetUp() { _values = new[] { new ReadingValues(1.0, 2.0, Double.NaN,180, 4.0), new ReadingValues(2.0, Double.NaN, Double.NaN,45, 6.0), new ReadingValues(3.0, 6.0, Double.NaN,315, Double.NaN), new ReadingValues(Double.NaN,Double.NaN,Double.NaN,Double.NaN,Double.NaN) }; var minMaxCalc = new ReadingValueMinMaxCalculator<ReadingValues>(); var meanCalc = new ReadingValuesMeanCalculator<ReadingValues>(); foreach(var readingValues in _values) { minMaxCalc.Proccess(readingValues); meanCalc.Proccess(readingValues); } _min = minMaxCalc.Result.Min; _max = minMaxCalc.Result.Max; _mean = meanCalc.Result; _median = ReadingValues.CreateInvalid(); }
public static PackedReading GetCurrentReading(DateTime now, Random rand, IReadingValues lastReading) { double averagePressure = 1014.23; double pressureRange = 100.0; double pressure = (rand.NextDouble() * pressureRange) - (pressureRange / 2) + averagePressure; double windDirectionRad = (rand.NextDouble() * Math.PI * 2.0); //double windDirectionDeg = Vector2D.RadiansToDegrees(windDirectionRad); //Vector2D windDirectionVec = new Vector2D((Math.Cos(windDirectionRad) * 2.0), (Math.Sin(windDirectionRad) * 2.0)); //double windDirectionDeg = windDirectionVec.GetNorthRelativeClockwiseAngularDegrees(); double averageWindSpeed = 9; double averageTemp = 51.0; double tempRange = 10.0; double averageHumM = 79; double averageHumA = 58; switch (now.Month) { case 1: { averageWindSpeed = 10.4; averageTemp = 27.5; averageHumM = 77; averageHumA = 66; break; } case 2: { averageWindSpeed = 10.3; averageTemp = 30.5; averageHumM = 75; averageHumA = 62; break; } case 3: { averageWindSpeed = 10.6; averageTemp = 39.8; averageHumM = 76; averageHumA = 57; break; } case 4: { averageWindSpeed = 10.2; averageTemp = 49.9; averageHumM = 74; averageHumA = 51; break; } case 5: { averageWindSpeed = 8.7; averageTemp = 60.0; averageHumM = 77; averageHumA = 52; break; } case 6: { averageWindSpeed = 8; averageTemp = 68.4; averageHumM = 80; averageHumA = 53; break; } case 7: { averageWindSpeed = 7.3; averageTemp = 72.6; averageHumM = 83; averageHumA = 54; break; } case 8: { averageWindSpeed = 6.8; averageTemp = 71; averageHumM = 86; averageHumA = 56; break; } case 9: { averageWindSpeed = 7.4; averageTemp = 64.0; averageHumM = 87; averageHumA = 57; break; } case 10: { averageWindSpeed = 8.3; averageTemp = 52.5; averageHumM = 82; averageHumA = 55; break; } case 11: { averageWindSpeed = 9.7; averageTemp = 42.3; averageHumM = 79; averageHumA = 62; break; } case 12: { averageWindSpeed = 10.1; averageTemp = 32.5; averageHumM = 78; averageHumA = 67; break; } } averageTemp = UnitUtility.ConvertUnit(averageTemp, TemperatureUnit.Fahrenheit, TemperatureUnit.Celsius); tempRange = 4; averageWindSpeed = UnitUtility.ConvertUnit(averageWindSpeed, SpeedUnit.MilesPerHour, SpeedUnit.MetersPerSec) * 4.0; double humidityRange = Math.Abs(averageHumM - averageHumA) * 1.5; double humidity = (humidityRange * rand.NextDouble()) - (humidityRange / 2.0) + ((averageHumM + averageHumA) / 2.0); humidity /= 100.0; double temp = (rand.NextDouble() * tempRange) - (tempRange / 2.0) + averageTemp; double windSpeed = rand.NextDouble(); windSpeed = (windSpeed > 0.5) ? 0 : 4.0 * averageWindSpeed * windSpeed * windSpeed; double windDirectionDeg = (((rand.NextDouble() * 360.0) * 4) + 90) / 5.0; // 4 parts random, 1 part 90 degrees var newValues = new ReadingValues( temp, pressure, humidity, windDirectionDeg, windSpeed ); if (null != lastReading && lastReading.IsValid) { var readings = new[] { lastReading, lastReading, lastReading, newValues }; var meanCalc = new ReadingValuesMeanCalculator <IReadingValues>(); } var stamp = now.Date.Add(new TimeSpan(now.Hour, now.Minute, now.Second)); return(new PackedReading( stamp, new PackedReadingValues(newValues) )); }
public Reading(DateTime timeStamp, ReadingValues values) : base(values) { TimeStamp = timeStamp; }
public static ReadingsSummary Combine <TSummary>(List <TSummary> readings) where TSummary : IReadingsSummary { int totalTempCount = 0; int totalPresCount = 0; int totalHumCount = 0; int totalSpeedCount = 0; int totalDirCount = 0; int totalRecordCount = 0; DateTime minStamp = DateTime.MaxValue; DateTime maxStamp = DateTime.MinValue; double dirSinSum = 0; double dirCosSum = 0; var summary = new ReadingsSummary( default(DateTime), default(DateTime), ReadingValues.CreateInvalid(), ReadingValues.CreateInvalid(), ReadingValues.CreateInvalid(), ReadingValues.CreateInvalid(), 0, new Dictionary <double, int>(), new Dictionary <double, int>(), new Dictionary <double, int>(), new Dictionary <double, int>(), new Dictionary <double, int>() ); if (0 == readings.Count) { return(summary); } summary.Min = new ReadingValues(Double.MaxValue, Double.MaxValue, Double.MaxValue, Double.MaxValue, Double.MaxValue); summary.Max = new ReadingValues(Double.MinValue, Double.MinValue, Double.MinValue, Double.MinValue, Double.MinValue); summary.Mean = new ReadingValues(0, 0, 0, 0, 0); summary.SampleStandardDeviation = new ReadingValues(0, 0, 0, 0, 0); foreach (var reading in readings) { if (reading.BeginStamp < minStamp) { minStamp = reading.BeginStamp; } if (reading.EndStamp > maxStamp) { maxStamp = reading.EndStamp; } if (summary.Min.Temperature > reading.Min.Temperature) { summary.Min.Temperature = reading.Min.Temperature; } if (summary.Min.Pressure > reading.Min.Pressure) { summary.Min.Pressure = reading.Min.Pressure; } if (summary.Min.Humidity > reading.Min.Humidity) { summary.Min.Humidity = reading.Min.Humidity; } if (summary.Min.WindSpeed > reading.Min.WindSpeed) { summary.Min.WindSpeed = reading.Min.WindSpeed; } if (summary.Min.WindDirection > reading.Min.WindDirection) { summary.Min.WindDirection = reading.Min.WindDirection; } if (summary.Max.Temperature < reading.Max.Temperature) { summary.Max.Temperature = reading.Max.Temperature; } if (summary.Max.Pressure < reading.Max.Pressure) { summary.Max.Pressure = reading.Max.Pressure; } if (summary.Max.Humidity < reading.Max.Humidity) { summary.Max.Humidity = reading.Max.Humidity; } if (summary.Max.WindSpeed < reading.Max.WindSpeed) { summary.Max.WindSpeed = reading.Max.WindSpeed; } if (summary.Max.WindDirection < reading.Max.WindDirection) { summary.Max.WindDirection = reading.Max.WindDirection; } int localTempCount = AppendCounts(summary.TemperatureCounts, reading.GetTemperatureCounts()); int localPresCount = AppendCounts(summary.PressureCounts, reading.GetPressureCounts()); int localHumCount = AppendCounts(summary.HumidityCounts, reading.GetHumidityCounts()); int localSpeedCount = AppendCounts(summary.WindSpeedCounts, reading.GetWindSpeedCounts()); int localDirCount = AppendCounts(summary.WindDirectionCounts, reading.GetWindDirectionCounts()); totalTempCount += localTempCount; totalPresCount += localPresCount; totalHumCount += localHumCount; totalSpeedCount += localSpeedCount; totalDirCount += localDirCount; totalRecordCount += reading.Count; summary.Mean.Temperature += reading.Mean.Temperature * localTempCount; summary.Mean.Pressure += reading.Mean.Pressure * localPresCount; summary.Mean.Humidity += reading.Mean.Humidity * localHumCount; summary.Mean.WindSpeed += reading.Mean.WindSpeed * localSpeedCount; double dirRad = reading.Mean.WindDirection * DegToRadFactor; dirSinSum += Math.Sin(dirRad) * localDirCount; dirCosSum += Math.Cos(dirRad) * localDirCount; } if (0 != totalTempCount && 1 != totalTempCount) { summary.Mean.Temperature /= totalTempCount; } if (0 != totalPresCount && 1 != totalPresCount) { summary.Mean.Pressure /= totalPresCount; } if (0 != totalHumCount && 1 != totalHumCount) { summary.Mean.Humidity /= totalHumCount; } if (0 != totalSpeedCount && 1 != totalSpeedCount) { summary.Mean.WindSpeed /= totalSpeedCount; } summary.Mean.WindDirection = (totalDirCount == 0 || Double.IsNaN(dirSinSum) || Double.IsNaN(dirCosSum)) ? Double.NaN : UnitUtility.WrapDegree(Math.Atan2(dirSinSum / totalDirCount, dirCosSum / totalDirCount) * RadToDegFactor); double dev; foreach (var reading in readings) { int localTempCount = reading.GetTemperatureCounts().Sum(c => c.Value); int localPresCount = reading.GetPressureCounts().Sum(c => c.Value); int localHumCount = reading.GetHumidityCounts().Sum(c => c.Value); int localSpeedCount = reading.GetWindSpeedCounts().Sum(c => c.Value); int localDirCount = reading.GetWindDirectionCounts().Sum(c => c.Value); dev = (reading.Mean.Temperature - summary.Mean.Temperature); summary.SampleStandardDeviation.Temperature += (dev * dev) * localTempCount; dev = (reading.Mean.Pressure - summary.Mean.Pressure); summary.SampleStandardDeviation.Pressure += (dev * dev) * localPresCount; dev = (reading.Mean.Humidity - summary.Mean.Humidity); summary.SampleStandardDeviation.Humidity += (dev * dev) * localHumCount; dev = (reading.Mean.WindSpeed - summary.Mean.WindSpeed); summary.SampleStandardDeviation.WindSpeed += (dev * dev) * localSpeedCount; dev = (reading.Mean.WindDirection - summary.Mean.WindDirection); summary.SampleStandardDeviation.WindDirection += (dev * dev) * localDirCount; } if (0 != totalTempCount && 1 != totalTempCount) { summary.SampleStandardDeviation.Temperature = Math.Sqrt(summary.SampleStandardDeviation.Temperature / totalTempCount); } if (0 != totalPresCount && 1 != totalPresCount) { summary.SampleStandardDeviation.Pressure = Math.Sqrt(summary.SampleStandardDeviation.Pressure / totalPresCount); } if (0 != totalHumCount && 1 != totalHumCount) { summary.SampleStandardDeviation.Humidity = Math.Sqrt(summary.SampleStandardDeviation.Humidity / totalHumCount); } if (0 != totalSpeedCount && 1 != totalSpeedCount) { summary.SampleStandardDeviation.WindSpeed = Math.Sqrt(summary.SampleStandardDeviation.WindSpeed / totalSpeedCount); } if (0 != totalDirCount && 1 != totalDirCount) { summary.SampleStandardDeviation.WindDirection = Math.Sqrt(summary.SampleStandardDeviation.WindDirection / totalDirCount); } summary.Count = totalRecordCount; summary.BeginStamp = minStamp; summary.EndStamp = maxStamp; return(summary); }
private static ReadingsSummary FormSummary <T>(DateTime dateRangeLow, DateTime dateRangeHigh, List <T> readings) where T : IReadingValues { int tempCount = 0; int presCount = 0; int humCount = 0; int speedCount = 0; int dirCount = 0; double tempSum = 0; double presSum = 0; double humSum = 0; double speedSum = 0; double dirSinSum = 0; double dirCosSum = 0; var tempCounts = new Dictionary <double, int>(); var presCounts = new Dictionary <double, int>(); var humCounts = new Dictionary <double, int>(); var speedCounts = new Dictionary <double, int>(); var dirCounts = new Dictionary <double, int>(); int count; ReadingValues minValues; ReadingValues maxValues; ReadingValues meanValues; ReadingValues sampleStandardDeviationValues; if (readings.Count > 0) { minValues = new ReadingValues(readings[0]); maxValues = new ReadingValues(readings[0]); double value; for (int i = 0; i < readings.Count; i++) { T reading = readings[i]; if (reading.IsTemperatureValid) { tempCount++; value = reading.Temperature; tempSum += value; if (minValues.Temperature > value) { minValues.Temperature = value; } else if (maxValues.Temperature < value) { maxValues.Temperature = value; } value = Math.Round(value); tempCounts[value] = tempCounts.TryGetValue(value, out count) ? count + 1 : 1; } if (reading.IsPressureValid) { presCount++; value = reading.Pressure; presSum += value; if (minValues.Pressure > value) { minValues.Pressure = value; } else if (maxValues.Pressure < value) { maxValues.Pressure = value; } value = Math.Round(value); presCounts[value] = presCounts.TryGetValue(value, out count) ? count + 1 : 1; } if (reading.IsHumidityValid) { humCount++; value = reading.Humidity; humSum += value; if (minValues.Humidity > value) { minValues.Humidity = value; } else if (maxValues.Humidity < value) { maxValues.Humidity = value; } value = Math.Round(value); humCounts[value] = humCounts.TryGetValue(value, out count) ? count + 1 : 1; } if (reading.IsWindSpeedValid) { speedCount++; value = reading.WindSpeed; speedSum += value; if (minValues.WindSpeed > value) { minValues.WindSpeed = value; } else if (maxValues.WindSpeed < value) { maxValues.WindSpeed = value; } value = Math.Round(value * 2.0) / 2; // round to nearest .5 speedCounts[value] = speedCounts.TryGetValue(value, out count) ? count + 1 : 1; } if (reading.IsWindDirectionValid) { dirCount++; value = reading.WindDirection; //dirSum += value; double dirRad = value * DegToRadFactor; dirSinSum += Math.Sin(dirRad); dirCosSum += Math.Cos(dirRad); if (minValues.WindDirection > value) { minValues.WindDirection = value; } else if (maxValues.WindDirection < value) { maxValues.WindDirection = value; } value = Math.Round(value); dirCounts[value] = dirCounts.TryGetValue(value, out count) ? count + 1 : 1; } } meanValues = new ReadingValues( tempCount == 0 ? Double.NaN : (tempSum / tempCount), presCount == 0 ? Double.NaN : (presSum / presCount), humCount == 0 ? Double.NaN : (humSum / humCount), (dirCount == 0 || Double.IsNaN(dirSinSum) || Double.IsNaN(dirCosSum)) ? Double.NaN : UnitUtility.WrapDegree(Math.Atan2(dirSinSum / dirCount, dirCosSum / dirCount) * RadToDegFactor), speedCount == 0 ? Double.NaN : (speedSum / speedCount) ); sampleStandardDeviationValues = new ReadingValues(0, 0, 0, 0, 0); for (int i = 0; i < readings.Count; i++) { T reading = readings[i]; if (reading.IsTemperatureValid) { value = reading.Temperature - meanValues.Temperature; sampleStandardDeviationValues.Temperature += value * value; } if (reading.IsPressureValid) { value = reading.Pressure - meanValues.Pressure; sampleStandardDeviationValues.Pressure += value * value; } if (reading.IsHumidityValid) { value = reading.Humidity - meanValues.Humidity; sampleStandardDeviationValues.Humidity += value * value; } if (reading.IsWindSpeedValid) { value = reading.WindSpeed - meanValues.WindSpeed; sampleStandardDeviationValues.WindSpeed += value * value; } if (reading.IsWindDirectionValid) { value = reading.WindDirection - meanValues.WindDirection; sampleStandardDeviationValues.WindDirection += value * value; } } sampleStandardDeviationValues.Temperature = Math.Sqrt(sampleStandardDeviationValues.Temperature / tempCount); sampleStandardDeviationValues.Pressure = Math.Sqrt(sampleStandardDeviationValues.Pressure / presCount); sampleStandardDeviationValues.Humidity = Math.Sqrt(sampleStandardDeviationValues.Humidity / humCount); sampleStandardDeviationValues.WindSpeed = Math.Sqrt(sampleStandardDeviationValues.WindSpeed / speedCount); sampleStandardDeviationValues.WindDirection = Math.Sqrt(sampleStandardDeviationValues.WindDirection / dirCount); } else { minValues = ReadingValues.CreateInvalid(); maxValues = ReadingValues.CreateInvalid(); meanValues = ReadingValues.CreateInvalid(); sampleStandardDeviationValues = ReadingValues.CreateInvalid(); } return(new ReadingsSummary( dateRangeLow, dateRangeHigh.Subtract(new TimeSpan(1)), minValues, maxValues, meanValues, sampleStandardDeviationValues, readings.Count, tempCounts, presCounts, humCounts, speedCounts, dirCounts )); }
public new static ReadingAggregate CreateInvalid() { return(new ReadingAggregate(DateTime.MinValue, DateTime.MaxValue, ReadingValues.CreateInvalid(), 0)); }
public ReadingAggregate(DateTime beingStamp, DateTime endStamp, ReadingValues values, int count) : base(values) { TimeRange = new TimeRange(beingStamp, endStamp); Count = count; }