def rain_stats(self, values, area_km2, td_window, start_date_utc, end_date_utc): """Calculate stats. Expects utc, returns site timezone datetimes... Sorry.""" logger.debug(('Calculating rain stats for' + 'start=%s, end=%s, td_window=%s') % (start_date_utc, end_date_utc, td_window)) if not values: return { 'td_window': td_window, 'max': None, 'start': None, 'end': None, 't': self._t_to_string(None)} td_value = UNIT_TO_TIMEDELTA[values[0]['unit']] max_values = moving_sum(values, td_window, td_value, start_date_utc, end_date_utc) if max_values: max_value = max(max_values, key=lambda i: i['value']) hours = td_window.days * 24 + td_window.seconds / 3600.0 t = herhalingstijd(hours, area_km2, max_value['value']) else: max_value = {'value': None, 'datetime_start_utc': None, 'datetime_end_utc': None} t = None if max_value['datetime_start_utc'] is not None: datetime_start_site_tz = max_value[ 'datetime_start_utc'].astimezone(self.tz) else: datetime_start_site_tz = None if max_value['datetime_end_utc'] is not None: datetime_end_site_tz = max_value[ 'datetime_end_utc'].astimezone(self.tz) else: datetime_end_site_tz = None return { 'td_window': td_window, 'max': max_value['value'], 'start': datetime_start_site_tz, 'end': datetime_end_site_tz, 't': self._t_to_string(t)}
def test_herhalingstijd(self): """Test herhalingstijd calculation.""" self.assertAlmostEqual(25, herhalingstijd(bui_duur=24, oppervlak=50, neerslag_som=62.82))