//
// CalibratorGvarG8.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;

/**
 * CalibratorGvarG8 creates a Calibrator object designed specifically
 * to deal with GOES 8 data.  Not fully implemented at present - some
 * calibrations remain to be done.  It provides all the constants
 * specific to the GOES 8 imager and sounder sensors.
 *
 * @version 1.4 6 Aug 1999
 * @author Tommy Jasmin, SSEC
 */

public class CalibratorGvarG8 extends CalibratorGvar {

  protected static float [] imager8FK1  = new float[NUM_BANDS_IMAGER];
  protected static float [] sounder8FK1 = new float[NUM_BANDS_SOUNDER];
  protected static float [] imager8FK2  = new float[NUM_BANDS_IMAGER];
  protected static float [] sounder8FK2 = new float[NUM_BANDS_SOUNDER];
  protected static float [] imager8TC1  = new float[NUM_BANDS_IMAGER];
  protected static float [] sounder8TC1 = new float[NUM_BANDS_SOUNDER];
  protected static float [] imager8TC2  = new float[NUM_BANDS_IMAGER];
  protected static float [] sounder8TC2 = new float[NUM_BANDS_SOUNDER];
 
  // the following static init block sets the class temp/rad constants
  static {

    imager8FK1[0] = 0.0000000E0f;
    imager8FK1[1] = 0.1999862E6f;
    imager8FK1[2] = 0.3879239E5f;
    imager8FK1[3] = 0.9737930E4f;
    imager8FK1[4] = 0.6944640E4f;

    sounder8FK1[0]  = 0.3756810E4f;
    sounder8FK1[1]  = 0.4011100E4f;
    sounder8FK1[2]  = 0.4296870E4f;
    sounder8FK1[3]  = 0.4681130E4f;
    sounder8FK1[4]  = 0.4975250E4f;
    sounder8FK1[5]  = 0.5881410E4f;
    sounder8FK1[6]  = 0.6787440E4f;
    sounder8FK1[7]  = 0.8873710E4f;
    sounder8FK1[8]  = 0.1299794E5f;
    sounder8FK1[9]  = 0.2862932E5f;
    sounder8FK1[10] = 0.3424830E5f;
    sounder8FK1[11] = 0.4311430E5f;
    sounder8FK1[12] = 0.1242353E6f;
    sounder8FK1[13] = 0.1281235E6f;
    sounder8FK1[14] = 0.1351482E6f;
    sounder8FK1[15] = 0.1691671E6f;
    sounder8FK1[16] = 0.1882350E6f;
    sounder8FK1[17] = 0.2257944E6f;

    imager8FK2[0] = 0.0000000E0f;
    imager8FK2[1] = 0.3684270E4f;
    imager8FK2[2] = 0.2132720E4f;
    imager8FK2[3] = 0.1345370E4f;
    imager8FK2[4] = 0.1201990E4f;

    sounder8FK2[0]  = 0.3765120E4f;
    sounder8FK2[1]  = 0.3981160E4f;
    sounder8FK2[2]  = 0.4281880E4f;
    sounder8FK2[3]  = 0.4678910E4f;
    sounder8FK2[4]  = 0.4962590E4f;
    sounder8FK2[5]  = 0.5860420E4f;
    sounder8FK2[6]  = 0.6770320E4f;
    sounder8FK2[7]  = 0.8958910E4f;
    sounder8FK2[8]  = 0.1296593E5f;
    sounder8FK2[9]  = 0.2839828E5f;
    sounder8FK2[10] = 0.3420134E5f;
    sounder8FK2[11] = 0.4252514E5f;
    sounder8FK2[12] = 0.1240574E6f;
    sounder8FK2[13] = 0.1280114E6f;
    sounder8FK2[14] = 0.1348497E6f;
    sounder8FK2[15] = 0.1678142E6f;
    sounder8FK2[16] = 0.1888012E6f;
    sounder8FK2[17] = 0.2258565E6f;

    imager8TC1[0] = 0.0000000E0f;
    imager8TC1[1] = 0.6357000E0f;
    imager8TC1[2] = 0.6060000E0f;
    imager8TC1[3] = 0.3735000E0f;
    imager8TC1[4] = 0.2217000E0f;

    sounder8TC1[0]  = 0.1230000E-1f;
    sounder8TC1[1]  = 0.1330000E-1f;
    sounder8TC1[2]  = 0.1860000E-1f;
    sounder8TC1[3]  = 0.1500000E-1f;
    sounder8TC1[4]  = 0.1650000E-1f;
    sounder8TC1[5]  = 0.4740000E-1f;
    sounder8TC1[6]  = 0.1318000E0f;
    sounder8TC1[7]  = 0.1200000E0f;
    sounder8TC1[8]  = 0.4260000E-1f;
    sounder8TC1[9]  = 0.1505000E0f;
    sounder8TC1[10] = 0.2743000E0f;
    sounder8TC1[11] = 0.1447000E0f;
    sounder8TC1[12] = 0.2240000E-1f;
    sounder8TC1[13] = 0.2200000E-1f;
    sounder8TC1[14] = 0.2170000E-1f;
    sounder8TC1[15] = 0.5790000E-1f;
    sounder8TC1[16] = 0.6230000E-1f;
    sounder8TC1[17] = 0.3675000E0f;

    imager8TC2[0] = 0.0000000E0f;
    imager8TC2[1] = 0.9991000E0f;
    imager8TC2[2] = 0.9986000E0f;
    imager8TC2[3] = 0.9987000E0f;
    imager8TC2[4] = 0.9992000E0f;

    sounder8TC2[0]  = 0.9999000E0f;
    sounder8TC2[1]  = 0.9999000E0f;
    sounder8TC2[2]  = 0.9999000E0f;
    sounder8TC2[3]  = 0.9999000E0f;
    sounder8TC2[4]  = 0.9999000E0f;
    sounder8TC2[5]  = 0.9998000E0f;
    sounder8TC2[6]  = 0.9995000E0f;
    sounder8TC2[7]  = 0.9996000E0f;
    sounder8TC2[8]  = 0.9999000E0f;
    sounder8TC2[9]  = 0.9996000E0f;
    sounder8TC2[10] = 0.9993000E0f;
    sounder8TC2[11] = 0.9997000E0f;
    sounder8TC2[12] = 0.1000000E1f;
    sounder8TC2[13] = 0.1000000E1f;
    sounder8TC2[14] = 0.1000000E1f;
    sounder8TC2[15] = 0.9999000E0f;
    sounder8TC2[16] = 0.9999000E0f;
    sounder8TC2[17] = 0.9995000E0f;

  }

  /**
   *
   * constructor
   *
   * @param dis         data input stream
   * @param ad          AncillaryData object
   * @param cb		    calibration parameters array
   *
   */

  public CalibratorGvarG8(DataInputStream dis, AncillaryData ad, int [] cb) 
    throws IOException 
  {
    super(dis, ad, cb);
  }

  
  public CalibratorGvarG8(final int id, final int[] cal) {
	super(id, cal);
  }
  
  /**
   *
   * calibrate from radiance to temperature
   *
   * @param inVal       input data value
   * @param band        channel/band number
   * @param sId         sensor id number
   *
   */

  public float radToTemp(float inVal, int band, int sId) {

    double expn;
    double temp;
    float outVal;

    if ((sId % 2) == 0) {
      expn = (imager8FK1[band - 1] / inVal) + 1.0;
      temp = imager8FK2[band - 1] / Math.log(expn);
      outVal = (float) ((temp - imager8TC1[band - 1]) / imager8TC2[band - 1]);
    } else {
      expn = (sounder8FK1[band - 1] / inVal) + 1.0;
      temp = sounder8FK2[band - 1] / Math.log(expn);
      outVal = (float) ((temp - sounder8TC1[band - 1]) / sounder8TC2[band - 1]);
    }

    return (outVal);
  }

}

 

Ads help maintain this website.