/** @file  pmSubtractBias.h
 *
 *  This file will contain a module which will subtract the detector bias
 *  in place from an input image.
 *
 *  @author GLG, MHPCC
 *
 *  @version $Revision: 1.4 $ $Name: not supported by cvs2svn $
 *  @date $Date: 2005-11-23 23:54:30 $
 *
 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
 *
 */

#if !defined(PM_SUBTRACT_BIAS_H)
#define PM_SUBTRACT_BIAS_H

#if HAVE_CONFIG_H
#include <config.h>
#endif

#include<stdio.h>
#include<math.h>
#include "pslib.h"
#include "pmAstrometry.h"

typedef enum {
    PM_OVERSCAN_NONE,                         ///< No overscan subtraction
    PM_OVERSCAN_ROWS,                         ///< Subtract rows
    PM_OVERSCAN_COLUMNS,                      ///< Subtract columns
    PM_OVERSCAN_ALL                           ///< Subtract the statistic of all pixels in overscan region
} pmOverscanAxis;

typedef enum {
    PM_FIT_NONE,                              ///< No fit
    PM_FIT_POLYNOMIAL,                        ///< Fit polynomial
    PM_FIT_SPLINE                             ///< Fit cubic splines
} pmFit;

pmReadout *pmSubtractBias(
    pmReadout *in,                      ///< The input pmReadout image
    void *fitSpec,                      ///< A polynomial or spline, defining the fit type.
    pmFit fit,                          ///< PM_FIT_SPLINE, PM_FIT_POLYNOMIAL, or PM_FIT_NONE
    bool overscan,
    psStats *stat,                      ///< The statistic to be used in combining overscan data
    int nBin,                           ///< The amount of binning to be done image pixels.
    const pmReadout *bias,              ///< A possibly NULL bias pmReadout which is to be subtracted
    const pmReadout *dark               ///< A possibly NULL bias pmReadout which is to be subtracted
);

/******************************************************************************
DetermineTrimmedImageg() This private routine determines the region of the
input pmReadout which will be operated on by the various detrend modules.  It
does a metadata fetch on "CELL.TRIMSEC" for the parent cell of the pmReadout.
 
XXX: Consider making a pmUtils.c file and put this routine there.
 *****************************************************************************/
psImage *p_psDetermineTrimmedImage(
    pmReadout *in
);

#endif
