Introduction

This package can

  • download,
  • (re-)calibrate, and
  • manage the storage

of Cassini ISS data.

Furthermore, it can be used to show ISS data of Saturn rings, with (hopefully) correct ring radius and azimuth as plot axes. As a special add-on, it uses a data-file of Inner Lindblad Resonances to display them on top of the images.

Note: For the (re-)calibration the user has to have an ISIS environment installed: https://isis.astrogeology.usgs.gov/documents/InstallGuide/index.html

The pysis module which is used by pyciss will automatically activate it, if it is findable from the shell where the Python/IPython interpreter was launched.

Setup

Upon the first time, the pyciss.io module would be imported, an error will appear saying that

No configuration file [...] found.
Please run `pyciss.io.set_database_path()` and provide the path where
you want to keep your automatically downloaded images.
`pyciss` will store this path in [...], where you can easily change it later."

When calling the aforementioned function with a path, that path will be used to store the downloaded and managed ISS data. managed refers here to the fact that all later derived data products will automatically be stored in the folder of the respective ISS image_id, under the path that the user provided at this initial setup step.

Imagined use case

The user might read a paper that uses Cassini ISS data.

A data ID is given, which is:


In [ ]:
id_ = 'N1467344745'

PathManager

The io module offers a PathManager, which knows where the data is being stored and offers object attributes with sub-paths to objects inside the respective folder:


In [ ]:
from pyciss import io

pm = io.PathManager(id_)

The self-representation of an object in Jupyter notebooks is already useful in this case:


In [ ]:
pm

The downloader module offers some helpers to get data:


In [ ]:
from pyciss import downloader

In [ ]:
downloader.download_file_id(id_)

Now look at the self-representation of the PathManager object again:


In [ ]:
pm

Import into ISIS


In [ ]:
downloader.download_and_calibrate(id_)

In [ ]:
from osgeo import gdal

In [ ]:
ds = gdal.Open(str(pm.raw_label))

In [ ]:
%matplotlib nbagg

In [ ]:
data = ds.ReadAsArray()

In [ ]:
vmin,vmax = np.percentile(data, (1, 99))

In [ ]:
plt.imshow(data, vmin=vmin, vmax=vmax, cmap='gray')

In [ ]:
from pyciss.ringcube import RingCube

In [ ]:
cube = RingCube(pm.cubepath)

In [ ]:
cube.imshow()

In [ ]: