Closed kmuehlbauer closed 7 years ago
I will try to get some example data posted eventually, but it's gonna be a while. Many other irons in the fire. I would just recommend you use your own files and adjust the notebook as needed.
@tjlang We would try to adjust the notebook to use our files. Just to be sure, is this assumption correct:
So you are just extracting corrected reflectivity and corrected velocity from the radar object and adding these as new grid variables 'DT' and 'VT', right.
Anyway, it would be useful to have the example data, to check correct installation/processing.
So DT
and VT
are the names for the reflectivity/velocity fields to be merged into the 3DVAR wind analysis. MultiDop
requires all radar volumes to use common names for these two fields, hence the need to create renamed copies. One thing you can customize, however, is what the common names must be. The refl
and vt
keywords in the *.dda input script (created by multidop.parameters.ParamFile
) can set what the common names are.
@tjlang We'll try to get along. Unfortunately our radar volumes have different gate spacing per scan, so that they can't be nicely pressed into pyart-cfradial data model.
We trying to implement a workflow to create the needed netcdf grid files from our radar data with python. To get an impression of the netcdf-file insides, I took some example cfradial-volume from TITAN and created the netcdf-grid file as in the example.
netcdf cfradial_grid_volume {
dimensions:
time = UNLIMITED ; // (1 currently)
z = 20 ;
y = 151 ;
x = 151 ;
nradar = 1 ;
nradar_str_length = 8 ;
variables:
double time(time) ;
time:long_name = "Time of grid" ;
time:units = "seconds since 2008-06-04T00:15:03Z" ;
time:standard_name = "time" ;
time:calendar = "gregorian" ;
double x(x) ;
x:long_name = "X distance on the projection plane from the origin" ;
x:units = "m" ;
x:standard_name = "projection_x_coordinate" ;
x:axis = "X" ;
double y(y) ;
y:long_name = "Y distance on the projection plane from the origin" ;
y:units = "m" ;
y:standard_name = "projection_y_coordinate" ;
y:axis = "Y" ;
double z(z) ;
z:long_name = "Z distance on the projection plane from the origin" ;
z:units = "m" ;
z:standard_name = "projection_z_coordinate" ;
z:axis = "Z" ;
z:positive = "up" ;
double origin_latitude(time) ;
origin_latitude:long_name = "Latitude at grid origin" ;
origin_latitude:units = "degrees_north" ;
origin_latitude:standard_name = "latitude" ;
origin_latitude:valid_min = -90. ;
origin_latitude:valid_max = 90. ;
double origin_longitude(time) ;
origin_longitude:long_name = "Longitude at grid origin" ;
origin_longitude:units = "degrees_east" ;
origin_longitude:standard_name = "longitude" ;
origin_longitude:valid_min = -180. ;
origin_longitude:valid_max = 180. ;
double origin_altitude(time) ;
origin_altitude:long_name = "Altitude at grid origin" ;
origin_altitude:units = "m" ;
origin_altitude:standard_name = "altitude" ;
int projection ;
projection:proj = "pyart_aeqd" ;
projection:_include_lon_0_lat_0 = "true" ;
int ProjectionCoordinateSystem ;
ProjectionCoordinateSystem:latitude_of_projection_origin = 22.5266990661621 ;
ProjectionCoordinateSystem:longitude_of_projection_origin = 120.433502197266 ;
ProjectionCoordinateSystem:_CoordinateTransformType = "Projection" ;
ProjectionCoordinateSystem:_CoordinateAxes = "x y z time" ;
ProjectionCoordinateSystem:_CoordinateAxesTypes = "GeoX GeoY Height Time" ;
ProjectionCoordinateSystem:grid_mapping_name = "azimuthal_equidistant" ;
ProjectionCoordinateSystem:semi_major_axis = 6370997. ;
ProjectionCoordinateSystem:inverse_flattening = 298.25 ;
ProjectionCoordinateSystem:longitude_of_prime_meridian = 0. ;
ProjectionCoordinateSystem:false_easting = 0. ;
ProjectionCoordinateSystem:false_northing = 0. ;
double radar_latitude(nradar) ;
radar_latitude:long_name = "Latitude of radars used to make the grid." ;
radar_latitude:units = "degrees_north" ;
double radar_longitude(nradar) ;
radar_longitude:long_name = "Longitude of radars used to make the grid." ;
radar_longitude:units = "degrees_east" ;
double radar_altitude(nradar) ;
radar_altitude:long_name = "Altitude of radars used to make the grid." ;
radar_altitude:units = "m" ;
double radar_time(nradar) ;
radar_time:long_name = "Time in seconds of the volume start for each radar" ;
radar_time:units = "seconds since 2008-06-04T00:15:03Z" ;
radar_time:calendar = "gregorian" ;
char radar_name(nradar, nradar_str_length) ;
radar_name:long_name = "Name of radar used to make the grid" ;
float DT(time, z, y, x) ;
DT:long_name = "Computed Horizontal Co-polar Reflectivit" ;
DT:units = "dBZ" ;
DT:_FillValue = -32768.f ;
DT:standard_name = "equivalent_reflectivity_factor" ;
DT:threshold_field_name = "" ;
DT:threshold_value = -9999. ;
DT:sampling_ratio = 1. ;
DT:grid_mapping = "grid_mapping" ;
DT:coordinates = "time range" ;
DT:missing_value = -32768. ;
float VT(time, z, y, x) ;
VT:long_name = "Computed Velocity" ;
VT:units = "m/s" ;
VT:_FillValue = -32768.f ;
VT:standard_name = "radial_velocity_of_scatterers_away_from_instrument" ;
VT:threshold_field_name = "" ;
VT:threshold_value = -9999. ;
VT:sampling_ratio = 1. ;
VT:grid_mapping = "grid_mapping" ;
VT:coordinates = "time range" ;
VT:missing_value = -32768. ;
float ROI(time, z, y, x) ;
ROI:long_name = "Radius of influence for mapping" ;
ROI:units = "m" ;
ROI:_FillValue = -9999.f ;
ROI:standard_name = "radius_of_influence" ;
ROI:least_significant_digit = 1LL ;
double AZ(time, z, y, x) ;
AZ:long_name = "Azimuth" ;
AZ:units = "degrees from north" ;
AZ:standard_name = "Azimuth" ;
AZ:missing_value = -32768. ;
double EL(time, z, y, x) ;
EL:long_name = "Azimuth" ;
EL:units = "degrees from north" ;
EL:standard_name = "Azimuth" ;
EL:missing_value = -32768. ;
// global attributes:
:Conventions = "CF/Radial instrument_parameters radar_parameters radar_calibration geometry_correction" ;
:version = "1.2" ;
:title = "TIMREX" ;
:institution = "" ;
:references = "" ;
:source = "" ;
:history = "" ;
:comment = "" ;
:instrument_name = "SPOLRVP8" ;
:site_name = "" ;
:scan_name = "" ;
:scan_id = 0 ;
:platform_is_mobile = "false" ;
:n_gates_vary = "false" ;
:volume_number = 36LL ;
:platform_type = "fixed" ;
:instrument_type = "radar" ;
:primary_axis = "axis_z" ;
Just to be on the safe side, I didn't found a reference to the "ROI"-variable created via pyart.io.write_grid()
within dda.c
. Assuming then, that this is not needed.
It seems I need to move this into another issue.
In terms of what the DDA
engine needs from the pyart
file, see https://github.com/nasa/MultiDop/blob/master/src/DDA.c#L1395.
In terms of what else the original input grids need in order for the output grids to be readable by pyart
, see https://github.com/nasa/MultiDop/blob/master/multidop/grid_io.py. multidop
leverages the input Grid
objects to transfer the DDA
output to a file compliant with pyart
.
Right now, it looks like your file is OK. Rule of thumb though is if pyart
can read the file, then it should probably be good with multidop
.
@tjlang Thanks for the explanation. I think we can work around the cfradial issue.
Added the original UF files to power the sample workflow notebook as part of https://github.com/nasa/MultiDop/pull/10.
Thanks @tjlang, this will help a lot.
We are trying to get a first impression of the MultiDop-package by running the example notebook.
Unfortunately there is no hint where the example data files can be found. Is there any chance to get the example data files somewhere for download?