From 39eedca6861ef19fdef84ffc5f46af4b16325ab9 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 16 Feb 2022 21:10:05 -0800 Subject: [PATCH 01/57] hirise run successful --- README.md | 29 ++ inputs/hirise/RDRCUMINDEX.LBL | 492 ++++++++++++++++++++++++++++++++++ 2 files changed, 521 insertions(+) create mode 100644 inputs/hirise/RDRCUMINDEX.LBL diff --git a/README.md b/README.md index 683bd33..d8b40c3 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,32 @@ Copyright 2019, by the California Institute of Technology. ALL RIGHTS RESERVED. United States Government Sponsorship acknowledged. Any commercial use must be negotiated with the Office of Technology Transfer at the California Institute of Technology. + + +---- + +# Usage + +First, create and activate a barebones env using python 3.7: + +```bash +conda env create -f env/bare_env.yml +conda activate p37 +``` + +## HiRISE Example + +# Download HiRISE Label and Tablel files: + +```bash +wget -O RDRCUMINDEX.LBL https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.LBL +wget -O RDRCUMINDEX.TAB https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.TAB +``` + +To ingest indices: + +```bash +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputshirise/ +``` + + diff --git a/inputs/hirise/RDRCUMINDEX.LBL b/inputs/hirise/RDRCUMINDEX.LBL new file mode 100644 index 0000000..dd4f229 --- /dev/null +++ b/inputs/hirise/RDRCUMINDEX.LBL @@ -0,0 +1,492 @@ +PDS_VERSION_ID = PDS3 +RECORD_TYPE = FIXED_LENGTH +RECORD_BYTES = 821 +FILE_RECORDS = 142384 +^RDR_INDEX_TABLE = "RDRCUMINDEX.TAB" +OBJECT = RDR_INDEX_TABLE + INDEX_TYPE = SINGLE + INTERCHANGE_FORMAT = ASCII + ROWS = 142384 + ROW_BYTES = 821 + COLUMNS = 54 + OBJECT = COLUMN + NAME = VOLUME_ID + DATA_TYPE = CHARACTER + START_BYTE = 2 + BYTES = 10 + FORMAT = "A10" + DESCRIPTION = "Volume identification" + END_OBJECT + OBJECT = COLUMN + NAME = FILE_NAME_SPECIFICATION + DATA_TYPE = CHARACTER + START_BYTE = 15 + BYTES = 67 + FORMAT = "A67" + DESCRIPTION = "Path and file name of HiRISE RDR product" + END_OBJECT + OBJECT = COLUMN + NAME = INSTRUMENT_HOST_ID + DATA_TYPE = CHARACTER + START_BYTE = 85 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "Spacecraft hosting the HiRISE instrument, + always MRO" + END_OBJECT + OBJECT = COLUMN + NAME = INSTRUMENT_ID + DATA_TYPE = CHARACTER + START_BYTE = 91 + BYTES = 6 + FORMAT = "A6" + DESCRIPTION = "Instrument that acquired the observaiton, + always HIRISE" + END_OBJECT + OBJECT = COLUMN + NAME = OBSERVATION_ID + DATA_TYPE = CHARACTER + START_BYTE = 100 + BYTES = 15 + FORMAT = "A15" + DESCRIPTION = "Unique identification associated with + an observation. Up to 28 EDR products can be + associated with an observation." + END_OBJECT + OBJECT = COLUMN + NAME = PRODUCT_ID + DATA_TYPE = CHARACTER + START_BYTE = 118 + BYTES = 21 + FORMAT = "A21" + DESCRIPTION = "Unique identification associated with the product" + END_OBJECT + OBJECT = COLUMN + NAME = PRODUCT_VERSION_ID + DATA_TYPE = CHARACTER + START_BYTE = 142 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "Version number of this product" + END_OBJECT + OBJECT = COLUMN + NAME = TARGET_NAME + DATA_TYPE = CHARACTER + START_BYTE = 148 + BYTES = 32 + FORMAT = "A32" + DESCRIPTION = "Target Name of the observation" + END_OBJECT + OBJECT = COLUMN + NAME = ORBIT_NUMBER + DATA_TYPE = ASCII_INTEGER + START_BYTE = 182 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Orbit number from start of mission" + END_OBJECT + OBJECT = COLUMN + NAME = MISSION_PHASE_NAME + DATA_TYPE = CHARACTER + START_BYTE = 190 + BYTES = 30 + FORMAT = "A30" + DESCRIPTION = "Mission Phase at time of observation, such + as Primary Science Phase" + END_OBJECT + OBJECT = COLUMN + NAME = RATIONALE_DESC + DATA_TYPE = CHARACTER + START_BYTE = 223 + BYTES = 75 + FORMAT = "A75" + DESCRIPTION = "Informational note about the observation" + END_OBJECT + OBJECT = COLUMN + NAME = OBSERVATION_START_TIME + DATA_TYPE = TIME + START_BYTE = 301 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when HiRISE started the + imaging sequence" + END_OBJECT + OBJECT = COLUMN + NAME = OBSERVATION_START_COUNT + DATA_TYPE = CHARACTER + START_BYTE = 328 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "Spacecraft clock count when HiRISE started + the imaging sequence" + END_OBJECT + OBJECT = COLUMN + NAME = START_TIME + DATA_TYPE = TIME + START_BYTE = 347 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when first image line of target was + acquired" + END_OBJECT + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_START_COUNT + DATA_TYPE = CHARACTER + START_BYTE = 374 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "Spacecraft clock count when first image line of + target was acquired" + END_OBJECT + OBJECT = COLUMN + NAME = STOP_TIME + DATA_TYPE = TIME + START_BYTE = 393 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when last image line of target was + acquired" + END_OBJECT + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_STOP_COUNT + DATA_TYPE = CHARACTER + START_BYTE = 420 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "Spacecraft clock count when last image line of + target was acquired" + END_OBJECT + OBJECT = COLUMN + NAME = IMAGE_LINES + DATA_TYPE = ASCII_INTEGER + START_BYTE = 438 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Number of image lines" + END_OBJECT + OBJECT = COLUMN + NAME = LINE_SAMPLES + DATA_TYPE = ASCII_INTEGER + START_BYTE = 445 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Number of line samples" + END_OBJECT + OBJECT = COLUMN + NAME = EMISSION_ANGLE + DATA_TYPE = ASCII_REAL + START_BYTE = 452 + BYTES = 8 + FORMAT = "F8.5" + DESCRIPTION = "The emission angle at the center of the + observation" + END_OBJECT + OBJECT = COLUMN + NAME = INCIDENCE_ANGLE + DATA_TYPE = ASCII_REAL + START_BYTE = 461 + BYTES = 7 + FORMAT = "F7.4" + DESCRIPTION = "The incidence angle at the center of the + observation" + END_OBJECT + OBJECT = COLUMN + NAME = PHASE_ANGLE + DATA_TYPE = ASCII_REAL + START_BYTE = 469 + BYTES = 8 + FORMAT = "F7.4" + DESCRIPTION = "The phase angle at the center of the observation" + END_OBJECT + OBJECT = COLUMN + NAME = SPACECRAFT_ALTITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 478 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "The areodetic altitude of the center of the + observation in kilometers. This field represents the + center altitude for the observation on the MRO + ellipsoid reference." + END_OBJECT + OBJECT = COLUMN + NAME = TARGET_CENTER_DISTANCE + DATA_TYPE = ASCII_REAL + START_BYTE = 487 + BYTES = 7 + FORMAT = "F7.2" + DESCRIPTION = "The distance from the spacecraft to the target + body's center in kilometers" + END_OBJECT + OBJECT = COLUMN + NAME = SLANT_DISTANCE + DATA_TYPE = ASCII_REAL + START_BYTE = 495 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "The distance from the spacecraft to the + intersection of the view vector with the target + body in kilometers" + END_OBJECT + OBJECT = COLUMN + NAME = NORTH_AZIMUTH + DATA_TYPE = ASCII_REAL + START_BYTE = 504 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The angle in degrees clockwise from the reference + axis of the observation (a line from the center to + the right edge of the observation) to the direction + to the north pole of the target body." + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SOLAR_AZIMUTH + DATA_TYPE = ASCII_REAL + START_BYTE = 515 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The angel in degrees clockwise from the reference + axis of the observation (a line from the center to + the right edge of the observation) to the direction + to the sub-solar point on the target body." + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SOLAR_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 526 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The planetocentric latitude of the sub-solar point + in degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SOLAR_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 537 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The east longitude of the sub-solar point in + degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 548 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The planetocentric latitude of the sub-spacecraft + point in degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 559 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The planetocentric longitude of the sub-spacecraft + point in degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SOLAR_DISTANCE + DATA_TYPE = ASCII_REAL + START_BYTE = 570 + BYTES = 10 + FORMAT = "F10.5" + DESCRIPTION = "The distance from the center of the image on the + target body to the center of the Sun in AU" + END_OBJECT + OBJECT = COLUMN + NAME = SOLAR_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 581 + BYTES = 10 + FORMAT = "F10.3" + DESCRIPTION = "The solar longitude ('L sub S') at the time of + image acquisition in the degrees from the Martian + vernal equinox" + END_OBJECT + OBJECT = COLUMN + NAME = LOCAL_TIME + DATA_TYPE = ASCII_REAL + START_BYTE = 592 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Local Solar Time in decimal hours from midnight at + the center of the observation" + END_OBJECT + OBJECT = COLUMN + NAME = STEREO_FLAG + DATA_TYPE = CHARACTER + START_BYTE = 604 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "Indicates whether this product was intended to be + part of a stereo pair. (YES or NO)." + END_OBJECT + OBJECT = COLUMN + NAME = MINIMUM_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 609 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Minimum latitude of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = MAXIMUM_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 620 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Maximum latitude of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = MINIMUM_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 631 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Minimum longitude of the projected image." + END_OBJECT + OBJECT = COLUMN + NAME = MAXIMUM_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 642 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Maximum longitude of projected image" + END_OBJECT + OBJECT = COLUMN + NAME = MAP_SCALE + DATA_TYPE = ASCII_REAL + START_BYTE = 653 + BYTES = 5 + FORMAT = "F5.2" + DESCRIPTION = "Map scale in meters per pixel" + END_OBJECT + OBJECT = COLUMN + NAME = MAP_RESOLUTION + DATA_TYPE = ASCII_REAL + START_BYTE = 659 + BYTES = 10 + FORMAT = "F10.3" + DESCRIPTION = "Map resolution in pixels per degree" + END_OBJECT + OBJECT = COLUMN + NAME = MAP_PROJECTION_TYPE + DATA_TYPE = CHARACTER + START_BYTE = 671 + BYTES = 19 + FORMAT = "A19" + DESCRIPTION = "EQUIRECTANGULAR or POLAR STEREOGRAPHIC" + END_OBJECT + OBJECT = COLUMN + NAME = PROJECTION_CENTER_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 692 + BYTES = 5 + FORMAT = "F5.1" + DESCRIPTION = "Center latitude of the map projection. This does + not necessarily equal the center latitude of the + image." + END_OBJECT + OBJECT = COLUMN + NAME = PROJECTION_CENTER_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 698 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "Center longitude of the map projection. This does + not necessarily equal the center longitude of the + image." + END_OBJECT + OBJECT = COLUMN + NAME = LINE_PROJECTION_OFFSET + DATA_TYPE = ASCII_REAL + START_BYTE = 707 + BYTES = 12 + FORMAT = "F12.1" + DESCRIPTION = "The line_projection_offset element provides the + line offset value of the map projection origin + position from the line and sample 1,1 (line and + sample 1,1 is considered the upper left corner of + the digital array)." + END_OBJECT + OBJECT = COLUMN + NAME = SAMPLE_PROJECTION_OFFSET + DATA_TYPE = ASCII_REAL + START_BYTE = 720 + BYTES = 12 + FORMAT = "F12.1" + DESCRIPTION = "The sample_projection_offset element provides the + sample offset value of the map projection origin + position from line and sample 1,1 (line and sample + 1,1 is considered the upper left corner of the + digital array). Note: that the positive direction + is to the right and down." + END_OBJECT + OBJECT = COLUMN + NAME = CORNER1_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 733 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 1 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER1_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 744 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 1 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER2_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 755 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 2 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER2_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 766 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 2 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER3_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 777 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 3 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER3_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 788 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 3 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER4_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 799 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 4 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER4_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 810 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 4 of the projected image" + END_OBJECT +END_OBJECT +END From a55d0444696d9fe9f391578805a3ebb09e6aad1c Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 16 Feb 2022 21:13:38 -0800 Subject: [PATCH 02/57] starting lroc adding --- env/bare_env.yml | 14 +++++++ pdsc/config/lroc_cdr_metadata.yaml | 42 ++++++++++++++++++++ pdsc/table.py | 62 ++++++++++++++++++++++++++++-- 3 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 env/bare_env.yml create mode 100644 pdsc/config/lroc_cdr_metadata.yaml diff --git a/env/bare_env.yml b/env/bare_env.yml new file mode 100644 index 0000000..6640c52 --- /dev/null +++ b/env/bare_env.yml @@ -0,0 +1,14 @@ +# For more information about setting up environment YAML files for conda, see: +# https://conda.io/docs/user-guide/tasks/manage-environments.html#create-env-file-manually + +# bare bones conda environment to run osprey + +name: p37 + +channels: + - conda-forge + - menpo + - defaults + +dependencies: + - python=3.7 diff --git a/pdsc/config/lroc_cdr_metadata.yaml b/pdsc/config/lroc_cdr_metadata.yaml new file mode 100644 index 0000000..fe7ae9b --- /dev/null +++ b/pdsc/config/lroc_cdr_metadata.yaml @@ -0,0 +1,42 @@ +columns: + - [PRODUCT_ID, observation_id, text] + - [LINE_SAMPLES, samples, integer] + - [IMAGE_LINES, lines, integer] + - [CENTER_LATITUDE, center_latitude, real] + - [CENTER_LONGITUDE, center_longitude, real] + - [NORTH_AZIMUTH, north_azimuth, real] + - [SCALED_PIXEL_WIDTH, pixel_width, real] + - [VOLUME_ID, volume_id, text] + - [FILE_NAME_SPECIFICATION, file_name_specification, text] + - [PRODUCT_VERSION_ID, product_version_id, text] + - [TARGET_NAME, target_name, text] + - [ORBIT_NUMBER, orbit_number, integer] + - [MISSION_PHASE_NAME, mission_phase_name, text] + - [RATIONALE_DESC, description, text] + - [START_TIME, start_time, timestamp] + - [STOP_TIME, stop_time, timestamp] + - [SPACECRAFT_CLOCK_START_COUNT, sclk_start, real] + - [SPACECRAFT_CLOCK_STOP_COUNT, sclk_stop, real] + - [FILTER_NAME, filter_name, text] + - [EMISSION_ANGLE, emission_angle, real] + - [INCIDENCE_ANGLE, incidence_angle, real] + - [PHASE_ANGLE, phase_angle, real] + - [SPACECRAFT_ALTITUDE, spacecraft_altitude, real] + - [TARGET_CENTER_DISTANCE, target_center_distance, real] + - [SUB_SOLAR_AZIMUTH, sub_solar_azimuth, real] + - [SUB_SOLAR_LATITUDE, sub_solar_latitude, real] + - [SUB_SOLAR_LONGITUDE, sub_solar_longitude, real] + - [SUB_SPACECRAFT_LATITUDE, sub_spacecraft_latitude, real] + - [SUB_SPACECRAFT_LONGITUDE, sub_spacecraft_longitude, real] + - [SOLAR_DISTANCE, solar_distance, real] + - [SOLAR_LONGITUDE, solar_longitude, real] + +scale_factors: + SPACECRAFT_ALTITUDE: 1000 # km to m + SOLAR_DISTANCE: 1000 # km to m + +index: + - observation_id + +segmentation: + resolution: 50000 diff --git a/pdsc/table.py b/pdsc/table.py index d757e54..174a5ca 100644 --- a/pdsc/table.py +++ b/pdsc/table.py @@ -3,6 +3,7 @@ """ import re import numpy as np +import pdb from datetime import datetime from .util import registerer, standard_progress_bar @@ -105,6 +106,21 @@ def moc_observation_id(s): """ return s.replace('/', '') +@register_determiner('lroc_cdr') +def lroc_cdr_determiner(label_contents): + """ + Determines whether a cumulative index file is for HiRISE EDR products + :param label_contents: PDS cumulative index LBL file contents + :return: ``True`` iff this label file is for LROC CDR products + """ + print('LROC CDR') + + return ( + 'LROC' in label_contents and + 'CDR_CATALOG_INDEX' in label_contents + ) + + @register_determiner('hirise_edr') def hirise_edr_determiner(label_contents): """ @@ -385,7 +401,6 @@ def __init__(self, label_file, table_file): with open(label_file, 'r') as f: columns = self._parse(f) - if columns is None: raise RuntimeError('Error parsing table') @@ -485,7 +500,6 @@ def get_column(self, column_name_or_idx, progress=True, cache=True): f.seek(r*self.row_bytes + column.start_byte - 1) value = f.read(column.length) values.append(value) - try: data_column = np.array(values, dtype=column.dtype) except TypeError: @@ -610,6 +624,27 @@ class HiRiseTableColumn(PdsTableColumn): Defines special types for the HiRISE observation metadata """ +# **************************************************************************** +# LROC +# **************************************************************************** + +class LrocTableColumn(PdsTableColumn): + """ + A subclass of :py:class:`PdsTableColumn` for the LROC NAC instrument to define + some special types + Datetimes follow those of HiRISE + """ + + SPECIAL_TYPES = { + 'START_TIME': PdsColumnType(hirise_datetime), + 'STOP_TIME': PdsColumnType(hirise_datetime), + 'SPACECRAFT_CLOCK_START_COUNT': PdsColumnType(ctx_sclk), + 'SPACECRAFT_CLOCK_STOP_COUNT': PdsColumnType(ctx_sclk), + } + """ + Defines special types for the LROC observation metadata + """ + @register_table('hirise_edr') class HiRiseEdrTable(PdsTable): """ @@ -655,6 +690,28 @@ class HiRiseRdrTable(PdsTable): The HiRISE RDR table has a custom name """ +# **************************************************************************** +# LROC CDR +# **************************************************************************** + +@register_table('lroc_cdr') +class LrocCdrTable(PdsTable): + """ + A subclass of :py:class:`PdsTable` for the LROC NAC instrument that uses the + custom :py:class:`LrocTableColumn` class + """ + + COLUMN_CLASS = LrocTableColumn + """ + The :py:class:`LrocCdrTable` class should use + :py:class:`LrocTableColumn` for parsing columns + """ + + TABLE_OBJECT_NAME = 'Lroc_CDR_INDEX_TABLE' + """ + The Lroc CDR table has a custom name + """ + # **************************************************************************** # MOC # **************************************************************************** @@ -709,5 +766,4 @@ def parse_table(label_file, table_file): if instrument not in INSTRUMENT_TABLES: raise ValueError('Table parsing not implemented for %s' % instrument) - return instrument, INSTRUMENT_TABLES[instrument](label_file, table_file) From d0a5f978baa55d3508eb9584a69ff040c906a666 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 21 Feb 2022 12:29:33 -0800 Subject: [PATCH 03/57] info on how to create mini files --- README.md | 16 +- inputs/ctx/cumindex.lbl | 601 +++++++++++++++++++++ inputs/lroc/CUMINDEX.LBL | 980 +++++++++++++++++++++++++++++++++++ inputs_mini/ctx/cumindex.lbl | 601 +++++++++++++++++++++ pdsc/table.py | 2 +- 5 files changed, 2198 insertions(+), 2 deletions(-) create mode 100644 inputs/ctx/cumindex.lbl create mode 100644 inputs/lroc/CUMINDEX.LBL create mode 100644 inputs_mini/ctx/cumindex.lbl diff --git a/README.md b/README.md index d8b40c3..a2a790a 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,13 @@ conda env create -f env/bare_env.yml conda activate p37 ``` +I have also tried with python2, but when doing pip install, I got an error with incompatible numpy versions, but python 3 works, so recommend to use that. + +Note: I created full and mini examples (a subset of rows) for the cases. If you take a subset of the rows, you must also update the label file with the reduced number of rows. + ## HiRISE Example -# Download HiRISE Label and Tablel files: +# Download HiRISE Label and Table files: ```bash wget -O RDRCUMINDEX.LBL https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.LBL @@ -46,4 +50,14 @@ To ingest indices: pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputshirise/ ``` +# CTX example: + +``` +pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputsctx/ +``` + +Or, a mini example (I took a subset of rows from the table file and updated the index accordingly): +``` +pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputsctxmini/ +``` diff --git a/inputs/ctx/cumindex.lbl b/inputs/ctx/cumindex.lbl new file mode 100644 index 0000000..0f70d59 --- /dev/null +++ b/inputs/ctx/cumindex.lbl @@ -0,0 +1,601 @@ +PDS_VERSION_ID = PDS3 +RECORD_TYPE = FIXED_LENGTH +RECORD_BYTES = 555 +FILE_RECORDS = 127053 +^TABLE = "CUMINDEX.TAB" +DATA_SET_ID = "MRO-M-CTX-2-EDR-L0-V1.0" +SPACECRAFT_NAME = "MARS RECONNAISSANCE ORBITER" +INSTRUMENT_NAME = "CONTEXT CAMERA" +TARGET_NAME = MARS +MISSION_PHASE_NAME = "N/A" +PRODUCT_CREATION_TIME = 2007-05-23T19:00:00 + +OBJECT = TABLE + INTERCHANGE_FORMAT = ASCII + ROWS = 127053 + COLUMNS = 51 + ROW_BYTES = 555 + INDEX_TYPE = CUMULATIVE + +OBJECT = COLUMN +NAME = VOLUME_ID +COLUMN_NUMBER = 1 +DATA_TYPE = CHARACTER +START_BYTE = 2 +BYTES = 9 +FORMAT = "A9" +DESCRIPTION = "volume id" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = FILE_SPECIFICATION_NAME +COLUMN_NUMBER = 2 +DATA_TYPE = CHARACTER +START_BYTE = 14 +BYTES = 35 +FORMAT = "A35" +DESCRIPTION = "file name" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = ORIGINAL_PRODUCT_ID +COLUMN_NUMBER = 3 +DATA_TYPE = CHARACTER +START_BYTE = 52 +BYTES = 16 +FORMAT = "A16" +DESCRIPTION = "original product id" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = PRODUCT_ID +COLUMN_NUMBER = 4 +DATA_TYPE = CHARACTER +START_BYTE = 71 +BYTES = 26 +FORMAT = "A26" +DESCRIPTION = "product id" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = IMAGE_TIME +COLUMN_NUMBER = 5 +DATA_TYPE = CHARACTER +START_BYTE = 100 +BYTES = 23 +FORMAT = "A23" +DESCRIPTION = "SCET time at start of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = INSTRUMENT_ID +COLUMN_NUMBER = 6 +DATA_TYPE = CHARACTER +START_BYTE = 126 +BYTES = 6 +FORMAT = "A6" +DESCRIPTION = "instrument id (abbreviated name or acronym)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = INSTRUMENT_MODE_ID +COLUMN_NUMBER = 7 +DATA_TYPE = CHARACTER +START_BYTE = 135 +BYTES = 5 +FORMAT = "A5" +DESCRIPTION = "command mode (ITL or NIFL) in which this image +was acquired" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LINE_SAMPLES +COLUMN_NUMBER = 8 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 142 +BYTES = 4 +FORMAT = "I4" +DESCRIPTION = "image width" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LINES +COLUMN_NUMBER = 9 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 147 +BYTES = 6 +FORMAT = "I6" +DESCRIPTION = "image height" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SPATIAL_SUMMING +COLUMN_NUMBER = 10 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 154 +BYTES = 2 +FORMAT = "I2" +DESCRIPTION = "spatial summing" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SCALED_PIXEL_WIDTH +COLUMN_NUMBER = 11 +DATA_TYPE = ASCII_REAL +START_BYTE = 157 +BYTES = 8 +FORMAT = "F8.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "image resolution in meters/pixel at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = PIXEL_ASPECT_RATIO +COLUMN_NUMBER = 12 +DATA_TYPE = ASCII_REAL +START_BYTE = 166 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "pixel aspect ratio (pixel height/pixel width) +at center of image. The image's center pixel is projected on the +ground and its linear extents are ratioed, so any effects of +emission angle and line time are modelled. To recover an image +with 'square' pixels, the image should be resampled to a height +of aspect_ratio * input height." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = EMISSION_ANGLE +COLUMN_NUMBER = 13 +DATA_TYPE = ASCII_REAL +START_BYTE = 173 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "emission angle at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = INCIDENCE_ANGLE +COLUMN_NUMBER = 14 +DATA_TYPE = ASCII_REAL +START_BYTE = 180 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "incidence angle at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = PHASE_ANGLE +COLUMN_NUMBER = 15 +DATA_TYPE = ASCII_REAL +START_BYTE = 187 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "phase angle at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = CENTER_LONGITUDE +COLUMN_NUMBER = 16 +DATA_TYPE = ASCII_REAL +START_BYTE = 194 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "center longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = CENTER_LATITUDE +COLUMN_NUMBER = 17 +DATA_TYPE = ASCII_REAL +START_BYTE = 201 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "center areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_LEFT_LONGITUDE +COLUMN_NUMBER = 18 +DATA_TYPE = ASCII_REAL +START_BYTE = 208 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper left longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_LEFT_LATITUDE +COLUMN_NUMBER = 19 +DATA_TYPE = ASCII_REAL +START_BYTE = 215 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper left areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_RIGHT_LONGITUDE +COLUMN_NUMBER = 20 +DATA_TYPE = ASCII_REAL +START_BYTE = 222 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper right longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_RIGHT_LATITUDE +COLUMN_NUMBER = 21 +DATA_TYPE = ASCII_REAL +START_BYTE = 229 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper right areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_LEFT_LONGITUDE +COLUMN_NUMBER = 22 +DATA_TYPE = ASCII_REAL +START_BYTE = 236 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower left longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_LEFT_LATITUDE +COLUMN_NUMBER = 23 +DATA_TYPE = ASCII_REAL +START_BYTE = 243 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower left areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_RIGHT_LONGITUDE +COLUMN_NUMBER = 24 +DATA_TYPE = ASCII_REAL +START_BYTE = 250 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower right longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_RIGHT_LATITUDE +COLUMN_NUMBER = 25 +DATA_TYPE = ASCII_REAL +START_BYTE = 257 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower right areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = MISSION_PHASE_NAME +COLUMN_NUMBER = 26 +DATA_TYPE = CHARACTER +START_BYTE = 265 +BYTES = 10 +FORMAT = "A10" +DESCRIPTION = "mission phase name" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = TARGET_NAME +COLUMN_NUMBER = 27 +DATA_TYPE = CHARACTER +START_BYTE = 278 +BYTES = 6 +FORMAT = "A6" +DESCRIPTION = "target name (e.g., MARS, PHOBOS, STAR, SPACE)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SPACECRAFT_CLOCK_START_COUNT +COLUMN_NUMBER = 28 +DATA_TYPE = CHARACTER +START_BYTE = 287 +BYTES = 15 +FORMAT = "A15" +DESCRIPTION = "spacecraft clock value at start of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = FOCAL_PLANE_TEMPERATURE +COLUMN_NUMBER = 29 +DATA_TYPE = ASCII_REAL +START_BYTE = 304 +BYTES = 5 +FORMAT = "F5.1" +DESCRIPTION = "focal plane temp in Kelvins" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LINE_EXPOSURE_DURATION +COLUMN_NUMBER = 30 +DATA_TYPE = ASCII_REAL +START_BYTE = 310 +BYTES = 8 +FORMAT = "F8.4" +DESCRIPTION = "line integration time in milliseconds" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = OFFSET_MODE_ID +COLUMN_NUMBER = 31 +DATA_TYPE = CHARACTER +START_BYTE = 320 +BYTES = 11 +FORMAT = "A11" +DESCRIPTION = "offset mode (see documentation)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SAMPLE_FIRST_PIXEL +COLUMN_NUMBER = 32 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 333 +BYTES = 4 +FORMAT = "I4" +DESCRIPTION = "first pixel stored from detector, zero-based" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SCALED_IMAGE_WIDTH +COLUMN_NUMBER = 33 +DATA_TYPE = ASCII_REAL +START_BYTE = 338 +BYTES = 7 +FORMAT = "F7.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "image width from left to right image edge in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SCALED_IMAGE_HEIGHT +COLUMN_NUMBER = 34 +DATA_TYPE = ASCII_REAL +START_BYTE = 346 +BYTES = 8 +FORMAT = "F8.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "image height from first line to last line in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SPACECRAFT_ALTITUDE +COLUMN_NUMBER = 35 +DATA_TYPE = ASCII_REAL +START_BYTE = 355 +BYTES = 7 +FORMAT = "F7.2" +DESCRIPTION = "distance from s/c to closest point on surface in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = TARGET_CENTER_DISTANCE +COLUMN_NUMBER = 36 +DATA_TYPE = ASCII_REAL +START_BYTE = 363 +BYTES = 7 +FORMAT = "F7.2" +DESCRIPTION = "distance from s/c to target body center in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SLANT_DISTANCE +COLUMN_NUMBER = 37 +DATA_TYPE = ASCII_REAL +START_BYTE = 371 +BYTES = 7 +FORMAT = "F7.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "range from s/c to intersection of view vector with +target body in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = USAGE_NOTE +COLUMN_NUMBER = 38 +DATA_TYPE = CHARACTER +START_BYTE = 380 +BYTES = 1 +FORMAT = "A1" +DESCRIPTION = "Because of the CTX's line-scan nature, depending on the +orientation and sense of rotation of the spacecraft, CTX images can +either be normal or flipped left-for-right (independent of whether the +image is north up or south up.) This flag will be 'F' if the image +should be flipped left-to-right, and 'N' if it is already in normal +form." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = NORTH_AZIMUTH +COLUMN_NUMBER = 39 +DATA_TYPE = ASCII_REAL +START_BYTE = 383 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "The angle in degrees clockwise from the reference axis +of the image (a line from the center to the right edge of the image) +to the direction to the north pole of the target body. If the +USAGE_NOTE described previously is 'F', the image should be flipped +prior to applying this angle." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SOLAR_AZIMUTH +COLUMN_NUMBER = 40 +DATA_TYPE = ASCII_REAL +START_BYTE = 390 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "The angle in degrees clockwise from the reference axis +of the image (a line from the center to the right edge of the image) +to the direction to the subsolar point on the target body. If the +USAGE_NOTE described previously is 'F', the image should be flipped +prior to applying this angle." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SOLAR_LONGITUDE +COLUMN_NUMBER = 41 +DATA_TYPE = ASCII_REAL +START_BYTE = 397 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "west longitude of subsolar point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SOLAR_LATITUDE +COLUMN_NUMBER = 42 +DATA_TYPE = ASCII_REAL +START_BYTE = 404 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "planetographic latitude of subsolar point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SPACECRAFT_LONGITUDE +COLUMN_NUMBER = 43 +DATA_TYPE = ASCII_REAL +START_BYTE = 411 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "west longitude of subspacecraft point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SPACECRAFT_LATITUDE +COLUMN_NUMBER = 44 +DATA_TYPE = ASCII_REAL +START_BYTE = 418 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "planetographic latitude of subspacecraft point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SOLAR_DISTANCE +COLUMN_NUMBER = 45 +DATA_TYPE = ASCII_REAL +START_BYTE = 425 +BYTES = 11 +FORMAT = "F11.1" +DESCRIPTION = "distance from the center of the image on the target body +to the center of the sun in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SOLAR_LONGITUDE +COLUMN_NUMBER = 46 +DATA_TYPE = ASCII_REAL +START_BYTE = 437 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "solar longitude ('L sub s') at time of image in degrees +from martian vernal equinox, as computed by the method in 'Accurate +analytic representations of solar time and seasons on Mars with +applications to the Pathfinder/Surveyor missions', Michael Allison, +Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOCAL_TIME +COLUMN_NUMBER = 47 +DATA_TYPE = ASCII_REAL +START_BYTE = 444 +BYTES = 5 +FORMAT = "F5.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "Local True Solar Time in decimal hours from midnight at +the center of the image, as computed by the method in 'Accurate +analytic representations of solar time and seasons on Mars with +applications to the Pathfinder/Surveyor missions', Michael Allison, +Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997). +An 'hour' in this context is an angular measure of 15 degrees +of solar motion." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = IMAGE_SKEW_ANGLE +COLUMN_NUMBER = 48 +DATA_TYPE = ASCII_REAL +START_BYTE = 450 +BYTES = 5 +FORMAT = "F5.1" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = +"The image skew angle is the absolute value, in degrees, of the angle +between the left edge (a line between the lower left and upper left +corners) and the bottom edge (a line between the lower left and lower +right corners) of the image, where the edges are projected on the +target body. For images whose footprints are exactly rectangular, +this angle will be 90 degrees. Departures from 90 degrees indicate a +non-rectangular image footprint, caused by slews of the spacecraft +during imaging outside the orbit plane or off-nadir pointing, or +both." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = RATIONALE_DESC +COLUMN_NUMBER = 49 +DATA_TYPE = CHARACTER +START_BYTE = 457 +BYTES = 80 +FORMAT = "A80" +DESCRIPTION = "A text description of the scientific purpose for the +acquisition of this image. For routine mapping operations, this will +most likely be the goal of the image as targeted (which may not be met +if the image missed its target significantly, the atmosphere was +cloudy, etc.)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = DATA_QUALITY_DESC +COLUMN_NUMBER = 50 +DATA_TYPE = CHARACTER +START_BYTE = 540 +BYTES = 6 +FORMAT = "A6" +DESCRIPTION = "'OK' if all fragments of the image are +received without detected checksum or sequence errors, and 'ERROR' +otherwise." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = ORBIT_NUMBER +COLUMN_NUMBER = 51 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 548 +BYTES = 6 +FORMAT = "I6" +DESCRIPTION = "orbit number as defined by the MRO Project" +END_OBJECT = COLUMN + +END_OBJECT = TABLE + +END + diff --git a/inputs/lroc/CUMINDEX.LBL b/inputs/lroc/CUMINDEX.LBL new file mode 100644 index 0000000..40b8abd --- /dev/null +++ b/inputs/lroc/CUMINDEX.LBL @@ -0,0 +1,980 @@ +PDS_VERSION_ID = PDS3 + +^INDEX_TABLE = "CUMINDEX.TAB" + +RECORD_TYPE = FIXED_LENGTH +RECORD_BYTES = 902 +FILE_RECORDS = 3173863 +MD5_CHECKSUM = "1d07f6e60bfe5fc89eac6b940ff16fd8" +DATA_SET_ID = "LRO-L-LROC-3-CDR-V1.0" +SPACECRAFT_NAME = "LUNAR RECONNAISSANCE ORBITER" +INSTRUMENT_NAME = "LUNAR RECONNAISSANCE ORBITER CAMERA" +TARGET_NAME = "MOON" +MISSION_PHASE_NAME = {"COMMISSIONING", + "NOMINAL MISSION", + "SCIENCE MISSION", + "EXTENDED SCIENCE MISSION", + "SECOND EXTENDED SCIENCE MISSION", + "THIRD EXTENDED SCIENCE MISSION", + "FOURTH EXTENDED SCIENCE MISSION"} +PRODUCT_CREATION_TIME = 2022-02-08T19:19:13 + +OBJECT = INDEX_TABLE + NAME = CDR_CATALOG_INDEX + INTERCHANGE_FORMAT = ASCII + ROWS = 3173863 + COLUMNS = 83 + ROW_BYTES = 902 + INDEX_TYPE = CUMULATIVE + + OBJECT = COLUMN + NAME = VOLUME_ID + COLUMN_NUMBER = 1 + DATA_TYPE = CHARACTER + START_BYTE = 2 + BYTES = 12 + FORMAT = "A12" + DESCRIPTION = "Volume id." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = FILE_SPECIFICATION_NAME + COLUMN_NUMBER = 2 + DATA_TYPE = CHARACTER + START_BYTE = 17 + BYTES = 75 + FORMAT = "A75" + DESCRIPTION = "Provides the full name of a file, including a path name, + relative to a PDS volume. The path is followed by a valid file name." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INSTRUMENT_HOST_ID + COLUMN_NUMBER = 3 + DATA_TYPE = CHARACTER + START_BYTE = 95 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "ALWAYS LRO." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INSTRUMENT_ID + COLUMN_NUMBER = 4 + DATA_TYPE = CHARACTER + START_BYTE = 101 + BYTES = 4 + FORMAT = "A4" + DESCRIPTION = "Always LROC." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = ORIGINAL_PRODUCT_ID + COLUMN_NUMBER = 5 + DATA_TYPE = CHARACTER + START_BYTE = 108 + BYTES = 12 + FORMAT = "A12" + DESCRIPTION = "Filename of this image as received from the LRO MOC. For + NAC observations, the filename is either nacl00000000 or nacr00000000 + (NAC-LEFT or NAC-RIGHT respectively). For WAC observations, the filename is + wac00000000." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = PRODUCT_ID + COLUMN_NUMBER = 6 + DATA_TYPE = CHARACTER + START_BYTE = 123 + BYTES = 13 + FORMAT = "A13" + DESCRIPTION = "Unique identification associated with the product." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = PRODUCT_VERSION_ID + COLUMN_NUMBER = 7 + DATA_TYPE = CHARACTER + START_BYTE = 139 + BYTES = 12 + FORMAT = "A12" + DESCRIPTION = "The product version number of this product." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = TARGET_NAME + COLUMN_NUMBER = 8 + DATA_TYPE = CHARACTER + START_BYTE = 154 + BYTES = 5 + FORMAT = "A5" + DESCRIPTION = "Set to the target body: MOON for any nominal lunar + imaging, EARTH for any observations of the Earth, CAL calibration images, and + STAR for star calibration images." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = ORBIT_NUMBER + COLUMN_NUMBER = 9 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 161 + BYTES = 5 + FORMAT = "I5" + DESCRIPTION = "LRO orbit number when observation was acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SLEW_ANGLE + COLUMN_NUMBER = 10 + DATA_TYPE = ASCII_REAL + START_BYTE = 167 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "Angle of LRO off nadir when observation acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = MISSION_PHASE_NAME + COLUMN_NUMBER = 11 + DATA_TYPE = CHARACTER + START_BYTE = 177 + BYTES = 31 + FORMAT = "A31" + DESCRIPTION = "The mission phase at the time the image was acquired - + LAUNCH, EARLY CRUISE, MID CRUISE, LATE CRUISE, LUNAR ORBIT ACQUISITION, + COMMISSIONING, NOMINAL MISSION, SCIENCE MISSION EXTENDED SCIENCE MISSION & + SECOND EXTENDED SCIENCE MISSION." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = RATIONALE_DESC + COLUMN_NUMBER = 12 + DATA_TYPE = CHARACTER + START_BYTE = 211 + BYTES = 75 + FORMAT = "A75" + DESCRIPTION = "For NAC observations, set to one of the following: the + keywords recorded in the REACT ROI, the appropriate NAC campaign, or set to + the string TARGET OF OPPORTUNITY. For WAC observations, set to either the + appropriate campaign or GLOBAL_COVERAGE." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = DATA_QUALITY_ID + COLUMN_NUMBER = 13 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 288 + BYTES = 3 + FORMAT = "I3" + DESCRIPTION = "Set to an 8-bit value that encodes data quality + information; the numeric key identifies the quality of data." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_PREROLL_START_TIME + COLUMN_NUMBER = 14 + DATA_TYPE = CHARACTER + START_BYTE = 293 + BYTES = 24 + FORMAT = "A24" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "UTC time when image command begins." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = START_TIME + COLUMN_NUMBER = 15 + DATA_TYPE = CHARACTER + START_BYTE = 320 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when first image line of target is acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = STOP_TIME + COLUMN_NUMBER = 16 + DATA_TYPE = CHARACTER + START_BYTE = 347 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when last image line of target is acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_PARTITION + COLUMN_NUMBER = 17 + DATA_TYPE = CHARACTER + START_BYTE = 374 + BYTES = 2 + FORMAT = "A2" + DESCRIPTION = "Spacecraft clock partition." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_SPACECRAFT_CLOCK_PREROLL_COUNT + COLUMN_NUMBER = 18 + DATA_TYPE = CHARACTER + START_BYTE = 379 + BYTES = 15 + FORMAT = "A15" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "S/C clock count when the observation first line of the + preroll (1024 lines) is acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_START_COUNT + COLUMN_NUMBER = 19 + DATA_TYPE = CHARACTER + START_BYTE = 397 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "S/C clock count when first image line/frame of target is + acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_STOP_COUNT + COLUMN_NUMBER = 20 + DATA_TYPE = CHARACTER + START_BYTE = 416 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "S/C clock count when last image line/frame of target is + acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = START_SCLK_SECONDS + COLUMN_NUMBER = 21 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 434 + BYTES = 9 + FORMAT = "I9" + DESCRIPTION = "The spacecraft SCLK seconds value at the start of a NAC + or WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = START_SCLK_TICKS + COLUMN_NUMBER = 22 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 444 + BYTES = 7 + FORMAT = "I7" + DESCRIPTION = "The spacecraft SCLK ticks value at the start of a NAC or + WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = STOP_SCLK_SECONDS + COLUMN_NUMBER = 23 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 452 + BYTES = 9 + FORMAT = "I9" + DESCRIPTION = "The spacecraft SCLK seconds value at the end of a NAC or + WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = STOP_SCLK_TICKS + COLUMN_NUMBER = 24 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 462 + BYTES = 7 + FORMAT = "I7" + DESCRIPTION = "The spacecraft SCLK ticks value at the end of a NAC or + WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_LINE_EXPOSURE_DURATION + COLUMN_NUMBER = 25 + DATA_TYPE = ASCII_REAL + START_BYTE = 470 + BYTES = 11 + FORMAT = "F11.9" + NOT_APPLICABLE_CONSTANT = 9.999999999 + DESCRIPTION = "Indicates the elapsed time during the acquistion of one + line; can have values between 337.6 and 35,281.6 microseconds, in 128/15 + microsecond increments." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_EXPOSURE_DURATION + COLUMN_NUMBER = 26 + DATA_TYPE = ASCII_REAL + START_BYTE = 482 + BYTES = 7 + FORMAT = "F7.5" + NOT_APPLICABLE_CONSTANT = 9.99999 + DESCRIPTION = "Indicates the time elapsed during the acquisition of one + frame of data for the WAC." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_FRAME_ID + COLUMN_NUMBER = 27 + DATA_TYPE = CHARACTER + START_BYTE = 491 + BYTES = 5 + FORMAT = "A5" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "Denotes LEFT or RIGHT barrel (telescope) for NAC + observations." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_DAC_RESET + COLUMN_NUMBER = 28 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 498 + BYTES = 4 + FORMAT = "I4" + NOT_APPLICABLE_CONSTANT = 9999 + DESCRIPTION = "Records the commanded DAC reset level that coarsely sets + the DN zero level for a NAC image." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_CHANNEL_A_OFFSET + COLUMN_NUMBER = 29 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 503 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded NAC channel A offset that finely + sets the DN zero level." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_CHANNEL_B_OFFSET + COLUMN_NUMBER = 30 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 507 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded NAC channel B offset that finely + sets the DN zero level." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INSTRUMENT_MODE_CODE + COLUMN_NUMBER = 31 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 511 + BYTES = 3 + FORMAT = "I3" + DESCRIPTION = "The commanded 8-bit integer value indicating in what + mode the NAC or WAC operates during image acquisition." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_INSTRUMENT_MODE_ID + COLUMN_NUMBER = 32 + DATA_TYPE = CHARACTER + START_BYTE = 516 + BYTES = 5 + FORMAT = "A5" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "provides an instrument-dependent designation of WAC + operating mode: BW, COLOR, VIS, or UV." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BAND_CODE + COLUMN_NUMBER = 33 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 523 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "The commanded 8-bit integer value specifying which WAC + bands to acquire for each frame." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BACKGROUND_OFFSET + COLUMN_NUMBER = 34 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 527 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded background offset for WAC + observations." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_FILTER_NAME + COLUMN_NUMBER = 35 + DATA_TYPE = CHARACTER + START_BYTE = 532 + BYTES = 38 + FORMAT = "A38" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "Numerical designation of the WAC optical filters in + nanometers (415, 566, 604, 643, 689, 321, 360)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_NUMBER_OF_FRAMES + COLUMN_NUMBER = 36 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 572 + BYTES = 5 + FORMAT = "I5" + NOT_APPLICABLE_CONSTANT = 99999 + DESCRIPTION = "Records the commanded number of frames for a WAC + observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_INTERFRAME_TIME + COLUMN_NUMBER = 37 + DATA_TYPE = ASCII_REAL + START_BYTE = 578 + BYTES = 7 + FORMAT = "F7.2" + NOT_APPLICABLE_CONSTANT = 9999.99 + DESCRIPTION = "Set to the value of the interframe delay between WAC + framelets. Keyword can have values between 25/64 and 280/64 seconds, in 1/64 + seconds increments." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_INTERFRAME_CODE + COLUMN_NUMBER = 38 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 586 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded interframe gap code + (INTERFRAME_TIME) for a WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_MODE_POLAR + COLUMN_NUMBER = 39 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 590 + BYTES = 1 + FORMAT = "I1" + NOT_APPLICABLE_CONSTANT = 9 + DESCRIPTION = "Records the commanded mode for the POLAR flag on WAC + observation (0 = NOT ON and 1 = ON)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = COMPAND_SELECT_CODE + COLUMN_NUMBER = 40 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 592 + BYTES = 1 + FORMAT = "I1" + DESCRIPTION = "Records the commanded value designating which companding + table to utilize for WAC or NAC observations." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = MODE_COMPRESSION + COLUMN_NUMBER = 41 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 594 + BYTES = 1 + FORMAT = "I1" + DESCRIPTION = "Records the command flag controlling if compression is + enabled or disabled for a WAC or NAC observation (0=NO, 1=YES)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = MODE_TEST + COLUMN_NUMBER = 42 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 596 + BYTES = 1 + FORMAT = "I1" + DESCRIPTION = "Records the commanded flag controlling if a TEST image + is to be acquired (0=NO, 1=YES)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_SCS + COLUMN_NUMBER = 43 + DATA_TYPE = ASCII_REAL + START_BYTE = 598 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC SCS in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_FPA + COLUMN_NUMBER = 44 + DATA_TYPE = ASCII_REAL + START_BYTE = 607 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of NAC focal plane array in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_FPGA + COLUMN_NUMBER = 45 + DATA_TYPE = ASCII_REAL + START_BYTE = 616 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of NAC Field Programmable Gate Array in + degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_TELESCOPE + COLUMN_NUMBER = 46 + DATA_TYPE = ASCII_REAL + START_BYTE = 625 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of NAC Telescope in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BEGIN_TEMPERATURE_SCS + COLUMN_NUMBER = 47 + DATA_TYPE = ASCII_REAL + START_BYTE = 634 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC SCS at the beginning of a WAC + observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_MIDDLE_TEMPERATURE_SCS + COLUMN_NUMBER = 48 + DATA_TYPE = ASCII_REAL + START_BYTE = 643 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC Sequencer and Compression System at + the middle of a WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_END_TEMPERATURE_SCS + COLUMN_NUMBER = 49 + DATA_TYPE = ASCII_REAL + START_BYTE = 652 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC Sequencer and Compression System at + the end of a WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BEGIN_TEMPERATURE_FPA + COLUMN_NUMBER = 50 + DATA_TYPE = ASCII_REAL + START_BYTE = 661 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of WAC focal plane array at the beginning of + a WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_MIDDLE_TEMPERATURE_FPA + COLUMN_NUMBER = 51 + DATA_TYPE = ASCII_REAL + START_BYTE = 670 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of WAC focal plane array at the middle of a + WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_END_TEMPERATURE_FPA + COLUMN_NUMBER = 52 + DATA_TYPE = ASCII_REAL + START_BYTE = 679 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of WAC focal plane array at the end of a WAC + observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = IMAGE_LINES + COLUMN_NUMBER = 53 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 688 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Number of image lines." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LINE_SAMPLES + COLUMN_NUMBER = 54 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 695 + BYTES = 4 + FORMAT = "I4" + DESCRIPTION = "Number of image samples." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SAMPLE_BITS + COLUMN_NUMBER = 55 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 700 + BYTES = 2 + FORMAT = "I2" + DESCRIPTION = "Number of bits per pixel." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SCALED_PIXEL_WIDTH + COLUMN_NUMBER = 56 + DATA_TYPE = ASCII_REAL + START_BYTE = 703 + BYTES = 7 + FORMAT = "F7.2" + NOT_APPLICABLE_CONSTANT = 0000.00 + DESCRIPTION = "The cross-scan image resolution in meters/pixel at the + center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SCALED_PIXEL_HEIGHT + COLUMN_NUMBER = 57 + DATA_TYPE = ASCII_REAL + START_BYTE = 711 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 000.00 + DESCRIPTION = "The down-scan image resolution in meters/pixel at the + center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = RESOLUTION + COLUMN_NUMBER = 58 + DATA_TYPE = ASCII_REAL + START_BYTE = 718 + BYTES = 7 + FORMAT = "F7.3" + NOT_APPLICABLE_CONSTANT = 0000.00 + DESCRIPTION = "The calculated pixel resolution at the center of a NAC + or WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = EMISSION_ANGLE + COLUMN_NUMBER = 59 + DATA_TYPE = ASCII_REAL + START_BYTE = 726 + BYTES = 5 + FORMAT = "F5.2" + NOT_APPLICABLE_CONSTANT = 99.99 + DESCRIPTION = "The emission angle at the center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INCIDENCE_ANGLE + COLUMN_NUMBER = 60 + DATA_TYPE = ASCII_REAL + START_BYTE = 732 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The incidence angle at the center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = PHASE_ANGLE + COLUMN_NUMBER = 61 + DATA_TYPE = ASCII_REAL + START_BYTE = 739 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The phase angle at the center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NORTH_AZIMUTH + COLUMN_NUMBER = 62 + DATA_TYPE = ASCII_REAL + START_BYTE = 746 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The angle in degrees clockwise from the reference axis + of the image (a line from the center to the right edge of image) to the + direction to the north pole of target body This angle is relative to the RDR + products." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SOLAR_AZIMUTH + COLUMN_NUMBER = 63 + DATA_TYPE = ASCII_REAL + START_BYTE = 753 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The angle in degrees clockwise from the reference axis + of the image (a line from the center to the right edge of image) to the + direction of the subsolar point on target body. This angle is relative to the + RDR products." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SOLAR_LATITUDE + COLUMN_NUMBER = 64 + DATA_TYPE = ASCII_REAL + START_BYTE = 760 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Latitude of subsolar point in degrees." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SOLAR_LONGITUDE + COLUMN_NUMBER = 65 + DATA_TYPE = ASCII_REAL + START_BYTE = 767 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The planetocentric longitude of subsolar point in + degrees." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LATITUDE + COLUMN_NUMBER = 66 + DATA_TYPE = ASCII_REAL + START_BYTE = 774 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Planetocentric latitude of subspacecraft point in + degrees." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LONGITUDE + COLUMN_NUMBER = 67 + DATA_TYPE = ASCII_REAL + START_BYTE = 781 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Planetocentric longitude of spacecraft-to-target-center + surface intercept vector." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SOLAR_DISTANCE + COLUMN_NUMBER = 68 + DATA_TYPE = ASCII_REAL + START_BYTE = 788 + BYTES = 11 + FORMAT = "F11.1" + NOT_APPLICABLE_CONSTANT = 999999999.9 + DESCRIPTION = "distance from the center of the image on the target body + to the center of the sun in km." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SOLAR_LONGITUDE + COLUMN_NUMBER = 69 + DATA_TYPE = ASCII_REAL + START_BYTE = 800 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Solar longitude ('L sub s') at time of image in degrees + provides the value of the angle between the body_Sun line at the time of + interest and the body_Sun line at the vernal equinox." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = CENTER_LATITUDE + COLUMN_NUMBER = 70 + DATA_TYPE = ASCII_REAL + START_BYTE = 807 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The planetocentric latitude coordinate at the center of + the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = CENTER_LONGITUDE + COLUMN_NUMBER = 71 + DATA_TYPE = ASCII_REAL + START_BYTE = 814 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The planetocentric longitude coordinate at the center of + the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_RIGHT_LATITUDE + COLUMN_NUMBER = 72 + DATA_TYPE = ASCII_REAL + START_BYTE = 821 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper right latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_RIGHT_LONGITUDE + COLUMN_NUMBER = 73 + DATA_TYPE = ASCII_REAL + START_BYTE = 828 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper right longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_RIGHT_LATITUDE + COLUMN_NUMBER = 74 + DATA_TYPE = ASCII_REAL + START_BYTE = 835 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Lower right latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_RIGHT_LONGITUDE + COLUMN_NUMBER = 75 + DATA_TYPE = ASCII_REAL + START_BYTE = 842 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "lower right longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_LEFT_LATITUDE + COLUMN_NUMBER = 76 + DATA_TYPE = ASCII_REAL + START_BYTE = 849 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "lower left latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_LEFT_LONGITUDE + COLUMN_NUMBER = 77 + DATA_TYPE = ASCII_REAL + START_BYTE = 856 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "lower left longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_LEFT_LATITUDE + COLUMN_NUMBER = 78 + DATA_TYPE = ASCII_REAL + START_BYTE = 863 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper left latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_LEFT_LONGITUDE + COLUMN_NUMBER = 79 + DATA_TYPE = ASCII_REAL + START_BYTE = 870 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper left longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_ALTITUDE + COLUMN_NUMBER = 80 + DATA_TYPE = ASCII_REAL + START_BYTE = 877 + BYTES = 7 + FORMAT = "F7.2" + DESCRIPTION = "distance from s/c to closest point on surface in km." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = TARGET_CENTER_DISTANCE + COLUMN_NUMBER = 81 + DATA_TYPE = ASCII_REAL + START_BYTE = 885 + BYTES = 7 + FORMAT = "F7.2" + NOT_APPLICABLE_CONSTANT = 9999.99 + DESCRIPTION = "distance from s/c to target body center in km." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = ORBIT_NODE + COLUMN_NUMBER = 82 + DATA_TYPE = CHARACTER + START_BYTE = 894 + BYTES = 1 + FORMAT = "A1" + DESCRIPTION = "A character denoting the orbit node for LRO: A for + ascending node portion of the orbit; D for descending node portion of the + orbit" + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LRO_FLIGHT_DIRECTION + COLUMN_NUMBER = 83 + DATA_TYPE = CHARACTER + START_BYTE = 898 + BYTES = 2 + FORMAT = "A2" + DESCRIPTION = "Denotes the LRO spacecraft X-axis relative to the + velocity vector: +X (LRO positive X axis aligned with velocity vector) or -X + (LRO negative X axis aligned with velocity vector)." + END_OBJECT = COLUMN + +END_OBJECT = INDEX_TABLE +END diff --git a/inputs_mini/ctx/cumindex.lbl b/inputs_mini/ctx/cumindex.lbl new file mode 100644 index 0000000..b37c3c5 --- /dev/null +++ b/inputs_mini/ctx/cumindex.lbl @@ -0,0 +1,601 @@ +PDS_VERSION_ID = PDS3 +RECORD_TYPE = FIXED_LENGTH +RECORD_BYTES = 555 +FILE_RECORDS = 53 +^TABLE = "CUMINDEX.TAB" +DATA_SET_ID = "MRO-M-CTX-2-EDR-L0-V1.0" +SPACECRAFT_NAME = "MARS RECONNAISSANCE ORBITER" +INSTRUMENT_NAME = "CONTEXT CAMERA" +TARGET_NAME = MARS +MISSION_PHASE_NAME = "N/A" +PRODUCT_CREATION_TIME = 2007-05-23T19:00:00 + +OBJECT = TABLE + INTERCHANGE_FORMAT = ASCII + ROWS = 53 + COLUMNS = 51 + ROW_BYTES = 555 + INDEX_TYPE = CUMULATIVE + +OBJECT = COLUMN +NAME = VOLUME_ID +COLUMN_NUMBER = 1 +DATA_TYPE = CHARACTER +START_BYTE = 2 +BYTES = 9 +FORMAT = "A9" +DESCRIPTION = "volume id" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = FILE_SPECIFICATION_NAME +COLUMN_NUMBER = 2 +DATA_TYPE = CHARACTER +START_BYTE = 14 +BYTES = 35 +FORMAT = "A35" +DESCRIPTION = "file name" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = ORIGINAL_PRODUCT_ID +COLUMN_NUMBER = 3 +DATA_TYPE = CHARACTER +START_BYTE = 52 +BYTES = 16 +FORMAT = "A16" +DESCRIPTION = "original product id" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = PRODUCT_ID +COLUMN_NUMBER = 4 +DATA_TYPE = CHARACTER +START_BYTE = 71 +BYTES = 26 +FORMAT = "A26" +DESCRIPTION = "product id" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = IMAGE_TIME +COLUMN_NUMBER = 5 +DATA_TYPE = CHARACTER +START_BYTE = 100 +BYTES = 23 +FORMAT = "A23" +DESCRIPTION = "SCET time at start of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = INSTRUMENT_ID +COLUMN_NUMBER = 6 +DATA_TYPE = CHARACTER +START_BYTE = 126 +BYTES = 6 +FORMAT = "A6" +DESCRIPTION = "instrument id (abbreviated name or acronym)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = INSTRUMENT_MODE_ID +COLUMN_NUMBER = 7 +DATA_TYPE = CHARACTER +START_BYTE = 135 +BYTES = 5 +FORMAT = "A5" +DESCRIPTION = "command mode (ITL or NIFL) in which this image +was acquired" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LINE_SAMPLES +COLUMN_NUMBER = 8 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 142 +BYTES = 4 +FORMAT = "I4" +DESCRIPTION = "image width" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LINES +COLUMN_NUMBER = 9 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 147 +BYTES = 6 +FORMAT = "I6" +DESCRIPTION = "image height" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SPATIAL_SUMMING +COLUMN_NUMBER = 10 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 154 +BYTES = 2 +FORMAT = "I2" +DESCRIPTION = "spatial summing" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SCALED_PIXEL_WIDTH +COLUMN_NUMBER = 11 +DATA_TYPE = ASCII_REAL +START_BYTE = 157 +BYTES = 8 +FORMAT = "F8.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "image resolution in meters/pixel at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = PIXEL_ASPECT_RATIO +COLUMN_NUMBER = 12 +DATA_TYPE = ASCII_REAL +START_BYTE = 166 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "pixel aspect ratio (pixel height/pixel width) +at center of image. The image's center pixel is projected on the +ground and its linear extents are ratioed, so any effects of +emission angle and line time are modelled. To recover an image +with 'square' pixels, the image should be resampled to a height +of aspect_ratio * input height." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = EMISSION_ANGLE +COLUMN_NUMBER = 13 +DATA_TYPE = ASCII_REAL +START_BYTE = 173 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "emission angle at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = INCIDENCE_ANGLE +COLUMN_NUMBER = 14 +DATA_TYPE = ASCII_REAL +START_BYTE = 180 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "incidence angle at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = PHASE_ANGLE +COLUMN_NUMBER = 15 +DATA_TYPE = ASCII_REAL +START_BYTE = 187 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "phase angle at center of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = CENTER_LONGITUDE +COLUMN_NUMBER = 16 +DATA_TYPE = ASCII_REAL +START_BYTE = 194 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "center longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = CENTER_LATITUDE +COLUMN_NUMBER = 17 +DATA_TYPE = ASCII_REAL +START_BYTE = 201 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "center areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_LEFT_LONGITUDE +COLUMN_NUMBER = 18 +DATA_TYPE = ASCII_REAL +START_BYTE = 208 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper left longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_LEFT_LATITUDE +COLUMN_NUMBER = 19 +DATA_TYPE = ASCII_REAL +START_BYTE = 215 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper left areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_RIGHT_LONGITUDE +COLUMN_NUMBER = 20 +DATA_TYPE = ASCII_REAL +START_BYTE = 222 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper right longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = UPPER_RIGHT_LATITUDE +COLUMN_NUMBER = 21 +DATA_TYPE = ASCII_REAL +START_BYTE = 229 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "upper right areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_LEFT_LONGITUDE +COLUMN_NUMBER = 22 +DATA_TYPE = ASCII_REAL +START_BYTE = 236 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower left longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_LEFT_LATITUDE +COLUMN_NUMBER = 23 +DATA_TYPE = ASCII_REAL +START_BYTE = 243 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower left areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_RIGHT_LONGITUDE +COLUMN_NUMBER = 24 +DATA_TYPE = ASCII_REAL +START_BYTE = 250 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower right longitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOWER_RIGHT_LATITUDE +COLUMN_NUMBER = 25 +DATA_TYPE = ASCII_REAL +START_BYTE = 257 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 999.9 +DESCRIPTION = "lower right areographic latitude" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = MISSION_PHASE_NAME +COLUMN_NUMBER = 26 +DATA_TYPE = CHARACTER +START_BYTE = 265 +BYTES = 10 +FORMAT = "A10" +DESCRIPTION = "mission phase name" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = TARGET_NAME +COLUMN_NUMBER = 27 +DATA_TYPE = CHARACTER +START_BYTE = 278 +BYTES = 6 +FORMAT = "A6" +DESCRIPTION = "target name (e.g., MARS, PHOBOS, STAR, SPACE)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SPACECRAFT_CLOCK_START_COUNT +COLUMN_NUMBER = 28 +DATA_TYPE = CHARACTER +START_BYTE = 287 +BYTES = 15 +FORMAT = "A15" +DESCRIPTION = "spacecraft clock value at start of image" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = FOCAL_PLANE_TEMPERATURE +COLUMN_NUMBER = 29 +DATA_TYPE = ASCII_REAL +START_BYTE = 304 +BYTES = 5 +FORMAT = "F5.1" +DESCRIPTION = "focal plane temp in Kelvins" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LINE_EXPOSURE_DURATION +COLUMN_NUMBER = 30 +DATA_TYPE = ASCII_REAL +START_BYTE = 310 +BYTES = 8 +FORMAT = "F8.4" +DESCRIPTION = "line integration time in milliseconds" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = OFFSET_MODE_ID +COLUMN_NUMBER = 31 +DATA_TYPE = CHARACTER +START_BYTE = 320 +BYTES = 11 +FORMAT = "A11" +DESCRIPTION = "offset mode (see documentation)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SAMPLE_FIRST_PIXEL +COLUMN_NUMBER = 32 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 333 +BYTES = 4 +FORMAT = "I4" +DESCRIPTION = "first pixel stored from detector, zero-based" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SCALED_IMAGE_WIDTH +COLUMN_NUMBER = 33 +DATA_TYPE = ASCII_REAL +START_BYTE = 338 +BYTES = 7 +FORMAT = "F7.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "image width from left to right image edge in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SCALED_IMAGE_HEIGHT +COLUMN_NUMBER = 34 +DATA_TYPE = ASCII_REAL +START_BYTE = 346 +BYTES = 8 +FORMAT = "F8.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "image height from first line to last line in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SPACECRAFT_ALTITUDE +COLUMN_NUMBER = 35 +DATA_TYPE = ASCII_REAL +START_BYTE = 355 +BYTES = 7 +FORMAT = "F7.2" +DESCRIPTION = "distance from s/c to closest point on surface in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = TARGET_CENTER_DISTANCE +COLUMN_NUMBER = 36 +DATA_TYPE = ASCII_REAL +START_BYTE = 363 +BYTES = 7 +FORMAT = "F7.2" +DESCRIPTION = "distance from s/c to target body center in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SLANT_DISTANCE +COLUMN_NUMBER = 37 +DATA_TYPE = ASCII_REAL +START_BYTE = 371 +BYTES = 7 +FORMAT = "F7.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "range from s/c to intersection of view vector with +target body in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = USAGE_NOTE +COLUMN_NUMBER = 38 +DATA_TYPE = CHARACTER +START_BYTE = 380 +BYTES = 1 +FORMAT = "A1" +DESCRIPTION = "Because of the CTX's line-scan nature, depending on the +orientation and sense of rotation of the spacecraft, CTX images can +either be normal or flipped left-for-right (independent of whether the +image is north up or south up.) This flag will be 'F' if the image +should be flipped left-to-right, and 'N' if it is already in normal +form." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = NORTH_AZIMUTH +COLUMN_NUMBER = 39 +DATA_TYPE = ASCII_REAL +START_BYTE = 383 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "The angle in degrees clockwise from the reference axis +of the image (a line from the center to the right edge of the image) +to the direction to the north pole of the target body. If the +USAGE_NOTE described previously is 'F', the image should be flipped +prior to applying this angle." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SOLAR_AZIMUTH +COLUMN_NUMBER = 40 +DATA_TYPE = ASCII_REAL +START_BYTE = 390 +BYTES = 6 +FORMAT = "F6.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "The angle in degrees clockwise from the reference axis +of the image (a line from the center to the right edge of the image) +to the direction to the subsolar point on the target body. If the +USAGE_NOTE described previously is 'F', the image should be flipped +prior to applying this angle." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SOLAR_LONGITUDE +COLUMN_NUMBER = 41 +DATA_TYPE = ASCII_REAL +START_BYTE = 397 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "west longitude of subsolar point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SOLAR_LATITUDE +COLUMN_NUMBER = 42 +DATA_TYPE = ASCII_REAL +START_BYTE = 404 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "planetographic latitude of subsolar point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SPACECRAFT_LONGITUDE +COLUMN_NUMBER = 43 +DATA_TYPE = ASCII_REAL +START_BYTE = 411 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "west longitude of subspacecraft point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SUB_SPACECRAFT_LATITUDE +COLUMN_NUMBER = 44 +DATA_TYPE = ASCII_REAL +START_BYTE = 418 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "planetographic latitude of subspacecraft point in degrees" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SOLAR_DISTANCE +COLUMN_NUMBER = 45 +DATA_TYPE = ASCII_REAL +START_BYTE = 425 +BYTES = 11 +FORMAT = "F11.1" +DESCRIPTION = "distance from the center of the image on the target body +to the center of the sun in km" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = SOLAR_LONGITUDE +COLUMN_NUMBER = 46 +DATA_TYPE = ASCII_REAL +START_BYTE = 437 +BYTES = 6 +FORMAT = "F6.2" +DESCRIPTION = "solar longitude ('L sub s') at time of image in degrees +from martian vernal equinox, as computed by the method in 'Accurate +analytic representations of solar time and seasons on Mars with +applications to the Pathfinder/Surveyor missions', Michael Allison, +Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = LOCAL_TIME +COLUMN_NUMBER = 47 +DATA_TYPE = ASCII_REAL +START_BYTE = 444 +BYTES = 5 +FORMAT = "F5.2" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = "Local True Solar Time in decimal hours from midnight at +the center of the image, as computed by the method in 'Accurate +analytic representations of solar time and seasons on Mars with +applications to the Pathfinder/Surveyor missions', Michael Allison, +Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997). +An 'hour' in this context is an angular measure of 15 degrees +of solar motion." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = IMAGE_SKEW_ANGLE +COLUMN_NUMBER = 48 +DATA_TYPE = ASCII_REAL +START_BYTE = 450 +BYTES = 5 +FORMAT = "F5.1" +NOT_APPLICABLE_CONSTANT = 0.0 +DESCRIPTION = +"The image skew angle is the absolute value, in degrees, of the angle +between the left edge (a line between the lower left and upper left +corners) and the bottom edge (a line between the lower left and lower +right corners) of the image, where the edges are projected on the +target body. For images whose footprints are exactly rectangular, +this angle will be 90 degrees. Departures from 90 degrees indicate a +non-rectangular image footprint, caused by slews of the spacecraft +during imaging outside the orbit plane or off-nadir pointing, or +both." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = RATIONALE_DESC +COLUMN_NUMBER = 49 +DATA_TYPE = CHARACTER +START_BYTE = 457 +BYTES = 80 +FORMAT = "A80" +DESCRIPTION = "A text description of the scientific purpose for the +acquisition of this image. For routine mapping operations, this will +most likely be the goal of the image as targeted (which may not be met +if the image missed its target significantly, the atmosphere was +cloudy, etc.)" +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = DATA_QUALITY_DESC +COLUMN_NUMBER = 50 +DATA_TYPE = CHARACTER +START_BYTE = 540 +BYTES = 6 +FORMAT = "A6" +DESCRIPTION = "'OK' if all fragments of the image are +received without detected checksum or sequence errors, and 'ERROR' +otherwise." +END_OBJECT = COLUMN + +OBJECT = COLUMN +NAME = ORBIT_NUMBER +COLUMN_NUMBER = 51 +DATA_TYPE = ASCII_INTEGER +START_BYTE = 548 +BYTES = 6 +FORMAT = "I6" +DESCRIPTION = "orbit number as defined by the MRO Project" +END_OBJECT = COLUMN + +END_OBJECT = TABLE + +END + diff --git a/pdsc/table.py b/pdsc/table.py index 174a5ca..e1be5bc 100644 --- a/pdsc/table.py +++ b/pdsc/table.py @@ -109,7 +109,7 @@ def moc_observation_id(s): @register_determiner('lroc_cdr') def lroc_cdr_determiner(label_contents): """ - Determines whether a cumulative index file is for HiRISE EDR products + Determines whether a cumulative index file is for LROC CDR products :param label_contents: PDS cumulative index LBL file contents :return: ``True`` iff this label file is for LROC CDR products """ From 961204ae6e5ca3ac604fbbfc4e59a3137da76a01 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 21 Feb 2022 15:12:04 -0800 Subject: [PATCH 04/57] mini tables --- .gitignore | 2 + README.md | 12 +- inputs_mini/ctx/cumindex.tab | 53 ++ inputs_mini/hirise/RDRCUMINDEX.LBL | 492 +++++++++++++++ inputs_mini/hirise/RDRCUMINDEX.TAB | 9 + inputs_mini/lroc/CUMINDEX.LBL | 980 +++++++++++++++++++++++++++++ inputs_mini/lroc/CUMINDEX.TAB | 12 + 7 files changed, 1557 insertions(+), 3 deletions(-) create mode 100644 inputs_mini/ctx/cumindex.tab create mode 100644 inputs_mini/hirise/RDRCUMINDEX.LBL create mode 100644 inputs_mini/hirise/RDRCUMINDEX.TAB create mode 100644 inputs_mini/lroc/CUMINDEX.LBL create mode 100644 inputs_mini/lroc/CUMINDEX.TAB diff --git a/.gitignore b/.gitignore index 5bf2fe3..ac5d13d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +inputs/*/*.TAB +inputs/*/*.tab *.pyc *.sw* build diff --git a/README.md b/README.md index a2a790a..e1bfc32 100644 --- a/README.md +++ b/README.md @@ -47,17 +47,23 @@ wget -O RDRCUMINDEX.TAB https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX To ingest indices: ```bash -pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputshirise/ +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise/ +``` + +Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly): + +``` +pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise_mini/ ``` # CTX example: ``` -pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputsctx/ +pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputs_ctx/ ``` Or, a mini example (I took a subset of rows from the table file and updated the index accordingly): ``` -pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputsctxmini/ +pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputs_ctx_mini/ ``` diff --git a/inputs_mini/ctx/cumindex.tab b/inputs_mini/ctx/cumindex.tab new file mode 100644 index 0000000..5a69835 --- /dev/null +++ b/inputs_mini/ctx/cumindex.tab @@ -0,0 +1,53 @@ +"MROX_0001","DATA/CRU_000001_9999_XN_99N999W.IMG","4A_04_0001000400","CRU_000001_9999_XN_99N999W","2005-08-30T15:40:21.549","CTX ","NIFL ",5056, 1024, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","SPACE ","0809883639:076 ",283.3, 10.000,"194/53/53 ", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,278.89,10.16, 0.0,"Instrument checkout image of space ","OK ", -4242 +"MROX_0001","DATA/CRU_000002_9999_XN_99N999W.IMG","4A_04_0001000500","CRU_000002_9999_XN_99N999W","2005-09-08T15:59:45.313","CTX ","NIFL ",5056, 15360, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810662403:012 ",296.0, 5.710,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.60, 0.0,"Calibration image of the Moon ","OK ", -4126 +"MROX_0001","DATA/CRU_000003_9999_XN_99N999W.IMG","4A_04_0001000600","CRU_000003_9999_XN_99N999W","2005-09-08T16:03:37.927","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810662635:169 ",296.6, 22.900,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.66, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4126 +"MROX_0001","DATA/CRU_000004_9999_XN_99N999W.IMG","4A_04_0001000700","CRU_000004_9999_XN_99N999W","2005-09-08T16:08:23.841","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810662921:147 ",296.8, 22.900,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.74, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4126 +"MROX_0001","DATA/CRU_000005_9999_XN_99N999W.IMG","4A_04_0001000800","CRU_000005_9999_XN_99N999W","2005-09-08T16:11:18.649","CTX ","NIFL ",5056, 21504, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810663096:098 ",297.1, 5.710,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.79, 0.0,"Calibration image of the Moon ","OK ", -4126 +"MROX_0001","DATA/CRU_000006_9999_XN_99N999W.IMG","4A_04_0001000900","CRU_000006_9999_XN_99N999W","2005-09-08T19:37:45.278","CTX ","NIFL ",5056, 15360, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810675483:003 ",299.4, 5.710,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.13, 0.0,"Calibration image of the Moon ","OK ", -4124 +"MROX_0001","DATA/CRU_000007_9999_XN_99N999W.IMG","4A_04_0001000A00","CRU_000007_9999_XN_99N999W","2005-09-08T19:41:37.892","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810675715:160 ",299.5, 22.900,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.20, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4124 +"MROX_0001","DATA/CRU_000008_9999_XN_99N999W.IMG","4A_04_0001000B00","CRU_000008_9999_XN_99N999W","2005-09-08T19:46:23.904","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810676001:163 ",299.8, 22.900,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.27, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4124 +"MROX_0001","DATA/CRU_000009_9999_XN_99N999W.IMG","4A_04_0001000C00","CRU_000009_9999_XN_99N999W","2005-09-08T19:49:18.712","CTX ","NIFL ",5056, 21504, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810676176:114 ",299.8, 5.710,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.32, 0.0,"Calibration image of the Moon ","OK ", -4124 +"MROX_0001","DATA/CRU_000010_9999_XN_99N999W.IMG","4A_04_0001000D00","CRU_000010_9999_XN_99N999W","2005-09-08T23:15:45.239","CTX ","NIFL ",5056, 15360, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810688562:249 ",300.1, 5.710,"197/228/222", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.66,11.67, 0.0,"Calibration image of the Moon ","OK ", -4122 +"MROX_0001","DATA/CRU_000011_9999_XN_99N999W.IMG","4A_04_0001000E00","CRU_000011_9999_XN_99N999W","2005-09-08T23:19:37.853","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810688795:150 ",300.3, 22.900,"197/228/222", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.66,11.73, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4122 +"MROX_0001","DATA/CRU_000012_9999_XN_99N999W.IMG","4A_04_0001000F00","CRU_000012_9999_XN_99N999W","2005-12-14T20:06:47.502","CTX ","NIFL ",5056, 10240, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819058025:028 ",289.9, 22.900,"195/237/235", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.51,17.96, 0.0,"Calibration image of the Southern Cross (constellation Crux) ","OK ", -2879 +"MROX_0001","DATA/CRU_000013_9999_XN_99N999W.IMG","4A_04_0001001000","CRU_000013_9999_XN_99N999W","2005-12-14T20:22:09.389","CTX ","NIFL ",5056, 19695, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819058946:255 ",290.6, 11.510,"195/237/235", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.51,18.21, 0.0,"Calibration image of the Southern Cross (constellation Crux) ","ERROR ", -2879 +"MROX_0001","DATA/CRU_000014_9999_XN_99N999W.IMG","4A_04_0001001100","CRU_000014_9999_XN_99N999W","2005-12-14T23:09:03.379","CTX ","NIFL ",5056, 14336, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819068960:253 ",290.4, 45.870,"196/188/186", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.57,20.91, 0.0,"Calibration image of the Jewel Box (open cluster NGC 4755) ","OK ", -2878 +"MROX_0001","DATA/CRU_000015_9999_XN_99N999W.IMG","4A_04_0001001200","CRU_000015_9999_XN_99N999W","2005-12-15T04:10:15.483","CTX ","NIFL ",5056, 28672, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819087033:023 ",290.5, 22.900,"196/188/186", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.69, 1.80, 0.0,"Calibration image of the Jewel Box (open cluster NGC 4755) ","OK ", -2875 +"MROX_0002","DATA/MOI_000009_0186_XI_18S051W.IMG","4A_04_0001000300","MOI_000009_0186_XI_18S051W","2006-03-24T04:28:07.724","CTX ","ITL ",5056, 52224, 1, 76.78, 0.11, 0.18, 71.52, 71.59, 51.15,-18.70, 46.52,-15.93, 53.84,-14.76, 49.01,-22.82, 55.26,-21.92,"POSTMOI ","MARS ","0827641706:101 ",281.9, 7.000,"194/215/215", 0, 385.12, 430.54,3838.91,7233.04,3838.92,"N", 80.90,150.54,345.64, 12.20, 51.15,-18.80,242892092.9, 29.39, 7.60,101.7,"Post-MOI image of plain southwest of Eos Chasma ","OK ", 9 +"MROX_0002","DATA/MOI_000009_0438_XN_43S057W.IMG","4A_04_0001000400","MOI_000009_0438_XN_43S057W","2006-03-24T04:41:07.728","CTX ","NIFL ",5056, 52224, 1, 37.21, 0.83, 0.13, 83.06, 83.12, 57.23,-44.16, 52.02,-32.81, 57.16,-32.20, 59.17,-59.38, 63.11,-59.08,"POSTMOI ","MARS ","0827642486:102 ",282.8, 14.000,"194/215/215", 0, 186.45, 1604.54,1865.17,5251.69,1865.17,"N", 82.20,147.80,349.55, 12.20, 57.23,-44.21,242894206.2, 29.39, 7.40, 96.4,"Post-MOI image of Bosporos and Ogygis Rupes ","OK ", 9 +"MROX_0003","DATA/T01_000801_1353_XN_44S195W.IMG","4A_04_1000000100","T01_000801_1353_XN_44S195W","2006-09-27T21:58:33.012","CTX ","NIFL ",5056, 5120, 1, 5.01, 1.21, 0.08, 84.00, 83.93,195.47,-44.73,195.72,-45.01,195.13,-44.96,195.81,-44.49,195.22,-44.45,"TRANSITION","MARS ","0843861531:210 ",282.8, 1.877,"194/200/201", 0, 25.06, 31.00, 250.93,3637.29, 250.93,"N",276.59,228.02,249.82, 23.36,195.47,-44.72,242892520.7,112.76,15.63, 90.1,"South mid-latitude crater ","OK ", 801 +"MROX_0003","DATA/T01_000801_1867_XN_06N202W.IMG","4A_04_1000000200","T01_000801_1867_XN_06N202W","2006-09-27T22:14:19.059","CTX ","NIFL ",5056, 9216, 1, 5.41, 1.12, 0.08, 52.17, 52.13,202.08, 6.71,202.25, 6.22,201.79, 6.27,202.36, 7.15,201.90, 7.21,"TRANSITION","MARS ","0843862477:222 ",283.3, 1.877,"194/200/201", 0, 27.10, 55.64, 270.50,3666.42, 270.50,"N",276.91,211.36,253.67, 23.36,202.08, 6.72,242889375.7,112.76,15.45, 90.1,"Depressions and flows in south Cerberus ","OK ", 801 +"MROX_0003","DATA/T01_000801_2584_XN_78N219W.IMG","4A_04_1000000300","T01_000801_2584_XN_78N219W","2006-09-27T22:37:04.430","CTX ","NIFL ",2528, 4096, 1, 6.28, 0.92, 0.09, 58.21, 58.26,219.61, 78.42,220.01, 78.19,218.74, 78.26,220.50, 78.58,219.18, 78.65,"TRANSITION","MARS ","0843863843:061 ",284.1, 1.877,"194/200/201",1280, 15.84, 23.77, 315.67,3692.68, 315.67,"N",283.45,147.09,259.19, 23.35,219.62, 78.43,242887623.3,112.77,14.65, 90.0,"North polar dunes and outlier ","OK ", 801 +"MROX_0003","DATA/T01_000802_1412_XN_38S223W.IMG","4A_04_1000000400","T01_000802_1412_XN_38S223W","2006-09-27T23:52:30.465","CTX ","NIFL ",5056, 5120, 1, 5.03, 1.21, 0.08, 79.91, 79.84,223.62,-38.88,223.86,-39.17,223.31,-39.12,223.93,-38.65,223.39,-38.60,"TRANSITION","MARS ","0843868369:070 ",286.5, 1.877,"195/194/194", 0, 25.19, 31.04, 251.99,3640.37, 251.99,"N",276.63,227.75,277.55, 23.35,223.62,-38.88,242881977.6,112.79,15.61, 90.1,"South mid-latitude crater ","OK ", 802 +"MROX_0003","DATA/T01_000802_2102_XN_30N232W.IMG","4A_04_1000000500","T01_000802_2102_XN_30N232W","2006-09-28T00:13:51.730","CTX ","NIFL ",5056, 5120, 1, 5.73, 1.04, 0.08, 45.26, 45.25,232.32, 30.27,232.56, 29.98,232.01, 30.04,232.63, 30.49,232.07, 30.55,"TRANSITION","MARS ","0843869650:138 ",286.5, 1.877,"195/194/194", 0, 28.69, 30.52, 286.86,3678.02, 286.86,"N",276.78,190.62,282.74, 23.35,232.32, 30.27,242878266.2,112.80,15.37, 90.1,"Granicus Valles valley ","OK ", 802 +"MROX_0003","DATA/T01_000802_2747_XN_85N022W.IMG","4A_04_1000000600","T01_000802_2747_XN_85N022W","2006-09-28T00:34:04.293","CTX ","NIFL ",5056, 5120, 1, 6.27, 0.93, 0.08, 67.38, 67.43, 22.70, 85.36, 18.20, 85.41, 23.80, 85.72, 21.75, 85.01, 27.07, 85.29,"TRANSITION","MARS ","0843870863:026 ",286.8, 1.877,"195/194/194", 0, 31.37, 29.71, 315.04,3691.37, 315.04,"N", 56.56,139.56,287.66, 23.35, 22.74, 85.36,242877526.0,112.81, 5.68, 90.0,"Chasma Boreale scarp and dunes ","OK ", 802 +"MROX_0003","DATA/T01_000803_1393_XN_40S250W.IMG","4A_04_1000000700","T01_000803_1393_XN_40S250W","2006-09-28T01:43:57.906","CTX ","NIFL ",5056, 11264, 1, 5.02, 1.21, 0.08, 81.23, 81.16,250.57,-40.73,250.76,-41.33,250.20,-41.28,250.93,-40.18,250.38,-40.13,"TRANSITION","MARS ","0843875056:183 ",287.9, 1.877,"195/217/216", 0, 25.15, 68.27, 251.64,3639.39, 251.64,"N",276.70,227.90,304.69, 23.34,250.57,-40.72,242871960.9,112.83,15.62, 90.1,"Reull Vallis landforms ","OK ", 803 +"MROX_0003","DATA/T01_000803_1580_XN_22S253W.IMG","4A_04_1000000800","T01_000803_1580_XN_22S253W","2006-09-28T01:49:43.125","CTX ","NIFL ",5056, 11264, 1, 5.11, 1.19, 0.08, 68.49, 68.43,253.14,-22.02,253.30,-22.62,252.84,-22.57,253.45,-21.47,252.98,-21.42,"TRANSITION","MARS ","0843875401:239 ",287.9, 1.877,"195/217/216", 0, 25.60, 68.44, 255.78,3649.20, 255.78,"N",276.84,224.95,306.09, 23.34,253.14,-22.01,242870717.2,112.83,15.54, 90.2,"Tyrrhena Patera ","OK ", 803 +"MROX_0003","DATA/T01_000803_1903_XN_10N257W.IMG","4A_04_1000000900","T01_000803_1903_XN_10N257W","2006-09-28T01:59:44.156","CTX ","NIFL ",5056, 8192, 1, 5.43, 1.11, 0.08, 50.62, 50.57,257.08, 10.35,257.26, 9.91,256.80, 9.97,257.36, 10.74,256.90, 10.80,"TRANSITION","MARS ","0843876002:247 ",287.9, 1.877,"195/217/216", 0, 27.21, 49.42, 271.62,3667.18, 271.62,"N",276.97,208.76,308.52, 23.34,257.08, 10.36,242868914.6,112.83,15.44, 90.1,"Crater in Amenthes Fossae region ","OK ", 803 +"MROX_0003","DATA/T01_000803_2620_XN_82N280W.IMG","4A_04_1000000A00","T01_000803_2620_XN_82N280W","2006-09-28T02:21:59.023","CTX ","NIFL ",5056, 38912, 1, 6.23, 0.93, 0.09, 60.32, 60.37,280.89, 82.04,278.58, 80.14,275.61, 80.29,288.92, 83.69,284.50, 83.91,"TRANSITION","MARS ","0843877337:213 ",288.1, 1.877,"195/217/216", 0, 31.20, 226.08, 313.24,3689.83, 313.24,"N",289.51,144.93,314.05, 23.34,280.90, 82.04,242867333.7,112.84,14.21, 89.7,"North polar landforms ","OK ", 803 +"MROX_0003","DATA/T01_000804_1599_XN_20S280W.IMG","4A_04_1000000B00","T01_000804_1599_XN_20S280W","2006-09-28T03:42:25.875","CTX ","NIFL ",5056, 7168, 1, 5.12, 1.19, 0.08, 67.27, 67.21,280.63,-20.13,280.82,-20.52,280.36,-20.47,280.91,-19.79,280.45,-19.74,"TRANSITION","MARS ","0843882164:175 ",288.8, 1.877,"195/228/227", 0, 25.63, 43.57, 255.97,3649.83, 255.97,"N",276.90,224.45,333.50, 23.34,280.63,-20.12,242860450.7,112.87,15.53, 90.1,"Southern mid-latitude crater ","OK ", 804 +"MROX_0003","DATA/T01_000804_2008_XN_20N285W.IMG","4A_04_1000000C00","T01_000804_2008_XN_20N285W","2006-09-28T03:54:59.812","CTX ","NIFL ",5056, 12288, 1, 5.57, 1.08, 0.09, 47.04, 47.00,285.66, 20.86,285.83, 20.21,285.33, 20.27,285.99, 21.45,285.49, 21.50,"TRANSITION","MARS ","0843882918:159 ",288.5, 1.877,"195/228/227", 0, 27.89, 73.75, 278.62,3672.31, 278.62,"N",276.95,199.91,336.58, 23.34,285.66, 20.87,242858313.0,112.87,15.39, 90.1,"Nili Fossae trough ","ERROR ", 804 +"MROX_0003","DATA/T01_000805_1402_XN_39S305W.IMG","4A_04_1000000D00","T01_000805_1402_XN_39S305W","2006-09-28T05:28:27.199","CTX ","NIFL ",5056, 5120, 1, 5.01, 1.21, 0.08, 80.60, 80.53,305.22,-39.82,305.45,-40.11,304.90,-40.06,305.53,-39.59,304.98,-39.54,"TRANSITION","MARS ","0843888526:002 ",289.3, 1.877,"195/234/232", 0, 25.08, 31.06, 250.94,3639.00, 250.94,"N",276.73,227.85,359.30, 23.33,305.22,-39.82,242851599.0,112.90,15.62, 90.1,"Northwest Hellas landforms ","OK ", 805 +"MROX_0003","DATA/T01_000805_2125_XN_32N314W.IMG","4A_04_1000000E00","T01_000805_2125_XN_32N314W","2006-09-28T05:50:38.269","CTX ","NIFL ",5056, 15360, 1, 5.76, 1.03, 0.08, 45.05, 45.04,314.46, 32.51,314.64, 31.72,314.07, 31.78,314.86, 33.25,314.28, 33.31,"TRANSITION","MARS ","0843889857:020 ",289.0, 1.877,"195/234/232", 0, 28.86, 91.45, 288.58,3679.05, 288.58,"N",276.83,188.33, 4.73, 23.33,314.46, 32.52,242847744.6,112.91,15.36, 90.0,"North-northeast Arabia Terra landforms ","OK ", 805 +"MROX_0003","DATA/T01_000805_2585_XN_78N329W.IMG","4A_04_1000000F00","T01_000805_2585_XN_78N329W","2006-09-28T06:05:00.215","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.09, 58.24, 58.28,329.17, 78.51,328.48, 76.78,326.21, 76.90,333.01, 80.08,330.04, 80.22,"TRANSITION","MARS ","0843890719:006 ",289.2, 1.877,"195/234/232", 0, 31.32, 202.22, 314.44,3691.44, 314.44,"N",283.91,147.02, 8.30, 23.33,329.18, 78.51,242847027.4,112.91,14.61, 89.8,"North polar landforms ","OK ", 805 +"MROX_0003","DATA/T01_000806_2651_XN_85N014W.IMG","4A_04_1000001000","T01_000806_2651_XN_85N014W","2006-09-28T07:59:22.070","CTX ","NIFL ",5056, 34816, 1, 6.27, 0.93, 0.09, 62.37, 62.41, 14.84, 85.10, 9.07, 83.47, 4.73, 83.68, 31.99, 86.26, 25.93, 86.63,"TRANSITION","MARS ","0843897580:225 ",289.4, 1.877,"195/234/232", 0, 31.41, 202.01, 315.38,3691.73, 315.38,"N",301.06,143.22, 36.13, 23.32, 14.89, 85.10,242836868.9,112.95,13.42, 89.8,"North polar landforms ","OK ", 806 +"MROX_0003","DATA/T01_000807_2016_XN_21N007W.IMG","4A_04_1000001100","T01_000807_2016_XN_21N007W","2006-09-28T09:31:33.054","CTX ","NIFL ",5056, 14336, 1, 5.61, 1.07, 0.08, 46.89, 46.86, 7.54, 21.67, 7.70, 20.92, 7.19, 20.98, 7.88, 22.36, 7.37, 22.42,"TRANSITION","MARS ","0843903111:221 ",289.8, 1.877,"195/234/232", 0, 28.08, 85.93, 280.51,3674.00, 280.51,"N",276.81,199.00, 58.48, 23.32, 7.54, 21.68,242827783.9,112.98,15.40, 90.1,"Becquerel Crater ","OK ", 807 +"MROX_0003","DATA/T01_000807_2205_XN_40N010W.IMG","4A_04_1000001200","T01_000807_2205_XN_40N010W","2006-09-28T09:37:33.172","CTX ","NIFL ",5056, 8192, 1, 5.87, 1.01, 0.08, 45.10, 45.10, 10.11, 40.53, 10.37, 40.09, 9.73, 40.15, 10.50, 40.90, 9.84, 40.96,"TRANSITION","MARS ","0843903471:251 ",289.8, 1.877,"195/234/232", 0, 29.40, 48.52, 294.17,3681.98, 294.17,"N",276.66,179.82, 59.92, 23.32, 10.11, 40.53,242827171.6,112.98,15.33, 90.0,"Cydonia Mensae landforms ","OK ", 807 +"MROX_0003","DATA/T01_000807_2638_XN_83N035W.IMG","4A_04_1000001300","T01_000807_2638_XN_83N035W","2006-09-28T09:51:03.914","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.08, 61.54, 61.59, 34.99, 83.84, 31.61, 82.16, 27.91, 82.34, 46.24, 85.20, 40.74, 85.48,"TRANSITION","MARS ","0843904282:185 ",289.8, 1.877,"195/234/232", 0, 31.32, 202.11, 314.54,3690.97, 314.54,"N",294.18,143.96, 63.31, 23.32, 35.02, 83.84,242826688.0,112.98,13.89, 89.7,"North polar landforms ","OK ", 807 +"MROX_0003","DATA/T01_000808_1874_XN_07N033W.IMG","4A_04_1000001400","T01_000808_1874_XN_07N033W","2006-09-28T11:19:17.890","CTX ","NIFL ",5056, 13312, 1, 5.41, 1.12, 0.08, 51.89, 51.85, 33.09, 7.40, 33.24, 6.70, 32.79, 6.76, 33.40, 8.05, 32.94, 8.10,"TRANSITION","MARS ","0843909576:179 ",290.0, 1.877,"195/234/232", 0, 27.07, 80.39, 270.27,3666.13, 270.27,"N",276.91,210.81, 84.70, 23.31, 33.09, 7.41,242818223.8,113.01,15.45, 90.1,"Mojave Crater and ejecta ","OK ", 808 +"MROX_0003","DATA/T01_000808_2655_XN_85N072W.IMG","4A_04_1000001500","T01_000808_2655_XN_85N072W","2006-09-28T11:43:50.465","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.08, 62.70, 62.74, 72.74, 85.53, 65.67, 83.93, 61.06, 84.16, 92.89, 86.59, 86.96, 87.00,"TRANSITION","MARS ","0843911049:070 ",289.9, 1.877,"195/234/232", 0, 31.35, 202.06, 314.79,3691.12, 314.79,"N",304.29,142.97, 90.75, 23.31, 72.79, 85.54,242816506.4,113.02,13.20, 89.7,"North polar landforms ","OK ", 808 +"MROX_0003","DATA/T01_000809_2609_XN_80N082W.IMG","4A_04_1000001600","T01_000809_2609_XN_80N082W","2006-09-28T13:34:22.211","CTX ","NIFL ",5056, 34816, 1, 6.25, 0.93, 0.09, 59.70, 59.75, 81.95, 80.93, 80.59, 79.22, 77.84, 79.36, 87.67, 82.45, 83.85, 82.64,"TRANSITION","MARS ","0843917681:005 ",290.0, 1.877,"195/234/232", 0, 31.31, 202.17, 314.32,3691.03, 314.32,"N",287.10,145.59,117.65, 23.30, 81.96, 80.94,242806304.7,113.06,14.37, 89.7,"North polar landforms ","ERROR ", 809 +"MROX_0003","DATA/T01_000810_2641_XN_84N119W.IMG","4A_04_1000001700","T01_000810_2641_XN_84N119W","2006-09-28T15:27:28.660","CTX ","NIFL ",5056, 40960, 1, 6.25, 0.93, 0.08, 61.72, 61.76,119.72, 84.18,114.68, 82.24,110.97, 82.42,135.09, 85.69,129.41, 86.03,"TRANSITION","MARS ","0843924467:120 ",290.1, 1.877,"195/234/232", 0, 31.31, 237.79, 314.42,3690.83, 314.42,"N",296.98,143.70,145.19, 23.30,119.75, 84.18,242796113.9,113.09,13.70, 89.7,"North polar landforms ","ERROR ", 810 +"MROX_0003","DATA/T01_000811_2032_XN_23N117W.IMG","4A_04_1000001800","T01_000811_2032_XN_23N117W","2006-09-28T17:00:35.449","CTX ","NIFL ",5056, 8192, 1, 5.61, 1.07, 0.08, 46.46, 46.43,116.92, 23.26,117.13, 22.82,116.62, 22.88,117.23, 23.65,116.72, 23.70,"TRANSITION","MARS ","0843930054:066 ",290.2, 1.877,"195/234/232", 0, 28.08, 49.10, 280.51,3673.62, 280.51,"N",276.91,197.57,167.73, 23.29,116.92, 23.27,242786954.3,113.12,15.40, 90.1,"Olympica Fossae trough system ","OK ", 811 +"MROX_0003","DATA/T01_000812_2657_XN_85N184W.IMG","4A_04_1000001900","T01_000812_2657_XN_85N184W","2006-09-28T19:12:19.460","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.08, 62.90, 62.94,184.59, 85.78,176.48, 84.20,171.71, 84.44,206.85, 86.74,201.29, 87.18,"TRANSITION","MARS ","0843937958:069 ",290.4, 1.877,"195/234/232", 0, 31.36, 202.05, 314.92,3691.23, 314.92,"N",306.96,142.79,199.88, 23.28,184.66, 85.78,242775714.3,113.16,13.02, 89.8,"North polar landforms ","ERROR ", 812 +"MROX_0003","DATA/T01_000813_1388_XN_41S163W.IMG","4A_04_1000001A00","T01_000813_1388_XN_41S163W","2006-09-28T20:24:50.386","CTX ","NIFL ",5056, 11264, 1, 5.03, 1.20, 0.08, 81.55, 81.49,163.33,-41.31,163.53,-41.91,162.96,-41.86,163.70,-40.76,163.14,-40.71,"TRANSITION","MARS ","0843942309:050 ",290.8, 1.877,"195/234/232", 0, 25.17, 68.25, 251.94,3639.48, 251.94,"N",276.61,227.85,217.44, 23.28,163.33,-41.31,242770170.0,113.19,15.62, 90.1,"Crater with gullies ","OK ", 813 +"MROX_0003","DATA/T01_000814_2649_XN_84N231W.IMG","4A_04_1000001B00","T01_000814_2649_XN_84N231W","2006-09-28T22:56:17.156","CTX ","NIFL ",5056, 34801, 1, 6.31, 0.92, 0.08, 62.29, 62.34,231.65, 84.90,226.41, 83.26,222.15, 83.47,247.60, 86.10,241.51, 86.46,"TRANSITION","MARS ","0843951395:247 ",290.5, 1.877,"195/234/232", 0, 31.57, 201.75, 316.99,3693.35, 316.99,"N",299.64,143.34,254.38, 23.27,231.69, 84.91,242755264.2,113.23,13.52, 89.7,"North polar landforms ","ERROR ", 814 +"MROX_0003","DATA/T01_000815_1749_XN_05S222W.IMG","4A_04_1000001C00","T01_000815_1749_XN_05S222W","2006-09-29T00:20:10.316","CTX ","NIFL ",5056, 18417, 1, 5.27, 1.15, 0.08, 58.16, 58.10,222.59, -5.14,222.70, -6.10,222.26, -6.04,222.93, -4.23,222.48, -4.17,"TRANSITION","MARS ","0843956429:032 ",290.8, 1.877,"195/234/232", 0, 26.38, 111.67, 263.28,3659.31, 263.28,"N",276.91,218.37,274.73, 23.26,222.59, -5.13,242747412.1,113.26,15.48, 90.1,"Gale Crater landforms ","ERROR ", 815 +"MROX_0003","DATA/T01_000815_2607_XN_80N244W.IMG","4A_04_1000001D00","T01_000815_2607_XN_80N244W","2006-09-29T00:46:56.085","CTX ","NIFL ",5056, 25585, 1, 6.27, 1.40, 0.08, 59.63, 59.68,244.96, 80.71,243.48, 78.82,240.82, 78.95,250.94, 82.42,247.12, 82.60,"TRANSITION","MARS ","0843958034:229 ",290.5, 2.838,"195/234/232", 0, 31.40, 224.57, 315.26,3691.99, 315.26,"N",286.48,145.73,281.32, 23.26,244.98, 80.72,242745022.2,113.27,14.43, 89.7,"North polar landforms ","ERROR ", 815 +"MROX_0003","DATA/T01_000817_1408_XN_39S272W.IMG","4A_04_1000001E00","T01_000817_1408_XN_39S272W","2006-09-29T03:54:03.988","CTX ","NIFL ",5056, 8192, 1, 5.02, 1.21, 0.08, 80.14, 80.08,272.69,-39.24,272.90,-39.68,272.35,-39.63,273.02,-38.85,272.48,-38.80,"TRANSITION","MARS ","0843969262:204 ",290.9, 1.877,"195/234/232", 0, 25.11, 49.69, 251.25,3639.51, 251.25,"N",276.74,227.75,326.74, 23.25,272.69,-39.23,242729090.5,113.33,15.61, 90.1,"Dao Vallis ","OK ", 817 +"MROX_0003","DATA/T01_000820_1816_XN_01N359W.IMG","4A_04_1000001F00","T01_000820_1816_XN_01N359W","2006-09-29T09:42:46.171","CTX ","NIFL ",5056, 20480, 1, 5.36, 1.13, 0.08, 54.59, 54.54,359.76, 1.68,359.86, 0.61,359.41, 0.66, 0.11, 2.69,359.66, 2.74,"TRANSITION","MARS ","0843990184:251 ",290.6, 1.877,"195/234/232", 0, 26.83, 123.88, 267.78,3663.96, 267.78,"N",276.90,214.49, 51.64, 23.23,359.76, 1.68,242695793.6,113.44,15.47, 90.1,"North Sinus Meridiani landforms ","OK ", 820 +"MROX_0003","DATA/T01_000821_2284_XN_48N033W.IMG","4A_04_1000002000","T01_000821_2284_XN_48N033W","2006-09-29T11:49:44.866","CTX ","NIFL ",5056, 8192, 1, 5.98, 0.99, 0.08, 46.26, 46.27, 33.34, 48.49, 33.65, 48.06, 32.90, 48.12, 33.80, 48.87, 33.03, 48.93,"TRANSITION","MARS ","0843997803:173 ",290.4, 1.877,"195/234/232", 0, 29.93, 48.26, 299.80,3684.84, 299.80,"N",276.71,171.51, 82.49, 23.22, 33.34, 48.50,242683799.5,113.48,15.29, 90.0,"Crater with gullies ","OK ", 821 +"MROX_0003","DATA/T01_000823_1723_XN_07S080W.IMG","4A_04_1000002100","T01_000823_1723_XN_07S080W","2006-09-29T15:16:25.612","CTX ","NIFL ",5056, 11264, 1, 5.22, 1.16, 0.08, 59.62, 59.57, 80.52, -7.73, 80.67, -8.33, 80.23, -8.27, 80.81, -7.18, 80.36, -7.13,"TRANSITION","MARS ","0844010204:108 ",290.6, 1.877,"195/234/232", 0, 26.14, 68.39, 260.91,3656.74, 260.91,"N",276.98,219.65,132.79, 23.21, 80.52, -7.72,242665462.5,113.55,15.49, 90.1,"Ius Chasma floor and wall ","OK ", 823 +"MROX_0003","DATA/T01_000823_2642_XN_84N114W.IMG","4A_04_1000002200","T01_000823_2642_XN_84N114W","2006-09-29T15:44:59.093","CTX ","NIFL ",5056, 35840, 1, 6.27, 1.16, 0.08, 61.86, 61.90,114.52, 84.24,108.86, 82.12,105.19, 82.30,132.05, 85.90,126.24, 86.25,"TRANSITION","MARS ","0844011917:231 ",290.5, 2.357,"195/234/232", 0, 31.42, 261.20, 315.45,3691.85, 315.45,"N",297.12,143.68,139.87, 23.21,114.56, 84.25,242662917.0,113.56,13.69, 89.7,"North polar landforms ","OK ", 823 +"MROX_0003","DATA/T01_000825_2649_XN_84N172W.IMG","4A_04_1000002300","T01_000825_2649_XN_84N172W","2006-09-29T19:29:18.901","CTX ","NIFL ",5056, 50176, 1, 6.27, 0.93, 0.08, 62.39, 62.43,172.41, 84.96,164.45, 82.63,160.54, 82.82,198.02, 86.62,192.20, 87.04,"TRANSITION","MARS ","0844025377:182 ",290.6, 1.877,"195/234/232", 0, 31.37, 291.19, 315.04,3691.40, 315.04,"N",300.30,143.29,194.48, 23.20,172.46, 84.96,242642331.0,113.63,13.47, 89.6,"North polar landforms ","ERROR ", 825 +"MROX_0003","DATA/T01_000826_2673_XN_87N236W.IMG","4A_04_1000002400","T01_000826_2673_XN_87N236W","2006-09-29T21:21:01.584","CTX ","NIFL ",2528, 73728, 2, 12.61, 0.92, 0.08, 64.52, 64.56,239.05, 87.35,188.00, 81.38,184.58, 81.54,327.09, 83.17,331.29, 83.37,"TRANSITION","MARS ","0844032080:101 ",290.6, 1.884,"195/234/232", 0, 31.57, 858.00, 317.09,3693.34, 317.09,"N",339.04,141.67,222.03, 23.19,239.19, 87.35,242632031.7,113.66,10.84, 88.9,"North polar landforms ","ERROR ", 826 diff --git a/inputs_mini/hirise/RDRCUMINDEX.LBL b/inputs_mini/hirise/RDRCUMINDEX.LBL new file mode 100644 index 0000000..81f7293 --- /dev/null +++ b/inputs_mini/hirise/RDRCUMINDEX.LBL @@ -0,0 +1,492 @@ +PDS_VERSION_ID = PDS3 +RECORD_TYPE = FIXED_LENGTH +RECORD_BYTES = 821 +FILE_RECORDS = 9 +^RDR_INDEX_TABLE = "RDRCUMINDEX.TAB" +OBJECT = RDR_INDEX_TABLE + INDEX_TYPE = SINGLE + INTERCHANGE_FORMAT = ASCII + ROWS = 9 + ROW_BYTES = 821 + COLUMNS = 54 + OBJECT = COLUMN + NAME = VOLUME_ID + DATA_TYPE = CHARACTER + START_BYTE = 2 + BYTES = 10 + FORMAT = "A10" + DESCRIPTION = "Volume identification" + END_OBJECT + OBJECT = COLUMN + NAME = FILE_NAME_SPECIFICATION + DATA_TYPE = CHARACTER + START_BYTE = 15 + BYTES = 67 + FORMAT = "A67" + DESCRIPTION = "Path and file name of HiRISE RDR product" + END_OBJECT + OBJECT = COLUMN + NAME = INSTRUMENT_HOST_ID + DATA_TYPE = CHARACTER + START_BYTE = 85 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "Spacecraft hosting the HiRISE instrument, + always MRO" + END_OBJECT + OBJECT = COLUMN + NAME = INSTRUMENT_ID + DATA_TYPE = CHARACTER + START_BYTE = 91 + BYTES = 6 + FORMAT = "A6" + DESCRIPTION = "Instrument that acquired the observaiton, + always HIRISE" + END_OBJECT + OBJECT = COLUMN + NAME = OBSERVATION_ID + DATA_TYPE = CHARACTER + START_BYTE = 100 + BYTES = 15 + FORMAT = "A15" + DESCRIPTION = "Unique identification associated with + an observation. Up to 28 EDR products can be + associated with an observation." + END_OBJECT + OBJECT = COLUMN + NAME = PRODUCT_ID + DATA_TYPE = CHARACTER + START_BYTE = 118 + BYTES = 21 + FORMAT = "A21" + DESCRIPTION = "Unique identification associated with the product" + END_OBJECT + OBJECT = COLUMN + NAME = PRODUCT_VERSION_ID + DATA_TYPE = CHARACTER + START_BYTE = 142 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "Version number of this product" + END_OBJECT + OBJECT = COLUMN + NAME = TARGET_NAME + DATA_TYPE = CHARACTER + START_BYTE = 148 + BYTES = 32 + FORMAT = "A32" + DESCRIPTION = "Target Name of the observation" + END_OBJECT + OBJECT = COLUMN + NAME = ORBIT_NUMBER + DATA_TYPE = ASCII_INTEGER + START_BYTE = 182 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Orbit number from start of mission" + END_OBJECT + OBJECT = COLUMN + NAME = MISSION_PHASE_NAME + DATA_TYPE = CHARACTER + START_BYTE = 190 + BYTES = 30 + FORMAT = "A30" + DESCRIPTION = "Mission Phase at time of observation, such + as Primary Science Phase" + END_OBJECT + OBJECT = COLUMN + NAME = RATIONALE_DESC + DATA_TYPE = CHARACTER + START_BYTE = 223 + BYTES = 75 + FORMAT = "A75" + DESCRIPTION = "Informational note about the observation" + END_OBJECT + OBJECT = COLUMN + NAME = OBSERVATION_START_TIME + DATA_TYPE = TIME + START_BYTE = 301 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when HiRISE started the + imaging sequence" + END_OBJECT + OBJECT = COLUMN + NAME = OBSERVATION_START_COUNT + DATA_TYPE = CHARACTER + START_BYTE = 328 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "Spacecraft clock count when HiRISE started + the imaging sequence" + END_OBJECT + OBJECT = COLUMN + NAME = START_TIME + DATA_TYPE = TIME + START_BYTE = 347 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when first image line of target was + acquired" + END_OBJECT + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_START_COUNT + DATA_TYPE = CHARACTER + START_BYTE = 374 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "Spacecraft clock count when first image line of + target was acquired" + END_OBJECT + OBJECT = COLUMN + NAME = STOP_TIME + DATA_TYPE = TIME + START_BYTE = 393 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when last image line of target was + acquired" + END_OBJECT + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_STOP_COUNT + DATA_TYPE = CHARACTER + START_BYTE = 420 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "Spacecraft clock count when last image line of + target was acquired" + END_OBJECT + OBJECT = COLUMN + NAME = IMAGE_LINES + DATA_TYPE = ASCII_INTEGER + START_BYTE = 438 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Number of image lines" + END_OBJECT + OBJECT = COLUMN + NAME = LINE_SAMPLES + DATA_TYPE = ASCII_INTEGER + START_BYTE = 445 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Number of line samples" + END_OBJECT + OBJECT = COLUMN + NAME = EMISSION_ANGLE + DATA_TYPE = ASCII_REAL + START_BYTE = 452 + BYTES = 8 + FORMAT = "F8.5" + DESCRIPTION = "The emission angle at the center of the + observation" + END_OBJECT + OBJECT = COLUMN + NAME = INCIDENCE_ANGLE + DATA_TYPE = ASCII_REAL + START_BYTE = 461 + BYTES = 7 + FORMAT = "F7.4" + DESCRIPTION = "The incidence angle at the center of the + observation" + END_OBJECT + OBJECT = COLUMN + NAME = PHASE_ANGLE + DATA_TYPE = ASCII_REAL + START_BYTE = 469 + BYTES = 8 + FORMAT = "F7.4" + DESCRIPTION = "The phase angle at the center of the observation" + END_OBJECT + OBJECT = COLUMN + NAME = SPACECRAFT_ALTITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 478 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "The areodetic altitude of the center of the + observation in kilometers. This field represents the + center altitude for the observation on the MRO + ellipsoid reference." + END_OBJECT + OBJECT = COLUMN + NAME = TARGET_CENTER_DISTANCE + DATA_TYPE = ASCII_REAL + START_BYTE = 487 + BYTES = 7 + FORMAT = "F7.2" + DESCRIPTION = "The distance from the spacecraft to the target + body's center in kilometers" + END_OBJECT + OBJECT = COLUMN + NAME = SLANT_DISTANCE + DATA_TYPE = ASCII_REAL + START_BYTE = 495 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "The distance from the spacecraft to the + intersection of the view vector with the target + body in kilometers" + END_OBJECT + OBJECT = COLUMN + NAME = NORTH_AZIMUTH + DATA_TYPE = ASCII_REAL + START_BYTE = 504 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The angle in degrees clockwise from the reference + axis of the observation (a line from the center to + the right edge of the observation) to the direction + to the north pole of the target body." + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SOLAR_AZIMUTH + DATA_TYPE = ASCII_REAL + START_BYTE = 515 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The angel in degrees clockwise from the reference + axis of the observation (a line from the center to + the right edge of the observation) to the direction + to the sub-solar point on the target body." + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SOLAR_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 526 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The planetocentric latitude of the sub-solar point + in degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SOLAR_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 537 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The east longitude of the sub-solar point in + degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 548 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The planetocentric latitude of the sub-spacecraft + point in degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 559 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "The planetocentric longitude of the sub-spacecraft + point in degrees" + END_OBJECT + OBJECT = COLUMN + NAME = SOLAR_DISTANCE + DATA_TYPE = ASCII_REAL + START_BYTE = 570 + BYTES = 10 + FORMAT = "F10.5" + DESCRIPTION = "The distance from the center of the image on the + target body to the center of the Sun in AU" + END_OBJECT + OBJECT = COLUMN + NAME = SOLAR_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 581 + BYTES = 10 + FORMAT = "F10.3" + DESCRIPTION = "The solar longitude ('L sub S') at the time of + image acquisition in the degrees from the Martian + vernal equinox" + END_OBJECT + OBJECT = COLUMN + NAME = LOCAL_TIME + DATA_TYPE = ASCII_REAL + START_BYTE = 592 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Local Solar Time in decimal hours from midnight at + the center of the observation" + END_OBJECT + OBJECT = COLUMN + NAME = STEREO_FLAG + DATA_TYPE = CHARACTER + START_BYTE = 604 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "Indicates whether this product was intended to be + part of a stereo pair. (YES or NO)." + END_OBJECT + OBJECT = COLUMN + NAME = MINIMUM_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 609 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Minimum latitude of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = MAXIMUM_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 620 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Maximum latitude of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = MINIMUM_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 631 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Minimum longitude of the projected image." + END_OBJECT + OBJECT = COLUMN + NAME = MAXIMUM_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 642 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Maximum longitude of projected image" + END_OBJECT + OBJECT = COLUMN + NAME = MAP_SCALE + DATA_TYPE = ASCII_REAL + START_BYTE = 653 + BYTES = 5 + FORMAT = "F5.2" + DESCRIPTION = "Map scale in meters per pixel" + END_OBJECT + OBJECT = COLUMN + NAME = MAP_RESOLUTION + DATA_TYPE = ASCII_REAL + START_BYTE = 659 + BYTES = 10 + FORMAT = "F10.3" + DESCRIPTION = "Map resolution in pixels per degree" + END_OBJECT + OBJECT = COLUMN + NAME = MAP_PROJECTION_TYPE + DATA_TYPE = CHARACTER + START_BYTE = 671 + BYTES = 19 + FORMAT = "A19" + DESCRIPTION = "EQUIRECTANGULAR or POLAR STEREOGRAPHIC" + END_OBJECT + OBJECT = COLUMN + NAME = PROJECTION_CENTER_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 692 + BYTES = 5 + FORMAT = "F5.1" + DESCRIPTION = "Center latitude of the map projection. This does + not necessarily equal the center latitude of the + image." + END_OBJECT + OBJECT = COLUMN + NAME = PROJECTION_CENTER_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 698 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "Center longitude of the map projection. This does + not necessarily equal the center longitude of the + image." + END_OBJECT + OBJECT = COLUMN + NAME = LINE_PROJECTION_OFFSET + DATA_TYPE = ASCII_REAL + START_BYTE = 707 + BYTES = 12 + FORMAT = "F12.1" + DESCRIPTION = "The line_projection_offset element provides the + line offset value of the map projection origin + position from the line and sample 1,1 (line and + sample 1,1 is considered the upper left corner of + the digital array)." + END_OBJECT + OBJECT = COLUMN + NAME = SAMPLE_PROJECTION_OFFSET + DATA_TYPE = ASCII_REAL + START_BYTE = 720 + BYTES = 12 + FORMAT = "F12.1" + DESCRIPTION = "The sample_projection_offset element provides the + sample offset value of the map projection origin + position from line and sample 1,1 (line and sample + 1,1 is considered the upper left corner of the + digital array). Note: that the positive direction + is to the right and down." + END_OBJECT + OBJECT = COLUMN + NAME = CORNER1_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 733 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 1 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER1_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 744 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 1 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER2_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 755 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 2 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER2_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 766 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 2 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER3_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 777 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 3 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER3_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 788 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 3 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER4_LATITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 799 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Latitude of corner 4 of the projected image" + END_OBJECT + OBJECT = COLUMN + NAME = CORNER4_LONGITUDE + DATA_TYPE = ASCII_REAL + START_BYTE = 810 + BYTES = 10 + FORMAT = "F10.4" + DESCRIPTION = "Longitude of corner 4 of the projected image" + END_OBJECT +END_OBJECT +END diff --git a/inputs_mini/hirise/RDRCUMINDEX.TAB b/inputs_mini/hirise/RDRCUMINDEX.TAB new file mode 100644 index 0000000..9b2f709 --- /dev/null +++ b/inputs_mini/hirise/RDRCUMINDEX.TAB @@ -0,0 +1,9 @@ +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0150/AEB_000001_0150_RED.JP2 ","MRO","HIRISE","AEB_000001_0150","AEB_000001_0150_RED ","2 ","MARS ", 1,"Aerobraking ","Sample of Argyre Basin rim ","2006-03-24T04:50:31 ","827643049:47201 ","2006-03-24T04:50:31 ","827643050:37396 ","2006-03-24T04:51:02 ","827643081:07204 ", 53911, 29279, 0.35607,87.0475, 87.2081,1469.320,4853.87,1469.670, 270.0000, 336.9280, 12.0600, 9.5812, -52.3105, 300.7610, 1.62365, 29.396, 7.4125,"NO ", -52.8767, -51.5351, 300.2040, 301.3370, 1.47, 40183.102,"EQUIRECTANGULAR ",-50.0, 180.000, -2070840.0, -3104770.0, -51.5351, 300.5280, -51.6056, 301.3370, -52.8767, 301.0040, -52.8092, 300.2040 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0100/AEB_000001_0100_RED.JP2 ","MRO","HIRISE","AEB_000001_0100","AEB_000001_0100_RED ","2 ","MARS ", 1,"Aerobraking ","Degraded crater near Halley Crater ","2006-03-24T04:48:38 ","827642937:07052 ","2006-03-24T04:48:39 ","827642938:13790 ","2006-03-24T04:48:43 ","827642942:30971 ", 7643, 21479, 0.36641,84.5370, 84.7041,1697.190,5083.90,1696.930, 270.0000, 336.5150, 12.0598, 10.0907, -47.2626, 302.0060, 1.62365, 29.396, 7.4616,"NO ", -47.2552, -47.0357, 301.5790, 302.4510, 1.70, 34825.898,"EQUIRECTANGULAR ",-45.0, 180.000, -1638060.0, -2993950.0, -47.0358, 301.6120, -47.1137, 302.4510, -47.2551, 302.4170, -47.1778, 301.5790 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0050/AEB_000001_0050_RED.JP2 ","MRO","HIRISE","AEB_000001_0050","AEB_000001_0050_RED ","2 ","MARS ", 1,"Aerobraking ","Cratered plains near Bosporos Rupes ","2006-03-24T04:45:36 ","827642755:23841 ","2006-03-24T04:45:38 ","827642756:53112 ","2006-03-24T04:45:44 ","827642763:01198 ", 8129, 20975, 0.36624,81.3654, 81.5326,2040.170,5431.48,2040.230, 270.0000, 336.0680, 12.0594, 10.8226, -40.7764, 303.5000, 1.62365, 29.395, 7.5125,"NO ", -40.7794, -40.4990, 303.0390, 303.9830, 2.04, 28985.199,"EQUIRECTANGULAR ",-40.0, 180.000, -1173870.0, -2731940.0, -40.4990, 303.0790, -40.5927, 303.9830, -40.7794, 303.9400, -40.6864, 303.0390 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0000/AEB_000001_0000_RED.JP2 ","MRO","HIRISE","AEB_000001_0000","AEB_000001_0000_RED ","2 ","MARS ", 1,"Aerobraking ","Bosporos Planum region ","2006-03-24T04:41:47 ","827642526:16944 ","2006-03-24T04:41:49 ","827642528:21067 ","2006-03-24T04:42:04 ","827642542:60817 ", 12127, 22528, 0.34491,78.0572, 78.2127,2490.510,5883.10,2490.300, 270.0000, 337.3990, 12.0590, 11.7329, -33.7997, 305.0790, 1.62364, 29.394, 7.5571,"NO ", -33.9094, -33.3992, 304.5450, 305.6390, 2.49, 23769.801,"EQUIRECTANGULAR ",-30.0, 180.000, -793892.0, -2563790.0, -33.3992, 304.6310, -33.5174, 305.6390, -33.9094, 305.5460, -33.7933, 304.5450 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0150/AEB_000002_0150_RED.JP2 ","MRO","HIRISE","AEB_000002_0150","AEB_000002_0150_RED ","2 ","MARS ", 2,"Aerobraking ","Planum Chronium region ","2006-03-25T16:22:32 ","827770971:00945 ","2006-03-25T16:22:33 ","827770971:49436 ","2006-03-25T16:23:03 ","827771002:09251 ", 65542, 31177, 0.33368,89.8238, 89.9681,1287.980,4672.66,1288.000, 270.0000, 337.7410, 12.3171, 210.7050, -56.7667, 140.4430, 1.62493, 30.076, 7.3163,"NO ", -57.3947, -55.9649, 139.8560, 141.0420, 1.29, 45838.398,"EQUIRECTANGULAR ",-55.0, 180.000, -2565340.0, 1055460.0, -55.9649, 140.2530, -56.0291, 141.0420, -57.3947, 140.6430, -57.3327, 139.8560 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0100/AEB_000002_0100_RED.JP2 ","MRO","HIRISE","AEB_000002_0100","AEB_000002_0100_RED ","1 ","MARS ", 2,"Aerobraking ","Floor of Kepler Crater ","2006-03-25T16:18:51 ","827770750:13709 ","2006-03-25T16:18:52 ","827770751:20250 ","2006-03-25T16:19:09 ","827770768:20692 ", 24479, 24280, 0.36694,85.1275, 85.2930,1691.900,5079.01,1691.890, 270.0000, 336.8390, 12.3166, 211.6280, -47.2607, 142.9100, 1.62493, 30.075, 7.4194,"NO ", -47.5039, -46.8032, 142.4080, 143.3910, 1.69, 34928.801,"EQUIRECTANGULAR ",-45.0, 180.000, -1634780.0, 12209.5, -46.8032, 142.5530, -46.8818, 143.3910, -47.5039, 143.2410, -47.4271, 142.4080 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0050/AEB_000002_0050_RED.JP2 ","MRO","HIRISE","AEB_000002_0050","AEB_000002_0050_RED ","2 ","MARS ", 2,"Aerobraking ","Terra Cimmeria ","2006-03-25T16:15:50 ","827770569:24600 ","2006-03-25T16:15:52 ","827770570:55687 ","2006-03-25T16:16:09 ","827770588:35829 ", 17633, 8973, 0.36514,81.9848, 82.1494,2035.340,5425.36,2035.370, 270.0000, 336.2930, 12.3162, 212.3580, -40.7767, 144.4040, 1.62492, 30.074, 7.4703,"NO ", -40.9490, -40.3422, 144.2530, 144.6600, 2.04, 29056.400,"EQUIRECTANGULAR ",-40.0, 180.000, -1172200.0, 795590.0, -40.3423, 144.3870, -40.3707, 144.6600, -40.9490, 144.5280, -40.9211, 144.2570 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0000/AEB_000002_0000_RED.JP2 ","MRO","HIRISE","AEB_000002_0000","AEB_000002_0000_RED ","2 ","MARS ", 2,"Aerobraking ","Ancient cratered surface northeast of Martz Crater ","2006-03-25T16:11:58 ","827770337:06571 ","2006-03-25T16:12:00 ","827770339:13302 ","2006-03-25T16:12:34 ","827770373:03172 ", 23505, 10752, 0.34358,78.7017, 78.8551,2483.480,5875.20,2483.440, 270.0000, 337.5530, 12.3158, 213.2650, -33.8047, 145.9810, 1.62492, 30.073, 7.5151,"NO ", -34.1609, -33.1748, 145.7760, 146.3020, 2.48, 23836.801,"EQUIRECTANGULAR ",-30.0, 180.000, -790782.0, 706390.0, -33.1749, 145.9970, -33.2107, 146.3020, -34.1608, 146.0810, -34.1261, 145.7810 +"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0000/AEB_000002_0000_COLOR.JP2","MRO","HIRISE","AEB_000002_0000","AEB_000002_0000_COLOR","1 ","MARS ", 2,"Aerobraking ","Ancient cratered surface northeast of Martz Crater ","2006-03-25T16:11:58 ","827770337:06571 ","2006-03-25T16:11:59 ","827770337:49063 ","2006-03-25T16:12:35 ","827770373:01762 ", 23216, 8701, 0.34358,78.7017, 78.8551,2483.480,5875.20,2483.440, 270.0000, 337.5830, 12.3158, 213.2650, -33.8047, 145.9810, 1.62492, 30.073, 7.5151,"NO ", -34.1609, -33.1748, 145.7760, 146.3020, 2.48, 23836.801,"EQUIRECTANGULAR ",-30.0, 180.000, -790782.0, 706390.0, -33.1849, 145.9980, -33.2101, 146.2040, -34.1569, 145.9850, -34.1335, 145.7820 diff --git a/inputs_mini/lroc/CUMINDEX.LBL b/inputs_mini/lroc/CUMINDEX.LBL new file mode 100644 index 0000000..b1535bb --- /dev/null +++ b/inputs_mini/lroc/CUMINDEX.LBL @@ -0,0 +1,980 @@ +PDS_VERSION_ID = PDS3 + +^INDEX_TABLE = "CUMINDEX.TAB" + +RECORD_TYPE = FIXED_LENGTH +RECORD_BYTES = 902 +FILE_RECORDS = 12 +MD5_CHECKSUM = "1d07f6e60bfe5fc89eac6b940ff16fd8" +DATA_SET_ID = "LRO-L-LROC-3-CDR-V1.0" +SPACECRAFT_NAME = "LUNAR RECONNAISSANCE ORBITER" +INSTRUMENT_NAME = "LUNAR RECONNAISSANCE ORBITER CAMERA" +TARGET_NAME = "MOON" +MISSION_PHASE_NAME = {"COMMISSIONING", + "NOMINAL MISSION", + "SCIENCE MISSION", + "EXTENDED SCIENCE MISSION", + "SECOND EXTENDED SCIENCE MISSION", + "THIRD EXTENDED SCIENCE MISSION", + "FOURTH EXTENDED SCIENCE MISSION"} +PRODUCT_CREATION_TIME = 2022-02-08T19:19:13 + +OBJECT = INDEX_TABLE + NAME = CDR_CATALOG_INDEX + INTERCHANGE_FORMAT = ASCII + ROWS = 12 + COLUMNS = 83 + ROW_BYTES = 902 + INDEX_TYPE = CUMULATIVE + + OBJECT = COLUMN + NAME = VOLUME_ID + COLUMN_NUMBER = 1 + DATA_TYPE = CHARACTER + START_BYTE = 2 + BYTES = 12 + FORMAT = "A12" + DESCRIPTION = "Volume id." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = FILE_SPECIFICATION_NAME + COLUMN_NUMBER = 2 + DATA_TYPE = CHARACTER + START_BYTE = 17 + BYTES = 75 + FORMAT = "A75" + DESCRIPTION = "Provides the full name of a file, including a path name, + relative to a PDS volume. The path is followed by a valid file name." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INSTRUMENT_HOST_ID + COLUMN_NUMBER = 3 + DATA_TYPE = CHARACTER + START_BYTE = 95 + BYTES = 3 + FORMAT = "A3" + DESCRIPTION = "ALWAYS LRO." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INSTRUMENT_ID + COLUMN_NUMBER = 4 + DATA_TYPE = CHARACTER + START_BYTE = 101 + BYTES = 4 + FORMAT = "A4" + DESCRIPTION = "Always LROC." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = ORIGINAL_PRODUCT_ID + COLUMN_NUMBER = 5 + DATA_TYPE = CHARACTER + START_BYTE = 108 + BYTES = 12 + FORMAT = "A12" + DESCRIPTION = "Filename of this image as received from the LRO MOC. For + NAC observations, the filename is either nacl00000000 or nacr00000000 + (NAC-LEFT or NAC-RIGHT respectively). For WAC observations, the filename is + wac00000000." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = PRODUCT_ID + COLUMN_NUMBER = 6 + DATA_TYPE = CHARACTER + START_BYTE = 123 + BYTES = 13 + FORMAT = "A13" + DESCRIPTION = "Unique identification associated with the product." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = PRODUCT_VERSION_ID + COLUMN_NUMBER = 7 + DATA_TYPE = CHARACTER + START_BYTE = 139 + BYTES = 12 + FORMAT = "A12" + DESCRIPTION = "The product version number of this product." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = TARGET_NAME + COLUMN_NUMBER = 8 + DATA_TYPE = CHARACTER + START_BYTE = 154 + BYTES = 5 + FORMAT = "A5" + DESCRIPTION = "Set to the target body: MOON for any nominal lunar + imaging, EARTH for any observations of the Earth, CAL calibration images, and + STAR for star calibration images." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = ORBIT_NUMBER + COLUMN_NUMBER = 9 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 161 + BYTES = 5 + FORMAT = "I5" + DESCRIPTION = "LRO orbit number when observation was acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SLEW_ANGLE + COLUMN_NUMBER = 10 + DATA_TYPE = ASCII_REAL + START_BYTE = 167 + BYTES = 8 + FORMAT = "F8.3" + DESCRIPTION = "Angle of LRO off nadir when observation acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = MISSION_PHASE_NAME + COLUMN_NUMBER = 11 + DATA_TYPE = CHARACTER + START_BYTE = 177 + BYTES = 31 + FORMAT = "A31" + DESCRIPTION = "The mission phase at the time the image was acquired - + LAUNCH, EARLY CRUISE, MID CRUISE, LATE CRUISE, LUNAR ORBIT ACQUISITION, + COMMISSIONING, NOMINAL MISSION, SCIENCE MISSION EXTENDED SCIENCE MISSION & + SECOND EXTENDED SCIENCE MISSION." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = RATIONALE_DESC + COLUMN_NUMBER = 12 + DATA_TYPE = CHARACTER + START_BYTE = 211 + BYTES = 75 + FORMAT = "A75" + DESCRIPTION = "For NAC observations, set to one of the following: the + keywords recorded in the REACT ROI, the appropriate NAC campaign, or set to + the string TARGET OF OPPORTUNITY. For WAC observations, set to either the + appropriate campaign or GLOBAL_COVERAGE." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = DATA_QUALITY_ID + COLUMN_NUMBER = 13 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 288 + BYTES = 3 + FORMAT = "I3" + DESCRIPTION = "Set to an 8-bit value that encodes data quality + information; the numeric key identifies the quality of data." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_PREROLL_START_TIME + COLUMN_NUMBER = 14 + DATA_TYPE = CHARACTER + START_BYTE = 293 + BYTES = 24 + FORMAT = "A24" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "UTC time when image command begins." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = START_TIME + COLUMN_NUMBER = 15 + DATA_TYPE = CHARACTER + START_BYTE = 320 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when first image line of target is acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = STOP_TIME + COLUMN_NUMBER = 16 + DATA_TYPE = CHARACTER + START_BYTE = 347 + BYTES = 24 + FORMAT = "A24" + DESCRIPTION = "UTC time when last image line of target is acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_PARTITION + COLUMN_NUMBER = 17 + DATA_TYPE = CHARACTER + START_BYTE = 374 + BYTES = 2 + FORMAT = "A2" + DESCRIPTION = "Spacecraft clock partition." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_SPACECRAFT_CLOCK_PREROLL_COUNT + COLUMN_NUMBER = 18 + DATA_TYPE = CHARACTER + START_BYTE = 379 + BYTES = 15 + FORMAT = "A15" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "S/C clock count when the observation first line of the + preroll (1024 lines) is acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_START_COUNT + COLUMN_NUMBER = 19 + DATA_TYPE = CHARACTER + START_BYTE = 397 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "S/C clock count when first image line/frame of target is + acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_CLOCK_STOP_COUNT + COLUMN_NUMBER = 20 + DATA_TYPE = CHARACTER + START_BYTE = 416 + BYTES = 16 + FORMAT = "A16" + DESCRIPTION = "S/C clock count when last image line/frame of target is + acquired." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = START_SCLK_SECONDS + COLUMN_NUMBER = 21 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 434 + BYTES = 9 + FORMAT = "I9" + DESCRIPTION = "The spacecraft SCLK seconds value at the start of a NAC + or WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = START_SCLK_TICKS + COLUMN_NUMBER = 22 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 444 + BYTES = 7 + FORMAT = "I7" + DESCRIPTION = "The spacecraft SCLK ticks value at the start of a NAC or + WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = STOP_SCLK_SECONDS + COLUMN_NUMBER = 23 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 452 + BYTES = 9 + FORMAT = "I9" + DESCRIPTION = "The spacecraft SCLK seconds value at the end of a NAC or + WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = STOP_SCLK_TICKS + COLUMN_NUMBER = 24 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 462 + BYTES = 7 + FORMAT = "I7" + DESCRIPTION = "The spacecraft SCLK ticks value at the end of a NAC or + WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_LINE_EXPOSURE_DURATION + COLUMN_NUMBER = 25 + DATA_TYPE = ASCII_REAL + START_BYTE = 470 + BYTES = 11 + FORMAT = "F11.9" + NOT_APPLICABLE_CONSTANT = 9.999999999 + DESCRIPTION = "Indicates the elapsed time during the acquistion of one + line; can have values between 337.6 and 35,281.6 microseconds, in 128/15 + microsecond increments." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_EXPOSURE_DURATION + COLUMN_NUMBER = 26 + DATA_TYPE = ASCII_REAL + START_BYTE = 482 + BYTES = 7 + FORMAT = "F7.5" + NOT_APPLICABLE_CONSTANT = 9.99999 + DESCRIPTION = "Indicates the time elapsed during the acquisition of one + frame of data for the WAC." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_FRAME_ID + COLUMN_NUMBER = 27 + DATA_TYPE = CHARACTER + START_BYTE = 491 + BYTES = 5 + FORMAT = "A5" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "Denotes LEFT or RIGHT barrel (telescope) for NAC + observations." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_DAC_RESET + COLUMN_NUMBER = 28 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 498 + BYTES = 4 + FORMAT = "I4" + NOT_APPLICABLE_CONSTANT = 9999 + DESCRIPTION = "Records the commanded DAC reset level that coarsely sets + the DN zero level for a NAC image." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_CHANNEL_A_OFFSET + COLUMN_NUMBER = 29 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 503 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded NAC channel A offset that finely + sets the DN zero level." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_CHANNEL_B_OFFSET + COLUMN_NUMBER = 30 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 507 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded NAC channel B offset that finely + sets the DN zero level." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INSTRUMENT_MODE_CODE + COLUMN_NUMBER = 31 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 511 + BYTES = 3 + FORMAT = "I3" + DESCRIPTION = "The commanded 8-bit integer value indicating in what + mode the NAC or WAC operates during image acquisition." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_INSTRUMENT_MODE_ID + COLUMN_NUMBER = 32 + DATA_TYPE = CHARACTER + START_BYTE = 516 + BYTES = 5 + FORMAT = "A5" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "provides an instrument-dependent designation of WAC + operating mode: BW, COLOR, VIS, or UV." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BAND_CODE + COLUMN_NUMBER = 33 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 523 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "The commanded 8-bit integer value specifying which WAC + bands to acquire for each frame." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BACKGROUND_OFFSET + COLUMN_NUMBER = 34 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 527 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded background offset for WAC + observations." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_FILTER_NAME + COLUMN_NUMBER = 35 + DATA_TYPE = CHARACTER + START_BYTE = 532 + BYTES = 38 + FORMAT = "A38" + NOT_APPLICABLE_CONSTANT = "N/A" + DESCRIPTION = "Numerical designation of the WAC optical filters in + nanometers (415, 566, 604, 643, 689, 321, 360)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_NUMBER_OF_FRAMES + COLUMN_NUMBER = 36 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 572 + BYTES = 5 + FORMAT = "I5" + NOT_APPLICABLE_CONSTANT = 99999 + DESCRIPTION = "Records the commanded number of frames for a WAC + observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_INTERFRAME_TIME + COLUMN_NUMBER = 37 + DATA_TYPE = ASCII_REAL + START_BYTE = 578 + BYTES = 7 + FORMAT = "F7.2" + NOT_APPLICABLE_CONSTANT = 9999.99 + DESCRIPTION = "Set to the value of the interframe delay between WAC + framelets. Keyword can have values between 25/64 and 280/64 seconds, in 1/64 + seconds increments." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_INTERFRAME_CODE + COLUMN_NUMBER = 38 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 586 + BYTES = 3 + FORMAT = "I3" + NOT_APPLICABLE_CONSTANT = 999 + DESCRIPTION = "Records the commanded interframe gap code + (INTERFRAME_TIME) for a WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_MODE_POLAR + COLUMN_NUMBER = 39 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 590 + BYTES = 1 + FORMAT = "I1" + NOT_APPLICABLE_CONSTANT = 9 + DESCRIPTION = "Records the commanded mode for the POLAR flag on WAC + observation (0 = NOT ON and 1 = ON)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = COMPAND_SELECT_CODE + COLUMN_NUMBER = 40 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 592 + BYTES = 1 + FORMAT = "I1" + DESCRIPTION = "Records the commanded value designating which companding + table to utilize for WAC or NAC observations." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = MODE_COMPRESSION + COLUMN_NUMBER = 41 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 594 + BYTES = 1 + FORMAT = "I1" + DESCRIPTION = "Records the command flag controlling if compression is + enabled or disabled for a WAC or NAC observation (0=NO, 1=YES)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = MODE_TEST + COLUMN_NUMBER = 42 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 596 + BYTES = 1 + FORMAT = "I1" + DESCRIPTION = "Records the commanded flag controlling if a TEST image + is to be acquired (0=NO, 1=YES)." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_SCS + COLUMN_NUMBER = 43 + DATA_TYPE = ASCII_REAL + START_BYTE = 598 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC SCS in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_FPA + COLUMN_NUMBER = 44 + DATA_TYPE = ASCII_REAL + START_BYTE = 607 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of NAC focal plane array in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_FPGA + COLUMN_NUMBER = 45 + DATA_TYPE = ASCII_REAL + START_BYTE = 616 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of NAC Field Programmable Gate Array in + degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NAC_TEMPERATURE_TELESCOPE + COLUMN_NUMBER = 46 + DATA_TYPE = ASCII_REAL + START_BYTE = 625 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of NAC Telescope in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BEGIN_TEMPERATURE_SCS + COLUMN_NUMBER = 47 + DATA_TYPE = ASCII_REAL + START_BYTE = 634 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC SCS at the beginning of a WAC + observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_MIDDLE_TEMPERATURE_SCS + COLUMN_NUMBER = 48 + DATA_TYPE = ASCII_REAL + START_BYTE = 643 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC Sequencer and Compression System at + the middle of a WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_END_TEMPERATURE_SCS + COLUMN_NUMBER = 49 + DATA_TYPE = ASCII_REAL + START_BYTE = 652 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of LROC Sequencer and Compression System at + the end of a WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_BEGIN_TEMPERATURE_FPA + COLUMN_NUMBER = 50 + DATA_TYPE = ASCII_REAL + START_BYTE = 661 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of WAC focal plane array at the beginning of + a WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_MIDDLE_TEMPERATURE_FPA + COLUMN_NUMBER = 51 + DATA_TYPE = ASCII_REAL + START_BYTE = 670 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of WAC focal plane array at the middle of a + WAC observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = WAC_END_TEMPERATURE_FPA + COLUMN_NUMBER = 52 + DATA_TYPE = ASCII_REAL + START_BYTE = 679 + BYTES = 8 + FORMAT = "F8.3" + NOT_APPLICABLE_CONSTANT = 9999.999 + DESCRIPTION = "Temperature of WAC focal plane array at the end of a WAC + observation in degrees C." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = IMAGE_LINES + COLUMN_NUMBER = 53 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 688 + BYTES = 6 + FORMAT = "I6" + DESCRIPTION = "Number of image lines." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LINE_SAMPLES + COLUMN_NUMBER = 54 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 695 + BYTES = 4 + FORMAT = "I4" + DESCRIPTION = "Number of image samples." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SAMPLE_BITS + COLUMN_NUMBER = 55 + DATA_TYPE = ASCII_INTEGER + START_BYTE = 700 + BYTES = 2 + FORMAT = "I2" + DESCRIPTION = "Number of bits per pixel." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SCALED_PIXEL_WIDTH + COLUMN_NUMBER = 56 + DATA_TYPE = ASCII_REAL + START_BYTE = 703 + BYTES = 7 + FORMAT = "F7.2" + NOT_APPLICABLE_CONSTANT = 0000.00 + DESCRIPTION = "The cross-scan image resolution in meters/pixel at the + center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SCALED_PIXEL_HEIGHT + COLUMN_NUMBER = 57 + DATA_TYPE = ASCII_REAL + START_BYTE = 711 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 000.00 + DESCRIPTION = "The down-scan image resolution in meters/pixel at the + center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = RESOLUTION + COLUMN_NUMBER = 58 + DATA_TYPE = ASCII_REAL + START_BYTE = 718 + BYTES = 7 + FORMAT = "F7.3" + NOT_APPLICABLE_CONSTANT = 0000.00 + DESCRIPTION = "The calculated pixel resolution at the center of a NAC + or WAC observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = EMISSION_ANGLE + COLUMN_NUMBER = 59 + DATA_TYPE = ASCII_REAL + START_BYTE = 726 + BYTES = 5 + FORMAT = "F5.2" + NOT_APPLICABLE_CONSTANT = 99.99 + DESCRIPTION = "The emission angle at the center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = INCIDENCE_ANGLE + COLUMN_NUMBER = 60 + DATA_TYPE = ASCII_REAL + START_BYTE = 732 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The incidence angle at the center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = PHASE_ANGLE + COLUMN_NUMBER = 61 + DATA_TYPE = ASCII_REAL + START_BYTE = 739 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The phase angle at the center of the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = NORTH_AZIMUTH + COLUMN_NUMBER = 62 + DATA_TYPE = ASCII_REAL + START_BYTE = 746 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The angle in degrees clockwise from the reference axis + of the image (a line from the center to the right edge of image) to the + direction to the north pole of target body This angle is relative to the RDR + products." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SOLAR_AZIMUTH + COLUMN_NUMBER = 63 + DATA_TYPE = ASCII_REAL + START_BYTE = 753 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The angle in degrees clockwise from the reference axis + of the image (a line from the center to the right edge of image) to the + direction of the subsolar point on target body. This angle is relative to the + RDR products." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SOLAR_LATITUDE + COLUMN_NUMBER = 64 + DATA_TYPE = ASCII_REAL + START_BYTE = 760 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Latitude of subsolar point in degrees." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SOLAR_LONGITUDE + COLUMN_NUMBER = 65 + DATA_TYPE = ASCII_REAL + START_BYTE = 767 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The planetocentric longitude of subsolar point in + degrees." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LATITUDE + COLUMN_NUMBER = 66 + DATA_TYPE = ASCII_REAL + START_BYTE = 774 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Planetocentric latitude of subspacecraft point in + degrees." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SUB_SPACECRAFT_LONGITUDE + COLUMN_NUMBER = 67 + DATA_TYPE = ASCII_REAL + START_BYTE = 781 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Planetocentric longitude of spacecraft-to-target-center + surface intercept vector." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SOLAR_DISTANCE + COLUMN_NUMBER = 68 + DATA_TYPE = ASCII_REAL + START_BYTE = 788 + BYTES = 11 + FORMAT = "F11.1" + NOT_APPLICABLE_CONSTANT = 999999999.9 + DESCRIPTION = "distance from the center of the image on the target body + to the center of the sun in km." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SOLAR_LONGITUDE + COLUMN_NUMBER = 69 + DATA_TYPE = ASCII_REAL + START_BYTE = 800 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Solar longitude ('L sub s') at time of image in degrees + provides the value of the angle between the body_Sun line at the time of + interest and the body_Sun line at the vernal equinox." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = CENTER_LATITUDE + COLUMN_NUMBER = 70 + DATA_TYPE = ASCII_REAL + START_BYTE = 807 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The planetocentric latitude coordinate at the center of + the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = CENTER_LONGITUDE + COLUMN_NUMBER = 71 + DATA_TYPE = ASCII_REAL + START_BYTE = 814 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "The planetocentric longitude coordinate at the center of + the observation." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_RIGHT_LATITUDE + COLUMN_NUMBER = 72 + DATA_TYPE = ASCII_REAL + START_BYTE = 821 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper right latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_RIGHT_LONGITUDE + COLUMN_NUMBER = 73 + DATA_TYPE = ASCII_REAL + START_BYTE = 828 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper right longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_RIGHT_LATITUDE + COLUMN_NUMBER = 74 + DATA_TYPE = ASCII_REAL + START_BYTE = 835 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Lower right latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_RIGHT_LONGITUDE + COLUMN_NUMBER = 75 + DATA_TYPE = ASCII_REAL + START_BYTE = 842 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "lower right longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_LEFT_LATITUDE + COLUMN_NUMBER = 76 + DATA_TYPE = ASCII_REAL + START_BYTE = 849 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "lower left latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LOWER_LEFT_LONGITUDE + COLUMN_NUMBER = 77 + DATA_TYPE = ASCII_REAL + START_BYTE = 856 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "lower left longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_LEFT_LATITUDE + COLUMN_NUMBER = 78 + DATA_TYPE = ASCII_REAL + START_BYTE = 863 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper left latitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = UPPER_LEFT_LONGITUDE + COLUMN_NUMBER = 79 + DATA_TYPE = ASCII_REAL + START_BYTE = 870 + BYTES = 6 + FORMAT = "F6.2" + NOT_APPLICABLE_CONSTANT = 999.99 + DESCRIPTION = "Upper left longitude." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = SPACECRAFT_ALTITUDE + COLUMN_NUMBER = 80 + DATA_TYPE = ASCII_REAL + START_BYTE = 877 + BYTES = 7 + FORMAT = "F7.2" + DESCRIPTION = "distance from s/c to closest point on surface in km." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = TARGET_CENTER_DISTANCE + COLUMN_NUMBER = 81 + DATA_TYPE = ASCII_REAL + START_BYTE = 885 + BYTES = 7 + FORMAT = "F7.2" + NOT_APPLICABLE_CONSTANT = 9999.99 + DESCRIPTION = "distance from s/c to target body center in km." + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = ORBIT_NODE + COLUMN_NUMBER = 82 + DATA_TYPE = CHARACTER + START_BYTE = 894 + BYTES = 1 + FORMAT = "A1" + DESCRIPTION = "A character denoting the orbit node for LRO: A for + ascending node portion of the orbit; D for descending node portion of the + orbit" + END_OBJECT = COLUMN + + OBJECT = COLUMN + NAME = LRO_FLIGHT_DIRECTION + COLUMN_NUMBER = 83 + DATA_TYPE = CHARACTER + START_BYTE = 898 + BYTES = 2 + FORMAT = "A2" + DESCRIPTION = "Denotes the LRO spacecraft X-axis relative to the + velocity vector: +X (LRO positive X axis aligned with velocity vector) or -X + (LRO negative X axis aligned with velocity vector)." + END_OBJECT = COLUMN + +END_OBJECT = INDEX_TABLE +END diff --git a/inputs_mini/lroc/CUMINDEX.TAB b/inputs_mini/lroc/CUMINDEX.TAB new file mode 100644 index 0000000..aae2c11 --- /dev/null +++ b/inputs_mini/lroc/CUMINDEX.TAB @@ -0,0 +1,12 @@ +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/WAC/M101013765CC.IMG","LRO","LROC"," wac000000d1"," M101013765CC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," GLOBAL COVERAGE", 32," N/A"," 2009-06-30 15:08:17.604"," 2009-06-30 15:11:20.807"," 1"," N/A"," 268067297:37919"," 268067480:51231",268067297, 37919,268067480, 51231,9.999999999,0.08660," N/A",9999,999,999, 1,"COLOR",127, 56," (415, 566, 604, 643, 689, 321, 360)", 335, 546.88, 10,0,0,1,0,9999.999,9999.999,9999.999,9999.999, -14.004, -13.813, -13.624, -30.641, -30.519, -30.458, 0, 704,32, 64.33, 64.50, 64.415, 1.13, 90.12, 90.35, 91.02,182.06, 0.59, 83.02,-85.26,167.40,152181683.9,157.24,-85.23,167.36,-80.25,175.83,-89.64,296.80,-88.60, 75.86,-80.16,165.77, 43.06,1780.44,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101013931LC.IMG","LRO","LROC","nacl000000cb"," M101013931LC"," v1.9"," MOON", 72, -0.019," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:11:03.045"," 2009-06-30 15:11:03.744"," 2009-06-30 15:11:39.360"," 1"," 268067463:1310"," 268067463:47077"," 268067499:21922",268067463, 47077,268067499, 21922,0.000678933,9.99999," LEFT", 195, 39,106, 15," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.634, 14.032, -21.090, 9.845,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 52224,2532,16, 0.86, 1.12, 0.991, 1.69, 90.01, 91.70,354.26,181.14, 0.59, 83.00,-89.38, 53.48,152181770.9,157.24,-89.34, 55.26,-89.15,134.15,-88.60, 16.79,-88.58, 19.44,-89.10,130.66, 42.96,1780.36,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101013931RC.IMG","LRO","LROC","nacr000000cb"," M101013931RC"," v1.9"," MOON", 72, -0.019," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:11:03.045"," 2009-06-30 15:11:03.744"," 2009-06-30 15:11:39.360"," 1"," 268067463:1310"," 268067463:47077"," 268067499:21922",268067463, 47077,268067499, 21922,0.000678933,9.99999,"RIGHT", 186, 51,110, 15," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.634, 15.184, -17.728, 6.071,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 52224,2532,16, 0.86, 1.12, 0.989, 1.13, 90.07, 88.95,189.19,180.80, 0.59, 83.00,-89.38, 53.48,152181770.9,157.24,-89.40, 52.31,-89.19,137.99,-88.63, 14.17,-88.61, 16.92,-89.15,134.11, 42.96,1780.36,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/WAC/M101014131CC.IMG","LRO","LROC"," wac000000d3"," M101014131CC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," GLOBAL COVERAGE", 32," N/A"," 2009-06-30 15:14:23.914"," 2009-06-30 15:17:28.258"," 1"," N/A"," 268067663:58235"," 268067848:15227",268067663, 58235,268067848, 15227,9.999999999,0.08000," N/A",9999,999,999, 1,"COLOR",127, 56," (415, 566, 604, 643, 689, 321, 360)", 347, 531.25, 9,0,0,1,0,9999.999,9999.999,9999.999,9999.999, -13.290, -13.125, -13.001, -30.344, -30.397, -30.276, 0, 704,32, 68.31, 62.39, 65.348, 1.13, 89.81, 90.05,269.92,182.05, 0.59, 82.96,-74.75,355.82,152182029.8,157.25,-74.77,355.84,-79.81,351.94,-69.84,352.58,-69.79,358.00,-79.72, 1.71, 45.72,1783.16,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014224LC.IMG","LRO","LROC","nacl00000107"," M101014224LC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:15:56.175"," 2009-06-30 15:15:56.523"," 2009-06-30 15:15:58.259"," 1"," 268067756:9830"," 268067756:32587"," 268067758:15304",268067756, 32587,268067758, 15304,0.000337600,9.99999," LEFT", 197, 40, 40, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.125, 15.182, -20.677, 6.963,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.507, 1.70, 89.78, 91.47,280.57,181.12, 0.59, 82.96,-74.68,355.81,152182031.0,157.25,-74.67,355.97,-74.72,355.83,-74.63,355.82,-74.63,356.11,-74.72,356.12, 45.74,1783.18,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014224RC.IMG","LRO","LROC","nacr00000107"," M101014224RC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:15:56.175"," 2009-06-30 15:15:56.523"," 2009-06-30 15:15:58.259"," 1"," 268067756:9830"," 268067756:32587"," 268067758:15304",268067756, 32587,268067758, 15304,0.000337600,9.99999,"RIGHT", 187, 40, 40, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.125, 15.939, -17.432, 5.419,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.506, 1.13, 89.85, 88.72,259.77,180.79, 0.59, 82.96,-74.68,355.81,152182031.0,157.25,-74.68,355.70,-74.73,355.56,-74.63,355.55,-74.63,355.83,-74.72,355.84, 45.74,1783.18,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014254LC.IMG","LRO","LROC","nacl00000106"," M101014254LC"," v1.9"," MOON", 72, -0.021," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:26.295"," 2009-06-30 15:16:26.643"," 2009-06-30 15:16:28.379"," 1","268067786:17694"," 268067786:40451"," 268067788:23168",268067786, 40451,268067788, 23168,0.000337600,9.99999," LEFT", 197, 60, 60, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.042, 15.268, -20.606, 6.756,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.509, 1.70, 89.75, 91.45,279.57,181.11, 0.59, 82.96,-73.04,355.60,152182059.4,157.25,-73.04,355.75,-73.09,355.63,-72.99,355.62,-72.99,355.88,-73.09,355.89, 46.32,1783.76,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014254RC.IMG","LRO","LROC","nacr00000106"," M101014254RC"," v1.9"," MOON", 72, -0.021," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:26.295"," 2009-06-30 15:16:26.643"," 2009-06-30 15:16:28.379"," 1","268067786:17694"," 268067786:40451"," 268067788:23168",268067786, 40451,268067788, 23168,0.000337600,9.99999,"RIGHT", 187, 60, 60, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.042, 15.982, -17.335, 6.392,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.509, 1.13, 89.82, 88.70,260.72,180.78, 0.59, 82.96,-73.04,355.60,152182059.4,157.25,-73.05,355.50,-73.09,355.37,-73.00,355.36,-73.00,355.63,-73.09,355.64, 46.32,1783.76,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014284LC.IMG","LRO","LROC","nacl00000110"," M101014284LC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:56.685"," 2009-06-30 15:16:57.033"," 2009-06-30 15:16:58.769"," 1","268067816:43253"," 268067817:474"," 268067818:48727",268067817, 474,268067818, 48727,0.000337600,9.99999," LEFT", 196, 0, 0, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.063, 15.287, -20.637, 6.472,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.47, 0.55, 0.512, 1.70, 89.73, 91.42,278.73,181.11, 0.59, 82.96,-71.40,355.43,152182088.0,157.25,-71.39,355.57,-71.44,355.45,-71.35,355.45,-71.35,355.69,-71.44,355.70, 46.95,1784.40,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014284RC.IMG","LRO","LROC","nacr00000110"," M101014284RC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:56.685"," 2009-06-30 15:16:57.033"," 2009-06-30 15:16:58.769"," 1","268067816:43253"," 268067817:474"," 268067818:48727",268067817, 474,268067818, 48727,0.000337600,9.99999,"RIGHT", 186, 0, 0, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.063, 16.002, -17.361, 7.495,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.47, 0.55, 0.512, 1.13, 89.80, 88.67,261.51,180.77, 0.59, 82.96,-71.40,355.43,152182088.0,157.25,-71.40,355.34,-71.45,355.22,-71.35,355.21,-71.35,355.45,-71.44,355.46, 46.95,1784.40,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014315LC.IMG","LRO","LROC","nacl00000111"," M101014315LC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:17:27.125"," 2009-06-30 15:17:27.473"," 2009-06-30 15:17:29.209"," 1"," 268067847:6553"," 268067847:29310"," 268067849:12027",268067847, 29310,268067849, 12027,0.000337600,9.99999," LEFT", 196, 20, 20, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.001, 15.350, -20.597, 6.236,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.48, 0.55, 0.516, 1.70, 89.70, 91.40,278.04,181.10, 0.59, 82.95,-69.75,355.29,152182116.7,157.25,-69.75,355.42,-69.79,355.31,-69.70,355.30,-69.70,355.53,-69.79,355.54, 47.64,1785.10,"A","-X" +" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014315RC.IMG","LRO","LROC","nacr00000111"," M101014315RC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:17:27.125"," 2009-06-30 15:17:27.473"," 2009-06-30 15:17:29.209"," 1"," 268067847:6553"," 268067847:29310"," 268067849:12027",268067847, 29310,268067849, 12027,0.000337600,9.99999,"RIGHT", 186, 20, 20, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.001, 16.044, -17.325, 8.829,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.48, 0.55, 0.515, 1.13, 89.78, 88.65,262.19,180.77, 0.59, 82.95,-69.75,355.29,152182116.7,157.25,-69.75,355.20,-69.80,355.09,-69.70,355.08,-69.70,355.31,-69.80,355.32, 47.64,1785.10,"A","-X" From 26023ecd8d84a21a29cfe8ca7a145efb6e0d6ffa Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 21 Feb 2022 16:07:40 -0800 Subject: [PATCH 05/57] working on lroc --- README.md | 13 ++++++++++++- pdsc/config/lroc_cdr_metadata.yaml | 8 ++++---- pdsc/table.py | 19 ++++++++++++++++--- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e1bfc32..1923bcd 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/ Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly): ``` -pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise_mini/ +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise_mini/ ``` # CTX example: @@ -67,3 +67,14 @@ Or, a mini example (I took a subset of rows from the table file and updated the ``` pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputs_ctx_mini/ ``` + + +# LROC + +Working on this + +``` +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ +``` + + diff --git a/pdsc/config/lroc_cdr_metadata.yaml b/pdsc/config/lroc_cdr_metadata.yaml index fe7ae9b..a5f843d 100644 --- a/pdsc/config/lroc_cdr_metadata.yaml +++ b/pdsc/config/lroc_cdr_metadata.yaml @@ -7,14 +7,14 @@ columns: - [NORTH_AZIMUTH, north_azimuth, real] - [SCALED_PIXEL_WIDTH, pixel_width, real] - [VOLUME_ID, volume_id, text] - - [FILE_NAME_SPECIFICATION, file_name_specification, text] + - [FILE_SPECIFICATION_NAME, file_name_specification, text] - [PRODUCT_VERSION_ID, product_version_id, text] - [TARGET_NAME, target_name, text] - [ORBIT_NUMBER, orbit_number, integer] - [MISSION_PHASE_NAME, mission_phase_name, text] - [RATIONALE_DESC, description, text] - - [START_TIME, start_time, timestamp] - - [STOP_TIME, stop_time, timestamp] + - [START_TIME, start_time, text] + - [STOP_TIME, stop_time, text] - [SPACECRAFT_CLOCK_START_COUNT, sclk_start, real] - [SPACECRAFT_CLOCK_STOP_COUNT, sclk_stop, real] - [FILTER_NAME, filter_name, text] @@ -36,7 +36,7 @@ scale_factors: SOLAR_DISTANCE: 1000 # km to m index: - - observation_id + - product_id segmentation: resolution: 50000 diff --git a/pdsc/table.py b/pdsc/table.py index e1be5bc..54cf37d 100644 --- a/pdsc/table.py +++ b/pdsc/table.py @@ -69,6 +69,19 @@ def themis_datetime(s): """ return datetime.strptime(s, '%Y-%m-%dT%H:%M:%S.%f') +def lroc_datetime(s): + """ + Parses date/time format found in lroc cumulative index files + + :param s: datetime string + :return: :py:class:`datetime.datetime` object + + >>> lroc_datetime('1985-10-26 01:20:00') + datetime.datetime(1985, 10, 26, 1, 20) + """ + return datetime.strptime(s.strip(), '%Y-%m-%d %H:%M:%S') + + def hirise_datetime(s): """ Parses date/time format found in HiRISE cumulative index files @@ -636,8 +649,8 @@ class LrocTableColumn(PdsTableColumn): """ SPECIAL_TYPES = { - 'START_TIME': PdsColumnType(hirise_datetime), - 'STOP_TIME': PdsColumnType(hirise_datetime), + 'START_TIME': PdsColumnType(lroc_datetime), + 'STOP_TIME': PdsColumnType(lroc_datetime), 'SPACECRAFT_CLOCK_START_COUNT': PdsColumnType(ctx_sclk), 'SPACECRAFT_CLOCK_STOP_COUNT': PdsColumnType(ctx_sclk), } @@ -707,7 +720,7 @@ class LrocCdrTable(PdsTable): :py:class:`LrocTableColumn` for parsing columns """ - TABLE_OBJECT_NAME = 'Lroc_CDR_INDEX_TABLE' + TABLE_OBJECT_NAME = 'INDEX_TABLE' """ The Lroc CDR table has a custom name """ From 8225480d0720b26f7be4d532a79aebb54160ad66 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 21 Feb 2022 16:36:22 -0800 Subject: [PATCH 06/57] got lroc metadata working --- pdsc/config/lroc_cdr_metadata.yaml | 3 +-- pdsc/table.py | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/pdsc/config/lroc_cdr_metadata.yaml b/pdsc/config/lroc_cdr_metadata.yaml index a5f843d..0e72e80 100644 --- a/pdsc/config/lroc_cdr_metadata.yaml +++ b/pdsc/config/lroc_cdr_metadata.yaml @@ -1,5 +1,5 @@ columns: - - [PRODUCT_ID, observation_id, text] + - [PRODUCT_ID, product_id, text] - [LINE_SAMPLES, samples, integer] - [IMAGE_LINES, lines, integer] - [CENTER_LATITUDE, center_latitude, real] @@ -17,7 +17,6 @@ columns: - [STOP_TIME, stop_time, text] - [SPACECRAFT_CLOCK_START_COUNT, sclk_start, real] - [SPACECRAFT_CLOCK_STOP_COUNT, sclk_stop, real] - - [FILTER_NAME, filter_name, text] - [EMISSION_ANGLE, emission_angle, real] - [INCIDENCE_ANGLE, incidence_angle, real] - [PHASE_ANGLE, phase_angle, real] diff --git a/pdsc/table.py b/pdsc/table.py index 54cf37d..b866dee 100644 --- a/pdsc/table.py +++ b/pdsc/table.py @@ -73,14 +73,13 @@ def lroc_datetime(s): """ Parses date/time format found in lroc cumulative index files - :param s: datetime string + :param s: string :return: :py:class:`datetime.datetime` object >>> lroc_datetime('1985-10-26 01:20:00') datetime.datetime(1985, 10, 26, 1, 20) """ - return datetime.strptime(s.strip(), '%Y-%m-%d %H:%M:%S') - + return datetime.strptime(s.strip(), '%Y-%m-%d %H:%M:%S.%f') def hirise_datetime(s): """ From d708761c3fa605cddaf3f478f80fa8fe570e62bc Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 21 Feb 2022 19:03:28 -0800 Subject: [PATCH 07/57] lroc loc --- pdsc/config/lroc_cdr_metadata.yaml | 4 +-- pdsc/ingest.py | 9 ++++-- pdsc/localization.py | 48 ++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/pdsc/config/lroc_cdr_metadata.yaml b/pdsc/config/lroc_cdr_metadata.yaml index 0e72e80..1668138 100644 --- a/pdsc/config/lroc_cdr_metadata.yaml +++ b/pdsc/config/lroc_cdr_metadata.yaml @@ -7,7 +7,7 @@ columns: - [NORTH_AZIMUTH, north_azimuth, real] - [SCALED_PIXEL_WIDTH, pixel_width, real] - [VOLUME_ID, volume_id, text] - - [FILE_SPECIFICATION_NAME, file_name_specification, text] + - [FILE_SPECIFICATION_NAME, file_specification_name, text] - [PRODUCT_VERSION_ID, product_version_id, text] - [TARGET_NAME, target_name, text] - [ORBIT_NUMBER, orbit_number, integer] @@ -35,7 +35,7 @@ scale_factors: SOLAR_DISTANCE: 1000 # km to m index: - - product_id + - file_specification_name segmentation: resolution: 50000 diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 711dacb..1bb1fee 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -5,6 +5,7 @@ import os import yaml import sqlite3 +import pdb from .table import parse_table from .metadata import PdsMetadata, METADATA_DB_SUFFIX @@ -175,8 +176,12 @@ def store_segments(outputfile, metadata, config): s = TriSegmentedFootprint(m, resolution, localizer_kwargs) for si in s.segments: segments.append(si) - observation_ids.append(s.metadata.observation_id) - + # erd: check if observation_id attribute exists + if hasattr(s.metadata, 'observation_id'): + observation_ids.append(s.metadata.observation_id) + else: + # erd: lroc does not have observation_id + observation_ids.append(s.metadata.file_specification_name) except (TypeError, ValueError): continue diff --git a/pdsc/localization.py b/pdsc/localization.py index 614a2e6..4a5b537 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -27,11 +27,16 @@ from geographiclib.geodesic import Geodesic from .util import registerer, standard_progress_bar +import pdb # https://tharsis.gsfc.nasa.gov/geodesy.html MARS_RADIUS_M = 3396200. MARS_FLATTENING = 1.0 / 169.8 +#https://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html +MOON_RADIUS_M = 1736000 +MOON_FLATTENING = 0.0012 + LOCALIZERS = {} register_localizer = registerer(LOCALIZERS) @@ -63,6 +68,10 @@ def geodesic_distance(latlon1, latlon2, radius=MARS_RADIUS_M): >>> geodesic_distance((0, 0), (0, np.pi)) 10669476.970121656 """ + print('The moons radius is: 1736000') + print('Radius used is: ') + print(radius) + pdb.set_trace() haversine = DistanceMetric.get_metric('haversine') return float(radius*haversine.pairwise([latlon1], [latlon2])) @@ -198,6 +207,8 @@ def latlon_to_pixel(self, lat, lon, resolution_m=None, resolution_pix=0.1): loc = np.deg2rad([lat, lon]) + print('Inside latlon_to_pixel') + print(self.BODY_RADIUS) def f(u): loc_u = np.deg2rad(self.pixel_to_latlon(*u)) return geodesic_distance(loc, loc_u, self.BODY_RADIUS) @@ -613,6 +624,43 @@ def __init__(self, metadata): metadata.north_azimuth, 1 ) +@register_localizer('lroc_cdr') +class LrocLocalizer(GeodesicLocalizer): + """ + A localizer for the Lroc CDR observations (subclass of + :py:class:`GeodesicLocalizer`) + """ + + DEFAULT_RESOLUTION_M = 1e-6 + """ + Sets the default resolution for lroc CDR localization + """ + + BODY_RADIUS = MOON_RADIUS_M + BODY = Geodesic(MOON_RADIUS_M, MOON_FLATTENING) + + def __init__(self, metadata): + """ + :param metadata: + """ + helper_localizer = GeodesicLocalizer( + metadata.lines / 2.0, metadata.samples / 2.0, + metadata.center_latitude, metadata.center_longitude, + metadata.lines, metadata.samples, + metadata.pixel_width, + metadata.pixel_width, + metadata.north_azimuth, 1 + ) + + super(LrocLocalizer, self).__init__( + metadata.lines / 2.0, metadata.samples / 2.0, + metadata.center_latitude, metadata.center_longitude, + metadata.lines, metadata.samples, + metadata.pixel_width, + metadata.pixel_width, + metadata.north_azimuth, 1 + ) + @register_localizer('hirise_edr') class HiRiseLocalizer(GeodesicLocalizer): """ From e93a8d32b401ac347eadb9b529395a3aee934776 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 21 Feb 2022 20:22:55 -0800 Subject: [PATCH 08/57] runs on lroc now using the moon radius --- pdsc/ingest.py | 29 +++++++++++++++++++++++------ pdsc/localization.py | 9 +++++---- pdsc/segment.py | 25 ++++++++++++++----------- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 1bb1fee..a801fe5 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -14,6 +14,11 @@ TriSegmentedFootprint, SegmentTree) from .util import standard_progress_bar +# https://tharsis.gsfc.nasa.gov/geodesy.html +MARS_RADIUS_M = 3396200. +#https://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html +MOON_RADIUS_M = 1736000 + DEFAULT_CONFIG_DIR = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'config', @@ -135,7 +140,7 @@ def store_metadata(outputfile, instrument, table, config): for v in progress(cur.fetchall()) ] -def store_segments(outputfile, metadata, config): +def store_segments(outputfile, metadata, config, body_radius): """ Segments observations corresponding to each entry in ``metadata``, and stores these segments in a SQL database @@ -173,7 +178,7 @@ def store_segments(outputfile, metadata, config): progress = standard_progress_bar('Segmenting footprints') for m in progress(metadata): try: - s = TriSegmentedFootprint(m, resolution, localizer_kwargs) + s = TriSegmentedFootprint(m, resolution, body_radius, localizer_kwargs) for si in s.segments: segments.append(si) # erd: check if observation_id attribute exists @@ -213,7 +218,7 @@ def store_segments(outputfile, metadata, config): return segments -def store_segment_tree(outputfile, segments): +def store_segment_tree(outputfile, segments, body_radius): """ Constructs a ball tree index for segmented observations and saves the resulting data structure to the specified output file. @@ -224,7 +229,7 @@ def store_segment_tree(outputfile, segments): :param segments: a collection of :py:class:`~pdsc.segment.TriSegment` objects """ - tree = SegmentTree(segments) + tree = SegmentTree(segments, body_radius) tree.save(outputfile) def ingest_idx(label_file, table_file, configpath, outputdir): @@ -246,6 +251,18 @@ def ingest_idx(label_file, table_file, configpath, outputdir): will be stored """ instrument, table = parse_table(label_file, table_file) + + # erd: radius will differ if mars vs moon + if 'lroc' in instrument: + # use moon radius + body_radius = MOON_RADIUS_M + print('using Moon radius in ingest_idx: ') + print(body_radius) + else: + body_radius = MARS_RADIUS_M + print('using Mars radius in ingest_idx: ') + print(body_radius) + if os.path.isdir(configpath): configfile = os.path.join(configpath, '%s_metadata.yaml' % instrument) else: @@ -271,10 +288,10 @@ def ingest_idx(label_file, table_file, configpath, outputdir): outputdir, '%s%s' % (instrument, SEGMENT_DB_SUFFIX) ) - segments = store_segments(outputfile, metadata, config) + segments = store_segments(outputfile, metadata, config, body_radius) outputfile = os.path.join( outputdir, '%s%s' % (instrument, SEGMENT_TREE_SUFFIX) ) - store_segment_tree(outputfile, segments) + store_segment_tree(outputfile, segments, body_radius) diff --git a/pdsc/localization.py b/pdsc/localization.py index 4a5b537..220f1d3 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -33,6 +33,7 @@ MARS_RADIUS_M = 3396200. MARS_FLATTENING = 1.0 / 169.8 +# erd: added moon info (before, assumed Mars only) #https://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html MOON_RADIUS_M = 1736000 MOON_FLATTENING = 0.0012 @@ -68,10 +69,10 @@ def geodesic_distance(latlon1, latlon2, radius=MARS_RADIUS_M): >>> geodesic_distance((0, 0), (0, np.pi)) 10669476.970121656 """ - print('The moons radius is: 1736000') - print('Radius used is: ') - print(radius) - pdb.set_trace() + #print('The moons radius is: 1736000') + #print('Radius used is: ') + #print(radius) + #print('------') haversine = DistanceMetric.get_metric('haversine') return float(radius*haversine.pairwise([latlon1], [latlon2])) diff --git a/pdsc/segment.py b/pdsc/segment.py index 83b58d6..2f45c17 100644 --- a/pdsc/segment.py +++ b/pdsc/segment.py @@ -73,7 +73,7 @@ class SegmentTree(object): observation segments within some radius of a query point """ - def __init__(self, segments, verbose=True): + def __init__(self, segments, verbose=True, body_radius=MARS_RADIUS_M): """ :param segments: collection of all observation segments :param verbose: if ``True`` display a progress bar as the index is being @@ -92,6 +92,7 @@ def __init__(self, segments, verbose=True): if verbose: print('Building index...') self.ball_tree = BallTree(data, metric='haversine') + self.body_radius = body_radius if verbose: print('...done.') def query_point(self, point): @@ -104,7 +105,7 @@ def query_point(self, point): :return: a collection of segment ids for segments that satisfy the query """ total_radius = point.radius + self.max_radius - haversine_radius = total_radius / MARS_RADIUS_M + haversine_radius = total_radius / self.body_radius X = np.deg2rad(point.latlon).reshape((1, -1)) return self.ball_tree.query_radius(X, haversine_radius)[0] @@ -118,7 +119,7 @@ def query_segment(self, segment): :return: a collection of segment ids for segments that satisfy the query """ total_radius = segment.radius + self.max_radius - haversine_radius = total_radius / MARS_RADIUS_M + haversine_radius = total_radius / self.body_radius X = np.deg2rad([[segment.center_latitude, segment.center_longitude]]) return self.ball_tree.query_radius(X, haversine_radius)[0] @@ -149,7 +150,7 @@ class TriSegment(object): for indexing and efficient querying. """ - def __init__(self, latlon0, latlon1, latlon2): + def __init__(self, latlon0, latlon1, latlon2, body_radius=MARS_RADIUS_M): """ The three points of the triangular segment are enumerated in *counterclockwise* order looking down on the surface. Each point is a @@ -163,6 +164,7 @@ def __init__(self, latlon0, latlon1, latlon2): represents the third point (index 2) in a triangular segment """ self.latlon_points = np.array([latlon0, latlon1, latlon2]) + self.body_radius = body_radius self._center_longitude = None self._center_latitude = None self._xyz_points = None @@ -227,7 +229,7 @@ def radius(self): if self._radius is None: llcenter = np.deg2rad([self.center_latitude, self.center_longitude]) self._radius = np.max([ - geodesic_distance(llcenter, np.deg2rad(ll)) + geodesic_distance(llcenter, np.deg2rad(ll), radius=self.body_radius) for ll in self.latlon_points ]) return self._radius @@ -307,7 +309,7 @@ def distance_to_point(self, xyz): p = np.deg2rad(xyz2latlon(xyz)) return np.min([ - geodesic_distance(p, pi) + geodesic_distance(p, pi, radius=self.body_radius) for pi in np.deg2rad(points_to_check) ]) @@ -345,7 +347,7 @@ class SegmentedFootprint(with_metaclass(abc.ABCMeta, object)): Base class for segmenting an observation footprint """ - def __init__(self, metadata, resolution, localizer_kwargs): + def __init__(self, metadata, resolution, body_radius, localizer_kwargs): """ :param metadata: a :py:class:`~pdsc.metadata.PdsMetadata` object @@ -357,6 +359,7 @@ def __init__(self, metadata, resolution, localizer_kwargs): """ self.metadata = metadata self.resolution = resolution + self.body_radius = body_radius self.localizer = get_localizer(metadata, **localizer_kwargs) n_row_chunks = int(np.ceil( self.localizer.observation_length_m / resolution @@ -398,8 +401,8 @@ def _segment(self): for c in range(L.shape[1]-1): for r in range(L.shape[0]-1): if self.localizer.flight_direction > 0: - yield TriSegment(L[r, c], L[r, c+1], L[r+1, c]) - yield TriSegment(L[r+1, c+1], L[r+1, c], L[r, c+1]) + yield TriSegment(L[r, c], L[r, c+1], L[r+1, c], body_radius=self.body_radius) + yield TriSegment(L[r+1, c+1], L[r+1, c], L[r, c+1], body_radius=self.body_radius) else: - yield TriSegment(L[r, c], L[r+1, c], L[r, c+1]) - yield TriSegment(L[r+1, c+1], L[r, c+1], L[r+1, c]) + yield TriSegment(L[r, c], L[r+1, c], L[r, c+1], body_radius=self.body_radius) + yield TriSegment(L[r+1, c+1], L[r, c+1], L[r+1, c], body_radius=self.body_radius) From 7bc927fd902765dc567ea71a79a3035508dfa317 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 23 Feb 2022 10:15:09 -0800 Subject: [PATCH 09/57] add localization for browse imagery --- README.md | 2 +- pdsc/localization.py | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1923bcd..13d727f 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/ # LROC -Working on this +Here is a mini example for lroc: ``` pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ diff --git a/pdsc/localization.py b/pdsc/localization.py index 220f1d3..93890ca 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -626,14 +626,16 @@ def __init__(self, metadata): ) @register_localizer('lroc_cdr') -class LrocLocalizer(GeodesicLocalizer): +class LrocCdrLocalizer(GeodesicLocalizer): """ A localizer for the Lroc CDR observations (subclass of :py:class:`GeodesicLocalizer`) + erd: Note, in progress """ DEFAULT_RESOLUTION_M = 1e-6 """ + erd: Need to check this value Sets the default resolution for lroc CDR localization """ @@ -653,7 +655,7 @@ def __init__(self, metadata): metadata.north_azimuth, 1 ) - super(LrocLocalizer, self).__init__( + super(LrocCdrLocalizer, self).__init__( metadata.lines / 2.0, metadata.samples / 2.0, metadata.center_latitude, metadata.center_longitude, metadata.lines, metadata.samples, @@ -662,6 +664,33 @@ def __init__(self, metadata): metadata.north_azimuth, 1 ) +class LrocCdrBrowseLocalizer(LrocCdrLocalizer): + """ + erd: A localizer for the Lroc CDR "browse" images (subclass of + :py:class:`LrocCdrLocalizer`) + This classifier is included for convenience; it simply scales the pixel + coordinates of the browse image to/from those of the full image before/after + calling the super-class implementation. + """ + + def __init__(self, metadata): + """ + :param metadata: + "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + """ + super(LrocCdrBrowseLocalizer, self).__init__(metadata) + self.scale_factor = 0.5 # browse images are at half the resolution + + def pixel_to_latlon(self, row, col): + return super(LrocCdrBrowseLocalizer, self).pixel_to_latlon( + row / self.scale_factor, col / self.scale_factor + ) + + def latlon_to_pixel(self, lat, lon): + pix = super(LrocCdrBrowseLocalizer, self).latlon_to_pixel(lat, lon) + return pix[0]*self.scale_factor, pix[1]*self.scale_factor + + @register_localizer('hirise_edr') class HiRiseLocalizer(GeodesicLocalizer): """ From f17663b6199bb7f48373c93ccd1138a561a14dcc Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 23 Feb 2022 12:56:40 -0800 Subject: [PATCH 10/57] readme update --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 13d727f..82f4949 100644 --- a/README.md +++ b/README.md @@ -77,4 +77,13 @@ Here is a mini example for lroc: pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ ``` +# Basic Usage + +Follow the docs for basic usage, but make sure you're in the python prompt: + +``` +python +>>> import pdsc +``` + From ca89c61bb8b27bb66c3ec0b0caa128d99d468978 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 23 Feb 2022 14:57:58 -0800 Subject: [PATCH 11/57] updated config file w/ obs i --- pdsc/config/lroc_cdr_metadata.yaml | 4 ++-- pdsc/ingest.py | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/pdsc/config/lroc_cdr_metadata.yaml b/pdsc/config/lroc_cdr_metadata.yaml index 1668138..44d8c3a 100644 --- a/pdsc/config/lroc_cdr_metadata.yaml +++ b/pdsc/config/lroc_cdr_metadata.yaml @@ -1,5 +1,5 @@ columns: - - [PRODUCT_ID, product_id, text] + - [PRODUCT_ID, observation_id, text] - [LINE_SAMPLES, samples, integer] - [IMAGE_LINES, lines, integer] - [CENTER_LATITUDE, center_latitude, real] @@ -35,7 +35,7 @@ scale_factors: SOLAR_DISTANCE: 1000 # km to m index: - - file_specification_name + - observation_id segmentation: resolution: 50000 diff --git a/pdsc/ingest.py b/pdsc/ingest.py index a801fe5..a4f414c 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -185,8 +185,9 @@ def store_segments(outputfile, metadata, config, body_radius): if hasattr(s.metadata, 'observation_id'): observation_ids.append(s.metadata.observation_id) else: + raise ValueError('Please rename your index col to observation_id in the config file') # erd: lroc does not have observation_id - observation_ids.append(s.metadata.file_specification_name) + #observation_ids.append(s.metadata.file_specification_name) except (TypeError, ValueError): continue From a7c356629a1d85ba1491c4f55d0a54ccb8c2c234 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 28 Feb 2022 14:06:42 -0800 Subject: [PATCH 12/57] added browse version --- README.md | 13 +++++++++++++ pdsc/localization.py | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/README.md b/README.md index 82f4949..c57e624 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,12 @@ pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/ # LROC +Full lroc database: + +``` +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +``` + Here is a mini example for lroc: ``` @@ -82,8 +88,15 @@ pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pd Follow the docs for basic usage, but make sure you're in the python prompt: ``` +# set the directory where the database is stored: +export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ python >>> import pdsc +>>> pds_client = pdsc.PdsClient() +>>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101014437RC') +>>> mydata = metadata[0] +>>> localizer = pdsc.get_localizer(mydata, browse=True) +>>> lat, lon = localizer.pixel_to_latlon(10, 10) ``` diff --git a/pdsc/localization.py b/pdsc/localization.py index 93890ca..4ea7f66 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -625,7 +625,26 @@ def __init__(self, metadata): metadata.north_azimuth, 1 ) + + @register_localizer('lroc_cdr') +def hirise_rdr_localizer(metadata, browse=False): + """ + Constructs the appropriate LROC CDR localizer for the desired data + product type + + :param metadata: + "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + :param browse: + construct localizer for the BROWSE data product + + :return: a :py:class:`Localizer` for the appropriate data product + """ + if browse: + return LrocCdrBrowseLocalizer(metadata) + else: + return LrocCdrLocalizer(metadata) + class LrocCdrLocalizer(GeodesicLocalizer): """ A localizer for the Lroc CDR observations (subclass of From 0f3fb3683726955ed18e693c6c67f6df824aa839 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 28 Feb 2022 21:14:17 -0800 Subject: [PATCH 13/57] list comprehension for a given row --- scripts/get_distributed_samples.py | 117 +++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 scripts/get_distributed_samples.py diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py new file mode 100644 index 0000000..95ada52 --- /dev/null +++ b/scripts/get_distributed_samples.py @@ -0,0 +1,117 @@ +import os +import numpy as np +from sklearn.neighbors import DistanceMetric +from progressbar import ProgressBar, Bar, ETA +#from mpl_toolkits.basemap import Basemap +import matplotlib.pyplot as plt +from matplotlib.backends.backend_pdf import PdfPages +import pdsc +import pdb + +def get_lroc_metadata_from_id(lroc_id, pdsc_client=None): + if pdsc_client is None: + pdsc_client = pdsc.PdsClient() + + meta = pdsc_client.query_by_observation_id('lroc', lroc_id) + + if len(meta) < 0: + raise ValueError('No metadata found for "%s"' % lroc_id) + + if len(meta) > 1: + raise ValueError('Multiple metadata entries found for "%s"' % lroc_id) + + # Must be true given the checks above + assert len(meta) == 1 + meta = meta.pop() + return meta + +def get_lroc_observation_from_id(lroc_id, pdsc_client=None, cacheroot=None, + return_path=False): + + meta = get_lroc_metadata_from_id(lroc_id, pdsc_client=pdsc_client) + + return get_lroc_observation_from_meta( + meta, cacheroot=cacheroot, return_path=return_path + ) + + +def get_latlon(client, lroc_id, cacheroot): + try: + obs_data = get_lroc_observation_from_id(lroc_id=lroc_id, pdsc_client=client, + cacheroot=cacheroot) + except: + print("Error found in " + lroc_id + ", skipping.") + return None + + loc = pdsc.get_localizer(obs_data.meta) + + latlon = loc.pixel_to_latlon(obs_data.meta.lines / 2, obs_data.meta.samples / 2) + return latlon + +def pick_next(selected, latlon): + dist = DistanceMetric.get_metric('haversine') + S = latlon[np.array(selected)] + D = dist.pairwise(S, latlon) + # Distance to closest selected point + Dmin = np.min(D, axis=0) + # Index of observation with farthest distance to closest selected point + return np.argmax(Dmin) + +def plot_selected(latlon): + fig = plt.figure(figsize=(7, 5))#, dpi=300) + ax = fig.add_subplot(111) + + m = Basemap(projection='mill') + m.drawparallels(np.linspace(-75, 75, 7), + labels=[True, True, False, False], fontsize=14) + m.drawmeridians(np.linspace(-150, 150, 7), + labels=[False, False, False, True], fontsize=14) + m.warpimage(MAP_FILE) + + x, y = m(latlon[:, 1], latlon[:, 0]) + m.plot(x, y, 'ko', markersize=7, markeredgecolor='w') + + return fig + +def main(outputfile, number, plotfile): + np.random.seed(0) + client = pdsc.PdsClient() + # get the lroc NAC data + full_data = client.query('lroc_cdr') + nac_data = [row for row in full_data if 'NAC' in row.file_specification_name] + # get the ids + + # loop through all the data and get the lat/lon + + latlon = np.deg2rad(np.array([ + get_latlon(client, i) for i in nac_data) + ])) + ids = np.array(ids) + + # Start with a random observation + selected = [np.random.choice(len(ids))] + progress = ProgressBar(widgets=['Selecting: ', Bar('='), ETA()]) + for i in progress(range(1, number)): + selected.append(pick_next(selected, latlon)) + selected = np.array(selected) + + selected_ids = ids[selected] + selected_pairs = [] + for i in selected_ids: + selected_pairs.append(np.random.choice(sorted(overlaps[i]))) + + with open(outputfile, 'w') as f: + for i, j in zip(selected_ids, selected_pairs): + f.write('%s,%s\n' % (i, j)) + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) + + outputfile_d = '~/PDS/lroc_proj/pdsc/outputs/lroc/output.txt' + + parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) + parser.add_argument('-n', '--number', default=10, type=int) + parser.add_argument('-p', '--plotfile', default=None) + args = parser.parse_args() + main(**vars(args)) From bdd97e45c750009dcdcccc6bb1cbf76697db2c9d Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 14:26:22 -0800 Subject: [PATCH 14/57] script for distributed samples around the lunar glob --- README.md | 15 +++ scripts/get_distributed_samples.py | 147 ++++++++++++++--------------- 2 files changed, 85 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index c57e624..4e9b748 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,11 @@ of Technology. ---- +# Updates + +Emily Dunkel: updated for LROC + + # Usage First, create and activate a barebones env using python 3.7: @@ -83,6 +88,9 @@ Here is a mini example for lroc: pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ ``` +Note: I need to check SIS documentation for localization function coordinate system, but PDSC is now able to handle bodies other than just Mars (was originally hard-coded). + + # Basic Usage Follow the docs for basic usage, but make sure you're in the python prompt: @@ -99,4 +107,11 @@ python >>> lat, lon = localizer.pixel_to_latlon(10, 10) ``` +# Scripts + +To get lroc distributed samples around the globe, you can call get_distritubed_samples.py. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: +``` +export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc_mini/ +python scripts/get_distributed_samples.py +``` diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index 95ada52..37cc896 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -8,110 +8,103 @@ import pdsc import pdb -def get_lroc_metadata_from_id(lroc_id, pdsc_client=None): - if pdsc_client is None: - pdsc_client = pdsc.PdsClient() - - meta = pdsc_client.query_by_observation_id('lroc', lroc_id) - - if len(meta) < 0: - raise ValueError('No metadata found for "%s"' % lroc_id) - - if len(meta) > 1: - raise ValueError('Multiple metadata entries found for "%s"' % lroc_id) - - # Must be true given the checks above - assert len(meta) == 1 - meta = meta.pop() - return meta - -def get_lroc_observation_from_id(lroc_id, pdsc_client=None, cacheroot=None, - return_path=False): - - meta = get_lroc_metadata_from_id(lroc_id, pdsc_client=pdsc_client) - - return get_lroc_observation_from_meta( - meta, cacheroot=cacheroot, return_path=return_path - ) - - -def get_latlon(client, lroc_id, cacheroot): - try: - obs_data = get_lroc_observation_from_id(lroc_id=lroc_id, pdsc_client=client, - cacheroot=cacheroot) - except: - print("Error found in " + lroc_id + ", skipping.") - return None - - loc = pdsc.get_localizer(obs_data.meta) - - latlon = loc.pixel_to_latlon(obs_data.meta.lines / 2, obs_data.meta.samples / 2) +# Emily Dunkel +# 2022 +# Get maximally distant lroc imagery +# Selects a random image, then the maximally distant image from that, then for each image, get the minimum distance to every already select point, then take the max +# This will give us distributed samples around the globe +# Based on script: https://github-fn.jpl.nasa.gov/COSMIC/COSMIC_CTX_impacts/commit/e4c167a2e4d9e345693cd5e25df0149f5d641653 + +def get_latlon(row): + """ + Return center lat/lon of image + + Inputs + ------ + row: PdsMetadata + single row in table, information for a single image + + Returns + ------- + latlon: (float, float) + (latitude in radians, longitude in radians + """ + # latlon of the center of the image + latlon = np.deg2rad(float(row.center_latitude)), np.deg2rad(float(row.center_longitude)) return latlon def pick_next(selected, latlon): + """ + Return the index of the next selected point + + Inputs + ------ + selected: list of integers + index of previously selected points + latlon: numpy array of shape (number_of_images, 2) + latitude and longitude of all images + + Returns + ------- + returns: integer + index of image that is farthest away to the selected points + """ dist = DistanceMetric.get_metric('haversine') S = latlon[np.array(selected)] D = dist.pairwise(S, latlon) - # Distance to closest selected point + # Distance to closest selected points Dmin = np.min(D, axis=0) # Index of observation with farthest distance to closest selected point return np.argmax(Dmin) -def plot_selected(latlon): - fig = plt.figure(figsize=(7, 5))#, dpi=300) - ax = fig.add_subplot(111) - - m = Basemap(projection='mill') - m.drawparallels(np.linspace(-75, 75, 7), - labels=[True, True, False, False], fontsize=14) - m.drawmeridians(np.linspace(-150, 150, 7), - labels=[False, False, False, True], fontsize=14) - m.warpimage(MAP_FILE) - - x, y = m(latlon[:, 1], latlon[:, 0]) - m.plot(x, y, 'ko', markersize=7, markeredgecolor='w') - - return fig - -def main(outputfile, number, plotfile): +def main(outputfile, number): + """ + Returns list of images that are spread throughout the globe + + Inputs + ------ + outputfile: str, path to outputfile + file with list of images + number: int + number of images to return + """ np.random.seed(0) client = pdsc.PdsClient() + # get the lroc NAC data full_data = client.query('lroc_cdr') - nac_data = [row for row in full_data if 'NAC' in row.file_specification_name] - # get the ids + nac_data = [row for row in full_data if ('NAC' in row.file_specification_name and 'MOON' in row.target_name)] - # loop through all the data and get the lat/lon - - latlon = np.deg2rad(np.array([ - get_latlon(client, i) for i in nac_data) - ])) - ids = np.array(ids) - - # Start with a random observation - selected = [np.random.choice(len(ids))] - progress = ProgressBar(widgets=['Selecting: ', Bar('='), ETA()]) - for i in progress(range(1, number)): + # get the number of NAC observations + num_obs = len(nac_data) + print('Number of observations = ', num_obs) + + # loop through the nac data and get the lat/lon + latlon = np.array([get_latlon(row) for row in nac_data]) + ids = np.array([row.file_specification_name for row in full_data]) + + # start with a random observation + selected = [np.random.choice(num_obs)] + + # select the maximally distance image + for ii in range(number): selected.append(pick_next(selected, latlon)) - selected = np.array(selected) + selected = np.array(selected) + # filenames of selected cases selected_ids = ids[selected] - selected_pairs = [] - for i in selected_ids: - selected_pairs.append(np.random.choice(sorted(overlaps[i]))) with open(outputfile, 'w') as f: - for i, j in zip(selected_ids, selected_pairs): - f.write('%s,%s\n' % (i, j)) + for i in selected_ids: + f.write('%s\n' % (i)) if __name__ == '__main__': import argparse parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) - outputfile_d = '~/PDS/lroc_proj/pdsc/outputs/lroc/output.txt' + outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) parser.add_argument('-n', '--number', default=10, type=int) - parser.add_argument('-p', '--plotfile', default=None) args = parser.parse_args() main(**vars(args)) From 582c69be76d355e70a1e23377af908bba195e8d9 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 14:32:47 -0800 Subject: [PATCH 15/57] bug fix in selected indices --- scripts/get_distributed_samples.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index 37cc896..f5cb03a 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -81,7 +81,7 @@ def main(outputfile, number): # loop through the nac data and get the lat/lon latlon = np.array([get_latlon(row) for row in nac_data]) - ids = np.array([row.file_specification_name for row in full_data]) + ids = np.array([row.file_specification_name for row in nac_data]) # start with a random observation selected = [np.random.choice(num_obs)] @@ -93,7 +93,6 @@ def main(outputfile, number): selected = np.array(selected) # filenames of selected cases selected_ids = ids[selected] - with open(outputfile, 'w') as f: for i in selected_ids: f.write('%s\n' % (i)) From ccf8593e07c84cdce68ff1cdfc4782d0a303ac78 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 14:42:09 -0800 Subject: [PATCH 16/57] display more output --- scripts/get_distributed_samples.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index f5cb03a..87d46bf 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -77,17 +77,21 @@ def main(outputfile, number): # get the number of NAC observations num_obs = len(nac_data) - print('Number of observations = ', num_obs) + print('Total number of observations = ', num_obs) # loop through the nac data and get the lat/lon + print('Getting every lat/lon') latlon = np.array([get_latlon(row) for row in nac_data]) + print('Getting every filename') ids = np.array([row.file_specification_name for row in nac_data]) # start with a random observation + print('Selected 0th observation') selected = [np.random.choice(num_obs)] # select the maximally distance image - for ii in range(number): + for ii in range(1, number): + print('Getting observation #: ', ii) selected.append(pick_next(selected, latlon)) selected = np.array(selected) From 0b3167303818cd3b951b45aebde6397813e18e72 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 14:51:12 -0800 Subject: [PATCH 17/57] more printing out --- scripts/get_distributed_samples.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index 87d46bf..f1c1d67 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -72,7 +72,9 @@ def main(outputfile, number): client = pdsc.PdsClient() # get the lroc NAC data + print('Querying the data') full_data = client.query('lroc_cdr') + print('Selecting the NAC rows') nac_data = [row for row in full_data if ('NAC' in row.file_specification_name and 'MOON' in row.target_name)] # get the number of NAC observations @@ -105,7 +107,8 @@ def main(outputfile, number): import argparse parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) - outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' + #outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' + outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected.txt' parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) parser.add_argument('-n', '--number', default=10, type=int) From ec712722fa8db6f095160be96fb738ce8385b0a0 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 15:00:24 -0800 Subject: [PATCH 18/57] selected 10 images to start --- inputs/lroc/selected.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 inputs/lroc/selected.txt diff --git a/inputs/lroc/selected.txt b/inputs/lroc/selected.txt new file mode 100644 index 0000000..ac5b4cb --- /dev/null +++ b/inputs/lroc/selected.txt @@ -0,0 +1,10 @@ + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011109/NAC/M157867349LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012085/NAC/M187283366RC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG From 3e140cfdb9453800fdc53a8ee72f172a217de00f Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 15:06:05 -0800 Subject: [PATCH 19/57] update default number of files --- scripts/get_distributed_samples.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index f1c1d67..114f3fd 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -109,8 +109,9 @@ def main(outputfile, number): #outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected.txt' + num_d = 5 parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) - parser.add_argument('-n', '--number', default=10, type=int) + parser.add_argument('-n', '--number', default=num_d, type=int) args = parser.parse_args() main(**vars(args)) From 55b58bd5a81fa73cb8712f76f58d14e376ea9f31 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 16:01:14 -0800 Subject: [PATCH 20/57] initial 5 examples selected --- inputs/lroc/selected.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/inputs/lroc/selected.txt b/inputs/lroc/selected.txt index ac5b4cb..ff3aa4f 100644 --- a/inputs/lroc/selected.txt +++ b/inputs/lroc/selected.txt @@ -3,8 +3,3 @@ LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG From f9dfa1d2c332c8c6f0001603e865504344566630 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 2 Mar 2022 17:20:19 -0800 Subject: [PATCH 21/57] increased number since some do not exist --- README.md | 3 ++- inputs/lroc/selected.txt | 15 +++++++++++++++ scripts/get_distributed_samples.py | 2 +- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4e9b748..bf232bc 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,7 @@ python To get lroc distributed samples around the globe, you can call get_distritubed_samples.py. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: ``` -export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc_mini/ +conda activate p37 +export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ python scripts/get_distributed_samples.py ``` diff --git a/inputs/lroc/selected.txt b/inputs/lroc/selected.txt index ff3aa4f..e7b4df4 100644 --- a/inputs/lroc/selected.txt +++ b/inputs/lroc/selected.txt @@ -3,3 +3,18 @@ LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021264/NAC/M1386823270LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010027/NAC/M119217559LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018144/NAC/M1281817404LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013002/NAC/M1111784848LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009232/NAC/M105422456RC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012132/NAC/M191388799RC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1029/DATA/ESM3/2016286/NAC/M1230942106RC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016351/NAC/M1236535574RC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012021/NAC/M181748683LC.IMG + LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014091/NAC/M1150953976RC.IMG diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index 114f3fd..b127e77 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -109,7 +109,7 @@ def main(outputfile, number): #outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected.txt' - num_d = 5 + num_d = 20 parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) parser.add_argument('-n', '--number', default=num_d, type=int) From 3e61969779ea9ea79d3ee7ed52355ab656f1547b Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 14 Mar 2022 14:35:38 -0700 Subject: [PATCH 22/57] save the solar azimuth to file --- inputs/lroc/selected_withsun.txt | 15 +++++++++++++++ scripts/get_distributed_samples.py | 13 ++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 inputs/lroc/selected_withsun.txt diff --git a/inputs/lroc/selected_withsun.txt b/inputs/lroc/selected_withsun.txt new file mode 100644 index 0000000..b733696 --- /dev/null +++ b/inputs/lroc/selected_withsun.txt @@ -0,0 +1,15 @@ + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011109/NAC/M157867349LC.IMG, 114.16 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012085/NAC/M187283366RC.IMG, 263.04 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG, 181.5 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG, 170.3 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG, 194.4 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG, 183.43 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG, 190.67 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG, 236.19 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG, 192.85 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG, 223.42 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021264/NAC/M1386823270LC.IMG, 124.19 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010027/NAC/M119217559LC.IMG, 166.05 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018144/NAC/M1281817404LC.IMG, 226.34 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013002/NAC/M1111784848LC.IMG, 191.14 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009232/NAC/M105422456RC.IMG, 140.03 diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index b127e77..1f6b4b2 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -86,11 +86,13 @@ def main(outputfile, number): latlon = np.array([get_latlon(row) for row in nac_data]) print('Getting every filename') ids = np.array([row.file_specification_name for row in nac_data]) - + print('Getting every solar angle') + solar = np.array([row.sub_solar_azimuth for row in nac_data]) # start with a random observation print('Selected 0th observation') selected = [np.random.choice(num_obs)] + pdb.set_trace() # select the maximally distance image for ii in range(1, number): print('Getting observation #: ', ii) @@ -99,17 +101,18 @@ def main(outputfile, number): selected = np.array(selected) # filenames of selected cases selected_ids = ids[selected] + selected_solar = solar[selected] with open(outputfile, 'w') as f: - for i in selected_ids: - f.write('%s\n' % (i)) + for i, sun in zip(selected_ids, selected_solar): + f.write('%s, %s\n' % (i, sun)) if __name__ == '__main__': import argparse parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) #outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' - outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected.txt' - num_d = 20 + outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected_withsun.txt' + num_d = 15 parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) parser.add_argument('-n', '--number', default=num_d, type=int) From 46557fe0b44ffbfa0067417dbcdd1adbfd72249a Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 23 Mar 2022 14:02:36 -0700 Subject: [PATCH 23/57] point to script on deep learning repo --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index bf232bc..826b281 100644 --- a/README.md +++ b/README.md @@ -116,3 +116,7 @@ conda activate p37 export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ python scripts/get_distributed_samples.py ``` + +This will print a list of examples with their sun angle (which helps with labeling, since craters look different depending on where the sun is). + +I have a script to assemble the data from this list in the deep learning repository here: https://github.jpl.nasa.gov/PDSIMG/deep-learning/blob/master/src/lroc/salience/scripts/assemble_data.py From 8e2b8475ce894e68a578e21bc9ceabd25518a6e8 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 28 Mar 2022 20:49:19 -0700 Subject: [PATCH 24/57] readme update --- README.md | 3 ++- scripts/get_distributed_samples.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 826b281..65ebb93 100644 --- a/README.md +++ b/README.md @@ -113,8 +113,9 @@ To get lroc distributed samples around the globe, you can call get_distritubed_s ``` conda activate p37 +# point to database export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ -python scripts/get_distributed_samples.py +python scripts/get_distributed_samples.py -o OUTPUT/FILE -n NUM_SAMPLES ``` This will print a list of examples with their sun angle (which helps with labeling, since craters look different depending on where the sun is). diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index 1f6b4b2..8f8287c 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -111,8 +111,8 @@ def main(outputfile, number): parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) #outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' - outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected_withsun.txt' - num_d = 15 + outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected_withsun_250.txt' + num_d = 250 parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) parser.add_argument('-n', '--number', default=num_d, type=int) From 63575d7e87f45f91e2d2d051db29ef2c19dc2bab Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 28 Mar 2022 20:52:48 -0700 Subject: [PATCH 25/57] removing pdb --- scripts/get_distributed_samples.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index 8f8287c..38ccf50 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -92,7 +92,6 @@ def main(outputfile, number): print('Selected 0th observation') selected = [np.random.choice(num_obs)] - pdb.set_trace() # select the maximally distance image for ii in range(1, number): print('Getting observation #: ', ii) From 4cebd2021755d0ab785be6816761bfce72b6379c Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 30 Mar 2022 07:52:38 -0700 Subject: [PATCH 26/57] added selected --- inputs/lroc/README.md | 1 + inputs/lroc/selected.txt | 20 --- inputs/lroc/selected_withsun.txt | 15 -- inputs/lroc/selected_withsun_250.txt | 250 +++++++++++++++++++++++++++ 4 files changed, 251 insertions(+), 35 deletions(-) create mode 100644 inputs/lroc/README.md delete mode 100644 inputs/lroc/selected.txt delete mode 100644 inputs/lroc/selected_withsun.txt create mode 100644 inputs/lroc/selected_withsun_250.txt diff --git a/inputs/lroc/README.md b/inputs/lroc/README.md new file mode 100644 index 0000000..bd67023 --- /dev/null +++ b/inputs/lroc/README.md @@ -0,0 +1 @@ +selected_withsun_250 is the set we've chosen to train LROCNet diff --git a/inputs/lroc/selected.txt b/inputs/lroc/selected.txt deleted file mode 100644 index e7b4df4..0000000 --- a/inputs/lroc/selected.txt +++ /dev/null @@ -1,20 +0,0 @@ - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011109/NAC/M157867349LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012085/NAC/M187283366RC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021264/NAC/M1386823270LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010027/NAC/M119217559LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018144/NAC/M1281817404LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013002/NAC/M1111784848LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009232/NAC/M105422456RC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012132/NAC/M191388799RC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1029/DATA/ESM3/2016286/NAC/M1230942106RC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016351/NAC/M1236535574RC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012021/NAC/M181748683LC.IMG - LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014091/NAC/M1150953976RC.IMG diff --git a/inputs/lroc/selected_withsun.txt b/inputs/lroc/selected_withsun.txt deleted file mode 100644 index b733696..0000000 --- a/inputs/lroc/selected_withsun.txt +++ /dev/null @@ -1,15 +0,0 @@ - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011109/NAC/M157867349LC.IMG, 114.16 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012085/NAC/M187283366RC.IMG, 263.04 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG, 181.5 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG, 170.3 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG, 194.4 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG, 183.43 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG, 190.67 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG, 236.19 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG, 192.85 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG, 223.42 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021264/NAC/M1386823270LC.IMG, 124.19 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010027/NAC/M119217559LC.IMG, 166.05 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018144/NAC/M1281817404LC.IMG, 226.34 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013002/NAC/M1111784848LC.IMG, 191.14 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009232/NAC/M105422456RC.IMG, 140.03 diff --git a/inputs/lroc/selected_withsun_250.txt b/inputs/lroc/selected_withsun_250.txt new file mode 100644 index 0000000..81bb23f --- /dev/null +++ b/inputs/lroc/selected_withsun_250.txt @@ -0,0 +1,250 @@ + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011109/NAC/M157867349LC.IMG, 114.16 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012085/NAC/M187283366RC.IMG, 263.04 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG, 181.5 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG, 170.3 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG, 194.4 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG, 183.43 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG, 190.67 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG, 236.19 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG, 192.85 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG, 223.42 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021264/NAC/M1386823270LC.IMG, 124.19 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010027/NAC/M119217559LC.IMG, 166.05 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018144/NAC/M1281817404LC.IMG, 226.34 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013002/NAC/M1111784848LC.IMG, 191.14 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009232/NAC/M105422456RC.IMG, 140.03 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012132/NAC/M191388799RC.IMG, 157.0 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1029/DATA/ESM3/2016286/NAC/M1230942106RC.IMG, 192.21 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016351/NAC/M1236535574RC.IMG, 173.68 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012021/NAC/M181748683LC.IMG, 185.15 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014091/NAC/M1150953976RC.IMG, 219.18 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1043A/DATA/ESM4/2020104/NAC/M1341449002RC.IMG, 224.61 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2021007/NAC/M1364627721LC.IMG, 180.46 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015043/NAC/M1178388248LC.IMG, 137.91 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012065/NAC/M185627657LC.IMG, 255.2 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015286/NAC/M1199352117RC.IMG, 186.96 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010310/NAC/M143668575RC.IMG, 129.73 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010288/NAC/M141812337RC.IMG, 250.03 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040A/DATA/ESM3/2019190/NAC/M1317353913RC.IMG, 210.52 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016085/NAC/M1213514982RC.IMG, 218.73 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012197/NAC/M1097014591RC.IMG, 201.23 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013086/NAC/M1118983285RC.IMG, 178.49 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1042C/DATA/ESM4/2020063/NAC/M1337869268RC.IMG, 185.32 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012166/NAC/M194274337LC.IMG, 183.77 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014028/NAC/M1145560677RC.IMG, 147.72 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1004/DATA/MAP/2010242/NAC/M137828075RC.IMG, 205.47 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1003/DATA/MAP/2010113/NAC/M126658607LC.IMG, 114.9 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014317/NAC/M1170504189RC.IMG, 183.42 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009330/NAC/M113855094RC.IMG, 212.93 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2019009/NAC/M1301694193RC.IMG, 198.91 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1043C/DATA/ESM4/2020157/NAC/M1345968488RC.IMG, 231.51 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2019013/NAC/M1302053560LC.IMG, 134.55 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017297/NAC/M1263444692RC.IMG, 186.13 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013049/NAC/M1115790663RC.IMG, 223.11 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013055/NAC/M1116344562LC.IMG, 221.14 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1045A/DATA/ESM4/2020284/NAC/M1356952094RC.IMG, 126.91 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2018357/NAC/M1300204103RC.IMG, 109.63 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016145/NAC/M1218731765RC.IMG, 174.79 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017276/NAC/M1261669033RC.IMG, 183.13 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015159/NAC/M1188367685RC.IMG, 195.95 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1047A/DATA/ESM4/2021097/NAC/M1372406643LC.IMG, 225.84 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015077/NAC/M1181351902LC.IMG, 146.69 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038C/DATA/ESM3/2019068/NAC/M1306735346LC.IMG, 176.25 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010028/NAC/M119333256LC.IMG, 173.97 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014037/NAC/M1146351355LC.IMG, 238.07 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011269/NAC/M171679982RC.IMG, 88.25 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011130/NAC/M159705621LC.IMG, 152.77 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013145/NAC/M1124109230RC.IMG, 186.69 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011292/NAC/M173628160LC.IMG, 241.82 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2018365/NAC/M1300919612RC.IMG, 255.12 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049B/DATA/ESM4/2021299/NAC/M1389874553LC.IMG, 171.76 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013045/NAC/M1115484343LC.IMG, 144.06 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011211/NAC/M166650072LC.IMG, 192.63 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020226/NAC/M1351980801RC.IMG, 181.82 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010332/NAC/M145562210RC.IMG, 157.32 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009254/NAC/M107280100RC.IMG, 117.67 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2020355/NAC/M1363072772RC.IMG, 169.9 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017218/NAC/M1256619715RC.IMG, 243.49 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017191/NAC/M1254353429RC.IMG, 258.48 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012008/NAC/M180665045RC.IMG, 170.43 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015049/NAC/M1178857143RC.IMG, 99.0 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1039A/DATA/ESM3/2019097/NAC/M1309301489RC.IMG, 176.47 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1037A/DATA/ESM3/2018282/NAC/M1293684206RC.IMG, 190.9 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1047A/DATA/ESM4/2021092/NAC/M1371988769RC.IMG, 163.85 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013023/NAC/M1113602997LC.IMG, 202.74 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1042A/DATA/ESM4/2020011/NAC/M1333378527LC.IMG, 156.63 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011079/NAC/M155294851LC.IMG, 130.59 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1017/DATA/ESM/2013261/NAC/M1134174410LC.IMG, 122.55 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018082/NAC/M1276443848LC.IMG, 185.39 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010317/NAC/M144301684RC.IMG, 212.48 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016356/NAC/M1236972914RC.IMG, 231.88 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1043A/DATA/ESM4/2020093/NAC/M1340465807LC.IMG, 155.98 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1029/DATA/ESM3/2016279/NAC/M1230283567RC.IMG, 181.37 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1006/DATA/SCI/2011001/NAC/M148563970RC.IMG, 181.64 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2017044/NAC/M1241599004RC.IMG, 214.24 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014326/NAC/M1171331043RC.IMG, 183.09 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1045B/DATA/ESM4/2020318/NAC/M1359940202RC.IMG, 107.29 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011326/NAC/M176629149LC.IMG, 168.01 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015024/NAC/M1176698032RC.IMG, 234.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012136/NAC/M191761375RC.IMG, 148.19 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016140/NAC/M1218323758RC.IMG, 175.12 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009348/NAC/M115441101LC.IMG, 171.82 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1004/DATA/MAP/2010207/NAC/M134762799RC.IMG, 155.59 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011223/NAC/M167742182LC.IMG, 220.1 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015184/NAC/M1190546146RC.IMG, 222.18 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014222/NAC/M1162333140LC.IMG, 244.76 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1006/DATA/SCI/2011033/NAC/M151288162RC.IMG, 175.07 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1031/DATA/ESM3/2017150/NAC/M1250782383LC.IMG, 139.38 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013105/NAC/M1120643720LC.IMG, 123.85 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1048B/DATA/ESM4/2021211/NAC/M1382274459RC.IMG, 169.16 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016145/NAC/M1218718019LC.IMG, 169.2 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1017/DATA/ESM/2013264/NAC/M1134431770LC.IMG, 258.04 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1045A/DATA/ESM4/2020260/NAC/M1354901244LC.IMG, 212.51 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1041B/DATA/ESM4/2019300/NAC/M1326808573RC.IMG, 160.21 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013122/NAC/M1122117864LC.IMG, 206.05 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015312/NAC/M1201607242RC.IMG, 182.35 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012120/NAC/M190350472LC.IMG, 224.42 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1045A/DATA/ESM4/2020284/NAC/M1356950946RC.IMG, 192.98 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1037B/DATA/ESM3/2018291/NAC/M1294461777LC.IMG, 159.13 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044A/DATA/ESM4/2020175/NAC/M1347512650LC.IMG, 129.95 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012179/NAC/M1095437275RC.IMG, 174.64 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013112/NAC/M1121234472RC.IMG, 181.21 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011242/NAC/M169349917RC.IMG, 241.73 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016119/NAC/M1216490694LC.IMG, 184.74 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009336/NAC/M114422988LC.IMG, 159.49 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014094/NAC/M1151231325RC.IMG, 227.7 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014280/NAC/M1167362364RC.IMG, 170.88 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1045C/DATA/ESM4/2020350/NAC/M1362674897RC.IMG, 176.0 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012248/NAC/M1101437850RC.IMG, 244.41 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014269/NAC/M1166332180LC.IMG, 202.02 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012324/NAC/M1107946137RC.IMG, 167.06 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1048A/DATA/ESM4/2021179/NAC/M1379521296RC.IMG, 180.84 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017280/NAC/M1262020854RC.IMG, 181.39 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044A/DATA/ESM4/2020181/NAC/M1348111365LC.IMG, 176.76 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017201/NAC/M1255166439LC.IMG, 98.42 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2021005/NAC/M1364473071LC.IMG, 178.83 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012143/NAC/M192308923LC.IMG, 205.47 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2018044/NAC/M1273141294LC.IMG, 146.52 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015313/NAC/M1201676616LC.IMG, 177.71 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010347/NAC/M146844678LC.IMG, 172.08 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014280/NAC/M1167358858LC.IMG, 176.64 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013213/NAC/M1129959467RC.IMG, 148.47 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2018048/NAC/M1273534947LC.IMG, 150.23 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1003/DATA/MAP/2010137/NAC/M128715786RC.IMG, 170.9 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014169/NAC/M1157756910LC.IMG, 174.5 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010322/NAC/M144721936LC.IMG, 193.61 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010033/NAC/M119787593RC.IMG, 158.0 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016366/NAC/M1237829414LC.IMG, 150.54 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1026/DATA/ESM2/2015364/NAC/M1206117050RC.IMG, 144.43 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013038/NAC/M1114834911LC.IMG, 184.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1039C/DATA/ESM3/2019137/NAC/M1312707360LC.IMG, 152.08 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019241/NAC/M1321726802LC.IMG, 181.78 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014045/NAC/M1147023713RC.IMG, 110.18 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1045C/DATA/ESM4/2020343/NAC/M1362066733LC.IMG, 145.75 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1047B/DATA/ESM4/2021123/NAC/M1374696983LC.IMG, 266.63 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010008/NAC/M117624662LC.IMG, 188.91 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1026/DATA/ESM2/2015359/NAC/M1205696659LC.IMG, 215.35 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015336/NAC/M1203713442RC.IMG, 194.43 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014060/NAC/M1148335313RC.IMG, 259.22 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1048C/DATA/ESM4/2021233/NAC/M1384184289RC.IMG, 204.36 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013089/NAC/M1119271697RC.IMG, 115.43 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012135/NAC/M191631763RC.IMG, 159.66 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015328/NAC/M1203016739RC.IMG, 185.67 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1017/DATA/ESM/2013328/NAC/M1139926009LC.IMG, 175.87 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018136/NAC/M1281128370RC.IMG, 220.25 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015129/NAC/M1185799204LC.IMG, 187.77 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015202/NAC/M1192099679RC.IMG, 235.49 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013202/NAC/M1129013526RC.IMG, 161.38 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2017068/NAC/M1243716703RC.IMG, 162.6 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016204/NAC/M1223815558LC.IMG, 257.92 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013012/NAC/M1112607320LC.IMG, 159.64 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1042B/DATA/ESM4/2020038/NAC/M1335734812RC.IMG, 187.99 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020214/NAC/M1350909941LC.IMG, 185.8 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012206/NAC/M1097772847RC.IMG, 188.48 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013187/NAC/M1127711168RC.IMG, 189.95 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2021003/NAC/M1364324923RC.IMG, 188.27 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2020359/NAC/M1363440116LC.IMG, 140.53 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016210/NAC/M1224385811LC.IMG, 261.52 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018114/NAC/M1279245525LC.IMG, 177.58 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013209/NAC/M1129666960RC.IMG, 198.86 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038C/DATA/ESM3/2019068/NAC/M1306805359RC.IMG, 177.84 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014114/NAC/M1152937179RC.IMG, 171.62 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015082/NAC/M1181763018LC.IMG, 206.99 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015041/NAC/M1178246048RC.IMG, 136.78 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014246/NAC/M1164383295LC.IMG, 126.35 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011114/NAC/M158278493LC.IMG, 239.54 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1039C/DATA/ESM3/2019166/NAC/M1315224801RC.IMG, 97.77 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1048A/DATA/ESM4/2021191/NAC/M1380540180RC.IMG, 169.67 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1048C/DATA/ESM4/2021231/NAC/M1384009003LC.IMG, 212.33 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013157/NAC/M1125141073RC.IMG, 179.91 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2017350/NAC/M1268065672LC.IMG, 244.49 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011147/NAC/M161149764RC.IMG, 198.8 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1039A/DATA/ESM3/2019104/NAC/M1309863902RC.IMG, 158.83 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009265/NAC/M108217110RC.IMG, 147.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019243/NAC/M1321874175RC.IMG, 178.63 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012262/NAC/M1102603360LC.IMG, 89.2 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012192/NAC/M1096559563RC.IMG, 161.18 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015126/NAC/M1185566458RC.IMG, 191.73 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012147/NAC/M192696464RC.IMG, 175.05 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1049B/DATA/ESM4/2021306/NAC/M1390536806RC.IMG, 128.52 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013052/NAC/M1116046457RC.IMG, 230.16 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010311/NAC/M143730132RC.IMG, 140.32 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2018056/NAC/M1274160202RC.IMG, 167.42 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011191/NAC/M164909616RC.IMG, 178.98 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1045B/DATA/ESM4/2020307/NAC/M1358967875RC.IMG, 166.46 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018087/NAC/M1276843810RC.IMG, 184.51 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1041A/DATA/ESM4/2019288/NAC/M1325808505LC.IMG, 142.18 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020206/NAC/M1350221080LC.IMG, 192.26 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015346/NAC/M1204549897LC.IMG, 192.26 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038B/DATA/ESM3/2019018/NAC/M1302439606RC.IMG, 181.38 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010057/NAC/M121817429LC.IMG, 204.92 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013078/NAC/M1118304736RC.IMG, 210.69 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1042B/DATA/ESM4/2020020/NAC/M1334165099RC.IMG, 209.74 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020219/NAC/M1351382534LC.IMG, 187.6 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010005/NAC/M117358581LC.IMG, 178.49 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011121/NAC/M158891067RC.IMG, 149.68 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014257/NAC/M1165350771RC.IMG, 135.37 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1006/DATA/SCI/2011044/NAC/M152228223RC.IMG, 209.35 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015043/NAC/M1178352512RC.IMG, 114.7 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015099/NAC/M1183253578RC.IMG, 214.82 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015232/NAC/M1194737528LC.IMG, 267.65 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2020362/NAC/M1363713685LC.IMG, 155.47 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014248/NAC/M1164581744RC.IMG, 99.25 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012339/NAC/M1109218996LC.IMG, 181.66 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013022/NAC/M1113517233LC.IMG, 181.74 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011149/NAC/M161346885LC.IMG, 189.88 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2011364/NAC/M179872247RC.IMG, 179.61 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016141/NAC/M1218400624LC.IMG, 183.31 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044C/DATA/ESM4/2020233/NAC/M1352530236LC.IMG, 185.5 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014135/NAC/M1154769635LC.IMG, 189.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014202/NAC/M1160547140LC.IMG, 182.55 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018224/NAC/M1288694504RC.IMG, 148.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012080/NAC/M186905826RC.IMG, 265.19 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017248/NAC/M1259242587LC.IMG, 198.0 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1041A/DATA/ESM4/2019273/NAC/M1324462289RC.IMG, 176.64 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016235/NAC/M1226497043RC.IMG, 239.87 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016130/NAC/M1217402126LC.IMG, 178.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014337/NAC/M1172242348LC.IMG, 187.67 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1042A/DATA/ESM4/2020012/NAC/M1333427620LC.IMG, 163.73 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017285/NAC/M1262465851LC.IMG, 181.77 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1031/DATA/ESM3/2017116/NAC/M1247861471RC.IMG, 183.53 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2017019/NAC/M1239441624LC.IMG, 267.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015216/NAC/M1193295832LC.IMG, 127.08 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1040B/DATA/ESM3/2019215/NAC/M1319451403RC.IMG, 187.17 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017302/NAC/M1263908691RC.IMG, 187.37 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011330/NAC/M176905191RC.IMG, 157.67 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011233/NAC/M168550121RC.IMG, 206.45 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012308/NAC/M1106595881LC.IMG, 170.14 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015138/NAC/M1186553935LC.IMG, 179.11 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1046B/DATA/ESM4/2021028/NAC/M1366442934LC.IMG, 182.95 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1038B/DATA/ESM3/2019019/NAC/M1302558578RC.IMG, 216.69 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1026/DATA/ESM2/2016066/NAC/M1211877309LC.IMG, 210.35 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1041A/DATA/ESM4/2019259/NAC/M1323261350LC.IMG, 168.96 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1044A/DATA/ESM4/2020183/NAC/M1348224253RC.IMG, 197.34 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013129/NAC/M1122721870LC.IMG, 207.96 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012333/NAC/M1108746749RC.IMG, 173.89 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013187/NAC/M1127776551RC.IMG, 160.53 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016172/NAC/M1221094305RC.IMG, 203.3 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1047A/DATA/ESM4/2021085/NAC/M1371360820RC.IMG, 135.61 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013174/NAC/M1126624503LC.IMG, 169.44 + LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017335/NAC/M1266797755RC.IMG, 135.14 From 41e1872ae862587704fca9f52b2a101de49d4e9a Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Mon, 19 Sep 2022 20:26:17 -0700 Subject: [PATCH 27/57] updates to ingest lroc metadata --- README.md | 103 +++++++++++++++++++++++++ env/bare_env.yml | 14 ++++ pdsc/config/lroc_cdr_metadata.yaml | 41 ++++++++++ pdsc/ingest.py | 39 ++++++++-- pdsc/localization.py | 97 +++++++++++++++++++++++ pdsc/segment.py | 25 +++--- pdsc/table.py | 74 +++++++++++++++++- scripts/get_distributed_samples.py | 119 +++++++++++++++++++++++++++++ 8 files changed, 490 insertions(+), 22 deletions(-) create mode 100644 env/bare_env.yml create mode 100644 pdsc/config/lroc_cdr_metadata.yaml create mode 100644 scripts/get_distributed_samples.py diff --git a/README.md b/README.md index 683bd33..65ebb93 100644 --- a/README.md +++ b/README.md @@ -18,3 +18,106 @@ Copyright 2019, by the California Institute of Technology. ALL RIGHTS RESERVED. United States Government Sponsorship acknowledged. Any commercial use must be negotiated with the Office of Technology Transfer at the California Institute of Technology. + + +---- + +# Updates + +Emily Dunkel: updated for LROC + + +# Usage + +First, create and activate a barebones env using python 3.7: + +```bash +conda env create -f env/bare_env.yml +conda activate p37 +``` + +I have also tried with python2, but when doing pip install, I got an error with incompatible numpy versions, but python 3 works, so recommend to use that. + +Note: I created full and mini examples (a subset of rows) for the cases. If you take a subset of the rows, you must also update the label file with the reduced number of rows. + +## HiRISE Example + +# Download HiRISE Label and Table files: + +```bash +wget -O RDRCUMINDEX.LBL https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.LBL +wget -O RDRCUMINDEX.TAB https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.TAB +``` + +To ingest indices: + +```bash +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise/ +``` + +Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly): + +``` +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise_mini/ +``` + +# CTX example: + +``` +pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputs_ctx/ +``` + +Or, a mini example (I took a subset of rows from the table file and updated the index accordingly): + +``` +pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputs_ctx_mini/ +``` + + +# LROC + +Full lroc database: + +``` +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +``` + +Here is a mini example for lroc: + +``` +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ +``` + +Note: I need to check SIS documentation for localization function coordinate system, but PDSC is now able to handle bodies other than just Mars (was originally hard-coded). + + +# Basic Usage + +Follow the docs for basic usage, but make sure you're in the python prompt: + +``` +# set the directory where the database is stored: +export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +python +>>> import pdsc +>>> pds_client = pdsc.PdsClient() +>>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101014437RC') +>>> mydata = metadata[0] +>>> localizer = pdsc.get_localizer(mydata, browse=True) +>>> lat, lon = localizer.pixel_to_latlon(10, 10) +``` + +# Scripts + +To get lroc distributed samples around the globe, you can call get_distritubed_samples.py. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: + +``` +conda activate p37 +# point to database +export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +python scripts/get_distributed_samples.py -o OUTPUT/FILE -n NUM_SAMPLES +``` + +This will print a list of examples with their sun angle (which helps with labeling, since craters look different depending on where the sun is). + +I have a script to assemble the data from this list in the deep learning repository here: https://github.jpl.nasa.gov/PDSIMG/deep-learning/blob/master/src/lroc/salience/scripts/assemble_data.py diff --git a/env/bare_env.yml b/env/bare_env.yml new file mode 100644 index 0000000..6640c52 --- /dev/null +++ b/env/bare_env.yml @@ -0,0 +1,14 @@ +# For more information about setting up environment YAML files for conda, see: +# https://conda.io/docs/user-guide/tasks/manage-environments.html#create-env-file-manually + +# bare bones conda environment to run osprey + +name: p37 + +channels: + - conda-forge + - menpo + - defaults + +dependencies: + - python=3.7 diff --git a/pdsc/config/lroc_cdr_metadata.yaml b/pdsc/config/lroc_cdr_metadata.yaml new file mode 100644 index 0000000..44d8c3a --- /dev/null +++ b/pdsc/config/lroc_cdr_metadata.yaml @@ -0,0 +1,41 @@ +columns: + - [PRODUCT_ID, observation_id, text] + - [LINE_SAMPLES, samples, integer] + - [IMAGE_LINES, lines, integer] + - [CENTER_LATITUDE, center_latitude, real] + - [CENTER_LONGITUDE, center_longitude, real] + - [NORTH_AZIMUTH, north_azimuth, real] + - [SCALED_PIXEL_WIDTH, pixel_width, real] + - [VOLUME_ID, volume_id, text] + - [FILE_SPECIFICATION_NAME, file_specification_name, text] + - [PRODUCT_VERSION_ID, product_version_id, text] + - [TARGET_NAME, target_name, text] + - [ORBIT_NUMBER, orbit_number, integer] + - [MISSION_PHASE_NAME, mission_phase_name, text] + - [RATIONALE_DESC, description, text] + - [START_TIME, start_time, text] + - [STOP_TIME, stop_time, text] + - [SPACECRAFT_CLOCK_START_COUNT, sclk_start, real] + - [SPACECRAFT_CLOCK_STOP_COUNT, sclk_stop, real] + - [EMISSION_ANGLE, emission_angle, real] + - [INCIDENCE_ANGLE, incidence_angle, real] + - [PHASE_ANGLE, phase_angle, real] + - [SPACECRAFT_ALTITUDE, spacecraft_altitude, real] + - [TARGET_CENTER_DISTANCE, target_center_distance, real] + - [SUB_SOLAR_AZIMUTH, sub_solar_azimuth, real] + - [SUB_SOLAR_LATITUDE, sub_solar_latitude, real] + - [SUB_SOLAR_LONGITUDE, sub_solar_longitude, real] + - [SUB_SPACECRAFT_LATITUDE, sub_spacecraft_latitude, real] + - [SUB_SPACECRAFT_LONGITUDE, sub_spacecraft_longitude, real] + - [SOLAR_DISTANCE, solar_distance, real] + - [SOLAR_LONGITUDE, solar_longitude, real] + +scale_factors: + SPACECRAFT_ALTITUDE: 1000 # km to m + SOLAR_DISTANCE: 1000 # km to m + +index: + - observation_id + +segmentation: + resolution: 50000 diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 711dacb..a4f414c 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -5,6 +5,7 @@ import os import yaml import sqlite3 +import pdb from .table import parse_table from .metadata import PdsMetadata, METADATA_DB_SUFFIX @@ -13,6 +14,11 @@ TriSegmentedFootprint, SegmentTree) from .util import standard_progress_bar +# https://tharsis.gsfc.nasa.gov/geodesy.html +MARS_RADIUS_M = 3396200. +#https://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html +MOON_RADIUS_M = 1736000 + DEFAULT_CONFIG_DIR = os.path.join( os.path.dirname(os.path.realpath(__file__)), 'config', @@ -134,7 +140,7 @@ def store_metadata(outputfile, instrument, table, config): for v in progress(cur.fetchall()) ] -def store_segments(outputfile, metadata, config): +def store_segments(outputfile, metadata, config, body_radius): """ Segments observations corresponding to each entry in ``metadata``, and stores these segments in a SQL database @@ -172,11 +178,16 @@ def store_segments(outputfile, metadata, config): progress = standard_progress_bar('Segmenting footprints') for m in progress(metadata): try: - s = TriSegmentedFootprint(m, resolution, localizer_kwargs) + s = TriSegmentedFootprint(m, resolution, body_radius, localizer_kwargs) for si in s.segments: segments.append(si) - observation_ids.append(s.metadata.observation_id) - + # erd: check if observation_id attribute exists + if hasattr(s.metadata, 'observation_id'): + observation_ids.append(s.metadata.observation_id) + else: + raise ValueError('Please rename your index col to observation_id in the config file') + # erd: lroc does not have observation_id + #observation_ids.append(s.metadata.file_specification_name) except (TypeError, ValueError): continue @@ -208,7 +219,7 @@ def store_segments(outputfile, metadata, config): return segments -def store_segment_tree(outputfile, segments): +def store_segment_tree(outputfile, segments, body_radius): """ Constructs a ball tree index for segmented observations and saves the resulting data structure to the specified output file. @@ -219,7 +230,7 @@ def store_segment_tree(outputfile, segments): :param segments: a collection of :py:class:`~pdsc.segment.TriSegment` objects """ - tree = SegmentTree(segments) + tree = SegmentTree(segments, body_radius) tree.save(outputfile) def ingest_idx(label_file, table_file, configpath, outputdir): @@ -241,6 +252,18 @@ def ingest_idx(label_file, table_file, configpath, outputdir): will be stored """ instrument, table = parse_table(label_file, table_file) + + # erd: radius will differ if mars vs moon + if 'lroc' in instrument: + # use moon radius + body_radius = MOON_RADIUS_M + print('using Moon radius in ingest_idx: ') + print(body_radius) + else: + body_radius = MARS_RADIUS_M + print('using Mars radius in ingest_idx: ') + print(body_radius) + if os.path.isdir(configpath): configfile = os.path.join(configpath, '%s_metadata.yaml' % instrument) else: @@ -266,10 +289,10 @@ def ingest_idx(label_file, table_file, configpath, outputdir): outputdir, '%s%s' % (instrument, SEGMENT_DB_SUFFIX) ) - segments = store_segments(outputfile, metadata, config) + segments = store_segments(outputfile, metadata, config, body_radius) outputfile = os.path.join( outputdir, '%s%s' % (instrument, SEGMENT_TREE_SUFFIX) ) - store_segment_tree(outputfile, segments) + store_segment_tree(outputfile, segments, body_radius) diff --git a/pdsc/localization.py b/pdsc/localization.py index 614a2e6..4ea7f66 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -27,11 +27,17 @@ from geographiclib.geodesic import Geodesic from .util import registerer, standard_progress_bar +import pdb # https://tharsis.gsfc.nasa.gov/geodesy.html MARS_RADIUS_M = 3396200. MARS_FLATTENING = 1.0 / 169.8 +# erd: added moon info (before, assumed Mars only) +#https://nssdc.gsfc.nasa.gov/planetary/factsheet/moonfact.html +MOON_RADIUS_M = 1736000 +MOON_FLATTENING = 0.0012 + LOCALIZERS = {} register_localizer = registerer(LOCALIZERS) @@ -63,6 +69,10 @@ def geodesic_distance(latlon1, latlon2, radius=MARS_RADIUS_M): >>> geodesic_distance((0, 0), (0, np.pi)) 10669476.970121656 """ + #print('The moons radius is: 1736000') + #print('Radius used is: ') + #print(radius) + #print('------') haversine = DistanceMetric.get_metric('haversine') return float(radius*haversine.pairwise([latlon1], [latlon2])) @@ -198,6 +208,8 @@ def latlon_to_pixel(self, lat, lon, resolution_m=None, resolution_pix=0.1): loc = np.deg2rad([lat, lon]) + print('Inside latlon_to_pixel') + print(self.BODY_RADIUS) def f(u): loc_u = np.deg2rad(self.pixel_to_latlon(*u)) return geodesic_distance(loc, loc_u, self.BODY_RADIUS) @@ -613,6 +625,91 @@ def __init__(self, metadata): metadata.north_azimuth, 1 ) + + +@register_localizer('lroc_cdr') +def hirise_rdr_localizer(metadata, browse=False): + """ + Constructs the appropriate LROC CDR localizer for the desired data + product type + + :param metadata: + "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + :param browse: + construct localizer for the BROWSE data product + + :return: a :py:class:`Localizer` for the appropriate data product + """ + if browse: + return LrocCdrBrowseLocalizer(metadata) + else: + return LrocCdrLocalizer(metadata) + +class LrocCdrLocalizer(GeodesicLocalizer): + """ + A localizer for the Lroc CDR observations (subclass of + :py:class:`GeodesicLocalizer`) + erd: Note, in progress + """ + + DEFAULT_RESOLUTION_M = 1e-6 + """ + erd: Need to check this value + Sets the default resolution for lroc CDR localization + """ + + BODY_RADIUS = MOON_RADIUS_M + BODY = Geodesic(MOON_RADIUS_M, MOON_FLATTENING) + + def __init__(self, metadata): + """ + :param metadata: + """ + helper_localizer = GeodesicLocalizer( + metadata.lines / 2.0, metadata.samples / 2.0, + metadata.center_latitude, metadata.center_longitude, + metadata.lines, metadata.samples, + metadata.pixel_width, + metadata.pixel_width, + metadata.north_azimuth, 1 + ) + + super(LrocCdrLocalizer, self).__init__( + metadata.lines / 2.0, metadata.samples / 2.0, + metadata.center_latitude, metadata.center_longitude, + metadata.lines, metadata.samples, + metadata.pixel_width, + metadata.pixel_width, + metadata.north_azimuth, 1 + ) + +class LrocCdrBrowseLocalizer(LrocCdrLocalizer): + """ + erd: A localizer for the Lroc CDR "browse" images (subclass of + :py:class:`LrocCdrLocalizer`) + This classifier is included for convenience; it simply scales the pixel + coordinates of the browse image to/from those of the full image before/after + calling the super-class implementation. + """ + + def __init__(self, metadata): + """ + :param metadata: + "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + """ + super(LrocCdrBrowseLocalizer, self).__init__(metadata) + self.scale_factor = 0.5 # browse images are at half the resolution + + def pixel_to_latlon(self, row, col): + return super(LrocCdrBrowseLocalizer, self).pixel_to_latlon( + row / self.scale_factor, col / self.scale_factor + ) + + def latlon_to_pixel(self, lat, lon): + pix = super(LrocCdrBrowseLocalizer, self).latlon_to_pixel(lat, lon) + return pix[0]*self.scale_factor, pix[1]*self.scale_factor + + @register_localizer('hirise_edr') class HiRiseLocalizer(GeodesicLocalizer): """ diff --git a/pdsc/segment.py b/pdsc/segment.py index 83b58d6..2f45c17 100644 --- a/pdsc/segment.py +++ b/pdsc/segment.py @@ -73,7 +73,7 @@ class SegmentTree(object): observation segments within some radius of a query point """ - def __init__(self, segments, verbose=True): + def __init__(self, segments, verbose=True, body_radius=MARS_RADIUS_M): """ :param segments: collection of all observation segments :param verbose: if ``True`` display a progress bar as the index is being @@ -92,6 +92,7 @@ def __init__(self, segments, verbose=True): if verbose: print('Building index...') self.ball_tree = BallTree(data, metric='haversine') + self.body_radius = body_radius if verbose: print('...done.') def query_point(self, point): @@ -104,7 +105,7 @@ def query_point(self, point): :return: a collection of segment ids for segments that satisfy the query """ total_radius = point.radius + self.max_radius - haversine_radius = total_radius / MARS_RADIUS_M + haversine_radius = total_radius / self.body_radius X = np.deg2rad(point.latlon).reshape((1, -1)) return self.ball_tree.query_radius(X, haversine_radius)[0] @@ -118,7 +119,7 @@ def query_segment(self, segment): :return: a collection of segment ids for segments that satisfy the query """ total_radius = segment.radius + self.max_radius - haversine_radius = total_radius / MARS_RADIUS_M + haversine_radius = total_radius / self.body_radius X = np.deg2rad([[segment.center_latitude, segment.center_longitude]]) return self.ball_tree.query_radius(X, haversine_radius)[0] @@ -149,7 +150,7 @@ class TriSegment(object): for indexing and efficient querying. """ - def __init__(self, latlon0, latlon1, latlon2): + def __init__(self, latlon0, latlon1, latlon2, body_radius=MARS_RADIUS_M): """ The three points of the triangular segment are enumerated in *counterclockwise* order looking down on the surface. Each point is a @@ -163,6 +164,7 @@ def __init__(self, latlon0, latlon1, latlon2): represents the third point (index 2) in a triangular segment """ self.latlon_points = np.array([latlon0, latlon1, latlon2]) + self.body_radius = body_radius self._center_longitude = None self._center_latitude = None self._xyz_points = None @@ -227,7 +229,7 @@ def radius(self): if self._radius is None: llcenter = np.deg2rad([self.center_latitude, self.center_longitude]) self._radius = np.max([ - geodesic_distance(llcenter, np.deg2rad(ll)) + geodesic_distance(llcenter, np.deg2rad(ll), radius=self.body_radius) for ll in self.latlon_points ]) return self._radius @@ -307,7 +309,7 @@ def distance_to_point(self, xyz): p = np.deg2rad(xyz2latlon(xyz)) return np.min([ - geodesic_distance(p, pi) + geodesic_distance(p, pi, radius=self.body_radius) for pi in np.deg2rad(points_to_check) ]) @@ -345,7 +347,7 @@ class SegmentedFootprint(with_metaclass(abc.ABCMeta, object)): Base class for segmenting an observation footprint """ - def __init__(self, metadata, resolution, localizer_kwargs): + def __init__(self, metadata, resolution, body_radius, localizer_kwargs): """ :param metadata: a :py:class:`~pdsc.metadata.PdsMetadata` object @@ -357,6 +359,7 @@ def __init__(self, metadata, resolution, localizer_kwargs): """ self.metadata = metadata self.resolution = resolution + self.body_radius = body_radius self.localizer = get_localizer(metadata, **localizer_kwargs) n_row_chunks = int(np.ceil( self.localizer.observation_length_m / resolution @@ -398,8 +401,8 @@ def _segment(self): for c in range(L.shape[1]-1): for r in range(L.shape[0]-1): if self.localizer.flight_direction > 0: - yield TriSegment(L[r, c], L[r, c+1], L[r+1, c]) - yield TriSegment(L[r+1, c+1], L[r+1, c], L[r, c+1]) + yield TriSegment(L[r, c], L[r, c+1], L[r+1, c], body_radius=self.body_radius) + yield TriSegment(L[r+1, c+1], L[r+1, c], L[r, c+1], body_radius=self.body_radius) else: - yield TriSegment(L[r, c], L[r+1, c], L[r, c+1]) - yield TriSegment(L[r+1, c+1], L[r, c+1], L[r+1, c]) + yield TriSegment(L[r, c], L[r+1, c], L[r, c+1], body_radius=self.body_radius) + yield TriSegment(L[r+1, c+1], L[r, c+1], L[r+1, c], body_radius=self.body_radius) diff --git a/pdsc/table.py b/pdsc/table.py index d757e54..b866dee 100644 --- a/pdsc/table.py +++ b/pdsc/table.py @@ -3,6 +3,7 @@ """ import re import numpy as np +import pdb from datetime import datetime from .util import registerer, standard_progress_bar @@ -68,6 +69,18 @@ def themis_datetime(s): """ return datetime.strptime(s, '%Y-%m-%dT%H:%M:%S.%f') +def lroc_datetime(s): + """ + Parses date/time format found in lroc cumulative index files + + :param s: string + :return: :py:class:`datetime.datetime` object + + >>> lroc_datetime('1985-10-26 01:20:00') + datetime.datetime(1985, 10, 26, 1, 20) + """ + return datetime.strptime(s.strip(), '%Y-%m-%d %H:%M:%S.%f') + def hirise_datetime(s): """ Parses date/time format found in HiRISE cumulative index files @@ -105,6 +118,21 @@ def moc_observation_id(s): """ return s.replace('/', '') +@register_determiner('lroc_cdr') +def lroc_cdr_determiner(label_contents): + """ + Determines whether a cumulative index file is for LROC CDR products + :param label_contents: PDS cumulative index LBL file contents + :return: ``True`` iff this label file is for LROC CDR products + """ + print('LROC CDR') + + return ( + 'LROC' in label_contents and + 'CDR_CATALOG_INDEX' in label_contents + ) + + @register_determiner('hirise_edr') def hirise_edr_determiner(label_contents): """ @@ -385,7 +413,6 @@ def __init__(self, label_file, table_file): with open(label_file, 'r') as f: columns = self._parse(f) - if columns is None: raise RuntimeError('Error parsing table') @@ -485,7 +512,6 @@ def get_column(self, column_name_or_idx, progress=True, cache=True): f.seek(r*self.row_bytes + column.start_byte - 1) value = f.read(column.length) values.append(value) - try: data_column = np.array(values, dtype=column.dtype) except TypeError: @@ -610,6 +636,27 @@ class HiRiseTableColumn(PdsTableColumn): Defines special types for the HiRISE observation metadata """ +# **************************************************************************** +# LROC +# **************************************************************************** + +class LrocTableColumn(PdsTableColumn): + """ + A subclass of :py:class:`PdsTableColumn` for the LROC NAC instrument to define + some special types + Datetimes follow those of HiRISE + """ + + SPECIAL_TYPES = { + 'START_TIME': PdsColumnType(lroc_datetime), + 'STOP_TIME': PdsColumnType(lroc_datetime), + 'SPACECRAFT_CLOCK_START_COUNT': PdsColumnType(ctx_sclk), + 'SPACECRAFT_CLOCK_STOP_COUNT': PdsColumnType(ctx_sclk), + } + """ + Defines special types for the LROC observation metadata + """ + @register_table('hirise_edr') class HiRiseEdrTable(PdsTable): """ @@ -655,6 +702,28 @@ class HiRiseRdrTable(PdsTable): The HiRISE RDR table has a custom name """ +# **************************************************************************** +# LROC CDR +# **************************************************************************** + +@register_table('lroc_cdr') +class LrocCdrTable(PdsTable): + """ + A subclass of :py:class:`PdsTable` for the LROC NAC instrument that uses the + custom :py:class:`LrocTableColumn` class + """ + + COLUMN_CLASS = LrocTableColumn + """ + The :py:class:`LrocCdrTable` class should use + :py:class:`LrocTableColumn` for parsing columns + """ + + TABLE_OBJECT_NAME = 'INDEX_TABLE' + """ + The Lroc CDR table has a custom name + """ + # **************************************************************************** # MOC # **************************************************************************** @@ -709,5 +778,4 @@ def parse_table(label_file, table_file): if instrument not in INSTRUMENT_TABLES: raise ValueError('Table parsing not implemented for %s' % instrument) - return instrument, INSTRUMENT_TABLES[instrument](label_file, table_file) diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py new file mode 100644 index 0000000..38ccf50 --- /dev/null +++ b/scripts/get_distributed_samples.py @@ -0,0 +1,119 @@ +import os +import numpy as np +from sklearn.neighbors import DistanceMetric +from progressbar import ProgressBar, Bar, ETA +#from mpl_toolkits.basemap import Basemap +import matplotlib.pyplot as plt +from matplotlib.backends.backend_pdf import PdfPages +import pdsc +import pdb + +# Emily Dunkel +# 2022 +# Get maximally distant lroc imagery +# Selects a random image, then the maximally distant image from that, then for each image, get the minimum distance to every already select point, then take the max +# This will give us distributed samples around the globe +# Based on script: https://github-fn.jpl.nasa.gov/COSMIC/COSMIC_CTX_impacts/commit/e4c167a2e4d9e345693cd5e25df0149f5d641653 + +def get_latlon(row): + """ + Return center lat/lon of image + + Inputs + ------ + row: PdsMetadata + single row in table, information for a single image + + Returns + ------- + latlon: (float, float) + (latitude in radians, longitude in radians + """ + # latlon of the center of the image + latlon = np.deg2rad(float(row.center_latitude)), np.deg2rad(float(row.center_longitude)) + return latlon + +def pick_next(selected, latlon): + """ + Return the index of the next selected point + + Inputs + ------ + selected: list of integers + index of previously selected points + latlon: numpy array of shape (number_of_images, 2) + latitude and longitude of all images + + Returns + ------- + returns: integer + index of image that is farthest away to the selected points + """ + dist = DistanceMetric.get_metric('haversine') + S = latlon[np.array(selected)] + D = dist.pairwise(S, latlon) + # Distance to closest selected points + Dmin = np.min(D, axis=0) + # Index of observation with farthest distance to closest selected point + return np.argmax(Dmin) + +def main(outputfile, number): + """ + Returns list of images that are spread throughout the globe + + Inputs + ------ + outputfile: str, path to outputfile + file with list of images + number: int + number of images to return + """ + np.random.seed(0) + client = pdsc.PdsClient() + + # get the lroc NAC data + print('Querying the data') + full_data = client.query('lroc_cdr') + print('Selecting the NAC rows') + nac_data = [row for row in full_data if ('NAC' in row.file_specification_name and 'MOON' in row.target_name)] + + # get the number of NAC observations + num_obs = len(nac_data) + print('Total number of observations = ', num_obs) + + # loop through the nac data and get the lat/lon + print('Getting every lat/lon') + latlon = np.array([get_latlon(row) for row in nac_data]) + print('Getting every filename') + ids = np.array([row.file_specification_name for row in nac_data]) + print('Getting every solar angle') + solar = np.array([row.sub_solar_azimuth for row in nac_data]) + # start with a random observation + print('Selected 0th observation') + selected = [np.random.choice(num_obs)] + + # select the maximally distance image + for ii in range(1, number): + print('Getting observation #: ', ii) + selected.append(pick_next(selected, latlon)) + + selected = np.array(selected) + # filenames of selected cases + selected_ids = ids[selected] + selected_solar = solar[selected] + with open(outputfile, 'w') as f: + for i, sun in zip(selected_ids, selected_solar): + f.write('%s, %s\n' % (i, sun)) + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) + + #outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' + outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected_withsun_250.txt' + num_d = 250 + + parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) + parser.add_argument('-n', '--number', default=num_d, type=int) + args = parser.parse_args() + main(**vars(args)) From 0ab0e420bef5d7ca81c076dda733ab0a387a334c Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Mon, 19 Sep 2022 21:25:39 -0700 Subject: [PATCH 28/57] update default resolution to be 1/3 that of HiRISE --- pdsc/localization.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdsc/localization.py b/pdsc/localization.py index 4ea7f66..3ca6aef 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -628,7 +628,7 @@ def __init__(self, metadata): @register_localizer('lroc_cdr') -def hirise_rdr_localizer(metadata, browse=False): +def lroc_cdr_localizer(metadata, browse=False): """ Constructs the appropriate LROC CDR localizer for the desired data product type @@ -652,7 +652,7 @@ class LrocCdrLocalizer(GeodesicLocalizer): erd: Note, in progress """ - DEFAULT_RESOLUTION_M = 1e-6 + DEFAULT_RESOLUTION_M = 1/3*(1e-6) """ erd: Need to check this value Sets the default resolution for lroc CDR localization From 8e45709375c9ec2310ab348f91f679bff7f31945 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Wed, 21 Sep 2022 10:45:24 -0700 Subject: [PATCH 29/57] updated LROC default resolution, should be ~1/3 that of HiRISE, but need to check --- pdsc/localization.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pdsc/localization.py b/pdsc/localization.py index 4ea7f66..3ca6aef 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -628,7 +628,7 @@ def __init__(self, metadata): @register_localizer('lroc_cdr') -def hirise_rdr_localizer(metadata, browse=False): +def lroc_cdr_localizer(metadata, browse=False): """ Constructs the appropriate LROC CDR localizer for the desired data product type @@ -652,7 +652,7 @@ class LrocCdrLocalizer(GeodesicLocalizer): erd: Note, in progress """ - DEFAULT_RESOLUTION_M = 1e-6 + DEFAULT_RESOLUTION_M = 1/3*(1e-6) """ erd: Need to check this value Sets the default resolution for lroc CDR localization From 75ac4275922bd8da8e92fd1990f8e69f4481749e Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Thu, 6 Oct 2022 13:47:36 -0700 Subject: [PATCH 30/57] readme update --- README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 65ebb93..fe4bc5a 100644 --- a/README.md +++ b/README.md @@ -29,12 +29,17 @@ Emily Dunkel: updated for LROC # Usage -First, create and activate a barebones env using python 3.7: +First, create and activate a bare-bones env using python 3.7: ```bash conda env create -f env/bare_env.yml conda activate p37 ``` +Then, do a pip install: + +```bash +pip install . +``` I have also tried with python2, but when doing pip install, I got an error with incompatible numpy versions, but python 3 works, so recommend to use that. @@ -86,6 +91,10 @@ Here is a mini example for lroc: ``` pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ + +# on my mac: +# pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /Users/edunkel/Documents/Projects/PDS/LROC/PDSIMG_repos/pdsc/inputs_mini/lroc/CUMINDEX.LBL /Users/edunkel/Documents/Projects/PDS/LROC/PDSIMG_repos/pdsc/outputs_lroc_mini/ + ``` Note: I need to check SIS documentation for localization function coordinate system, but PDSC is now able to handle bodies other than just Mars (was originally hard-coded). @@ -98,10 +107,14 @@ Follow the docs for basic usage, but make sure you're in the python prompt: ``` # set the directory where the database is stored: export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +# on my mac, for minidatabase: +# export PDSC_DATABASE_DIR=/Users/edunkel/Documents/Projects/PDS/LROC/PDSIMG_repos/pdsc/outputs_lroc_mini/ python >>> import pdsc >>> pds_client = pdsc.PdsClient() >>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101014437RC') +# or, for minidatabase: +#>>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101013931LC') >>> mydata = metadata[0] >>> localizer = pdsc.get_localizer(mydata, browse=True) >>> lat, lon = localizer.pixel_to_latlon(10, 10) From 9e58d57130ccde08096f813fc45a039b54d05b1f Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Thu, 6 Oct 2022 14:24:52 -0700 Subject: [PATCH 31/57] have mars radius as default, now passes all but 2 unit tests --- pdsc/ingest.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pdsc/ingest.py b/pdsc/ingest.py index a4f414c..1634710 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -140,7 +140,7 @@ def store_metadata(outputfile, instrument, table, config): for v in progress(cur.fetchall()) ] -def store_segments(outputfile, metadata, config, body_radius): +def store_segments(outputfile, metadata, config, body_radius=MARS_RADIUS_M): """ Segments observations corresponding to each entry in ``metadata``, and stores these segments in a SQL database @@ -165,6 +165,8 @@ def store_segments(outputfile, metadata, config, body_radius): - ``localizer_kwargs``: the ``kwargs`` that will be supplied to the :py:meth:`~pdsc.localization.get_localizer` function for determining observation footprints + :param body_radius: + radius of planet, default is mars :return: a list of :py:class:`~pdsc.segment.TriSegment` objects for segments across all observations @@ -219,7 +221,7 @@ def store_segments(outputfile, metadata, config, body_radius): return segments -def store_segment_tree(outputfile, segments, body_radius): +def store_segment_tree(outputfile, segments, body_radius=MARS_RADIUS_M): """ Constructs a ball tree index for segmented observations and saves the resulting data structure to the specified output file. @@ -229,6 +231,9 @@ def store_segment_tree(outputfile, segments, body_radius): :param segments: a collection of :py:class:`~pdsc.segment.TriSegment` objects + + :body_radius: + celestial body radius, default is Mars """ tree = SegmentTree(segments, body_radius) tree.save(outputfile) From a95661c695a05e53a96d9c9f292e2890f2624ac6 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Thu, 6 Oct 2022 15:08:17 -0700 Subject: [PATCH 32/57] added mars radius default now all pytests pass --- README.md | 10 ++++++++++ pdsc/ingest.py | 23 ++++++++++++++++++----- pdsc/segment.py | 4 +++- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index fe4bc5a..38d81d1 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,16 @@ I have also tried with python2, but when doing pip install, I got an error with Note: I created full and mini examples (a subset of rows) for the cases. If you take a subset of the rows, you must also update the label file with the reduced number of rows. +## PyTests + +To run the pytests, you'll need to install pytest and mock. Then, run from the upper directory: + +```bash +pytest +``` + +You should get pytests passed. + ## HiRISE Example # Download HiRISE Label and Table files: diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 1634710..27f8d74 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -166,7 +166,7 @@ def store_segments(outputfile, metadata, config, body_radius=MARS_RADIUS_M): the :py:meth:`~pdsc.localization.get_localizer` function for determining observation footprints :param body_radius: - radius of planet, default is mars + radius of celestial body, default is mars :return: a list of :py:class:`~pdsc.segment.TriSegment` objects for segments across all observations @@ -180,7 +180,11 @@ def store_segments(outputfile, metadata, config, body_radius=MARS_RADIUS_M): progress = standard_progress_bar('Segmenting footprints') for m in progress(metadata): try: - s = TriSegmentedFootprint(m, resolution, body_radius, localizer_kwargs) + # erd: if not Mars, store body radius + if body_radius == MARS_RADIUS_M: + s = TriSegmentedFootprint(m, resolution, localizer_kwargs) + else: + s = TriSegmentedFootprint(m, resolution, body_radius, localizer_kwargs) for si in s.segments: segments.append(si) # erd: check if observation_id attribute exists @@ -235,7 +239,10 @@ def store_segment_tree(outputfile, segments, body_radius=MARS_RADIUS_M): :body_radius: celestial body radius, default is Mars """ - tree = SegmentTree(segments, body_radius) + if body_radius == MARS_RADIUS_M: + tree = SegmentTree(segments) + else: + tree = SegmentTree(segments, True, body_radius) tree.save(outputfile) def ingest_idx(label_file, table_file, configpath, outputdir): @@ -294,10 +301,16 @@ def ingest_idx(label_file, table_file, configpath, outputdir): outputdir, '%s%s' % (instrument, SEGMENT_DB_SUFFIX) ) - segments = store_segments(outputfile, metadata, config, body_radius) + if body_radius == MARS_RADIUS_M: + segments = store_segments(outputfile, metadata, config) + else: + segments = store_segments(outputfile, metadata, config, body_radius) outputfile = os.path.join( outputdir, '%s%s' % (instrument, SEGMENT_TREE_SUFFIX) ) - store_segment_tree(outputfile, segments, body_radius) + if body_radius == MARS_RADIUS_M: + store_segment_tree(outputfile, segments) + else: + store_segment_tree(outputfile, segments, body_radius) diff --git a/pdsc/segment.py b/pdsc/segment.py index 2f45c17..87044df 100644 --- a/pdsc/segment.py +++ b/pdsc/segment.py @@ -347,7 +347,7 @@ class SegmentedFootprint(with_metaclass(abc.ABCMeta, object)): Base class for segmenting an observation footprint """ - def __init__(self, metadata, resolution, body_radius, localizer_kwargs): + def __init__(self, metadata, resolution, localizer_kwargs, body_radius=MARS_RADIUS_M): """ :param metadata: a :py:class:`~pdsc.metadata.PdsMetadata` object @@ -356,6 +356,8 @@ def __init__(self, metadata, resolution, body_radius, localizer_kwargs): :param localizer_kwargs: the ``kwargs`` passed to the localizer used to convert observation pixel coordinates into real-world coordinates + :param body_radius: + celestial body radius """ self.metadata = metadata self.resolution = resolution From 1d7fe2051b3bf154c3a62c16ee3c5d6a2899b8e8 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Thu, 6 Oct 2022 15:38:10 -0700 Subject: [PATCH 33/57] update body_radius to be passed in after localizer_kwargs --- pdsc/ingest.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 27f8d74..1948a28 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -184,7 +184,7 @@ def store_segments(outputfile, metadata, config, body_radius=MARS_RADIUS_M): if body_radius == MARS_RADIUS_M: s = TriSegmentedFootprint(m, resolution, localizer_kwargs) else: - s = TriSegmentedFootprint(m, resolution, body_radius, localizer_kwargs) + s = TriSegmentedFootprint(m, resolution, localizer_kwargs, body_radius) for si in s.segments: segments.append(si) # erd: check if observation_id attribute exists From 9b05d607ffb45d9cc574db6b30fa328f18f9a33e Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Thu, 6 Oct 2022 19:18:00 -0700 Subject: [PATCH 34/57] lroc localizer using geodesic for non-map proj images --- pdsc/localization.py | 17 +++++++++++------ scripts/get_lat_lon.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) create mode 100644 scripts/get_lat_lon.py diff --git a/pdsc/localization.py b/pdsc/localization.py index 3ca6aef..0215db0 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -208,7 +208,6 @@ def latlon_to_pixel(self, lat, lon, resolution_m=None, resolution_pix=0.1): loc = np.deg2rad([lat, lon]) - print('Inside latlon_to_pixel') print(self.BODY_RADIUS) def f(u): loc_u = np.deg2rad(self.pixel_to_latlon(*u)) @@ -229,6 +228,7 @@ class GeodesicLocalizer(Localizer): """ BODY = Geodesic(MARS_RADIUS_M, MARS_FLATTENING) + """ A :py:class:`~geographiclib.geodesic.Geodesic` object describing the target body @@ -307,6 +307,8 @@ def observation_length_m(self): return self._height def pixel_to_latlon(self, row, col): + #print('body radius = ', self.BODY_RADIUS) + #pdb.set_trace() x_m = (col - self.center_col) * self.pixel_width_m y_m = (row - self.center_row) * self.pixel_height_m y_m *= self.flight_direction @@ -489,8 +491,9 @@ def __init__(self, proj_type, proj_latitude, proj_longitude, np.sqrt(a**2 + b**2) ) self.cos_proj_lat = np.cos(self.proj_latitude) - def _equirect_pixel_to_latlon(self, row, col): + # equations come from section 3.5.1 + # https://hirise.lpl.arizona.edu/pdf/HiRISE_RDR_v12_DTM_11_25_2009.pdf x = (col - self.col_offset)*self.map_scale y = -(row - self.row_offset)*self.map_scale return ( @@ -525,6 +528,8 @@ def _polar_pixel_to_latlon(self, row, col): return lat, lon def _polar_latlon_to_pixel(self, lat, lon): + # equations come from section 3.5.2 + # https://hirise.lpl.arizona.edu/pdf/HiRISE_RDR_v12_DTM_11_25_2009.pdf lat_rad = np.deg2rad(lat) lon_rad = np.deg2rad(lon % 360.) T = np.tan((np.pi / 4.0) - np.abs(lat_rad / 2.0)) @@ -641,6 +646,7 @@ def lroc_cdr_localizer(metadata, browse=False): :return: a :py:class:`Localizer` for the appropriate data product """ if browse: + # browse is set when creating the localizer return LrocCdrBrowseLocalizer(metadata) else: return LrocCdrLocalizer(metadata) @@ -649,17 +655,16 @@ class LrocCdrLocalizer(GeodesicLocalizer): """ A localizer for the Lroc CDR observations (subclass of :py:class:`GeodesicLocalizer`) - erd: Note, in progress """ DEFAULT_RESOLUTION_M = 1/3*(1e-6) """ - erd: Need to check this value Sets the default resolution for lroc CDR localization + 1/3 of that of HiRISE """ BODY_RADIUS = MOON_RADIUS_M - BODY = Geodesic(MOON_RADIUS_M, MOON_FLATTENING) + BODY = Geodesic(BODY_RADIUS, MOON_FLATTENING) def __init__(self, metadata): """ @@ -701,6 +706,7 @@ def __init__(self, metadata): self.scale_factor = 0.5 # browse images are at half the resolution def pixel_to_latlon(self, row, col): + #print('inside lroc localizer') return super(LrocCdrBrowseLocalizer, self).pixel_to_latlon( row / self.scale_factor, col / self.scale_factor ) @@ -968,5 +974,4 @@ def get_localizer(metadata, *args, **kwargs): if metadata.instrument not in LOCALIZERS: raise IndexError( 'No localizer implemented for %s' % metadata.instrument) - return LOCALIZERS[metadata.instrument](metadata, *args, **kwargs) diff --git a/scripts/get_lat_lon.py b/scripts/get_lat_lon.py new file mode 100644 index 0000000..84b903b --- /dev/null +++ b/scripts/get_lat_lon.py @@ -0,0 +1,34 @@ +import os +import numpy as np +import pdsc +import pdb + +# Emily Dunkel +# 2022 +# Simple script to look at lat lon conversion + + +def main(img, xval, yval): + """ + Get the lat/long from the pixel values from the image + """ + client = pdsc.PdsClient() + metadata = client.query_by_observation_id('lroc_cdr', ' M101013931LC') + mydata = metadata[0] + localizer = pdsc.get_localizer(mydata, browse=True) + lat, lon = localizer.pixel_to_latlon(10, 10) + print('lat:', lat) + print('lon: ', lon) + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) + + img = ' M101013931LC' + x = 10 + y = 10 + parser.add_argument('-i', '--img', default=img, type=str) + parser.add_argument('-x', '--xval', default=x, type=int) + parser.add_argument('-y', '--yval', default=y, type=int) + args = parser.parse_args() + main(**vars(args)) From 232ca0ce60bb5be235d1e7974e662a5eed422255 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 11 Jan 2023 12:00:16 -0800 Subject: [PATCH 35/57] updating readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 38d81d1..3bad2f6 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,9 @@ Note: I created full and mini examples (a subset of rows) for the cases. If you ## PyTests -To run the pytests, you'll need to install pytest and mock. Then, run from the upper directory: +To run the pytests, you'll need to install pytest and mock. You can do this with "pip install pytest" and "pip install mock". + +Then, run from the upper directory: ```bash pytest From 3acefbc57f612b0a674364afd55bc388f93284b6 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 15 Mar 2023 13:30:44 -0700 Subject: [PATCH 36/57] remove lroc localizers, we will just use the four courner localizer instead --- pdsc/localization.py | 86 -------------------------------------------- 1 file changed, 86 deletions(-) diff --git a/pdsc/localization.py b/pdsc/localization.py index 0215db0..f121cab 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -630,92 +630,6 @@ def __init__(self, metadata): metadata.north_azimuth, 1 ) - - -@register_localizer('lroc_cdr') -def lroc_cdr_localizer(metadata, browse=False): - """ - Constructs the appropriate LROC CDR localizer for the desired data - product type - - :param metadata: - "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object - :param browse: - construct localizer for the BROWSE data product - - :return: a :py:class:`Localizer` for the appropriate data product - """ - if browse: - # browse is set when creating the localizer - return LrocCdrBrowseLocalizer(metadata) - else: - return LrocCdrLocalizer(metadata) - -class LrocCdrLocalizer(GeodesicLocalizer): - """ - A localizer for the Lroc CDR observations (subclass of - :py:class:`GeodesicLocalizer`) - """ - - DEFAULT_RESOLUTION_M = 1/3*(1e-6) - """ - Sets the default resolution for lroc CDR localization - 1/3 of that of HiRISE - """ - - BODY_RADIUS = MOON_RADIUS_M - BODY = Geodesic(BODY_RADIUS, MOON_FLATTENING) - - def __init__(self, metadata): - """ - :param metadata: - """ - helper_localizer = GeodesicLocalizer( - metadata.lines / 2.0, metadata.samples / 2.0, - metadata.center_latitude, metadata.center_longitude, - metadata.lines, metadata.samples, - metadata.pixel_width, - metadata.pixel_width, - metadata.north_azimuth, 1 - ) - - super(LrocCdrLocalizer, self).__init__( - metadata.lines / 2.0, metadata.samples / 2.0, - metadata.center_latitude, metadata.center_longitude, - metadata.lines, metadata.samples, - metadata.pixel_width, - metadata.pixel_width, - metadata.north_azimuth, 1 - ) - -class LrocCdrBrowseLocalizer(LrocCdrLocalizer): - """ - erd: A localizer for the Lroc CDR "browse" images (subclass of - :py:class:`LrocCdrLocalizer`) - This classifier is included for convenience; it simply scales the pixel - coordinates of the browse image to/from those of the full image before/after - calling the super-class implementation. - """ - - def __init__(self, metadata): - """ - :param metadata: - "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object - """ - super(LrocCdrBrowseLocalizer, self).__init__(metadata) - self.scale_factor = 0.5 # browse images are at half the resolution - - def pixel_to_latlon(self, row, col): - #print('inside lroc localizer') - return super(LrocCdrBrowseLocalizer, self).pixel_to_latlon( - row / self.scale_factor, col / self.scale_factor - ) - - def latlon_to_pixel(self, lat, lon): - pix = super(LrocCdrBrowseLocalizer, self).latlon_to_pixel(lat, lon) - return pix[0]*self.scale_factor, pix[1]*self.scale_factor - - @register_localizer('hirise_edr') class HiRiseLocalizer(GeodesicLocalizer): """ From 3eb7e83a740869371a742ce05954d895f27e9e42 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 15 Mar 2023 19:43:06 -0700 Subject: [PATCH 37/57] added lroc localizer using 4 point localizer, looks like upperright and lowerleft swapped --- README.md | 4 +- pdsc/config/lroc_cdr_metadata.yaml | 8 ++++ pdsc/ingest.py | 6 ++- pdsc/localization.py | 74 ++++++++++++++++++++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3bad2f6..44b991d 100644 --- a/README.md +++ b/README.md @@ -119,8 +119,8 @@ Follow the docs for basic usage, but make sure you're in the python prompt: ``` # set the directory where the database is stored: export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ -# on my mac, for minidatabase: -# export PDSC_DATABASE_DIR=/Users/edunkel/Documents/Projects/PDS/LROC/PDSIMG_repos/pdsc/outputs_lroc_mini/ +# or mini database +# export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ python >>> import pdsc >>> pds_client = pdsc.PdsClient() diff --git a/pdsc/config/lroc_cdr_metadata.yaml b/pdsc/config/lroc_cdr_metadata.yaml index 44d8c3a..79ba793 100644 --- a/pdsc/config/lroc_cdr_metadata.yaml +++ b/pdsc/config/lroc_cdr_metadata.yaml @@ -29,6 +29,14 @@ columns: - [SUB_SPACECRAFT_LONGITUDE, sub_spacecraft_longitude, real] - [SOLAR_DISTANCE, solar_distance, real] - [SOLAR_LONGITUDE, solar_longitude, real] + - [UPPER_RIGHT_LATITUDE, upper_right_latitude, real] + - [UPPER_RIGHT_LONGITUDE, upper_right_longitude, real] + - [LOWER_RIGHT_LATITUDE, lower_right_latitude, real] + - [LOWER_RIGHT_LONGITUDE, lower_right_longitude, real] + - [UPPER_LEFT_LATITUDE, upper_left_latitude, real] + - [UPPER_LEFT_LONGITUDE, upper_left_longitude, real] + - [LOWER_LEFT_LATITUDE, lower_left_latitude, real] + - [LOWER_LEFT_LONGITUDE, lower_left_longitude, real] scale_factors: SPACECRAFT_ALTITUDE: 1000 # km to m diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 1948a28..41b7d95 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -313,4 +313,8 @@ def ingest_idx(label_file, table_file, configpath, outputdir): if body_radius == MARS_RADIUS_M: store_segment_tree(outputfile, segments) else: - store_segment_tree(outputfile, segments, body_radius) + if (segments != []): + store_segment_tree(outputfile, segments, body_radius) + else: + print('No segments to save as a tree') + diff --git a/pdsc/localization.py b/pdsc/localization.py index f121cab..840f5a9 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -743,6 +743,64 @@ def __init__(self, metadata): corners, 1.0, 1.0, 1 ) +class LrocCdrLocalizer(FourCornerLocalizer): + """ + A localizer for the LROC CDR observations (subclass of + :py:class:`FourCornerLocalizer`) + """ + + DEFAULT_RESOLUTION_M = 1/3*(1e-6) + """ + Sets the default resolution for lroc CDR localization + 1/3 of that of HiRISE + """ + + NORMALIZED_PIXEL_SPACE = False + + def __init__(self, metadata): + """ + :param metadata: + "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + """ + corners = np.array([ + [metadata.upper_left_latitude, metadata.upper_left_longitude], + [metadata.lower_left_latitude, metadata.lower_left_longitude], + [metadata.lower_right_latitude, metadata.lower_right_longitude], + [metadata.upper_right_latitude, metadata.upper_right_longitude], + ]) + super(LrocCdrLocalizer, self).__init__( + corners, metadata.lines, metadata.samples, 1 + ) + +class LrocCdrBrowseLocalizer(FourCornerLocalizer): + """ + A localizer for the LROC CDR observations (subclass of + :py:class:`FourCornerLocalizer`) + """ + + DEFAULT_RESOLUTION_M = 1/3*(1e-6)*2 + """ + Sets the default resolution for lroc CDR localization + 1/3 of that of HiRISE, plus factor of 2 for browse + """ + + NORMALIZED_PIXEL_SPACE = False + + def __init__(self, metadata): + """ + :param metadata: + "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + """ + corners = np.array([ + [metadata.upper_left_latitude, metadata.upper_left_longitude], + [metadata.lower_left_latitude, metadata.lower_left_longitude], + [metadata.lower_right_latitude, metadata.lower_right_longitude], + [metadata.upper_right_latitude, metadata.upper_right_longitude], + ]) + super(LrocCdrBrowseLocalizer, self).__init__( + corners, metadata.lines/2, metadata.samples/2, 1 + ) + class HiRiseRdrLocalizer(MapLocalizer): """ A localizer for the HiRISE RDR (map-projected) observations (subclass of @@ -834,6 +892,22 @@ def hirise_rdr_localizer(metadata, nomap=False, browse=False, else: return HiRiseRdrLocalizer(metadata) +@register_localizer('lroc_cdr') +def lroc_cdr_localizer(metadata, browse=False): + """ + Constructs the LROC CDR localizer (data is not map projected) + + :param metadata: + "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + :param browse: + construct localizer for the BROWSE data product + :return: a :py:class:`Localizer` for the appropriate data product + """ + if browse: + return LrocCdrBrowseLocalizer(metadata) + else: + return LrocCdrLocalizer(metadata) + @register_localizer('moc') class MocLocalizer(GeodesicLocalizer): """ From 6757e2fd6af021c4974c40bd86382d9f97ebc33a Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 15 Mar 2023 20:09:52 -0700 Subject: [PATCH 38/57] corner pixels and lat/lon now line up --- pdsc/localization.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pdsc/localization.py b/pdsc/localization.py index 840f5a9..d8f2a61 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -764,9 +764,9 @@ def __init__(self, metadata): """ corners = np.array([ [metadata.upper_left_latitude, metadata.upper_left_longitude], - [metadata.lower_left_latitude, metadata.lower_left_longitude], - [metadata.lower_right_latitude, metadata.lower_right_longitude], [metadata.upper_right_latitude, metadata.upper_right_longitude], + [metadata.lower_right_latitude, metadata.lower_right_longitude], + [metadata.lower_left_latitude, metadata.lower_left_longitude], ]) super(LrocCdrLocalizer, self).__init__( corners, metadata.lines, metadata.samples, 1 @@ -793,9 +793,9 @@ def __init__(self, metadata): """ corners = np.array([ [metadata.upper_left_latitude, metadata.upper_left_longitude], - [metadata.lower_left_latitude, metadata.lower_left_longitude], - [metadata.lower_right_latitude, metadata.lower_right_longitude], [metadata.upper_right_latitude, metadata.upper_right_longitude], + [metadata.lower_right_latitude, metadata.lower_right_longitude], + [metadata.lower_left_latitude, metadata.lower_left_longitude], ]) super(LrocCdrBrowseLocalizer, self).__init__( corners, metadata.lines/2, metadata.samples/2, 1 From b2df3946dce6886d2e020bf28e016b93299ac718 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Fri, 17 Mar 2023 21:43:21 -0700 Subject: [PATCH 39/57] readme update --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 44b991d..be4dc01 100644 --- a/README.md +++ b/README.md @@ -95,18 +95,15 @@ pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/ Full lroc database: +running with file I got from pdsfs2: ``` -pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/from_pdsfs2/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ ``` Here is a mini example for lroc: ``` pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ - -# on my mac: -# pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /Users/edunkel/Documents/Projects/PDS/LROC/PDSIMG_repos/pdsc/inputs_mini/lroc/CUMINDEX.LBL /Users/edunkel/Documents/Projects/PDS/LROC/PDSIMG_repos/pdsc/outputs_lroc_mini/ - ``` Note: I need to check SIS documentation for localization function coordinate system, but PDSC is now able to handle bodies other than just Mars (was originally hard-coded). From 041f69fc4a59a976686ba6e96f98a8b846193408 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 29 Mar 2023 17:09:09 -0700 Subject: [PATCH 40/57] added scripts used to test pdsc localizer --- scripts/get_lat_lon.py | 34 ----------- scripts/lat_lon_center_coord_check.py | 57 ++++++++++++++++++ scripts/lroc_nac_pixel_to_latlon.py | 84 +++++++++++++++++++++++++++ 3 files changed, 141 insertions(+), 34 deletions(-) delete mode 100644 scripts/get_lat_lon.py create mode 100644 scripts/lat_lon_center_coord_check.py create mode 100644 scripts/lroc_nac_pixel_to_latlon.py diff --git a/scripts/get_lat_lon.py b/scripts/get_lat_lon.py deleted file mode 100644 index 84b903b..0000000 --- a/scripts/get_lat_lon.py +++ /dev/null @@ -1,34 +0,0 @@ -import os -import numpy as np -import pdsc -import pdb - -# Emily Dunkel -# 2022 -# Simple script to look at lat lon conversion - - -def main(img, xval, yval): - """ - Get the lat/long from the pixel values from the image - """ - client = pdsc.PdsClient() - metadata = client.query_by_observation_id('lroc_cdr', ' M101013931LC') - mydata = metadata[0] - localizer = pdsc.get_localizer(mydata, browse=True) - lat, lon = localizer.pixel_to_latlon(10, 10) - print('lat:', lat) - print('lon: ', lon) - -if __name__ == '__main__': - import argparse - parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) - - img = ' M101013931LC' - x = 10 - y = 10 - parser.add_argument('-i', '--img', default=img, type=str) - parser.add_argument('-x', '--xval', default=x, type=int) - parser.add_argument('-y', '--yval', default=y, type=int) - args = parser.parse_args() - main(**vars(args)) diff --git a/scripts/lat_lon_center_coord_check.py b/scripts/lat_lon_center_coord_check.py new file mode 100644 index 0000000..4d331d1 --- /dev/null +++ b/scripts/lat_lon_center_coord_check.py @@ -0,0 +1,57 @@ +# Emily Dunkel +# 2023 +# Script to look at center lat lon conversion + +import os +import numpy as np +import pdsc +import pdb + +client = pdsc.PdsClient() + +def get_pixel_cnt_diff(img): + """ + Get the pixel difference between the center lat/lon and calculated + """ + metadata = client.query_by_observation_id('lroc_cdr', img) + if metadata == []: + print('Could not get metadata for: ', img) + row_diff = 'NULL' + col_diff = 'NULL' + else: + mydata = metadata[0] + nrows = mydata.lines + ncols = mydata.samples + localizer = pdsc.get_localizer(mydata, browse=False) + row_c, col_c = localizer.latlon_to_pixel(mydata.center_latitude, mydata.center_longitude) + row_diff = abs(nrows/2 - row_c); + col_diff = abs(ncols/2 - col_c); + print('row diff:', int(round(row_diff))) + print('col diff: ', int(round(col_diff))) + + return row_diff, col_diff + +if __name__ == '__main__': + + img_list = [' M101014437RC', ' M119217559LC', ' M186790112RC', ' M186786083LC', ' M186778737LC', + ' M121817429LC', ' M186778235RC', ' M186775740LC', ' M186775813RC', ' M186762974RC', + ' M117358581LC', ' M186749329RC', ' M186728887RC', ' M157867349LC', ' M160230711LC', + ' M186627048RC', ' M109978196RC', ' M109987085RC', ' M101013931LC', ' M112699470LC', + ' M112713912LC', ' M112722915RC', ' M148563970RC', ' M186790281RC', ' M191761375RC'] + res = 0.5 # resolution in meters + count = 0 + row_l = [] + col_l = [] + for ii in img_list: + count = count + 1 + print(count) + row_diff, col_diff = get_pixel_cnt_diff(ii) + row_diff_m = int(round(res * row_diff)) + col_diff_m = int(round(res * col_diff)) + row_l.append(row_diff_m) + col_l.append(col_diff_m) + + print('mean row diff in m: ', np.mean(row_l)) + print('mean col diff in m: ', np.mean(col_l)) + print('max row diff in m: ', max(row_l)) + print('max col diff in m: ', max(col_l)) diff --git a/scripts/lroc_nac_pixel_to_latlon.py b/scripts/lroc_nac_pixel_to_latlon.py new file mode 100644 index 0000000..84b98d1 --- /dev/null +++ b/scripts/lroc_nac_pixel_to_latlon.py @@ -0,0 +1,84 @@ +# !/usr/bin/env python +# This script provides examples for pixel to lat/lon coordinates conversion for +# LROC NAC CDR images (the conversion routine is exactly the same as the +# FourCornerLocalizer from PDSC) +# +# Steven Lu +# Feb. 24, 2023 + +import numpy as np + + +def latlon2unit(latlon): + llrad = np.deg2rad(latlon) + sinll = np.sin(llrad) + cosll = np.cos(llrad) + + return np.array([ + cosll[0] * cosll[1], + cosll[0] * sinll[1], + sinll[0] + ]) + + +def xyz2latlon(xyz): + norm = np.linalg.norm(xyz) + if norm == 0: + raise ValueError('Point must be nonzero') + x, y, z = (xyz / norm) + + return np.rad2deg([ + np.arcsin(z), + np.arctan2(y, x) + ]) + + +def main(): + # Test case 1 for LROC NAC CDR image M118769870LE + # + # According to the metadata at the URL (https://wms.lroc.asu.edu/lroc/view_lroc/LRO-L-LROC-3-CDR-V1.0/M118769870LC): + # (Note that following metadata are also available in the LROC cumulative index file) + # center lat/lon = (-21.58, 165.21) + # top left corner lat/lon = (-21.94, 165.17) + # bottom left corner lat/lon = (-21.21, 165.16) + # bottom right corner lat/lon = (-21.21, 165.25) + # top right corner lat/lon = (-21.94, 165.26) + # total rows = 38912 + # total cols = 5064 + corners = np.array([ + [-21.94, 165.17], # top left + [-21.21, 165.16], # bottom left + [-21.21, 165.25], # bottom right + [-21.94, 165.26] # top right + ]) + n_rows = 38912 + n_cols = 5064 + + C = np.array([ + [latlon2unit(corners[0]), latlon2unit(corners[3])], + [latlon2unit(corners[1]), latlon2unit(corners[2])] + ]) + + center_row = n_rows // 2 + center_col = n_cols // 2 + dx = np.array([n_cols - center_col, center_col]) + dy = np.array([n_rows - center_row, center_row]) + + # bi-linear interpolation + interpolated = np.array([ + np.dot(dx, np.dot(C[..., dim], dy.T)) + for dim in range(3) + ]) / float(n_rows * n_cols) + + center_lat, center_lon = xyz2latlon(interpolated) + center_lat = float('{:.2f}'.format(center_lat)) + center_lon = float('{:.2f}'.format(center_lon)) + print(f'center lat/lon = ({center_lat}, {center_lon})') + + # Compare to the center lat/lon from the metadata + assert center_lat == -21.58 + assert center_lon == 165.21 + + +if __name__ == '__main__': + main() From 18a7940a55b981c7109f08a88b0d9da6cbd2aae9 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 29 Mar 2023 17:15:10 -0700 Subject: [PATCH 41/57] updated readme --- README.md | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index be4dc01..d8b4713 100644 --- a/README.md +++ b/README.md @@ -21,12 +21,6 @@ of Technology. ---- - -# Updates - -Emily Dunkel: updated for LROC - - # Usage First, create and activate a bare-bones env using python 3.7: @@ -66,7 +60,7 @@ wget -O RDRCUMINDEX.LBL https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX wget -O RDRCUMINDEX.TAB https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.TAB ``` -To ingest indices: +Example to ingest indices (note: I was running from analysis): ```bash pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise/ @@ -93,9 +87,9 @@ pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/ # LROC -Full lroc database: +LROC database: -running with file I got from pdsfs2: +Running with file I got from pdsfs2 on analysis: ``` pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/from_pdsfs2/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ ``` @@ -106,8 +100,6 @@ Here is a mini example for lroc: pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ ``` -Note: I need to check SIS documentation for localization function coordinate system, but PDSC is now able to handle bodies other than just Mars (was originally hard-coded). - # Basic Usage @@ -116,14 +108,10 @@ Follow the docs for basic usage, but make sure you're in the python prompt: ``` # set the directory where the database is stored: export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ -# or mini database -# export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ python >>> import pdsc >>> pds_client = pdsc.PdsClient() >>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101014437RC') -# or, for minidatabase: -#>>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101013931LC') >>> mydata = metadata[0] >>> localizer = pdsc.get_localizer(mydata, browse=True) >>> lat, lon = localizer.pixel_to_latlon(10, 10) @@ -131,7 +119,7 @@ python # Scripts -To get lroc distributed samples around the globe, you can call get_distritubed_samples.py. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: +To get lroc distributed samples around the lunar globe, you can call get_distritubed_samples.py. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: ``` conda activate p37 From 012366f8a43b7441d11816efdcc2ff1c64dfbbd9 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 29 Mar 2023 17:36:08 -0700 Subject: [PATCH 42/57] readme update --- README.md | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index d8b4713..646bec2 100644 --- a/README.md +++ b/README.md @@ -35,9 +35,7 @@ Then, do a pip install: pip install . ``` -I have also tried with python2, but when doing pip install, I got an error with incompatible numpy versions, but python 3 works, so recommend to use that. - -Note: I created full and mini examples (a subset of rows) for the cases. If you take a subset of the rows, you must also update the label file with the reduced number of rows. +Note: I created full and mini examples (a subset of rows) for the cases. If you take a subset of the rows, you must also update the label file with the reduced number of rows. The full examples are available on the JPL MLIA machines only, but I have included the mini examples in this repository. ## PyTests @@ -60,28 +58,31 @@ wget -O RDRCUMINDEX.LBL https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX wget -O RDRCUMINDEX.TAB https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.TAB ``` -Example to ingest indices (note: I was running from analysis): +Example call to ingest indices: ```bash -pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise/ +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /PATH/TO/LBL/FOLDER /PATH/TO/OUT/FOLDER ``` -Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly): +Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly, and have added it to this repo): +Note: the LBL folder must be a full path, so replace /home/edunkel/PDS/lroc_proj to where you are storing your repository. ``` -pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/hirise/RDRCUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_hirise_mini/ +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/hirise/RDRCUMINDEX.LBL /PATH/TO/OUT/FOLDER ``` # CTX example: +Example call if you have access to analysis machines: + ``` -pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputs_ctx/ +pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /PATH/TO/OUT/FOLDER ``` Or, a mini example (I took a subset of rows from the table file and updated the index accordingly): ``` -pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/edunkel/PDS/lroc_proj/pdsc/outputs_ctx_mini/ +pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /PATH/TO/OUT/FOLDER ``` @@ -89,15 +90,16 @@ pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /home/ LROC database: -Running with file I got from pdsfs2 on analysis: +Example call if you have access to analysis machines: + ``` -pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/from_pdsfs2/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/from_pdsfs2/CUMINDEX.LBL /PATH/TO/OUT/FOLDER ``` Here is a mini example for lroc: ``` -pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /home/edunkel/PDS/lroc_proj/pdsc/outputs_lroc_mini/ +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /PATH/TO/OUT/FOLDER ``` @@ -124,7 +126,7 @@ To get lroc distributed samples around the lunar globe, you can call get_distrit ``` conda activate p37 # point to database -export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ # example on analysis machines python scripts/get_distributed_samples.py -o OUTPUT/FILE -n NUM_SAMPLES ``` From 7802a01b1b09aa0fafd520fbe079e94f558bf7ef Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 29 Mar 2023 17:38:16 -0700 Subject: [PATCH 43/57] format --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 646bec2..737733f 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /PATH/TO/LBL/FOLDER /PATH/TO ``` Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly, and have added it to this repo): + Note: the LBL folder must be a full path, so replace /home/edunkel/PDS/lroc_proj to where you are storing your repository. ``` From 3c74bde20ef839bd39ac6d9a1d4891216d39904d Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Thu, 30 Mar 2023 11:47:13 -0700 Subject: [PATCH 44/57] unit tests for lroc --- README.md | 26 +++++++++--- pdsc/localization.py | 2 +- scripts/README.md | 1 + test/test_localization.py | 86 +++++++++++++++++++++++++++++++++++++-- 4 files changed, 104 insertions(+), 11 deletions(-) create mode 100644 scripts/README.md diff --git a/README.md b/README.md index 737733f..1ed6d84 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,11 @@ pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pd # Basic Usage -Follow the docs for basic usage, but make sure you're in the python prompt: +Follow the docs for basic usage, but make sure you're in the python prompt. + +## Example commands for LROC + +We show some example commands for LROC imagery below: ``` # set the directory where the database is stored: @@ -114,15 +118,23 @@ export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ python >>> import pdsc >>> pds_client = pdsc.PdsClient() ->>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101014437RC') +>>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101013931LC') >>> mydata = metadata[0] ->>> localizer = pdsc.get_localizer(mydata, browse=True) ->>> lat, lon = localizer.pixel_to_latlon(10, 10) +>>> localizer = pdsc.get_localizer(mydata, browse=False) +>>> nrows = mydata.lines +>>> ncols = mydata.samples +>>> lat_center, lon_center = localizer.pixel_to_latlon(nrows//2, ncols//2) +# The localizer will have an error on the order of 10-100s meters since we assume spherical +>>> mydata.center_latitude +>>> mydata.center_longitude +# You can go back to pixel value +>>> localizer.latlon_to_pixel(mydata.center_latitude, mydata.center_longitude) + ``` -# Scripts +# LROC Scripts -To get lroc distributed samples around the lunar globe, you can call get_distritubed_samples.py. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: +To get lroc distributed samples around the lunar globe, you can call get_distritubed_samples.py in the scripts directory. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: ``` conda activate p37 @@ -134,3 +146,5 @@ python scripts/get_distributed_samples.py -o OUTPUT/FILE -n NUM_SAMPLES This will print a list of examples with their sun angle (which helps with labeling, since craters look different depending on where the sun is). I have a script to assemble the data from this list in the deep learning repository here: https://github.jpl.nasa.gov/PDSIMG/deep-learning/blob/master/src/lroc/salience/scripts/assemble_data.py + + diff --git a/pdsc/localization.py b/pdsc/localization.py index d8f2a61..40765cc 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -208,7 +208,7 @@ def latlon_to_pixel(self, lat, lon, resolution_m=None, resolution_pix=0.1): loc = np.deg2rad([lat, lon]) - print(self.BODY_RADIUS) + #print(self.BODY_RADIUS) def f(u): loc_u = np.deg2rad(self.pixel_to_latlon(*u)) return geodesic_distance(loc, loc_u, self.BODY_RADIUS) diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 0000000..7f3b939 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1 @@ +Scripts related to LROC diff --git a/test/test_localization.py b/test/test_localization.py index edd1d4b..e3b1f53 100644 --- a/test/test_localization.py +++ b/test/test_localization.py @@ -2,6 +2,7 @@ Unit tests for Localization code """ import pytest +import pdb import numpy as np from pdsc.metadata import PdsMetadata from numpy.testing import assert_allclose @@ -335,6 +336,57 @@ ((-12.059007889850992, -69.11293214267153), (7168, 5056)), ((-12.78793820020455, -69.02157480900689), (0, 5056)), ] +# LROC Test cases are based on comparing the metadata with the +# localization for the 4 corners and center of the image + +LROC_NAC_M101013931LC_META = PdsMetadata( + 'lroc_cdr', center_latitude=-89.34, center_longitude=55.26, + lower_left_latitude=-88.58, lower_left_longitude=19.44, + upper_left_latitude=-89.1, upper_left_longitude=130.66, + upper_right_latitude=-89.15, upper_right_longitude=134.15, + lower_right_latitude=-88.6, lower_right_longitude=16.79, + lines=52224, samples=2532) + +# Test the 4 corners +LROC_NAC_M101013931LC_TEST_CASE = [ + ((-88.58, 19.44), (52224, 0)), # lower left + ((-89.1, 130.66), (0, 0)), # upper left + ((-89.15, 134.15), (0, 2532)), # upper right + ((-88.6, 16.79), (52224, 2532)), # lower right +] + + +LROC_NAC_M101014437RC_META = PdsMetadata( + 'lroc_cdr', center_latitude=-63.14, center_longitude=354.8, + lower_left_latitude=-63.09, lower_left_longitude=354.89, + upper_left_latitude=-63.18, upper_left_longitude=354.9, + upper_right_latitude=-63.18, upper_right_longitude=354.71, + lower_right_latitude=-63.09, lower_right_longitude=354.71, + lines=5120, samples=5064) + +# Test the 4 corners +LROC_NAC_M101014437RC_TEST_CASE = [ + ((-63.09, 354.89), (5120, 0)), # lower left + ((-63.18, 354.9), (0, 0)), # upper left + ((-63.18, 354.71), (0, 5064)), # upper right + ((-63.09, 354.71), (5120, 5064)), # lower right +] + +LROC_NAC_M191761375RC_META = PdsMetadata( + 'lroc_cdr', center_latitude=80.52, center_longitude=188.83, + lower_left_latitude=81.53, lower_left_longitude=190.57, + upper_left_latitude=79.48, upper_left_longitude=189.11, + upper_right_latitude=79.51, upper_right_longitude=187.41, + lower_right_latitude=81.56, lower_right_longitude=188.46, + lines=23552, samples=5064) + +# Test the 4 corners +LROC_NAC_M191761375RC_TEST_CASE = [ + ((81.53, 190.57), (23552, 0)), # lower left + ((79.48, 189.11), (0, 0)), # upper left + ((79.51, 187.41), (0, 5064)), # upper right + ((81.56, 188.46), (23552, 5064)), # lower right +] @unit @pytest.mark.parametrize( @@ -353,20 +405,29 @@ CTX_P06_003181_0946_XI_85S260W_TEST_CASE), (CTX_T01_000849_1676_XI_12S069W_META, CTX_T01_000849_1676_XI_12S069W_TEST_CASE), + (LROC_NAC_M101013931LC_META, LROC_NAC_M101013931LC_TEST_CASE), + (LROC_NAC_M101014437RC_META, LROC_NAC_M101014437RC_TEST_CASE), + (LROC_NAC_M191761375RC_META, LROC_NAC_M191761375RC_TEST_CASE) ] ) def test_localizer(metadata, latlons_pixels, browse=False): if metadata.instrument == 'hirise_rdr': localizer = get_localizer(metadata, browse=browse) + elif metadata.instrument == 'lroc_cdr': + localizer = get_localizer(metadata, browse=browse) else: localizer = get_localizer(metadata) for (lat, lon), (row, col) in latlons_pixels: if browse: - factor = ( - float(HiRiseRdrBrowseLocalizer.HIRISE_BROWSE_WIDTH) / - metadata.samples - ) + if metadata.instrument == 'hirise_rdr': + factor = ( + float(HiRiseRdrBrowseLocalizer.HIRISE_BROWSE_WIDTH) / + metadata.samples + ) + elif metadata.instrument == 'lroc_cdr': + factor = 0.5 + row *= factor col *= factor @@ -407,6 +468,23 @@ def test_localizer(metadata, latlons_pixels, browse=False): # Run the same set of tests for the browse localizer... test_localizer(metadata, latlons_pixels, browse=True) + + if metadata.instrument == 'lroc_cdr': + if not browse: + # Run the same set of tests for the browse localizer + test_localizer(metadata, latlons_pixels, browse=True) + + # Test that the center lat/lon values are within a tolerance (100s meters) + # of the calculated center values. Glob is assumed to be a sphere so parallax causes these errors + # test with browse false + localizer = get_localizer(metadata, browse=False) + row_c, col_c = localizer.latlon_to_pixel(metadata.center_latitude, metadata.center_longitude) + assert_allclose((row_c, col_c), (metadata.lines // 2, metadata.samples // 2), atol=450) + # test with browse true + localizer = get_localizer(metadata, browse=True) + row_c, col_c = localizer.latlon_to_pixel(metadata.center_latitude, metadata.center_longitude) + assert_allclose((row_c, col_c), (metadata.lines // 4, metadata.samples // 4), atol=225) + # Regression tests for all CCDs/channels for HiRISE EDRs HIRISE_EDR_PSP_001334_2645_TEST_CASES = [ ( 8250, 256, 1.2696, 'BG12', 0, 4, 84.3370604, -16.0018754, 0, 0), From 58b7fcef4d706c44c7612827b9ced2d30ac39b63 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Thu, 30 Mar 2023 13:57:39 -0700 Subject: [PATCH 45/57] updated documentation --- README.md | 23 ++++---- pdsc/localization.py | 2 +- scripts/get_distributed_samples.py | 15 ++--- scripts/lat_lon_center_coord_check.py | 2 +- scripts/lroc_nac_pixel_to_latlon.py | 84 --------------------------- 5 files changed, 21 insertions(+), 105 deletions(-) delete mode 100644 scripts/lroc_nac_pixel_to_latlon.py diff --git a/README.md b/README.md index 1ed6d84..e650ec5 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,12 @@ several instruments from Mars orbiters are supported, but the system is designed to be extensible to other instruments and bodies. Please refer to the [documentation](https://jplmlia.github.io/pdsc/) for -instructions on installation, setup, and usage. +instructions on installation, setup, and usage. We also show some simple +commands below. --- -Copyright 2019, by the California Institute of Technology. ALL RIGHTS RESERVED. +Copyright 2023, by the California Institute of Technology. ALL RIGHTS RESERVED. United States Government Sponsorship acknowledged. Any commercial use must be negotiated with the Office of Technology Transfer at the California Institute of Technology. @@ -64,12 +65,10 @@ Example call to ingest indices: pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /PATH/TO/LBL/FOLDER /PATH/TO/OUT/FOLDER ``` -Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly, and have added it to this repo): - -Note: the LBL folder must be a full path, so replace /home/edunkel/PDS/lroc_proj to where you are storing your repository. +Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly, and have added it to this git repository): ``` -pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/hirise/RDRCUMINDEX.LBL /PATH/TO/OUT/FOLDER +pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /PATH/TO/REPO/inputs_mini/hirise/RDRCUMINDEX.LBL /PATH/TO/OUT/FOLDER ``` # CTX example: @@ -83,7 +82,7 @@ pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /PATH/TO/OU Or, a mini example (I took a subset of rows from the table file and updated the index accordingly): ``` -pdsc_ingest /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/ctx/cumindex.tab /PATH/TO/OUT/FOLDER +pdsc_ingest /PATH/TO/REPO/inputs_mini/ctx/cumindex.tab /PATH/TO/OUT/FOLDER ``` @@ -97,10 +96,10 @@ Example call if you have access to analysis machines: pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/from_pdsfs2/CUMINDEX.LBL /PATH/TO/OUT/FOLDER ``` -Here is a mini example for lroc: +Here is a mini example for lroc included in this repository: ``` -pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/CUMINDEX.LBL /PATH/TO/OUT/FOLDER +pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /PATH/TO/REPO/inputs_mini/lroc/CUMINDEX.LBL /PATH/TO/OUT/FOLDER ``` @@ -113,8 +112,8 @@ Follow the docs for basic usage, but make sure you're in the python prompt. We show some example commands for LROC imagery below: ``` -# set the directory where the database is stored: -export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ +# set the directory where the database is stored (from the pdsc_ingest command): +export PDSC_DATABASE_DIR=/PATH/TO/OUT/FOLDER python >>> import pdsc >>> pds_client = pdsc.PdsClient() @@ -139,7 +138,7 @@ To get lroc distributed samples around the lunar globe, you can call get_distrit ``` conda activate p37 # point to database -export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ # example on analysis machines +export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ # example on JPL MLIA analysis machines python scripts/get_distributed_samples.py -o OUTPUT/FILE -n NUM_SAMPLES ``` diff --git a/pdsc/localization.py b/pdsc/localization.py index 40765cc..6979e13 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -798,7 +798,7 @@ def __init__(self, metadata): [metadata.lower_left_latitude, metadata.lower_left_longitude], ]) super(LrocCdrBrowseLocalizer, self).__init__( - corners, metadata.lines/2, metadata.samples/2, 1 + corners, metadata.lines/2.0, metadata.samples/2.0, 1 ) class HiRiseRdrLocalizer(MapLocalizer): diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py index 38ccf50..e693821 100644 --- a/scripts/get_distributed_samples.py +++ b/scripts/get_distributed_samples.py @@ -1,3 +1,11 @@ +# Emily Dunkel +# 2022 +# Get maximally distant lroc imagery +# Selects a random image, then the maximally distant image from that, then for each image, get the minimum distance to every already select point, then take the max +# This will give us distributed samples around the globe +# Based on script: https://github-fn.jpl.nasa.gov/COSMIC/COSMIC_CTX_impacts/commit/e4c167a2e4d9e345693cd5e25df0149f5d641653 + + import os import numpy as np from sklearn.neighbors import DistanceMetric @@ -8,13 +16,6 @@ import pdsc import pdb -# Emily Dunkel -# 2022 -# Get maximally distant lroc imagery -# Selects a random image, then the maximally distant image from that, then for each image, get the minimum distance to every already select point, then take the max -# This will give us distributed samples around the globe -# Based on script: https://github-fn.jpl.nasa.gov/COSMIC/COSMIC_CTX_impacts/commit/e4c167a2e4d9e345693cd5e25df0149f5d641653 - def get_latlon(row): """ Return center lat/lon of image diff --git a/scripts/lat_lon_center_coord_check.py b/scripts/lat_lon_center_coord_check.py index 4d331d1..52d0757 100644 --- a/scripts/lat_lon_center_coord_check.py +++ b/scripts/lat_lon_center_coord_check.py @@ -1,6 +1,6 @@ # Emily Dunkel # 2023 -# Script to look at center lat lon conversion +# Script to look at center lat lon conversion for example LROC NAC imagery import os import numpy as np diff --git a/scripts/lroc_nac_pixel_to_latlon.py b/scripts/lroc_nac_pixel_to_latlon.py deleted file mode 100644 index 84b98d1..0000000 --- a/scripts/lroc_nac_pixel_to_latlon.py +++ /dev/null @@ -1,84 +0,0 @@ -# !/usr/bin/env python -# This script provides examples for pixel to lat/lon coordinates conversion for -# LROC NAC CDR images (the conversion routine is exactly the same as the -# FourCornerLocalizer from PDSC) -# -# Steven Lu -# Feb. 24, 2023 - -import numpy as np - - -def latlon2unit(latlon): - llrad = np.deg2rad(latlon) - sinll = np.sin(llrad) - cosll = np.cos(llrad) - - return np.array([ - cosll[0] * cosll[1], - cosll[0] * sinll[1], - sinll[0] - ]) - - -def xyz2latlon(xyz): - norm = np.linalg.norm(xyz) - if norm == 0: - raise ValueError('Point must be nonzero') - x, y, z = (xyz / norm) - - return np.rad2deg([ - np.arcsin(z), - np.arctan2(y, x) - ]) - - -def main(): - # Test case 1 for LROC NAC CDR image M118769870LE - # - # According to the metadata at the URL (https://wms.lroc.asu.edu/lroc/view_lroc/LRO-L-LROC-3-CDR-V1.0/M118769870LC): - # (Note that following metadata are also available in the LROC cumulative index file) - # center lat/lon = (-21.58, 165.21) - # top left corner lat/lon = (-21.94, 165.17) - # bottom left corner lat/lon = (-21.21, 165.16) - # bottom right corner lat/lon = (-21.21, 165.25) - # top right corner lat/lon = (-21.94, 165.26) - # total rows = 38912 - # total cols = 5064 - corners = np.array([ - [-21.94, 165.17], # top left - [-21.21, 165.16], # bottom left - [-21.21, 165.25], # bottom right - [-21.94, 165.26] # top right - ]) - n_rows = 38912 - n_cols = 5064 - - C = np.array([ - [latlon2unit(corners[0]), latlon2unit(corners[3])], - [latlon2unit(corners[1]), latlon2unit(corners[2])] - ]) - - center_row = n_rows // 2 - center_col = n_cols // 2 - dx = np.array([n_cols - center_col, center_col]) - dy = np.array([n_rows - center_row, center_row]) - - # bi-linear interpolation - interpolated = np.array([ - np.dot(dx, np.dot(C[..., dim], dy.T)) - for dim in range(3) - ]) / float(n_rows * n_cols) - - center_lat, center_lon = xyz2latlon(interpolated) - center_lat = float('{:.2f}'.format(center_lat)) - center_lon = float('{:.2f}'.format(center_lon)) - print(f'center lat/lon = ({center_lat}, {center_lon})') - - # Compare to the center lat/lon from the metadata - assert center_lat == -21.58 - assert center_lon == 165.21 - - -if __name__ == '__main__': - main() From d1bf8b520880ef0cc43727cd8b962b38e41afebc Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Fri, 9 Jun 2023 13:23:21 -0700 Subject: [PATCH 46/57] moved inputs_mini to PDSIMG/deep-learning repo --- inputs_mini/ctx/cumindex.lbl | 601 ------------------ inputs_mini/ctx/cumindex.tab | 53 -- inputs_mini/hirise/RDRCUMINDEX.LBL | 492 --------------- inputs_mini/hirise/RDRCUMINDEX.TAB | 9 - inputs_mini/lroc/CUMINDEX.LBL | 980 ----------------------------- inputs_mini/lroc/CUMINDEX.TAB | 12 - 6 files changed, 2147 deletions(-) delete mode 100644 inputs_mini/ctx/cumindex.lbl delete mode 100644 inputs_mini/ctx/cumindex.tab delete mode 100644 inputs_mini/hirise/RDRCUMINDEX.LBL delete mode 100644 inputs_mini/hirise/RDRCUMINDEX.TAB delete mode 100644 inputs_mini/lroc/CUMINDEX.LBL delete mode 100644 inputs_mini/lroc/CUMINDEX.TAB diff --git a/inputs_mini/ctx/cumindex.lbl b/inputs_mini/ctx/cumindex.lbl deleted file mode 100644 index b37c3c5..0000000 --- a/inputs_mini/ctx/cumindex.lbl +++ /dev/null @@ -1,601 +0,0 @@ -PDS_VERSION_ID = PDS3 -RECORD_TYPE = FIXED_LENGTH -RECORD_BYTES = 555 -FILE_RECORDS = 53 -^TABLE = "CUMINDEX.TAB" -DATA_SET_ID = "MRO-M-CTX-2-EDR-L0-V1.0" -SPACECRAFT_NAME = "MARS RECONNAISSANCE ORBITER" -INSTRUMENT_NAME = "CONTEXT CAMERA" -TARGET_NAME = MARS -MISSION_PHASE_NAME = "N/A" -PRODUCT_CREATION_TIME = 2007-05-23T19:00:00 - -OBJECT = TABLE - INTERCHANGE_FORMAT = ASCII - ROWS = 53 - COLUMNS = 51 - ROW_BYTES = 555 - INDEX_TYPE = CUMULATIVE - -OBJECT = COLUMN -NAME = VOLUME_ID -COLUMN_NUMBER = 1 -DATA_TYPE = CHARACTER -START_BYTE = 2 -BYTES = 9 -FORMAT = "A9" -DESCRIPTION = "volume id" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = FILE_SPECIFICATION_NAME -COLUMN_NUMBER = 2 -DATA_TYPE = CHARACTER -START_BYTE = 14 -BYTES = 35 -FORMAT = "A35" -DESCRIPTION = "file name" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = ORIGINAL_PRODUCT_ID -COLUMN_NUMBER = 3 -DATA_TYPE = CHARACTER -START_BYTE = 52 -BYTES = 16 -FORMAT = "A16" -DESCRIPTION = "original product id" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = PRODUCT_ID -COLUMN_NUMBER = 4 -DATA_TYPE = CHARACTER -START_BYTE = 71 -BYTES = 26 -FORMAT = "A26" -DESCRIPTION = "product id" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = IMAGE_TIME -COLUMN_NUMBER = 5 -DATA_TYPE = CHARACTER -START_BYTE = 100 -BYTES = 23 -FORMAT = "A23" -DESCRIPTION = "SCET time at start of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = INSTRUMENT_ID -COLUMN_NUMBER = 6 -DATA_TYPE = CHARACTER -START_BYTE = 126 -BYTES = 6 -FORMAT = "A6" -DESCRIPTION = "instrument id (abbreviated name or acronym)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = INSTRUMENT_MODE_ID -COLUMN_NUMBER = 7 -DATA_TYPE = CHARACTER -START_BYTE = 135 -BYTES = 5 -FORMAT = "A5" -DESCRIPTION = "command mode (ITL or NIFL) in which this image -was acquired" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LINE_SAMPLES -COLUMN_NUMBER = 8 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 142 -BYTES = 4 -FORMAT = "I4" -DESCRIPTION = "image width" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LINES -COLUMN_NUMBER = 9 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 147 -BYTES = 6 -FORMAT = "I6" -DESCRIPTION = "image height" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SPATIAL_SUMMING -COLUMN_NUMBER = 10 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 154 -BYTES = 2 -FORMAT = "I2" -DESCRIPTION = "spatial summing" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SCALED_PIXEL_WIDTH -COLUMN_NUMBER = 11 -DATA_TYPE = ASCII_REAL -START_BYTE = 157 -BYTES = 8 -FORMAT = "F8.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "image resolution in meters/pixel at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = PIXEL_ASPECT_RATIO -COLUMN_NUMBER = 12 -DATA_TYPE = ASCII_REAL -START_BYTE = 166 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "pixel aspect ratio (pixel height/pixel width) -at center of image. The image's center pixel is projected on the -ground and its linear extents are ratioed, so any effects of -emission angle and line time are modelled. To recover an image -with 'square' pixels, the image should be resampled to a height -of aspect_ratio * input height." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = EMISSION_ANGLE -COLUMN_NUMBER = 13 -DATA_TYPE = ASCII_REAL -START_BYTE = 173 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "emission angle at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = INCIDENCE_ANGLE -COLUMN_NUMBER = 14 -DATA_TYPE = ASCII_REAL -START_BYTE = 180 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "incidence angle at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = PHASE_ANGLE -COLUMN_NUMBER = 15 -DATA_TYPE = ASCII_REAL -START_BYTE = 187 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "phase angle at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = CENTER_LONGITUDE -COLUMN_NUMBER = 16 -DATA_TYPE = ASCII_REAL -START_BYTE = 194 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "center longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = CENTER_LATITUDE -COLUMN_NUMBER = 17 -DATA_TYPE = ASCII_REAL -START_BYTE = 201 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "center areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_LEFT_LONGITUDE -COLUMN_NUMBER = 18 -DATA_TYPE = ASCII_REAL -START_BYTE = 208 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper left longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_LEFT_LATITUDE -COLUMN_NUMBER = 19 -DATA_TYPE = ASCII_REAL -START_BYTE = 215 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper left areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_RIGHT_LONGITUDE -COLUMN_NUMBER = 20 -DATA_TYPE = ASCII_REAL -START_BYTE = 222 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper right longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_RIGHT_LATITUDE -COLUMN_NUMBER = 21 -DATA_TYPE = ASCII_REAL -START_BYTE = 229 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper right areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_LEFT_LONGITUDE -COLUMN_NUMBER = 22 -DATA_TYPE = ASCII_REAL -START_BYTE = 236 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower left longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_LEFT_LATITUDE -COLUMN_NUMBER = 23 -DATA_TYPE = ASCII_REAL -START_BYTE = 243 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower left areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_RIGHT_LONGITUDE -COLUMN_NUMBER = 24 -DATA_TYPE = ASCII_REAL -START_BYTE = 250 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower right longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_RIGHT_LATITUDE -COLUMN_NUMBER = 25 -DATA_TYPE = ASCII_REAL -START_BYTE = 257 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower right areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = MISSION_PHASE_NAME -COLUMN_NUMBER = 26 -DATA_TYPE = CHARACTER -START_BYTE = 265 -BYTES = 10 -FORMAT = "A10" -DESCRIPTION = "mission phase name" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = TARGET_NAME -COLUMN_NUMBER = 27 -DATA_TYPE = CHARACTER -START_BYTE = 278 -BYTES = 6 -FORMAT = "A6" -DESCRIPTION = "target name (e.g., MARS, PHOBOS, STAR, SPACE)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SPACECRAFT_CLOCK_START_COUNT -COLUMN_NUMBER = 28 -DATA_TYPE = CHARACTER -START_BYTE = 287 -BYTES = 15 -FORMAT = "A15" -DESCRIPTION = "spacecraft clock value at start of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = FOCAL_PLANE_TEMPERATURE -COLUMN_NUMBER = 29 -DATA_TYPE = ASCII_REAL -START_BYTE = 304 -BYTES = 5 -FORMAT = "F5.1" -DESCRIPTION = "focal plane temp in Kelvins" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LINE_EXPOSURE_DURATION -COLUMN_NUMBER = 30 -DATA_TYPE = ASCII_REAL -START_BYTE = 310 -BYTES = 8 -FORMAT = "F8.4" -DESCRIPTION = "line integration time in milliseconds" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = OFFSET_MODE_ID -COLUMN_NUMBER = 31 -DATA_TYPE = CHARACTER -START_BYTE = 320 -BYTES = 11 -FORMAT = "A11" -DESCRIPTION = "offset mode (see documentation)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SAMPLE_FIRST_PIXEL -COLUMN_NUMBER = 32 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 333 -BYTES = 4 -FORMAT = "I4" -DESCRIPTION = "first pixel stored from detector, zero-based" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SCALED_IMAGE_WIDTH -COLUMN_NUMBER = 33 -DATA_TYPE = ASCII_REAL -START_BYTE = 338 -BYTES = 7 -FORMAT = "F7.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "image width from left to right image edge in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SCALED_IMAGE_HEIGHT -COLUMN_NUMBER = 34 -DATA_TYPE = ASCII_REAL -START_BYTE = 346 -BYTES = 8 -FORMAT = "F8.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "image height from first line to last line in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SPACECRAFT_ALTITUDE -COLUMN_NUMBER = 35 -DATA_TYPE = ASCII_REAL -START_BYTE = 355 -BYTES = 7 -FORMAT = "F7.2" -DESCRIPTION = "distance from s/c to closest point on surface in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = TARGET_CENTER_DISTANCE -COLUMN_NUMBER = 36 -DATA_TYPE = ASCII_REAL -START_BYTE = 363 -BYTES = 7 -FORMAT = "F7.2" -DESCRIPTION = "distance from s/c to target body center in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SLANT_DISTANCE -COLUMN_NUMBER = 37 -DATA_TYPE = ASCII_REAL -START_BYTE = 371 -BYTES = 7 -FORMAT = "F7.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "range from s/c to intersection of view vector with -target body in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = USAGE_NOTE -COLUMN_NUMBER = 38 -DATA_TYPE = CHARACTER -START_BYTE = 380 -BYTES = 1 -FORMAT = "A1" -DESCRIPTION = "Because of the CTX's line-scan nature, depending on the -orientation and sense of rotation of the spacecraft, CTX images can -either be normal or flipped left-for-right (independent of whether the -image is north up or south up.) This flag will be 'F' if the image -should be flipped left-to-right, and 'N' if it is already in normal -form." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = NORTH_AZIMUTH -COLUMN_NUMBER = 39 -DATA_TYPE = ASCII_REAL -START_BYTE = 383 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "The angle in degrees clockwise from the reference axis -of the image (a line from the center to the right edge of the image) -to the direction to the north pole of the target body. If the -USAGE_NOTE described previously is 'F', the image should be flipped -prior to applying this angle." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SOLAR_AZIMUTH -COLUMN_NUMBER = 40 -DATA_TYPE = ASCII_REAL -START_BYTE = 390 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "The angle in degrees clockwise from the reference axis -of the image (a line from the center to the right edge of the image) -to the direction to the subsolar point on the target body. If the -USAGE_NOTE described previously is 'F', the image should be flipped -prior to applying this angle." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SOLAR_LONGITUDE -COLUMN_NUMBER = 41 -DATA_TYPE = ASCII_REAL -START_BYTE = 397 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "west longitude of subsolar point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SOLAR_LATITUDE -COLUMN_NUMBER = 42 -DATA_TYPE = ASCII_REAL -START_BYTE = 404 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "planetographic latitude of subsolar point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SPACECRAFT_LONGITUDE -COLUMN_NUMBER = 43 -DATA_TYPE = ASCII_REAL -START_BYTE = 411 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "west longitude of subspacecraft point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SPACECRAFT_LATITUDE -COLUMN_NUMBER = 44 -DATA_TYPE = ASCII_REAL -START_BYTE = 418 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "planetographic latitude of subspacecraft point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SOLAR_DISTANCE -COLUMN_NUMBER = 45 -DATA_TYPE = ASCII_REAL -START_BYTE = 425 -BYTES = 11 -FORMAT = "F11.1" -DESCRIPTION = "distance from the center of the image on the target body -to the center of the sun in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SOLAR_LONGITUDE -COLUMN_NUMBER = 46 -DATA_TYPE = ASCII_REAL -START_BYTE = 437 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "solar longitude ('L sub s') at time of image in degrees -from martian vernal equinox, as computed by the method in 'Accurate -analytic representations of solar time and seasons on Mars with -applications to the Pathfinder/Surveyor missions', Michael Allison, -Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOCAL_TIME -COLUMN_NUMBER = 47 -DATA_TYPE = ASCII_REAL -START_BYTE = 444 -BYTES = 5 -FORMAT = "F5.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "Local True Solar Time in decimal hours from midnight at -the center of the image, as computed by the method in 'Accurate -analytic representations of solar time and seasons on Mars with -applications to the Pathfinder/Surveyor missions', Michael Allison, -Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997). -An 'hour' in this context is an angular measure of 15 degrees -of solar motion." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = IMAGE_SKEW_ANGLE -COLUMN_NUMBER = 48 -DATA_TYPE = ASCII_REAL -START_BYTE = 450 -BYTES = 5 -FORMAT = "F5.1" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = -"The image skew angle is the absolute value, in degrees, of the angle -between the left edge (a line between the lower left and upper left -corners) and the bottom edge (a line between the lower left and lower -right corners) of the image, where the edges are projected on the -target body. For images whose footprints are exactly rectangular, -this angle will be 90 degrees. Departures from 90 degrees indicate a -non-rectangular image footprint, caused by slews of the spacecraft -during imaging outside the orbit plane or off-nadir pointing, or -both." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = RATIONALE_DESC -COLUMN_NUMBER = 49 -DATA_TYPE = CHARACTER -START_BYTE = 457 -BYTES = 80 -FORMAT = "A80" -DESCRIPTION = "A text description of the scientific purpose for the -acquisition of this image. For routine mapping operations, this will -most likely be the goal of the image as targeted (which may not be met -if the image missed its target significantly, the atmosphere was -cloudy, etc.)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = DATA_QUALITY_DESC -COLUMN_NUMBER = 50 -DATA_TYPE = CHARACTER -START_BYTE = 540 -BYTES = 6 -FORMAT = "A6" -DESCRIPTION = "'OK' if all fragments of the image are -received without detected checksum or sequence errors, and 'ERROR' -otherwise." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = ORBIT_NUMBER -COLUMN_NUMBER = 51 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 548 -BYTES = 6 -FORMAT = "I6" -DESCRIPTION = "orbit number as defined by the MRO Project" -END_OBJECT = COLUMN - -END_OBJECT = TABLE - -END - diff --git a/inputs_mini/ctx/cumindex.tab b/inputs_mini/ctx/cumindex.tab deleted file mode 100644 index 5a69835..0000000 --- a/inputs_mini/ctx/cumindex.tab +++ /dev/null @@ -1,53 +0,0 @@ -"MROX_0001","DATA/CRU_000001_9999_XN_99N999W.IMG","4A_04_0001000400","CRU_000001_9999_XN_99N999W","2005-08-30T15:40:21.549","CTX ","NIFL ",5056, 1024, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","SPACE ","0809883639:076 ",283.3, 10.000,"194/53/53 ", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,278.89,10.16, 0.0,"Instrument checkout image of space ","OK ", -4242 -"MROX_0001","DATA/CRU_000002_9999_XN_99N999W.IMG","4A_04_0001000500","CRU_000002_9999_XN_99N999W","2005-09-08T15:59:45.313","CTX ","NIFL ",5056, 15360, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810662403:012 ",296.0, 5.710,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.60, 0.0,"Calibration image of the Moon ","OK ", -4126 -"MROX_0001","DATA/CRU_000003_9999_XN_99N999W.IMG","4A_04_0001000600","CRU_000003_9999_XN_99N999W","2005-09-08T16:03:37.927","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810662635:169 ",296.6, 22.900,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.66, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4126 -"MROX_0001","DATA/CRU_000004_9999_XN_99N999W.IMG","4A_04_0001000700","CRU_000004_9999_XN_99N999W","2005-09-08T16:08:23.841","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810662921:147 ",296.8, 22.900,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.74, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4126 -"MROX_0001","DATA/CRU_000005_9999_XN_99N999W.IMG","4A_04_0001000800","CRU_000005_9999_XN_99N999W","2005-09-08T16:11:18.649","CTX ","NIFL ",5056, 21504, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810663096:098 ",297.1, 5.710,"196/243/238", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.48, 4.79, 0.0,"Calibration image of the Moon ","OK ", -4126 -"MROX_0001","DATA/CRU_000006_9999_XN_99N999W.IMG","4A_04_0001000900","CRU_000006_9999_XN_99N999W","2005-09-08T19:37:45.278","CTX ","NIFL ",5056, 15360, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810675483:003 ",299.4, 5.710,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.13, 0.0,"Calibration image of the Moon ","OK ", -4124 -"MROX_0001","DATA/CRU_000007_9999_XN_99N999W.IMG","4A_04_0001000A00","CRU_000007_9999_XN_99N999W","2005-09-08T19:41:37.892","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810675715:160 ",299.5, 22.900,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.20, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4124 -"MROX_0001","DATA/CRU_000008_9999_XN_99N999W.IMG","4A_04_0001000B00","CRU_000008_9999_XN_99N999W","2005-09-08T19:46:23.904","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810676001:163 ",299.8, 22.900,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.27, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4124 -"MROX_0001","DATA/CRU_000009_9999_XN_99N999W.IMG","4A_04_0001000C00","CRU_000009_9999_XN_99N999W","2005-09-08T19:49:18.712","CTX ","NIFL ",5056, 21504, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810676176:114 ",299.8, 5.710,"197/219/214", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.57, 8.32, 0.0,"Calibration image of the Moon ","OK ", -4124 -"MROX_0001","DATA/CRU_000010_9999_XN_99N999W.IMG","4A_04_0001000D00","CRU_000010_9999_XN_99N999W","2005-09-08T23:15:45.239","CTX ","NIFL ",5056, 15360, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","MOON ","0810688562:249 ",300.1, 5.710,"197/228/222", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.66,11.67, 0.0,"Calibration image of the Moon ","OK ", -4122 -"MROX_0001","DATA/CRU_000011_9999_XN_99N999W.IMG","4A_04_0001000E00","CRU_000011_9999_XN_99N999W","2005-09-08T23:19:37.853","CTX ","NIFL ",5056, 2048, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0810688795:150 ",300.3, 22.900,"197/228/222", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,284.66,11.73, 0.0,"Calibration image of Omega Centauri (globular cluster NGC 5139) ","OK ", -4122 -"MROX_0001","DATA/CRU_000012_9999_XN_99N999W.IMG","4A_04_0001000F00","CRU_000012_9999_XN_99N999W","2005-12-14T20:06:47.502","CTX ","NIFL ",5056, 10240, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819058025:028 ",289.9, 22.900,"195/237/235", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.51,17.96, 0.0,"Calibration image of the Southern Cross (constellation Crux) ","OK ", -2879 -"MROX_0001","DATA/CRU_000013_9999_XN_99N999W.IMG","4A_04_0001001000","CRU_000013_9999_XN_99N999W","2005-12-14T20:22:09.389","CTX ","NIFL ",5056, 19695, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819058946:255 ",290.6, 11.510,"195/237/235", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.51,18.21, 0.0,"Calibration image of the Southern Cross (constellation Crux) ","ERROR ", -2879 -"MROX_0001","DATA/CRU_000014_9999_XN_99N999W.IMG","4A_04_0001001100","CRU_000014_9999_XN_99N999W","2005-12-14T23:09:03.379","CTX ","NIFL ",5056, 14336, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819068960:253 ",290.4, 45.870,"196/188/186", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.57,20.91, 0.0,"Calibration image of the Jewel Box (open cluster NGC 4755) ","OK ", -2878 -"MROX_0001","DATA/CRU_000015_9999_XN_99N999W.IMG","4A_04_0001001200","CRU_000015_9999_XN_99N999W","2005-12-15T04:10:15.483","CTX ","NIFL ",5056, 28672, 1, 0.00, 0.00,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,999.90,"CRUISE ","STAR ","0819087033:023 ",290.5, 22.900,"196/188/186", 0, 0.00, 0.00, 0.00, 0.00, 0.00,"N", 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.0,340.69, 1.80, 0.0,"Calibration image of the Jewel Box (open cluster NGC 4755) ","OK ", -2875 -"MROX_0002","DATA/MOI_000009_0186_XI_18S051W.IMG","4A_04_0001000300","MOI_000009_0186_XI_18S051W","2006-03-24T04:28:07.724","CTX ","ITL ",5056, 52224, 1, 76.78, 0.11, 0.18, 71.52, 71.59, 51.15,-18.70, 46.52,-15.93, 53.84,-14.76, 49.01,-22.82, 55.26,-21.92,"POSTMOI ","MARS ","0827641706:101 ",281.9, 7.000,"194/215/215", 0, 385.12, 430.54,3838.91,7233.04,3838.92,"N", 80.90,150.54,345.64, 12.20, 51.15,-18.80,242892092.9, 29.39, 7.60,101.7,"Post-MOI image of plain southwest of Eos Chasma ","OK ", 9 -"MROX_0002","DATA/MOI_000009_0438_XN_43S057W.IMG","4A_04_0001000400","MOI_000009_0438_XN_43S057W","2006-03-24T04:41:07.728","CTX ","NIFL ",5056, 52224, 1, 37.21, 0.83, 0.13, 83.06, 83.12, 57.23,-44.16, 52.02,-32.81, 57.16,-32.20, 59.17,-59.38, 63.11,-59.08,"POSTMOI ","MARS ","0827642486:102 ",282.8, 14.000,"194/215/215", 0, 186.45, 1604.54,1865.17,5251.69,1865.17,"N", 82.20,147.80,349.55, 12.20, 57.23,-44.21,242894206.2, 29.39, 7.40, 96.4,"Post-MOI image of Bosporos and Ogygis Rupes ","OK ", 9 -"MROX_0003","DATA/T01_000801_1353_XN_44S195W.IMG","4A_04_1000000100","T01_000801_1353_XN_44S195W","2006-09-27T21:58:33.012","CTX ","NIFL ",5056, 5120, 1, 5.01, 1.21, 0.08, 84.00, 83.93,195.47,-44.73,195.72,-45.01,195.13,-44.96,195.81,-44.49,195.22,-44.45,"TRANSITION","MARS ","0843861531:210 ",282.8, 1.877,"194/200/201", 0, 25.06, 31.00, 250.93,3637.29, 250.93,"N",276.59,228.02,249.82, 23.36,195.47,-44.72,242892520.7,112.76,15.63, 90.1,"South mid-latitude crater ","OK ", 801 -"MROX_0003","DATA/T01_000801_1867_XN_06N202W.IMG","4A_04_1000000200","T01_000801_1867_XN_06N202W","2006-09-27T22:14:19.059","CTX ","NIFL ",5056, 9216, 1, 5.41, 1.12, 0.08, 52.17, 52.13,202.08, 6.71,202.25, 6.22,201.79, 6.27,202.36, 7.15,201.90, 7.21,"TRANSITION","MARS ","0843862477:222 ",283.3, 1.877,"194/200/201", 0, 27.10, 55.64, 270.50,3666.42, 270.50,"N",276.91,211.36,253.67, 23.36,202.08, 6.72,242889375.7,112.76,15.45, 90.1,"Depressions and flows in south Cerberus ","OK ", 801 -"MROX_0003","DATA/T01_000801_2584_XN_78N219W.IMG","4A_04_1000000300","T01_000801_2584_XN_78N219W","2006-09-27T22:37:04.430","CTX ","NIFL ",2528, 4096, 1, 6.28, 0.92, 0.09, 58.21, 58.26,219.61, 78.42,220.01, 78.19,218.74, 78.26,220.50, 78.58,219.18, 78.65,"TRANSITION","MARS ","0843863843:061 ",284.1, 1.877,"194/200/201",1280, 15.84, 23.77, 315.67,3692.68, 315.67,"N",283.45,147.09,259.19, 23.35,219.62, 78.43,242887623.3,112.77,14.65, 90.0,"North polar dunes and outlier ","OK ", 801 -"MROX_0003","DATA/T01_000802_1412_XN_38S223W.IMG","4A_04_1000000400","T01_000802_1412_XN_38S223W","2006-09-27T23:52:30.465","CTX ","NIFL ",5056, 5120, 1, 5.03, 1.21, 0.08, 79.91, 79.84,223.62,-38.88,223.86,-39.17,223.31,-39.12,223.93,-38.65,223.39,-38.60,"TRANSITION","MARS ","0843868369:070 ",286.5, 1.877,"195/194/194", 0, 25.19, 31.04, 251.99,3640.37, 251.99,"N",276.63,227.75,277.55, 23.35,223.62,-38.88,242881977.6,112.79,15.61, 90.1,"South mid-latitude crater ","OK ", 802 -"MROX_0003","DATA/T01_000802_2102_XN_30N232W.IMG","4A_04_1000000500","T01_000802_2102_XN_30N232W","2006-09-28T00:13:51.730","CTX ","NIFL ",5056, 5120, 1, 5.73, 1.04, 0.08, 45.26, 45.25,232.32, 30.27,232.56, 29.98,232.01, 30.04,232.63, 30.49,232.07, 30.55,"TRANSITION","MARS ","0843869650:138 ",286.5, 1.877,"195/194/194", 0, 28.69, 30.52, 286.86,3678.02, 286.86,"N",276.78,190.62,282.74, 23.35,232.32, 30.27,242878266.2,112.80,15.37, 90.1,"Granicus Valles valley ","OK ", 802 -"MROX_0003","DATA/T01_000802_2747_XN_85N022W.IMG","4A_04_1000000600","T01_000802_2747_XN_85N022W","2006-09-28T00:34:04.293","CTX ","NIFL ",5056, 5120, 1, 6.27, 0.93, 0.08, 67.38, 67.43, 22.70, 85.36, 18.20, 85.41, 23.80, 85.72, 21.75, 85.01, 27.07, 85.29,"TRANSITION","MARS ","0843870863:026 ",286.8, 1.877,"195/194/194", 0, 31.37, 29.71, 315.04,3691.37, 315.04,"N", 56.56,139.56,287.66, 23.35, 22.74, 85.36,242877526.0,112.81, 5.68, 90.0,"Chasma Boreale scarp and dunes ","OK ", 802 -"MROX_0003","DATA/T01_000803_1393_XN_40S250W.IMG","4A_04_1000000700","T01_000803_1393_XN_40S250W","2006-09-28T01:43:57.906","CTX ","NIFL ",5056, 11264, 1, 5.02, 1.21, 0.08, 81.23, 81.16,250.57,-40.73,250.76,-41.33,250.20,-41.28,250.93,-40.18,250.38,-40.13,"TRANSITION","MARS ","0843875056:183 ",287.9, 1.877,"195/217/216", 0, 25.15, 68.27, 251.64,3639.39, 251.64,"N",276.70,227.90,304.69, 23.34,250.57,-40.72,242871960.9,112.83,15.62, 90.1,"Reull Vallis landforms ","OK ", 803 -"MROX_0003","DATA/T01_000803_1580_XN_22S253W.IMG","4A_04_1000000800","T01_000803_1580_XN_22S253W","2006-09-28T01:49:43.125","CTX ","NIFL ",5056, 11264, 1, 5.11, 1.19, 0.08, 68.49, 68.43,253.14,-22.02,253.30,-22.62,252.84,-22.57,253.45,-21.47,252.98,-21.42,"TRANSITION","MARS ","0843875401:239 ",287.9, 1.877,"195/217/216", 0, 25.60, 68.44, 255.78,3649.20, 255.78,"N",276.84,224.95,306.09, 23.34,253.14,-22.01,242870717.2,112.83,15.54, 90.2,"Tyrrhena Patera ","OK ", 803 -"MROX_0003","DATA/T01_000803_1903_XN_10N257W.IMG","4A_04_1000000900","T01_000803_1903_XN_10N257W","2006-09-28T01:59:44.156","CTX ","NIFL ",5056, 8192, 1, 5.43, 1.11, 0.08, 50.62, 50.57,257.08, 10.35,257.26, 9.91,256.80, 9.97,257.36, 10.74,256.90, 10.80,"TRANSITION","MARS ","0843876002:247 ",287.9, 1.877,"195/217/216", 0, 27.21, 49.42, 271.62,3667.18, 271.62,"N",276.97,208.76,308.52, 23.34,257.08, 10.36,242868914.6,112.83,15.44, 90.1,"Crater in Amenthes Fossae region ","OK ", 803 -"MROX_0003","DATA/T01_000803_2620_XN_82N280W.IMG","4A_04_1000000A00","T01_000803_2620_XN_82N280W","2006-09-28T02:21:59.023","CTX ","NIFL ",5056, 38912, 1, 6.23, 0.93, 0.09, 60.32, 60.37,280.89, 82.04,278.58, 80.14,275.61, 80.29,288.92, 83.69,284.50, 83.91,"TRANSITION","MARS ","0843877337:213 ",288.1, 1.877,"195/217/216", 0, 31.20, 226.08, 313.24,3689.83, 313.24,"N",289.51,144.93,314.05, 23.34,280.90, 82.04,242867333.7,112.84,14.21, 89.7,"North polar landforms ","OK ", 803 -"MROX_0003","DATA/T01_000804_1599_XN_20S280W.IMG","4A_04_1000000B00","T01_000804_1599_XN_20S280W","2006-09-28T03:42:25.875","CTX ","NIFL ",5056, 7168, 1, 5.12, 1.19, 0.08, 67.27, 67.21,280.63,-20.13,280.82,-20.52,280.36,-20.47,280.91,-19.79,280.45,-19.74,"TRANSITION","MARS ","0843882164:175 ",288.8, 1.877,"195/228/227", 0, 25.63, 43.57, 255.97,3649.83, 255.97,"N",276.90,224.45,333.50, 23.34,280.63,-20.12,242860450.7,112.87,15.53, 90.1,"Southern mid-latitude crater ","OK ", 804 -"MROX_0003","DATA/T01_000804_2008_XN_20N285W.IMG","4A_04_1000000C00","T01_000804_2008_XN_20N285W","2006-09-28T03:54:59.812","CTX ","NIFL ",5056, 12288, 1, 5.57, 1.08, 0.09, 47.04, 47.00,285.66, 20.86,285.83, 20.21,285.33, 20.27,285.99, 21.45,285.49, 21.50,"TRANSITION","MARS ","0843882918:159 ",288.5, 1.877,"195/228/227", 0, 27.89, 73.75, 278.62,3672.31, 278.62,"N",276.95,199.91,336.58, 23.34,285.66, 20.87,242858313.0,112.87,15.39, 90.1,"Nili Fossae trough ","ERROR ", 804 -"MROX_0003","DATA/T01_000805_1402_XN_39S305W.IMG","4A_04_1000000D00","T01_000805_1402_XN_39S305W","2006-09-28T05:28:27.199","CTX ","NIFL ",5056, 5120, 1, 5.01, 1.21, 0.08, 80.60, 80.53,305.22,-39.82,305.45,-40.11,304.90,-40.06,305.53,-39.59,304.98,-39.54,"TRANSITION","MARS ","0843888526:002 ",289.3, 1.877,"195/234/232", 0, 25.08, 31.06, 250.94,3639.00, 250.94,"N",276.73,227.85,359.30, 23.33,305.22,-39.82,242851599.0,112.90,15.62, 90.1,"Northwest Hellas landforms ","OK ", 805 -"MROX_0003","DATA/T01_000805_2125_XN_32N314W.IMG","4A_04_1000000E00","T01_000805_2125_XN_32N314W","2006-09-28T05:50:38.269","CTX ","NIFL ",5056, 15360, 1, 5.76, 1.03, 0.08, 45.05, 45.04,314.46, 32.51,314.64, 31.72,314.07, 31.78,314.86, 33.25,314.28, 33.31,"TRANSITION","MARS ","0843889857:020 ",289.0, 1.877,"195/234/232", 0, 28.86, 91.45, 288.58,3679.05, 288.58,"N",276.83,188.33, 4.73, 23.33,314.46, 32.52,242847744.6,112.91,15.36, 90.0,"North-northeast Arabia Terra landforms ","OK ", 805 -"MROX_0003","DATA/T01_000805_2585_XN_78N329W.IMG","4A_04_1000000F00","T01_000805_2585_XN_78N329W","2006-09-28T06:05:00.215","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.09, 58.24, 58.28,329.17, 78.51,328.48, 76.78,326.21, 76.90,333.01, 80.08,330.04, 80.22,"TRANSITION","MARS ","0843890719:006 ",289.2, 1.877,"195/234/232", 0, 31.32, 202.22, 314.44,3691.44, 314.44,"N",283.91,147.02, 8.30, 23.33,329.18, 78.51,242847027.4,112.91,14.61, 89.8,"North polar landforms ","OK ", 805 -"MROX_0003","DATA/T01_000806_2651_XN_85N014W.IMG","4A_04_1000001000","T01_000806_2651_XN_85N014W","2006-09-28T07:59:22.070","CTX ","NIFL ",5056, 34816, 1, 6.27, 0.93, 0.09, 62.37, 62.41, 14.84, 85.10, 9.07, 83.47, 4.73, 83.68, 31.99, 86.26, 25.93, 86.63,"TRANSITION","MARS ","0843897580:225 ",289.4, 1.877,"195/234/232", 0, 31.41, 202.01, 315.38,3691.73, 315.38,"N",301.06,143.22, 36.13, 23.32, 14.89, 85.10,242836868.9,112.95,13.42, 89.8,"North polar landforms ","OK ", 806 -"MROX_0003","DATA/T01_000807_2016_XN_21N007W.IMG","4A_04_1000001100","T01_000807_2016_XN_21N007W","2006-09-28T09:31:33.054","CTX ","NIFL ",5056, 14336, 1, 5.61, 1.07, 0.08, 46.89, 46.86, 7.54, 21.67, 7.70, 20.92, 7.19, 20.98, 7.88, 22.36, 7.37, 22.42,"TRANSITION","MARS ","0843903111:221 ",289.8, 1.877,"195/234/232", 0, 28.08, 85.93, 280.51,3674.00, 280.51,"N",276.81,199.00, 58.48, 23.32, 7.54, 21.68,242827783.9,112.98,15.40, 90.1,"Becquerel Crater ","OK ", 807 -"MROX_0003","DATA/T01_000807_2205_XN_40N010W.IMG","4A_04_1000001200","T01_000807_2205_XN_40N010W","2006-09-28T09:37:33.172","CTX ","NIFL ",5056, 8192, 1, 5.87, 1.01, 0.08, 45.10, 45.10, 10.11, 40.53, 10.37, 40.09, 9.73, 40.15, 10.50, 40.90, 9.84, 40.96,"TRANSITION","MARS ","0843903471:251 ",289.8, 1.877,"195/234/232", 0, 29.40, 48.52, 294.17,3681.98, 294.17,"N",276.66,179.82, 59.92, 23.32, 10.11, 40.53,242827171.6,112.98,15.33, 90.0,"Cydonia Mensae landforms ","OK ", 807 -"MROX_0003","DATA/T01_000807_2638_XN_83N035W.IMG","4A_04_1000001300","T01_000807_2638_XN_83N035W","2006-09-28T09:51:03.914","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.08, 61.54, 61.59, 34.99, 83.84, 31.61, 82.16, 27.91, 82.34, 46.24, 85.20, 40.74, 85.48,"TRANSITION","MARS ","0843904282:185 ",289.8, 1.877,"195/234/232", 0, 31.32, 202.11, 314.54,3690.97, 314.54,"N",294.18,143.96, 63.31, 23.32, 35.02, 83.84,242826688.0,112.98,13.89, 89.7,"North polar landforms ","OK ", 807 -"MROX_0003","DATA/T01_000808_1874_XN_07N033W.IMG","4A_04_1000001400","T01_000808_1874_XN_07N033W","2006-09-28T11:19:17.890","CTX ","NIFL ",5056, 13312, 1, 5.41, 1.12, 0.08, 51.89, 51.85, 33.09, 7.40, 33.24, 6.70, 32.79, 6.76, 33.40, 8.05, 32.94, 8.10,"TRANSITION","MARS ","0843909576:179 ",290.0, 1.877,"195/234/232", 0, 27.07, 80.39, 270.27,3666.13, 270.27,"N",276.91,210.81, 84.70, 23.31, 33.09, 7.41,242818223.8,113.01,15.45, 90.1,"Mojave Crater and ejecta ","OK ", 808 -"MROX_0003","DATA/T01_000808_2655_XN_85N072W.IMG","4A_04_1000001500","T01_000808_2655_XN_85N072W","2006-09-28T11:43:50.465","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.08, 62.70, 62.74, 72.74, 85.53, 65.67, 83.93, 61.06, 84.16, 92.89, 86.59, 86.96, 87.00,"TRANSITION","MARS ","0843911049:070 ",289.9, 1.877,"195/234/232", 0, 31.35, 202.06, 314.79,3691.12, 314.79,"N",304.29,142.97, 90.75, 23.31, 72.79, 85.54,242816506.4,113.02,13.20, 89.7,"North polar landforms ","OK ", 808 -"MROX_0003","DATA/T01_000809_2609_XN_80N082W.IMG","4A_04_1000001600","T01_000809_2609_XN_80N082W","2006-09-28T13:34:22.211","CTX ","NIFL ",5056, 34816, 1, 6.25, 0.93, 0.09, 59.70, 59.75, 81.95, 80.93, 80.59, 79.22, 77.84, 79.36, 87.67, 82.45, 83.85, 82.64,"TRANSITION","MARS ","0843917681:005 ",290.0, 1.877,"195/234/232", 0, 31.31, 202.17, 314.32,3691.03, 314.32,"N",287.10,145.59,117.65, 23.30, 81.96, 80.94,242806304.7,113.06,14.37, 89.7,"North polar landforms ","ERROR ", 809 -"MROX_0003","DATA/T01_000810_2641_XN_84N119W.IMG","4A_04_1000001700","T01_000810_2641_XN_84N119W","2006-09-28T15:27:28.660","CTX ","NIFL ",5056, 40960, 1, 6.25, 0.93, 0.08, 61.72, 61.76,119.72, 84.18,114.68, 82.24,110.97, 82.42,135.09, 85.69,129.41, 86.03,"TRANSITION","MARS ","0843924467:120 ",290.1, 1.877,"195/234/232", 0, 31.31, 237.79, 314.42,3690.83, 314.42,"N",296.98,143.70,145.19, 23.30,119.75, 84.18,242796113.9,113.09,13.70, 89.7,"North polar landforms ","ERROR ", 810 -"MROX_0003","DATA/T01_000811_2032_XN_23N117W.IMG","4A_04_1000001800","T01_000811_2032_XN_23N117W","2006-09-28T17:00:35.449","CTX ","NIFL ",5056, 8192, 1, 5.61, 1.07, 0.08, 46.46, 46.43,116.92, 23.26,117.13, 22.82,116.62, 22.88,117.23, 23.65,116.72, 23.70,"TRANSITION","MARS ","0843930054:066 ",290.2, 1.877,"195/234/232", 0, 28.08, 49.10, 280.51,3673.62, 280.51,"N",276.91,197.57,167.73, 23.29,116.92, 23.27,242786954.3,113.12,15.40, 90.1,"Olympica Fossae trough system ","OK ", 811 -"MROX_0003","DATA/T01_000812_2657_XN_85N184W.IMG","4A_04_1000001900","T01_000812_2657_XN_85N184W","2006-09-28T19:12:19.460","CTX ","NIFL ",5056, 34816, 1, 6.26, 0.93, 0.08, 62.90, 62.94,184.59, 85.78,176.48, 84.20,171.71, 84.44,206.85, 86.74,201.29, 87.18,"TRANSITION","MARS ","0843937958:069 ",290.4, 1.877,"195/234/232", 0, 31.36, 202.05, 314.92,3691.23, 314.92,"N",306.96,142.79,199.88, 23.28,184.66, 85.78,242775714.3,113.16,13.02, 89.8,"North polar landforms ","ERROR ", 812 -"MROX_0003","DATA/T01_000813_1388_XN_41S163W.IMG","4A_04_1000001A00","T01_000813_1388_XN_41S163W","2006-09-28T20:24:50.386","CTX ","NIFL ",5056, 11264, 1, 5.03, 1.20, 0.08, 81.55, 81.49,163.33,-41.31,163.53,-41.91,162.96,-41.86,163.70,-40.76,163.14,-40.71,"TRANSITION","MARS ","0843942309:050 ",290.8, 1.877,"195/234/232", 0, 25.17, 68.25, 251.94,3639.48, 251.94,"N",276.61,227.85,217.44, 23.28,163.33,-41.31,242770170.0,113.19,15.62, 90.1,"Crater with gullies ","OK ", 813 -"MROX_0003","DATA/T01_000814_2649_XN_84N231W.IMG","4A_04_1000001B00","T01_000814_2649_XN_84N231W","2006-09-28T22:56:17.156","CTX ","NIFL ",5056, 34801, 1, 6.31, 0.92, 0.08, 62.29, 62.34,231.65, 84.90,226.41, 83.26,222.15, 83.47,247.60, 86.10,241.51, 86.46,"TRANSITION","MARS ","0843951395:247 ",290.5, 1.877,"195/234/232", 0, 31.57, 201.75, 316.99,3693.35, 316.99,"N",299.64,143.34,254.38, 23.27,231.69, 84.91,242755264.2,113.23,13.52, 89.7,"North polar landforms ","ERROR ", 814 -"MROX_0003","DATA/T01_000815_1749_XN_05S222W.IMG","4A_04_1000001C00","T01_000815_1749_XN_05S222W","2006-09-29T00:20:10.316","CTX ","NIFL ",5056, 18417, 1, 5.27, 1.15, 0.08, 58.16, 58.10,222.59, -5.14,222.70, -6.10,222.26, -6.04,222.93, -4.23,222.48, -4.17,"TRANSITION","MARS ","0843956429:032 ",290.8, 1.877,"195/234/232", 0, 26.38, 111.67, 263.28,3659.31, 263.28,"N",276.91,218.37,274.73, 23.26,222.59, -5.13,242747412.1,113.26,15.48, 90.1,"Gale Crater landforms ","ERROR ", 815 -"MROX_0003","DATA/T01_000815_2607_XN_80N244W.IMG","4A_04_1000001D00","T01_000815_2607_XN_80N244W","2006-09-29T00:46:56.085","CTX ","NIFL ",5056, 25585, 1, 6.27, 1.40, 0.08, 59.63, 59.68,244.96, 80.71,243.48, 78.82,240.82, 78.95,250.94, 82.42,247.12, 82.60,"TRANSITION","MARS ","0843958034:229 ",290.5, 2.838,"195/234/232", 0, 31.40, 224.57, 315.26,3691.99, 315.26,"N",286.48,145.73,281.32, 23.26,244.98, 80.72,242745022.2,113.27,14.43, 89.7,"North polar landforms ","ERROR ", 815 -"MROX_0003","DATA/T01_000817_1408_XN_39S272W.IMG","4A_04_1000001E00","T01_000817_1408_XN_39S272W","2006-09-29T03:54:03.988","CTX ","NIFL ",5056, 8192, 1, 5.02, 1.21, 0.08, 80.14, 80.08,272.69,-39.24,272.90,-39.68,272.35,-39.63,273.02,-38.85,272.48,-38.80,"TRANSITION","MARS ","0843969262:204 ",290.9, 1.877,"195/234/232", 0, 25.11, 49.69, 251.25,3639.51, 251.25,"N",276.74,227.75,326.74, 23.25,272.69,-39.23,242729090.5,113.33,15.61, 90.1,"Dao Vallis ","OK ", 817 -"MROX_0003","DATA/T01_000820_1816_XN_01N359W.IMG","4A_04_1000001F00","T01_000820_1816_XN_01N359W","2006-09-29T09:42:46.171","CTX ","NIFL ",5056, 20480, 1, 5.36, 1.13, 0.08, 54.59, 54.54,359.76, 1.68,359.86, 0.61,359.41, 0.66, 0.11, 2.69,359.66, 2.74,"TRANSITION","MARS ","0843990184:251 ",290.6, 1.877,"195/234/232", 0, 26.83, 123.88, 267.78,3663.96, 267.78,"N",276.90,214.49, 51.64, 23.23,359.76, 1.68,242695793.6,113.44,15.47, 90.1,"North Sinus Meridiani landforms ","OK ", 820 -"MROX_0003","DATA/T01_000821_2284_XN_48N033W.IMG","4A_04_1000002000","T01_000821_2284_XN_48N033W","2006-09-29T11:49:44.866","CTX ","NIFL ",5056, 8192, 1, 5.98, 0.99, 0.08, 46.26, 46.27, 33.34, 48.49, 33.65, 48.06, 32.90, 48.12, 33.80, 48.87, 33.03, 48.93,"TRANSITION","MARS ","0843997803:173 ",290.4, 1.877,"195/234/232", 0, 29.93, 48.26, 299.80,3684.84, 299.80,"N",276.71,171.51, 82.49, 23.22, 33.34, 48.50,242683799.5,113.48,15.29, 90.0,"Crater with gullies ","OK ", 821 -"MROX_0003","DATA/T01_000823_1723_XN_07S080W.IMG","4A_04_1000002100","T01_000823_1723_XN_07S080W","2006-09-29T15:16:25.612","CTX ","NIFL ",5056, 11264, 1, 5.22, 1.16, 0.08, 59.62, 59.57, 80.52, -7.73, 80.67, -8.33, 80.23, -8.27, 80.81, -7.18, 80.36, -7.13,"TRANSITION","MARS ","0844010204:108 ",290.6, 1.877,"195/234/232", 0, 26.14, 68.39, 260.91,3656.74, 260.91,"N",276.98,219.65,132.79, 23.21, 80.52, -7.72,242665462.5,113.55,15.49, 90.1,"Ius Chasma floor and wall ","OK ", 823 -"MROX_0003","DATA/T01_000823_2642_XN_84N114W.IMG","4A_04_1000002200","T01_000823_2642_XN_84N114W","2006-09-29T15:44:59.093","CTX ","NIFL ",5056, 35840, 1, 6.27, 1.16, 0.08, 61.86, 61.90,114.52, 84.24,108.86, 82.12,105.19, 82.30,132.05, 85.90,126.24, 86.25,"TRANSITION","MARS ","0844011917:231 ",290.5, 2.357,"195/234/232", 0, 31.42, 261.20, 315.45,3691.85, 315.45,"N",297.12,143.68,139.87, 23.21,114.56, 84.25,242662917.0,113.56,13.69, 89.7,"North polar landforms ","OK ", 823 -"MROX_0003","DATA/T01_000825_2649_XN_84N172W.IMG","4A_04_1000002300","T01_000825_2649_XN_84N172W","2006-09-29T19:29:18.901","CTX ","NIFL ",5056, 50176, 1, 6.27, 0.93, 0.08, 62.39, 62.43,172.41, 84.96,164.45, 82.63,160.54, 82.82,198.02, 86.62,192.20, 87.04,"TRANSITION","MARS ","0844025377:182 ",290.6, 1.877,"195/234/232", 0, 31.37, 291.19, 315.04,3691.40, 315.04,"N",300.30,143.29,194.48, 23.20,172.46, 84.96,242642331.0,113.63,13.47, 89.6,"North polar landforms ","ERROR ", 825 -"MROX_0003","DATA/T01_000826_2673_XN_87N236W.IMG","4A_04_1000002400","T01_000826_2673_XN_87N236W","2006-09-29T21:21:01.584","CTX ","NIFL ",2528, 73728, 2, 12.61, 0.92, 0.08, 64.52, 64.56,239.05, 87.35,188.00, 81.38,184.58, 81.54,327.09, 83.17,331.29, 83.37,"TRANSITION","MARS ","0844032080:101 ",290.6, 1.884,"195/234/232", 0, 31.57, 858.00, 317.09,3693.34, 317.09,"N",339.04,141.67,222.03, 23.19,239.19, 87.35,242632031.7,113.66,10.84, 88.9,"North polar landforms ","ERROR ", 826 diff --git a/inputs_mini/hirise/RDRCUMINDEX.LBL b/inputs_mini/hirise/RDRCUMINDEX.LBL deleted file mode 100644 index 81f7293..0000000 --- a/inputs_mini/hirise/RDRCUMINDEX.LBL +++ /dev/null @@ -1,492 +0,0 @@ -PDS_VERSION_ID = PDS3 -RECORD_TYPE = FIXED_LENGTH -RECORD_BYTES = 821 -FILE_RECORDS = 9 -^RDR_INDEX_TABLE = "RDRCUMINDEX.TAB" -OBJECT = RDR_INDEX_TABLE - INDEX_TYPE = SINGLE - INTERCHANGE_FORMAT = ASCII - ROWS = 9 - ROW_BYTES = 821 - COLUMNS = 54 - OBJECT = COLUMN - NAME = VOLUME_ID - DATA_TYPE = CHARACTER - START_BYTE = 2 - BYTES = 10 - FORMAT = "A10" - DESCRIPTION = "Volume identification" - END_OBJECT - OBJECT = COLUMN - NAME = FILE_NAME_SPECIFICATION - DATA_TYPE = CHARACTER - START_BYTE = 15 - BYTES = 67 - FORMAT = "A67" - DESCRIPTION = "Path and file name of HiRISE RDR product" - END_OBJECT - OBJECT = COLUMN - NAME = INSTRUMENT_HOST_ID - DATA_TYPE = CHARACTER - START_BYTE = 85 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "Spacecraft hosting the HiRISE instrument, - always MRO" - END_OBJECT - OBJECT = COLUMN - NAME = INSTRUMENT_ID - DATA_TYPE = CHARACTER - START_BYTE = 91 - BYTES = 6 - FORMAT = "A6" - DESCRIPTION = "Instrument that acquired the observaiton, - always HIRISE" - END_OBJECT - OBJECT = COLUMN - NAME = OBSERVATION_ID - DATA_TYPE = CHARACTER - START_BYTE = 100 - BYTES = 15 - FORMAT = "A15" - DESCRIPTION = "Unique identification associated with - an observation. Up to 28 EDR products can be - associated with an observation." - END_OBJECT - OBJECT = COLUMN - NAME = PRODUCT_ID - DATA_TYPE = CHARACTER - START_BYTE = 118 - BYTES = 21 - FORMAT = "A21" - DESCRIPTION = "Unique identification associated with the product" - END_OBJECT - OBJECT = COLUMN - NAME = PRODUCT_VERSION_ID - DATA_TYPE = CHARACTER - START_BYTE = 142 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "Version number of this product" - END_OBJECT - OBJECT = COLUMN - NAME = TARGET_NAME - DATA_TYPE = CHARACTER - START_BYTE = 148 - BYTES = 32 - FORMAT = "A32" - DESCRIPTION = "Target Name of the observation" - END_OBJECT - OBJECT = COLUMN - NAME = ORBIT_NUMBER - DATA_TYPE = ASCII_INTEGER - START_BYTE = 182 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Orbit number from start of mission" - END_OBJECT - OBJECT = COLUMN - NAME = MISSION_PHASE_NAME - DATA_TYPE = CHARACTER - START_BYTE = 190 - BYTES = 30 - FORMAT = "A30" - DESCRIPTION = "Mission Phase at time of observation, such - as Primary Science Phase" - END_OBJECT - OBJECT = COLUMN - NAME = RATIONALE_DESC - DATA_TYPE = CHARACTER - START_BYTE = 223 - BYTES = 75 - FORMAT = "A75" - DESCRIPTION = "Informational note about the observation" - END_OBJECT - OBJECT = COLUMN - NAME = OBSERVATION_START_TIME - DATA_TYPE = TIME - START_BYTE = 301 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when HiRISE started the - imaging sequence" - END_OBJECT - OBJECT = COLUMN - NAME = OBSERVATION_START_COUNT - DATA_TYPE = CHARACTER - START_BYTE = 328 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "Spacecraft clock count when HiRISE started - the imaging sequence" - END_OBJECT - OBJECT = COLUMN - NAME = START_TIME - DATA_TYPE = TIME - START_BYTE = 347 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when first image line of target was - acquired" - END_OBJECT - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_START_COUNT - DATA_TYPE = CHARACTER - START_BYTE = 374 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "Spacecraft clock count when first image line of - target was acquired" - END_OBJECT - OBJECT = COLUMN - NAME = STOP_TIME - DATA_TYPE = TIME - START_BYTE = 393 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when last image line of target was - acquired" - END_OBJECT - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_STOP_COUNT - DATA_TYPE = CHARACTER - START_BYTE = 420 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "Spacecraft clock count when last image line of - target was acquired" - END_OBJECT - OBJECT = COLUMN - NAME = IMAGE_LINES - DATA_TYPE = ASCII_INTEGER - START_BYTE = 438 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Number of image lines" - END_OBJECT - OBJECT = COLUMN - NAME = LINE_SAMPLES - DATA_TYPE = ASCII_INTEGER - START_BYTE = 445 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Number of line samples" - END_OBJECT - OBJECT = COLUMN - NAME = EMISSION_ANGLE - DATA_TYPE = ASCII_REAL - START_BYTE = 452 - BYTES = 8 - FORMAT = "F8.5" - DESCRIPTION = "The emission angle at the center of the - observation" - END_OBJECT - OBJECT = COLUMN - NAME = INCIDENCE_ANGLE - DATA_TYPE = ASCII_REAL - START_BYTE = 461 - BYTES = 7 - FORMAT = "F7.4" - DESCRIPTION = "The incidence angle at the center of the - observation" - END_OBJECT - OBJECT = COLUMN - NAME = PHASE_ANGLE - DATA_TYPE = ASCII_REAL - START_BYTE = 469 - BYTES = 8 - FORMAT = "F7.4" - DESCRIPTION = "The phase angle at the center of the observation" - END_OBJECT - OBJECT = COLUMN - NAME = SPACECRAFT_ALTITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 478 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "The areodetic altitude of the center of the - observation in kilometers. This field represents the - center altitude for the observation on the MRO - ellipsoid reference." - END_OBJECT - OBJECT = COLUMN - NAME = TARGET_CENTER_DISTANCE - DATA_TYPE = ASCII_REAL - START_BYTE = 487 - BYTES = 7 - FORMAT = "F7.2" - DESCRIPTION = "The distance from the spacecraft to the target - body's center in kilometers" - END_OBJECT - OBJECT = COLUMN - NAME = SLANT_DISTANCE - DATA_TYPE = ASCII_REAL - START_BYTE = 495 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "The distance from the spacecraft to the - intersection of the view vector with the target - body in kilometers" - END_OBJECT - OBJECT = COLUMN - NAME = NORTH_AZIMUTH - DATA_TYPE = ASCII_REAL - START_BYTE = 504 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The angle in degrees clockwise from the reference - axis of the observation (a line from the center to - the right edge of the observation) to the direction - to the north pole of the target body." - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SOLAR_AZIMUTH - DATA_TYPE = ASCII_REAL - START_BYTE = 515 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The angel in degrees clockwise from the reference - axis of the observation (a line from the center to - the right edge of the observation) to the direction - to the sub-solar point on the target body." - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SOLAR_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 526 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The planetocentric latitude of the sub-solar point - in degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SOLAR_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 537 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The east longitude of the sub-solar point in - degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 548 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The planetocentric latitude of the sub-spacecraft - point in degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 559 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The planetocentric longitude of the sub-spacecraft - point in degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SOLAR_DISTANCE - DATA_TYPE = ASCII_REAL - START_BYTE = 570 - BYTES = 10 - FORMAT = "F10.5" - DESCRIPTION = "The distance from the center of the image on the - target body to the center of the Sun in AU" - END_OBJECT - OBJECT = COLUMN - NAME = SOLAR_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 581 - BYTES = 10 - FORMAT = "F10.3" - DESCRIPTION = "The solar longitude ('L sub S') at the time of - image acquisition in the degrees from the Martian - vernal equinox" - END_OBJECT - OBJECT = COLUMN - NAME = LOCAL_TIME - DATA_TYPE = ASCII_REAL - START_BYTE = 592 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Local Solar Time in decimal hours from midnight at - the center of the observation" - END_OBJECT - OBJECT = COLUMN - NAME = STEREO_FLAG - DATA_TYPE = CHARACTER - START_BYTE = 604 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "Indicates whether this product was intended to be - part of a stereo pair. (YES or NO)." - END_OBJECT - OBJECT = COLUMN - NAME = MINIMUM_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 609 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Minimum latitude of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = MAXIMUM_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 620 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Maximum latitude of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = MINIMUM_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 631 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Minimum longitude of the projected image." - END_OBJECT - OBJECT = COLUMN - NAME = MAXIMUM_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 642 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Maximum longitude of projected image" - END_OBJECT - OBJECT = COLUMN - NAME = MAP_SCALE - DATA_TYPE = ASCII_REAL - START_BYTE = 653 - BYTES = 5 - FORMAT = "F5.2" - DESCRIPTION = "Map scale in meters per pixel" - END_OBJECT - OBJECT = COLUMN - NAME = MAP_RESOLUTION - DATA_TYPE = ASCII_REAL - START_BYTE = 659 - BYTES = 10 - FORMAT = "F10.3" - DESCRIPTION = "Map resolution in pixels per degree" - END_OBJECT - OBJECT = COLUMN - NAME = MAP_PROJECTION_TYPE - DATA_TYPE = CHARACTER - START_BYTE = 671 - BYTES = 19 - FORMAT = "A19" - DESCRIPTION = "EQUIRECTANGULAR or POLAR STEREOGRAPHIC" - END_OBJECT - OBJECT = COLUMN - NAME = PROJECTION_CENTER_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 692 - BYTES = 5 - FORMAT = "F5.1" - DESCRIPTION = "Center latitude of the map projection. This does - not necessarily equal the center latitude of the - image." - END_OBJECT - OBJECT = COLUMN - NAME = PROJECTION_CENTER_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 698 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "Center longitude of the map projection. This does - not necessarily equal the center longitude of the - image." - END_OBJECT - OBJECT = COLUMN - NAME = LINE_PROJECTION_OFFSET - DATA_TYPE = ASCII_REAL - START_BYTE = 707 - BYTES = 12 - FORMAT = "F12.1" - DESCRIPTION = "The line_projection_offset element provides the - line offset value of the map projection origin - position from the line and sample 1,1 (line and - sample 1,1 is considered the upper left corner of - the digital array)." - END_OBJECT - OBJECT = COLUMN - NAME = SAMPLE_PROJECTION_OFFSET - DATA_TYPE = ASCII_REAL - START_BYTE = 720 - BYTES = 12 - FORMAT = "F12.1" - DESCRIPTION = "The sample_projection_offset element provides the - sample offset value of the map projection origin - position from line and sample 1,1 (line and sample - 1,1 is considered the upper left corner of the - digital array). Note: that the positive direction - is to the right and down." - END_OBJECT - OBJECT = COLUMN - NAME = CORNER1_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 733 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 1 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER1_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 744 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 1 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER2_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 755 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 2 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER2_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 766 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 2 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER3_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 777 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 3 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER3_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 788 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 3 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER4_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 799 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 4 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER4_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 810 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 4 of the projected image" - END_OBJECT -END_OBJECT -END diff --git a/inputs_mini/hirise/RDRCUMINDEX.TAB b/inputs_mini/hirise/RDRCUMINDEX.TAB deleted file mode 100644 index 9b2f709..0000000 --- a/inputs_mini/hirise/RDRCUMINDEX.TAB +++ /dev/null @@ -1,9 +0,0 @@ -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0150/AEB_000001_0150_RED.JP2 ","MRO","HIRISE","AEB_000001_0150","AEB_000001_0150_RED ","2 ","MARS ", 1,"Aerobraking ","Sample of Argyre Basin rim ","2006-03-24T04:50:31 ","827643049:47201 ","2006-03-24T04:50:31 ","827643050:37396 ","2006-03-24T04:51:02 ","827643081:07204 ", 53911, 29279, 0.35607,87.0475, 87.2081,1469.320,4853.87,1469.670, 270.0000, 336.9280, 12.0600, 9.5812, -52.3105, 300.7610, 1.62365, 29.396, 7.4125,"NO ", -52.8767, -51.5351, 300.2040, 301.3370, 1.47, 40183.102,"EQUIRECTANGULAR ",-50.0, 180.000, -2070840.0, -3104770.0, -51.5351, 300.5280, -51.6056, 301.3370, -52.8767, 301.0040, -52.8092, 300.2040 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0100/AEB_000001_0100_RED.JP2 ","MRO","HIRISE","AEB_000001_0100","AEB_000001_0100_RED ","2 ","MARS ", 1,"Aerobraking ","Degraded crater near Halley Crater ","2006-03-24T04:48:38 ","827642937:07052 ","2006-03-24T04:48:39 ","827642938:13790 ","2006-03-24T04:48:43 ","827642942:30971 ", 7643, 21479, 0.36641,84.5370, 84.7041,1697.190,5083.90,1696.930, 270.0000, 336.5150, 12.0598, 10.0907, -47.2626, 302.0060, 1.62365, 29.396, 7.4616,"NO ", -47.2552, -47.0357, 301.5790, 302.4510, 1.70, 34825.898,"EQUIRECTANGULAR ",-45.0, 180.000, -1638060.0, -2993950.0, -47.0358, 301.6120, -47.1137, 302.4510, -47.2551, 302.4170, -47.1778, 301.5790 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0050/AEB_000001_0050_RED.JP2 ","MRO","HIRISE","AEB_000001_0050","AEB_000001_0050_RED ","2 ","MARS ", 1,"Aerobraking ","Cratered plains near Bosporos Rupes ","2006-03-24T04:45:36 ","827642755:23841 ","2006-03-24T04:45:38 ","827642756:53112 ","2006-03-24T04:45:44 ","827642763:01198 ", 8129, 20975, 0.36624,81.3654, 81.5326,2040.170,5431.48,2040.230, 270.0000, 336.0680, 12.0594, 10.8226, -40.7764, 303.5000, 1.62365, 29.395, 7.5125,"NO ", -40.7794, -40.4990, 303.0390, 303.9830, 2.04, 28985.199,"EQUIRECTANGULAR ",-40.0, 180.000, -1173870.0, -2731940.0, -40.4990, 303.0790, -40.5927, 303.9830, -40.7794, 303.9400, -40.6864, 303.0390 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000001_0000/AEB_000001_0000_RED.JP2 ","MRO","HIRISE","AEB_000001_0000","AEB_000001_0000_RED ","2 ","MARS ", 1,"Aerobraking ","Bosporos Planum region ","2006-03-24T04:41:47 ","827642526:16944 ","2006-03-24T04:41:49 ","827642528:21067 ","2006-03-24T04:42:04 ","827642542:60817 ", 12127, 22528, 0.34491,78.0572, 78.2127,2490.510,5883.10,2490.300, 270.0000, 337.3990, 12.0590, 11.7329, -33.7997, 305.0790, 1.62364, 29.394, 7.5571,"NO ", -33.9094, -33.3992, 304.5450, 305.6390, 2.49, 23769.801,"EQUIRECTANGULAR ",-30.0, 180.000, -793892.0, -2563790.0, -33.3992, 304.6310, -33.5174, 305.6390, -33.9094, 305.5460, -33.7933, 304.5450 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0150/AEB_000002_0150_RED.JP2 ","MRO","HIRISE","AEB_000002_0150","AEB_000002_0150_RED ","2 ","MARS ", 2,"Aerobraking ","Planum Chronium region ","2006-03-25T16:22:32 ","827770971:00945 ","2006-03-25T16:22:33 ","827770971:49436 ","2006-03-25T16:23:03 ","827771002:09251 ", 65542, 31177, 0.33368,89.8238, 89.9681,1287.980,4672.66,1288.000, 270.0000, 337.7410, 12.3171, 210.7050, -56.7667, 140.4430, 1.62493, 30.076, 7.3163,"NO ", -57.3947, -55.9649, 139.8560, 141.0420, 1.29, 45838.398,"EQUIRECTANGULAR ",-55.0, 180.000, -2565340.0, 1055460.0, -55.9649, 140.2530, -56.0291, 141.0420, -57.3947, 140.6430, -57.3327, 139.8560 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0100/AEB_000002_0100_RED.JP2 ","MRO","HIRISE","AEB_000002_0100","AEB_000002_0100_RED ","1 ","MARS ", 2,"Aerobraking ","Floor of Kepler Crater ","2006-03-25T16:18:51 ","827770750:13709 ","2006-03-25T16:18:52 ","827770751:20250 ","2006-03-25T16:19:09 ","827770768:20692 ", 24479, 24280, 0.36694,85.1275, 85.2930,1691.900,5079.01,1691.890, 270.0000, 336.8390, 12.3166, 211.6280, -47.2607, 142.9100, 1.62493, 30.075, 7.4194,"NO ", -47.5039, -46.8032, 142.4080, 143.3910, 1.69, 34928.801,"EQUIRECTANGULAR ",-45.0, 180.000, -1634780.0, 12209.5, -46.8032, 142.5530, -46.8818, 143.3910, -47.5039, 143.2410, -47.4271, 142.4080 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0050/AEB_000002_0050_RED.JP2 ","MRO","HIRISE","AEB_000002_0050","AEB_000002_0050_RED ","2 ","MARS ", 2,"Aerobraking ","Terra Cimmeria ","2006-03-25T16:15:50 ","827770569:24600 ","2006-03-25T16:15:52 ","827770570:55687 ","2006-03-25T16:16:09 ","827770588:35829 ", 17633, 8973, 0.36514,81.9848, 82.1494,2035.340,5425.36,2035.370, 270.0000, 336.2930, 12.3162, 212.3580, -40.7767, 144.4040, 1.62492, 30.074, 7.4703,"NO ", -40.9490, -40.3422, 144.2530, 144.6600, 2.04, 29056.400,"EQUIRECTANGULAR ",-40.0, 180.000, -1172200.0, 795590.0, -40.3423, 144.3870, -40.3707, 144.6600, -40.9490, 144.5280, -40.9211, 144.2570 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0000/AEB_000002_0000_RED.JP2 ","MRO","HIRISE","AEB_000002_0000","AEB_000002_0000_RED ","2 ","MARS ", 2,"Aerobraking ","Ancient cratered surface northeast of Martz Crater ","2006-03-25T16:11:58 ","827770337:06571 ","2006-03-25T16:12:00 ","827770339:13302 ","2006-03-25T16:12:34 ","827770373:03172 ", 23505, 10752, 0.34358,78.7017, 78.8551,2483.480,5875.20,2483.440, 270.0000, 337.5530, 12.3158, 213.2650, -33.8047, 145.9810, 1.62492, 30.073, 7.5151,"NO ", -34.1609, -33.1748, 145.7760, 146.3020, 2.48, 23836.801,"EQUIRECTANGULAR ",-30.0, 180.000, -790782.0, 706390.0, -33.1749, 145.9970, -33.2107, 146.3020, -34.1608, 146.0810, -34.1261, 145.7810 -"MROHR_0001","RDR/AEB/ORB_000000_000099/AEB_000002_0000/AEB_000002_0000_COLOR.JP2","MRO","HIRISE","AEB_000002_0000","AEB_000002_0000_COLOR","1 ","MARS ", 2,"Aerobraking ","Ancient cratered surface northeast of Martz Crater ","2006-03-25T16:11:58 ","827770337:06571 ","2006-03-25T16:11:59 ","827770337:49063 ","2006-03-25T16:12:35 ","827770373:01762 ", 23216, 8701, 0.34358,78.7017, 78.8551,2483.480,5875.20,2483.440, 270.0000, 337.5830, 12.3158, 213.2650, -33.8047, 145.9810, 1.62492, 30.073, 7.5151,"NO ", -34.1609, -33.1748, 145.7760, 146.3020, 2.48, 23836.801,"EQUIRECTANGULAR ",-30.0, 180.000, -790782.0, 706390.0, -33.1849, 145.9980, -33.2101, 146.2040, -34.1569, 145.9850, -34.1335, 145.7820 diff --git a/inputs_mini/lroc/CUMINDEX.LBL b/inputs_mini/lroc/CUMINDEX.LBL deleted file mode 100644 index b1535bb..0000000 --- a/inputs_mini/lroc/CUMINDEX.LBL +++ /dev/null @@ -1,980 +0,0 @@ -PDS_VERSION_ID = PDS3 - -^INDEX_TABLE = "CUMINDEX.TAB" - -RECORD_TYPE = FIXED_LENGTH -RECORD_BYTES = 902 -FILE_RECORDS = 12 -MD5_CHECKSUM = "1d07f6e60bfe5fc89eac6b940ff16fd8" -DATA_SET_ID = "LRO-L-LROC-3-CDR-V1.0" -SPACECRAFT_NAME = "LUNAR RECONNAISSANCE ORBITER" -INSTRUMENT_NAME = "LUNAR RECONNAISSANCE ORBITER CAMERA" -TARGET_NAME = "MOON" -MISSION_PHASE_NAME = {"COMMISSIONING", - "NOMINAL MISSION", - "SCIENCE MISSION", - "EXTENDED SCIENCE MISSION", - "SECOND EXTENDED SCIENCE MISSION", - "THIRD EXTENDED SCIENCE MISSION", - "FOURTH EXTENDED SCIENCE MISSION"} -PRODUCT_CREATION_TIME = 2022-02-08T19:19:13 - -OBJECT = INDEX_TABLE - NAME = CDR_CATALOG_INDEX - INTERCHANGE_FORMAT = ASCII - ROWS = 12 - COLUMNS = 83 - ROW_BYTES = 902 - INDEX_TYPE = CUMULATIVE - - OBJECT = COLUMN - NAME = VOLUME_ID - COLUMN_NUMBER = 1 - DATA_TYPE = CHARACTER - START_BYTE = 2 - BYTES = 12 - FORMAT = "A12" - DESCRIPTION = "Volume id." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = FILE_SPECIFICATION_NAME - COLUMN_NUMBER = 2 - DATA_TYPE = CHARACTER - START_BYTE = 17 - BYTES = 75 - FORMAT = "A75" - DESCRIPTION = "Provides the full name of a file, including a path name, - relative to a PDS volume. The path is followed by a valid file name." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INSTRUMENT_HOST_ID - COLUMN_NUMBER = 3 - DATA_TYPE = CHARACTER - START_BYTE = 95 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "ALWAYS LRO." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INSTRUMENT_ID - COLUMN_NUMBER = 4 - DATA_TYPE = CHARACTER - START_BYTE = 101 - BYTES = 4 - FORMAT = "A4" - DESCRIPTION = "Always LROC." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = ORIGINAL_PRODUCT_ID - COLUMN_NUMBER = 5 - DATA_TYPE = CHARACTER - START_BYTE = 108 - BYTES = 12 - FORMAT = "A12" - DESCRIPTION = "Filename of this image as received from the LRO MOC. For - NAC observations, the filename is either nacl00000000 or nacr00000000 - (NAC-LEFT or NAC-RIGHT respectively). For WAC observations, the filename is - wac00000000." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = PRODUCT_ID - COLUMN_NUMBER = 6 - DATA_TYPE = CHARACTER - START_BYTE = 123 - BYTES = 13 - FORMAT = "A13" - DESCRIPTION = "Unique identification associated with the product." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = PRODUCT_VERSION_ID - COLUMN_NUMBER = 7 - DATA_TYPE = CHARACTER - START_BYTE = 139 - BYTES = 12 - FORMAT = "A12" - DESCRIPTION = "The product version number of this product." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = TARGET_NAME - COLUMN_NUMBER = 8 - DATA_TYPE = CHARACTER - START_BYTE = 154 - BYTES = 5 - FORMAT = "A5" - DESCRIPTION = "Set to the target body: MOON for any nominal lunar - imaging, EARTH for any observations of the Earth, CAL calibration images, and - STAR for star calibration images." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = ORBIT_NUMBER - COLUMN_NUMBER = 9 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 161 - BYTES = 5 - FORMAT = "I5" - DESCRIPTION = "LRO orbit number when observation was acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SLEW_ANGLE - COLUMN_NUMBER = 10 - DATA_TYPE = ASCII_REAL - START_BYTE = 167 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "Angle of LRO off nadir when observation acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = MISSION_PHASE_NAME - COLUMN_NUMBER = 11 - DATA_TYPE = CHARACTER - START_BYTE = 177 - BYTES = 31 - FORMAT = "A31" - DESCRIPTION = "The mission phase at the time the image was acquired - - LAUNCH, EARLY CRUISE, MID CRUISE, LATE CRUISE, LUNAR ORBIT ACQUISITION, - COMMISSIONING, NOMINAL MISSION, SCIENCE MISSION EXTENDED SCIENCE MISSION & - SECOND EXTENDED SCIENCE MISSION." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = RATIONALE_DESC - COLUMN_NUMBER = 12 - DATA_TYPE = CHARACTER - START_BYTE = 211 - BYTES = 75 - FORMAT = "A75" - DESCRIPTION = "For NAC observations, set to one of the following: the - keywords recorded in the REACT ROI, the appropriate NAC campaign, or set to - the string TARGET OF OPPORTUNITY. For WAC observations, set to either the - appropriate campaign or GLOBAL_COVERAGE." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = DATA_QUALITY_ID - COLUMN_NUMBER = 13 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 288 - BYTES = 3 - FORMAT = "I3" - DESCRIPTION = "Set to an 8-bit value that encodes data quality - information; the numeric key identifies the quality of data." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_PREROLL_START_TIME - COLUMN_NUMBER = 14 - DATA_TYPE = CHARACTER - START_BYTE = 293 - BYTES = 24 - FORMAT = "A24" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "UTC time when image command begins." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = START_TIME - COLUMN_NUMBER = 15 - DATA_TYPE = CHARACTER - START_BYTE = 320 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when first image line of target is acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = STOP_TIME - COLUMN_NUMBER = 16 - DATA_TYPE = CHARACTER - START_BYTE = 347 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when last image line of target is acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_PARTITION - COLUMN_NUMBER = 17 - DATA_TYPE = CHARACTER - START_BYTE = 374 - BYTES = 2 - FORMAT = "A2" - DESCRIPTION = "Spacecraft clock partition." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_SPACECRAFT_CLOCK_PREROLL_COUNT - COLUMN_NUMBER = 18 - DATA_TYPE = CHARACTER - START_BYTE = 379 - BYTES = 15 - FORMAT = "A15" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "S/C clock count when the observation first line of the - preroll (1024 lines) is acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_START_COUNT - COLUMN_NUMBER = 19 - DATA_TYPE = CHARACTER - START_BYTE = 397 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "S/C clock count when first image line/frame of target is - acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_STOP_COUNT - COLUMN_NUMBER = 20 - DATA_TYPE = CHARACTER - START_BYTE = 416 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "S/C clock count when last image line/frame of target is - acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = START_SCLK_SECONDS - COLUMN_NUMBER = 21 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 434 - BYTES = 9 - FORMAT = "I9" - DESCRIPTION = "The spacecraft SCLK seconds value at the start of a NAC - or WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = START_SCLK_TICKS - COLUMN_NUMBER = 22 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 444 - BYTES = 7 - FORMAT = "I7" - DESCRIPTION = "The spacecraft SCLK ticks value at the start of a NAC or - WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = STOP_SCLK_SECONDS - COLUMN_NUMBER = 23 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 452 - BYTES = 9 - FORMAT = "I9" - DESCRIPTION = "The spacecraft SCLK seconds value at the end of a NAC or - WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = STOP_SCLK_TICKS - COLUMN_NUMBER = 24 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 462 - BYTES = 7 - FORMAT = "I7" - DESCRIPTION = "The spacecraft SCLK ticks value at the end of a NAC or - WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_LINE_EXPOSURE_DURATION - COLUMN_NUMBER = 25 - DATA_TYPE = ASCII_REAL - START_BYTE = 470 - BYTES = 11 - FORMAT = "F11.9" - NOT_APPLICABLE_CONSTANT = 9.999999999 - DESCRIPTION = "Indicates the elapsed time during the acquistion of one - line; can have values between 337.6 and 35,281.6 microseconds, in 128/15 - microsecond increments." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_EXPOSURE_DURATION - COLUMN_NUMBER = 26 - DATA_TYPE = ASCII_REAL - START_BYTE = 482 - BYTES = 7 - FORMAT = "F7.5" - NOT_APPLICABLE_CONSTANT = 9.99999 - DESCRIPTION = "Indicates the time elapsed during the acquisition of one - frame of data for the WAC." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_FRAME_ID - COLUMN_NUMBER = 27 - DATA_TYPE = CHARACTER - START_BYTE = 491 - BYTES = 5 - FORMAT = "A5" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "Denotes LEFT or RIGHT barrel (telescope) for NAC - observations." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_DAC_RESET - COLUMN_NUMBER = 28 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 498 - BYTES = 4 - FORMAT = "I4" - NOT_APPLICABLE_CONSTANT = 9999 - DESCRIPTION = "Records the commanded DAC reset level that coarsely sets - the DN zero level for a NAC image." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_CHANNEL_A_OFFSET - COLUMN_NUMBER = 29 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 503 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded NAC channel A offset that finely - sets the DN zero level." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_CHANNEL_B_OFFSET - COLUMN_NUMBER = 30 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 507 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded NAC channel B offset that finely - sets the DN zero level." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INSTRUMENT_MODE_CODE - COLUMN_NUMBER = 31 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 511 - BYTES = 3 - FORMAT = "I3" - DESCRIPTION = "The commanded 8-bit integer value indicating in what - mode the NAC or WAC operates during image acquisition." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_INSTRUMENT_MODE_ID - COLUMN_NUMBER = 32 - DATA_TYPE = CHARACTER - START_BYTE = 516 - BYTES = 5 - FORMAT = "A5" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "provides an instrument-dependent designation of WAC - operating mode: BW, COLOR, VIS, or UV." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BAND_CODE - COLUMN_NUMBER = 33 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 523 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "The commanded 8-bit integer value specifying which WAC - bands to acquire for each frame." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BACKGROUND_OFFSET - COLUMN_NUMBER = 34 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 527 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded background offset for WAC - observations." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_FILTER_NAME - COLUMN_NUMBER = 35 - DATA_TYPE = CHARACTER - START_BYTE = 532 - BYTES = 38 - FORMAT = "A38" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "Numerical designation of the WAC optical filters in - nanometers (415, 566, 604, 643, 689, 321, 360)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_NUMBER_OF_FRAMES - COLUMN_NUMBER = 36 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 572 - BYTES = 5 - FORMAT = "I5" - NOT_APPLICABLE_CONSTANT = 99999 - DESCRIPTION = "Records the commanded number of frames for a WAC - observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_INTERFRAME_TIME - COLUMN_NUMBER = 37 - DATA_TYPE = ASCII_REAL - START_BYTE = 578 - BYTES = 7 - FORMAT = "F7.2" - NOT_APPLICABLE_CONSTANT = 9999.99 - DESCRIPTION = "Set to the value of the interframe delay between WAC - framelets. Keyword can have values between 25/64 and 280/64 seconds, in 1/64 - seconds increments." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_INTERFRAME_CODE - COLUMN_NUMBER = 38 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 586 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded interframe gap code - (INTERFRAME_TIME) for a WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_MODE_POLAR - COLUMN_NUMBER = 39 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 590 - BYTES = 1 - FORMAT = "I1" - NOT_APPLICABLE_CONSTANT = 9 - DESCRIPTION = "Records the commanded mode for the POLAR flag on WAC - observation (0 = NOT ON and 1 = ON)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = COMPAND_SELECT_CODE - COLUMN_NUMBER = 40 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 592 - BYTES = 1 - FORMAT = "I1" - DESCRIPTION = "Records the commanded value designating which companding - table to utilize for WAC or NAC observations." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = MODE_COMPRESSION - COLUMN_NUMBER = 41 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 594 - BYTES = 1 - FORMAT = "I1" - DESCRIPTION = "Records the command flag controlling if compression is - enabled or disabled for a WAC or NAC observation (0=NO, 1=YES)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = MODE_TEST - COLUMN_NUMBER = 42 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 596 - BYTES = 1 - FORMAT = "I1" - DESCRIPTION = "Records the commanded flag controlling if a TEST image - is to be acquired (0=NO, 1=YES)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_SCS - COLUMN_NUMBER = 43 - DATA_TYPE = ASCII_REAL - START_BYTE = 598 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC SCS in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_FPA - COLUMN_NUMBER = 44 - DATA_TYPE = ASCII_REAL - START_BYTE = 607 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of NAC focal plane array in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_FPGA - COLUMN_NUMBER = 45 - DATA_TYPE = ASCII_REAL - START_BYTE = 616 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of NAC Field Programmable Gate Array in - degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_TELESCOPE - COLUMN_NUMBER = 46 - DATA_TYPE = ASCII_REAL - START_BYTE = 625 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of NAC Telescope in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BEGIN_TEMPERATURE_SCS - COLUMN_NUMBER = 47 - DATA_TYPE = ASCII_REAL - START_BYTE = 634 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC SCS at the beginning of a WAC - observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_MIDDLE_TEMPERATURE_SCS - COLUMN_NUMBER = 48 - DATA_TYPE = ASCII_REAL - START_BYTE = 643 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC Sequencer and Compression System at - the middle of a WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_END_TEMPERATURE_SCS - COLUMN_NUMBER = 49 - DATA_TYPE = ASCII_REAL - START_BYTE = 652 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC Sequencer and Compression System at - the end of a WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BEGIN_TEMPERATURE_FPA - COLUMN_NUMBER = 50 - DATA_TYPE = ASCII_REAL - START_BYTE = 661 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of WAC focal plane array at the beginning of - a WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_MIDDLE_TEMPERATURE_FPA - COLUMN_NUMBER = 51 - DATA_TYPE = ASCII_REAL - START_BYTE = 670 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of WAC focal plane array at the middle of a - WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_END_TEMPERATURE_FPA - COLUMN_NUMBER = 52 - DATA_TYPE = ASCII_REAL - START_BYTE = 679 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of WAC focal plane array at the end of a WAC - observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = IMAGE_LINES - COLUMN_NUMBER = 53 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 688 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Number of image lines." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LINE_SAMPLES - COLUMN_NUMBER = 54 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 695 - BYTES = 4 - FORMAT = "I4" - DESCRIPTION = "Number of image samples." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SAMPLE_BITS - COLUMN_NUMBER = 55 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 700 - BYTES = 2 - FORMAT = "I2" - DESCRIPTION = "Number of bits per pixel." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SCALED_PIXEL_WIDTH - COLUMN_NUMBER = 56 - DATA_TYPE = ASCII_REAL - START_BYTE = 703 - BYTES = 7 - FORMAT = "F7.2" - NOT_APPLICABLE_CONSTANT = 0000.00 - DESCRIPTION = "The cross-scan image resolution in meters/pixel at the - center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SCALED_PIXEL_HEIGHT - COLUMN_NUMBER = 57 - DATA_TYPE = ASCII_REAL - START_BYTE = 711 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 000.00 - DESCRIPTION = "The down-scan image resolution in meters/pixel at the - center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = RESOLUTION - COLUMN_NUMBER = 58 - DATA_TYPE = ASCII_REAL - START_BYTE = 718 - BYTES = 7 - FORMAT = "F7.3" - NOT_APPLICABLE_CONSTANT = 0000.00 - DESCRIPTION = "The calculated pixel resolution at the center of a NAC - or WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = EMISSION_ANGLE - COLUMN_NUMBER = 59 - DATA_TYPE = ASCII_REAL - START_BYTE = 726 - BYTES = 5 - FORMAT = "F5.2" - NOT_APPLICABLE_CONSTANT = 99.99 - DESCRIPTION = "The emission angle at the center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INCIDENCE_ANGLE - COLUMN_NUMBER = 60 - DATA_TYPE = ASCII_REAL - START_BYTE = 732 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The incidence angle at the center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = PHASE_ANGLE - COLUMN_NUMBER = 61 - DATA_TYPE = ASCII_REAL - START_BYTE = 739 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The phase angle at the center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NORTH_AZIMUTH - COLUMN_NUMBER = 62 - DATA_TYPE = ASCII_REAL - START_BYTE = 746 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The angle in degrees clockwise from the reference axis - of the image (a line from the center to the right edge of image) to the - direction to the north pole of target body This angle is relative to the RDR - products." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SOLAR_AZIMUTH - COLUMN_NUMBER = 63 - DATA_TYPE = ASCII_REAL - START_BYTE = 753 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The angle in degrees clockwise from the reference axis - of the image (a line from the center to the right edge of image) to the - direction of the subsolar point on target body. This angle is relative to the - RDR products." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SOLAR_LATITUDE - COLUMN_NUMBER = 64 - DATA_TYPE = ASCII_REAL - START_BYTE = 760 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Latitude of subsolar point in degrees." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SOLAR_LONGITUDE - COLUMN_NUMBER = 65 - DATA_TYPE = ASCII_REAL - START_BYTE = 767 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The planetocentric longitude of subsolar point in - degrees." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LATITUDE - COLUMN_NUMBER = 66 - DATA_TYPE = ASCII_REAL - START_BYTE = 774 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Planetocentric latitude of subspacecraft point in - degrees." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LONGITUDE - COLUMN_NUMBER = 67 - DATA_TYPE = ASCII_REAL - START_BYTE = 781 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Planetocentric longitude of spacecraft-to-target-center - surface intercept vector." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SOLAR_DISTANCE - COLUMN_NUMBER = 68 - DATA_TYPE = ASCII_REAL - START_BYTE = 788 - BYTES = 11 - FORMAT = "F11.1" - NOT_APPLICABLE_CONSTANT = 999999999.9 - DESCRIPTION = "distance from the center of the image on the target body - to the center of the sun in km." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SOLAR_LONGITUDE - COLUMN_NUMBER = 69 - DATA_TYPE = ASCII_REAL - START_BYTE = 800 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Solar longitude ('L sub s') at time of image in degrees - provides the value of the angle between the body_Sun line at the time of - interest and the body_Sun line at the vernal equinox." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = CENTER_LATITUDE - COLUMN_NUMBER = 70 - DATA_TYPE = ASCII_REAL - START_BYTE = 807 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The planetocentric latitude coordinate at the center of - the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = CENTER_LONGITUDE - COLUMN_NUMBER = 71 - DATA_TYPE = ASCII_REAL - START_BYTE = 814 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The planetocentric longitude coordinate at the center of - the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_RIGHT_LATITUDE - COLUMN_NUMBER = 72 - DATA_TYPE = ASCII_REAL - START_BYTE = 821 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper right latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_RIGHT_LONGITUDE - COLUMN_NUMBER = 73 - DATA_TYPE = ASCII_REAL - START_BYTE = 828 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper right longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_RIGHT_LATITUDE - COLUMN_NUMBER = 74 - DATA_TYPE = ASCII_REAL - START_BYTE = 835 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Lower right latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_RIGHT_LONGITUDE - COLUMN_NUMBER = 75 - DATA_TYPE = ASCII_REAL - START_BYTE = 842 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "lower right longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_LEFT_LATITUDE - COLUMN_NUMBER = 76 - DATA_TYPE = ASCII_REAL - START_BYTE = 849 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "lower left latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_LEFT_LONGITUDE - COLUMN_NUMBER = 77 - DATA_TYPE = ASCII_REAL - START_BYTE = 856 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "lower left longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_LEFT_LATITUDE - COLUMN_NUMBER = 78 - DATA_TYPE = ASCII_REAL - START_BYTE = 863 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper left latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_LEFT_LONGITUDE - COLUMN_NUMBER = 79 - DATA_TYPE = ASCII_REAL - START_BYTE = 870 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper left longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_ALTITUDE - COLUMN_NUMBER = 80 - DATA_TYPE = ASCII_REAL - START_BYTE = 877 - BYTES = 7 - FORMAT = "F7.2" - DESCRIPTION = "distance from s/c to closest point on surface in km." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = TARGET_CENTER_DISTANCE - COLUMN_NUMBER = 81 - DATA_TYPE = ASCII_REAL - START_BYTE = 885 - BYTES = 7 - FORMAT = "F7.2" - NOT_APPLICABLE_CONSTANT = 9999.99 - DESCRIPTION = "distance from s/c to target body center in km." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = ORBIT_NODE - COLUMN_NUMBER = 82 - DATA_TYPE = CHARACTER - START_BYTE = 894 - BYTES = 1 - FORMAT = "A1" - DESCRIPTION = "A character denoting the orbit node for LRO: A for - ascending node portion of the orbit; D for descending node portion of the - orbit" - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LRO_FLIGHT_DIRECTION - COLUMN_NUMBER = 83 - DATA_TYPE = CHARACTER - START_BYTE = 898 - BYTES = 2 - FORMAT = "A2" - DESCRIPTION = "Denotes the LRO spacecraft X-axis relative to the - velocity vector: +X (LRO positive X axis aligned with velocity vector) or -X - (LRO negative X axis aligned with velocity vector)." - END_OBJECT = COLUMN - -END_OBJECT = INDEX_TABLE -END diff --git a/inputs_mini/lroc/CUMINDEX.TAB b/inputs_mini/lroc/CUMINDEX.TAB deleted file mode 100644 index aae2c11..0000000 --- a/inputs_mini/lroc/CUMINDEX.TAB +++ /dev/null @@ -1,12 +0,0 @@ -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/WAC/M101013765CC.IMG","LRO","LROC"," wac000000d1"," M101013765CC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," GLOBAL COVERAGE", 32," N/A"," 2009-06-30 15:08:17.604"," 2009-06-30 15:11:20.807"," 1"," N/A"," 268067297:37919"," 268067480:51231",268067297, 37919,268067480, 51231,9.999999999,0.08660," N/A",9999,999,999, 1,"COLOR",127, 56," (415, 566, 604, 643, 689, 321, 360)", 335, 546.88, 10,0,0,1,0,9999.999,9999.999,9999.999,9999.999, -14.004, -13.813, -13.624, -30.641, -30.519, -30.458, 0, 704,32, 64.33, 64.50, 64.415, 1.13, 90.12, 90.35, 91.02,182.06, 0.59, 83.02,-85.26,167.40,152181683.9,157.24,-85.23,167.36,-80.25,175.83,-89.64,296.80,-88.60, 75.86,-80.16,165.77, 43.06,1780.44,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101013931LC.IMG","LRO","LROC","nacl000000cb"," M101013931LC"," v1.9"," MOON", 72, -0.019," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:11:03.045"," 2009-06-30 15:11:03.744"," 2009-06-30 15:11:39.360"," 1"," 268067463:1310"," 268067463:47077"," 268067499:21922",268067463, 47077,268067499, 21922,0.000678933,9.99999," LEFT", 195, 39,106, 15," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.634, 14.032, -21.090, 9.845,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 52224,2532,16, 0.86, 1.12, 0.991, 1.69, 90.01, 91.70,354.26,181.14, 0.59, 83.00,-89.38, 53.48,152181770.9,157.24,-89.34, 55.26,-89.15,134.15,-88.60, 16.79,-88.58, 19.44,-89.10,130.66, 42.96,1780.36,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101013931RC.IMG","LRO","LROC","nacr000000cb"," M101013931RC"," v1.9"," MOON", 72, -0.019," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:11:03.045"," 2009-06-30 15:11:03.744"," 2009-06-30 15:11:39.360"," 1"," 268067463:1310"," 268067463:47077"," 268067499:21922",268067463, 47077,268067499, 21922,0.000678933,9.99999,"RIGHT", 186, 51,110, 15," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.634, 15.184, -17.728, 6.071,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 52224,2532,16, 0.86, 1.12, 0.989, 1.13, 90.07, 88.95,189.19,180.80, 0.59, 83.00,-89.38, 53.48,152181770.9,157.24,-89.40, 52.31,-89.19,137.99,-88.63, 14.17,-88.61, 16.92,-89.15,134.11, 42.96,1780.36,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/WAC/M101014131CC.IMG","LRO","LROC"," wac000000d3"," M101014131CC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," GLOBAL COVERAGE", 32," N/A"," 2009-06-30 15:14:23.914"," 2009-06-30 15:17:28.258"," 1"," N/A"," 268067663:58235"," 268067848:15227",268067663, 58235,268067848, 15227,9.999999999,0.08000," N/A",9999,999,999, 1,"COLOR",127, 56," (415, 566, 604, 643, 689, 321, 360)", 347, 531.25, 9,0,0,1,0,9999.999,9999.999,9999.999,9999.999, -13.290, -13.125, -13.001, -30.344, -30.397, -30.276, 0, 704,32, 68.31, 62.39, 65.348, 1.13, 89.81, 90.05,269.92,182.05, 0.59, 82.96,-74.75,355.82,152182029.8,157.25,-74.77,355.84,-79.81,351.94,-69.84,352.58,-69.79,358.00,-79.72, 1.71, 45.72,1783.16,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014224LC.IMG","LRO","LROC","nacl00000107"," M101014224LC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:15:56.175"," 2009-06-30 15:15:56.523"," 2009-06-30 15:15:58.259"," 1"," 268067756:9830"," 268067756:32587"," 268067758:15304",268067756, 32587,268067758, 15304,0.000337600,9.99999," LEFT", 197, 40, 40, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.125, 15.182, -20.677, 6.963,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.507, 1.70, 89.78, 91.47,280.57,181.12, 0.59, 82.96,-74.68,355.81,152182031.0,157.25,-74.67,355.97,-74.72,355.83,-74.63,355.82,-74.63,356.11,-74.72,356.12, 45.74,1783.18,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014224RC.IMG","LRO","LROC","nacr00000107"," M101014224RC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:15:56.175"," 2009-06-30 15:15:56.523"," 2009-06-30 15:15:58.259"," 1"," 268067756:9830"," 268067756:32587"," 268067758:15304",268067756, 32587,268067758, 15304,0.000337600,9.99999,"RIGHT", 187, 40, 40, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.125, 15.939, -17.432, 5.419,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.506, 1.13, 89.85, 88.72,259.77,180.79, 0.59, 82.96,-74.68,355.81,152182031.0,157.25,-74.68,355.70,-74.73,355.56,-74.63,355.55,-74.63,355.83,-74.72,355.84, 45.74,1783.18,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014254LC.IMG","LRO","LROC","nacl00000106"," M101014254LC"," v1.9"," MOON", 72, -0.021," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:26.295"," 2009-06-30 15:16:26.643"," 2009-06-30 15:16:28.379"," 1","268067786:17694"," 268067786:40451"," 268067788:23168",268067786, 40451,268067788, 23168,0.000337600,9.99999," LEFT", 197, 60, 60, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.042, 15.268, -20.606, 6.756,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.509, 1.70, 89.75, 91.45,279.57,181.11, 0.59, 82.96,-73.04,355.60,152182059.4,157.25,-73.04,355.75,-73.09,355.63,-72.99,355.62,-72.99,355.88,-73.09,355.89, 46.32,1783.76,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014254RC.IMG","LRO","LROC","nacr00000106"," M101014254RC"," v1.9"," MOON", 72, -0.021," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:26.295"," 2009-06-30 15:16:26.643"," 2009-06-30 15:16:28.379"," 1","268067786:17694"," 268067786:40451"," 268067788:23168",268067786, 40451,268067788, 23168,0.000337600,9.99999,"RIGHT", 187, 60, 60, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.042, 15.982, -17.335, 6.392,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.46, 0.56, 0.509, 1.13, 89.82, 88.70,260.72,180.78, 0.59, 82.96,-73.04,355.60,152182059.4,157.25,-73.05,355.50,-73.09,355.37,-73.00,355.36,-73.00,355.63,-73.09,355.64, 46.32,1783.76,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014284LC.IMG","LRO","LROC","nacl00000110"," M101014284LC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:56.685"," 2009-06-30 15:16:57.033"," 2009-06-30 15:16:58.769"," 1","268067816:43253"," 268067817:474"," 268067818:48727",268067817, 474,268067818, 48727,0.000337600,9.99999," LEFT", 196, 0, 0, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.063, 15.287, -20.637, 6.472,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.47, 0.55, 0.512, 1.70, 89.73, 91.42,278.73,181.11, 0.59, 82.96,-71.40,355.43,152182088.0,157.25,-71.39,355.57,-71.44,355.45,-71.35,355.45,-71.35,355.69,-71.44,355.70, 46.95,1784.40,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014284RC.IMG","LRO","LROC","nacr00000110"," M101014284RC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:16:56.685"," 2009-06-30 15:16:57.033"," 2009-06-30 15:16:58.769"," 1","268067816:43253"," 268067817:474"," 268067818:48727",268067817, 474,268067818, 48727,0.000337600,9.99999,"RIGHT", 186, 0, 0, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.063, 16.002, -17.361, 7.495,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.47, 0.55, 0.512, 1.13, 89.80, 88.67,261.51,180.77, 0.59, 82.96,-71.40,355.43,152182088.0,157.25,-71.40,355.34,-71.45,355.22,-71.35,355.21,-71.35,355.45,-71.44,355.46, 46.95,1784.40,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014315LC.IMG","LRO","LROC","nacl00000111"," M101014315LC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:17:27.125"," 2009-06-30 15:17:27.473"," 2009-06-30 15:17:29.209"," 1"," 268067847:6553"," 268067847:29310"," 268067849:12027",268067847, 29310,268067849, 12027,0.000337600,9.99999," LEFT", 196, 20, 20, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.001, 15.350, -20.597, 6.236,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.48, 0.55, 0.516, 1.70, 89.70, 91.40,278.04,181.10, 0.59, 82.95,-69.75,355.29,152182116.7,157.25,-69.75,355.42,-69.79,355.31,-69.70,355.30,-69.70,355.53,-69.79,355.54, 47.64,1785.10,"A","-X" -" LROLRC_1001"," LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009181/NAC/M101014315RC.IMG","LRO","LROC","nacr00000111"," M101014315RC"," v1.9"," MOON", 72, -0.020," COMMISSIONING"," TARGET OF OPPORTUNITY", 0," 2009-06-30 15:17:27.125"," 2009-06-30 15:17:27.473"," 2009-06-30 15:17:29.209"," 1"," 268067847:6553"," 268067847:29310"," 268067849:12027",268067847, 29310,268067849, 12027,0.000337600,9.99999,"RIGHT", 186, 20, 20, 7," N/A",999,999," N/A",99999,9999.99,999,9,0,1,0, -13.001, 16.044, -17.325, 8.829,9999.999,9999.999,9999.999,9999.999,9999.999,9999.999, 5120,5064,16, 0.48, 0.55, 0.515, 1.13, 89.78, 88.65,262.19,180.77, 0.59, 82.95,-69.75,355.29,152182116.7,157.25,-69.75,355.20,-69.80,355.09,-69.70,355.08,-69.70,355.31,-69.80,355.32, 47.64,1785.10,"A","-X" From 76ab1bd6bedb00e110a95cda93f3e70285e6baf5 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Fri, 9 Jun 2023 13:26:27 -0700 Subject: [PATCH 47/57] moved scripts over to PDSIMG/deep-learning repo at JPL --- scripts/README.md | 1 - scripts/get_distributed_samples.py | 120 -------------------------- scripts/lat_lon_center_coord_check.py | 57 ------------ 3 files changed, 178 deletions(-) delete mode 100644 scripts/README.md delete mode 100644 scripts/get_distributed_samples.py delete mode 100644 scripts/lat_lon_center_coord_check.py diff --git a/scripts/README.md b/scripts/README.md deleted file mode 100644 index 7f3b939..0000000 --- a/scripts/README.md +++ /dev/null @@ -1 +0,0 @@ -Scripts related to LROC diff --git a/scripts/get_distributed_samples.py b/scripts/get_distributed_samples.py deleted file mode 100644 index e693821..0000000 --- a/scripts/get_distributed_samples.py +++ /dev/null @@ -1,120 +0,0 @@ -# Emily Dunkel -# 2022 -# Get maximally distant lroc imagery -# Selects a random image, then the maximally distant image from that, then for each image, get the minimum distance to every already select point, then take the max -# This will give us distributed samples around the globe -# Based on script: https://github-fn.jpl.nasa.gov/COSMIC/COSMIC_CTX_impacts/commit/e4c167a2e4d9e345693cd5e25df0149f5d641653 - - -import os -import numpy as np -from sklearn.neighbors import DistanceMetric -from progressbar import ProgressBar, Bar, ETA -#from mpl_toolkits.basemap import Basemap -import matplotlib.pyplot as plt -from matplotlib.backends.backend_pdf import PdfPages -import pdsc -import pdb - -def get_latlon(row): - """ - Return center lat/lon of image - - Inputs - ------ - row: PdsMetadata - single row in table, information for a single image - - Returns - ------- - latlon: (float, float) - (latitude in radians, longitude in radians - """ - # latlon of the center of the image - latlon = np.deg2rad(float(row.center_latitude)), np.deg2rad(float(row.center_longitude)) - return latlon - -def pick_next(selected, latlon): - """ - Return the index of the next selected point - - Inputs - ------ - selected: list of integers - index of previously selected points - latlon: numpy array of shape (number_of_images, 2) - latitude and longitude of all images - - Returns - ------- - returns: integer - index of image that is farthest away to the selected points - """ - dist = DistanceMetric.get_metric('haversine') - S = latlon[np.array(selected)] - D = dist.pairwise(S, latlon) - # Distance to closest selected points - Dmin = np.min(D, axis=0) - # Index of observation with farthest distance to closest selected point - return np.argmax(Dmin) - -def main(outputfile, number): - """ - Returns list of images that are spread throughout the globe - - Inputs - ------ - outputfile: str, path to outputfile - file with list of images - number: int - number of images to return - """ - np.random.seed(0) - client = pdsc.PdsClient() - - # get the lroc NAC data - print('Querying the data') - full_data = client.query('lroc_cdr') - print('Selecting the NAC rows') - nac_data = [row for row in full_data if ('NAC' in row.file_specification_name and 'MOON' in row.target_name)] - - # get the number of NAC observations - num_obs = len(nac_data) - print('Total number of observations = ', num_obs) - - # loop through the nac data and get the lat/lon - print('Getting every lat/lon') - latlon = np.array([get_latlon(row) for row in nac_data]) - print('Getting every filename') - ids = np.array([row.file_specification_name for row in nac_data]) - print('Getting every solar angle') - solar = np.array([row.sub_solar_azimuth for row in nac_data]) - # start with a random observation - print('Selected 0th observation') - selected = [np.random.choice(num_obs)] - - # select the maximally distance image - for ii in range(1, number): - print('Getting observation #: ', ii) - selected.append(pick_next(selected, latlon)) - - selected = np.array(selected) - # filenames of selected cases - selected_ids = ids[selected] - selected_solar = solar[selected] - with open(outputfile, 'w') as f: - for i, sun in zip(selected_ids, selected_solar): - f.write('%s, %s\n' % (i, sun)) - -if __name__ == '__main__': - import argparse - parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS) - - #outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs_mini/lroc/selected.txt' - outputfile_d = '/home/edunkel/PDS/lroc_proj/pdsc/inputs/lroc/selected_withsun_250.txt' - num_d = 250 - - parser.add_argument('-o', '--outputfile', default=outputfile_d, type=str) - parser.add_argument('-n', '--number', default=num_d, type=int) - args = parser.parse_args() - main(**vars(args)) diff --git a/scripts/lat_lon_center_coord_check.py b/scripts/lat_lon_center_coord_check.py deleted file mode 100644 index 52d0757..0000000 --- a/scripts/lat_lon_center_coord_check.py +++ /dev/null @@ -1,57 +0,0 @@ -# Emily Dunkel -# 2023 -# Script to look at center lat lon conversion for example LROC NAC imagery - -import os -import numpy as np -import pdsc -import pdb - -client = pdsc.PdsClient() - -def get_pixel_cnt_diff(img): - """ - Get the pixel difference between the center lat/lon and calculated - """ - metadata = client.query_by_observation_id('lroc_cdr', img) - if metadata == []: - print('Could not get metadata for: ', img) - row_diff = 'NULL' - col_diff = 'NULL' - else: - mydata = metadata[0] - nrows = mydata.lines - ncols = mydata.samples - localizer = pdsc.get_localizer(mydata, browse=False) - row_c, col_c = localizer.latlon_to_pixel(mydata.center_latitude, mydata.center_longitude) - row_diff = abs(nrows/2 - row_c); - col_diff = abs(ncols/2 - col_c); - print('row diff:', int(round(row_diff))) - print('col diff: ', int(round(col_diff))) - - return row_diff, col_diff - -if __name__ == '__main__': - - img_list = [' M101014437RC', ' M119217559LC', ' M186790112RC', ' M186786083LC', ' M186778737LC', - ' M121817429LC', ' M186778235RC', ' M186775740LC', ' M186775813RC', ' M186762974RC', - ' M117358581LC', ' M186749329RC', ' M186728887RC', ' M157867349LC', ' M160230711LC', - ' M186627048RC', ' M109978196RC', ' M109987085RC', ' M101013931LC', ' M112699470LC', - ' M112713912LC', ' M112722915RC', ' M148563970RC', ' M186790281RC', ' M191761375RC'] - res = 0.5 # resolution in meters - count = 0 - row_l = [] - col_l = [] - for ii in img_list: - count = count + 1 - print(count) - row_diff, col_diff = get_pixel_cnt_diff(ii) - row_diff_m = int(round(res * row_diff)) - col_diff_m = int(round(res * col_diff)) - row_l.append(row_diff_m) - col_l.append(col_diff_m) - - print('mean row diff in m: ', np.mean(row_l)) - print('mean col diff in m: ', np.mean(col_l)) - print('max row diff in m: ', max(row_l)) - print('max col diff in m: ', max(col_l)) From ef897104ba0488ebf249e98b71033b901a4150ec Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Fri, 9 Jun 2023 14:17:59 -0700 Subject: [PATCH 48/57] revert readme back to Garys --- README.md | 130 +----------------------------------------------------- 1 file changed, 1 insertion(+), 129 deletions(-) diff --git a/README.md b/README.md index e650ec5..8b43cd0 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,7 @@ several instruments from Mars orbiters are supported, but the system is designed to be extensible to other instruments and bodies. Please refer to the [documentation](https://jplmlia.github.io/pdsc/) for -instructions on installation, setup, and usage. We also show some simple -commands below. +instructions on installation, setup, and usage. --- @@ -20,130 +19,3 @@ United States Government Sponsorship acknowledged. Any commercial use must be negotiated with the Office of Technology Transfer at the California Institute of Technology. - ----- -# Usage - -First, create and activate a bare-bones env using python 3.7: - -```bash -conda env create -f env/bare_env.yml -conda activate p37 -``` -Then, do a pip install: - -```bash -pip install . -``` - -Note: I created full and mini examples (a subset of rows) for the cases. If you take a subset of the rows, you must also update the label file with the reduced number of rows. The full examples are available on the JPL MLIA machines only, but I have included the mini examples in this repository. - -## PyTests - -To run the pytests, you'll need to install pytest and mock. You can do this with "pip install pytest" and "pip install mock". - -Then, run from the upper directory: - -```bash -pytest -``` - -You should get pytests passed. - -## HiRISE Example - -# Download HiRISE Label and Table files: - -```bash -wget -O RDRCUMINDEX.LBL https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.LBL -wget -O RDRCUMINDEX.TAB https://hirise-pds.lpl.arizona.edu/PDS/INDEX/RDRCUMINDEX.TAB -``` - -Example call to ingest indices: - -```bash -pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /PATH/TO/LBL/FOLDER /PATH/TO/OUT/FOLDER -``` - -Or, a mini example (I took a 9 row subset of the full table file and updated the index accordingly, and have added it to this git repository): - -``` -pdsc_ingest -c pdsc/config/hirise_rdr_metadata.yaml /PATH/TO/REPO/inputs_mini/hirise/RDRCUMINDEX.LBL /PATH/TO/OUT/FOLDER -``` - -# CTX example: - -Example call if you have access to analysis machines: - -``` -pdsc_ingest /pds/pdsfs2/pdsdata/mro/ctx/mrox_4098/index/cumindex.tab /PATH/TO/OUT/FOLDER -``` - -Or, a mini example (I took a subset of rows from the table file and updated the index accordingly): - -``` -pdsc_ingest /PATH/TO/REPO/inputs_mini/ctx/cumindex.tab /PATH/TO/OUT/FOLDER -``` - - -# LROC - -LROC database: - -Example call if you have access to analysis machines: - -``` -pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /home/edunkel/PDS/lroc_proj/pdsc/from_pdsfs2/CUMINDEX.LBL /PATH/TO/OUT/FOLDER -``` - -Here is a mini example for lroc included in this repository: - -``` -pdsc_ingest -c pdsc/config/lroc_cdr_metadata.yaml /PATH/TO/REPO/inputs_mini/lroc/CUMINDEX.LBL /PATH/TO/OUT/FOLDER -``` - - -# Basic Usage - -Follow the docs for basic usage, but make sure you're in the python prompt. - -## Example commands for LROC - -We show some example commands for LROC imagery below: - -``` -# set the directory where the database is stored (from the pdsc_ingest command): -export PDSC_DATABASE_DIR=/PATH/TO/OUT/FOLDER -python ->>> import pdsc ->>> pds_client = pdsc.PdsClient() ->>> metadata = pds_client.query_by_observation_id('lroc_cdr', ' M101013931LC') ->>> mydata = metadata[0] ->>> localizer = pdsc.get_localizer(mydata, browse=False) ->>> nrows = mydata.lines ->>> ncols = mydata.samples ->>> lat_center, lon_center = localizer.pixel_to_latlon(nrows//2, ncols//2) -# The localizer will have an error on the order of 10-100s meters since we assume spherical ->>> mydata.center_latitude ->>> mydata.center_longitude -# You can go back to pixel value ->>> localizer.latlon_to_pixel(mydata.center_latitude, mydata.center_longitude) - -``` - -# LROC Scripts - -To get lroc distributed samples around the lunar globe, you can call get_distritubed_samples.py in the scripts directory. Either pass in parameters from the command line, or update the defaults in the script. Here is a calling example: - -``` -conda activate p37 -# point to database -export PDSC_DATABASE_DIR=/home/edunkel/PDS/lroc_proj/pdsc/outputs/lroc/ # example on JPL MLIA analysis machines -python scripts/get_distributed_samples.py -o OUTPUT/FILE -n NUM_SAMPLES -``` - -This will print a list of examples with their sun angle (which helps with labeling, since craters look different depending on where the sun is). - -I have a script to assemble the data from this list in the deep learning repository here: https://github.jpl.nasa.gov/PDSIMG/deep-learning/blob/master/src/lroc/salience/scripts/assemble_data.py - - From db8a583d5310fed3bd4223d53e5070c3d8f35bb8 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Fri, 9 Jun 2023 14:28:13 -0700 Subject: [PATCH 49/57] moved input folder to JPL repo --- inputs/ctx/cumindex.lbl | 601 ---------------- inputs/hirise/RDRCUMINDEX.LBL | 492 -------------- inputs/lroc/CUMINDEX.LBL | 980 --------------------------- inputs/lroc/README.md | 1 - inputs/lroc/selected_withsun_250.txt | 250 ------- 5 files changed, 2324 deletions(-) delete mode 100644 inputs/ctx/cumindex.lbl delete mode 100644 inputs/hirise/RDRCUMINDEX.LBL delete mode 100644 inputs/lroc/CUMINDEX.LBL delete mode 100644 inputs/lroc/README.md delete mode 100644 inputs/lroc/selected_withsun_250.txt diff --git a/inputs/ctx/cumindex.lbl b/inputs/ctx/cumindex.lbl deleted file mode 100644 index 0f70d59..0000000 --- a/inputs/ctx/cumindex.lbl +++ /dev/null @@ -1,601 +0,0 @@ -PDS_VERSION_ID = PDS3 -RECORD_TYPE = FIXED_LENGTH -RECORD_BYTES = 555 -FILE_RECORDS = 127053 -^TABLE = "CUMINDEX.TAB" -DATA_SET_ID = "MRO-M-CTX-2-EDR-L0-V1.0" -SPACECRAFT_NAME = "MARS RECONNAISSANCE ORBITER" -INSTRUMENT_NAME = "CONTEXT CAMERA" -TARGET_NAME = MARS -MISSION_PHASE_NAME = "N/A" -PRODUCT_CREATION_TIME = 2007-05-23T19:00:00 - -OBJECT = TABLE - INTERCHANGE_FORMAT = ASCII - ROWS = 127053 - COLUMNS = 51 - ROW_BYTES = 555 - INDEX_TYPE = CUMULATIVE - -OBJECT = COLUMN -NAME = VOLUME_ID -COLUMN_NUMBER = 1 -DATA_TYPE = CHARACTER -START_BYTE = 2 -BYTES = 9 -FORMAT = "A9" -DESCRIPTION = "volume id" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = FILE_SPECIFICATION_NAME -COLUMN_NUMBER = 2 -DATA_TYPE = CHARACTER -START_BYTE = 14 -BYTES = 35 -FORMAT = "A35" -DESCRIPTION = "file name" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = ORIGINAL_PRODUCT_ID -COLUMN_NUMBER = 3 -DATA_TYPE = CHARACTER -START_BYTE = 52 -BYTES = 16 -FORMAT = "A16" -DESCRIPTION = "original product id" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = PRODUCT_ID -COLUMN_NUMBER = 4 -DATA_TYPE = CHARACTER -START_BYTE = 71 -BYTES = 26 -FORMAT = "A26" -DESCRIPTION = "product id" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = IMAGE_TIME -COLUMN_NUMBER = 5 -DATA_TYPE = CHARACTER -START_BYTE = 100 -BYTES = 23 -FORMAT = "A23" -DESCRIPTION = "SCET time at start of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = INSTRUMENT_ID -COLUMN_NUMBER = 6 -DATA_TYPE = CHARACTER -START_BYTE = 126 -BYTES = 6 -FORMAT = "A6" -DESCRIPTION = "instrument id (abbreviated name or acronym)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = INSTRUMENT_MODE_ID -COLUMN_NUMBER = 7 -DATA_TYPE = CHARACTER -START_BYTE = 135 -BYTES = 5 -FORMAT = "A5" -DESCRIPTION = "command mode (ITL or NIFL) in which this image -was acquired" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LINE_SAMPLES -COLUMN_NUMBER = 8 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 142 -BYTES = 4 -FORMAT = "I4" -DESCRIPTION = "image width" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LINES -COLUMN_NUMBER = 9 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 147 -BYTES = 6 -FORMAT = "I6" -DESCRIPTION = "image height" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SPATIAL_SUMMING -COLUMN_NUMBER = 10 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 154 -BYTES = 2 -FORMAT = "I2" -DESCRIPTION = "spatial summing" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SCALED_PIXEL_WIDTH -COLUMN_NUMBER = 11 -DATA_TYPE = ASCII_REAL -START_BYTE = 157 -BYTES = 8 -FORMAT = "F8.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "image resolution in meters/pixel at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = PIXEL_ASPECT_RATIO -COLUMN_NUMBER = 12 -DATA_TYPE = ASCII_REAL -START_BYTE = 166 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "pixel aspect ratio (pixel height/pixel width) -at center of image. The image's center pixel is projected on the -ground and its linear extents are ratioed, so any effects of -emission angle and line time are modelled. To recover an image -with 'square' pixels, the image should be resampled to a height -of aspect_ratio * input height." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = EMISSION_ANGLE -COLUMN_NUMBER = 13 -DATA_TYPE = ASCII_REAL -START_BYTE = 173 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "emission angle at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = INCIDENCE_ANGLE -COLUMN_NUMBER = 14 -DATA_TYPE = ASCII_REAL -START_BYTE = 180 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "incidence angle at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = PHASE_ANGLE -COLUMN_NUMBER = 15 -DATA_TYPE = ASCII_REAL -START_BYTE = 187 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "phase angle at center of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = CENTER_LONGITUDE -COLUMN_NUMBER = 16 -DATA_TYPE = ASCII_REAL -START_BYTE = 194 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "center longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = CENTER_LATITUDE -COLUMN_NUMBER = 17 -DATA_TYPE = ASCII_REAL -START_BYTE = 201 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "center areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_LEFT_LONGITUDE -COLUMN_NUMBER = 18 -DATA_TYPE = ASCII_REAL -START_BYTE = 208 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper left longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_LEFT_LATITUDE -COLUMN_NUMBER = 19 -DATA_TYPE = ASCII_REAL -START_BYTE = 215 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper left areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_RIGHT_LONGITUDE -COLUMN_NUMBER = 20 -DATA_TYPE = ASCII_REAL -START_BYTE = 222 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper right longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = UPPER_RIGHT_LATITUDE -COLUMN_NUMBER = 21 -DATA_TYPE = ASCII_REAL -START_BYTE = 229 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "upper right areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_LEFT_LONGITUDE -COLUMN_NUMBER = 22 -DATA_TYPE = ASCII_REAL -START_BYTE = 236 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower left longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_LEFT_LATITUDE -COLUMN_NUMBER = 23 -DATA_TYPE = ASCII_REAL -START_BYTE = 243 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower left areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_RIGHT_LONGITUDE -COLUMN_NUMBER = 24 -DATA_TYPE = ASCII_REAL -START_BYTE = 250 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower right longitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOWER_RIGHT_LATITUDE -COLUMN_NUMBER = 25 -DATA_TYPE = ASCII_REAL -START_BYTE = 257 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 999.9 -DESCRIPTION = "lower right areographic latitude" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = MISSION_PHASE_NAME -COLUMN_NUMBER = 26 -DATA_TYPE = CHARACTER -START_BYTE = 265 -BYTES = 10 -FORMAT = "A10" -DESCRIPTION = "mission phase name" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = TARGET_NAME -COLUMN_NUMBER = 27 -DATA_TYPE = CHARACTER -START_BYTE = 278 -BYTES = 6 -FORMAT = "A6" -DESCRIPTION = "target name (e.g., MARS, PHOBOS, STAR, SPACE)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SPACECRAFT_CLOCK_START_COUNT -COLUMN_NUMBER = 28 -DATA_TYPE = CHARACTER -START_BYTE = 287 -BYTES = 15 -FORMAT = "A15" -DESCRIPTION = "spacecraft clock value at start of image" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = FOCAL_PLANE_TEMPERATURE -COLUMN_NUMBER = 29 -DATA_TYPE = ASCII_REAL -START_BYTE = 304 -BYTES = 5 -FORMAT = "F5.1" -DESCRIPTION = "focal plane temp in Kelvins" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LINE_EXPOSURE_DURATION -COLUMN_NUMBER = 30 -DATA_TYPE = ASCII_REAL -START_BYTE = 310 -BYTES = 8 -FORMAT = "F8.4" -DESCRIPTION = "line integration time in milliseconds" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = OFFSET_MODE_ID -COLUMN_NUMBER = 31 -DATA_TYPE = CHARACTER -START_BYTE = 320 -BYTES = 11 -FORMAT = "A11" -DESCRIPTION = "offset mode (see documentation)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SAMPLE_FIRST_PIXEL -COLUMN_NUMBER = 32 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 333 -BYTES = 4 -FORMAT = "I4" -DESCRIPTION = "first pixel stored from detector, zero-based" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SCALED_IMAGE_WIDTH -COLUMN_NUMBER = 33 -DATA_TYPE = ASCII_REAL -START_BYTE = 338 -BYTES = 7 -FORMAT = "F7.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "image width from left to right image edge in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SCALED_IMAGE_HEIGHT -COLUMN_NUMBER = 34 -DATA_TYPE = ASCII_REAL -START_BYTE = 346 -BYTES = 8 -FORMAT = "F8.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "image height from first line to last line in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SPACECRAFT_ALTITUDE -COLUMN_NUMBER = 35 -DATA_TYPE = ASCII_REAL -START_BYTE = 355 -BYTES = 7 -FORMAT = "F7.2" -DESCRIPTION = "distance from s/c to closest point on surface in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = TARGET_CENTER_DISTANCE -COLUMN_NUMBER = 36 -DATA_TYPE = ASCII_REAL -START_BYTE = 363 -BYTES = 7 -FORMAT = "F7.2" -DESCRIPTION = "distance from s/c to target body center in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SLANT_DISTANCE -COLUMN_NUMBER = 37 -DATA_TYPE = ASCII_REAL -START_BYTE = 371 -BYTES = 7 -FORMAT = "F7.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "range from s/c to intersection of view vector with -target body in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = USAGE_NOTE -COLUMN_NUMBER = 38 -DATA_TYPE = CHARACTER -START_BYTE = 380 -BYTES = 1 -FORMAT = "A1" -DESCRIPTION = "Because of the CTX's line-scan nature, depending on the -orientation and sense of rotation of the spacecraft, CTX images can -either be normal or flipped left-for-right (independent of whether the -image is north up or south up.) This flag will be 'F' if the image -should be flipped left-to-right, and 'N' if it is already in normal -form." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = NORTH_AZIMUTH -COLUMN_NUMBER = 39 -DATA_TYPE = ASCII_REAL -START_BYTE = 383 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "The angle in degrees clockwise from the reference axis -of the image (a line from the center to the right edge of the image) -to the direction to the north pole of the target body. If the -USAGE_NOTE described previously is 'F', the image should be flipped -prior to applying this angle." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SOLAR_AZIMUTH -COLUMN_NUMBER = 40 -DATA_TYPE = ASCII_REAL -START_BYTE = 390 -BYTES = 6 -FORMAT = "F6.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "The angle in degrees clockwise from the reference axis -of the image (a line from the center to the right edge of the image) -to the direction to the subsolar point on the target body. If the -USAGE_NOTE described previously is 'F', the image should be flipped -prior to applying this angle." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SOLAR_LONGITUDE -COLUMN_NUMBER = 41 -DATA_TYPE = ASCII_REAL -START_BYTE = 397 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "west longitude of subsolar point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SOLAR_LATITUDE -COLUMN_NUMBER = 42 -DATA_TYPE = ASCII_REAL -START_BYTE = 404 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "planetographic latitude of subsolar point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SPACECRAFT_LONGITUDE -COLUMN_NUMBER = 43 -DATA_TYPE = ASCII_REAL -START_BYTE = 411 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "west longitude of subspacecraft point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SUB_SPACECRAFT_LATITUDE -COLUMN_NUMBER = 44 -DATA_TYPE = ASCII_REAL -START_BYTE = 418 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "planetographic latitude of subspacecraft point in degrees" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SOLAR_DISTANCE -COLUMN_NUMBER = 45 -DATA_TYPE = ASCII_REAL -START_BYTE = 425 -BYTES = 11 -FORMAT = "F11.1" -DESCRIPTION = "distance from the center of the image on the target body -to the center of the sun in km" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = SOLAR_LONGITUDE -COLUMN_NUMBER = 46 -DATA_TYPE = ASCII_REAL -START_BYTE = 437 -BYTES = 6 -FORMAT = "F6.2" -DESCRIPTION = "solar longitude ('L sub s') at time of image in degrees -from martian vernal equinox, as computed by the method in 'Accurate -analytic representations of solar time and seasons on Mars with -applications to the Pathfinder/Surveyor missions', Michael Allison, -Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = LOCAL_TIME -COLUMN_NUMBER = 47 -DATA_TYPE = ASCII_REAL -START_BYTE = 444 -BYTES = 5 -FORMAT = "F5.2" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = "Local True Solar Time in decimal hours from midnight at -the center of the image, as computed by the method in 'Accurate -analytic representations of solar time and seasons on Mars with -applications to the Pathfinder/Surveyor missions', Michael Allison, -Geophysical Reseach Letters 24, 16, pp 1967-1970 (August 15, 1997). -An 'hour' in this context is an angular measure of 15 degrees -of solar motion." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = IMAGE_SKEW_ANGLE -COLUMN_NUMBER = 48 -DATA_TYPE = ASCII_REAL -START_BYTE = 450 -BYTES = 5 -FORMAT = "F5.1" -NOT_APPLICABLE_CONSTANT = 0.0 -DESCRIPTION = -"The image skew angle is the absolute value, in degrees, of the angle -between the left edge (a line between the lower left and upper left -corners) and the bottom edge (a line between the lower left and lower -right corners) of the image, where the edges are projected on the -target body. For images whose footprints are exactly rectangular, -this angle will be 90 degrees. Departures from 90 degrees indicate a -non-rectangular image footprint, caused by slews of the spacecraft -during imaging outside the orbit plane or off-nadir pointing, or -both." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = RATIONALE_DESC -COLUMN_NUMBER = 49 -DATA_TYPE = CHARACTER -START_BYTE = 457 -BYTES = 80 -FORMAT = "A80" -DESCRIPTION = "A text description of the scientific purpose for the -acquisition of this image. For routine mapping operations, this will -most likely be the goal of the image as targeted (which may not be met -if the image missed its target significantly, the atmosphere was -cloudy, etc.)" -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = DATA_QUALITY_DESC -COLUMN_NUMBER = 50 -DATA_TYPE = CHARACTER -START_BYTE = 540 -BYTES = 6 -FORMAT = "A6" -DESCRIPTION = "'OK' if all fragments of the image are -received without detected checksum or sequence errors, and 'ERROR' -otherwise." -END_OBJECT = COLUMN - -OBJECT = COLUMN -NAME = ORBIT_NUMBER -COLUMN_NUMBER = 51 -DATA_TYPE = ASCII_INTEGER -START_BYTE = 548 -BYTES = 6 -FORMAT = "I6" -DESCRIPTION = "orbit number as defined by the MRO Project" -END_OBJECT = COLUMN - -END_OBJECT = TABLE - -END - diff --git a/inputs/hirise/RDRCUMINDEX.LBL b/inputs/hirise/RDRCUMINDEX.LBL deleted file mode 100644 index dd4f229..0000000 --- a/inputs/hirise/RDRCUMINDEX.LBL +++ /dev/null @@ -1,492 +0,0 @@ -PDS_VERSION_ID = PDS3 -RECORD_TYPE = FIXED_LENGTH -RECORD_BYTES = 821 -FILE_RECORDS = 142384 -^RDR_INDEX_TABLE = "RDRCUMINDEX.TAB" -OBJECT = RDR_INDEX_TABLE - INDEX_TYPE = SINGLE - INTERCHANGE_FORMAT = ASCII - ROWS = 142384 - ROW_BYTES = 821 - COLUMNS = 54 - OBJECT = COLUMN - NAME = VOLUME_ID - DATA_TYPE = CHARACTER - START_BYTE = 2 - BYTES = 10 - FORMAT = "A10" - DESCRIPTION = "Volume identification" - END_OBJECT - OBJECT = COLUMN - NAME = FILE_NAME_SPECIFICATION - DATA_TYPE = CHARACTER - START_BYTE = 15 - BYTES = 67 - FORMAT = "A67" - DESCRIPTION = "Path and file name of HiRISE RDR product" - END_OBJECT - OBJECT = COLUMN - NAME = INSTRUMENT_HOST_ID - DATA_TYPE = CHARACTER - START_BYTE = 85 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "Spacecraft hosting the HiRISE instrument, - always MRO" - END_OBJECT - OBJECT = COLUMN - NAME = INSTRUMENT_ID - DATA_TYPE = CHARACTER - START_BYTE = 91 - BYTES = 6 - FORMAT = "A6" - DESCRIPTION = "Instrument that acquired the observaiton, - always HIRISE" - END_OBJECT - OBJECT = COLUMN - NAME = OBSERVATION_ID - DATA_TYPE = CHARACTER - START_BYTE = 100 - BYTES = 15 - FORMAT = "A15" - DESCRIPTION = "Unique identification associated with - an observation. Up to 28 EDR products can be - associated with an observation." - END_OBJECT - OBJECT = COLUMN - NAME = PRODUCT_ID - DATA_TYPE = CHARACTER - START_BYTE = 118 - BYTES = 21 - FORMAT = "A21" - DESCRIPTION = "Unique identification associated with the product" - END_OBJECT - OBJECT = COLUMN - NAME = PRODUCT_VERSION_ID - DATA_TYPE = CHARACTER - START_BYTE = 142 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "Version number of this product" - END_OBJECT - OBJECT = COLUMN - NAME = TARGET_NAME - DATA_TYPE = CHARACTER - START_BYTE = 148 - BYTES = 32 - FORMAT = "A32" - DESCRIPTION = "Target Name of the observation" - END_OBJECT - OBJECT = COLUMN - NAME = ORBIT_NUMBER - DATA_TYPE = ASCII_INTEGER - START_BYTE = 182 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Orbit number from start of mission" - END_OBJECT - OBJECT = COLUMN - NAME = MISSION_PHASE_NAME - DATA_TYPE = CHARACTER - START_BYTE = 190 - BYTES = 30 - FORMAT = "A30" - DESCRIPTION = "Mission Phase at time of observation, such - as Primary Science Phase" - END_OBJECT - OBJECT = COLUMN - NAME = RATIONALE_DESC - DATA_TYPE = CHARACTER - START_BYTE = 223 - BYTES = 75 - FORMAT = "A75" - DESCRIPTION = "Informational note about the observation" - END_OBJECT - OBJECT = COLUMN - NAME = OBSERVATION_START_TIME - DATA_TYPE = TIME - START_BYTE = 301 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when HiRISE started the - imaging sequence" - END_OBJECT - OBJECT = COLUMN - NAME = OBSERVATION_START_COUNT - DATA_TYPE = CHARACTER - START_BYTE = 328 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "Spacecraft clock count when HiRISE started - the imaging sequence" - END_OBJECT - OBJECT = COLUMN - NAME = START_TIME - DATA_TYPE = TIME - START_BYTE = 347 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when first image line of target was - acquired" - END_OBJECT - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_START_COUNT - DATA_TYPE = CHARACTER - START_BYTE = 374 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "Spacecraft clock count when first image line of - target was acquired" - END_OBJECT - OBJECT = COLUMN - NAME = STOP_TIME - DATA_TYPE = TIME - START_BYTE = 393 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when last image line of target was - acquired" - END_OBJECT - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_STOP_COUNT - DATA_TYPE = CHARACTER - START_BYTE = 420 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "Spacecraft clock count when last image line of - target was acquired" - END_OBJECT - OBJECT = COLUMN - NAME = IMAGE_LINES - DATA_TYPE = ASCII_INTEGER - START_BYTE = 438 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Number of image lines" - END_OBJECT - OBJECT = COLUMN - NAME = LINE_SAMPLES - DATA_TYPE = ASCII_INTEGER - START_BYTE = 445 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Number of line samples" - END_OBJECT - OBJECT = COLUMN - NAME = EMISSION_ANGLE - DATA_TYPE = ASCII_REAL - START_BYTE = 452 - BYTES = 8 - FORMAT = "F8.5" - DESCRIPTION = "The emission angle at the center of the - observation" - END_OBJECT - OBJECT = COLUMN - NAME = INCIDENCE_ANGLE - DATA_TYPE = ASCII_REAL - START_BYTE = 461 - BYTES = 7 - FORMAT = "F7.4" - DESCRIPTION = "The incidence angle at the center of the - observation" - END_OBJECT - OBJECT = COLUMN - NAME = PHASE_ANGLE - DATA_TYPE = ASCII_REAL - START_BYTE = 469 - BYTES = 8 - FORMAT = "F7.4" - DESCRIPTION = "The phase angle at the center of the observation" - END_OBJECT - OBJECT = COLUMN - NAME = SPACECRAFT_ALTITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 478 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "The areodetic altitude of the center of the - observation in kilometers. This field represents the - center altitude for the observation on the MRO - ellipsoid reference." - END_OBJECT - OBJECT = COLUMN - NAME = TARGET_CENTER_DISTANCE - DATA_TYPE = ASCII_REAL - START_BYTE = 487 - BYTES = 7 - FORMAT = "F7.2" - DESCRIPTION = "The distance from the spacecraft to the target - body's center in kilometers" - END_OBJECT - OBJECT = COLUMN - NAME = SLANT_DISTANCE - DATA_TYPE = ASCII_REAL - START_BYTE = 495 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "The distance from the spacecraft to the - intersection of the view vector with the target - body in kilometers" - END_OBJECT - OBJECT = COLUMN - NAME = NORTH_AZIMUTH - DATA_TYPE = ASCII_REAL - START_BYTE = 504 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The angle in degrees clockwise from the reference - axis of the observation (a line from the center to - the right edge of the observation) to the direction - to the north pole of the target body." - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SOLAR_AZIMUTH - DATA_TYPE = ASCII_REAL - START_BYTE = 515 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The angel in degrees clockwise from the reference - axis of the observation (a line from the center to - the right edge of the observation) to the direction - to the sub-solar point on the target body." - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SOLAR_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 526 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The planetocentric latitude of the sub-solar point - in degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SOLAR_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 537 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The east longitude of the sub-solar point in - degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 548 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The planetocentric latitude of the sub-spacecraft - point in degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 559 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "The planetocentric longitude of the sub-spacecraft - point in degrees" - END_OBJECT - OBJECT = COLUMN - NAME = SOLAR_DISTANCE - DATA_TYPE = ASCII_REAL - START_BYTE = 570 - BYTES = 10 - FORMAT = "F10.5" - DESCRIPTION = "The distance from the center of the image on the - target body to the center of the Sun in AU" - END_OBJECT - OBJECT = COLUMN - NAME = SOLAR_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 581 - BYTES = 10 - FORMAT = "F10.3" - DESCRIPTION = "The solar longitude ('L sub S') at the time of - image acquisition in the degrees from the Martian - vernal equinox" - END_OBJECT - OBJECT = COLUMN - NAME = LOCAL_TIME - DATA_TYPE = ASCII_REAL - START_BYTE = 592 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Local Solar Time in decimal hours from midnight at - the center of the observation" - END_OBJECT - OBJECT = COLUMN - NAME = STEREO_FLAG - DATA_TYPE = CHARACTER - START_BYTE = 604 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "Indicates whether this product was intended to be - part of a stereo pair. (YES or NO)." - END_OBJECT - OBJECT = COLUMN - NAME = MINIMUM_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 609 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Minimum latitude of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = MAXIMUM_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 620 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Maximum latitude of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = MINIMUM_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 631 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Minimum longitude of the projected image." - END_OBJECT - OBJECT = COLUMN - NAME = MAXIMUM_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 642 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Maximum longitude of projected image" - END_OBJECT - OBJECT = COLUMN - NAME = MAP_SCALE - DATA_TYPE = ASCII_REAL - START_BYTE = 653 - BYTES = 5 - FORMAT = "F5.2" - DESCRIPTION = "Map scale in meters per pixel" - END_OBJECT - OBJECT = COLUMN - NAME = MAP_RESOLUTION - DATA_TYPE = ASCII_REAL - START_BYTE = 659 - BYTES = 10 - FORMAT = "F10.3" - DESCRIPTION = "Map resolution in pixels per degree" - END_OBJECT - OBJECT = COLUMN - NAME = MAP_PROJECTION_TYPE - DATA_TYPE = CHARACTER - START_BYTE = 671 - BYTES = 19 - FORMAT = "A19" - DESCRIPTION = "EQUIRECTANGULAR or POLAR STEREOGRAPHIC" - END_OBJECT - OBJECT = COLUMN - NAME = PROJECTION_CENTER_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 692 - BYTES = 5 - FORMAT = "F5.1" - DESCRIPTION = "Center latitude of the map projection. This does - not necessarily equal the center latitude of the - image." - END_OBJECT - OBJECT = COLUMN - NAME = PROJECTION_CENTER_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 698 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "Center longitude of the map projection. This does - not necessarily equal the center longitude of the - image." - END_OBJECT - OBJECT = COLUMN - NAME = LINE_PROJECTION_OFFSET - DATA_TYPE = ASCII_REAL - START_BYTE = 707 - BYTES = 12 - FORMAT = "F12.1" - DESCRIPTION = "The line_projection_offset element provides the - line offset value of the map projection origin - position from the line and sample 1,1 (line and - sample 1,1 is considered the upper left corner of - the digital array)." - END_OBJECT - OBJECT = COLUMN - NAME = SAMPLE_PROJECTION_OFFSET - DATA_TYPE = ASCII_REAL - START_BYTE = 720 - BYTES = 12 - FORMAT = "F12.1" - DESCRIPTION = "The sample_projection_offset element provides the - sample offset value of the map projection origin - position from line and sample 1,1 (line and sample - 1,1 is considered the upper left corner of the - digital array). Note: that the positive direction - is to the right and down." - END_OBJECT - OBJECT = COLUMN - NAME = CORNER1_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 733 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 1 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER1_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 744 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 1 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER2_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 755 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 2 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER2_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 766 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 2 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER3_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 777 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 3 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER3_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 788 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 3 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER4_LATITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 799 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Latitude of corner 4 of the projected image" - END_OBJECT - OBJECT = COLUMN - NAME = CORNER4_LONGITUDE - DATA_TYPE = ASCII_REAL - START_BYTE = 810 - BYTES = 10 - FORMAT = "F10.4" - DESCRIPTION = "Longitude of corner 4 of the projected image" - END_OBJECT -END_OBJECT -END diff --git a/inputs/lroc/CUMINDEX.LBL b/inputs/lroc/CUMINDEX.LBL deleted file mode 100644 index 40b8abd..0000000 --- a/inputs/lroc/CUMINDEX.LBL +++ /dev/null @@ -1,980 +0,0 @@ -PDS_VERSION_ID = PDS3 - -^INDEX_TABLE = "CUMINDEX.TAB" - -RECORD_TYPE = FIXED_LENGTH -RECORD_BYTES = 902 -FILE_RECORDS = 3173863 -MD5_CHECKSUM = "1d07f6e60bfe5fc89eac6b940ff16fd8" -DATA_SET_ID = "LRO-L-LROC-3-CDR-V1.0" -SPACECRAFT_NAME = "LUNAR RECONNAISSANCE ORBITER" -INSTRUMENT_NAME = "LUNAR RECONNAISSANCE ORBITER CAMERA" -TARGET_NAME = "MOON" -MISSION_PHASE_NAME = {"COMMISSIONING", - "NOMINAL MISSION", - "SCIENCE MISSION", - "EXTENDED SCIENCE MISSION", - "SECOND EXTENDED SCIENCE MISSION", - "THIRD EXTENDED SCIENCE MISSION", - "FOURTH EXTENDED SCIENCE MISSION"} -PRODUCT_CREATION_TIME = 2022-02-08T19:19:13 - -OBJECT = INDEX_TABLE - NAME = CDR_CATALOG_INDEX - INTERCHANGE_FORMAT = ASCII - ROWS = 3173863 - COLUMNS = 83 - ROW_BYTES = 902 - INDEX_TYPE = CUMULATIVE - - OBJECT = COLUMN - NAME = VOLUME_ID - COLUMN_NUMBER = 1 - DATA_TYPE = CHARACTER - START_BYTE = 2 - BYTES = 12 - FORMAT = "A12" - DESCRIPTION = "Volume id." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = FILE_SPECIFICATION_NAME - COLUMN_NUMBER = 2 - DATA_TYPE = CHARACTER - START_BYTE = 17 - BYTES = 75 - FORMAT = "A75" - DESCRIPTION = "Provides the full name of a file, including a path name, - relative to a PDS volume. The path is followed by a valid file name." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INSTRUMENT_HOST_ID - COLUMN_NUMBER = 3 - DATA_TYPE = CHARACTER - START_BYTE = 95 - BYTES = 3 - FORMAT = "A3" - DESCRIPTION = "ALWAYS LRO." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INSTRUMENT_ID - COLUMN_NUMBER = 4 - DATA_TYPE = CHARACTER - START_BYTE = 101 - BYTES = 4 - FORMAT = "A4" - DESCRIPTION = "Always LROC." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = ORIGINAL_PRODUCT_ID - COLUMN_NUMBER = 5 - DATA_TYPE = CHARACTER - START_BYTE = 108 - BYTES = 12 - FORMAT = "A12" - DESCRIPTION = "Filename of this image as received from the LRO MOC. For - NAC observations, the filename is either nacl00000000 or nacr00000000 - (NAC-LEFT or NAC-RIGHT respectively). For WAC observations, the filename is - wac00000000." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = PRODUCT_ID - COLUMN_NUMBER = 6 - DATA_TYPE = CHARACTER - START_BYTE = 123 - BYTES = 13 - FORMAT = "A13" - DESCRIPTION = "Unique identification associated with the product." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = PRODUCT_VERSION_ID - COLUMN_NUMBER = 7 - DATA_TYPE = CHARACTER - START_BYTE = 139 - BYTES = 12 - FORMAT = "A12" - DESCRIPTION = "The product version number of this product." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = TARGET_NAME - COLUMN_NUMBER = 8 - DATA_TYPE = CHARACTER - START_BYTE = 154 - BYTES = 5 - FORMAT = "A5" - DESCRIPTION = "Set to the target body: MOON for any nominal lunar - imaging, EARTH for any observations of the Earth, CAL calibration images, and - STAR for star calibration images." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = ORBIT_NUMBER - COLUMN_NUMBER = 9 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 161 - BYTES = 5 - FORMAT = "I5" - DESCRIPTION = "LRO orbit number when observation was acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SLEW_ANGLE - COLUMN_NUMBER = 10 - DATA_TYPE = ASCII_REAL - START_BYTE = 167 - BYTES = 8 - FORMAT = "F8.3" - DESCRIPTION = "Angle of LRO off nadir when observation acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = MISSION_PHASE_NAME - COLUMN_NUMBER = 11 - DATA_TYPE = CHARACTER - START_BYTE = 177 - BYTES = 31 - FORMAT = "A31" - DESCRIPTION = "The mission phase at the time the image was acquired - - LAUNCH, EARLY CRUISE, MID CRUISE, LATE CRUISE, LUNAR ORBIT ACQUISITION, - COMMISSIONING, NOMINAL MISSION, SCIENCE MISSION EXTENDED SCIENCE MISSION & - SECOND EXTENDED SCIENCE MISSION." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = RATIONALE_DESC - COLUMN_NUMBER = 12 - DATA_TYPE = CHARACTER - START_BYTE = 211 - BYTES = 75 - FORMAT = "A75" - DESCRIPTION = "For NAC observations, set to one of the following: the - keywords recorded in the REACT ROI, the appropriate NAC campaign, or set to - the string TARGET OF OPPORTUNITY. For WAC observations, set to either the - appropriate campaign or GLOBAL_COVERAGE." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = DATA_QUALITY_ID - COLUMN_NUMBER = 13 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 288 - BYTES = 3 - FORMAT = "I3" - DESCRIPTION = "Set to an 8-bit value that encodes data quality - information; the numeric key identifies the quality of data." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_PREROLL_START_TIME - COLUMN_NUMBER = 14 - DATA_TYPE = CHARACTER - START_BYTE = 293 - BYTES = 24 - FORMAT = "A24" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "UTC time when image command begins." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = START_TIME - COLUMN_NUMBER = 15 - DATA_TYPE = CHARACTER - START_BYTE = 320 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when first image line of target is acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = STOP_TIME - COLUMN_NUMBER = 16 - DATA_TYPE = CHARACTER - START_BYTE = 347 - BYTES = 24 - FORMAT = "A24" - DESCRIPTION = "UTC time when last image line of target is acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_PARTITION - COLUMN_NUMBER = 17 - DATA_TYPE = CHARACTER - START_BYTE = 374 - BYTES = 2 - FORMAT = "A2" - DESCRIPTION = "Spacecraft clock partition." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_SPACECRAFT_CLOCK_PREROLL_COUNT - COLUMN_NUMBER = 18 - DATA_TYPE = CHARACTER - START_BYTE = 379 - BYTES = 15 - FORMAT = "A15" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "S/C clock count when the observation first line of the - preroll (1024 lines) is acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_START_COUNT - COLUMN_NUMBER = 19 - DATA_TYPE = CHARACTER - START_BYTE = 397 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "S/C clock count when first image line/frame of target is - acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_CLOCK_STOP_COUNT - COLUMN_NUMBER = 20 - DATA_TYPE = CHARACTER - START_BYTE = 416 - BYTES = 16 - FORMAT = "A16" - DESCRIPTION = "S/C clock count when last image line/frame of target is - acquired." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = START_SCLK_SECONDS - COLUMN_NUMBER = 21 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 434 - BYTES = 9 - FORMAT = "I9" - DESCRIPTION = "The spacecraft SCLK seconds value at the start of a NAC - or WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = START_SCLK_TICKS - COLUMN_NUMBER = 22 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 444 - BYTES = 7 - FORMAT = "I7" - DESCRIPTION = "The spacecraft SCLK ticks value at the start of a NAC or - WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = STOP_SCLK_SECONDS - COLUMN_NUMBER = 23 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 452 - BYTES = 9 - FORMAT = "I9" - DESCRIPTION = "The spacecraft SCLK seconds value at the end of a NAC or - WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = STOP_SCLK_TICKS - COLUMN_NUMBER = 24 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 462 - BYTES = 7 - FORMAT = "I7" - DESCRIPTION = "The spacecraft SCLK ticks value at the end of a NAC or - WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_LINE_EXPOSURE_DURATION - COLUMN_NUMBER = 25 - DATA_TYPE = ASCII_REAL - START_BYTE = 470 - BYTES = 11 - FORMAT = "F11.9" - NOT_APPLICABLE_CONSTANT = 9.999999999 - DESCRIPTION = "Indicates the elapsed time during the acquistion of one - line; can have values between 337.6 and 35,281.6 microseconds, in 128/15 - microsecond increments." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_EXPOSURE_DURATION - COLUMN_NUMBER = 26 - DATA_TYPE = ASCII_REAL - START_BYTE = 482 - BYTES = 7 - FORMAT = "F7.5" - NOT_APPLICABLE_CONSTANT = 9.99999 - DESCRIPTION = "Indicates the time elapsed during the acquisition of one - frame of data for the WAC." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_FRAME_ID - COLUMN_NUMBER = 27 - DATA_TYPE = CHARACTER - START_BYTE = 491 - BYTES = 5 - FORMAT = "A5" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "Denotes LEFT or RIGHT barrel (telescope) for NAC - observations." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_DAC_RESET - COLUMN_NUMBER = 28 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 498 - BYTES = 4 - FORMAT = "I4" - NOT_APPLICABLE_CONSTANT = 9999 - DESCRIPTION = "Records the commanded DAC reset level that coarsely sets - the DN zero level for a NAC image." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_CHANNEL_A_OFFSET - COLUMN_NUMBER = 29 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 503 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded NAC channel A offset that finely - sets the DN zero level." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_CHANNEL_B_OFFSET - COLUMN_NUMBER = 30 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 507 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded NAC channel B offset that finely - sets the DN zero level." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INSTRUMENT_MODE_CODE - COLUMN_NUMBER = 31 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 511 - BYTES = 3 - FORMAT = "I3" - DESCRIPTION = "The commanded 8-bit integer value indicating in what - mode the NAC or WAC operates during image acquisition." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_INSTRUMENT_MODE_ID - COLUMN_NUMBER = 32 - DATA_TYPE = CHARACTER - START_BYTE = 516 - BYTES = 5 - FORMAT = "A5" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "provides an instrument-dependent designation of WAC - operating mode: BW, COLOR, VIS, or UV." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BAND_CODE - COLUMN_NUMBER = 33 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 523 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "The commanded 8-bit integer value specifying which WAC - bands to acquire for each frame." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BACKGROUND_OFFSET - COLUMN_NUMBER = 34 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 527 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded background offset for WAC - observations." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_FILTER_NAME - COLUMN_NUMBER = 35 - DATA_TYPE = CHARACTER - START_BYTE = 532 - BYTES = 38 - FORMAT = "A38" - NOT_APPLICABLE_CONSTANT = "N/A" - DESCRIPTION = "Numerical designation of the WAC optical filters in - nanometers (415, 566, 604, 643, 689, 321, 360)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_NUMBER_OF_FRAMES - COLUMN_NUMBER = 36 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 572 - BYTES = 5 - FORMAT = "I5" - NOT_APPLICABLE_CONSTANT = 99999 - DESCRIPTION = "Records the commanded number of frames for a WAC - observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_INTERFRAME_TIME - COLUMN_NUMBER = 37 - DATA_TYPE = ASCII_REAL - START_BYTE = 578 - BYTES = 7 - FORMAT = "F7.2" - NOT_APPLICABLE_CONSTANT = 9999.99 - DESCRIPTION = "Set to the value of the interframe delay between WAC - framelets. Keyword can have values between 25/64 and 280/64 seconds, in 1/64 - seconds increments." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_INTERFRAME_CODE - COLUMN_NUMBER = 38 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 586 - BYTES = 3 - FORMAT = "I3" - NOT_APPLICABLE_CONSTANT = 999 - DESCRIPTION = "Records the commanded interframe gap code - (INTERFRAME_TIME) for a WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_MODE_POLAR - COLUMN_NUMBER = 39 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 590 - BYTES = 1 - FORMAT = "I1" - NOT_APPLICABLE_CONSTANT = 9 - DESCRIPTION = "Records the commanded mode for the POLAR flag on WAC - observation (0 = NOT ON and 1 = ON)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = COMPAND_SELECT_CODE - COLUMN_NUMBER = 40 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 592 - BYTES = 1 - FORMAT = "I1" - DESCRIPTION = "Records the commanded value designating which companding - table to utilize for WAC or NAC observations." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = MODE_COMPRESSION - COLUMN_NUMBER = 41 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 594 - BYTES = 1 - FORMAT = "I1" - DESCRIPTION = "Records the command flag controlling if compression is - enabled or disabled for a WAC or NAC observation (0=NO, 1=YES)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = MODE_TEST - COLUMN_NUMBER = 42 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 596 - BYTES = 1 - FORMAT = "I1" - DESCRIPTION = "Records the commanded flag controlling if a TEST image - is to be acquired (0=NO, 1=YES)." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_SCS - COLUMN_NUMBER = 43 - DATA_TYPE = ASCII_REAL - START_BYTE = 598 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC SCS in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_FPA - COLUMN_NUMBER = 44 - DATA_TYPE = ASCII_REAL - START_BYTE = 607 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of NAC focal plane array in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_FPGA - COLUMN_NUMBER = 45 - DATA_TYPE = ASCII_REAL - START_BYTE = 616 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of NAC Field Programmable Gate Array in - degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NAC_TEMPERATURE_TELESCOPE - COLUMN_NUMBER = 46 - DATA_TYPE = ASCII_REAL - START_BYTE = 625 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of NAC Telescope in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BEGIN_TEMPERATURE_SCS - COLUMN_NUMBER = 47 - DATA_TYPE = ASCII_REAL - START_BYTE = 634 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC SCS at the beginning of a WAC - observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_MIDDLE_TEMPERATURE_SCS - COLUMN_NUMBER = 48 - DATA_TYPE = ASCII_REAL - START_BYTE = 643 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC Sequencer and Compression System at - the middle of a WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_END_TEMPERATURE_SCS - COLUMN_NUMBER = 49 - DATA_TYPE = ASCII_REAL - START_BYTE = 652 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of LROC Sequencer and Compression System at - the end of a WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_BEGIN_TEMPERATURE_FPA - COLUMN_NUMBER = 50 - DATA_TYPE = ASCII_REAL - START_BYTE = 661 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of WAC focal plane array at the beginning of - a WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_MIDDLE_TEMPERATURE_FPA - COLUMN_NUMBER = 51 - DATA_TYPE = ASCII_REAL - START_BYTE = 670 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of WAC focal plane array at the middle of a - WAC observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = WAC_END_TEMPERATURE_FPA - COLUMN_NUMBER = 52 - DATA_TYPE = ASCII_REAL - START_BYTE = 679 - BYTES = 8 - FORMAT = "F8.3" - NOT_APPLICABLE_CONSTANT = 9999.999 - DESCRIPTION = "Temperature of WAC focal plane array at the end of a WAC - observation in degrees C." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = IMAGE_LINES - COLUMN_NUMBER = 53 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 688 - BYTES = 6 - FORMAT = "I6" - DESCRIPTION = "Number of image lines." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LINE_SAMPLES - COLUMN_NUMBER = 54 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 695 - BYTES = 4 - FORMAT = "I4" - DESCRIPTION = "Number of image samples." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SAMPLE_BITS - COLUMN_NUMBER = 55 - DATA_TYPE = ASCII_INTEGER - START_BYTE = 700 - BYTES = 2 - FORMAT = "I2" - DESCRIPTION = "Number of bits per pixel." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SCALED_PIXEL_WIDTH - COLUMN_NUMBER = 56 - DATA_TYPE = ASCII_REAL - START_BYTE = 703 - BYTES = 7 - FORMAT = "F7.2" - NOT_APPLICABLE_CONSTANT = 0000.00 - DESCRIPTION = "The cross-scan image resolution in meters/pixel at the - center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SCALED_PIXEL_HEIGHT - COLUMN_NUMBER = 57 - DATA_TYPE = ASCII_REAL - START_BYTE = 711 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 000.00 - DESCRIPTION = "The down-scan image resolution in meters/pixel at the - center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = RESOLUTION - COLUMN_NUMBER = 58 - DATA_TYPE = ASCII_REAL - START_BYTE = 718 - BYTES = 7 - FORMAT = "F7.3" - NOT_APPLICABLE_CONSTANT = 0000.00 - DESCRIPTION = "The calculated pixel resolution at the center of a NAC - or WAC observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = EMISSION_ANGLE - COLUMN_NUMBER = 59 - DATA_TYPE = ASCII_REAL - START_BYTE = 726 - BYTES = 5 - FORMAT = "F5.2" - NOT_APPLICABLE_CONSTANT = 99.99 - DESCRIPTION = "The emission angle at the center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = INCIDENCE_ANGLE - COLUMN_NUMBER = 60 - DATA_TYPE = ASCII_REAL - START_BYTE = 732 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The incidence angle at the center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = PHASE_ANGLE - COLUMN_NUMBER = 61 - DATA_TYPE = ASCII_REAL - START_BYTE = 739 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The phase angle at the center of the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = NORTH_AZIMUTH - COLUMN_NUMBER = 62 - DATA_TYPE = ASCII_REAL - START_BYTE = 746 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The angle in degrees clockwise from the reference axis - of the image (a line from the center to the right edge of image) to the - direction to the north pole of target body This angle is relative to the RDR - products." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SOLAR_AZIMUTH - COLUMN_NUMBER = 63 - DATA_TYPE = ASCII_REAL - START_BYTE = 753 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The angle in degrees clockwise from the reference axis - of the image (a line from the center to the right edge of image) to the - direction of the subsolar point on target body. This angle is relative to the - RDR products." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SOLAR_LATITUDE - COLUMN_NUMBER = 64 - DATA_TYPE = ASCII_REAL - START_BYTE = 760 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Latitude of subsolar point in degrees." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SOLAR_LONGITUDE - COLUMN_NUMBER = 65 - DATA_TYPE = ASCII_REAL - START_BYTE = 767 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The planetocentric longitude of subsolar point in - degrees." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LATITUDE - COLUMN_NUMBER = 66 - DATA_TYPE = ASCII_REAL - START_BYTE = 774 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Planetocentric latitude of subspacecraft point in - degrees." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SUB_SPACECRAFT_LONGITUDE - COLUMN_NUMBER = 67 - DATA_TYPE = ASCII_REAL - START_BYTE = 781 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Planetocentric longitude of spacecraft-to-target-center - surface intercept vector." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SOLAR_DISTANCE - COLUMN_NUMBER = 68 - DATA_TYPE = ASCII_REAL - START_BYTE = 788 - BYTES = 11 - FORMAT = "F11.1" - NOT_APPLICABLE_CONSTANT = 999999999.9 - DESCRIPTION = "distance from the center of the image on the target body - to the center of the sun in km." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SOLAR_LONGITUDE - COLUMN_NUMBER = 69 - DATA_TYPE = ASCII_REAL - START_BYTE = 800 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Solar longitude ('L sub s') at time of image in degrees - provides the value of the angle between the body_Sun line at the time of - interest and the body_Sun line at the vernal equinox." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = CENTER_LATITUDE - COLUMN_NUMBER = 70 - DATA_TYPE = ASCII_REAL - START_BYTE = 807 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The planetocentric latitude coordinate at the center of - the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = CENTER_LONGITUDE - COLUMN_NUMBER = 71 - DATA_TYPE = ASCII_REAL - START_BYTE = 814 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "The planetocentric longitude coordinate at the center of - the observation." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_RIGHT_LATITUDE - COLUMN_NUMBER = 72 - DATA_TYPE = ASCII_REAL - START_BYTE = 821 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper right latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_RIGHT_LONGITUDE - COLUMN_NUMBER = 73 - DATA_TYPE = ASCII_REAL - START_BYTE = 828 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper right longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_RIGHT_LATITUDE - COLUMN_NUMBER = 74 - DATA_TYPE = ASCII_REAL - START_BYTE = 835 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Lower right latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_RIGHT_LONGITUDE - COLUMN_NUMBER = 75 - DATA_TYPE = ASCII_REAL - START_BYTE = 842 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "lower right longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_LEFT_LATITUDE - COLUMN_NUMBER = 76 - DATA_TYPE = ASCII_REAL - START_BYTE = 849 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "lower left latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LOWER_LEFT_LONGITUDE - COLUMN_NUMBER = 77 - DATA_TYPE = ASCII_REAL - START_BYTE = 856 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "lower left longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_LEFT_LATITUDE - COLUMN_NUMBER = 78 - DATA_TYPE = ASCII_REAL - START_BYTE = 863 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper left latitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = UPPER_LEFT_LONGITUDE - COLUMN_NUMBER = 79 - DATA_TYPE = ASCII_REAL - START_BYTE = 870 - BYTES = 6 - FORMAT = "F6.2" - NOT_APPLICABLE_CONSTANT = 999.99 - DESCRIPTION = "Upper left longitude." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = SPACECRAFT_ALTITUDE - COLUMN_NUMBER = 80 - DATA_TYPE = ASCII_REAL - START_BYTE = 877 - BYTES = 7 - FORMAT = "F7.2" - DESCRIPTION = "distance from s/c to closest point on surface in km." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = TARGET_CENTER_DISTANCE - COLUMN_NUMBER = 81 - DATA_TYPE = ASCII_REAL - START_BYTE = 885 - BYTES = 7 - FORMAT = "F7.2" - NOT_APPLICABLE_CONSTANT = 9999.99 - DESCRIPTION = "distance from s/c to target body center in km." - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = ORBIT_NODE - COLUMN_NUMBER = 82 - DATA_TYPE = CHARACTER - START_BYTE = 894 - BYTES = 1 - FORMAT = "A1" - DESCRIPTION = "A character denoting the orbit node for LRO: A for - ascending node portion of the orbit; D for descending node portion of the - orbit" - END_OBJECT = COLUMN - - OBJECT = COLUMN - NAME = LRO_FLIGHT_DIRECTION - COLUMN_NUMBER = 83 - DATA_TYPE = CHARACTER - START_BYTE = 898 - BYTES = 2 - FORMAT = "A2" - DESCRIPTION = "Denotes the LRO spacecraft X-axis relative to the - velocity vector: +X (LRO positive X axis aligned with velocity vector) or -X - (LRO negative X axis aligned with velocity vector)." - END_OBJECT = COLUMN - -END_OBJECT = INDEX_TABLE -END diff --git a/inputs/lroc/README.md b/inputs/lroc/README.md deleted file mode 100644 index bd67023..0000000 --- a/inputs/lroc/README.md +++ /dev/null @@ -1 +0,0 @@ -selected_withsun_250 is the set we've chosen to train LROCNet diff --git a/inputs/lroc/selected_withsun_250.txt b/inputs/lroc/selected_withsun_250.txt deleted file mode 100644 index 81bb23f..0000000 --- a/inputs/lroc/selected_withsun_250.txt +++ /dev/null @@ -1,250 +0,0 @@ - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011109/NAC/M157867349LC.IMG, 114.16 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012085/NAC/M187283366RC.IMG, 263.04 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018162/NAC/M1283315639LC.IMG, 181.5 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011137/NAC/M160230711LC.IMG, 170.3 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018222/NAC/M1288515956LC.IMG, 194.4 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014002/NAC/M1143268080LC.IMG, 183.43 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019229/NAC/M1320651006LC.IMG, 190.67 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021272/NAC/M1387521874LC.IMG, 236.19 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046C/DATA/ESM4/2021047/NAC/M1368146827LC.IMG, 192.85 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013098/NAC/M1120065717LC.IMG, 223.42 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049A/DATA/ESM4/2021264/NAC/M1386823270LC.IMG, 124.19 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010027/NAC/M119217559LC.IMG, 166.05 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018144/NAC/M1281817404LC.IMG, 226.34 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013002/NAC/M1111784848LC.IMG, 191.14 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009232/NAC/M105422456RC.IMG, 140.03 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012132/NAC/M191388799RC.IMG, 157.0 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1029/DATA/ESM3/2016286/NAC/M1230942106RC.IMG, 192.21 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016351/NAC/M1236535574RC.IMG, 173.68 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012021/NAC/M181748683LC.IMG, 185.15 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014091/NAC/M1150953976RC.IMG, 219.18 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1043A/DATA/ESM4/2020104/NAC/M1341449002RC.IMG, 224.61 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2021007/NAC/M1364627721LC.IMG, 180.46 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015043/NAC/M1178388248LC.IMG, 137.91 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012065/NAC/M185627657LC.IMG, 255.2 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015286/NAC/M1199352117RC.IMG, 186.96 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010310/NAC/M143668575RC.IMG, 129.73 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010288/NAC/M141812337RC.IMG, 250.03 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040A/DATA/ESM3/2019190/NAC/M1317353913RC.IMG, 210.52 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016085/NAC/M1213514982RC.IMG, 218.73 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012197/NAC/M1097014591RC.IMG, 201.23 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013086/NAC/M1118983285RC.IMG, 178.49 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1042C/DATA/ESM4/2020063/NAC/M1337869268RC.IMG, 185.32 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012166/NAC/M194274337LC.IMG, 183.77 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014028/NAC/M1145560677RC.IMG, 147.72 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1004/DATA/MAP/2010242/NAC/M137828075RC.IMG, 205.47 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1003/DATA/MAP/2010113/NAC/M126658607LC.IMG, 114.9 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014317/NAC/M1170504189RC.IMG, 183.42 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009330/NAC/M113855094RC.IMG, 212.93 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2019009/NAC/M1301694193RC.IMG, 198.91 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1043C/DATA/ESM4/2020157/NAC/M1345968488RC.IMG, 231.51 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2019013/NAC/M1302053560LC.IMG, 134.55 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017297/NAC/M1263444692RC.IMG, 186.13 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013049/NAC/M1115790663RC.IMG, 223.11 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013055/NAC/M1116344562LC.IMG, 221.14 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1045A/DATA/ESM4/2020284/NAC/M1356952094RC.IMG, 126.91 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2018357/NAC/M1300204103RC.IMG, 109.63 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016145/NAC/M1218731765RC.IMG, 174.79 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017276/NAC/M1261669033RC.IMG, 183.13 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015159/NAC/M1188367685RC.IMG, 195.95 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1047A/DATA/ESM4/2021097/NAC/M1372406643LC.IMG, 225.84 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015077/NAC/M1181351902LC.IMG, 146.69 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038C/DATA/ESM3/2019068/NAC/M1306735346LC.IMG, 176.25 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010028/NAC/M119333256LC.IMG, 173.97 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014037/NAC/M1146351355LC.IMG, 238.07 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011269/NAC/M171679982RC.IMG, 88.25 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011130/NAC/M159705621LC.IMG, 152.77 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013145/NAC/M1124109230RC.IMG, 186.69 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011292/NAC/M173628160LC.IMG, 241.82 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038A/DATA/ESM3/2018365/NAC/M1300919612RC.IMG, 255.12 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049B/DATA/ESM4/2021299/NAC/M1389874553LC.IMG, 171.76 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013045/NAC/M1115484343LC.IMG, 144.06 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011211/NAC/M166650072LC.IMG, 192.63 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020226/NAC/M1351980801RC.IMG, 181.82 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010332/NAC/M145562210RC.IMG, 157.32 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/COM/2009254/NAC/M107280100RC.IMG, 117.67 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2020355/NAC/M1363072772RC.IMG, 169.9 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017218/NAC/M1256619715RC.IMG, 243.49 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017191/NAC/M1254353429RC.IMG, 258.48 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2012008/NAC/M180665045RC.IMG, 170.43 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015049/NAC/M1178857143RC.IMG, 99.0 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1039A/DATA/ESM3/2019097/NAC/M1309301489RC.IMG, 176.47 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1037A/DATA/ESM3/2018282/NAC/M1293684206RC.IMG, 190.9 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1047A/DATA/ESM4/2021092/NAC/M1371988769RC.IMG, 163.85 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013023/NAC/M1113602997LC.IMG, 202.74 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1042A/DATA/ESM4/2020011/NAC/M1333378527LC.IMG, 156.63 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011079/NAC/M155294851LC.IMG, 130.59 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1017/DATA/ESM/2013261/NAC/M1134174410LC.IMG, 122.55 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018082/NAC/M1276443848LC.IMG, 185.39 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010317/NAC/M144301684RC.IMG, 212.48 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016356/NAC/M1236972914RC.IMG, 231.88 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1043A/DATA/ESM4/2020093/NAC/M1340465807LC.IMG, 155.98 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1029/DATA/ESM3/2016279/NAC/M1230283567RC.IMG, 181.37 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1006/DATA/SCI/2011001/NAC/M148563970RC.IMG, 181.64 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2017044/NAC/M1241599004RC.IMG, 214.24 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014326/NAC/M1171331043RC.IMG, 183.09 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1045B/DATA/ESM4/2020318/NAC/M1359940202RC.IMG, 107.29 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011326/NAC/M176629149LC.IMG, 168.01 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015024/NAC/M1176698032RC.IMG, 234.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012136/NAC/M191761375RC.IMG, 148.19 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016140/NAC/M1218323758RC.IMG, 175.12 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009348/NAC/M115441101LC.IMG, 171.82 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1004/DATA/MAP/2010207/NAC/M134762799RC.IMG, 155.59 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011223/NAC/M167742182LC.IMG, 220.1 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015184/NAC/M1190546146RC.IMG, 222.18 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014222/NAC/M1162333140LC.IMG, 244.76 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1006/DATA/SCI/2011033/NAC/M151288162RC.IMG, 175.07 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1031/DATA/ESM3/2017150/NAC/M1250782383LC.IMG, 139.38 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013105/NAC/M1120643720LC.IMG, 123.85 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1048B/DATA/ESM4/2021211/NAC/M1382274459RC.IMG, 169.16 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016145/NAC/M1218718019LC.IMG, 169.2 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1017/DATA/ESM/2013264/NAC/M1134431770LC.IMG, 258.04 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1045A/DATA/ESM4/2020260/NAC/M1354901244LC.IMG, 212.51 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1041B/DATA/ESM4/2019300/NAC/M1326808573RC.IMG, 160.21 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013122/NAC/M1122117864LC.IMG, 206.05 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015312/NAC/M1201607242RC.IMG, 182.35 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012120/NAC/M190350472LC.IMG, 224.42 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1045A/DATA/ESM4/2020284/NAC/M1356950946RC.IMG, 192.98 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1037B/DATA/ESM3/2018291/NAC/M1294461777LC.IMG, 159.13 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044A/DATA/ESM4/2020175/NAC/M1347512650LC.IMG, 129.95 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012179/NAC/M1095437275RC.IMG, 174.64 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013112/NAC/M1121234472RC.IMG, 181.21 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011242/NAC/M169349917RC.IMG, 241.73 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016119/NAC/M1216490694LC.IMG, 184.74 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009336/NAC/M114422988LC.IMG, 159.49 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014094/NAC/M1151231325RC.IMG, 227.7 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014280/NAC/M1167362364RC.IMG, 170.88 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1045C/DATA/ESM4/2020350/NAC/M1362674897RC.IMG, 176.0 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012248/NAC/M1101437850RC.IMG, 244.41 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014269/NAC/M1166332180LC.IMG, 202.02 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012324/NAC/M1107946137RC.IMG, 167.06 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1048A/DATA/ESM4/2021179/NAC/M1379521296RC.IMG, 180.84 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017280/NAC/M1262020854RC.IMG, 181.39 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044A/DATA/ESM4/2020181/NAC/M1348111365LC.IMG, 176.76 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017201/NAC/M1255166439LC.IMG, 98.42 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2021005/NAC/M1364473071LC.IMG, 178.83 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012143/NAC/M192308923LC.IMG, 205.47 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2018044/NAC/M1273141294LC.IMG, 146.52 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015313/NAC/M1201676616LC.IMG, 177.71 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010347/NAC/M146844678LC.IMG, 172.08 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014280/NAC/M1167358858LC.IMG, 176.64 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013213/NAC/M1129959467RC.IMG, 148.47 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2018048/NAC/M1273534947LC.IMG, 150.23 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1003/DATA/MAP/2010137/NAC/M128715786RC.IMG, 170.9 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014169/NAC/M1157756910LC.IMG, 174.5 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010322/NAC/M144721936LC.IMG, 193.61 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010033/NAC/M119787593RC.IMG, 158.0 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2016366/NAC/M1237829414LC.IMG, 150.54 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1026/DATA/ESM2/2015364/NAC/M1206117050RC.IMG, 144.43 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013038/NAC/M1114834911LC.IMG, 184.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1039C/DATA/ESM3/2019137/NAC/M1312707360LC.IMG, 152.08 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019241/NAC/M1321726802LC.IMG, 181.78 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014045/NAC/M1147023713RC.IMG, 110.18 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1045C/DATA/ESM4/2020343/NAC/M1362066733LC.IMG, 145.75 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1047B/DATA/ESM4/2021123/NAC/M1374696983LC.IMG, 266.63 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010008/NAC/M117624662LC.IMG, 188.91 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1026/DATA/ESM2/2015359/NAC/M1205696659LC.IMG, 215.35 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015336/NAC/M1203713442RC.IMG, 194.43 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1018/DATA/ESM/2014060/NAC/M1148335313RC.IMG, 259.22 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1048C/DATA/ESM4/2021233/NAC/M1384184289RC.IMG, 204.36 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013089/NAC/M1119271697RC.IMG, 115.43 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012135/NAC/M191631763RC.IMG, 159.66 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015328/NAC/M1203016739RC.IMG, 185.67 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1017/DATA/ESM/2013328/NAC/M1139926009LC.IMG, 175.87 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018136/NAC/M1281128370RC.IMG, 220.25 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015129/NAC/M1185799204LC.IMG, 187.77 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015202/NAC/M1192099679RC.IMG, 235.49 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013202/NAC/M1129013526RC.IMG, 161.38 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2017068/NAC/M1243716703RC.IMG, 162.6 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016204/NAC/M1223815558LC.IMG, 257.92 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013012/NAC/M1112607320LC.IMG, 159.64 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1042B/DATA/ESM4/2020038/NAC/M1335734812RC.IMG, 187.99 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020214/NAC/M1350909941LC.IMG, 185.8 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012206/NAC/M1097772847RC.IMG, 188.48 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013187/NAC/M1127711168RC.IMG, 189.95 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2021003/NAC/M1364324923RC.IMG, 188.27 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2020359/NAC/M1363440116LC.IMG, 140.53 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016210/NAC/M1224385811LC.IMG, 261.52 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018114/NAC/M1279245525LC.IMG, 177.58 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013209/NAC/M1129666960RC.IMG, 198.86 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038C/DATA/ESM3/2019068/NAC/M1306805359RC.IMG, 177.84 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014114/NAC/M1152937179RC.IMG, 171.62 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015082/NAC/M1181763018LC.IMG, 206.99 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015041/NAC/M1178246048RC.IMG, 136.78 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014246/NAC/M1164383295LC.IMG, 126.35 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011114/NAC/M158278493LC.IMG, 239.54 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1039C/DATA/ESM3/2019166/NAC/M1315224801RC.IMG, 97.77 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1048A/DATA/ESM4/2021191/NAC/M1380540180RC.IMG, 169.67 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1048C/DATA/ESM4/2021231/NAC/M1384009003LC.IMG, 212.33 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013157/NAC/M1125141073RC.IMG, 179.91 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2017350/NAC/M1268065672LC.IMG, 244.49 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011147/NAC/M161149764RC.IMG, 198.8 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1039A/DATA/ESM3/2019104/NAC/M1309863902RC.IMG, 158.83 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1001/DATA/MAP/2009265/NAC/M108217110RC.IMG, 147.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040C/DATA/ESM3/2019243/NAC/M1321874175RC.IMG, 178.63 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012262/NAC/M1102603360LC.IMG, 89.2 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1012/DATA/SCI/2012192/NAC/M1096559563RC.IMG, 161.18 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015126/NAC/M1185566458RC.IMG, 191.73 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012147/NAC/M192696464RC.IMG, 175.05 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1049B/DATA/ESM4/2021306/NAC/M1390536806RC.IMG, 128.52 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013052/NAC/M1116046457RC.IMG, 230.16 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1005/DATA/SCI/2010311/NAC/M143730132RC.IMG, 140.32 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1034/DATA/ESM3/2018056/NAC/M1274160202RC.IMG, 167.42 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011191/NAC/M164909616RC.IMG, 178.98 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1045B/DATA/ESM4/2020307/NAC/M1358967875RC.IMG, 166.46 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1035/DATA/ESM3/2018087/NAC/M1276843810RC.IMG, 184.51 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1041A/DATA/ESM4/2019288/NAC/M1325808505LC.IMG, 142.18 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020206/NAC/M1350221080LC.IMG, 192.26 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1025/DATA/ESM2/2015346/NAC/M1204549897LC.IMG, 192.26 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038B/DATA/ESM3/2019018/NAC/M1302439606RC.IMG, 181.38 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010057/NAC/M121817429LC.IMG, 204.92 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013078/NAC/M1118304736RC.IMG, 210.69 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1042B/DATA/ESM4/2020020/NAC/M1334165099RC.IMG, 209.74 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044B/DATA/ESM4/2020219/NAC/M1351382534LC.IMG, 187.6 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1002/DATA/MAP/2010005/NAC/M117358581LC.IMG, 178.49 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011121/NAC/M158891067RC.IMG, 149.68 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014257/NAC/M1165350771RC.IMG, 135.37 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1006/DATA/SCI/2011044/NAC/M152228223RC.IMG, 209.35 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1022/DATA/ESM2/2015043/NAC/M1178352512RC.IMG, 114.7 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015099/NAC/M1183253578RC.IMG, 214.82 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015232/NAC/M1194737528LC.IMG, 267.65 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046A/DATA/ESM4/2020362/NAC/M1363713685LC.IMG, 155.47 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014248/NAC/M1164581744RC.IMG, 99.25 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012339/NAC/M1109218996LC.IMG, 181.66 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1014/DATA/ESM/2013022/NAC/M1113517233LC.IMG, 181.74 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1007/DATA/SCI/2011149/NAC/M161346885LC.IMG, 189.88 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1010/DATA/SCI/2011364/NAC/M179872247RC.IMG, 179.61 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016141/NAC/M1218400624LC.IMG, 183.31 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044C/DATA/ESM4/2020233/NAC/M1352530236LC.IMG, 185.5 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1019/DATA/ESM/2014135/NAC/M1154769635LC.IMG, 189.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1020/DATA/ESM/2014202/NAC/M1160547140LC.IMG, 182.55 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1036B/DATA/ESM3/2018224/NAC/M1288694504RC.IMG, 148.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1011/DATA/SCI/2012080/NAC/M186905826RC.IMG, 265.19 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1032/DATA/ESM3/2017248/NAC/M1259242587LC.IMG, 198.0 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1041A/DATA/ESM4/2019273/NAC/M1324462289RC.IMG, 176.64 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016235/NAC/M1226497043RC.IMG, 239.87 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1027/DATA/ESM2/2016130/NAC/M1217402126LC.IMG, 178.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1021/DATA/ESM2/2014337/NAC/M1172242348LC.IMG, 187.67 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1042A/DATA/ESM4/2020012/NAC/M1333427620LC.IMG, 163.73 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017285/NAC/M1262465851LC.IMG, 181.77 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1031/DATA/ESM3/2017116/NAC/M1247861471RC.IMG, 183.53 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1030/DATA/ESM3/2017019/NAC/M1239441624LC.IMG, 267.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1024/DATA/ESM2/2015216/NAC/M1193295832LC.IMG, 127.08 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1040B/DATA/ESM3/2019215/NAC/M1319451403RC.IMG, 187.17 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017302/NAC/M1263908691RC.IMG, 187.37 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1009/DATA/SCI/2011330/NAC/M176905191RC.IMG, 157.67 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1008/DATA/SCI/2011233/NAC/M168550121RC.IMG, 206.45 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012308/NAC/M1106595881LC.IMG, 170.14 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1023/DATA/ESM2/2015138/NAC/M1186553935LC.IMG, 179.11 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1046B/DATA/ESM4/2021028/NAC/M1366442934LC.IMG, 182.95 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1038B/DATA/ESM3/2019019/NAC/M1302558578RC.IMG, 216.69 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1026/DATA/ESM2/2016066/NAC/M1211877309LC.IMG, 210.35 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1041A/DATA/ESM4/2019259/NAC/M1323261350LC.IMG, 168.96 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1044A/DATA/ESM4/2020183/NAC/M1348224253RC.IMG, 197.34 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1015/DATA/ESM/2013129/NAC/M1122721870LC.IMG, 207.96 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1013/DATA/ESM/2012333/NAC/M1108746749RC.IMG, 173.89 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013187/NAC/M1127776551RC.IMG, 160.53 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1028/DATA/ESM2/2016172/NAC/M1221094305RC.IMG, 203.3 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1047A/DATA/ESM4/2021085/NAC/M1371360820RC.IMG, 135.61 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1016/DATA/ESM/2013174/NAC/M1126624503LC.IMG, 169.44 - LRO-L-LROC-3-CDR-V1.0/LROLRC_1033/DATA/ESM3/2017335/NAC/M1266797755RC.IMG, 135.14 From 038c46d20cc17be91a037344856db51f964052c6 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Fri, 9 Jun 2023 14:29:49 -0700 Subject: [PATCH 50/57] move bare bones env to JPL repo --- env/bare_env.yml | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 env/bare_env.yml diff --git a/env/bare_env.yml b/env/bare_env.yml deleted file mode 100644 index 6640c52..0000000 --- a/env/bare_env.yml +++ /dev/null @@ -1,14 +0,0 @@ -# For more information about setting up environment YAML files for conda, see: -# https://conda.io/docs/user-guide/tasks/manage-environments.html#create-env-file-manually - -# bare bones conda environment to run osprey - -name: p37 - -channels: - - conda-forge - - menpo - - defaults - -dependencies: - - python=3.7 From 5f0bee58d594a3df56cc157c20842373e78d4335 Mon Sep 17 00:00:00 2001 From: Emily Dunkel Date: Fri, 9 Jun 2023 14:50:00 -0700 Subject: [PATCH 51/57] removed no longer needed lines from gitignore --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index ac5d13d..5bf2fe3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -inputs/*/*.TAB -inputs/*/*.tab *.pyc *.sw* build From 06e0bffc37a0c04c7522635d1f69b5751bece539 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Fri, 9 Jun 2023 15:03:25 -0700 Subject: [PATCH 52/57] removed debug import --- pdsc/ingest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 41b7d95..b06fb40 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -5,7 +5,6 @@ import os import yaml import sqlite3 -import pdb from .table import parse_table from .metadata import PdsMetadata, METADATA_DB_SUFFIX From c6c623176aa5771ee0a5c60857b1a3b4ef1e98ee Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Fri, 9 Jun 2023 15:05:12 -0700 Subject: [PATCH 53/57] removed print --- pdsc/table.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pdsc/table.py b/pdsc/table.py index b866dee..79f8b82 100644 --- a/pdsc/table.py +++ b/pdsc/table.py @@ -125,7 +125,6 @@ def lroc_cdr_determiner(label_contents): :param label_contents: PDS cumulative index LBL file contents :return: ``True`` iff this label file is for LROC CDR products """ - print('LROC CDR') return ( 'LROC' in label_contents and From 47b9a1b24ac6447e493db0b0963f726458dd9afd Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Fri, 9 Jun 2023 16:01:58 -0700 Subject: [PATCH 54/57] always pass in body_radius for store_segments and trisegmentedfootprint --- pdsc/ingest.py | 18 ++++-------------- test/test_ingest.py | 2 +- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/pdsc/ingest.py b/pdsc/ingest.py index b06fb40..693cfb0 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -179,11 +179,7 @@ def store_segments(outputfile, metadata, config, body_radius=MARS_RADIUS_M): progress = standard_progress_bar('Segmenting footprints') for m in progress(metadata): try: - # erd: if not Mars, store body radius - if body_radius == MARS_RADIUS_M: - s = TriSegmentedFootprint(m, resolution, localizer_kwargs) - else: - s = TriSegmentedFootprint(m, resolution, localizer_kwargs, body_radius) + s = TriSegmentedFootprint(m, resolution, localizer_kwargs, body_radius) for si in s.segments: segments.append(si) # erd: check if observation_id attribute exists @@ -264,16 +260,12 @@ def ingest_idx(label_file, table_file, configpath, outputdir): """ instrument, table = parse_table(label_file, table_file) - # erd: radius will differ if mars vs moon if 'lroc' in instrument: # use moon radius body_radius = MOON_RADIUS_M - print('using Moon radius in ingest_idx: ') - print(body_radius) else: + # default radius is Mars body_radius = MARS_RADIUS_M - print('using Mars radius in ingest_idx: ') - print(body_radius) if os.path.isdir(configpath): configfile = os.path.join(configpath, '%s_metadata.yaml' % instrument) @@ -300,10 +292,8 @@ def ingest_idx(label_file, table_file, configpath, outputdir): outputdir, '%s%s' % (instrument, SEGMENT_DB_SUFFIX) ) - if body_radius == MARS_RADIUS_M: - segments = store_segments(outputfile, metadata, config) - else: - segments = store_segments(outputfile, metadata, config, body_radius) + + segments = store_segments(outputfile, metadata, config, body_radius) outputfile = os.path.join( outputdir, diff --git a/test/test_ingest.py b/test/test_ingest.py index 18259fa..67c7af3 100644 --- a/test/test_ingest.py +++ b/test/test_ingest.py @@ -153,7 +153,7 @@ def test_ingest_idx(mock_parse_table, mock_store_segment_tree, ) mock_store_segments.assert_called_with( os.path.join('test_output', 'instrument_name_segments.db'), - 'metadata', 'config_contents' + 'metadata', 'config_contents', 3396200.0 ) mock_store_segment_tree.assert_called_with( os.path.join('test_output', 'instrument_name_segment_tree.pkl'), From b81ef3273e13f9bd1d3e4dee7f9b7391331ef19f Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Fri, 9 Jun 2023 16:32:07 -0700 Subject: [PATCH 55/57] removed debug statements and get assume radius passed in --- pdsc/ingest.py | 9 ++------- pdsc/localization.py | 3 --- pdsc/segment.py | 1 + pdsc/table.py | 1 - test/test_ingest.py | 2 +- test/test_localization.py | 1 - 6 files changed, 4 insertions(+), 13 deletions(-) diff --git a/pdsc/ingest.py b/pdsc/ingest.py index 693cfb0..c39dd0e 100644 --- a/pdsc/ingest.py +++ b/pdsc/ingest.py @@ -299,11 +299,6 @@ def ingest_idx(label_file, table_file, configpath, outputdir): outputdir, '%s%s' % (instrument, SEGMENT_TREE_SUFFIX) ) - if body_radius == MARS_RADIUS_M: - store_segment_tree(outputfile, segments) - else: - if (segments != []): - store_segment_tree(outputfile, segments, body_radius) - else: - print('No segments to save as a tree') + + store_segment_tree(outputfile, segments, body_radius) diff --git a/pdsc/localization.py b/pdsc/localization.py index 6979e13..d6a2e8f 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -27,7 +27,6 @@ from geographiclib.geodesic import Geodesic from .util import registerer, standard_progress_bar -import pdb # https://tharsis.gsfc.nasa.gov/geodesy.html MARS_RADIUS_M = 3396200. @@ -307,8 +306,6 @@ def observation_length_m(self): return self._height def pixel_to_latlon(self, row, col): - #print('body radius = ', self.BODY_RADIUS) - #pdb.set_trace() x_m = (col - self.center_col) * self.pixel_width_m y_m = (row - self.center_row) * self.pixel_height_m y_m *= self.flight_direction diff --git a/pdsc/segment.py b/pdsc/segment.py index 87044df..c0baf57 100644 --- a/pdsc/segment.py +++ b/pdsc/segment.py @@ -78,6 +78,7 @@ def __init__(self, segments, verbose=True, body_radius=MARS_RADIUS_M): :param segments: collection of all observation segments :param verbose: if ``True`` display a progress bar as the index is being built + :param body_radius: celestial body radius, default is Mars """ progress = standard_progress_bar('Finding segment centers', verbose) data = np.deg2rad([ diff --git a/pdsc/table.py b/pdsc/table.py index 79f8b82..b789b74 100644 --- a/pdsc/table.py +++ b/pdsc/table.py @@ -3,7 +3,6 @@ """ import re import numpy as np -import pdb from datetime import datetime from .util import registerer, standard_progress_bar diff --git a/test/test_ingest.py b/test/test_ingest.py index 67c7af3..5bb9df1 100644 --- a/test/test_ingest.py +++ b/test/test_ingest.py @@ -157,7 +157,7 @@ def test_ingest_idx(mock_parse_table, mock_store_segment_tree, ) mock_store_segment_tree.assert_called_with( os.path.join('test_output', 'instrument_name_segment_tree.pkl'), - 'segments' + 'segments', 3396200.0 ) @unit diff --git a/test/test_localization.py b/test/test_localization.py index e3b1f53..f51a587 100644 --- a/test/test_localization.py +++ b/test/test_localization.py @@ -2,7 +2,6 @@ Unit tests for Localization code """ import pytest -import pdb import numpy as np from pdsc.metadata import PdsMetadata from numpy.testing import assert_allclose From 8e910c0778ea37d86de04155e94d65312ac6e266 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Fri, 9 Jun 2023 17:21:23 -0700 Subject: [PATCH 56/57] added ability for user to pass in downsample amount, with a default of 2.0 --- pdsc/localization.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pdsc/localization.py b/pdsc/localization.py index d6a2e8f..5e512c0 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -795,7 +795,7 @@ def __init__(self, metadata): [metadata.lower_left_latitude, metadata.lower_left_longitude], ]) super(LrocCdrBrowseLocalizer, self).__init__( - corners, metadata.lines/2.0, metadata.samples/2.0, 1 + corners, metadata.lines/metadata.downsamp, metadata.samples/metadata.downsamp, 1 ) class HiRiseRdrLocalizer(MapLocalizer): @@ -890,7 +890,7 @@ def hirise_rdr_localizer(metadata, nomap=False, browse=False, return HiRiseRdrLocalizer(metadata) @register_localizer('lroc_cdr') -def lroc_cdr_localizer(metadata, browse=False): +def lroc_cdr_localizer(metadata, browse=False, downsamp=2.0): """ Constructs the LROC CDR localizer (data is not map projected) @@ -898,9 +898,12 @@ def lroc_cdr_localizer(metadata, browse=False): "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object :param browse: construct localizer for the BROWSE data product + :param downsamp: + if browse, use this downsample :return: a :py:class:`Localizer` for the appropriate data product """ if browse: + metadata.downsamp = downsamp return LrocCdrBrowseLocalizer(metadata) else: return LrocCdrLocalizer(metadata) @@ -943,9 +946,9 @@ def get_localizer(metadata, *args, **kwargs): :param metadata: a :py:class:`~pdsc.metadata.PdsMetadata` object for an observation - :param \*args: + :param *args: additional args provided to the localizer constructor - :param \**kwargs: + :param **kwargs: additional kwargs provided to the localizer constructor :return: a :py:class:`Localizer` for the observation From 4a41b4791dfc652f11f47028bb6ae892a36241d7 Mon Sep 17 00:00:00 2001 From: Emmy-D Date: Wed, 14 Jun 2023 20:49:43 -0700 Subject: [PATCH 57/57] Changed LrocCdrBrowseLocalizer so it inherits from LrocCdrLocalizer. Added unit tests for passing in a parameter for downsampling, and added exception tests --- pdsc/localization.py | 42 +++++++++++++++++++-------------------- test/test_localization.py | 21 +++++++++++++++----- 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/pdsc/localization.py b/pdsc/localization.py index 5e512c0..5dc99a0 100644 --- a/pdsc/localization.py +++ b/pdsc/localization.py @@ -752,12 +752,12 @@ class LrocCdrLocalizer(FourCornerLocalizer): 1/3 of that of HiRISE """ - NORMALIZED_PIXEL_SPACE = False - - def __init__(self, metadata): + def __init__(self, metadata, downsamp): """ :param metadata: "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + :param downsamp: + value of 1.0, no downsampling for LrocCdrLocalizer """ corners = np.array([ [metadata.upper_left_latitude, metadata.upper_left_longitude], @@ -766,10 +766,10 @@ def __init__(self, metadata): [metadata.lower_left_latitude, metadata.lower_left_longitude], ]) super(LrocCdrLocalizer, self).__init__( - corners, metadata.lines, metadata.samples, 1 + corners, metadata.lines/downsamp, metadata.samples/downsamp, 1 ) -class LrocCdrBrowseLocalizer(FourCornerLocalizer): +class LrocCdrBrowseLocalizer(LrocCdrLocalizer): """ A localizer for the LROC CDR observations (subclass of :py:class:`FourCornerLocalizer`) @@ -781,22 +781,22 @@ class LrocCdrBrowseLocalizer(FourCornerLocalizer): 1/3 of that of HiRISE, plus factor of 2 for browse """ - NORMALIZED_PIXEL_SPACE = False + LROC_DOWNSAMP = 2.0 + """ + The default downsample amount for browse imagery + """ - def __init__(self, metadata): + def __init__(self, metadata, downsamp): """ :param metadata: "lroc_cdr" :py:class:`~pdsc.metadata.PdsMetadata` object + :param downsamp: + the downsample amount of lroc browse image (if it varies from the default + value) """ - corners = np.array([ - [metadata.upper_left_latitude, metadata.upper_left_longitude], - [metadata.upper_right_latitude, metadata.upper_right_longitude], - [metadata.lower_right_latitude, metadata.lower_right_longitude], - [metadata.lower_left_latitude, metadata.lower_left_longitude], - ]) - super(LrocCdrBrowseLocalizer, self).__init__( - corners, metadata.lines/metadata.downsamp, metadata.samples/metadata.downsamp, 1 - ) + if downsamp < 1: + raise ValueError('Invalid downsample: %f' % downsamp) + super(LrocCdrBrowseLocalizer, self).__init__(metadata, downsamp) class HiRiseRdrLocalizer(MapLocalizer): """ @@ -890,7 +890,7 @@ def hirise_rdr_localizer(metadata, nomap=False, browse=False, return HiRiseRdrLocalizer(metadata) @register_localizer('lroc_cdr') -def lroc_cdr_localizer(metadata, browse=False, downsamp=2.0): +def lroc_cdr_localizer(metadata, browse=False, downsamp=LrocCdrBrowseLocalizer.LROC_DOWNSAMP): """ Constructs the LROC CDR localizer (data is not map projected) @@ -899,14 +899,14 @@ def lroc_cdr_localizer(metadata, browse=False, downsamp=2.0): :param browse: construct localizer for the BROWSE data product :param downsamp: - if browse, use this downsample + if ``browse=True``, use this value for the downsample amount + :return: a :py:class:`Localizer` for the appropriate data product """ if browse: - metadata.downsamp = downsamp - return LrocCdrBrowseLocalizer(metadata) + return LrocCdrBrowseLocalizer(metadata, downsamp) else: - return LrocCdrLocalizer(metadata) + return LrocCdrLocalizer(metadata, 1.0) @register_localizer('moc') class MocLocalizer(GeodesicLocalizer): diff --git a/test/test_localization.py b/test/test_localization.py index f51a587..64012f4 100644 --- a/test/test_localization.py +++ b/test/test_localization.py @@ -7,7 +7,7 @@ from numpy.testing import assert_allclose from pdsc.localization import ( MapLocalizer, HiRiseRdrLocalizer, HiRiseRdrBrowseLocalizer, Localizer, - xyz2latlon, get_localizer, GeodesicLocalizer, MARS_RADIUS_M + xyz2latlon, get_localizer, GeodesicLocalizer, MARS_RADIUS_M, LrocCdrBrowseLocalizer ) from .cosmic_test_tools import unit @@ -425,8 +425,7 @@ def test_localizer(metadata, latlons_pixels, browse=False): metadata.samples ) elif metadata.instrument == 'lroc_cdr': - factor = 0.5 - + factor = float(1.0/LrocCdrBrowseLocalizer.LROC_DOWNSAMP) row *= factor col *= factor @@ -472,17 +471,29 @@ def test_localizer(metadata, latlons_pixels, browse=False): if not browse: # Run the same set of tests for the browse localizer test_localizer(metadata, latlons_pixels, browse=True) - + # Test that the center lat/lon values are within a tolerance (100s meters) # of the calculated center values. Glob is assumed to be a sphere so parallax causes these errors # test with browse false localizer = get_localizer(metadata, browse=False) row_c, col_c = localizer.latlon_to_pixel(metadata.center_latitude, metadata.center_longitude) assert_allclose((row_c, col_c), (metadata.lines // 2, metadata.samples // 2), atol=450) - # test with browse true + # Test with browse=True, with default value localizer = get_localizer(metadata, browse=True) row_c, col_c = localizer.latlon_to_pixel(metadata.center_latitude, metadata.center_longitude) assert_allclose((row_c, col_c), (metadata.lines // 4, metadata.samples // 4), atol=225) + # Test with passing in downsample amount + def test_lroc_downsamp(downsamp_value): + localizer = get_localizer(metadata, browse=True, downsamp=downsamp_value) + row_c, col_c = localizer.latlon_to_pixel(metadata.center_latitude, metadata.center_longitude) + assert_allclose((row_c, col_c), (metadata.lines // (2*downsamp_value), metadata.samples // (2*downsamp_value)), atol=(450/downsamp_value)) + for ii in [1.0, 2.0, 3.0, 4.0, 5.0]: + test_lroc_downsamp(ii) + # Check raises exception if pass in not allowed downsample amount + with pytest.raises(Exception): + localizer = get_localizer(metadata, browse=True, downsamp=0.5) + with pytest.raises(Exception): + localizer = get_localizer(metadata, browse=True, downsamp=-1) # Regression tests for all CCDs/channels for HiRISE EDRs HIRISE_EDR_PSP_001334_2645_TEST_CASES = [