Skip to content
Snippets Groups Projects
Commit c3a602a5 authored by Jesse Mapel's avatar Jesse Mapel Committed by GitHub
Browse files

Updated Mini RF to use the unified formatter (#385)

* Made mini rf test image smaller

* Updated unified formatter for SAR

* Updated MiniRF driver
parent 6485af5e
No related branches found
No related tags found
No related merge requests found
...@@ -525,7 +525,11 @@ class LroMiniRfIsisLabelNaifSpiceDriver(Radar, NaifSpice, IsisLabel, Driver): ...@@ -525,7 +525,11 @@ class LroMiniRfIsisLabelNaifSpiceDriver(Radar, NaifSpice, IsisLabel, Driver):
str str
The short text name for the instrument The short text name for the instrument
""" """
return super().instrument_id id_lookup = {
"MRFLRO": "LRO_MINIRF"
}
return id_lookup[super().instrument_id]
@property @property
def wavelength(self): def wavelength(self):
...@@ -637,3 +641,17 @@ class LroMiniRfIsisLabelNaifSpiceDriver(Radar, NaifSpice, IsisLabel, Driver): ...@@ -637,3 +641,17 @@ class LroMiniRfIsisLabelNaifSpiceDriver(Radar, NaifSpice, IsisLabel, Driver):
left or right left or right
""" """
return self.label['IsisCube']['Instrument']['LookDirection'].lower() return self.label['IsisCube']['Instrument']['LookDirection'].lower()
@property
def sensor_frame_id(self):
"""
Returns the Naif ID code for the sensor reference frame
We replace this with the target frame ID because the sensor operates
entirely in the target reference frame
Returns
-------
: int
Naif ID code for the sensor frame
"""
return self.target_frame_id
...@@ -5,7 +5,7 @@ from scipy.interpolate import interp1d, BPoly ...@@ -5,7 +5,7 @@ from scipy.interpolate import interp1d, BPoly
from networkx.algorithms.shortest_paths.generic import shortest_path from networkx.algorithms.shortest_paths.generic import shortest_path
from ale.transformation import FrameChain from ale.transformation import FrameChain
from ale.base.type_sensor import LineScanner, Framer from ale.base.type_sensor import LineScanner, Framer, Radar
from ale.rotation import ConstantRotation, TimeDependentRotation from ale.rotation import ConstantRotation, TimeDependentRotation
def to_isd(driver): def to_isd(driver):
...@@ -28,24 +28,6 @@ def to_isd(driver): ...@@ -28,24 +28,6 @@ def to_isd(driver):
meta_data['isis_camera_version'] = driver.sensor_model_version meta_data['isis_camera_version'] = driver.sensor_model_version
# interiror orientation
meta_data['naif_keywords'] = driver.naif_keywords
meta_data['detector_sample_summing'] = driver.sample_summing
meta_data['detector_line_summing'] = driver.line_summing
meta_data['focal_length_model'] = {
'focal_length' : driver.focal_length
}
meta_data['detector_center'] = {
'line' : driver.detector_center_line,
'sample' : driver.detector_center_sample
}
meta_data['starting_detector_line'] = driver.detector_start_line
meta_data['starting_detector_sample'] = driver.detector_start_sample
meta_data['focal2pixel_lines'] = driver.focal2pixel_lines
meta_data['focal2pixel_samples'] = driver.focal2pixel_samples
meta_data['optical_distortion'] = driver.usgscsm_distortion_model
# general information # general information
meta_data['image_lines'] = driver.image_lines meta_data['image_lines'] = driver.image_lines
meta_data['image_samples'] = driver.image_samples meta_data['image_samples'] = driver.image_samples
...@@ -73,10 +55,20 @@ def to_isd(driver): ...@@ -73,10 +55,20 @@ def to_isd(driver):
meta_data['name_model'] = 'USGS_ASTRO_FRAME_SENSOR_MODEL' meta_data['name_model'] = 'USGS_ASTRO_FRAME_SENSOR_MODEL'
meta_data['center_ephemeris_time'] = driver.center_ephemeris_time meta_data['center_ephemeris_time'] = driver.center_ephemeris_time
frame_chain = driver.frame_chain # SAR sensor model specifics
sensor_frame = driver.sensor_frame_id if isinstance(driver, Radar):
target_frame = driver.target_frame_id meta_data['name_model'] = 'USGS_ASTRO_SAR_SENSOR_MODEL'
meta_data['starting_ephemeris_time'] = driver.ephemeris_start_time
meta_data['ending_ephemeris_time'] = driver.ephemeris_stop_time
meta_data['center_ephemeris_time'] = driver.center_ephemeris_time
meta_data['wavelength'] = driver.wavelength
meta_data['line_exposure_duration'] = driver.line_exposure_duration
meta_data['scaled_pixel_width'] = driver.scaled_pixel_width
meta_data['range_conversion_times'] = driver.range_conversion_times
meta_data['range_conversion_coefficients'] = driver.range_conversion_coefficients
meta_data['look_direction'] = driver.look_direction
# Target body
body_radii = driver.target_body_radii body_radii = driver.target_body_radii
meta_data['radii'] = { meta_data['radii'] = {
'semimajor' : body_radii[0], 'semimajor' : body_radii[0],
...@@ -84,29 +76,8 @@ def to_isd(driver): ...@@ -84,29 +76,8 @@ def to_isd(driver):
'unit' : 'km' 'unit' : 'km'
} }
instrument_pointing = {} frame_chain = driver.frame_chain
source_frame, destination_frame, time_dependent_sensor_frame = frame_chain.last_time_dependent_frame_between(1, sensor_frame) target_frame = driver.target_frame_id
# Reverse the frame order because ISIS orders frames as
# (destination, intermediate, ..., intermediate, source)
instrument_pointing['time_dependent_frames'] = shortest_path(frame_chain, destination_frame, 1)
time_dependent_rotation = frame_chain.compute_rotation(1, destination_frame)
instrument_pointing['ck_table_start_time'] = time_dependent_rotation.times[0]
instrument_pointing['ck_table_end_time'] = time_dependent_rotation.times[-1]
instrument_pointing['ck_table_original_size'] = len(time_dependent_rotation.times)
instrument_pointing['ephemeris_times'] = time_dependent_rotation.times
instrument_pointing['quaternions'] = time_dependent_rotation.quats[:, [3, 0, 1, 2]]
instrument_pointing['angular_velocities'] = time_dependent_rotation.av
# reference frame should be the last frame in the chain
instrument_pointing["reference_frame"] = instrument_pointing['time_dependent_frames'][-1]
# Reverse the frame order because ISIS orders frames as
# (destination, intermediate, ..., intermediate, source)
instrument_pointing['constant_frames'] = shortest_path(frame_chain, sensor_frame, destination_frame)
constant_rotation = frame_chain.compute_rotation(destination_frame, sensor_frame)
instrument_pointing['constant_rotation'] = constant_rotation.rotation_matrix().flatten()
meta_data['instrument_pointing'] = instrument_pointing
body_rotation = {} body_rotation = {}
source_frame, destination_frame, time_dependent_target_frame = frame_chain.last_time_dependent_frame_between(target_frame, 1) source_frame, destination_frame, time_dependent_target_frame = frame_chain.last_time_dependent_frame_between(target_frame, 1)
...@@ -133,6 +104,52 @@ def to_isd(driver): ...@@ -133,6 +104,52 @@ def to_isd(driver):
body_rotation["reference_frame"] = destination_frame body_rotation["reference_frame"] = destination_frame
meta_data['body_rotation'] = body_rotation meta_data['body_rotation'] = body_rotation
if isinstance(driver, LineScanner) or isinstance(driver, Framer):
# sensor orientation
sensor_frame = driver.sensor_frame_id
instrument_pointing = {}
source_frame, destination_frame, time_dependent_sensor_frame = frame_chain.last_time_dependent_frame_between(1, sensor_frame)
# Reverse the frame order because ISIS orders frames as
# (destination, intermediate, ..., intermediate, source)
instrument_pointing['time_dependent_frames'] = shortest_path(frame_chain, destination_frame, 1)
time_dependent_rotation = frame_chain.compute_rotation(1, destination_frame)
instrument_pointing['ck_table_start_time'] = time_dependent_rotation.times[0]
instrument_pointing['ck_table_end_time'] = time_dependent_rotation.times[-1]
instrument_pointing['ck_table_original_size'] = len(time_dependent_rotation.times)
instrument_pointing['ephemeris_times'] = time_dependent_rotation.times
instrument_pointing['quaternions'] = time_dependent_rotation.quats[:, [3, 0, 1, 2]]
instrument_pointing['angular_velocities'] = time_dependent_rotation.av
# reference frame should be the last frame in the chain
instrument_pointing["reference_frame"] = instrument_pointing['time_dependent_frames'][-1]
# Reverse the frame order because ISIS orders frames as
# (destination, intermediate, ..., intermediate, source)
instrument_pointing['constant_frames'] = shortest_path(frame_chain, sensor_frame, destination_frame)
constant_rotation = frame_chain.compute_rotation(destination_frame, sensor_frame)
instrument_pointing['constant_rotation'] = constant_rotation.rotation_matrix().flatten()
meta_data['instrument_pointing'] = instrument_pointing
# interiror orientation
meta_data['naif_keywords'] = driver.naif_keywords
meta_data['detector_sample_summing'] = driver.sample_summing
meta_data['detector_line_summing'] = driver.line_summing
meta_data['focal_length_model'] = {
'focal_length' : driver.focal_length
}
meta_data['detector_center'] = {
'line' : driver.detector_center_line,
'sample' : driver.detector_center_sample
}
meta_data['starting_detector_line'] = driver.detector_start_line
meta_data['starting_detector_sample'] = driver.detector_start_sample
meta_data['focal2pixel_lines'] = driver.focal2pixel_lines
meta_data['focal2pixel_samples'] = driver.focal2pixel_samples
meta_data['optical_distortion'] = driver.usgscsm_distortion_model
j2000_rotation = frame_chain.compute_rotation(target_frame, 1) j2000_rotation = frame_chain.compute_rotation(target_frame, 1)
instrument_position = {} instrument_position = {}
...@@ -146,7 +163,7 @@ def to_isd(driver): ...@@ -146,7 +163,7 @@ def to_isd(driver):
positions = j2000_rotation.apply_at(positions, times)/1000 positions = j2000_rotation.apply_at(positions, times)/1000
instrument_position['positions'] = positions instrument_position['positions'] = positions
instrument_position['velocities'] = velocities instrument_position['velocities'] = velocities
instrument_position["reference_frame"] = destination_frame instrument_position["reference_frame"] = j2000_rotation.dest
meta_data['instrument_position'] = instrument_position meta_data['instrument_position'] = instrument_position
...@@ -161,7 +178,7 @@ def to_isd(driver): ...@@ -161,7 +178,7 @@ def to_isd(driver):
positions = j2000_rotation.apply_at(positions, times)/1000 positions = j2000_rotation.apply_at(positions, times)/1000
sun_position['positions'] = positions sun_position['positions'] = positions
sun_position['velocities'] = velocities sun_position['velocities'] = velocities
sun_position["reference_frame"] = destination_frame sun_position["reference_frame"] = j2000_rotation.dest
meta_data['sun_position'] = sun_position meta_data['sun_position'] = sun_position
......
...@@ -7,7 +7,7 @@ Object = IsisCube ...@@ -7,7 +7,7 @@ Object = IsisCube
Group = Dimensions Group = Dimensions
Samples = 2367 Samples = 2367
Lines = 64576 Lines = 700
Bands = 1 Bands = 1
End_Group End_Group
...@@ -27,7 +27,7 @@ Object = IsisCube ...@@ -27,7 +27,7 @@ Object = IsisCube
InstrumentId = MRFLRO InstrumentId = MRFLRO
TargetName = MOON TargetName = MOON
StartTime = 2010-04-25T04:22:31.244874 StartTime = 2010-04-25T04:22:31.244874
StopTime = 2010-04-25T04:27:35.0375 StopTime = 2010-04-25T04:22:34.537874
SpacecraftClockStartCount = UNK SpacecraftClockStartCount = UNK
SpacecraftClockStopCount = UNK SpacecraftClockStopCount = UNK
OrbitNumber = 3821 OrbitNumber = 3821
......
Source diff could not be displayed: it is too large. Options to address this: view the blob.
...@@ -47,7 +47,8 @@ def test_load(test_kernels, label_type, image): ...@@ -47,7 +47,8 @@ def test_load(test_kernels, label_type, image):
# Test load of MiniRF labels # Test load of MiniRF labels
def test_load_minirf(test_kernels): def test_load_minirf(test_kernels):
label_file = get_image_label('03821_16N196_S1', 'isis3') label_file = get_image_label('03821_16N196_S1', 'isis3')
isd_str = ale.loads(label_file, props={'kernels': test_kernels['03821_16N196_S1']}, formatter='usgscsm', verbose=True) # isd_str = ale.loads(label_file, props={'kernels': test_kernels['03821_16N196_S1']}, formatter='usgscsm', verbose=True)
isd_str = ale.loads(label_file, props={'kernels': test_kernels['03821_16N196_S1']}, verbose=True)
isd_obj = json.loads(isd_str) isd_obj = json.loads(isd_str)
print(json.dumps(isd_obj, indent=2)) print(json.dumps(isd_obj, indent=2))
assert compare_dicts(isd_obj, image_dict['03821_16N196_S1']) == [] assert compare_dicts(isd_obj, image_dict['03821_16N196_S1']) == []
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment