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

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

public class CalibratorGvarG13 extends CalibratorGvar {

  // the following static init block sets the class temp/rad constants
  protected static float [] imager13FK1  = {0.f, 0.20075E6f, 0.42508E5f, 0.98050E4f, 0.50173E4f};

  protected static float [] sounder13FK1 = 
    {0.37330E4f, 0.40351E4f, 0.42661E4f,
     0.46920E4f, 0.49953E4f, 0.58021E4f,
     0.68338E4f, 0.89420E4f, 0.13042E5f,
     0.28772E5f, 0.34368E5f, 0.42901E5f,
     0.12513E6f, 0.12812E6f, 0.13482E6f,
     0.16892E6f, 0.18938E6f, 0.22608E6f};

  protected static float [] imager13FK2  = {0.f, 0.36890E4f, 0.21987E4f, 0.13484E4f, 0.10786E4f};

  protected static float [] sounder13FK2 = 
    {0.97732E3f,   0.10030E4f,   0.10218E4f,
     0.10547E4f,   0.10770E4f,   0.11321E4f,
     0.11956E4f,   0.13077E4f,   0.14830E4f,
     0.19305E4f,   0.20483E4f,   0.22055E4f,
     0.31512E4f,   0.31761E4f,   0.32305E4f,
     0.34826E4f,   0.36179E4f,   0.38380E4f};

  protected static float [] imager13TC1  = {0.f, 1.47950f, 3.96964f, .36350f, .09502f};

  protected static float [] sounder13TC1 = 
    {.00944f, .01022f, .01011f,
     .01291f, .01353f, .04272f,
     .12493f, .12033f, .03838f,
     .15609f, .28000f, .18057f,
     .01799f, .01809f, .02012f,
     .05092f, .05740f, .29874f};

  protected static float [] imager13TC2  = {0.f, .99794f, .99112f, .99876f, .99960f};

  protected static float [] sounder13TC2 = 
     {.99996f, .99995f, .99995f,
      .99994f, .99994f, .99983f,
      .99952f, .99958f, .99988f,
      .99961f, .99932f, .99959f,
      .99997f, .99997f, .99997f,
      .99992f, .99992f, .99959f};

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

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


  public CalibratorGvarG13(int sensorId, int[] cb) {
	  super(sensorId, cb);
  }

  /**
   *
   * 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) {
      if( band == 6) {
        band = 5;
      }
      expn = (imager13FK1[band - 1] / inVal) + 1.0;
      temp = imager13FK2[band - 1] / Math.log(expn);
      outVal = (float) ((temp - imager13TC1[band - 1]) / imager13TC2[band - 1]);
    } else {
      expn = (sounder13FK1[band - 1] / inVal) + 1.0;
      temp = sounder13FK2[band - 1] / Math.log(expn);
      outVal = (float) 
        ((temp - sounder13TC1[band - 1]) / sounder13TC2[band - 1]);
    }
 
    return (outVal);
  }
 
}

 

Ads help maintain this website.