USGS-ISIS3 calibration and navigation

All the cubes available on this website were calibrated using the latest release of the USGS ISIS3 software.

$ cat $ISIS_ROOT/version 2018-04-06 # Version date v007 # 3rd party libraries version stable # release stage (alpha, beta, stable)

On the USGS website, a series of tutorials are dedicated to the Cassini VIMS data. Detail documentation on ISIS3 functions, keywords and optional parameters can be found in the documentation.

In this page, we will only present the generic pipeline used to provide calibrated and navigation data available on this website.

Cassini VIMS raw data

Like every other NASA missions, the Cassini raw data are archived on the Planetary Data System imaging node (PDS) under the supervision of the Jet Propulsion Laboratory and the USGS.

The complete dataset of the VIMS data is composed of 94 volumes covering in average 2-3 months of data. The data are stored on the PDS in folders called covims_* for each release. Each folder includes a data/ folder with a collection of sub-folders containing 64 cubes each sorted by dates. For example, the very least VIMS cube recorded by Cassini (1884114114_1) is located in the folder covims_0094/data/2017255T000819_2017257T195837.

No general rules apply on the way these data are store, especially due to the non-linear acquisition rate of the instrument. Therefore, it is mandatory to use a database of the complete dataset to back-trace the exact location the cube based on their cube id. If you are looking for a cube raw data (.qub) containing a known icy moons (for example, 1490951542_2), go to to be redirected automatically to the correct location of this cube on the PDS archive. The same shortcut applies for the label/metadata file (.lbl) associated with the cube, simply go to to locate it on the PDS.

For a cube which does not contain icy moon in the field of view (e.g. only Saturn, the rings…), you will need to use an other search engine like OPUS, PILOT or ATLAS. You can also build your own database from the _md5.txt file attached to each release (e.g., a python implementation is available in this repo).

Therefore to download the raw data, you only need to do:

$ wget --2024-06-14 11:33:58-- Resolving ( Connecting to (||:443... connected. HTTP request sent, awaiting response... 302 Found Location: [following] --2024-06-14 11:33:58-- Resolving ( Connecting to (||:443... connected. HTTP request sent, awaiting response... 200 OK Length: 3063808 (2.9M) [text/plain] Saving to: 'v1490951542_2.qub'   v1490951542_2.qub 100%[====================>] 2.92M --.-KB/s in 0s   2024-06-14 11:33:58 (123 KB/s) - 'v1490951542_2.qub' saved [3063808/3063808]

Calibration of the data

The first step of the calibration is to convert the PDS3 raw Experiment Data Record (EDR) images (ie. the .qub file) into a ISIS3 cube (.cub) with the vims2isis function.

$ vims2isis from=v1490951542_2.qub vis=v1490951542_2_vis.cub ir=v1490951542_2_ir.cub Group = Results   VisCreated = true   IrCreated = true End_Group

The vims2isis function will split the raw data into 2 separate files. The first one corresponds to the visible part of spectrum recorded by the VIMS-VIS instrument and the second one is the infrared counterpart recorded by VIMS-IR instrument. Most of the time, both files are present and observed the same location. However for some observations, the sampling mode of the two instruments are different or one of them is turned-off. Therefore it is more reliable to split each cube to process their data independently. In the rest of the calibration we will only use the infrared part of the cube (v*_ir.cub) but the same process can be apply to the visible part of the cube (v*_vis.cub).

Note: Only the .qub file is required by vims2isis (the metadata .lbl file is already contained in the .qub file header).

The second step will provide the navigation information from SPICE routines to extract spacecraft and planetary ephemerids, the instrument C-matrix and event kernels. These data are included into the cube header with the spiceinit function and will be required for the radiometrically calibration (step 3).

$ spiceinit from=v1490951542_2_ir.cub Group = Kernels   NaifFrameCode = -82371   LeapSecond = $base/kernels/lsk/naif0012.tls   TargetAttitudeShape = ($base/kernels/pck/pck00009.tpc, $cassini/kernels/pck/cpck15Dec2017.tpc)   TargetPosition = $base/kernels/spk/de405.bsp   InstrumentPointing = ($cassini/kernels/ck/05087_05092ra.bc, $cassini/kernels/fk/   Instrument = Null   SpacecraftClock = $cassini/kernels/sclk/cas00172.tsc   InstrumentPosition = $cassini/kernels/spk/180628RU_SCPSE_05081_05097.bspndum03pi   ShapeModel = Null   InstrumentPositionQuality = Reconstructed   InstrumentPointingQuality = Reconstructed   CameraVersion = 1 End_Group

The third step, we use the vimscal function to convert the digital count number of each pixel into a the physical radiometric intensity (I/F):

$ vimscal from=v1490951542_2_ir.cub to=C1490951542_2_ir_cal.cub units=IOF Group = Results   InputLines = 64   InputSamples = 64   StartingLine = 1   StartingSample = 1   EndingLine = 64   EndingSample = 64   LineIncrement = 1   SampleIncrement = 1   OutputLines = 64   OutputSamples = 64 End_Group   Group = Results   CalibrationVersion = RC19   SolarMultiplier = 1000.00   IR_Multiplier = 8112.34   VIS_Multiplier = 39474.13   Wave-CalMultiplier = 1000.00   OutputUnits = I/F   SolarColorFile = $cassini/calibration/vims/RC19/solar-spectrum/solar.2005_v0001.cub   Vis = false   SideplaneCorrection = "Fit Delta"   FlatFile = $cassini/calibration/vims/flatfield/ir_flatfield_v0002.cub   SpecificEnergyFile = $cassini/calibration/vims/RC19/RC19-mults/RC19.2005_v0001.cub   WavelengthCalibrationFile = $cassini/calibration/vims/RC19/wave-cal/   BandwidthFile = $cassini/calibration/vims/RC19/band-wavelengths/wavelengths.2005_v0001.cub   AverageBandwidthFile = $cassini/calibration/vims/RC19/band-wavelengths/wavelengths_average_v0001.cub End_Group

The current version of the calibration pipeline used by ISIS is RC19. The complete documentation on the RC19 calibration can be found here.

In order to improve the quality of the calibration and to reduce the noise and spikes in the cubes, we apply two additional steps: a noisefilter and a lowpass filter when the smaller spacial dimension of the cube is larger than 5.

The noisefilter (included in ISIS3 functions) will remove the random pixel noise. We use the boxcar size of 5×5 pixels that we compare to the standard deviation. The tolerance value (tolmin and tolmax) are set to 2.5. If the pixel does not fit these criteria, it will be replaced by a NULL value.

$ noisefilter from=C1490951542_2_ir_cal.cub to=C1490951542_2_ir_stdz.cub toldef=stddev tolmin=2.5 tolmax=2.5 replace=null samples=5 lines=5 Group = Results   DarkPixelsReplaced = 2724   BrightPixelsReplaced = 4257   SpecialPixelsReplaced = 0   TotalPixelsReplaced = 6981   PercentChanged = 170.4 End_Group

In the final step, we replace these NULL values by the average of the surrounding valid pixels (3×3) using the lowpass filter of ISIS:

$ lowpass from=C1490951542_2_ir_stdz.cub to=C1490951542_2_ir.cub samples=3 lines=3 filter=outside null=yes hrs=no his=no lrs=no replacement=center [No output]

This latest file (C*_ir.cub) corresponds to the one provided at the bottom of the page dedicated to this cube. And, as before, if you only need to download this file alone, you can to get it at .

Navigation of the data

As soon as the spiceinit succeded, you can navigate the data with the ISIS function phocube. By default we export the phase angle, the emission angle, the incidence angle, the latitude, the longitude, the pixel resolution into a navigation file (N*_ir.cub).

$ phocube from=C1490951542_2_ir.cub+1 to=N1490951542_2_ir.cub phase=true emission=true incidence=true latitude=true longitude=true pixelresolution=true [No output]

Note 1: The +1 in the from field is required to select only the first channel of the cube. Otherwise, the function phocube will fail.
Note 2: At the moment, the phocube function only provides the navigation values on the ground of the icy moon and put NULL values outside. Especially, the geometry of the pixels at the limb are not computed.

The visible and infrared navigation files are always attached on the page dedicated to a specific cube. You can also choose to download it separately with the following shortcut:

How to retrieve the calibration information from the files?

In every cube file, the header contrains the complete calibration process through the different functions with their outputs. Therefore you only need to parse the ascii part of the file to retreive the information. For example, it is possible to get the calibration version using the grep function on the binary header of the cube:

$ grep -a Calibration C1490951542_2_ir.cub   CalibrationVersion = RC19

How to use the calibrated VIMS cubes?

Thanks to this webiste, getting the calibrated VIMS data is never been so easy. Now, the real question is, how to use them to create actual images and scientific results. For that end, you can use all regular ISIS tools, like qview to display them and create your own composite.

But if you need more advanced tools, you can use the python library pyvims we created. This package is still in beta and under active development. Contributions and feedbacks are welcome. After installing it, try to reproduce this Jupyter NoteBook to get your hands on the data.