This program compiles and outputs various spacecraft and instrument-related information such as
    geometric, polygon, and mapping information.
  
  
    The user must supply a Level1 cube. If the supplied cube does not have SPICE information
    associated with it, then caminfo can be used to generate the SPICE information by running the
    spiceinit program on the cube. Caminfo will not run spiceinit by default. If the input cube already
    has SPICE information associated with it, then any user updates to the SPICE information will be
    lost when the option to run spiceinit is chosen. This results from using system defaults when
    running the spiceinit program from within caminfo.
  
  
    Some information in the output PVL file will consist of a compilation of information for all the
    bands in the cube and will be listed in the "Common" object of the PVL. Other information for a given
    band will be placed in the "BandSet" object of the PVL. The user can select the check boxes to control
    the information that will be output to the PVL file. If the POLYGON or USELABEL option is chosen,
    the image polygon is output in Well-Known Text format (WKT).
  
  
    The output file can be in PVL or CSV (Comma Separated Value) format. The "APPEND" option allows
    the new generated information to be appended to the output file. This is especially useful for
    CSV file format. If the CSV format is chosen, only Camstats, Statistics and Geometry options
    are allowed. Isis Label, Original Label and Polygon options are disabled for CSV format.
  
  
    The following is an example of caminfo output generated when in PVL format:
  
Object = Caminfo
  Object = Parameters
    Program     = caminfo
    IsisVersion = "6.0.0  | 2021-11-08"
    RunDate     = 2021-11-08T16:03:25
    IsisId      = Viking1/VISB/33322515
    From        = default.cub
    Lines       = 1056
    Samples     = 1204
    Bands       = 1
  End_Object
  Object = Camstats
    MinimumLatitude                          = 9.9286479874788
    MaximumLatitude                          = 10.434709753119
    MinimumLongitude                         = 255.64554871862
    MaximumLongitude                         = 256.14606952525
    MinimumResolution                        = 18.840683425668
    MaximumResolution                        = 18.985953877822
    MinimumPhase                             = 79.756143590222
    MaximumPhase                             = 81.304900313013
    MinimumEmission                          = 10.798462835458
    MaximumEmission                          = 13.502630463571
    MinimumIncidence                         = 69.941096124192
    MaximumIncidence                         = 70.311944975377
    LocalTimeMinimum                         = 7.7698055422189
    LocalTimeMaximum                         = 7.8031735959943
    ObliqueResolutionMinimum                 = 19.180671135452
    ObliqueResolutionMaximum                 = 19.525658668048
    LatitudeMinimum                          = 9.9286479874788
    LatitudeMaximum                          = 10.434709753119
    LatitudeAverage                          = 10.181983206084
    LatitudeStandardDeviation                = 0.11084102743244
    LongitudeMinimum                         = 255.64554871862
    LongitudeMaximum                         = 256.14606952525
    LongitudeAverage                         = 255.89390491018
    LongitudeStandardDeviation               = 0.10658330458136
    SampleResolutionMinimum                  = 18.840683425668
    SampleResolutionMaximum                  = 18.985953877822
    SampleResolutionAverage                  = 18.90816559308
    SampleResolutionStandardDeviation        = 0.03806000717263
    LineResolutionMinimum                    = 18.840683425668
    LineResolutionMaximum                    = 18.985953877822
    LineResolutionAverage                    = 18.90816559308
    LineResolutionStandardDeviation          = 0.03806000717263
    ResolutionMinimum                        = 18.840683425668
    ResolutionMaximum                        = 18.985953877822
    ResolutionAverage                        = 18.90816559308
    ResolutionStandardDeviation              = 0.03806000717263
    ObliqueSampleResolutionMinimum           = 19.180671135452
    ObliqueSampleResolutionMaximum           = 19.525658668048
    ObliqueSampleResolutionAverage           = 19.342626220123
    ObliqueSampleResolutionStandardDeviation = 0.078013435023247
    ObliqueLineResolutionMinimum             = 19.180671135452
    ObliqueLineResolutionMaximum             = 19.525658668048
    ObliqueLineResolutionAverage             = 19.342626220123
    ObliqueLineResolutionStandardDeviation   = 0.078013435023247
    ObliqueResolutionMinimum                 = 19.180671135452
    ObliqueResolutionMaximum                 = 19.525658668048
    ObliqueResolutionAverage                 = 19.342626220123
    ObliqueResolutionStandardDeviation       = 0.078013435023247
    AspectRatioMinimum                       = 1.0
    AspectRatioMaximun                       = 1.0
    AspectRatioAverage                       = 1.0
    AspectRatioStandardDeviation             = 0.0
    PhaseMinimum                             = 79.756143590222
    PhaseMaximum                             = 81.304900313013
    PhaseAverage                             = 80.529097153288
    PhaseStandardDeviation                   = 0.44420861263609
    EmissionMinimum                          = 10.798462835458
    EmissionMaximum                          = 13.502630463571
    EmissionAverage                          = 12.15148695101
    EmissionStandardDeviation                = 0.56543791358687
    IncidenceMinimum                         = 69.941096124192
    IncidenceMaximum                         = 70.311944975377
    IncidenceAverage                         = 70.127459134075
    IncidenceStandardDeviation               = 0.10249039126455
    LocalSolarTimeMinimum                    = 7.7698055422189
    LocalSolarTimeMaximum                    = 7.8031735959943
    LocalSolarTimeAverage                    = 7.7863626216564
    LocalSolarTimeStandardDeviation          = 0.0071055546192044
    LocalRadiusMinimum                       = 3410663.3374636
    LocalRadiusMaximum                       = 3413492.0662692
    LocalRadiusAverage                       = 3412205.8144925
    LocalRadiusStandardDeviation             = 648.57630709534
    NorthAzimuthMinimum                      = 312.29940658864
    NorthAzimuthMaximum                      = 350.59781250672
    NorthAzimuthAverage                      = 332.96766151063
    NorthAzimuthStandardDeviation            = 0.67383189481403
  End_Object
  Object = Statistics
    MeanValue         = 127.49950846428
    StandardDeviation = 73.322672255332
    MinimumValue      = 1.0
    MaximumValue      = 254.0
    PercentHIS        = 0.0
    PercentHRS        = 0.0
    PercentLIS        = 0.0
    PercentLRS        = 0.0
    PercentNull       = 0.39208006141146
    TotalPixels       = 1271424.0
  End_Object
  Object = Geometry
    BandsUsed                  = 1
    ReferenceBand              = 1
    OriginalBand               = 1
    Target                     = MARS
    StartTime                  = 1977-07-09T20:05:51.5549999
    EndTime                    = 1977-07-09T20:05:51.5549999
    CenterLine                 = 528.0
    CenterSample               = 602.0
    CenterLatitude             = 10.181441241544
    CenterLongitude            = 255.89292858176
    CenterRadius               = 3412288.6569795
    RightAscension             = 310.2070335306
    Declination                = -46.327246785573
    UpperLeftLongitude         = 255.64554871862
    UpperLeftLatitude          = 10.086794246642
    LowerLeftLongitude         = 255.9665140608
    LowerLeftLatitude          = 9.9286479874788
    LowerRightLongitude        = 256.14606952525
    LowerRightLatitude         = 10.279980559326
    UpperRightLongitude        = 255.82316035995
    UpperRightLatitude         = 10.434709753119
    PhaseAngle                 = 80.528381932125
    EmissionAngle              = 12.133564327344
    IncidenceAngle             = 70.127983116628
    NorthAzimuth               = 332.65918495755
    OffNadir                   = 9.9273765143684
    SolarLongitude             = 294.73518830595
    LocalTime                  = 7.7862975330952
    TargetCenterDistance       = 4160.7294345949
    SlantDistance              = 762.37204454685
    SampleResolution           = 18.904248467739
    LineResolution             = 18.904248467739
    PixelResolution            = 18.904248467739
    MeanGroundResolution       = 18.913336783207
    SubSolarAzimuth            = 92.033828158995
    SubSolarGroundAzimuth      = 118.87356333938
    SubSolarLatitude           = -22.740326163641
    SubSolarLongitude          = 319.09846558533
    SubSpacecraftAzimuth       = 240.08514246484
    SubSpacecraftGroundAzimuth = 267.5318718687
    SubSpacecraftLatitude      = 10.078847382918
    SubSpacecraftLongitude     = 253.65422317887
    ParallaxX                  = 0.0092584344626292
    ParallaxY                  = -0.21479478922806
    ShadowX                    = 1.3359751287274
    ShadowY                    = 2.4227562280136
    HasLongitudeBoundary       = FALSE
    HasNorthPole               = FALSE
    HasSouthPole               = FALSE
    ObliqueSampleResolution    = 19.336214219327
    ObliqueLineResolution      = 19.336214219327
    ObliquePixelResolution     = 19.336214219327
    ObliqueDetectorResolution  = 19.336214219327
  End_Object
  Object = Polygon
    CentroidLine      = 532.66229285952
    CentroidSample    = 607.53672501071
    CentroidLatitude  = 10.182356969859
    CentroidLongitude = 255.89519621876
    CentroidRadius    = 3412287.9074048
    SurfaceArea       = 488.62348528983
    GlobalCoverage    = 3.34e-04
    SampleIncrement   = 100
    LineIncrement     = 100
    GisFootprint      = "MULTIPOLYGON (((255.6453583908695464
                         10.0867904619605451, 255.6595956593271808
                         10.1154635791014531, 255.6737985789073946
                         10.1442167552830451, 255.6881259667616746
                         10.1730800310205129, 255.7027887280425205
                         10.2020508692057152, 255.7175464122890958
                         10.2309373753062509, 255.7323280160563286
                         10.2598036242839878, 255.7471695983951463
                         10.2887800727178256, 255.7620066213459609
                         10.3177301971434758, 255.7771588010552364
                         10.3467436152087995, 255.7924323644433002
                         10.3757139048525477, 255.8075274901822809
                         10.4046456113999994, 255.8225576458768842
                         10.4339028570360366, 255.8232309017442674
                         10.4348585119487165, 255.8535629696708327
                         10.4205061458771606, 255.8842203998140121
                         10.4058889295564381, 255.9146926592250963
                         10.3911941292862764, 255.9448791821614861
                         10.3769097524926277, 255.9753755414272689
                         10.3618204978158026, 256.0059617087890729
                         10.3471682641369771, 256.0365409379967332
                         10.3326326218834055, 256.0673265067632087
                         10.3179152985589759, 256.0981249116282470
                         10.3034581806665066, 256.1290667758755148
                         10.2883581640098658, 256.1462671420772494
                         10.2799873531353612, 256.1313444916623325
                         10.2505255615226378, 256.1164688049674965
                         10.2211844686142967, 256.1015973558028804
                         10.1918949732268587, 256.0864534778274333
                         10.1626571600747884, 256.0716550668443006
                         10.1332939690604054, 256.0565706797236203
                         10.1038668950864672, 256.0413878221121422
                         10.0746328450545697, 256.0264747810802533
                         10.0452711724688157, 256.0113369395158998
                         10.0160982210436202, 255.9964691286714640
                         9.9870846040898869, 255.9818453002924059
                         9.9582018695888550, 255.9671085090266160
                         9.9294365117128915, 255.9664455687814666
                         9.9285018702230925, 255.9357798586855210
                         9.9434114437963252, 255.9050300094461079
                         9.9582188907694906, 255.8742299406974041
                         9.9731382004096076, 255.8438364438290193
                         9.9885593036033100, 255.8131996628023330
                         10.0033543110909680, 255.7829726827725949
                         10.0181299803242059, 255.7526929277649685
                         10.0329436706484874, 255.7222678124940103
                         10.0480687769201324, 255.6922853314939630
                         10.0632502943012838, 255.6620952745569184
                         10.0783572884044883, 255.6453583908695464
                         10.0867904619605451)))"
    Group = Mapping
      TargetName         = MARS
      EquatorialRadius   = 3396190.0
      PolarRadius        = 3376200.0
      LatitudeType       = Planetocentric
      LongitudeDirection = PositiveEast
      LongitudeDomain    = 360
      MinimumLatitude    = 9.9284293968724
      MaximumLatitude    = 10.434928853234
      MinimumLongitude   = 255.64532672113
      MaximumLongitude   = 256.14630113081
      PixelResolution    = 18.840630601657
      ProjectionName     = Sinusoidal
      CenterLongitude    = 255.89292858176
    End_Group
  End_Object
End_Object
End
  
    Output values that do not have a minimum/maximum range associated with them
    are calculated at the center of the image.
  
  
    Definitions for most of the values output in the PVL file can be found in
    the ISIS documentation glossary including: SubSpacecraftLatitude,
    SubSpacecraftLongitude, SubSolarLatitude,
    SubSolarLongitude, NorthAzimuth,
    SpacecraftAzimuth, SubSolarAzimuth,
    ObliqueLineResolution, ObliqueSampleResolution,
    ObliquePixelResolution, and ObliqueDetectorResolution
  
   
| Robert Sucharski | 2007-04-10 | 
      Original version
     | 
| Steven Lambright | 2007-08-10 | 
      Added an application test
     | 
| Steven Koechle | 2007-11-01 | 
      Fixed WKT calls
     | 
| Tracie Sucharski | 2007-11-09 | 
      Remove ToWKT calls and PolygonTools.h inclusion.  The geos package now
      has a method to return a WKT string, so the ToWKT method has been
      removed from the PolygonTools class.
     | 
| Kris Becker | 2007-12-07 | 
      Made the following modifications:  fixed typo in PercentNull and
      MaximumLongitude keywords; use the base file name for generation of
      temporary files to further ensure uniqueness; run camstats once if
      there is only one band - doubles execution speed for single band
      images when CAMSTATS option is used; substitute the NULL string for
      all special pixel values; added corner pixel keywords for PDS
      compatibility; added phase, emission, incidence angles
      and line and sample pixel resolution at the center pixel; added test
      for intersection of longitude domain, north and south poles and
      keywords that report them; added option to output ISIS cube labels;
      corrected computations for parallax and shadow keywords.
      | 
| Kris Becker | 2007-12-19 | 
       Renamed the HasLongitudeDomain keyword to HasLongitudeBoundary.
       Makes more sense.
      | 
| Kris Becker | 2008-02-27 | 
       Corrected method call to compute polygon with proper parameters as
       well as correct band number.  Added code to better honor specific
       cube attributes (such as band numbers) in computations.  Also will
       produce NULL valued keywords where NULLs are a produced instead of
       the real value for the ISIS NULL pixel value.
      | 
| Steven Lambright | 2008-05-12 | 
       Removed references to CubeInfo
      | 
| Bob Sucharski | 2008-07-31 | 
       Added Camera Test option  to test for a valid camera at center of image
       and return an error and end if a valid camera cannot be created.
      | 
| Kris Becker | 2008-09-22 | 
       Reworked the output PVL format;  added more keywords to the Common object
       that indicate versions and dates;  added more values to Geometry and
       Polygon object.
      | 
| Kris Becker | 2008-10-22 | 
       Corrected generation of polygon for multi-band data.  It created a
       POLYGON union instead of the required MULTIPOLYGON.
      | 
| Kris Becker | 2008-10-30 | 
       The target center distance and subspacecraft latitude were not properly
       propagated to the output PVL file and consequently were invalid.  This
       has been corrected.
      | 
| Kris Becker | 2008-12-29 | 
       Added RightAscension, Declination, SubSolarGroundAzimuth, and
       SubSpacecraftGroundAzimuth computations; added center line/sample image
       coordinate used to compute center geometry; added check of valid image
       line/sample coordinates when testing for north/south poles (some camera
       models return valid states when coordinates are outside of image
       boundaries).
      | 
| Kris Becker | 2009-02-26 | 
       Modified to actually exclude the unconditional computation of the image
       polygon to assist in some geometry values.  It is no longer computed if
       the user does not select the POLYGON option.  The implications of this
       are that some of the keywords in the output Geometry group are no
       longer ever relevant.  These keywords were all moved to the Polygon
       group.  These keywords are:   CentroidLine, CentroidSample,
       CentroidLatitude, CentroidLongitude, CentroidRadius and SurfaceArea.
       User will no longer see these values if the POLYGON option is not
       selected.  Also the Radius keyword in the Polygon group has been
       removed as it is redundant with CentroidRadius.
      | 
| Kris Becker | 2009-05-29 | 
       Added PIXINC parameter to allow user to specify number of pixels to
       skip around the perimeter of the image to compute the polygon.
      | 
| Kris Becker | 2009-05-29 | 
       Fixed bug where image was a 0 longitude boundary crosser.  It would
       typically fail when determining centroid information unless converted
       to 180 domain.  This will also be used at the poles as it seems to work
       better in the 180 domain as well.  (This process projects the footprint
       to a Sinusoidal projection to determine area which requires an equal
       area projection, such as Sinusoidal.)
      | 
| Kris Becker | 2009-07-08 | 
       Added the MAXEMISSION and MAXINCIDENCE limit parameters to better
       control limb and terminator polygon generation.
      | 
| Kris Becker | 2009-08-24 | 
       Allow disabling of shape model use when constructing polygons that
       contain limbs.
      | 
| Mackenzie Boyd | 2010-06-14 | 
       Removed polygon options group and placed the options within output
       options. Added inclusion for parameters related to polygons to only be
       available when polygons are selected. Made TO option not have a
       default of None, updated documentation and modified formatting.
      | 
| Jai Rideout | 2011-02-17 | 
       Replaced PIXINC with POLYSINC and POLYLINC. Renamed SINC and LINC to
       STATSSINC and STATSLINC.
      | 
| Sharmila Prasad | 2011-02-24 | 
       Added option for the output file to be in CSV format and also ability
       to append to the existing output file.
      | 
| Jai Rideout | 2011-03-01 | 
       Renamed STATSSINC and STATSLINC back to SINC and LINC.
      | 
| Sharmila Prasad | 2011-03-02 | 
       Fix App tests and add header for flat file if file does not exist.
      | 
| Jai Rideout | 2011-03-03 | 
       Fixed incorrect CSV output format.
      | 
| Christopher Austin | 2011-03-18 | 
       Rewrote the entire application to no longer have hard-coded values for
       CSV, including the removal of duplicated code, updated includes, and
       corrected the CSV to display the same values as the PVL does.
      | 
| Christopher Austin | 2011-03-18 | 
       Added new parameters including FLATINC.
      | 
| Christopher Austin | 2011-03-22 | 
       Changed the new parameter's names. (INCTYPE, NUMVERTICES)
      | 
| Christopher Austin | 2011-05-12 | 
      Added smarts to the VERTICES option.
     | 
| Travis Addair | 2011-07-27 | 
       Added INCREASEPRECISION option for creating an Image Polygon, the same
       one as used by "footprintinit".
     | 
| Kris Becker | 2012-11-23 | 
        The computation of ParallaxX/ParallaxY and ShadowX/ShadowY values was
        not properly implemented. Updated documentation with a new example.
        Fixes #1296.
     | 
| Janet Barrett | 2013-01-29 | 
      Added the USELABEL option. This will allow the user to request that the
      footprint be read from the labels of the input image file rather than
      regenerating the footprint. Fixes #1452.
     | 
| Janet Richie | 2013-02-25 | 
      Reviewed documentation. References #1452.
     | 
| Kaitlyn Lee | 2019-04-22 | 
      Added oblique sample, line, detector, and pixel resolutions to the
      geometry PVL group. Updated example output in application description
      so that the addded oblique elements are included. Fixes #2205.
     | 
| Amy Stamile | 2021-08-18 | 
      Added the USECAMSTATSTBL option. This allows caminfo to extract existing
      camera statistics from the CameraStatistics Table of the input cube instead
      of recalculating CameraStatistics.  Fixes #3605.
      Updated caminfo to output all CameraStatistics Keywords when running CAMSTATS.
     | 
| Amy Stamile | 2021-11-04 | 
      Changed parameter default values for MAXEMISSION and MAXINCIDENCE to be
      synchronized with footprintinit default values of the same parameters.
      This corrects inconsistencies of footprint generation failing in caminfo
      but passing in footprintinit. Fixes #4651.
     | 
| Adam Paquette | 2021-07-06 | 
      Updated CAMSTATS parameter decision tree to allow users to extract
      camstats even if the cube contains a camstats table. Fixes #4919.
     |