//
// AncillaryData.java
//

/*
This source file is part of the edu.wisc.ssec.mcidas package and is
Copyright (C) 1998 - 2017 by Tom Whittaker, Tommy Jasmin, Tom Rink,
Don Murray, James Kelly, Bill Hibbard, Dave Glowacki, Curtis Rueden
and others.

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 edu.wisc.ssec.mcidas;

import java.io.DataInputStream;
import java.io.IOException;
import java.lang.String;

/**
 * AncillaryData creates an object providing access to image
 * parameters needed to do conversion from McIDAS area format
 * to some other image format.
 *
 * @version 1.6 6 Aug 1999
 * @author Tommy Jasmin, SSEC
 */
 
public class AncillaryData {

  private static final int DIR_SIZE = 64;
  private int numLines = 0;
  private int numElems = 0;
  private int firstImageLine = 0;
  private int firstImageElem = 0;
  private int lineResolution = 0;
  private int elemResolution = 0;
  private int imageDate = 0;
  private int imageTime = 0;
  private int creationDate = 0;
  private int creationTime = 0;
  private int bandCount = 0;
  private int sensorId = 0;
  private int status = 0;
  private int version = 0;
  private int dataWidth = 0;
  private int numBands = 0;
  private int prefixSize = 0;
  private int projectNum = 0;
  private int bandMap = 0;
  private int calType = 0;
  private int navOffset = 0;
  private int calOffset = 0;
  private int datOffset = 0;
  private boolean swapWords = false;

  /**
   *
   * constructor
   *
   * @param dis		data input stream 
   *
   */

  public AncillaryData (
    DataInputStream dis
  ) 
    throws IOException

  {

    int [] directory;
    int i;

    // read in what corresponds to the McIDAS area directory
    directory = new int[DIR_SIZE];
    for (i = 0; i < DIR_SIZE; i++) {
      directory[i] = dis.readInt();
    }

    // byte swap if necessary
    if (directory[1] > 255) {
      ConversionUtility.swap(directory,0,19);
      // word 20 may contain characters -- if small integer, swap it...
      if ((directory[20] & 0xffff) == 0) {
        ConversionUtility.swap(directory,20,20);
      }
      ConversionUtility.swap(directory,21,23);
      // words 24-31 contain memo field
      ConversionUtility.swap(directory,32, 50);
      // words 51-2 contain cal info
      ConversionUtility.swap(directory,53,55);
      // word 56 contains original source type (ascii)
      ConversionUtility.swap(directory,57,63);
      swapWords = true;
    }

    // now load the class fields with the appropriate data
    numLines = directory[AreaFile.AD_NUMLINES];
    numElems = directory[AreaFile.AD_NUMELEMS];
    firstImageLine = directory[AreaFile.AD_STLINE];
    firstImageElem = directory[AreaFile.AD_STELEM];
    lineResolution = directory[AreaFile.AD_LINERES];
    elemResolution = directory[AreaFile.AD_ELEMRES];
    imageDate = directory[AreaFile.AD_IMGDATE];
    imageTime = directory[AreaFile.AD_IMGTIME];
    bandCount = directory[AreaFile.AD_NUMBANDS];
    sensorId = directory[AreaFile.AD_SENSORID];
    creationDate = directory[AreaFile.AD_CRDATE];
    creationTime = directory[AreaFile.AD_CRTIME];
    status = directory[AreaFile.AD_STATUS];
    version = directory[AreaFile.AD_VERSION];
    dataWidth = directory[AreaFile.AD_DATAWIDTH];
    numBands = directory[AreaFile.AD_NUMBANDS];
    prefixSize = directory[AreaFile.AD_PFXSIZE];
    projectNum = directory[AreaFile.AD_PROJNUM];
    bandMap = directory[AreaFile.AD_BANDMAP];
    calType = directory[AreaFile.AD_CALTYPE];
    navOffset = directory[AreaFile.AD_NAVOFFSET];
    calOffset = directory[AreaFile.AD_CALOFFSET];
    datOffset = directory[AreaFile.AD_DATAOFFSET];

  }

  public int getCalType() {
    char [] calBuf = new char[4];
    calBuf[0] = (char) ((calType >> 24) & 0xFF);
    calBuf[1] = (char) ((calType >> 16) & 0xFF);
    calBuf[2] = (char) ((calType >> 8) & 0xFF);
    calBuf[3] = (char) ((calType) & 0xFF);
    if (String.valueOf(calBuf).equals("RAW ")) {
      System.out.println("determined input cal type is RAW");
      return Calibrator.CAL_RAW;
    } else if (String.valueOf(calBuf).equals("BRIT")) {
      System.out.println("determined input cal type is BRIT");
      return Calibrator.CAL_BRIT;
    } else if (String.valueOf(calBuf).equals("TEMP")) {
      System.out.println("determined input cal type is TEMP");
      return Calibrator.CAL_TEMP;
    } else if (String.valueOf(calBuf).equals("RAD ")) {
      System.out.println("determined input cal type is RAD");
      return Calibrator.CAL_RAD;
    } else if (String.valueOf(calBuf).equals("ALB")) {
      System.out.println("determined input cal type is ALB");
      return Calibrator.CAL_ALB;
    }
    return Calibrator.CAL_NONE;

  }

  /**
   *
   * return sensor id
   *
   */

  public int getSensorId() {
    return sensorId;
  }

  /**
   *
   * return number of elements
   *
   */

  public int getNumElements() {
    return numElems;
  }

  /**
   *
   * return number of lines
   *
   */

  public int getNumLines() {
    return numLines;
  }

  /**
   *
   * return starting image line
   *
   */

  public int getStartLine() {
    return firstImageLine;
  }

  /**
   *
   * return starting image element
   *
   */

  public int getStartElem() {
    return firstImageElem;
  }

  /**
   *
   * return line resolution
   *
   */

  public int getLineRes() {
    return lineResolution;
  }

  /**
   *
   * return element resolution
   *
   */

  public int getElemRes() {
    return elemResolution;
  }

  /**
   *
   * return image date
   *
   */

  public int getImageDate() {
    return imageDate;
  }

  /**
   *
   * return image time
   *
   */

  public int getImageTime() {
    return imageTime;
  }

  /**
   *
   * return image creation date
   *
   */

  public int getCreationDate() {
    return creationDate;
  }

  /**
   *
   * return image creation time
   *
   */

  public int getCreationTime() {
    return creationTime;
  }

  /**
   *
   * return image status field
   *
   */

  public int getStatus() {
    return status;
  }

  /**
   *
   * return file format version number
   *
   */

  public int getVersion() {
    return version;
  }

  /**
   *
   * return number of bytes per pixel
   *
   */

  public int getDataWidth() {
    return dataWidth;
  }

  /**
   *
   * return number of bands/channels in image
   *
   */

  public int getNumBands() {
    return numBands;
  }

  /**
   *
   * return size in bytes of line prefix
   *
   */

  public int getPrefixSize() {
    return prefixSize;
  }

  /**
   *
   * return project number associated with image
   *
   */

  public int getProjectNum() {
    return projectNum;
  }

  /**
   *
   * return 32 bit band map
   *
   */

  public int getBandMap() {
    return bandMap;
  }

  /**
   *
   * return offset in bytes to navigation data
   *
   */

  public int getNavOffset() {
    return navOffset;
  }

  /**
   *
   * return offset in bytes to calibration data
   *
   */

  public int getCalOffset() {
    return calOffset;
  }

  /**
   *
   * return offset in bytes to image data
   *
   */

  public int getDataOffset() {
    return datOffset;
  }

  /**
   *
   * return flag indicating certain fields were byte flipped
   *
   */

  public boolean isSwapped() {
    return swapWords;
  }

}

 

Ads help maintain this website.