Welcome back to AWIPS Tips! Today we’re going to take a look at another python-awips example notebook. This notebook walks users through how to request, modify, and visualize Upper Air Sounding data that is originally in BUFR format. Similar to most of our example notebooks, this one begins by creating an EDEX connection and then setting the data type. In this example we use the corresponding bufrua data type to request the BUFR sounding data.
The next step, usually, when requesting data is to specify exactly which parameters you are interested in. This is done in the Setting Additional Request Parameters section of the notebook. In this particular example, we assume we already know exactly what parameters we need. But, if you are just starting out and want to see what all parameters are available, you can get the Available Parameters as shown in our Grid Levels and Parameters example notebook, which boils down to running these lines after setting the data type on the request:
grid_params = DataAccessLayer.getAvailableParameters(request)
This notebook is a good demonstration of the fact that “Location Names” are not always obvious values. With this dataset, location names are actually the WMO station ID values, which then correspond to site locations. While not exactly ideal, we can use this table that defines the stations for each of their WMO IDs. This shows the importance of at least investigating what “LocationNames” are available for the datatype you’re interested in, because the values may be non-intuitive.
Once we’ve set all the parameters, and filtered our data by the most recent time entry, we can investigate the response returned to make sure it looks reasonable. At the time this example notebook was ran, we see the first object just contains the data parameters ‘staElev’, and ‘staName’. Try re-running this section, and change the second line to a different index (ie. 1, 2, -1, etc):
obj = response
Some of the other returned results should include the parameters we defined earlier in the two arrays: MAN_PARAMS and SIGT_PARAMS. It is important to validate you’re receiving the data you expect, before trying to work with it or visualize it.
In order to properly visualize the data, we need to organize it in a manner that makes sense for plotting. In the Prepare Data Objects we see a good example of cycling through all our response objects and re-categorizing the data into new arrays. We then also sort and mask our missing data, so it is handled properly when plotting. Before we can plot this data, we also need to convert units for pressure and temperature, and extract the different components from our wind data.
Finally, we’re ready to visualize the data! Here we take advantage of another Unidata package, MetPy, and create a SkewT and Hodograph. We use our final datasets which have been fully converted and masked to produce our plot.
You can play around with the settings on the plot, and compare it to the output from another similar example notebook of ours.
Thanks for tuning in this week, we hope you learned something new about python-awips! Check back in two weeks for the next blog post.
To view archived blogs, visit the AWIPS Tips blog tag, and get notified of the latest updates from the AWIPS team by signing up for the AWIPS mailing list. Questions or suggestions for the team on future topics? Let us know at email@example.com