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

/**
 * Utility class for creating Calibrator instances.
 * 
 * @author Bruce Flynn, SSEC
 * @version $Id: CalibratorFactory.java,v 1.7 2009-05-06 18:45:53 rickk Exp $
 */
public final class CalibratorFactory {

	/** Disallow instatiantion. */
	private CalibratorFactory() {}
	
    /**
     * Get an appropriate Calibrator for the sensor id provided.
     * This assumes a RAW source data format. See the McIDAS Users Guide 
     * Appendix C
     * for a table of sensor ids.
     * @param id Sensor id from the directory block
     * @param cal Calibration block used to initialize the Calibrator
     * 
     * @return initialized Calibrator with a source calibration
     * type of RAW.
     * @throws CalibratorException on an error initializing the object.
     */
	public final static Calibrator getCalibrator(final int id, final int[] cal) 
		throws CalibratorException {
		
		return getCalibrator(id, Calibrator.CAL_RAW, cal);
	}
	
    /**
     * Get an appropriate Calibrator for the sensor id provided.
     * See the McIDAS Users Guide 
     * Appendix C
     * for a table of sensor ids.
     * @param id Sensor id from the directory block
     * @param srcType the source data type from the directory block
     * @param cal Calibration block used to initialize the 
     *        Calibrator
     * @return initialized Calibrator.
     * @throws CalibratorException on an error initializing the object or if the
     *         sensor is unknown.
     */
	public final static Calibrator getCalibrator(
			final int id, final int srcType, final int[] cal) 
		throws CalibratorException {
		
		Calibrator calibrator = null;
	    switch (id) {
	      
	      case Calibrator.SENSOR_MSG8_IMGR:
		  case Calibrator.SENSOR_MSG9_IMGR:
		  case Calibrator.SENSOR_MSG10_IMGR:
	    	  calibrator = new CalibratorMsg(cal);
	    	  calibrator.setCalType(srcType);
	    	  break;
	        
	      case Calibrator.SENSOR_GOES8_IMGR:
	      case Calibrator.SENSOR_GOES8_SNDR:
	    	  calibrator = new CalibratorGvarG8(id, cal);
	    	  calibrator.setCalType(srcType);
	    	  break;
	    	  
	      case Calibrator.SENSOR_GOES9_IMGR:
	      case Calibrator.SENSOR_GOES9_SNDR:
	    	  calibrator = new CalibratorGvarG9(id, cal);
	    	  calibrator.setCalType(srcType);
	    	  break;
	    	  
	      case Calibrator.SENSOR_GOES10_IMGR:
	      case Calibrator.SENSOR_GOES10_SNDR:
	    	  calibrator = new CalibratorGvarG10(id, cal);
	    	  calibrator.setCalType(srcType);
	    	  break;
	    	  
	      case Calibrator.SENSOR_GOES12_IMGR:
	      case Calibrator.SENSOR_GOES12_SNDR:
	    	  calibrator = new CalibratorGvarG12(id, cal);
	    	  calibrator.setCalType(srcType);
	    	  break;
	    	  
	      case Calibrator.SENSOR_GOES13_IMGR:
	      case Calibrator.SENSOR_GOES13_SNDR:
	    	  calibrator = new CalibratorGvarG13(id, cal);
	    	  calibrator.setCalType(srcType);
	    	  break;

		  case Calibrator.SENSOR_GOES14_IMGR:
		  case Calibrator.SENSOR_GOES14_SNDR:
			  calibrator = new CalibratorGvarG14(id, cal);
			  calibrator.setCalType(srcType);
			  break;

		  case Calibrator.SENSOR_GOES15_IMGR:
		  case Calibrator.SENSOR_GOES15_SNDR:
			  calibrator = new CalibratorGvarG15(id, cal);
			  calibrator.setCalType(srcType);
			  break;

	      default:
	        throw new CalibratorException(
	            "Unknown or unimplemented sensor id: " + id
	        );
	    }
	    return calibrator;
	}
  
  /**
   * Check if there is a Calibrator implemented for a sensor.
   * 
   * @param id Id of the sensor from the McIDAS Users Guide
   * Appendix C
   * @return True if there is an implemented Calibrator, false
   *         otherwise.
   *
   * see The McIDAS Users Guide 
   */
  public final static boolean hasCalibrator(int id) {
    switch (id) {
	  case Calibrator.SENSOR_GOES15_IMGR:
	  case Calibrator.SENSOR_GOES15_SNDR:
	  case Calibrator.SENSOR_GOES14_IMGR:
	  case Calibrator.SENSOR_GOES14_SNDR:
      case Calibrator.SENSOR_GOES13_IMGR:
      case Calibrator.SENSOR_GOES13_SNDR:
      case Calibrator.SENSOR_GOES12_IMGR:
      case Calibrator.SENSOR_GOES12_SNDR:
      case Calibrator.SENSOR_GOES10_IMGR:
      case Calibrator.SENSOR_GOES10_SNDR:
      case Calibrator.SENSOR_GOES8_IMGR:
      case Calibrator.SENSOR_GOES8_SNDR:
      case Calibrator.SENSOR_GOES9_IMGR:
      case Calibrator.SENSOR_GOES9_SNDR:
      case Calibrator.SENSOR_MSG8_IMGR:
	  case Calibrator.SENSOR_MSG9_IMGR:
	  case Calibrator.SENSOR_MSG10_IMGR:
        return true;
      default:
        return false;
    }
  }
}

 

Ads help maintain this website.