Unverified Commit 74da682d authored by AustinSanders's avatar AustinSanders Committed by GitHub
Browse files

Cleaned up cropping notebooks (#4211)

parent 7914ba0c
Loading
Loading
Loading
Loading
+93 −113

File changed.

Preview size limit exceeded, changes collapsed.

+2 −130
Original line number Diff line number Diff line
%% Cell type:code id: tags:

``` python
import pvl
import struct
import matplotlib.pyplot as plt
import numpy as np
import datetime
import os.path
import binascii
```

%% Cell type:code id: tags:

``` python
crism_file = '/home/arsanders/testData/crism/tsts/mrdr/input/t1865_mrrde_70n185_0256_1.lbl'
image_file = crism_file
```

%% Cell type:code id: tags:

``` python
header = pvl.load(crism_file)
```

%% Cell type:code id: tags:

``` python
header
```

%% Output

    PVLModule([
      ('PDS_VERSION_ID', 'PDS3')
      ('RECORD_TYPE', 'FIXED_LENGTH')
      ('RECORD_BYTES', 3920)
      ('FILE_RECORDS', 30720)
      ('LABEL_REVISION_NOTE',
       '2003-11-19, S. Slavney (GEO); 2005-09-25, S. Murchie (JHU/APL); 2007-03-09, '
       'E. Malaret (ACT Corp.); 2007-09-14, C. Hash (ACT Corp)')
      ('^IMAGE', 'T1865_MRRDE_70N185_0256_1.IMG')
      ('DATA_SET_ID', 'MRO-M-CRISM-5-RDR-MULTISPECTRAL-V1.0')
      ('PRODUCT_ID', 'T1865_MRRDE_70N185_0256_1')
      ('INSTRUMENT_HOST_NAME', 'MARS RECONNAISSANCE ORBITER')
      ('SPACECRAFT_ID', 'MRO')
      ('INSTRUMENT_NAME', 'COMPACT RECONNAISSANCE IMAGING SPECTROMETER FOR MARS')
      ('INSTRUMENT_ID', 'CRISM')
      ('TARGET_NAME', 'MARS')
      ('PRODUCT_TYPE', 'MAP_PROJECTED_MULTISPECTRAL_RDR')
      ('PRODUCT_CREATION_TIME',
       datetime.datetime(2007, 12, 22, 16, 50, 47, 432000, tzinfo=datetime.timezone.utc))
      ('START_TIME', 'N/A')
      ('STOP_TIME', 'N/A')
      ('SPACECRAFT_CLOCK_START_COUNT', 'N/A')
      ('SPACECRAFT_CLOCK_STOP_COUNT', 'N/A')
      ('PRODUCT_VERSION_ID', '1')
      ('PRODUCER_INSTITUTION_NAME', 'APPLIED PHYSICS LABORATORY')
      ('SOFTWARE_NAME', 'PIPE_create_crism_mrdr_product')
      ('SOFTWARE_VERSION_ID', '12.21.07')
      ('MRO:WAVELENGTH_FILE_NAME', 'T1865_MRRWV_70N185_0256_1.TAB')
      ('IMAGE',
       {'BANDS': 24,
        'BAND_NAME': ['Solar longitude, deg',
                      'Solar distance, AU',
                      'Observation ID, VNIR',
                      'Observation ID, IR',
                      'Ordinal counter, VNIR',
                      'Ordinal counter, IR',
                      'Column number, VNIR',
                      'Column number, IR',
                      'Line, or frame number, VNIR',
                      'Line, or frame number, IR',
                      'INA at areoid, deg',
                      'EMA at areoid, deg',
                      'Phase angle, deg',
                      'Latitude, areocentric, deg N',
                      'Longitude, areocentric, deg E',
                      'INA at surface from MOLA, deg',
                      'EMA at surface from MOLA, deg',
                      'Slope magnitude from MOLA, deg',
                      'MOLA slope azimuth, deg clkwise from N',
                      'Elevation, meters relative to MOLA',
                      'Thermal inertia, J m^-2 K^-1 s^-0.5',
                      'Bolometic albedo',
                      'Local solar time, hours',
                      'Spare'],
        'BAND_STORAGE_TYPE': 'BAND_SEQUENTIAL',
        'LINES': 1280,
        'LINE_SAMPLES': 980,
        'SAMPLE_BITS': 32,
        'SAMPLE_TYPE': 'PC_REAL'})
      ('IMAGE_MAP_PROJECTION',
       {'A_AXIS_RADIUS': Quantity(value=3396, units='KM'),
        'B_AXIS_RADIUS': Quantity(value=3396, units='KM'),
        'CENTER_LATITUDE': Quantity(value=67.5000001, units='DEGREE'),
        'CENTER_LONGITUDE': Quantity(value=185.0, units='DEGREE'),
        'COORDINATE_SYSTEM_NAME': 'PLANETOCENTRIC',
        'COORDINATE_SYSTEM_TYPE': 'BODY-FIXED ROTATING',
        'C_AXIS_RADIUS': Quantity(value=3396, units='KM'),
        'EASTERNMOST_LONGITUDE': Quantity(value=9.9999999, units='DEGREE'),
        'FIRST_STANDARD_PARALLEL': 'N/A',
        'LINE_FIRST_PIXEL': 1,
        'LINE_LAST_PIXEL': 1280,
        'LINE_PROJECTION_OFFSET': 18560.0,
        'MAP_PROJECTION_ROTATION': 0.0,
        'MAP_PROJECTION_TYPE': 'EQUIRECTANGULAR',
        'MAP_RESOLUTION': Quantity(value=256, units='PIXEL/DEGREE'),
        'MAP_SCALE': Quantity(value=0.231528833585, units='KM/PIXEL'),
        'MAXIMUM_LATITUDE': Quantity(value=72.5, units='DEGREE'),
        'MINIMUM_LATITUDE': Quantity(value=67.5000001, units='DEGREE'),
        'POSITIVE_LONGITUDE_DIRECTION': 'EAST',
        'REFERENCE_LATITUDE': 'N/A',
        'REFERENCE_LONGITUDE': 'N/A',
        'SAMPLE_FIRST_PIXEL': 1,
        'SAMPLE_LAST_PIXEL': 980,
        'SAMPLE_PROJECTION_OFFSET': 47360.0,
        'SECOND_STANDARD_PARALLEL': 'N/A',
        'WESTERNMOST_LONGITUDE': Quantity(value=360.0, units='DEGREE'),
        '^DATA_SET_MAP_PROJECTION': 'MRR_MAP.CAT'})
    ])

%% Cell type:code id: tags:

``` python
with open(crism_file, 'rb') as f:
    # If detached label, "^IMAGE" will be a list.
    image_file = os.path.dirname(crism_file) + "/" + header["^IMAGE"].lower()
    with open(image_file, 'rb') as im_f:
        b_image_data = im_f.read()
```

%% Cell type:code id: tags:

``` python
n_lines = 10
line_length = header['IMAGE']['LINE_SAMPLES'] * (header['IMAGE']['SAMPLE_BITS']//8)
```

%% Cell type:code id: tags:

``` python
image_data = []
for j in range(n_lines):
    image_sample = np.frombuffer(b_image_data[j*line_length:(j+1)*line_length], dtype=np.float32, count=int(line_length/4))
    image_data.append(image_sample)
image_data = np.array(image_data)
```

%% Cell type:code id: tags:

``` python
plt.imshow(image_data, cmap='magma')
plt.imshow(image_data)
```

%% Output

    <matplotlib.image.AxesImage at 0x2aff238d0850>


%% Cell type:code id: tags:

``` python
image_fn, image_ext = os.path.splitext(image_file)
mini_image_fn = image_fn + '_cropped' + image_ext
mini_image_bn = os.path.basename(mini_image_fn)

# Overwrite the number of lines in the label
header['IMAGE']['LINES'] = n_lines
header['IMAGE']['BANDS'] = 1
header['^IMAGE'] = mini_image_bn
header['FILE_RECORDS'] = n_lines -1
```

%% Cell type:code id: tags:

``` python
class RealIsisCubeLabelEncoder(pvl.encoder.ISISEncoder):
    def encode_time(self, value):
        if value.microsecond:
            second = u'%02d.%06d' % (value.second, value.microsecond)
        else:
            second = u'%02d' % value.second

        time = u'%02d:%02d:%s' % (value.hour, value.minute, second)
        return time
```

%% Cell type:code id: tags:

``` python
label_fn, label_ext = os.path.splitext(crism_file)
out_label = label_fn + '_cropped' + label_ext

grammar = pvl.grammar.ISISGrammar()
grammar.comments+=(("#", "\n"), )
encoder = RealIsisCubeLabelEncoder()
encoder = pvl.encoder.ISISEncoder()
pvl.dump(header, out_label, encoder=encoder, grammar=grammar)
```

%% Output

    3539

%% Cell type:code id: tags:

``` python
with open(mini_image_fn, 'wb+') as f:
    b_reduced_image_data = image_data.tobytes()
    f.seek(0, 2)
    f.write(b_reduced_image_data)
```

%% Cell type:code id: tags:

``` python
```

%% Cell type:code id: tags:

``` python
header = pvl.load(out_label)
```

%% Cell type:code id: tags:

``` python
header
```

%% Output

    PVLModule([
      ('PDS_VERSION_ID', 'PDS3')
      ('RECORD_TYPE', 'FIXED_LENGTH')
      ('RECORD_BYTES', 3920)
      ('FILE_RECORDS', 9)
      ('LABEL_REVISION_NOTE',
       '2003-11-19, S. Slavney (GEO); 2005-09-25, S. Murchie (JHU/APL); 2007-03-09, '
       'E. Malaret (ACT Corp.); 2007-09-14, C. Hash (ACT Corp)')
      ('^IMAGE', 't1865_mrrde_70n185_0256_1_cropped.img')
      ('DATA_SET_ID', 'MRO-M-CRISM-5-RDR-MULTISPECTRAL-V1.0')
      ('PRODUCT_ID', 'T1865_MRRDE_70N185_0256_1')
      ('INSTRUMENT_HOST_NAME', 'MARS RECONNAISSANCE ORBITER')
      ('SPACECRAFT_ID', 'MRO')
      ('INSTRUMENT_NAME', 'COMPACT RECONNAISSANCE IMAGING SPECTROMETER FOR MARS')
      ('INSTRUMENT_ID', 'CRISM')
      ('TARGET_NAME', 'MARS')
      ('PRODUCT_TYPE', 'MAP_PROJECTED_MULTISPECTRAL_RDR')
      ('PRODUCT_CREATION_TIME',
       datetime.datetime(2007, 12, 22, 16, 50, 47, 432000, tzinfo=datetime.timezone.utc))
      ('START_TIME', 'N/A')
      ('STOP_TIME', 'N/A')
      ('SPACECRAFT_CLOCK_START_COUNT', 'N/A')
      ('SPACECRAFT_CLOCK_STOP_COUNT', 'N/A')
      ('PRODUCT_VERSION_ID', '1')
      ('PRODUCER_INSTITUTION_NAME', 'APPLIED PHYSICS LABORATORY')
      ('SOFTWARE_NAME', 'PIPE_create_crism_mrdr_product')
      ('SOFTWARE_VERSION_ID', '12.21.07')
      ('MRO:WAVELENGTH_FILE_NAME', 'T1865_MRRWV_70N185_0256_1.TAB')
      ('IMAGE',
       {'BANDS': 1,
        'BAND_NAME': ['Solar longitude, deg',
                      'Solar distance, AU',
                      'Observation ID, VNIR',
                      'Observation ID, IR',
                      'Ordinal counter, VNIR',
                      'Ordinal counter, IR',
                      'Column number, VNIR',
                      'Column number, IR',
                      'Line, or frame number, VNIR',
                      'Line, or frame number, IR',
                      'INA at areoid, deg',
                      'EMA at areoid, deg',
                      'Phase angle, deg',
                      'Latitude, areocentric, deg N',
                      'Longitude, areocentric, deg E',
                      'INA at surface from MOLA, deg',
                      'EMA at surface from MOLA, deg',
                      'Slope magnitude from MOLA, deg',
                      'MOLA slope azimuth, deg clkwise from N',
                      'Elevation, meters relative to MOLA',
                      'Thermal inertia, J m^-2 K^-1 s^-0.5',
                      'Bolometic albedo',
                      'Local solar time, hours',
                      'Spare'],
        'BAND_STORAGE_TYPE': 'BAND_SEQUENTIAL',
        'LINES': 10,
        'LINE_SAMPLES': 980,
        'SAMPLE_BITS': 32,
        'SAMPLE_TYPE': 'PC_REAL'})
      ('IMAGE_MAP_PROJECTION',
       {'A_AXIS_RADIUS': Quantity(value=3396, units='KM'),
        'B_AXIS_RADIUS': Quantity(value=3396, units='KM'),
        'CENTER_LATITUDE': Quantity(value=67.5000001, units='DEGREE'),
        'CENTER_LONGITUDE': Quantity(value=185.0, units='DEGREE'),
        'COORDINATE_SYSTEM_NAME': 'PLANETOCENTRIC',
        'COORDINATE_SYSTEM_TYPE': 'BODY-FIXED ROTATING',
        'C_AXIS_RADIUS': Quantity(value=3396, units='KM'),
        'EASTERNMOST_LONGITUDE': Quantity(value=9.9999999, units='DEGREE'),
        'FIRST_STANDARD_PARALLEL': 'N/A',
        'LINE_FIRST_PIXEL': 1,
        'LINE_LAST_PIXEL': 1280,
        'LINE_PROJECTION_OFFSET': 18560.0,
        'MAP_PROJECTION_ROTATION': 0.0,
        'MAP_PROJECTION_TYPE': 'EQUIRECTANGULAR',
        'MAP_RESOLUTION': Quantity(value=256, units='PIXEL/DEGREE'),
        'MAP_SCALE': Quantity(value=0.231528833585, units='KM/PIXEL'),
        'MAXIMUM_LATITUDE': Quantity(value=72.5, units='DEGREE'),
        'MINIMUM_LATITUDE': Quantity(value=67.5000001, units='DEGREE'),
        'POSITIVE_LONGITUDE_DIRECTION': 'EAST',
        'REFERENCE_LATITUDE': 'N/A',
        'REFERENCE_LONGITUDE': 'N/A',
        'SAMPLE_FIRST_PIXEL': 1,
        'SAMPLE_LAST_PIXEL': 980,
        'SAMPLE_PROJECTION_OFFSET': 47360.0,
        'SECOND_STANDARD_PARALLEL': 'N/A',
        'WESTERNMOST_LONGITUDE': Quantity(value=360.0, units='DEGREE'),
        '^DATA_SET_MAP_PROJECTION': 'MRR_MAP.CAT'})
    ])

%% Cell type:code id: tags:

``` python
```
+2 −209
Original line number Diff line number Diff line
%% Cell type:code id: tags:

``` python
import pvl
import struct
import matplotlib.pyplot as plt
import numpy as np
import datetime
import os.path
import binascii
```

%% Cell type:code id: tags:

``` python
crism_file = '/home/arsanders/testData/crism/tsts/trdr/input/frt0001e5c3_07_if124s_trr3.lbl'
image_file = crism_file
```

%% Cell type:code id: tags:

``` python
header = pvl.load(crism_file)
```

%% Cell type:code id: tags:

``` python
header
```

%% Output

    PVLModule([
      ('PDS_VERSION_ID', 'PDS3')
      ('LABEL_REVISION_NOTE',
       '2004-11-22, S. Slavney (GEO); 2005-12-20, H. Taylor (JHU/APL); 2006-04-05, '
       'S. Murchie (JHU/APL); 2006-09-18, P. Cavender (JHU/APL); 2007-02-19, P. '
       'Cavender (JHU/APL); Version 2, new stray light subtraction 2010-06-01, D. '
       'Humm (JHU/APL); Version 3, shutter mirror correction 2010-10-12, C. Hash '
       '(ACT); Version 3, Added data filter control parameters')
      ('DATA_SET_ID', 'MRO-M-CRISM-3-RDR-TARGETED-V1.0')
      ('PRODUCT_ID', 'FRT0001E5C3_07_IF124S_TRR3')
      ('INSTRUMENT_HOST_NAME', 'MARS RECONNAISSANCE ORBITER')
      ('SPACECRAFT_ID', 'MRO')
      ('INSTRUMENT_NAME', 'COMPACT RECONNAISSANCE IMAGING SPECTROMETER FOR MARS')
      ('INSTRUMENT_ID', 'CRISM')
      ('TARGET_NAME', 'MARS')
      ('PRODUCT_TYPE', 'TARGETED_RDR')
      ('PRODUCT_CREATION_TIME',
       datetime.datetime(2011, 6, 8, 10, 52, 30, tzinfo=datetime.timezone.utc))
      ('START_TIME',
       datetime.datetime(2011, 6, 2, 4, 3, 9, 29000, tzinfo=datetime.timezone.utc))
      ('STOP_TIME',
       datetime.datetime(2011, 6, 2, 4, 5, 0, 763000, tzinfo=datetime.timezone.utc))
      ('SPACECRAFT_CLOCK_START_COUNT', '10/0991454621.14521')
      ('SPACECRAFT_CLOCK_STOP_COUNT', '10/0991454732.62633')
      ('ORBIT_NUMBER', 'NULL')
      ('OBSERVATION_TYPE', 'FRT')
      ('OBSERVATION_ID', '16#0001E5C3#')
      ('MRO:OBSERVATION_NUMBER', 7)
      ('MRO:ACTIVITY_ID', 'IF124')
      ('MRO:SENSOR_ID', 'S')
      ('MRO:DETECTOR_TEMPERATURE', -53.663)
      ('MRO:OPTICAL_BENCH_TEMPERATURE', -42.348)
      ('MRO:SPECTROMETER_HOUSING_TEMP', -65.178)
      ('MRO:SPHERE_TEMPERATURE', -42.484)
      ('MRO:FPE_TEMPERATURE', 5.269)
      ('PRODUCT_VERSION_ID', '3')
      ('SOURCE_PRODUCT_ID',
       frozenset({'CDR400991452611_SP0042501S_3',
                  'CDR400991452639_BP0042500S_3',
                  'CDR400991452639_BP1018400S_3',
                  'CDR400991454611_BI1018400S_3',
                  'CDR400991454611_UB1018400S_3',
                  'CDR400991454737_BI1018400S_3',
                  'CDR400991454737_UB1018400S_3',
                  'CDR410000000000_SH0000001S_4',
                  'CDR410000000000_SS0000001S_2',
                  'CDR450924300802_DM0000000S_3',
                  'CDR450924300802_NU1000001S_3',
                  'CDR450924300802_SF0000000S_2',
                  'CDR450924300802_TD0000000S_2',
                  'CDR6_0_0991440032_ST_J_0',
                  'CDR6_1_0000000000_AS_S_0',
                  'CDR6_1_0000000000_DB_S_0',
                  'CDR6_1_0000000000_EB_S_0',
                  'CDR6_1_0000000000_GH_S_1',
                  'CDR6_1_0000000000_HD_J_1',
                  'CDR6_1_0000000000_HK_J_1',
                  'CDR6_1_0000000000_HV_J_1',
                  'CDR6_1_0000000000_LC_S_1',
                  'CDR6_1_0000000000_LI_J_0',
                  'CDR6_1_0000000000_VL_S_0',
                  'CDR6_2_0835294537_PP_S_0',
                  'FRT0001E5C3_07_SC124S_EDR0'}))
      ('MRO:INVALID_PIXEL_LOCATION', frozenset())
      ('PRODUCER_INSTITUTION_NAME',
       'JOHNS HOPKINS UNIVERSITY APPLIED PHYSICS LABORATORY')
      ('SOFTWARE_NAME', 'crism_imagecal')
      ('SOFTWARE_VERSION_ID', '2.5.3')
      ('TARGET_CENTER_DISTANCE', Quantity(value='NULL', units='KM'))
      ('SOLAR_DISTANCE', Quantity(value=213788591.232902, units='KM'))
      ('SOLAR_LONGITUDE', 303.590051)
      ('SHUTTER_MODE_ID', 'OPEN')
      ('LIGHT_SOURCE_NAME', 'NONE')
      ('MRO:CALIBRATION_LAMP_STATUS', 'OFF')
      ('MRO:CALIBRATION_LAMP_LEVEL', 'N/A')
      ('PIXEL_AVERAGING_WIDTH', 1)
      ('MRO:INSTRUMENT_POINTING_MODE', 'DYNAMIC POINTING')
      ('SCAN_MODE_ID', 'SHORT')
      ('MRO:FRAME_RATE', Quantity(value=3.75, units='HZ'))
      ('MRO:EXPOSURE_PARAMETER', 184)
      ('SAMPLING_MODE_ID', 'HYPERSPEC')
      ('COMPRESSION_TYPE', 'NONE')
      ('MRO:WAVELENGTH_FILTER', '0')
      ('MRO:WAVELENGTH_FILE_NAME', 'CDR450924300802_WA0000000S_2.IMG')
      ('MRO:PIXEL_PROC_FILE_NAME', 'CDR6_2_0835294537_PP_S_0.TAB')
      ('MRO:INV_LOOKUP_TABLE_FILE_NAME', 'CDR6_1_0000000000_LI_J_0.TAB')
      ('MRO:ATMO_CORRECTION_FLAG', 'OFF')
      ('MRO:THERMAL_CORRECTION_MODE', 'OFF')
      ('MRO:PHOTOCLIN_CORRECTION_FLAG', 'OFF')
      ('MRO:SPATIAL_RESAMPLING_FLAG', 'OFF')
      ('MRO:SPATIAL_RESAMPLING_FILE', 'N/A')
      ('MRO:SPATIAL_RESCALING_FLAG', 'OFF')
      ('MRO:SPATIAL_RESCALING_FILE', 'N/A')
      ('MRO:SPECTRAL_RESAMPLING_FLAG', 'OFF')
      ('MRO:SPECTRAL_RESAMPLING_FILE', 'N/A')
      ('MRO:HDF_SOFTWARE_NAME', 'crismhdf')
      ('MRO:HDF_SOFTWARE_VERSION_ID', '1.0.5')
      ('MRO:IF_MIN_VALUE', 0.0)
      ('MRO:IF_MAX_VALUE', 1.0)
      ('MRO:TRACE_MIN_VALUE', 0.01)
      ('MRO:TRACE_MAX_VALUE', 100.0)
      ('MRO:REFZ_MEDIAN_BOX_WIDTH', 15)
      ('MRO:REFZ_SMOOTH_BOX_WIDTH', 5)
      ('MRO:FRAM_STAT_MEDIAN_BOX_WIDTH', 5)
      ('MRO:FRAM_STAT_MIN_DEVIATION', 0.005)
      ('MRO:FRAM_STAT_MEDIAN_CONF_LVL', 0.999999)
      ('MRO:FRAM_STAT_IQR_CONF_LVL', 0.999999)
      ('MRO:RSC_REF_XY_MEDIAN_WIDTH', 15)
      ('MRO:RSC_REF_XY_SMOOTH_WIDTH', 5)
      ('MRO:RSC_REF_YZ_MEDIAN_WIDTH', 15)
      ('MRO:RSC_REF_YZ_SMOOTH_WIDTH', 5)
      ('MRO:RSC_RATIO_XY_MEDIAN_WIDTH', 25)
      ('MRO:RSC_RATIO_XY_SMOOTH_WIDTH', 13)
      ('MRO:RSC_RES_XY_PLY_ORDER', 5)
      ('MRO:RSC_RES_XY_PLY_EXTND_WIDTH', 38)
      ('MRO:LOG_XFORM_NEG_CLIP_VALUE', 'N/A')
      ('MRO:IKF_NUM_REGIONS', 'N/A')
      ('MRO:IKF_START_CHANNEL', ['N/A', 'N/A'])
      ('MRO:IKF_STOP_CHANNEL', ['N/A', 'N/A'])
      ('MRO:IKF_CONFIDENCE_LEVEL', ['N/A', 'N/A'])
      ('MRO:IKF_WEIGHTING_STDDEV', ['N/A', 'N/A'])
      ('MRO:IKF_KERNEL_SIZE_X', ['N/A', 'N/A'])
      ('MRO:IKF_KERNEL_SIZE_Y', ['N/A', 'N/A'])
      ('MRO:IKF_KERNEL_SIZE_Z', ['N/A', 'N/A'])
      ('MRO:IKF_MODEL_ORDER_X', ['N/A', 'N/A'])
      ('MRO:IKF_MODEL_ORDER_Y', ['N/A', 'N/A'])
      ('MRO:IKF_MODEL_ORDER_Z', ['N/A', 'N/A'])
      ('FILE',
       {'FILE_RECORDS': 44941,
        'IMAGE': {'BANDS': 107,
                  'BAND_STORAGE_TYPE': 'LINE_INTERLEAVED',
                  'LINES': 420,
                  'LINE_SAMPLES': 640,
                  'SAMPLE_BITS': 32,
                  'SAMPLE_TYPE': 'PC_REAL',
                  'UNIT': 'I_OVER_F'},
        'RECORD_BYTES': 2560,
        'RECORD_TYPE': 'FIXED_LENGTH',
        'ROWNUM_TABLE': {'COLUMN': {'BIT_MASK': 511,
                                    'BYTES': 2,
                                    'COLUMN_NUMBER': 1,
                                    'DATA_TYPE': 'MSB_UNSIGNED_INTEGER',
                                    'DESCRIPTION': 'Detector row number from which '
                                                   'the data was taken.',
                                    'NAME': 'DETECTOR_ROW_NUMBER',
                                    'START_BYTE': 1},
                         'COLUMNS': 1,
                         'DESCRIPTION': 'The detector is subsampled in the spectral '
                                        'direction by selecting specific rows to be '
                                        'downlinked. This table provides a list of '
                                        'the rows selected for all frames in this '
                                        'multidimensional image cube.',
                         'INTERCHANGE_FORMAT': 'BINARY',
                         'NAME': 'SELECTED ROWS FROM DETECTOR',
                         'ROWS': 107,
                         'ROW_BYTES': 2},
        '^IMAGE': 'FRT0001E5C3_07_IF124S_TRR3.IMG',
        '^ROWNUM_TABLE': ['FRT0001E5C3_07_IF124S_TRR3.IMG', 44941]})
      ('FILE',
       {'FILE_RECORDS': 420,
        'RECORD_BYTES': 1221,
        'RECORD_TYPE': 'FIXED_LENGTH',
        'TRDR_HK_TABLE': {'COLUMNS': 233,
                          'INTERCHANGE_FORMAT': 'ASCII',
                          'NAME': 'TARGETED RDR HOUSEKEEPING TABLE',
                          'ROWS': 420,
                          'ROW_BYTES': 1221,
                          '^STRUCTURE': 'TRDRHK.FMT'},
        '^TRDR_HK_TABLE': 'FRT0001E5C3_07_RA124S_HKP3.TAB'})
    ])

%% Cell type:code id: tags:

``` python
with open(crism_file, 'rb') as f:
    # If detached label, "^IMAGE" will be a list.
    image_file = os.path.dirname(crism_file) + "/" + header['FILE']["^IMAGE"].lower()
    with open(image_file, 'rb') as im_f:
        b_image_data = im_f.read()
```

%% Cell type:code id: tags:

``` python
n_lines = 1
line_length = header['FILE']['IMAGE']['LINE_SAMPLES'] * (header['FILE']['IMAGE']['SAMPLE_BITS']//8)
```

%% Cell type:code id: tags:

``` python
def read_crism_trdr(b_image_data, line_length, n_lines, n_bands):
    image_data = []
    for j in range(n_lines*n_bands):
        image_sample = np.frombuffer(b_image_data[j*line_length:(j+1)*line_length],
                                     dtype=np.float32, count=int(line_length/4))
        image_data.append(image_sample)
    return np.array(image_data)
```

%% Cell type:code id: tags:

``` python
#
n_output_bands = 107
n_bands = header['FILE']['IMAGE']['BANDS']
image_data = read_crism_trdr(b_image_data, line_length, n_lines, n_bands)
#cropped_image_data = image_data[np.where(np.arange(image_data.shape[0]) % n_bands < n_output_bands)]

cropped_image_data = image_data
```

%% Cell type:code id: tags:

``` python
plt.imshow(cropped_image_data)
```

%% Output

    <matplotlib.image.AxesImage at 0x2ab7ccf77f10>


%% Cell type:code id: tags:

``` python
image_fn, image_ext = os.path.splitext(image_file)
mini_image_fn = image_fn + '_cropped' + image_ext
mini_image_bn = os.path.basename(mini_image_fn)

# Overwrite the number of lines in the label
header['FILE']['IMAGE']['LINES'] = n_lines
header['FILE']['IMAGE']['BANDS'] = n_output_bands
header['FILE']['^IMAGE'] = mini_image_bn
header['FILE']['FILE_RECORDS'] = n_lines * n_output_bands + 1
header['FILE']['^ROWNUM_TABLE'][0] = mini_image_bn
header['FILE']['^ROWNUM_TABLE'][1] = n_lines * n_output_bands + 1
header['FILE']['ROWNUM_TABLE']['ROWS'] = n_output_bands
# Access the second instance of "FILE", which can't be accessed by name
header[-1][1]['TRDR_HK_TABLE'] = 0
header[-1][1]['^TRDR_HK_TABLE'] = 0
#header[-1][1]['FILE_RECORDS'] = n_lines
#header[-1][1]['TRDR_HK_TABLE']['ROWS'] = n_lines
```

%% Cell type:code id: tags:

``` python
class RealIsisCubeLabelEncoder(pvl.encoder.ISISEncoder):
    def encode_time(self, value):
        if value.microsecond:
            second = u'%02d.%06d' % (value.second, value.microsecond)
        else:
            second = u'%02d' % value.second

        time = u'%02d:%02d:%s' % (value.hour, value.minute, second)
        return time
```

%% Cell type:code id: tags:

``` python
label_fn, label_ext = os.path.splitext(crism_file)
out_label = label_fn + '_cropped' + label_ext

grammar = pvl.grammar.ISISGrammar()
grammar.comments+=(("#", "\n"), )
encoder = RealIsisCubeLabelEncoder()
encoder = pvl.encoder.ISISEncoder()
pvl.dump(header, out_label, encoder=encoder, grammar=grammar)
```

%% Output

    6596

%% Cell type:code id: tags:

``` python
with open(mini_image_fn, 'wb+') as f:
    b_reduced_image_data = cropped_image_data.tobytes()
    f.seek(0, 2)
    f.write(b_reduced_image_data)
```

%% Cell type:code id: tags:

``` python
```

%% Cell type:code id: tags:

``` python
header = pvl.load(out_label)
```

%% Cell type:code id: tags:

``` python
header
```

%% Output

    PVLModule([
      ('PDS_VERSION_ID', 'PDS3')
      ('LABEL_REVISION_NOTE',
       '2004-11-22, S. Slavney (GEO); 2005-12-20, H. Taylor (JHU/APL); 2006-04-05, '
       'S. Murchie (JHU/APL); 2006-09-18, P. Cavender (JHU/APL); 2007-02-19, P. '
       'Cavender (JHU/APL); Version 2, new stray light subtraction 2010-06-01, D. '
       'Humm (JHU/APL); Version 3, shutter mirror correction 2010-10-12, C. Hash '
       '(ACT); Version 3, Added data filter control parameters')
      ('DATA_SET_ID', 'MRO-M-CRISM-3-RDR-TARGETED-V1.0')
      ('PRODUCT_ID', 'FRT0001E5C3_07_IF124S_TRR3')
      ('INSTRUMENT_HOST_NAME', 'MARS RECONNAISSANCE ORBITER')
      ('SPACECRAFT_ID', 'MRO')
      ('INSTRUMENT_NAME', 'COMPACT RECONNAISSANCE IMAGING SPECTROMETER FOR MARS')
      ('INSTRUMENT_ID', 'CRISM')
      ('TARGET_NAME', 'MARS')
      ('PRODUCT_TYPE', 'TARGETED_RDR')
      ('PRODUCT_CREATION_TIME',
       datetime.datetime(2011, 6, 8, 10, 52, 30, tzinfo=datetime.timezone.utc))
      ('START_TIME',
       datetime.datetime(2011, 6, 2, 4, 3, 9, 29000, tzinfo=datetime.timezone.utc))
      ('STOP_TIME',
       datetime.datetime(2011, 6, 2, 4, 5, 0, 763000, tzinfo=datetime.timezone.utc))
      ('SPACECRAFT_CLOCK_START_COUNT', '10/0991454621.14521')
      ('SPACECRAFT_CLOCK_STOP_COUNT', '10/0991454732.62633')
      ('ORBIT_NUMBER', None)
      ('OBSERVATION_TYPE', 'FRT')
      ('OBSERVATION_ID', '16#0001E5C3#')
      ('MRO:OBSERVATION_NUMBER', 7)
      ('MRO:ACTIVITY_ID', 'IF124')
      ('MRO:SENSOR_ID', 'S')
      ('MRO:DETECTOR_TEMPERATURE', -53.663)
      ('MRO:OPTICAL_BENCH_TEMPERATURE', -42.348)
      ('MRO:SPECTROMETER_HOUSING_TEMP', -65.178)
      ('MRO:SPHERE_TEMPERATURE', -42.484)
      ('MRO:FPE_TEMPERATURE', 5.269)
      ('PRODUCT_VERSION_ID', '3')
      ('SOURCE_PRODUCT_ID',
       frozenset({'CDR400991452611_SP0042501S_3',
                  'CDR400991452639_BP0042500S_3',
                  'CDR400991452639_BP1018400S_3',
                  'CDR400991454611_BI1018400S_3',
                  'CDR400991454611_UB1018400S_3',
                  'CDR400991454737_BI1018400S_3',
                  'CDR400991454737_UB1018400S_3',
                  'CDR410000000000_SH0000001S_4',
                  'CDR410000000000_SS0000001S_2',
                  'CDR450924300802_DM0000000S_3',
                  'CDR450924300802_NU1000001S_3',
                  'CDR450924300802_SF0000000S_2',
                  'CDR450924300802_TD0000000S_2',
                  'CDR6_0_0991440032_ST_J_0',
                  'CDR6_1_0000000000_AS_S_0',
                  'CDR6_1_0000000000_DB_S_0',
                  'CDR6_1_0000000000_EB_S_0',
                  'CDR6_1_0000000000_GH_S_1',
                  'CDR6_1_0000000000_HD_J_1',
                  'CDR6_1_0000000000_HK_J_1',
                  'CDR6_1_0000000000_HV_J_1',
                  'CDR6_1_0000000000_LC_S_1',
                  'CDR6_1_0000000000_LI_J_0',
                  'CDR6_1_0000000000_VL_S_0',
                  'CDR6_2_0835294537_PP_S_0',
                  'FRT0001E5C3_07_SC124S_EDR0'}))
      ('MRO:INVALID_PIXEL_LOCATION', frozenset())
      ('PRODUCER_INSTITUTION_NAME',
       'JOHNS HOPKINS UNIVERSITY APPLIED PHYSICS LABORATORY')
      ('SOFTWARE_NAME', 'crism_imagecal')
      ('SOFTWARE_VERSION_ID', '2.5.3')
      ('TARGET_CENTER_DISTANCE', Quantity(value=None, units='KM'))
      ('SOLAR_DISTANCE', Quantity(value=213788591.232902, units='KM'))
      ('SOLAR_LONGITUDE', 303.590051)
      ('SHUTTER_MODE_ID', 'OPEN')
      ('LIGHT_SOURCE_NAME', 'NONE')
      ('MRO:CALIBRATION_LAMP_STATUS', 'OFF')
      ('MRO:CALIBRATION_LAMP_LEVEL', 'N/A')
      ('PIXEL_AVERAGING_WIDTH', 1)
      ('MRO:INSTRUMENT_POINTING_MODE', 'DYNAMIC POINTING')
      ('SCAN_MODE_ID', 'SHORT')
      ('MRO:FRAME_RATE', Quantity(value=3.75, units='HZ'))
      ('MRO:EXPOSURE_PARAMETER', 184)
      ('SAMPLING_MODE_ID', 'HYPERSPEC')
      ('COMPRESSION_TYPE', 'NONE')
      ('MRO:WAVELENGTH_FILTER', '0')
      ('MRO:WAVELENGTH_FILE_NAME', 'CDR450924300802_WA0000000S_2.IMG')
      ('MRO:PIXEL_PROC_FILE_NAME', 'CDR6_2_0835294537_PP_S_0.TAB')
      ('MRO:INV_LOOKUP_TABLE_FILE_NAME', 'CDR6_1_0000000000_LI_J_0.TAB')
      ('MRO:ATMO_CORRECTION_FLAG', 'OFF')
      ('MRO:THERMAL_CORRECTION_MODE', 'OFF')
      ('MRO:PHOTOCLIN_CORRECTION_FLAG', 'OFF')
      ('MRO:SPATIAL_RESAMPLING_FLAG', 'OFF')
      ('MRO:SPATIAL_RESAMPLING_FILE', 'N/A')
      ('MRO:SPATIAL_RESCALING_FLAG', 'OFF')
      ('MRO:SPATIAL_RESCALING_FILE', 'N/A')
      ('MRO:SPECTRAL_RESAMPLING_FLAG', 'OFF')
      ('MRO:SPECTRAL_RESAMPLING_FILE', 'N/A')
      ('MRO:HDF_SOFTWARE_NAME', 'crismhdf')
      ('MRO:HDF_SOFTWARE_VERSION_ID', '1.0.5')
      ('MRO:IF_MIN_VALUE', 0.0)
      ('MRO:IF_MAX_VALUE', 1.0)
      ('MRO:TRACE_MIN_VALUE', 0.01)
      ('MRO:TRACE_MAX_VALUE', 100.0)
      ('MRO:REFZ_MEDIAN_BOX_WIDTH', 15)
      ('MRO:REFZ_SMOOTH_BOX_WIDTH', 5)
      ('MRO:FRAM_STAT_MEDIAN_BOX_WIDTH', 5)
      ('MRO:FRAM_STAT_MIN_DEVIATION', 0.005)
      ('MRO:FRAM_STAT_MEDIAN_CONF_LVL', 0.999999)
      ('MRO:FRAM_STAT_IQR_CONF_LVL', 0.999999)
      ('MRO:RSC_REF_XY_MEDIAN_WIDTH', 15)
      ('MRO:RSC_REF_XY_SMOOTH_WIDTH', 5)
      ('MRO:RSC_REF_YZ_MEDIAN_WIDTH', 15)
      ('MRO:RSC_REF_YZ_SMOOTH_WIDTH', 5)
      ('MRO:RSC_RATIO_XY_MEDIAN_WIDTH', 25)
      ('MRO:RSC_RATIO_XY_SMOOTH_WIDTH', 13)
      ('MRO:RSC_RES_XY_PLY_ORDER', 5)
      ('MRO:RSC_RES_XY_PLY_EXTND_WIDTH', 38)
      ('MRO:LOG_XFORM_NEG_CLIP_VALUE', 'N/A')
      ('MRO:IKF_NUM_REGIONS', 'N/A')
      ('MRO:IKF_START_CHANNEL', ['N/A', 'N/A'])
      ('MRO:IKF_STOP_CHANNEL', ['N/A', 'N/A'])
      ('MRO:IKF_CONFIDENCE_LEVEL', ['N/A', 'N/A'])
      ('MRO:IKF_WEIGHTING_STDDEV', ['N/A', 'N/A'])
      ('MRO:IKF_KERNEL_SIZE_X', ['N/A', 'N/A'])
      ('MRO:IKF_KERNEL_SIZE_Y', ['N/A', 'N/A'])
      ('MRO:IKF_KERNEL_SIZE_Z', ['N/A', 'N/A'])
      ('MRO:IKF_MODEL_ORDER_X', ['N/A', 'N/A'])
      ('MRO:IKF_MODEL_ORDER_Y', ['N/A', 'N/A'])
      ('MRO:IKF_MODEL_ORDER_Z', ['N/A', 'N/A'])
      ('FILE',
       {'FILE_RECORDS': 108,
        'IMAGE': {'BANDS': 107,
                  'BAND_STORAGE_TYPE': 'LINE_INTERLEAVED',
                  'LINES': 1,
                  'LINE_SAMPLES': 640,
                  'SAMPLE_BITS': 32,
                  'SAMPLE_TYPE': 'PC_REAL',
                  'UNIT': 'I_OVER_F'},
        'RECORD_BYTES': 2560,
        'RECORD_TYPE': 'FIXED_LENGTH',
        'ROWNUM_TABLE': {'COLUMN': {'BIT_MASK': 511,
                                    'BYTES': 2,
                                    'COLUMN_NUMBER': 1,
                                    'DATA_TYPE': 'MSB_UNSIGNED_INTEGER',
                                    'DESCRIPTION': 'Detector row number from which '
                                                   'the data was taken.',
                                    'NAME': 'DETECTOR_ROW_NUMBER',
                                    'START_BYTE': 1},
                         'COLUMNS': 1,
                         'DESCRIPTION': 'The detector is subsampled in the spectral '
                                        'direction by selecting specific rows to be '
                                        'downlinked. This table provides a list of '
                                        'the rows selected for all frames in this '
                                        'multidimensional image cube.',
                         'INTERCHANGE_FORMAT': 'BINARY',
                         'NAME': 'SELECTED ROWS FROM DETECTOR',
                         'ROWS': 107,
                         'ROW_BYTES': 2},
        '^IMAGE': 'frt0001e5c3_07_if124s_trr3_cropped.img',
        '^ROWNUM_TABLE': ['frt0001e5c3_07_if124s_trr3_cropped.img', 108]})
      ('FILE',
       {'FILE_RECORDS': 420,
        'RECORD_BYTES': 1221,
        'RECORD_TYPE': 'FIXED_LENGTH',
        'TRDR_HK_TABLE': 0,
        '^TRDR_HK_TABLE': 0})
    ])

%% Cell type:code id: tags:

``` python
```
+0 −0
Original line number Diff line number Diff line
+43 −234

File changed.

Preview size limit exceeded, changes collapsed.

Loading