This program tone matches or equalizes the brightness and/or contrast of a list of
      input cubes prior to mosaicking. All the input cubes, including mosaics, must be in identical
      map projection since equalizer uses the mapping information to gather statistics in
      overlapping areas.
    
    
      Statistic gathering is done on a band-by-band basis. The statistics
      are used in a least squares solution to determine multiplicative (GAIN or MULT) and additive
      (OFFSET or BASE) corrections for each image. In addition to simply calculating corrective
      factors and applying said factors to each image (BOTH), the user has the option to only
      calculate statistics (CALCULATE) and then examine these gathered statistics in a text file
      (OUTSTATS). Then, equalizer can be run again using that statistics file as input (INSTATS)
      to apply correction to any or all of the images without the need to calculate corrective
      factors again.
    
    
      Corrective factors will be undetermined if there are insufficient valid overlaps or if there
      are any images that have no overlaps. If an output statistics file is provided (OUTSTATS),
      images that do not overlap will appear in the file.
    
    
      When corrective factors are undetermined, the user can use the RECALCULATE process option
      to try to solve them. To do this, images can be added to the input list to try to create
      more overlaps or images without overlaps can be removed. An input statistics file (INSTATS)
      containing previously calculated image statistics must be provided. These statistics will be
      reloaded so overlap statistics will only be recalculated for new images in the modified input
      list. If all the images have overlaps and sufficient valid overlaps exist, corrective factors
      will be determined. Statistics can be recalculated as many times as desired by repeating the
      above steps.
    
    
      Additionally, the RETRYBOTH process option may be used to recalculate statistics and then
      apply corrective factors. This requires the user to provide an INSTATS file containing
      previously calculated statistics. It is also suggested that the user provide an OUTSTATS file
      in case corrective factors cannot be determined. If the corrective factors are determined,
      they will then be applied to the input images.
    
    
      The addition of these RETRYBOTH and RECALCULATE parameters has modified the content of
      the output statistics. Additional information is included in the output statistics
      so that previously calculated overlap statistics can be reloaded when using these parameters.
      Note that statistics files created with previous versions of ISIS can still be used as
      input statistics.
    
    
      The actual equation to be used for equalization, for ADJUST=BRIGHTNESS, CONTRAST or BOTH, on
      each band in each cube is as follows:
      
        newdn(s,l,b)   =   (olddn(s,l,b) - avg(b)) * GAIN(b) + (avg(b) + OFFSET(b))
      
      where
      
        s = sample index
        l = line index
        b = band index
      
      The actual equation to be used for equalization, for ADJUST=GAIN, on
      each band in each cube is
      
        newdn(s,l,b)   =   olddn(s,l,b) * GAIN(b)
      
      where
      
        s = sample index
        l = line index
        b = band index
      
    
    
      Prior to equalizing, the user can choose whether to adjust the
      brightness and/or contrast of the cubes. The default is to adjust both;
      however, if the brightness (average) of all the cubes is the same,
      then simply adjusting the contrast may suffice.   Likewise, if the
      standard deviation of all the cubes is similar, then a contrast
      adjustment is not necessary.  Adjusting for contrast only implies
      the OFFSET values will be held to zero.  Similarly, adjusting for
      brightness implies the GAIN values will be held to one.
    
    
      The OFFSET and GAIN values are computed independently for each image,
      therefore we have two least squares computations with N unknowns,
      where N is the number of cubes to be equalized. The overlaps, M,
      between all the cubes are computed, and in some cases M < N.
      This implies an underdetermined system, and the program will report
      an error if this occurs.  You can hold one or more images to alleviate
      this problem.  Holding an image forces GAIN and OFFSET to 1.0 and 0.0
      for that image, respectively.
    
    
      If the user chooses to apply correction to the images, then a list
      of output file names can be specified with the TOLIST parameter.  If no
      TOLIST is specified, the equalized cubes will be named the same as the
      input cubes with the addition of '.equ' prior to the '.cub'
      extension, and placed in the same directories as their input files.
    
    
      For the sake of efficiency, the user may choose to set the "sampling
      percent" to be less than its default value of 100.0.  By doing so, the
      program will likely perform its statistic gathering noticeably faster,
      but at the risk of losing accuracy in the results.  It should
      be noted that the user also runs the risk of encountering an error if
      decreasing the sampling percent results in the amount of valid data in
      the calculated overlaps being less than the minimum set by the
      MINCOUNT parameter (default value of 1000).  Sampling percent must be
      a decimal value between 0.0 (exclusive) and 100.0 (inclusive).
    
    
      This program defaults to solving the least-squares system using the
      SPARSE matrix method. This method is able to find valid solutions, even
      when no hold list is provided.
      
      The QRD method is fairly accurate and fast, but does not
      produce valid results in all cases, especially if no images are held.
      Previous versions of equalizer used this method to solve.
      
    
   
| Kay Edwards | 1994-05-24 | 
      Original version.
     | 
| Elizabeth Ribelin | 2005-06-25 | 
      Ported to Isis 3.0.
     | 
| Elizabeth Ribelin | 2005-10-04 | 
      Changed categoryItem to Photometry and Radiometry.
     | 
| Brendan George | 2005-11-07 | 
      Added application test.
     | 
| Elizabeth Miller | 2006-01-12 | 
      Made SD default contrast mode (PCA may have errors).
     | 
| Jeff Anderson | 2007-07-16 | 
      Fixed memory leak.
     | 
| Jeff Anderson | 2008-04-09 | 
      Modified to solve system using QRD which is faster the SVD.
     | 
| Steven Lambright | 2008-05-12 | 
      Removed references to CubeInfo.
     | 
| Tracie Sucharski | 2008-06-12 | 
      Modified call LeastSquares Solve due to change to LeastSquares
      Solve method.
     | 
| Travis Addair | 2009-03-12 | 
      Added user feedback during statistic gathering, modified existing progress
      information, and moved error checking on number of bands and projection
      parameters to be done prior to statistic gathering.
     | 
| Travis Addair | 2009-06-24 | 
      Refactored for use with the new OverlapNormalization class, thus removing
      the option to use the broken PCA contrast mode; the PVL output has been
      modified to print all normalization information for a cube in one group
      with OverlapStatistics information coming last in the file; added an
      option to decrease the percentage of lines sampled in statistic gathering.
     | 
| Travis Addair | 2009-07-17 | 
      Added a TOLIST parameter, allowing the user to specify a unique output
      file name and location for each input file.  The default is now to
      place each output file in the same directory as its input file, not in
      the current working directory.
     | 
| Travis Addair | 2009-07-30 | 
      Added functionality allowing the user to run the program applying
      corrections based off of previously gathered statistics obtained from
      the program's output PVL file.  The output PVL has also been changed
      from "PVL" to "OUTSTATS".  Results will now be placed into the print
      file.
     | 
| Travis Addair | 2009-11-19 | 
      Updated documentation and examples to reflect the most recent changes to
      using the program.
     | 
| Jeannie Backer | 2013-01-29 | 
      Added parameter SOLVEMETHOD to allow user to choose the method in which
      the system of equations will be solved. Removed unnecessary error throws
      from implementation file, now use xml to require OUTSTATS when
      PROCESS=CALCULATE and require the PERCENT entered to be in the interval
      (0, 100]. Improve test coverage to 100%. Fixes #962.
     | 
| Jeannie Backer | 2013-02-04 | 
      Removed SVD option from the  SOLVEMETHOD parameter since this option is
      not producing correct results on MAC OS, see mantis ticket #1472.
      If this bug is fixed and the option is reimplemented, the noHoldCalculateSparse
      test data can be used to test the SVD method. Also, the documentation about
      this method should be uncommented in the general description of the program,
      in the QRD description. References #962.
     | 
| Steven Lambright | 2013-02-06 | 
      Added the option "ADJUST=GAIN" based on a prototype developed by Jeff
      Anderson. Fixes #911.
     | 
| Jeannie Backer | 2013-02-27 | 
      Fixed user documentation. References #962.
     | 
| Ian Humphrey | 2016-07-15 | 
      Added RETRYBOTH and RECALCULATE parameters to allow user to fix any non-overlapping images
      in the input image list and recalculate statistics for any new images in the input list,
      reusing previously calculated statistics for the rest of the images. Fixes #2282.
     | 
| Christopher Combs | 2017-05-19 | 
      Changed pvl.DIFF of input for app tests nonOverlapRecalculate and nonOverlapRetryBoth to
      ignore file names. Allows test to pass when not using default data area. Fixes #4738.
     | 
| Jesse Mapel | 2020-09-01 | 
      Reported formula and variables now match the formula selected by the ADJUST
      argument. Fixes #3987.
     |