[ncl-talk] pixel data to regular grid data

Zhifeng Yang yangzf01 at gmail.com
Thu Jul 2 00:01:45 MDT 2015


Hi Dennis,
Thank you so much for plotting it out. From the image you sent, it seems
unreasonable around the line of the 0 degree longitude. I am not sure
whether it's the problem caused by the SEVIRI data. So how long will it
take you to plot this image out? I was trying to plot the pixel level
image. Unfortunately, it took me so long time (more than 2 hours). So the
alternative way is that I am interpolating the pixel data into
0.25degree*0.25degree. Here I attached a figure of COT. BTW, do you mind
send me a copy of your code? I'd like to plot the pixel level image. Thank
you, Zhifeng
[image: Inline image 1]



On Tue, Jun 30, 2015 at 2:58 PM, Dennis Shea <shea at ucar.edu> wrote:

> [1] Well the way to go is ESMF regridding. See last comment.
>
> [2] Did you look at the data?  You should.
>
> [3]
> The files are poorly constructed. The whole point of netCDF/HDF is to be
> self describing. This file has issues. Consider the
>
>   f    = addfile("SEV..., "r")
>   lat2d   := f->MSG_Latitude
>   printVarSummary(lat2d)Variable: lat2d
> Type: float
> Total Size: 55115776 bytes
>            13778944 values
> Number of Dimensions: 2
> Dimensions and sizes:   [fakeDim0 | 3712] x [fakeDim1 | 3712]
> Coordinates:
> Number Of Attributes: 1
>   hdf_name :    MSG_Latitude
>
> There is *no* indication of a missing values. Yet ..
>
> printMinMax(lat2d,0)   ===> lat2d: min=-999.999  max=81.2637
>
> -999.999 should be flagged to indicate missing (_FillValue)
>
> lat2d at _FillValue = -999.999
>
> If you now count the number of _FillValue, you would find that 25% of the
> points have missing coordinates. This should be accounted for in any
> regridding.
> dim2d = dimsizes(lat2d)
> kFill    = num(ismissing(lat2d))
> print("kFill="+kFill+"  TotalGridPoints="+product(dim2d))
>
> The data for many variables are packed with scale and offset. Yet there
> is* no indication on the file* of how to unpack the variables. Maybe it is
> ancillary documentation. *If so, that is your responsibility to read and
> account for it in the script.*
>
> *shor*t Cloud_Top_Temperature ( fakeDim69, fakeDim70 )   <= type 'short'
> units :        K
> long_name :    Cloud Top Temperature from in-house  ...
> actual_range : ( -32699, 32657 )
> Num_Fill :     0
> Num_Valid :    13778944
> *valid_range* :  ( 0, 20000 )
> _FillValue :   -999
> scale_factor : 0.009999999776482582   <=========== 0.01
> scale_factor_err :        0
> add_offset :   -15000                               <===========
> add_offset_err :          0
>
> There are 4 ways to unpack
>
>   ctt_1  = CTT at scale_factor*(CTT + CTT at add_offset)
>   ctt_2  = CTT at scale_factor*(CTT - CTT at add_offset)
>   ctt_3  = CTT at scale_factor*CTT  + CTT at add_offset
>   ctt_4  = CTT at scale_factor*CTT   - CTT at add_offset
>
> Print out the min/max of each. Then select the one most appropriate.
> Hint: it is this one
>
>   ctt   := CTT at scale_factor*(CTT + CTT at add_offset)   ; unpacked
>
>       ; valid_range :  ( 0, 20000 ); type short
>  vrng   = CTT at valid_range
>
>       ; set all outside valid range to _FillValue
>  CTT    = where(CTT.ge.vrng(0) .and. CTT.le.vrng(1), CTT, CTT at _FillValue)
>  print("CTT: min="+min(CTT)+"  max="+max(CTT))
>
> Look at the unpacked values. Often, satellite data have outliers. Do you
> want to keep them or not??
>   opt = True
>   opt at PrintStat = True
>   ctt_stat = stat_dispersion(ctt, opt )   ; **READ** documentation
>
> ;*********************************
> ; Use information from stat_dispersion to filter some outliers
> ;*********************************
> ctt  = where(ctt.lt.-80.0 .or. ctt.gt.-5.0, ctt at _FillValue, ctt)
>
> PLOT the raw data ....
>
> You said 0.5x0.5 .... do you really think you can get that from the
> available data?
>
> ====
> Rememer the 1st rule of data processing is the ** know your data **.
>
> On Mon, Jun 29, 2015 at 4:54 PM, Zhifeng Yang <yangzf01 at gmail.com> wrote:
>
>> Hi
>>
>> I am using SEVIRI data now, and trying to interpolate the pixel data into
>> regular grid data, like 0.5deg*0.5. I wrote a procedure to interpolate the
>> data. Unfortunately, I need to do a lot of loops to complete the
>> interpolation, which costs a great amount of time. So the process is super
>> slow. I searched on the NCL website to find a similar function or procedure
>> which has the similar function. However, I did not find one. So do we have
>> this kind of function or procedure in NCL to interpolate the pixel data
>> into regular grid data?
>>
>> Thank you,
>> Zhifeng
>>
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150702/a316b9bd/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 63379 bytes
Desc: not available
Url : http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20150702/a316b9bd/attachment.png 


More information about the ncl-talk mailing list