nasa / MultiDop

Multiple-Doppler Radar Analysis Toolkit (MultiDop)
Other
39 stars 36 forks source link

Example Data Missing #7

Closed kmuehlbauer closed 7 years ago

kmuehlbauer commented 7 years ago

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?

tjlang commented 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.

kmuehlbauer commented 7 years ago

@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.

tjlang commented 7 years ago

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.

kmuehlbauer commented 7 years ago

@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.

tjlang commented 7 years ago

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.

kmuehlbauer commented 7 years ago

@tjlang Thanks for the explanation. I think we can work around the cfradial issue.

tjlang commented 7 years ago

Added the original UF files to power the sample workflow notebook as part of https://github.com/nasa/MultiDop/pull/10.

kmuehlbauer commented 7 years ago

Thanks @tjlang, this will help a lot.