Re: [netcdfgroup] [ncdf4] error converting GEIA data to netCDF

  • To: Roy Mendelssohn <roy.mendelssohn@xxxxxxxx>
  • Subject: Re: [netcdfgroup] [ncdf4] error converting GEIA data to netCDF
  • From: "David W. Pierce" <dpierce@xxxxxxxx>
  • Date: Mon, 27 Aug 2012 21:35:35 -0700
> On Mon, Aug 27, 2012 at 8:40 PM, Roy Mendelssohn <roy.mendelssohn@xxxxxxxx
> wrote:
> Just looked at your code, and you do call nc_sync.  I am wondering if it
works if you call nc_close, reopen and > then write. Perhaps the nc_sync is
sufficent when you have been in define mode in the nc_create call.
>
> -Roy

There's always some awkwardness because the netcdf_id object doesn't "know"
about changes to the file you've made after creating it. If you could pass
objects by reference you could modify the netcdf_id object on each call to
ncvar_put, ncatt_put, etc., and the netcdf_id object would always be
synchronized with the state of the file. But with R semantics the most
straightforward way to do this would be something like this:

ncid <- nc_create(...)
ncid <- ncvar_put( ncid, ... )
ncid <- ncatt_put( ncid, ... )

etc. which is awkward and ugly. So facing the choice between an awkward and
ugly solution that has to be done *every* *single* *time* (passing the ncid
in and passing the changed ncid back out on each call) and an awkward and
ugly solution that is rare (having to close a file first if you want to
create it, modify it, and then read it), I chose the latter.

Or, the short form: If you want to create a file and write to it, and then
read back in from that same file, close it first and then reopen it.

Regards,

--Dave


> On Aug 27, 2012, at 8:31 PM, Tom Roche wrote:
>
> >
> > summary: I can successfully ncvar_put(...) data to a file, but when I
> > try to ncvar_get(...) the same data, I get
> >
> >> Error in if (nc$var[[li]]$hasAddOffset) addOffset =
> nc$var[[li]]$addOffset else addOffset = 0 :
> >>  argument is of length zero
> >
> > How to fix or debug?
> >
> > details:
> >
> > R code @
> >
> > https://github.com/TomRoche/GEIA_to_NetCDF
> >
> > successfully (if crudely) uses R packages={ncdf4, maps, fields} to
> >
> > + extract data from a GEIA-distributed datafile
> >
> > https://github.com/downloads/TomRoche/GEIA_to_netCDF/N2OOC90Y.1A
> >
> > + display the data (mostly successfully--the map's legend has problems
> >  which I'll attack later)
> >
> > https://github.com/downloads/TomRoche/GEIA_to_netCDF/output.1.png
> >
> > + create a netCDF file using the data read from the GEIA file. (At
> >  least, after nc_sync(netcdf.file), the file `ncdump -h`s properly.)
> >
> > However, I can only *put* the data to the netCDF file:
> >
> >> ncvar_put(
> >> + nc=netcdf.file,
> >> + varid=emis.var,
> >> + vals=t(global.emis.mx),
> >> + start=c(1, 1, 1),
> >> + count=c(-1,-1, 1)) # -1 -> all data
> >
> > When I try to *pull* the data *from* the netCDF I created,
> >
> >>> target.data <- ncvar_get(
> >> +   nc=netcdf.file,
> >> +   varid=emis.var,
> >> +   # read all the data
> >> +   start=rep(1, emis.var$ndims),
> >> + #  count=rep(-1, emis.var$ndims))
> >
> > I get
> >
> >> Error in if (nc$var[[li]]$hasAddOffset) addOffset =
> nc$var[[li]]$addOffset else addOffset = 0 :
> >>  argument is of length zero
> >
> > And I get the same error if I try the minor variation(s)
> >
> >> target.data <- ncvar_get(
> > +   nc=netcdf.file,
> > + #  varid=emis.var,
> > +   varid=emis.var.name,
> > +   # read all the data
> > +   start=rep(1, emis.var$ndims),
> > +   count=c(-1, -1, 1))
> >
> > But the data itself appears to be OK--at least, it virtualizes
> > properly (above). So I'm thinking I must just be missing something
> > simple, and hoping Someone Out There with fresh eyeballs can point to
> > my error(s).
> >
> > (And, in case you're wondering:
> >
> > - I'm not just ncvar_put'ing the data for the exercise: I want the
> >  GEIA data in netCDF format for subsequent use.
> >
> > - I tried to find the GEIA data distributed in netCDF format, and
> >  asked around, but have gotten no responses.
> >
> > ) TIA, Tom Roche <Tom_Roche@xxxxxxxxx>
> >
> > _______________________________________________
> > netcdfgroup mailing list
> > netcdfgroup@xxxxxxxxxxxxxxxx
> > For list information or to unsubscribe,  visit:
> http://www.unidata.ucar.edu/mailing_lists/
>
> **********************
> "The contents of this message do not reflect any position of the U.S.
> Government or NOAA."
> **********************
> Roy Mendelssohn
> Supervisory Operations Research Analyst
> NOAA/NMFS
> Environmental Research Division
> Southwest Fisheries Science Center
> 1352 Lighthouse Avenue
> Pacific Grove, CA 93950-2097
>
> e-mail: Roy.Mendelssohn@xxxxxxxx (Note new e-mail address)
> voice: (831)-648-9029
> fax: (831)-648-8440
> www: http://www.pfeg.noaa.gov/
>
> "Old age and treachery will overcome youth and skill."
> "From those who have been given much, much will be expected"
> "the arc of the moral universe is long, but it bends toward justice" -MLK
> Jr.
>
> _______________________________________________
> netcdfgroup mailing list
> netcdfgroup@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe,  visit:
> http://www.unidata.ucar.edu/mailing_lists/
>




-- 
David W. Pierce
Division of Climate, Atmospheric Science, and Physical Oceanography
Scripps Institution of Oceanography, La Jolla, California, USA
(858) 534-8276 (voice)  /  (858) 534-8561 (fax)    dpierce@xxxxxxxx
  • 2012 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: