pyart icon indicating copy to clipboard operation
pyart copied to clipboard

Py-ART ideas from the 2015 AMS radar conference

Open jjhelmus opened this issue 9 years ago • 12 comments

This is a meta-issue for keeping track of ideas that were discussed with Py-ART users and supporters at the 2015 AMS radar conference. Expect this top level comment to be edited to reflect changes as development progressed. Some of these issue already have their own issue in the tracker, I'll add links to these when possible.

Please provide any additions to this list. Feel free to share opinions as to the priority of any of these ideas.

Idea for Py-ART from the conference broken down by area

pyart.io

  • [x] UF writing (#186, completed in #388)
  • [x] Reading NEXRAD Level II message 1 format (#352, complete in #455)
  • [x] Reading single field/sweep from NEXRAD Level II (complete in #455)
  • [x] Interpolating NEXRAD data to a uniform gate spacing when not-constant (#152, #252, complete in #455)
  • [ ] Full support for reading ODIM_H5 files (#131)
  • [ ] Writing ODIM_H5 files.

pyart.correct

  • [x] Correct unfolded velocities in the region based dealiasing algorithm using a sonde profile or previously unfolded field.
  • [ ] Updated phase processing code using self consistency or other additional constraints (#125)

pyart.graph

  • [x] Default colormaps based on field name (completed in #464).
  • [x] Default luminosity limits based on field name (completed in #464).
  • [x] Categorical colorbars. (See discussion below and #468)
  • [x] Expose calculation of inputs to pcolormesh in the public API. (See discussion below and #463)

pyart.grid

  • [ ] Three dimensional linear interpolation based gridding as used by SPRINT.
  • [x] Nearest neighbor gridding (#182)
  • [ ] Distance weighted gridding where the weighting distance in x, y and z can be specified independently
  • [ ] Support for creating non-uniform grids (#350)

pyart.retrieve

  • [ ] QPE equaltion, R(A), R(KDP), etc.
  • [ ] VAD, VVT and DVAD retrievals. Some of these are available in SingleDop

Other

  • [x] Quasi vertical profiles, QVP.
  • [ ] Object for iteration over radar objects by specifying a list of files (useful for QVP).
  • [X] Cross section tool for making building RHI like scans from PPI data (completed in #380)
  • [ ] Radar composibility (add, remove, insert sweeps or rays) (related #127 and #242)
  • [ ] Create conda packages for other radar tools (RSL, wradlib, RadX, PyTDA, SingleDop, ARTView, etc). (Tracking progress in #505)
  • [ ] GridFilter class.
  • [ ] GateFilter method to include/exclude based upon height of gate.

Documenation

  • [x] Add links to short course materials. (complete #391)

jjhelmus avatar Oct 01 '15 16:10 jjhelmus

Should mention that this list is in no way a indication that all of these ideas will be implemented. Rather that they are being considered.

jjhelmus avatar Oct 01 '15 16:10 jjhelmus

I can't find this anymore, but in some issue it was discussed about Grids with non-uniform gates. You may want to add this as a topic there, I think it is worth considering.

gamaanderson avatar Oct 01 '15 17:10 gamaanderson

Do you mean radars or grid objects?

On 10/1/15 12:38 PM, Anderson wrote:

I can't find this anymore, but in some issue it was discussed about Grids with non-uniform gates. You may want to add this as a topic there, I think it is worth considering.

— Reply to this email directly or view it on GitHub https://github.com/ARM-DOE/pyart/issues/390#issuecomment-144796064.

scollis avatar Oct 01 '15 17:10 scollis

I mean grid objects, i.e. non uniform "x_disp", "y_disp" and "z_disp".

Radar objects being based in CfRadial should already accept non-uniform range and time axes; there may be some function that presuppose uniformity in Radar, but I would classify that (if not documented) as a Bug.

gamaanderson avatar Oct 01 '15 17:10 gamaanderson

Yes. This is work that WILL be done. Either part of Py-ART or something compatible with Py-ART. I am about to start a new project that will work with grid data in a variety of coordinate systems and attempt to make them inter-compatible. eg take a lat lon grid in sigma (terrain following) coordinates and easily project to x/y in height etc...

On 10/1/15 12:56 PM, Anderson wrote:

I mean grid objects, i.e. non uniform "x_disp", "y_disp" and "z_disp".

Radar objects being based in CfRadial should already accept non-uniform range and time axes; there may be some function that presuppose uniformity in Radar, but I would classify that (if not documented) as a Bug.

— Reply to this email directly or view it on GitHub https://github.com/ARM-DOE/pyart/issues/390#issuecomment-144800916.

scollis avatar Oct 01 '15 18:10 scollis

Starting a new progress is also good, them we can make a fresh start and extend py-ART later. Of course you are following issues #285 and #294, there are important considerations there.

gamaanderson avatar Oct 01 '15 18:10 gamaanderson

Issue #350 covers non-uniform grids. I'll add a link in the top comment.

jjhelmus avatar Oct 01 '15 18:10 jjhelmus

Closing a few NEXRAD related ideas with the merging of PR #455

jjhelmus avatar Jan 18 '16 19:01 jjhelmus

Expose calculation of inputs to pcolormesh in the public API.

Once PR #463 is merged this will be possible using the get_field and get_gate_x_y_z methods of the Radar class. For example to plot a PPI:

import matplotlib.pyplot as plt
import pyart

radar = pyart.io.read('XSW110520105408.RAW7HHF')
data = radar.get_field(0, 'reflectivity')
x, y, z = radar.get_gate_x_y_z(0, edges=True)
plt.pcolormesh(x, y, data, vmin=-32, vmax=64.)
plt.show()

You still need to choose the correct pair from x, y, or z, but I think this should be sufficient.

jjhelmus avatar Jan 28 '16 22:01 jjhelmus

With PR #468 merged it is possible to create categorical or non-linear colorbars by specifying the norm keyword. For example:

import matplotlib as mpl
import matplotlib.pyplot as plt
import pyart

radar = pyart.io.read('KLOT20130418_043539_V06.gz')

bounds = [-7.5, 12.25, 22.5, 35.5, 77.5]
cmap = mpl.cm.get_cmap('pyart_NWSRef')
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
display = pyart.graph.RadarDisplay(radar)
display.plot('reflectivity', norm=norm, cmap=cmap)
plt.show()

figure_1-1

jjhelmus avatar Feb 02 '16 21:02 jjhelmus

This is great! I just implemented something similar in AWOT using a 'discrete_cmap_levels' keyword.

nguy avatar Feb 03 '16 19:02 nguy

Updated list to indicate that field specific colormaps and luminosity limits were added by PR #464

jjhelmus avatar Mar 17 '16 17:03 jjhelmus