def fcst_times(self, interval=3600, max_forecast=None): ''' Name: awips_fcst_times Purpose: A function to get forecast times for latest model run Inputs: request : A DataAccessLayer request object Outputs: Returns a list of forecast times Keywords: interval : Time step between forecast times in seconds Default is 3600s (1 hour) max_forecast : Maximum forecast time to get, in seconds. Default is last available time ''' cycles = DAL.getAvailableTimes(self._request, True) # Get forecast cycles times = DAL.getAvailableTimes(self._request) # Get forecast times times = DAL.getForecastRun(cycles[-1], times) # Get forecast times in latest cycle if max_forecast is None: max_forecast = times[-1].getFcstTime() # Set max_forecast value default based on model nTimes = max_forecast // interval + 1 # Number of forecast steps to get based on inteval flt_times = [[] for i in range(nTimes) ] # Initialized list of empty lists for forecast times for time in times: # Iterate over all times fcstTime = time.getFcstTime() # Get the valid forecast time if ((fcstTime % interval) == 0) and ( fcstTime < max_forecast ): # If the forecast hour falls on the interval requested AND is before the max forecast time fcstDur = time.getValidPeriod().duration() # Get duration of the forecast period if (fcstDur == 0) or ( fcstDur == interval ): # If instantaneous forecast period OR period covers requested interval index = fcstTime // interval # Index for the times flt_times array flt_times[index].append(time) # Append the time to the list at index return flt_times
available_grids.sort() list(available_grids) request.setLocationNames("NAM12") availableParms = DataAccessLayer.getAvailableParameters(request) availableParms.sort() list(availableParms) request.setParameters("T") availableLevels = DataAccessLayer.getAvailableLevels(request) request.setLevels("0.0SFC") cycles = DataAccessLayer.getAvailableTimes(request, True) times = DataAccessLayer.getAvailableTimes(request) fcstRun = DataAccessLayer.getForecastRun(cycles[-2], times) list(fcstRun) response = DataAccessLayer.getGridData(request, [fcstRun[36]]) for grid in response: data = grid.getRawData() lons, lats = grid.getLatLonCoords() print('Time :', str(grid.getDataTime().getFcstTime() / 3600)) Ta = ((data - 273.15)) DataAccessLayer.changeEDEXHost("edex-cloud.unidata.ucar.edu") dataTypes = DataAccessLayer.getSupportedDatatypes() dataTypes.sort() list(dataTypes) request = DataAccessLayer.newDataRequest()