class RadarGrid(Event): expected_fields = set( [ "sim_time_start", # time start in seconds "sim_time_end", # can be None "radar_dt", # radar datetime at sim_time_start "sync", # not used "multiplier", # not used "type", # not used ] ) def __init__(self, *args, **kwargs): super(RadarGrid, self).__init__(*args, **kwargs) self.radar_dt = iso8601.parse_date(kwargs["radar_dt"]) self.memcdf_name = "precipitation_%s.nc" % random_string(8) self.rain_grid_dt = None # current radar datetime def init(self, subgrid, radar_url_template): self.subgrid = subgrid self.radar_url_template = radar_url_template self.rain_grid = RainGrid( subgrid, url_template=radar_url_template, memcdf_name=self.memcdf_name, size_x=500, size_y=500, initial_value=0.0, ) self.rain_grid_dt = self.radar_dt def update(self, sim_time): """Update grid and apply. Return whether the grid has changed""" self.rain_grid_dt = self.radar_dt + datetime.timedelta( seconds=int(float(sim_time)) - int(float(self.sim_time_start)) ) changed = self.rain_grid.update(dt=self.rain_grid_dt, multiplier=1000) return changed def delete_memcdf(self): if os.path.exists(self.memcdf_name): os.remove(self.memcdf_name) def __str__(self): return "rain grid %s (%r-%r)" % (self.radar_dt.strftime("%Y-%m-%d"), self.sim_time_start, self.sim_time_end)