Commit 6ce49d6e authored by Kristin's avatar Kristin
Browse files

Added cassini comparison notebook

parent c0d44fe6
Loading
Loading
Loading
Loading
+117 −0
Original line number Diff line number Diff line
%% Cell type:markdown id: tags:

# Comparing a USGSCSM and ISIS camera for Cassini ISS

%% Cell type:code id: tags:

``` python
import pvl
import numpy as np
import os
import pandas as pd
import knoten
import csmapi

os.environ['ISISROOT'] = '/usgs/pkgs/isis3.8.0_RC1/install'
from pysis import isis
from pysis.exceptions import ProcessError
```

%% Cell type:markdown id: tags:

## Make a CSM sensor model
Requires N1702360370_1.LBL and N1702360370_1.IMG in data directory

%% Cell type:code id: tags:

``` python
fileName = 'data/N1702360370_1.LBL'
camera = knoten.csm.create_csm(fileName)
```

%% Cell type:markdown id: tags:

## Ingest the image and spiceinit

%% Cell type:code id: tags:

``` python
# Set the output location of the resulting .cub
cub_loc = os.path.splitext(fileName)[0] + '.cub'

try:
    isis.ciss2isis(from_=fileName, to=cub_loc)
except ProcessError as e:
    print(e.stderr)

try:
    isis.spiceinit(from_=cub_loc, shape='ellipsoid')
except ProcessError as e:
    print(e.stderr)
```

%% Cell type:markdown id: tags:

## Define a function that compares ISIS and USGSCSM pixels

%% Cell type:code id: tags:

``` python
def check_pixel(camera, cub, line, sample):
    """Compares ISIS and USGSCSM pixel.

    Takes an image coordinate, projects it to a ground point using ISIS, then projects
    the result back into an image coordinate using USGSCSM and computes the difference
    between image coordinates.
    """
    output = isis.campt(from_=cub, line=line, sample=sample)
    pvl_output = pvl.loads(output)
    bodyfixed = pvl_output['GroundPoint']['BodyFixedCoordinate']
    bodyfixed = np.asarray(bodyfixed.value) * 1000
    image_coord = camera.groundToImage(csmapi.EcefCoord(*bodyfixed))
    # (.5,.5) in CSM == (1,1) in ISIS, so we have to subtract (.5,.5) from the ISIS pixels
    line_diff = line - image_coord.line - .5
    sample_diff = sample - image_coord.samp - .5
    return line_diff, sample_diff
```

%% Cell type:markdown id: tags:

## Get the total number of lines / samples

%% Cell type:code id: tags:

``` python
isis_label = pvl.load(cub_loc)
n_samples = isis_label['IsisCube']['Core']['Dimensions']['Samples']
n_lines = isis_label['IsisCube']['Core']['Dimensions']['Lines']
```

%% Cell type:markdown id: tags:

## Compare top left, top right, bottom left, bottom right, and center pixels using check_pixel

%% Cell type:code id: tags:

``` python
pixels_dict = {'line' : [1,1,n_lines, n_lines, n_lines/2],
               'sample' : [1, n_samples, 1, n_samples, n_samples/2]}

pixels_df = pd.DataFrame.from_dict(pixels_dict)
pixels_df['line_diff'] = np.NaN
pixels_df['sample_diff'] = np.NaN

for idx, row in pixels_df.iterrows():
    pixels_df.iloc[idx]['line_diff'], pixels_df.iloc[idx]['sample_diff'] = check_pixel(camera, cub_loc, row['line'], row['sample'])

pixels_df
```

%% Output

         line  sample    line_diff  sample_diff
    0     1.0     1.0 -1020.486363 -1024.409488
    1     1.0  1024.0 -1020.472731  1022.315882
    2  1024.0     1.0  1026.247265 -1024.418200
    3  1024.0  1024.0  1026.260599  1022.307325
    4   512.0   512.0     1.888677    -2.053929
+1.03 MiB

File added.

No diff preview for this file type.

+120 −0
Original line number Diff line number Diff line
PDS_VERSION_ID = PDS3

/* FILE CHARACTERISTICS */

RECORD_TYPE = FIXED_LENGTH
RECORD_BYTES = 1048
FILE_RECORDS = 1028

/* POINTERS TO DATA OBJECTS */

^IMAGE_HEADER = ("N1702360370_1.IMG",1)
^TELEMETRY_TABLE = ("N1702360370_1.IMG",4)
^LINE_PREFIX_TABLE = ("N1702360370_1.IMG",5)
^IMAGE = ("N1702360370_1.IMG",5)

/* IDENTIFICATION DATA ELEMENTS */

ANTIBLOOMING_STATE_FLAG = "OFF"
BIAS_STRIP_MEAN = 8.850293
CALIBRATION_LAMP_STATE_FLAG = "N/A"
COMMAND_FILE_NAME = "trigger_3618_1.ioi"
COMMAND_SEQUENCE_NUMBER = 3618
DARK_STRIP_MEAN = 0.269221
DATA_CONVERSION_TYPE = "TABLE"
DATA_SET_ID = "CO-S-ISSNA/ISSWA-2-EDR-V1.0"
DELAYED_READOUT_FLAG = "NO"
DESCRIPTION = "Incomplete product finalized due to truncated lines."
DETECTOR_TEMPERATURE = -89.243546 <DEGC>
EARTH_RECEIVED_START_TIME = 2011-346T22:30:08.981
EARTH_RECEIVED_STOP_TIME = 2011-346T22:30:49.765
ELECTRONICS_BIAS = 112
EXPECTED_MAXIMUM = (62.996498,69.454498)
EXPECTED_PACKETS = 576
EXPOSURE_DURATION = 4600.000000
FILTER_NAME = ("CL1","UV3")
FILTER_TEMPERATURE = 0.248629
FLIGHT_SOFTWARE_VERSION_ID = "1.4"
GAIN_MODE_ID = "29 ELECTRONS PER DN"
IMAGE_MID_TIME = 2011-346T05:02:22.073
IMAGE_NUMBER = "1702360370"
IMAGE_OBSERVATION_TYPE = {"SCIENCE"}
IMAGE_TIME = 2011-346T05:02:24.373
INSTRUMENT_DATA_RATE = 182.783997
INSTRUMENT_HOST_NAME = "CASSINI ORBITER"
INSTRUMENT_ID = "ISSNA"
INSTRUMENT_MODE_ID = "FULL"
INSTRUMENT_NAME = "IMAGING SCIENCE SUBSYSTEM - NARROW ANGLE"
INST_CMPRS_PARAM = ("N/A","N/A","N/A","N/A")
INST_CMPRS_RATE = (5.333330,3.631307)
INST_CMPRS_RATIO = 2.203063
INST_CMPRS_TYPE = "LOSSLESS"
LIGHT_FLOOD_STATE_FLAG = "ON"
METHOD_DESC = "ISSPT2.7;Enceladus;ISS_158EN_ENCEL001_PRIME"
MISSING_LINES = 31
MISSING_PACKET_FLAG = "NO"
MISSION_NAME = "CASSINI-HUYGENS"
MISSION_PHASE_NAME = "EXTENDED-EXTENDED MISSION"
OBSERVATION_ID = "ISS_158EN_ENCEL001_PRIME"
OPTICS_TEMPERATURE = (0.627499,1.905708)
ORDER_NUMBER = 16
PARALLEL_CLOCK_VOLTAGE_INDEX = 9
PREPARE_CYCLE_INDEX = 4
PRODUCT_CREATION_TIME = 2011-346T15:34:07.000
PRODUCT_ID = "1_N1702360370.120"
PRODUCT_VERSION_TYPE = "FINAL"
READOUT_CYCLE_INDEX = 6
RECEIVED_PACKETS = 523
SENSOR_HEAD_ELEC_TEMPERATURE = 1.633024
SEQUENCE_ID = "S71"
SEQUENCE_NUMBER = 16
SEQUENCE_TITLE = "ISS_158EN_ENCEL001_PRIME"
SHUTTER_MODE_ID = "NACONLY"
SHUTTER_STATE_ID = "ENABLED"
SOFTWARE_VERSION_ID = "ISS 11.00 05-24-2006"
SPACECRAFT_CLOCK_CNT_PARTITION = 1
SPACECRAFT_CLOCK_START_COUNT = "1702360365.220"
SPACECRAFT_CLOCK_STOP_COUNT = "1702360370.120"
START_TIME = 2011-346T05:02:19.773
STOP_TIME = 2011-346T05:02:24.373
TARGET_DESC = "Enceladus"
TARGET_LIST = "N/A"
TARGET_NAME = "ENCELADUS"
TELEMETRY_FORMAT_ID = "S&ER3"
VALID_MAXIMUM = (4095,4095)
OBJECT = IMAGE_HEADER
      INTERCHANGE_FORMAT = ASCII
      HEADER_TYPE = VICAR2
       BYTES = 3144
      RECORDS = 1
      ^DESCRIPTION = "../../label/vicar2.txt"
END_OBJECT = IMAGE_HEADER
OBJECT = TELEMETRY_TABLE
      INTERCHANGE_FORMAT = BINARY
      ROWS = 1
      COLUMNS = 2
      ROW_BYTES = 1048
      ^STRUCTURE = "../../label/tlmtab.fmt"
      OBJECT = COLUMN
            NAME = NULL_PADDING
            DATA_TYPE = MSB_UNSIGNED_INTEGER
            START_BYTE = 61
            BYTES = 987
      END_OBJECT = COLUMN
END_OBJECT = TELEMETRY_TABLE
OBJECT = LINE_PREFIX_TABLE
      INTERCHANGE_FORMAT = BINARY
      ROWS = 1024
      COLUMNS = 7
      ROW_BYTES = 24
      ROW_SUFFIX_BYTES = 1024
      ^LINE_PREFIX_STRUCTURE = "../../label/prefix3.fmt"
END_OBJECT = LINE_PREFIX_TABLE
OBJECT = IMAGE
      LINES = 1024
      LINE_SAMPLES = 1024
      SAMPLE_BITS = 8
      SAMPLE_TYPE = SUN_INTEGER
      LINE_PREFIX_BYTES = 24
END_OBJECT = IMAGE
END