[ncl-talk] byte2flt

Laura Fowler laura at ucar.edu
Mon Jul 17 09:42:32 MDT 2023


Hi Dave:
Many thanks for the email you sent me last Friday. You were completely
right when you wrote that the data set was originally written as unsigned
bytes. This definitely agreed with the min and max values of the
Reflectivity data that I was getting. I think that I was slowly getting
there but you definitely helped me speed up the process. Always nice to
start Monday with something accomplished over the weekend.

Instead of applying the different steps that you suggested, I simply used
the function tounsigned before the function byte2flt. This led to getting
the correct min and max of for the radar reflectivity, and reflectivity
maps consistent with the publication I was using as a reference.

Really appreciate your help. Thanks again,
Laura



On Fri, Jul 14, 2023 at 6:51 PM Dave Allured - NOAA Affiliate <
dave.allured at noaa.gov> wrote:

> A long time, ago, there was ambiguity within Netcdf and NCL, as to whether
> type "byte" was signed or unsigned.  Eventually everyone settled on
> "signed".  NCL is attempting to interpret this byte array as signed, but
> there are some clues that this file may have been originally written as
> unsigned bytes.  That would cause NCL to misinterpret the data.  This would
> also be consistent with your symptoms.
>
> Unsigned maps into signed like this.  0 to 127 map straight across to 0 to
> 127.  128 to 255 maps to -128 to -1.  To unscramble, try this custom
> formula (untested).  It is important to unscramble BEFORE unpacking with
> scale and offset.
>
> dBZ_b = f->Reflectivity          ! read from file
> dbz2 = toshort (dBZ_b)           ! convert to a type that can hold full
> positive range
> dbz3 = where ( (dbz2 .lt. 0), (dbz2 + 256), dbz2)    ! decode negatives
> into positives
> copy_VarMeta (dBZ_b, dbz3)     ! restore original metadata
> dbz4 = short2flt (dbz3)               ! unpack with scale and offset
> printMinMax (dbz4,0)
>
> If that doesn't come out right, then use printVarSummary and printMinMax
> at every step, to see what is going on.  Another diagnostic would be to
> count discrete original values, and examine their distribution curve.
>
>
> On Fri, Jul 14, 2023 at 5:57 PM Laura Fowler via ncl-talk <
> ncl-talk at mailman.ucar.edu> wrote:
>
>> Hello:
>>
>> I am trying to read Nexrad Reflectivity data from a netCDF file in which
>> Reflectivity has a "byte" format and is defined as:
>>
>> radar-data/20120611> ncdump -h 20120611T1900Z.nc
>>
>> byte Reflectivity(Altitude, Latitude, Longitude) ;
>>
>> Reflectivity:long_name = "Radar Reflectivity" ;
>>
>> Reflectivity:units = "dBZ" ;
>>
>> Reflectivity:scale_factor = 0.5f ;
>>
>> Reflectivity:add_offset = -33.f ;
>>
>> Reflectivity:missing_value = 0b ;
>>
>> A printVarSummary of the dBZ_b variable that points to Reflectivity shows:
>>
>> Variable: dBZ_b
>>
>> Type: byte
>>
>> Total Size: 10064208 bytes
>>
>>             10064208 values
>>
>> Number of Dimensions: 3
>>
>> Dimensions and sizes: [Altitude | 24] x [Latitude | 539] x [Longitude |
>> 778]
>>
>> Coordinates:
>>
>>             Altitude: [ 1..24]
>>
>>             Latitude: [30.94..41.7]
>>
>>             Longitude: [260.12..275.66]
>>
>> Number Of Attributes: 6
>>
>>   long_name : Radar Reflectivity
>>
>>   units : dBZ
>>
>>   scale_factor : 0.5
>>
>>   add_offset : -33
>>
>>   missing_value : 0
>>
>>   _FillValue : 0
>>
>> After reading the section on "Coercion of types", and for now ignoring
>> scale_factor and add_offset, I simply used the tofloat function to output
>> the max and min values of dBZ_b. I got:
>>
>> (0) --- max dBZ_b = 127
>>
>> (0) --- min dBZ_b = -128
>>
>>
>> Finally, using scale_factor and add_offset, I used the function byte2flt
>> to convert dBZ_b to a float and output the max and min value of dBZ_s, or:
>>
>> dBZ_s = byte2flt(dBZ_b)
>>
>> (0) --- max dBZ_s = 30.5
>>
>> (0) --- min dBZ_s = -97
>>
>> The maximum value of dBZ_s is much lower than I expected (the maximum
>> value of dBZ_s should actually be 58.5 dBZ, as derived by an IDL script
>> used to plot the nexrad Reflectivity data for a peer-review publication).
>>
>> Can somebody help me figure out why I am getting values that are too low
>> relative to what I am expecting. I also tried to bypass the byte2flt
>> function and use the scale_factor and add_offset variables (x_float =
>> x_byte*scale + offset), but to no avail.
>>
>> If you interested to help me out, my working directory on cheyenne is  /glade/u/home/laura/fromYunYao/radar-data/20120611;
>> the data file is 20120611T1900Z.nc; the ncl script is read.ncl; and the
>> main idl script is nexrad.pro.
>>
>> Many thanks,
>> Laura
>> --
>>
>> !-------------------------------------------------------------------------------------------------------------
>> Laura D. Fowler
>>
>> Mesoscale and Microscale Meteorology Division (MMM)
>> National Center for Atmospheric Research
>> P.O. Box 3000, Boulder CO 80307-3000
>>
>> e-mail: laura at ucar.edu
>> phone: 303-497-1628
>>
>> !-------------------------------------------------------------------------------------------------------------
>>
>

-- 
!-------------------------------------------------------------------------------------------------------------
Laura D. Fowler

Mesoscale and Microscale Meteorology Division (MMM)
National Center for Atmospheric Research
P.O. Box 3000, Boulder CO 80307-3000

e-mail: laura at ucar.edu
phone: 303-497-1628

!-------------------------------------------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20230717/494bebd6/attachment.htm>


More information about the ncl-talk mailing list