Re: passing arguments, contouring

From: Mary Haley <haley_at_nyahnyahspammersnyahnyah>
Date: Mon Jul 01 2013 - 12:11:50 MDT

Oh, sorry, I see the problem! You have:

>>> sfXArray = lon1
>>> sfYArray = lat1

This has absolutely no affect. You need:

>>> res@sfXArray = lon1
>>> res@sfYArray = lat1

--Mary

On Jun 29, 2013, at 11:06 PM, Jeremy Winick wrote:

> Mary,
> Sorry for not replying sooner, I have been at a meeting amongst other things.
> I ran the script below and as you can see there are statement printVarSummary for both
> lat1 and lon1 before I call the plot routines. These indicate (output below) that these are 1-D
> and of the same length. I presume it uses these arrays for the lat and lon (lat1, lon1) since these
> are what sfYArray and sfXArray are set equal to. Am I missing something?
>
> Variable: lon1
> Type: float
> Total Size: 1908 bytes
> 477 values
> Number of Dimensions: 1
> Dimensions and sizes: [477]
> Coordinates:
> Number Of Attributes: 2
> units : degrees_east
> _FillValue : 9.96921e+36
>
> Variable: lat1
> Type: float
> Total Size: 1908 bytes
> 477 values
> Number of Dimensions: 1
> Dimensions and sizes: [477]
> Coordinates:
> Number Of Attributes: 2
> units : degrees_north
> _FillValue : 9.96921e+36
> (0) Error: scalar_field: If the input data is 1-dimensional, you must set sfXArray and sfYArray to 1-dimensional arrays of the same length.
> warning:create: Bad HLU id passed to create, ignoring it
>
> “What is wanted is not the will to believe,
> but the wish to find out, which is its exact opposite”
> ... Bertrand Russell
>
> On 06/24/2013 08:50 AM, Mary Haley wrote:
>> Hi Jeremy,
>>
>> Sorry for the delayed response. I was in a workshop then on vacation.
>>
>>
>> On Jun 14, 2013, at 4:48 PM, Jeremy Winick wrote:
>>
>>>
>>> Mary,
>>> Thank you for the information. There are many ways of "skinning the cat"
>>> and as I work more with NCL and get out of the Matlab think, I will feel
>>> more comfortable. The use of str_get_field seems a way to get the one
>>> field (column) of a 24 column long (60000 line) data file that isn't
>>> numeric, but then using it many more times to get other fields then
>>> string to float seems inefficient. The readAsciiTable gets everything
>>> except the one string field (which happens to be a month-day
>>> abbreviation (such as Feb12)). Could I use the str_get_field to extract
>>> the one column, then use readAsciiTable for the rest? Does a file need
>>> to be closed or rewound in an NCL script to do this?
>> You should be able to do this, and you don't need to close or rewind
>> the file. NCL doesn't have a concept (yet) of doing this with ASCII files.
>>
>>> I will try the contour plot with the one-dim temperature field and the
>>> sfYArray and sFXarray to the lat and lon variables. Do these still need
>>> the units "degrees_north" and "degrees_east" ?
>> Yes, they do. It may still work, but you will get warnings if you don't do this.
>>
>>> The first attempt this
>>> way didn't work, I get:
>>> (0) Error: scalar_field: If the input data is 1-dimensional, you must
>>> set sfXArray and sfYArray to 1-dimensional arrays of the same length.
>>> warning:create: Bad HLU id passed to create, ignoring it
>>>
>>> As far as I can tell, I have set the sfYArray and sfXArray, but I don't
>>> understand the warning about bad HLU id passed. The script seems to be
>>> hanging after this error message, and I hit control-C to kill it.
>> The error appears to be coming from the fact that you are contouring 1D data.
>> When you do this, NCL is assuming that your lat/lon arrays are also 1D of
>> the same length. The error is indicating that your lat/lon arrays are either
>> not 1D, or they are not the same length.
>>
>> --Mary
>>
>>
>>> Here is the code, with portions that set up the grid from natgrid
>>> commented out.
>>>
>>> ; first test ncl script to read in ascii SABER data, say
>>> Monx-Mony_year_strat_v2.0_v35_g30-84N_ex_prf_dp1.data
>>> ; then create ncl variables for temperatures at various pressure levels,
>>> associated lat and lon
>>> ; suggestion in this script modify so not using natgrip, but use
>>> sfYArray set to original lat points and sfXArray set to orig lon pts.
>>> ; then try contour plot on polar stereographic map
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
>>> load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
>>> ; the contour map routines such as gsn_csm_contour_map_polar seem to
>>> want data to be 2-D and have 1-D lat and long coordinate
>>> ; arrays attached, and longitude coord array must have valid "units"
>>> attribute of something like "degrees_east" (similarly for lat)
>>> ; lat array same length as leftmost dimension of the 2-D array and
>>> longitude array must be same as the rightmost dim of data (2-d array).
>>> ; thus raw satellite data does not do this- it needs to be gridded
>>> ; 9 June 2013 works for hand-wired separating out first day. Next choose
>>> day or days by input parameter. Choose level by input parameter?
>>> : There is an ncl function day_of_year(year:integer, month:integer,
>>> day:integer)
>>> begin
>>> diri="/mnt/data/saber1/ascii/v2.0/"
>>> system("cd diri")
>>> system("pwd")
>>> ncol=13
>>> data =
>>> readAsciiTable("Feb01-Mar01_2013_strat_v2.0_v35_g30-84N_exc_prf_dp1.dat",ncol,"float",27)
>>> printVarSummary(data)
>>> latd = data(:,5)
>>> printVarSummary(latd)
>>> ; print(lat)
>>> lond = data(:,6)
>>> doy = data(:,2)
>>> t50mb = data(:,9)
>>> t20mb = data(:,10)
>>> t10mb = data(:,11)
>>> t5mb = data(:,12)
>>> ; test for essentially the first day, 1-477 profiles
>>> t1 = t50mb(0:476)
>>> lat1 = latd(0:476)
>>> lon1 = lond(0:476)
>>> do n=0,476
>>> if(lon1(n).lt.0.0) then
>>> lon1(n) = 360.0 + lon1(n)
>>> end if
>>> end do
>>> ; create lat-lon grid
>>> ; latp= fspan(30, 85, 12)
>>> ; printVarSummary(latp)
>>> ; lonp= fspan(0,360,37)
>>> ; use natgrid to grid original satellite data
>>> ; tgrid=natgrid(lat1,lon1,t1,latp, lonp)
>>> ; write_matrix(tgrid,"12f7.2", False)
>>> ; print(latp)
>>> ; print(lonp)
>>> ; printVarSummary(tgrid)
>>> ; printVarSummary(latp)
>>> ; printVarSummary(lonp)
>>> ; tgrid!0 = "lat"
>>> ; tgrid!1 = "lon"
>>> ; tgrid@units='Degrees K"
>>> lat1@units = "degrees_north"
>>> lon1@units = "degrees_east"
>>>
>>> ; tgrid&lat = latp
>>> ; tgrid&lon = lonp
>>> sfXArray = lon1
>>> sfYArray = lat1
>>> printVarSummary(t1)
>>> printVarSummary(lon1)
>>> printVarSummary(lat1)
>>> wks = gsn_open_wks("x11", "polar")
>>> res = True
>>> res@gsnAddCyclic = False
>>> res@gsnPolar = "NH"
>>> res@mpMinLatF = 30
>>> res@cnFillOn = True
>>>
>>> gsn_define_colormap(wks,"gui_default")
>>> plot = gsn_csm_contour_map_polar(wks,t1,res)
>>> wks = gsn_open_wks("ps", "polar")
>>> res = True
>>> res@gsnAddCyclic = False
>>> res@gsnPolar = "NH"
>>> res@mpMinLatF = 30
>>> res@cnFillOn = True
>>>
>>> gsn_define_colormap(wks,"gui_default")
>>> plot = gsn_csm_contour_map_polar(wks,t1,res)
>>> wks = gsn_open_wks("png", "polar")
>>> ; note in above wks open "polar" is file name for output , this case
>>> would be polar.png
>>> ; make name specific to case so each new plot has distinct name
>>> res = True
>>> res@gsnAddCyclic = False
>>> res@gsnPolar = "NH"
>>> res@mpMinLatF = 30
>>> res@cnFillOn = True
>>> gsn_define_colormap(wks,"gui_default")
>>> plot = gsn_csm_contour_map_polar(wks,t1,res)
>>> end
>>>
>>>
>>> Being a FORTRAN first user, it takes some getting used to variables
>>> indices starting at zero. There are inconsistencies, because then when
>>> you have functions like the get field the fields start at 1 not zero.
>>> Why not be consistent? (I guess no language is).
>>>
>>> Jeremy
>>>
>>> “What is wanted is not the will to believe,
>>> but the wish to find out, which is its exact opposite”
>>> ... Bertrand Russell
>>>
>>> On 06/14/2013 09:32 AM, Mary Haley wrote:
>>>> On Jun 11, 2013, at 2:32 PM, Jeremy Winick wrote:
>>>>
>>>>> I am trying to learn ncl as a long time matlab user who is retired and
>>>>> cannot afford new licenses.
>>>>> My first problem I am attempting is plotting contours of satellite
>>>>> retrieved data on map projections.
>>>>> I have gotten this to work to some extent, but want to automate the
>>>>> process and don't see how to do it efficiently. The data comes from limb
>>>>> retrievals of satellite passes, 15 orbits per day. At least one day is
>>>>> needed to get the longitudinal coverage, and sometimes two or three days
>>>>> will help fill in more points.
>>>>>
>>>>> To contour temperature at some altitude or pressure level, using
>>>>> gsn_csm_contour_map_polar I am currently using natgrid to put the
>>>>> temperature data at each lat, lon point on a uniform grid. Then after
>>>>> setting, units, named dimensions and coordinate variables I can get the
>>>>> plot. With one day of data these contours often have some "non-smooth"
>>>>> features. Is there a way to get smoother contours or better griding.
>>>>> Note that these temperature points are measured at different times and
>>>>> maybe getting a grid should not just use nearest neighbor type methods
>>>>> but is there a way to weight points by how far apart in time?
>>>> Have you tried contouring the data directly, rather than putting it on a grid?
>>>>
>>>> http://www.ncl.ucar.edu/Applications/contour1d.shtml
>>>>
>>>> It would help if you could show us some sample images.
>>>>
>>>>> Now, to the problem of automating. All the examples I see on the web
>>>>> pages surely don't fit my type of need. The data opened in the script
>>>>> uses a specific name. My data is data that has already been analyzed and
>>>>> it in large ascii files - column format. Although all columns are not
>>>>> numeric, readAsciiTable seems to work although the column of the data
>>>>> that are not numeric (say dates in Feb12 type format) are not usable. I
>>>>> want to tell the script what the file to open (changing from run to run
>>>>> or incorporated in an csh-shell or bourne shell script, and also pass
>>>>> which days, and which column (temperature at one of a few levels).
>>>>> Setting enumerable environment variables seems like an awkward solution.
>>>>> Passing these as command line arguments would be very nice (like in
>>>>> matlab), but I haven't seen that this is possible. My work around now
>>>>> would be to open a fixed name file that I read in the script and change
>>>>> it each run to change these important parameters. I think I must be
>>>>> missing something that is basic, since my problem doesn't seem to be
>>>>> unusual.
>>>> It would help if we could see a sample file and script that you've written so far.
>>>> As Jonathan Vigh pointed out, there are different methods for reading ascii
>>>> files, but it just depends on what your file looks like. If you have a mix of data
>>>> and numbers, then I usually find the str_get_field and str_get_cols functions
>>>> to be the best way of reading in columnar data. I use str_get_field if the data
>>>> is separated by some delimiter, like a comma. I use str_get_cols if the data
>>>> are in perfectly lined up columns, which can be specified by column numbers.
>>>>
>>>> If you can provide your file and script, then you can use our ftp site:
>>>>
>>>> http://www.ncl.ucar.edu/report_bug.shtml#HowToFTP
>>>>
>>>>> One other complaint is that the web page support when viewed on Firefox
>>>>> 20.0 does not print correctly. Only the first page (and not even all of
>>>>> it) prints. I know these pages are designed for online work, but having
>>>>> ten or more open at a time and going back to just one or two, it would
>>>>> be easier to have those two printed out.
>>>> Can you give an example of which page is not printing out properly? One issue might be
>>>> that you need to click on the page you want to print, to make sure you are printing the
>>>> text you want, and not the header information.
>>>>
>>>> --Mary
>>>>
>>>>> Jeremy
>>>>>
>>>>>
>>>>> --
>>>>> “What is wanted is not the will to believe,
>>>>> but the wish to find out, which is its exact opposite”
>>>>> ... Bertrand Russell
>>>>>
>>>>> _______________________________________________
>>>>> ncl-talk mailing list
>>>>> List instructions, subscriber options, unsubscribe:
>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>
>>>
>>> _______________________________________________
>>> ncl-talk mailing list
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Mon Jul 1 12:12:01 2013

This archive was generated by hypermail 2.1.8 : Mon Jul 01 2013 - 12:35:42 MDT