All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ucar.nc2.iosp.mcidas.McIDASGridReader Maven / Gradle / Ivy

Go to download

The NetCDF-Java Library is a Java interface to NetCDF files, as well as to many other types of scientific data formats.

There is a newer version: 4.3.22
Show newest version
/*
 *
 * Copyright 1998-2009 University Corporation for Atmospheric Research/Unidata
 *
 * Portions of this software were developed by the Unidata Program at the
 * University Corporation for Atmospheric Research.
 *
 * Access and use of this software shall impose the following obligations
 * and understandings on the user. The user is granted the right, without
 * any fee or cost, to use, copy, modify, alter, enhance and distribute
 * this software, and any derivative works thereof, and its supporting
 * documentation for any purpose whatsoever, provided that this entire
 * notice appears in all copies of the software, derivative works and
 * supporting documentation.  Further, UCAR requests that the user credit
 * UCAR/Unidata in any publications that result from the use of this
 * software or in any product that includes this software. The names UCAR
 * and/or Unidata, however, may not be used in any advertising or publicity
 * to endorse or promote any products or commercial entity unless specific
 * written permission is obtained from UCAR/Unidata. The user also
 * understands that UCAR/Unidata is not obligated to provide the user with
 * any support, consulting, training or assistance of any kind with regard
 * to the use, operation and performance of this software nor to provide
 * the user with any updates, revisions, new versions or "bug fixes."
 *
 * THIS SOFTWARE IS PROVIDED BY UCAR/UNIDATA "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL UCAR/UNIDATA BE LIABLE FOR ANY SPECIAL,
 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 * WITH THE ACCESS, USE OR PERFORMANCE OF THIS SOFTWARE.
 */



package ucar.nc2.iosp.mcidas;


import edu.wisc.ssec.mcidas.*;

import ucar.grid.GridIndex;

import ucar.nc2.iosp.grid.*;

import ucar.unidata.io.RandomAccessFile;

import java.io.IOException;

import java.util.*;


/**
 *  Read grid(s) from a McIDAS grid file
 */
public class McIDASGridReader {

    /** The file */
    protected RandomAccessFile rf;

    /** An error message */
    private String errorMessage;

    /** Grid index */
    private GridIndex gridIndex;

    /** swap flag */
    protected boolean needToSwap = false;

    /** hashMap of GridDefRecords */
    private HashMap gdsMap = new HashMap();

    /** maximum number of grids in a file */
    // is this the right number?
    private static final int MAX_GRIDS = 999999;

    /**
     * Bean ctor
     */
    public McIDASGridReader() {}

    /**
     * Create a McIDASGrid Reader from the file
     *
     * @param filename  filename
     *
     * @throws IOException problem reading file
     */
    public McIDASGridReader(String filename) throws IOException {
        this(new RandomAccessFile(filename, "r", 2048));
    }

    /**
     * Create a McIDASGrid Reader from the file
     *
     * @param raf  RandomAccessFile
     *
     * @throws IOException problem reading file
     */
    public McIDASGridReader(RandomAccessFile raf) throws IOException {
        init(raf);
    }

    /**
     * Initialize the file, read in all the metadata (ala DM_OPEN)
     *
     * @param raf   RandomAccessFile to read.
     *
     * @throws IOException   problem reading file
     */
    public final void init(RandomAccessFile raf) throws IOException {
        init(raf, true);
    }

    /**
     * Initialize the file, read in all the metadata (ala DM_OPEN)
     *
     * @param  fullCheck  for a full check reading grids
     * @param raf   RandomAccessFile to read.
     *
     * @throws IOException   problem reading file
     */
    public final void init(RandomAccessFile raf, boolean fullCheck)
            throws IOException {
        rf = raf;
        raf.order(RandomAccessFile.BIG_ENDIAN);
        boolean ok = init(fullCheck);
        if ( !ok) {
            throw new IOException("Unable to open McIDAS Grid file: "
                                  + errorMessage);
        }
    }

    /**
     * Initialize this reader.  Get the Grid specific info
     *
     * @return true if successful
     *
     * @throws IOException  problem reading the data
     */
    protected boolean init() throws IOException {
        return init(true);
    }

    /**
     * Initialize this reader.  Get the Grid specific info
     *
     * @param  fullCheck  for a full check reading grids
     *
     * @return true if successful
     *
     * @throws IOException  problem reading the data
     */
    protected boolean init(boolean fullCheck) throws IOException {
        if (rf == null) {
            logError("File is null");
            return false;
        }
        gridIndex = new GridIndex(rf.getLocation());

        rf.order(RandomAccessFile.BIG_ENDIAN);
        int numEntries = Math.abs(readInt(10));
        if (numEntries > 1000000) {
            needToSwap = true;
            numEntries = Math.abs(McIDASUtil.swbyt4(numEntries));
        }
        if (numEntries > MAX_GRIDS) {
            return false;
        }
        //System.out.println("need to Swap = " + needToSwap);
        //System.out.println("number entries="+numEntries);

        // go back to the beginning
        rf.seek(0);
        // read the fileheader
        String label = rf.readString(32);
        // GEMPAK too closely like McIDAS
        if (label.indexOf("GEMPAK DATA MANAGEMENT FILE") >= 0) {
            logError("label indicates this is a GEMPAK grid");
            return false;
        } else { // check that they are all printable ASCII chars
            for (int i=0; i 0) {
            file = args[0];
        }
        McIDASGridReader mg        = new McIDASGridReader(file);
        GridIndex        gridIndex = mg.getGridIndex();
        List             grids     = gridIndex.getGridRecords();
        System.out.println("found " + grids.size() + " grids");
        int num = Math.min(grids.size(), 10);
        for (int i = 0; i < num; i++) {
            System.out.println(grids.get(i));
        }

    }
}





© 2015 - 2024 Weber Informatics LLC | Privacy Policy