[ncl-talk] stat_despersion

ali mughal mughalali655 at gmail.com
Thu Jul 1 04:47:11 MDT 2021


Dear All

When doing a few modifications I am able to obtain the attached images for
the 10th and 95th percentile. Please let me know if the following code is
correct. I am not copying the plotting part since it will prolong the
email.

load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
a=addfile("BEM_April","r")
ta_mean_BEM=a->TA_MEAN
ta=ta_mean_BEM(24:719,0,:,:)
ta=ta-273.16

nlat1=ta(0,:,0)
mlon1=ta(0,0,:)
opt=False

    nlStrt=0
     nlLast=129
     mlStrt=0
     mlLast=210
     nlat=dimsizes(nlat1)
     mlon=dimsizes(mlon1)
    grid_stats = new ((/nlat,mlon,30/), typeof(ta),getFillValue(ta))

    do nl=0,nlLast-1
      do ml=0,mlLast-1
         grid_stats(nl-nlStrt,ml-mlStrt,:) = stat_dispersion(ta(:,nl,ml),
opt)
      end do
   end do


copy_VarCoords(x(:,nlStrt:nlLast,mlStrt:mlLast), grid_stats)
grid_stats at long_name = "stat_dispersion at individual grid points"
printVarSummary(grid_stats)

tenthP=grid_stats(:,:,3)
;print(tenthP)
printVarSummary(tenthP)
nintythP=grid_stats(:,:,13)
printVarSummary(nintythP)



On Thu, Jul 1, 2021 at 3:36 PM Buzan, Jonathan <jbuzan at purdue.edu> wrote:

> Ali,
>
> stat_dispersion produces 30 values, the space for it to be dumped into
> needs to have 30 spaces.
> But you should separate 1 grid cell (like, ta1gridcell= ta(0,0,0)), print
> the values, and operate on that 1 grid cell.
>
> Cheers,
> -Jonathan
>
>
>
>
> On Jul 1, 2021, at 9:33 AM, ali mughal <mughalali655 at gmail.com> wrote:
>
> Thanks for the reply
>
> shouldn't this
> grid_stats(68,160,:) = stat_dispersion( ta(:,68,160), opt)
>
> be changed to
>
> grid_stats(68,160,3) = stat_dispersion( ta(:,68,160), opt)
>
> to obtain the 10th Percentile ?
>
> when I do it I get the following error
>
> fatal:VarVarWrite: Number of dimensions on left hand side does not match
> right hand side
> fatal:["Execute.c":8576]:Execute: Error occurred at or near line 41
>
>
>
> On Thu, Jul 1, 2021 at 3:27 PM Muhammad Omer Mughal <
> m.mughal1 at graduate.curtin.edu.au> wrote:
>
>> Ali
>> This was a suggestion.
>>
>>
>>
>>
>>
>> ------------------------------
>> *From:* Muhammad Omer Mughal <m.mughal1 at graduate.curtin.edu.au>
>> *Sent:* Thursday, 1 July 2021 3:22 PM
>> *To:* ali mughal <mughalali655 at gmail.com>; Buzan, Jonathan <
>> jbuzan at purdue.edu>
>> *Cc:* Ncl-talk <ncl-talk at ucar.edu>
>> *Subject:* Re: [ncl-talk] stat_despersion
>>
>> I used the following script . I also copied the result at the end of the
>> script. Can it be due to the reason that the value is too small
>>
>>
>> a=addfile("BEM_April","r")
>> ta_mean_BEM=a->TA_MEAN
>> ta=ta_mean_BEM(24:719,0,:,:)
>> ta=ta-273.16
>>
>> opt=False
>>       nlat=dimsizes(nlat1)
>>      mlon=dimsizes(mlon1)
>>     grid_stats = new ((/nlat,mlon,30/), typeof(ta), getFillValue(ta))
>>     grid_stats(68,160,:) = stat_dispersion( ta(:,68,160), opt)
>>     printMinMax (grid_stats, False)
>>
>> (0)     Robust Dispersion Statistics: min=-0.552326   max=696
>>
>>
>>
>> ------------------------------
>> *From:* ncl-talk <ncl-talk-bounces at mailman.ucar.edu> on behalf of Buzan,
>> Jonathan via ncl-talk <ncl-talk at mailman.ucar.edu>
>> *Sent:* Thursday, 1 July 2021 2:24 PM
>> *To:* ali mughal <mughalali655 at gmail.com>
>> *Cc:* Ncl-talk <ncl-talk at ucar.edu>
>> *Subject:* Re: [ncl-talk] stat_despersion
>>
>> Hello,
>>
>> You should try 1 grid cell first and print the values and print the
>> stat_dispersion, and double check that you are feeding the array the
>> correct data.
>>
>> -Jonathan
>>
>>
>>
>> On Jul 1, 2021, at 5:52 AM, ali mughal via ncl-talk <
>> ncl-talk at mailman.ucar.edu> wrote:
>>
>> Sorry a correction to the above email is that all values in grid_stats,
>> tenthP and nintythP are 0.
>>
>> On Thu, Jul 1, 2021 at 11:49 AM ali mughal <mughalali655 at gmail.com>
>> wrote:
>>
>> Dear All
>>
>> Here is how I have modified the code according to your suggestions.
>> However, I am getting all values in the output of grid_stats.and when I try
>> plotting the tenth percentile I also have a zero value.  I will be
>> extremely grateful for your support.
>>
>>
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>> a=addfile("wrfout","r")
>> ta_mean_BEM=a->TA_MEAN
>> ta=ta_mean_BEM(24:719,0,:,:)
>> ta=ta-273.16
>> nlat1=ta(0,:,0)
>> mlon1=ta(0,0,:)
>>
>>
>>  nlStrt=0
>>  nlLast=129
>>  mlStrt=0
>>  mlLast=210
>>  nlat=dimsizes(nlat1)
>>  mlon=dimsizes(mlon1)
>>
>>  grid_stats = new ((/nlat,mlon,30/), typeof(ta), getFillValue(ta))
>>     do nl=nlStrt,nlStrt-1
>>       do ml=mlStrt,mlStrt-1
>>
>>          grid_stats(nl-nlStrt,ml-mlStrt,:) = stat_dispersion(
>> ta(:,nl,ml), opt)
>>
>>       end do
>>    end do
>>
>> tenthP=grid_stats(:,:,3)
>>
>> nintythP=grid_stats(:,:,13)
>>
>>
>> type = "png"
>> wks = gsn_open_wks(type,"abc")
>> res =True
>> opts = res
>> opts at cnFillOn = True
>> opts at cnConstFEnableFill           = True
>> opts at cnConstFLabelBackgroundColor = "transparent"
>>
>>
>> pltres = True
>> pltres at NoTitles = True
>> pltres at gsnMaximize = True
>> pltres at FramePlot = False
>> pltres at PanelPlot = True
>> mpres = True
>> mpres at mpOutlineBoundarySets    ="NoBoundaries"
>> contour_lh = wrf_contour(a,wks,tenthP,opts)
>> delete(opts)
>>
>> plot = wrf_map_overlays(a,wks,(/contour_lh/),pltres,mpres)
>> draw(plot)
>> frame(wks)
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Jun 30, 2021 at 10:24 PM Dave Allured - NOAA Affiliate <
>> dave.allured at noaa.gov> wrote:
>>
>> Also, stat_dispersion returns an array of 30 values each time, not a
>> single value.  See function documentation.  So you need to add an extra
>> dimension in the loop calculation, like this:
>>
>>     grid_stats = new ((/ nlat, mlon, 30 /), typeof(rf), getFillValue(rf))
>>
>>     do ...
>>        do ...
>>          grid_stats(nl-nlStrt,ml-mlStrt,:) = stat_dispersion(
>> rf(:,nl,ml), opt)
>>       end do
>>     end do
>>
>> When the loop is complete, the 10th percentile values will be in
>> grid_stats(:,:,3), which is a 2-D grid that you can plot.  The 90th
>> percentile values will be in grid_stats(:,:,13).  Again, refer to the
>> function documentation for the correct index values to access the desired
>> statistics.
>>
>>
>> On Wed, Jun 30, 2021 at 5:13 AM Buzan, Jonathan <jbuzan at purdue.edu>
>> wrote:
>>
>> NCL counts from 0 to n-1, not from 1 to n. So your loop vars need to
>> account for that.
>>
>> Cheers,
>> -Jonathan
>>
>> On Jun 30, 2021, at 1:10 PM, ali mughal via ncl-talk <
>> ncl-talk at mailman.ucar.edu> wrote:
>>
>> Dear community
>> Thank you very much for your helpful comments.
>> As an initial test, I was trying to obtain statistics at all grid points
>> before plotting them. I used the following code
>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>> a=addfile("wrfout","r")
>> ta_mean_BEM=a->TA_MEAN
>> ta=ta_mean_BEM(24:719,0,:,:)
>> rf=ta-273.16
>> nlat1=rf(0,:,0)
>> printVarSummary(nlat)
>> mlon1=rf(0,0,:)
>> printVarSummary(mlon)
>> printVarSummary(rf)
>> opt=False
>>
>>      nlStrt=0
>>      nlLast=129
>>      mlStrt=0
>>      mlLast=210
>>      nlat=dimsizes(nlat1)
>>      mlon=dimsizes(mlon1)
>>
>>     grid_stats = new ((/nlat(0),mlon(0)/), typeof(rf), getFillValue(rf))
>>     printVarSummary(grid_stats)
>>     do nl=0,nlLast
>>       do ml=0,mlLast
>>
>>          grid_stats(nl-nlStrt,ml-mlStrt) = stat_dispersion( rf(:,nl,ml),
>> opt)
>>
>>       end do
>>    end do
>>
>>    copy_VarCoords(rf(:,nlStrt:nlLast,mlStrt:mlLast), grid_stats)
>>    grid_stats at long_name = "stat_dispersion at individual grid points"
>>    printVarSummary(grid_stats)
>>
>> But I obtain the following output from my print statements and the errors
>>
>> Variable: rf
>> Type: float
>> Total Size: 75418560 bytes
>>             18854640 values
>> Number of Dimensions: 3
>> Dimensions and sizes:   [696] x [129] x [210]
>> Coordinates:
>>
>> Variable: grid_stats
>> Type: float
>> Total Size: 108360 bytes
>>             27090 values
>> Number of Dimensions: 2
>> Dimensions and sizes:   [129] x [210]
>> Coordinates:
>> fatal:VarVarWrite: Number of dimensions on left hand side does not match
>> right hand side
>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 46 in
>> file var_Test.ncl
>>
>> fatal:Subscript out of range, error in subscript #1
>> fatal:An error occurred reading rf
>> fatal:["Execute.c":8578]:Execute: Error occurred at or near line 51 in
>> file var_Test.ncl
>>
>> Variable: grid_stats
>> Type: float
>> Total Size: 108360 bytes
>>             27090 values
>> Number of Dimensions: 2
>> Dimensions and sizes:   [129] x [210]
>> Coordinates:
>> Number Of Attributes: 1
>>   long_name :   stat_dispersion at individual grid points
>>
>>
>> On Wed, Jun 30, 2021 at 12:01 AM Dave Allured - NOAA Affiliate <
>> dave.allured at noaa.gov> wrote:
>>
>> Ali, you do not need to make new code to find the 10th and 90th
>> percentile values.  Just use stat_dispersion directly, and take only the
>> output values that you need.  The function is designed to be used in this
>> way.  There is no significant performance impact from ignoring all the
>> other result values.
>>
>> You can easily make a spatial map of 10th or 90th percentile values.
>> Just call stat_dispersion inside a double loop over X and Y dimensions.
>>
>>
>> On Tue, Jun 29, 2021 at 9:23 AM Buzan, Jonathan via ncl-talk <
>> ncl-talk at mailman.ucar.edu> wrote:
>>
>> Hello,
>>
>> I’ve used that function a bunch. If you only want 10th and 90th
>> percentile, you’ll want to use:
>>
>> qsort
>> Which will sort your data within a single grid cell from lowest to
>> highest.
>>
>> And then grab the specific lines of code for 10th and 90th percentiles
>> from the stat_dispersion function in:
>> $NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl
>>
>> If you look at the function, you’ll see that it uses qsort, then goes
>> step by step through calculating all the different applications.
>>
>> Cheers,
>> -Jonathan
>>
>> On Jun 29, 2021, at 5:14 PM, ali mughal via ncl-talk <
>> ncl-talk at mailman.ucar.edu> wrote:
>>
>> Dear NCL community
>>
>> In the following ncl function
>>
>>
>> http://www.ncl.ucar.edu/Document/Functions/Contributed/stat_dispersion.shtml
>>
>> Is it possible to use 10th and 90th percentile values only ?
>>
>> Also can these values be used to develop a spatial map?
>>
>> For example if I want to find the 10th and  90th percentile of air
>> temperature within the urban grid cells only.
>>
>> Can anyone share an example script or point me to any web resource will
>> be appreciated.
>>
>> Thanks in advance
>>
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at mailman.ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> https://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210701/1d4bfcec/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tenth_percentile.png
Type: image/png
Size: 145201 bytes
Desc: not available
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210701/1d4bfcec/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 95thpercentile.png
Type: image/png
Size: 175498 bytes
Desc: not available
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210701/1d4bfcec/attachment-0003.png>


More information about the ncl-talk mailing list