//
// McIDASGridDirectory.java
//

/*
VisAD system for interactive analysis and visualization of numerical
data.  Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom
Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and
Tommy Jasmin.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/

package visad.data.mcidas;

import edu.wisc.ssec.mcidas.*;
import visad.*;
import visad.data.units.Parser;
import visad.data.units.*;
import visad.jmet.*;


/**
 * McIDASGridDirectory for McIDAS 'grid' directory entries
 *
 * @author Tom Whittaker
 *
 */
public class McIDASGridDirectory extends visad.jmet.MetGridDirectory {

  CoordinateSystem coordSystem = null;
  GridDirectory directory = null;
  private double paramScale;

  /**
   * Construct a McIDASGridDirectory from a GridDirectory
   * @param directory  the grid directory  cannot be null
   */
  public McIDASGridDirectory(GridDirectory directory)
  {
    this.directory = directory;
    if (directory != null) setParameters();
  }
  
  /**
   * Construct a McIDASGridDirectory from the byte representation of a
   * the McIDAS grid directory block
   * @param h  header as a byte array
   */
  public McIDASGridDirectory(byte[] h) {
    int[] dirblock = new int[64];
    for (int i = 0; i < 64; i++) dirblock[i] = McIDASUtil.bytesToInteger(h,i*4);
    try {
      directory = new GridDirectory(dirblock);
    } catch (McIDASException excp) { 
      directory = null; 
    }
    if (directory != null) setParameters();
  }

  private void setParameters() {
 
    paramName = directory.getParamName();
    rows = directory.getRows();
    columns = directory.getColumns();
    levels = 1;
    validHour = directory.getForecastHour();
    referenceTime = directory.getReferenceTime();
    validTime = directory.getValidTime();
    levelValue = directory.getLevelValue();

    MetUnits mu = new MetUnits();
    String su = directory.getParamUnitName();
    String sl = directory.getLevelUnitName();
    try {
      paramUnit = Parser.parse(mu.makeSymbol(su));
    } catch (ParseException pe) {
      paramUnit = null;
    }
    try {
      levelUnit = Parser.parse(mu.makeSymbol(sl));
    } catch (ParseException pe) {
      levelUnit = null;
    }

    secondLevelValue = directory.getSecondLevelValue();
    secondTime = directory.getSecondTime();
    paramScale = directory.getParamScale();

  }

  /**
   * Get the scale of the parameter values
   * @return parameter scale  (power of 10)
   */
  public double getParamScale() {
    return paramScale;
  }

  /**
   * Get the GRIDCoordinateSystem associated with this grid
   * @return coordinate system  may be null if nav is unknown.
   */
  public CoordinateSystem getCoordinateSystem() {
    if (coordSystem == null) {
      try {
        if (directory == null) throw new Exception("null directory");
        coordSystem = new GRIDCoordinateSystem(directory);
      } catch (Exception ev) { 
        coordSystem = null;
        System.out.println("No navigation available");
      }
    }
    return coordSystem;
  }

  /**
   * Get the raw navigation block from the directory.
   * @return  raw int values  vary with grid type
   */
  public int[] getNavBlock() {
     return (directory != null) ? directory.getNavBlock() : null;
  }

  /**
   * Get the raw navigation block from the directory.
   * @return  raw int values  vary with grid type (-1 == unknown)
   */
  public int getGridType() {
    return (directory != null) ? directory.getNavType() : -1;
  }

  /**
   * Get the grid directory used to create this beast.
   * @return corresponding edu.wisc.ssec.mcidas.GridDirectory. (may be null)
   */
  public GridDirectory getGridDirectory() {
    return directory;
  }

  /**
   * Return a String representation of the McIDASGridDirectory
   */
  public String toString() {
    return new String(paramName + " "+paramUnit+" "+rows+" "+
    columns+" "+
    levelValue+" "+levelUnit+" "+
    referenceTime.toGMTString()+ " "+ (int) validHour
    + " or "+validTime.toGMTString() );
  }

}

 

Ads help maintain this website.