Re: [netcdf-java] combining and writing geogrids

John et al,

Thanks for the input.  I actually came across the NetcdfCFFileWriter class 
right after I sent the email and am having great success using it to write out 
subsetted files.  I haven't tried combining datasets yet, but when I get to it 
I'm sure I'll be back to ask questions!!

For now - I have a question regarding Structures/groups.  My procedures work 
great for the majority of the gridded datasets I've come across thus far.  
However, if the file contains structures (which themselves contain variables), 
I'm running into problems when I go to write the file to disk.  Essentially, 
the problem is that the variable names contain "." in them (for example 
"N4YRH.absuu") and are raising a "NetcdfFileWriteable.write illegal variable 
name = N4YRH.absuu" error (complete error message below).
How can I deal with this?  I've tried replacing the "." with a "_" before I 
pass the variable list to the FileWriter.writeVariables(), but the "Structure" 
name ("N4YRH") still gets appended and the same error occurs except instead of 
"N4YRH.absuu", the illegal name is "N4YRH.N4YRH_absuu".

Here is the link to the dataset I'm referring to above:
http://iridl.ldeo.columbia.edu/SOURCES/.CHRIS/dods


and here's the error message:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: 
NetcdfFileWriteable.write illegal variable name = N4YRH.absuu
        at ucar.nc2.NetcdfFileWriteable.write(NetcdfFileWriteable.java:538)
        at ucar.nc2.NetcdfFileWriteable.write(NetcdfFileWriteable.java:477)
        at ucar.nc2.FileWriter.copyAll(FileWriter.java:267)
        at ucar.nc2.FileWriter.copyVarData(FileWriter.java:223)
        at ucar.nc2.FileWriter.finish(FileWriter.java:459)
        at 
com.asascience.opendaptest.NetcdfGridWriter.writeFile(NetcdfGridWriter.java:117)
        at 
com.asascience.opendaptest.GridReader.extractData2(GridReader.java:161)
        at 
com.asascience.opendaptest.OpendapInterface.extractData(OpendapInterface.java:314)
        at 
com.asascience.opendaptest.LinkingPanel$5.actionPerformed(LinkingPanel.java:485)
        at 
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1882)
        at 
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2202)
        at 
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at 
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at 
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at 
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
        at java.awt.Component.processMouseEvent(Component.java:5554)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
        at java.awt.Component.processEvent(Component.java:5319)
        at java.awt.Container.processEvent(Container.java:2010)
        at java.awt.Component.dispatchEventImpl(Component.java:4021)
        at java.awt.Container.dispatchEventImpl(Container.java:2068)
        at java.awt.Component.dispatchEvent(Component.java:3869)
        at 
java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4256)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3936)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3866)
        at java.awt.Container.dispatchEventImpl(Container.java:2054)
        at java.awt.Window.dispatchEventImpl(Window.java:1774)
        at java.awt.Component.dispatchEvent(Component.java:3869)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at 
java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
        at 
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)


Thanks for the help!!!

Chris

Christopher Mueller  |  Scientist
Applied Science Associates
70 Dean Knauss Drive   |    Narragansett, RI  02882 USA
p:  +1 401-789-6224  |  f:  +1 401-789-1932
e:  cmueller@xxxxxxxxxxxxxx  |  www.asascience.com
 
ASA | Science. Services. Solutions.




-----Original Message-----
From: John Caron [mailto:caron@xxxxxxxxxxxxxxxx] 
Sent: Wednesday, September 26, 2007 7:34 PM
To: Christopher Mueller
Cc: netcdf-java@xxxxxxxxxxxxxxxx
Subject: Re: [netcdf-java] combining and writing geogrids



Christopher Mueller wrote:
> Greetings all,
> 
>  
> 
> I'm curious if anyone out there can help me with some questions I have 
> about GeoGrids.  Specifically I'm wondering if anyone knows how I can go 
> about the process of combining multiple GeoGrids into one "object" and 
> then write that object to a local .nc file.  Thus far, I've succeeded in 
> connecting to an opendap server, getting a single geogrid, subsampling 
> it and using the GeoGrid.writeFile() method to create a local file.  
> I've noticed that the javadoc for GeoGrid says not to use the writeFile 
> method - but I couldn't see another way of getting the data to disk.
> 
>  
> 
> So my first question is - what is the correct method for writing the 
> contents of a GeoGrid to a local file??  I've checked out 
> NetcdfFileWriteable, but that doesn't allow me to add a GeoGrid (at 
> least not directly).

ucar.nc2.dt.grid.NetcdfCFWriter is a helper class that replaces 
grid.writeFile(). It writes CF compliant files. It's still a bit rough but 
probably will work for you.

> 
>  
> 
> My second question is - is there a way to combine multiple geogrids so 
> that their contents can be written to a single file.  For example - if 
> my opendap dataset has U, V, and Temp variables, I'd like them all to be 
> written to a single file.  My geogrid.writeFile method produces a 
> dataset for each at this point

As you will see from the API, you have to construct a ucar.nc2.dt.GridDataset 
object. You can do this from an opendap dataset, just like any other dataset, 
see ucar.nc2.dt.grid.GridDataset.open(). If you dont want all the Geogrids, you 
will have to remove the ones you dont want. It should work, but we havent 
tested that particular case.

> 
>  
> 
> In relation to this second question - how would I combine geogrids from 
> 2 separate opendap sources - assuming that they are identical aside from 
> the variable(s) of interest?

Again, you would construct a ucar.nc2.dt.GridDataset and use NetcdfCFWriter to 
write it out. It may be tricky to get the GridDataset right, we've never 
attempted to combine from 2 different sources.

> 
>  
> 
>  
> 
> Thank you in advance for your help - it's most appreciated.

good luck!

> 
>  
> 
> Chris
> 
>  
> 
>  
> 
> *Christopher Mueller/  /*|  Scientist
> 
> Applied Science Associates
> 
> 70 Dean Knauss Drive   |    Narragansett, RI  02882 USA
> 
> p:  +1 401-789-6224  |  f:  +1 401-789-1932
> 
> e:  cmueller@xxxxxxxxxxxxxx <mailto:ehowlett@xxxxxxxxxxxxxx>  |  
> www.asascience.com <http://www.asascience.com/>
> 
>  
> 
> *ASA **|** Science. Services. Solutions.***
> 
>  
> 
>  
> 
>  
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> netcdf-java mailing list
> netcdf-java@xxxxxxxxxxxxxxxx
> For list information or to unsubscribe, visit: 
> http://www.unidata.ucar.edu/mailing_lists/