hicalbeta appiles radiometric calibration correction to HiRISE 
        images.  This particular version is deemed experimental, thus the beta
        designation.  The radiometric calibration correction is performed on 
        each individual HiRISE channel file (EDR) correcting for drift,
        instrument offset, dark current, line-dependant gain,  gain, flat field
        and finally, conversion to I/F, DN/uS or DNs.    There are 14 different 
        CCDs with 2 channels each for a total of 28 channels. (Note that 
        channels are the basic HiRISE image product where calibration is 
        applied.)
    
    
          Some of the calibration data are contained within each ISIS HiRISE 
          cube image as ancillary data.    These data are stored in ISIS BLOBs 
          (seen in the labels as Table objects). There are three primary 
          BLOB Tables used in the calibration: 
        
        
            - 
                HiRISE Calibration Image - Contains calibration image 
                data.  These data are acquired immediately before the actual 
                image observation from three distinct calibration sources.  
                Reverse Clock contains 20 lines of nominal zero (offset) 
                data. There is some serial register dark current but this is 
                negligible at the shorter line times.  Mask contains 
                20/bin lines of data from behind the aluminum mask.  It should 
                only contain dark current - serial and parallel.  Ramp is 
                8, 32, 64 or 128 time delay integration (TDI) lines that 
                includes signal from the reverse and forward clocking.  For a 
                uniform scene, the peak amplitude of the ramp should be 2X the 
                image area DN.
            
 
            - 
                HiRISE Calibration Ancillary -   These data are also 
                acquired prior to the actual image.  This BLOB contains two 
                types of calibration data.   Buffer Pixels are the 12 
                pixels at the start of each line of the calibration image. 
                Dark Pixels are the 16 pixels at the end of each line 
                under the aluminum mask.
            
 
            - 
                HiRISE Ancillary -  These data are acquired for each 
                image line.  This BLOB contains the same data as the HiRISE 
                Calibration Ancillary;  the Buffer Pixels and Dark 
                Pixels data contained here are for each image line and will 
                equal the total number of image lines. 
             
        
        Note that these data BLOBs are removed by 
hicalbeta in the output 
        file so that repeated runs of this application are prevented.
    
    
          The calibration is carried out in a series of modules. These modules 
          provide various contributions to the calibration process.  The   
          parameters that govern the behavior of these modules are contained in 
          the program configuration file as specified in the CONF program 
          parameter.   The default provided is automatically selected from the 
          ISIS MRO ancillary data that accompany the ISIS release and would 
          normally not need to be explicitly provided by the user.
    
      
              Each of the calibration modules has their own unique set of keywords 
              that govern is behavior.  This is documented in the CONF parameter.
      
          
      
          The equation that is applied is described below:
       
      
 Module Processing Summary:
          ZeroBufferSmooth          - Fills gaps in Buffer Data (ZBS)
          ZeroBufferFit             - Computes non-linear fit of ZeroBufferSmooth (ZBF)
          ZeroReverse               - Process Reverse Clocked data (ZR)
          ZeroDark                  - Dark current temperature correction (ZD) 
          GainLineDrift             - Time-base line drift correction (GLD)
          GainChannelNormalize      - Normalize gain for summing/TDI (GCN)
          GainNonLinearity          - Line-based non-linearity gain correction (GNL)
          GainFlatField             - Flat field correction (GFF)
          GainTemperature           - Temperature dependant gain correction (GT) 
          GainUnitConversion        - DN unit conversion factors (GUC) 
  The general form of the HiRISE calibration equation is:
    oDN = (iDN - ZBF(ZBS) - ZR - ZD)  / GLD * GCN * GNL * GFF * GT / GUC 
          where iDN is the input raw pixel value and oDN is the calibrated 
          output pixel value in 16-bit DN.
      
      
           Computation of these radiometric components is governed by the 
           PVL ()CONF) configuration file.  This file is highly customizable to 
           accommodate as many specialized processing needs as possible. The 
           contents of this file and how it may be used/customized is fully  
           described below in this documentation section.
      
           
                This important file provides all parameters used
                in the calibration process.  It contains references to
                calibration matrices (such as flat fields, instrument gains,
                etc...), label keywords and parameters used in the radiometric 
                calibration process.  
            
            
                This highly flexible configuration file contains numerous module 
                profiles that govern the behavior of each phase in the 
                calibration process.  These modules each have parameters that 
                are specific to their function.  There are 10 different modules 
                used in the application.  However, the configuration file will 
                typically include many other profiles. The user can take 
                advantage of the ability to merge other profiles into one or 
                more of the other main profiles, simply by the content of the 
                labels or observing conditions of the image. 
            
            
                The file must contain a top level  Hical object.  Within 
                this object are numerous profiles.  The keywords that are 
                contained in the Object section of the file are always used in 
                every profile and can be superseded by any subsequent profile 
                loaded after the initial one.  Optional profile names are 
                constructed by the combination of the OptionKeywords and 
                ProfileOptions  keywords.   The OptionKeywords 
                lists keyword groups in the configuration file and/or label that 
                can be used to textually replace the patterns surrounded by the 
                {} in the  ProfileOptions  keyword.  The keywords 
                FILTER, CCD, CHANNEL, TDI and BIN are always generated after the 
                initial module and label are loaded in.  After the initial 
                profile is loaded, the FROM file label is loaded using the 
                LabelGroups list to determine which keywords are loaded.  
                Note that the groups must exist or an error is issued.  
                Otherwise, the user can specify any defined keyword in the 
                OptionKeywords list to apply to profile names.  
            
            
                The real power of the configuration file is its use of named Profiles.
                Profiles are groups of keywords that can be associated to a
                unique definition.  The hicalbeta PVL configuration file 
                consists of a single  Hical object with numerous named 
                Profile groups.  Each of the Profile groups must contain 
                a Name keyword that uniquely identifies it within the 
                Hical object.  This allows us to create Profiles that pertain to 
                particular combinations of filter (RED, IR, BG), CCD (RED0-9, 
                IR10/11, or BG12/13), TDI (128, 64, 32, 8), BIN (1, 2, 3, 4, 8, 
                16)  or CHANNEL (0 or 1).  These values are determined from the 
                content of the HiRISE label.  Combinations of profiles that are 
                added after the initial default are specified in the
                ProfileOptions keyword.  Profile combinations can 
                consist of any combination or use of these defined values.
                These defined values are specified as or with the Name
                keyword in Profile groups delimited by curly braces.  Given
                this definition one can specify a particular group of calibration
                parameters for a specific CCD channel with the pattern
                {FILTER}{CCD}_{CHANNEL}.   Then, one can define a special
                collection of calibration matrices, keywords or scalars for any
                one (or none) of the filters.  So, for the problematic IR10, you
                can have a named profile called IR10_1 whose keywords in the
                profile are loaded when calibrating a IR10_1 channel, thus
                overriding any defaulted keywords in all profiles.  Should named
                profiles using this option not exist, they are ignored.  Also,
                profiles specified in this manner are loaded in the
                order specified in the ProfileOptions keyword, thus
                creating a hierarchy of calibration specification configurations.
            
            
                OptionKeywords specify replacement patterns that exist in 
                retrieval of all filename references in the configuration file. 
                This includes virtually all files including matrix and CSV 
                files. 
            
            
                Matrices are comma separated values (CSV)  files that contain 
                rows and columns as content requires.  There is expected
                content in the CSV matrix file  to support 28 HiRISE CCD 
                channels where indicated.  Module requirements dictate matrix
                content, however.   There will always be one line for these CSV 
                files since HiRISE detectors are line scan instruments. There 
                will be a minimum of 64 (for summing mode of 16) and a maximum 
                of 1024 (summing mode of 1) samples in these files.  The content 
                of these matrix files may also be dependent upon summing mode 
                and the time delay integration (TDI) mode used during image 
                acquisition.  TDI allows varying number of line scans, in 
                conjunction with exposure time, to pass over the same point on 
                the surface of Mars to increase the signal-to-noise ration (SNR) 
                as well as resolution.  There are 4 selectable modes of TDI: 
                128, 64, 32 and 8.  Coupled with 6 different summing modes (1, 
                2, 3, 4, 8, and 16), there are at most 24 calibration matrices 
                per set. These matrices are referenced as file paths and 
                patterns of the form:
                
 Flats = $mro/calibration/matrices/A_TDI{TDI}_BIN{BIN}_????.csv
                
                Here, {TDI} and {BIN} correspond to the TDI and summing mode
                used during image acquisition, respectively.  Matrix variables 
                are equated to file references using the pattern substituion of 
                keywords enclosed in {} in the configuration file.   Matrix file 
                paths are also subjected to pattern replacement in the same 
                fashion as profiles.  This will minimize the content management 
                aspect of the configuration file and encourage consistant file 
                naming schemes.
            
            
                Below is an example of a complete PVL configuration file that
                demonstrates some of the features described:
            
            
#  HiRISE Calibration Matricies configuration file
#  See documentation for the hicalbeta application on the content and form of
#  this file.
Object = Hical
  Program = "hicalbeta"
  Name           = "HiMatrices"
  DefaultProfile = "HiMatrices"
/* If you want to rerun hicalbeta, you must set PropagateTables to True.  Use */
/* this in conjuction with Debug::SkipModule = True option for each module. */
  PropagateTables = False
/* Define label groups that are loaded for each profile reference */
/* Note all keywords in these groups become available to all profiles. */
/* Thus, you can use them in the OptionKeywords and ProfileOptions keywords */
/* to create very specialized profiles for special needs. */
/* Specify the FPA reference temperature.  It is used in several modules so */
/* it is specified at the top level */
  LabelGroups = ( "Dimensions", "Instrument", "Archive")
/* These keywords are used in ProfileOptions mapping.  Note that order and */
/* case matter!  WARNING:  You can easily break file lookups if these keys */
/* are deleted or modified improperly!!! */
  OptionKeywords = ("FILTER", "CCD", "CHANNEL", "TDI", "BIN", "ProductId",
                    "Program", "Module", "OPATH", "CalOptions")
/* Additional profile combinations and order load hierarchy.  These keywords */
/* are defined when the LabelGroups are loaded. */ 
/* Kris Becker & Eric Eliason updated 10/24/2008 */
/* ProfileOptions value added: {Module}_{CalOptions} */
  ProfileOptions = ("{FILTER}", "TDI{TDI}", "BIN{BIN}", "TDI{TDI}/BIN{BIN}",
                    "{FILTER}{CCD}_{CHANNEL}",
                    "{FILTER}{CCD}_{CHANNEL}/TDI{TDI}/BIN{BIN}", "Debug",
                    "{Module}_{CalOptions}")
/* Specify the FPA reference temperature.  It is used in several modules so */
/* it is specified at the top level */
  FpaReferenceTemperature = 21.0
  /* This profile contains parameters pertinent to processing the buffer */
  /* pixels for subsequent using in the down-line offset correction, ZeroBufferFit module */
  Group = Profile
    Name = ZeroBufferSmooth
    Module = ZeroBufferSmooth
    ZeroBufferSmoothFirstSample = 5
    ZeroBufferSmoothLastSample = 11
    ZeroBufferSmoothFilterWidth = 201
    ZeroBufferSmoothFilterIterations = 2
  End_Group
/* This profile contains parameters pertinent to processing the down-line offset correction */
/* We do not use this by default because a functional fit misses important bumps and wiggles in */
/* the buffer pixels, which are required to remove similar noise from the image area. */
  Group = Profile
    Name = ZeroBufferFit
    Module = ZeroBufferFit
  /* Uncomment to turn off non linear fitting of ZeroBufferSmooth data and pass it thru */
    ZeroBufferFitSkipFit = True
  /* Uncomment to use linear fitting of ZeroBufferSmooth data when non-linear fails */
  /* Default is to pass thru filtered ZeroBufferSmooth data */
  /* ZeroBufferFitOnFailUseLinear = True */
  /* Minimum number of good lines (NLines - (TrimLines/Summing)) to fit */
    ZeroBufferFitMinimumLines = 250
  /* Maximum  number of iterations for the algorithm to converge and */
  /* other limits */
    MaximumIterations = 100
    MaximumLog        = 709.0
  /*  Convergence parameters for Levenberg-Marquardt algorithm */
  /*  Equation is solved when |dx_i| < AbsoluteError + RelativeError * |x_i| */
  /*    where dx is the last step and x is the current step for each i-th */
  /*    value */
    AbsoluteError = 1.0E-4
    RelativeError = 1.0E-4
  /* Filtering of the guestimate buffer */
    GuessFilterWidth = 17
    GuessFilterIterations = 1
  #    DumpModuleFile = "{ProductId}_{Module}.log"
  End_Group
/* This profile contains parameters pertinent to processing the offset in the columns */
  Group = Profile
    Name = ZeroReverse
    Module = ZeroReverse
/* Set calibration parameters for hiclean operations.  Indexes are all 0-based */
    ZeroReverseFirstLine = 1
    ZeroReverseLastLine  = 19
/* Reverse Clock trigger Statistics profiles */
    ReverseClockStatistics = "$mro/calibration/matrices/beta/ReverseClockStatistics.????.conf"
    RevLisTolerance = 1
    RevHisTolerance = 1
    RevNulTolerance = 1
  End_Group
/*  Skip reverse clock if the ReverseReadoutNoise is to large */
/*  Profile added by Kris Becker & Eric Eliason, 10/25/2008 */
  Group = Profile
    Name = Zz_ReverseReadoutNoise
    Debug::SkipModule = True
  End_Group
/* This profile contains parameters pertinent to processing dark current. */
/* Required label keywords:  Summing, Tdi, FpaPositiveYTemperature, */
/*                           and FpaNegativeYTemperature, Lines */
/* Also needs LineTime which is computed. */
  Group = Profile
    Name = ZeroDark
    Module = ZeroDark
/* Define the B matrix file reference */
    B = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
    SkipLines        = 1
    Slope            = "$mro/calibration/matrices/beta/t_slope_CH{CHANNEL}_hicalbeta_????.csv"
    Intercept        = "$mro/calibration/matrices/beta/t_intercept_CH{CHANNEL}_hicalbeta_????.csv"
/* As of version 0020, 9 March 2010, we will be using the following names and formats */
/* We are calling this the DarkCurrent now.  The filename will stay the same (with a .csv extension) */
    DarkCurrent = "$mro/calibration/matrices/beta/B_TDI{TDI}_BIN{BIN}_hicalbeta_????.csv"
    DarkCurrentColumnName = "{CCD}/{CHANNEL}"
/* The slope and intercepts to the temperature-dependent correction to the dark current are given below. */
    DarkSlope = "$mro/calibration/matrices/beta/B_Temperature_Slope_hicalbeta_????.csv"
    DarkSlopeColumnName = "CH{CHANNEL}_TDI{TDI}"
    DarkIntercept = "$mro/calibration/matrices/beta/B_Temperature_Intercept_hicalbeta_????.csv"
    DarkInterceptColumnName = "CH{CHANNEL}_TDI{TDI}"
    /* Do filtering? */
    ZeroDarkFilterWidth      = 3
    ZeroDarkFilterIterations = 1
  End_Group
/* This profile contains parameters pertinent to processing the nonlinear gain correction */
  Group = Profile
    Name = GainNonLinearity
    Module = GainNonLinearity
  
/* Define the nonlinearity correction coefficients */
    NonLinearityGain = "$mro/calibration/matrices/beta/Gain_NonLinearity_BIN{BIN}_hicalbeta_????.csv"
    NonLinearityGainRowName  = "{CCD}_{CHANNEL}"
  End_Group
/* This profile contains parameters pertinent to processing down-line gain correction. */
/* Required label keywords: CpmmNumber, ChannelNumber, Lines */
/* This module has been reactivated as of 2010-01-29 */
  Group = Profile
    Name = GainLineDrift
    Module = GainLineDrift
    SkipLines            = 1
/* Added "_hicalbeta" to filename as of 2008-04-02.  This is consistant with */
/* naming convention used for the beta version of hical. */
    GainLineCoefficients = "$mro/calibration/matrices/beta/line_correct_{BIN}_hicalbeta_????.csv"
/* As of version 0020, 9 March 2010, these are more correctly, called the LineGainDrift correction*/
    LineGainDrift = "$mro/calibration/matrices/beta/Line_Gain_Drift_BIN{BIN}_hicalbeta_????.csv"
    LineGainDriftColumnHeader = True
    LineGainDriftRowName = "{CCD}/{CHANNEL}"
  End_Group
/* This profile contains parameters pertinent to processing gain correction. */
/* Required label keywords: CpmmNumber, ChannelNumber, Lines */
  Group = Profile
    Name = GainChannelNormalize
    Module = GainChannelNormalize
/* Define the G matrix file reference */
    G = "$mro/calibration/matrices/beta/G_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
/* As of version 0020, 9 March 2010, these coefficients have been renamed to Gains. */
    Gains = "$mro/calibration/matrices/beta/Gains_hicalbeta_????.csv"
    GainsRowName = "{BIN}"
    GainsColumnName = "{CCD}/{CHANNEL}"
  End_Group
/* This profile contains parameters pertinent to processing gain correction. */
/* Required label keywords: CpmmNumber, ChannelNumber, Tdi, Lines */
  Group = Profile
    Name = GainFlatField
    Module = GainFlatField
/* Define the A matrix file reference */
     A = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hicalbeta_????.cub"
/* As of version 0020, 9 March 2010, These have the same filename with a .csv extension.*/
/* As of version 0020, 9 March 2010, These coefficients are now called Flats. */
    Flats = "$mro/calibration/matrices/beta/A_TDI{TDI}_BIN{BIN}_hicalbeta_????.csv"
    FlatsColumnName = "{CCD}/{CHANNEL}"
  End_Group
/* This profile contains parameters pertinent to processing */
/* temperature-dependant gain correction.  Formally in GainFlatField module. */
/* Required label keywords: CpmmNumber, ChannelNumber, Samples */
  Group = Profile
    Name = GainTemperature
    Module = GainTemperature
/* Define temperature-dependant gain correction CSV file */
    FpaTemperatureFactorSkipLines = 4
    FpaTemperatureFactorHeader = True
    FpaTemperatureFactorFile = "$mro/calibration/matrices/beta/FpaTemperatureGain_BIN{BIN}.????.csv"
/* As of version 0020, 9 March 2010, This is now called the FPAGain. */
    FPAGain = "$mro/calibration/matrices/beta/Temperature_Gain_????.csv"
    FPAGainColumnName = "{CCD}/{CHANNEL}"
    FPAGainRowName = "{BIN}"
  End_Group
/* This profile contains parameters pertinent to processing I/F conversion. */
/*  Required label keywords: ScanExposureDuration */
  Group = Profile
    Name = GainUnitConversion
    Module = GainUnitConversion
/* I/F correction for tdi/bin - currently set at 1.0 for all tdi/bin */h
/* combinations. */
    GainUnitConversionBinFactor = 1.0
  End_Group
/* Here are the filter profiles.  All keywords that pertain to a filter set */
/* should be specified here.  FilterGainCorrection are I/F corrections in */
/* units of DN/s. */
/* Added CalFact, CCD QE, Temp dependence correction 2010-04-28 */
  Group = Profile
    Name = RED
    FilterGainCorrection = 157510165.0
    IoverFbasetemperature = 18.9
    QEpercentincreaseperC = 0.0005704
    AbsGain_TDI128 = 6.3688
  End_Group
  Group = Profile
    Name = IR
    FilterGainCorrection = 56392816.0
    IoverFbasetemperature = 18.9
    QEpercentincreaseperC = 0.002696
    AbsGain_TDI128 = 6.9809
  End_Group
  Group = Profile
    Name = BG
    FilterGainCorrection = 114682896.0
    IoverFbasetemperature = 18.9
    QEpercentincreaseperC = 0.00002295
    AbsGain_TDI128 = 6.9738
  End_Group
  Group = Profile
    Name = IR10_1
#   LastGoodLine = 3100
  End_Group
  Group = Profile
    Name = Debug
/** Current disables writting to label history due to bug in keyword formatter in ISIS **/
/* The bug has the following error signature: */
/*        terminate called after throwing an instance of 'std::out_of_range'  */
/*          what():  basic_string::substr                                     */
/*         Abort                                                              */
/* You must set this to false when this occurs as a workaround and use the */
/* DumpHistoryFile parameter to see the parameter history. */
    LogParameterHistory = False
/* Uncomment this line to write parameter history to the ProductId log */
   DumpHistoryFile = "{OPATH}/{ProductId}.{Program}.log"
/* Uncomment this line to dump Module data for every module when using Debug */
/* profiling. */
    DumpModuleFile = "{OPATH}/{ProductId}_{Module}.log"
  End_Group
End_Object
            
      
                The filter profiles each contain a scalar constant of the same name
                for each of the three filter sets.  The ProfileOrder keyword
                contains the {FILTER} pattern that will select the appropriate
                filter gleened from the label.  Other profiles that satisfy the remaining
                patterns are excluded but can be added when necessary.
      
            
                The final resutling matrices, constants and keywords used in
                the calibration equation are recorded in the 
                RadiometricCalibration group of the output label.
            
                
Application Control Parameters
                
                      
                        Description of main hicalbeta configuration 
                        parameters.  These parameters govern profile loading, 
                        filename pattern replacement and debugging operations.   
                        Note that keywords in this section are present in all 
                        subsequent profile/module loading. 
                       
                    
                      | Parameter | 
                      Description | 
                    
                    
                       | Program | 
                       
                         This keyword is set to the name of the application and can 
                         be used to create unique filenames as described previously.
                        | 
                    
                    
                        | Name | 
                        
                            The name of the current profile.  This keyword is
                            required and is present in the Object keyword section as 
                            well as in all other Profile groups.  This uniquely 
                            identifies the final comingled profile.
                         | 
                    
                    
                        | DefaultProfile | 
                        
                            This names the default profile that is loaded when none 
                            are specifically called for in the application.  It can 
                            be any profile  but is generally the Object profile  
                            (Debug might be an interesting alternative).  This 
                            will cause no other profiles to be added when a 
                            generic one is retrieved.
                         | 
                    
                    
                       | PropagateTables | 
                       
                         Specifies the behavior of the table propagation of the 
                         FROM file to the TO file when the file is completed.  
                         This has some interesting implications.  When False, 
                         all Table objects in the FROM file are removed in the 
                         TO file, which in effect prevents hicalbeta from being 
                         able to run again.  However, because of debugging 
                         capabilities, one may want to select which calibration 
                         modules are run.  Setting this to True will propagate 
                         all Table objects (BLOBs) in the FROM file to the TO 
                         file so that hicalbeta can be run again to apply other 
                         modules.
                        | 
                    
                    
                        | LabelGroups | 
                        
                            This keyword identifies which Groups in the FROM ISIS 
                            cube label are included in profiles.  This allows any 
                            label keyword in the ISIS label to become available for 
                            profiling and filename generation.  Its handy for 
                            creating very specific profiles for problem images and 
                            other debugging purposes.
                         | 
                    
                    
                        | OptionKeywords | 
                        
                            This keyword selects other keywords in the configuration 
                            file or the FROM label groups as defined in the 
                            LabelGroups keyword.  This list is used to specify 
                            additional profiles that can be loaded (via 
                            ProfileOptions) and variable substitution within file 
                            names (such as B, G and A matrix files).
                         | 
                    
                    
                        | ProfileOptions | 
                        
                            This keyword contains the load hierachy pattern of 
                            modules/profiles that are evaluated each time a 
                            module is invoked.  All values in this keyword are 
                            an additional potential module that will be loaded 
                            into the existing module keyword definition set if 
                            it exists in the config file (provided by CONF).  
                            The values enclosed in {} are presumed to be an 
                            existing keyword in the current state of the module 
                            keyword set.  If the keyword exists, its value is 
                            used to search for an additional module that will be 
                            loaded into the current module keyword list.  If it 
                            doesn't exist, it is ignored.  
                         | 
                    
                    
                        | FpaReferenceTemperature | 
                        
                            This specifies the reference temperature, in units 
                            of Celsius, used to normalize temperature-dependant 
                            radiometric calibration variables.  It is specified 
                            here since it is used in several modules.
                         | 
                    
                    
                        | Debug::SkipModule | 
                        
                            This special keyword exists to provide the ability 
                            to complete bypass processing of a module.  If this 
                            configuration keyword resolves to True in any module 
                            configuration profile, then the module is not 
                            invoked and the resulting contribution is set 
                            appropriately such that it does not contribute to 
                            the calibration process.   This is very useful for 
                            debugging and seeing how each module contributes.   
                            Be sure to set ProgagateTables to True if you 
                            intend to perform subsequent runs of hicalbeta.
                         | 
                    
                    
                        | OPATH | 
                        
                            This keyword is the value of the OPATH parameter 
                            entered when the program is executed.  It can be 
                            used to specify a path where log files are written 
                            when that option is invoked.  If the user did not 
                            specify a value for this keyword, the current path 
                            is supplied by default.
                         | 
                    
                   
                        | DumpModuleFile | 
                        
                            This special keyword exists to provide the ability 
                            to dump data from each Module.  Each Module 
                            implements a data dump that will be written to this 
                            file.  The file name can be made up of a combination 
                            of any label or configuration keyword.  The example 
                            provided in the config file section uses the 
                            ProductId and the name of the Module with a .log 
                            extension.  This keyword can be included in 
                            individual Module Groups or at the top level which 
                            will effectively dump all Modules.  Note that the 
                            GainUnitConversion Module is excluded from this 
                            feature as its data are contained entirely in the 
                            history report.
                         | 
                    
                   
                        | DumpHistoryFile | 
                        
                            This special keyword exists to provide the ability 
                            to dump the Module history from each Module.  Each 
                            Module maintains a processing history that will be
                            written to this file.  The file name can be made up
                            of a combination of any label or configuration
                            keyword. The example provided in the config file
                            section uses the ProductId and the name of the 
                            Program with a .log extension. 
                         | 
                    
                
      
          The following tables describe hicalbeta module processing 
          overview.  A general description of the module processing steps and 
          configuration file parameters for the modules are provided.  Note that 
          each module contains a Name and Module parameter that 
          are always the module name (e.g., ZeroBufferSmooth).  They are 
          excluded from each module description below due to the redundant 
          nature of the keywords and for brevity unless they are set to 
          something other than the module name.
      
      
          Note that all module group descriptions are profiles.  Not all 
          profiles are modules.   Multiple profiles can be loaded to fully 
          define a set of module parameters.    The order of potential profiles 
          that are loaded in addition to the one requested directly in                                                      
          hicalbeta application is specified by the                                 
          ProfileOptions keyword as described above.
      
            
ZeroBufferSmooth Module Parameters
 
            
                  
                      Reads and processes the BufferPixels from the "HiRISE 
                      Ancillary" image BLOB.  The data is smoothed and missing 
                      data is filled with a cubic spline.
                    
                
                  | Parameter | 
                  Description | 
                
                
                    | ZeroBufferSmoothFirstSample | 
                    
                        Specifies the first (0-based indexed) BufferPixels 
                        sample to start the average.
                     | 
                
                
                   | ZeroBufferSmoothLastSample | 
                   
                       Specifies the last (0-based indexed) BufferPixels sample 
                        to end the average.
                    | 
                
                
                    | ZeroBufferSmoothFilterWidth | 
                    
                        Specifies the width of the filter to smooth and fill 
                        gaps in the resulting BufferPixels averages.  [Default: 
                        201]
                     | 
                
                
                    | ZeroBufferSmoothFIlterIterations | 
                    
                        Specifies the number of sequential filters to apply to 
                        the averaged buffer pixels before finally filling with a 
                        spline. [Default: 2]
                     | 
                
            
            
ZeroBufferFit Module Parameters
 
            
                  
                      This module uses the ZeroBufferSmooth results and computes 
                      a non-linear equation for removal of the drift component. 
                      It uses a Levenberg-Marquardt algorithm to solve the 
                      equation f(x) = a0 + a1 * linetime + a2 * exp(a3 * 
                      linetime).
                    
                
                  | Parameter | 
                  Description | 
                
                 
                     | ZeroBufferFitSkipFit | 
                     
                         This parameter can be used to turn on/off the 
                         non-linear fitting process described above.  When 
                         missing or set to TRUE, the result of the 
                         ZeroBufferSmooth module is used.  If FALSE, the 
                         ZeroBufferFit fitting is applied using the parameters 
                         provided. [Default: True, meaning it is currently not 
                         used] 
                      | 
                 
                 
                      | ZeroBufferFitOnFailUseLinear | 
                      
                          This parameter can be used to select the behavior of 
                          the data produced by the ZeroBufferFit module when the 
                          non-linear fitting process has failed (typically due 
                          to non-convergence).  If set to TRUE, a linear fit to 
                          the latter half of the ZeroBufferSmooth (BufferPixel) 
                          data is computed.  If FALSE or non-existent, the 
                          result of the ZeroBufferSmooth module is used as is.
                       | 
                  
                
                    | ZeroBufferFitMinimumLines | 
                    
                        Minimum number lines required to apply the non-linear 
                        fit processing.  The actual number of lines used is the 
                        total lines less TrimLines/Summing.  If there are not 
                        enough lines, then the result of the ZeroBufferSmooth 
                        module (filtered BufferPixel data) is simply passed 
                        through as is.  This results in the same behavior when 
                        the ZdSkipFit parameter is invoked.
                     | 
                
                
                    | MaximumIterations | 
                    
                        The maximum number of iterations to allow the equation 
                        to converge.
                     | 
                
                
                   | MaximumLog | 
                   
                        Constrains the last term in the equation such that the 
                        exponent will not cause an overflow.
                    | 
                
                
                    | AbsoluteError | 
                    
                        Specifies the absolute maximum error to determine 
                        convergence.
                     | 
                
                
                    | RelativeError | 
                    
                        Specifies the relative maximum error to determine 
                        convergence.
                     | 
                
               
                    | GuessFilterWidth | 
                    
                        The data used to fit the non-linear equation can be 
                        optionally filtered before fitting.  This controls the 
                        width of the filter [Default: 17].
                     | 
                
               
                    | GuessFilterIterations | 
                    
                        This parameter controls the number of times the fit 
                        buffer is filtered prior to non-linear fitting.  Set 
                        this to 0 to turn off this processing and use the data 
                        as is.  Note this is in addition to the filtering done 
                        in the ZeroBufferSmooth module.  [Default: 1].
                     | 
                
            
            
ZeroReverse Module Parameters
 
            
                   
                      This module uses the Reverse Clocked region to compute the 
                      offset that is then subtracted from the result of the 
                      ZeroBufferFit module.  Processing is governed by some 
                      statistical properties of this region.  The standard 
                      deviation and special counts are compared to tolerances 
                      provided in the ReverseClockStatistics file that will 
                      trigger the use of a constant mean value for this 
                      correction.  The result of these values are subtracted 
                      from each sample pixel column.
                    
                
                  | Parameter | 
                  Description | 
                
                 
                    | ZeroReverseFirstLine | 
                    
                       Specifies the first line of the Reverse Clocked region in 
                       the input FROM file "HiRISE Ancillary Image" data to 
                       average for dark current correction.
                     | 
                
                
                    | ZeroReverseLastLine | 
                    
                       Specifies the last line in the Reverse Clocked region in 
                       the input FROM file "HiRISE Ancillary Image" data to 
                       average for dark current correction.
                     | 
                
                
                    | ReverseClockStatistics | 
                    
                   
ReverseClockStatistics    
                      
                  
                         
                            This is the name of a file that contains profiles 
                            for individual channel images and summing modes for 
                            trigger and mean values that govern how the offset
                            component is determined.  The default file name is 
                            "ReverseClockStatistics.XXXX.conf" where "XXXX" is a 
                            version number.   Note that the contents of the 
                            composed hicalbeta configuration profile is used to 
                            provide initial values for the profile loaded out of 
                            this file.  
                          
                      
                        | Parameter | 
                        Description | 
                       
                      
                          | Name | 
                          
                              This names each image profile.  The name is a 
                              combination of FILTER(e.g., RED, BG, IR), CCD 
                              (1-13) followed by an underscore and the channel 
                              number (0, 1) followed by another underscore and 
                              the summing mode (0-8).  Example: RED0_1_1.
                           | 
                       
                      
                         | RevMeanTrigger | 
                         
                           Maximum mean value of the Reverse Clocked data 
                           region.  Means that exceed this value will instead 
                           use this value as the offset correction value for all 
                           samples.
                          | 
                       
                      
                          | RevStdDevTrigger | 
                          
                            Maximum standard deviation value of the Reverse 
                            Clocked data region.  Standard deviations that 
                            exceed this value will instead cause the 
                            RevMeanTrigger value to be used as the offset 
                            constant for all samples.
                           | 
                       
                   
                     | 
                
                
                    | RevLisTolerance | 
                    
                        The maximum number of low instrument saturation (LIS)
                        special pixels that can exist in the Reverse Clocked 
                        calibration data region.  If more LIS pixels exist in 
                        this region, then the RevMeanTrigger value is used in 
                        lieu of the processed Reverse Clocked data.  This value 
                        provides the default (1) for all HiRISE images which can 
                        be changed/overridden in subsequently loaded profiles (such as 
                        the one loaded in the ReverseClockStatistics file).
                     | 
                
                
                    | RevHisTolerance | 
                    
                        The maximum number of high instrument saturation (HIS)
                        special pixels that can exist in the Reverse Clocked 
                        calibration data region.  If more HIS pixels exist in 
                        this region, then the RevMeanTrigger value is used in 
                        lieu of the processed Reverse Clocked data.  This value 
                        provides the default (1) for all HiRISE images which can 
                        be changed/overridden in subsequently loaded profiles 
                        (such as the one loaded in the ReverseClockStatistics 
                        file).
                     | 
                
                
                    | RevNulTolerance | 
                    
                        The maximum number of null (NUL) special pixels that 
                        can exist in the Reverse Clocked calibration data 
                        region. If more NUL pixels exist in this region, then 
                        the RevMeanTrigger value is used in lieu of the 
                        processed Reverse Clocked data.   This value  provides 
                        the default (1) for all HiRISE images which can be 
                        changed/overridden in subsequently loaded profiles (such 
                        as the one loaded in the ReverseClockStatistics file).
                     | 
                
            
            
            
ZeroDark Module Parameters
 
            
                  
                      The dark current subtraction consists of a correction 
                      based on the "B-matrices" and a temperature correction to 
                      these B-matrices, based on a reference FPA temperature and 
                      the average of the two FPA temperature measurements   
                      (FPA_POSITIVE_Y_TEMPERATURE and 
                      FPA_NEGATIVE_Y_TEMPERATURE) taken just before image 
                      acquisition.  The B-matrices are generated from the 
                      residuals left from the previous steps performed on (some) 
                      dark frame (night-side) calibration imaging.  The 
                      temperature correction is a 256-column linear fit (y=mx+b, 
                      where m and b are each 256 columns) to correct for the FPA 
                      temperature of the image based on a reference temperature 
                      of 21 degrees C (this is the FpaReferenceTemperature 
                      parameter described above). The 256 columns were used 
                      because of the low number of in-flight dark frame images 
                      acquired--all bin modes were utilized to generate these 
                      linear fits. 
                      hicalbeta does a rebin to expand or contract the 
                      bin4 linear coefficients to bin8, bin2, or bin1, depending 
                      on the bin mode of the image being calibrated. 
                  
                
                  | Parameter | 
                  Description | 
                
                
                    | DarkCurrent | 
                    
                        This is the "B-matrix" as generated from the residuals 
                        left from the previous calibration steps performed on 
                        (some) dark frame (night-side) calibration imaging. 
                     | 
                
                 
                    | DarkSlope | 
                    
                        Specifies the file pattern containing the slope 
                        component (m) of the Temperature profile in the above 
                        "y=mx+b" equation.
                     | 
                
                
                    | DarkIntercept | 
                    
                        Specifies the file pattern containing the intercept (b) 
                        component of the Temperature profile in the above 
                        "y=mx+b" equation.
                     | 
                
                
                    | ZeroDarkFilterWidth | 
                    
                        Width of the smooth filter component for the temperature 
                        profile applied after the data has been expanded or 
                        contracted to fit the binning mode of the image.
                     | 
                
                
                    | ZeroDarkFilterIterations | 
                    
                       Specifies the number of sequential filters of width 
                        ZeroDarkFilterWidth to apply to the resulting 
                        temperature profile after expanding or contracting of 
                        the data. [Default: 1]
                     | 
                
            
            
            
GainLineDrift Module Parameters
 
            
                   
                      The GainLineDrift module in hicalbeta uses the line
                      correction coefficients which are contained in the file as 
                      patterned by the LineGainDrift as defined below.  
                      This file contains 4 parameters (C[1234]) and is applied 
                      using the equation  ""C1 + C2 * LT + C3 * e xp (C4 * LT)" 
                      where LT is line time in seconds based upon binning and 
                      line exposure duration (from the ScanExposureDuration 
                      label keyword).
                       
                
                  | Parameter | 
                  Description | 
                
                 
                    | LineGainDrift | 
                    
                        Specifies the file pattern containing the 4 line 
                        correction parameters (C[1234]) of the gain/line 
                        equation as described above.
                     | 
                
                
                    | LineGainDriftColumnHeader | 
                    
                        This parameter specifies whether the 
                        LineGainDrift file contains a header line to 
                        skip.  It is a True/False boolean value.  It is needed 
                        here to notify the generic CSV parser a column header 
                        exists but is not used to resolve the extraction of 
                        values from the file.
                     | 
                
                
                    | LineGainDriftRowName | 
                    
                        Specifies the desired row header name contained in the 
                        LineGainDrift file from which to extract the 
                        applicable 4 parameters.  This must be specified to 
                        select a specific given row.  Its presence in the config 
                        file implies a row header exists in the first column of 
                        the LineGainDrift file.  The value of this 
                        parameter is typically specified in the config files as 
                        a pattern combination of the CCD and Channel of the 
                        image being calibrated.
                     | 
                
            
            
GainNonLinearity Module Parameters
 
            
                   
                       The GainNonLinearity module in hicalbeta uses the 
                       nonlinearity coefficients that are derived as a function 
                       of binning mode.  These coefficients are used in the 
                       following equations to correct for nonlinear gain 
                       (signal-dependent gain) "GNL = 1 - (GNLc * <Line>)" 
                       where GNLc is the GainNonLinearity coefficient (CCD and 
                       Channel dependent) derived as described below, and 
                        <Line> is the average of the line of the image 
                        being processed. 
                  
                
                  | Parameter | 
                  Description | 
                
                 
                    | NonLinearityGain | 
                    
                        This is the file pattern containing the GNLc parameter 
                        in the above equation.
                     | 
                
                
                    | NonLinearityGainRowName | 
                    
                        Specifies the name of the row in the                                          
                        NonLinearityGain file to extract the coefficient 
                         from.  The existence of this parameter implies the 
                         first column in this file contains a named header for 
                         each row.  The value of this parameter is typically 
                         specifed in the config files as a pattern combination 
                         of the CCD and Channel of the image being calibrated.
                     | 
                
            
            
GainChannelNormalize Module Parameters
 
            
                   
                      The GainChannelNormalize module in hicalbeta uses the 
                      bin, TDI, CCD, and Channel dependent coefficients 
                      described below in the equation "GCN = GCNc * 128 / (TDI 
                      * bin^2)" where GCNc is the normalization coefficient 
                      extracted from the Gains file below, and the final 
                      term is the normalization to bin=1, TDI=128. 
                  
                
                  | Parameter | 
                  Description | 
                
                 
                    | Gains | 
                    
                        This parameter is the file pattern of the "G-matrix" 
                        containing the GCNc parameter in the equation above.
                     | 
                
                
                    | GainsRowName | 
                    
                        This parameter specifies the name of the row in the 
                        Gains file from which to extract the GCNc 
                         parameter.  Its existence implies a row header exists 
                         in the first column of the file.  Its value is a 
                         function of the binning mode of the image being 
                         calibrated.
                     | 
                
                
                    | GainsColumnName | 
                    
                        This parameter specifies the name of the column in the 
                        Gains file from which to extract the GCNc 
                         parameter.  Its existence implies a column header 
                         exists in the first row of the file.  Its value is a 
                         combination of the CCD and Channel of the image being 
                         calibrated. 
                     | 
                
            
            
GainFlatField Module Parameters
 
            
                   
                      The application of the "A-matrix" flatfield correction.
                    
                
                  | Parameter | 
                  Description | 
                
                 
                    | Flats | 
                    
                        This parameter is the file pattern of the "A-matrix" 
                        containing the per-sample flatfield correction 
                        parameter. 
                     | 
                
                
                    | FlatsColumnName | 
                    
                        This parameter specifies the name of the column in the 
                        Flats file from which to extract the flat field 
                         parameter.  Its existence implies a column header 
                         exists in the first row of the file.  Its value is a 
                         combination of the CCD and Channel of the image being 
                         calibrated. 
                     | 
                
            
            
GainTemperature Module Parameters
 
            
                   
                      This module contains parameters specific to temperature 
                      dependant gain correction.
                    
                
                  | Parameter | 
                  Description | 
                
                
                    | FPAGain | 
                    
                        This parameter is the file pattern of the FPA factor for 
                        the temperature dependent gain coefficient.
                     | 
                
               
                    | FPAGainColumnName | 
                    
                        This parameter specifies the column name pattern of the 
                        desired parameter in the FPAGain .  The value of 
                        this parameter is typically specifed in the config file 
                        as a pattern combination of the CCD and Channel of the 
                        image being calibrated. 
                     | 
                
                
                    | FPAGainRowName | 
                    
                        Specifies the desired row header name contained in the 
                        FPAGain file from which to extract the 
                        applicable parameter.  This must be specified to select 
                        a specific given row.  Its presence in the config file 
                        implies a row header exists in the first column of the 
                        FPAGain file.  The value of this parameter is 
                        typically specifed in the config file as a pattern for 
                        the binning/summing node of the image being calibrated. 
                     | 
                
            
            
GainUnitConversion Module Parameters
    
                
            
                   
                      This module computes values necessary to convert DNs to 
                      user selected calibration unit values.
                    
                
                  | Parameter | 
                  Description | 
                
                  
                    | GainUnitConversionBinFactor | 
                    
                        Specifies the factor that takes into account binning of 
                        the image data.  It is currently set to 1.0.
                     | 
                
                
                    | FilterGainCorrection | 
                    
                        Specifies the filter dependent gain correction factor.  
                        Note that these values are found in the BG,  RED, and IR 
                        profiles and hicalbeta relies on the profile 
                        options to load the proper parameter at runtime. 
                     | 
                
                
                    | IoverFbasetemperature | 
                    
                         Base temperature I/F conversion factor that is 
                         filter-dependent.   This parameter is found in the 
                         filter dependent profiles BG, RED and IR and relies on 
                         the profile options to load the proper parameter in at 
                         runtime.
                     | 
                
                
                    | QEpercentincreaseperC | 
                    
                        Measurement of quantum efficiency increase per 1C 
                        assuming linear with temperature.  This parameter is 
                        found in the  filter dependent profiles BG, RED and IR 
                        and relies on the profile options to load the proper 
                        parameter in at runtime.
                     | 
                
                
                    | AbsGain_TDI128 | 
                    
                        Normalization of absolute gain to TDI 128.  All other 
                        TDIs are scaled by this parameter.   This parameter is 
                        found in the  filter dependent profiles BG, RED and IR 
                        and relies on the profile options to load the proper 
                        parameter in at runtime.
                     | 
                
            
    
    If run on a non-spiceinited cube, this program requires access to local mission-specific 
    SPICE kernels, in order to find the distance between the sun and the target body. 
    When run on a spiceinited cube, this can be determined using the camera model.
    Using a spiceinited cube as input has the advantage of not requiring that local 
    mission-specific kernels be available. (See spiceinit web=true.)