/// <summary>
/// Calculate the offsets for every series.
/// </summary>
/// <remarks>The temperature for every cell is computed using all stations that affect the cell.
/// See Cell.DefineStations() for details.</remarks>
/// <returns>Number of series offsets calculated if successful; -ve for error code</returns>
protected int CalculateSeriesOffsets()
{
OpenTemp.WriteLine(string.Format("Calculating series offsets for every series..."));
int nSeries = 0; // Loop over every series
foreach (Station station in _stations.Values)
{
foreach (byte seriesNumber in station.SeriesNumbers)
{
SortedList<DateTime, float?> readings = station.GetReadings(seriesNumber);
// Loop over every month
int nMonths = 0;
float difference = 0.0f;
foreach (DateTime date in readings.Keys)
{
if (!readings[date].HasValue) continue;
if (_monthlyAverages.ContainsKey(date))
{
difference += _monthlyAverages[date] - readings[date].Value;
nMonths++;
}
}
// Store series offset
if (nMonths > 0)
{
station.SetSeriesOffset(seriesNumber, difference / nMonths);
nSeries++;
}
}
}
// Done
OpenTemp.WriteLine(string.Format(" Series offsets completed for {0} series", nSeries));
return nSeries;
}