diff --git a/ale/formatters/formatter.py b/ale/formatters/formatter.py index ee40cf0bd389111aaed8a55722fa8a30f643ca3a..b33287bbf30d0132a81a080e7d57a5a24b23cb71 100644 --- a/ale/formatters/formatter.py +++ b/ale/formatters/formatter.py @@ -23,11 +23,10 @@ def to_isd(driver): The ISIS compatible meta data as a JSON encoded string. """ - meta_data = {} meta_data['isis_camera_version'] = driver.sensor_model_version - + # general information meta_data['image_lines'] = driver.image_lines meta_data['image_samples'] = driver.image_samples @@ -45,10 +44,9 @@ def to_isd(driver): meta_data['interpolation_method'] = 'lagrange' start_lines, start_times, scan_rates = driver.line_scan_rate - center_time = driver.center_ephemeris_time meta_data['line_scan_rate'] = [[line, time, rate] for line, time, rate in zip(start_lines, start_times, scan_rates)] meta_data['starting_ephemeris_time'] = driver.ephemeris_start_time - meta_data['center_ephemeris_time'] = center_time + meta_data['center_ephemeris_time'] = driver.center_ephemeris_time # frame sensor model specifics if isinstance(driver, Framer): @@ -116,38 +114,41 @@ def to_isd(driver): body_rotation["reference_frame"] = destination_frame meta_data['body_rotation'] = body_rotation - if isinstance(driver, LineScanner) or isinstance(driver, Framer) or isinstance(driver, PushFrame): - # sensor orientation - sensor_frame = driver.sensor_frame_id + # 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) + 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['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 - # 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 + # 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 + + if isinstance(driver,LineScanner) or isinstance(driver, Framer) or isinstance(driver, PushFrame): - # 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 } @@ -155,13 +156,14 @@ def to_isd(driver): '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 + meta_data['starting_detector_line'] = driver.detector_start_line + meta_data['starting_detector_sample'] = driver.detector_start_sample + + j2000_rotation = frame_chain.compute_rotation(target_frame, 1) instrument_position = {} diff --git a/tests/pytests/data/isds/lrominirf_isd.json b/tests/pytests/data/isds/lrominirf_isd.json index 944ef90601a18c7681670def4d1306c36328f25c..48d4dff04ac213fa7b4411ddd0f8df804dd75c27 100644 --- a/tests/pytests/data/isds/lrominirf_isd.json +++ b/tests/pytests/data/isds/lrominirf_isd.json @@ -366,6 +366,306 @@ ], "reference_frame": 1 }, + "instrument_pointing": { + "time_dependent_frames": [ + 31006, + 1 + ], + "ck_table_start_time": 325441417.4304223, + "ck_table_end_time": 325441420.7234223, + "ck_table_original_size": 14, + "ephemeris_times": [ + 325441417.4304223, + 325441417.68373, + 325441417.9370377, + 325441418.1903454, + 325441418.44365305, + 325441418.69696075, + 325441418.95026845, + 325441419.20357615, + 325441419.45688385, + 325441419.71019155, + 325441419.9634992, + 325441420.2168069, + 325441420.4701146, + 325441420.7234223 + ], + "quaternions": [ + [ + -0.9759213987320261, + 0.19770025384845868, + 0.030876383685049705, + -0.08682558410810928 + ], + [ + -0.9759214279969775, + 0.19770026426283943, + 0.0308763171549909, + -0.08682525511444422 + ], + [ + -0.9759214572618375, + 0.1977002746772048, + 0.030876250624883594, + -0.08682492612054747 + ], + [ + -0.9759214865265868, + 0.1977002850915476, + 0.030876184094772753, + -0.08682459712664094 + ], + [ + -0.9759215157912055, + 0.19770029550586102, + 0.030876117564703306, + -0.08682426813294661 + ], + [ + -0.9759215450557329, + 0.19770030592015894, + 0.030876051034585378, + -0.08682393913902053 + ], + [ + -0.9759215743201495, + 0.1977003163344344, + 0.030875984504463907, + -0.08682361014508465 + ], + [ + -0.9759216035844552, + 0.19770032674868743, + 0.030875917974338897, + -0.08682328115113902 + ], + [ + -0.9759216328486501, + 0.197700337162918, + 0.030875851444210352, + -0.0868229521571836 + ], + [ + -0.975921662112714, + 0.19770034757711893, + 0.030875784914123194, + -0.08682262316344026 + ], + [ + -0.975921691376687, + 0.1977003579913045, + 0.030875718383987543, + -0.08682229416946535 + ], + [ + -0.9759217206405492, + 0.19770036840546765, + 0.030875651853848364, + -0.0868219651754806 + ], + [ + -0.9759217499043004, + 0.19770037881960828, + 0.03087558532370564, + -0.08682163618148604 + ], + [ + -0.9759217791679209, + 0.19770038923371935, + 0.030875518793604312, + -0.08682130718770362 + ] + ], + "angular_velocities": [ + [ + 6.916139484934965e-08, + -1.0404590249347596e-06, + 2.448709649861581e-06 + ], + [ + 6.916139478040356e-08, + -1.0404590253046157e-06, + 2.448709649728261e-06 + ], + [ + 6.916139471145752e-08, + -1.0404590256744724e-06, + 2.4487096495949383e-06 + ], + [ + 6.916139464251199e-08, + -1.0404590260443285e-06, + 2.4487096494616174e-06 + ], + [ + 6.916139457356657e-08, + -1.0404590264141854e-06, + 2.4487096493282965e-06 + ], + [ + 6.916139450462146e-08, + -1.0404590267840425e-06, + 2.4487096491949765e-06 + ], + [ + 6.916139443567654e-08, + -1.0404590271539001e-06, + 2.448709649061655e-06 + ], + [ + 6.916139436673195e-08, + -1.0404590275237573e-06, + 2.448709648928333e-06 + ], + [ + 6.916139429778765e-08, + -1.0404590278936155e-06, + 2.4487096487950135e-06 + ], + [ + 6.916139422884356e-08, + -1.0404590282634733e-06, + 2.448709648661692e-06 + ], + [ + 6.916139415989972e-08, + -1.0404590286333308e-06, + 2.4487096485283713e-06 + ], + [ + 6.916139409095615e-08, + -1.040459029003189e-06, + 2.4487096483950496e-06 + ], + [ + 6.916139402201287e-08, + -1.0404590293730477e-06, + 2.4487096482617296e-06 + ], + [ + 6.916139395306979e-08, + -1.0404590297429065e-06, + 2.4487096481284087e-06 + ] + ], + "reference_frame": 1, + "constant_frames": [ + 31001, + 31007, + 31006 + ], + "constant_rotation": [ + 0.9999998732547144, + -0.00032928542237557133, + 0.00038086961867138755, + 0.00032928600021094723, + 0.9999999457843062, + -1.4544409378362713e-06, + -0.00038086911909607826, + 1.5798557868269087e-06, + 0.9999999274681067 + ] + }, + "naif_keywords": { + "BODY301_RADII": [ + 1737.4, + 1737.4, + 1737.4 + ], + "BODY_FRAME_CODE": 31001, + "BODY_CODE": 301, + "TKFRAME_-85700_UNITS": "DEGREES", + "TKFRAME_-85700_ANGLES": [ + -47.6, + 0.0, + 0.0 + ], + "FRAME_-85700_CENTER": -85.0, + "INS-85700_TRANSX": [ + 0.0, + 0.0, + 1.0 + ], + "INS-85700_TRANSY": [ + 0.0, + 1.0, + 0.0 + ], + "FRAME_-85700_NAME": "LRO_MINIRF", + "INS-85700_ITRANSL": [ + 0.0, + 1.0, + 0.0 + ], + "TKFRAME_-85700_AXES": [ + 1.0, + 2.0, + 3.0 + ], + "TKFRAME_-85700_SPEC": "ANGLES", + "INS-85700_ITRANSS": [ + 0.0, + 0.0, + 1.0 + ], + "FRAME_-85700_CLASS_ID": -85700.0, + "FRAME_-85700_CLASS": 4.0, + "INS-85700_CK_FRAME_ID": -85700.0, + "TKFRAME_-85700_RELATIVE": "LRO_SC_BUS", + "INS-85700_CK_REFERENCE_ID": 1.0, + "BODY301_POLE_RA": [ + 269.9949, + 0.0031, + 0.0 + ], + "BODY301_NUT_PREC_PM": [ + 3.561, + 0.1208, + -0.0642, + 0.0158, + 0.0252, + -0.0066, + -0.0047, + -0.0046, + 0.0028, + 0.0052 + ], + "BODY301_NUT_PREC_RA": [ + -3.8787000000000003, + -0.1204, + 0.07, + -0.0172, + 0.0, + 0.0072, + 0.0, + 0.0, + 0.0, + -0.0052 + ], + "BODY301_LONG_AXIS": 0.0, + "BODY301_NUT_PREC_DEC": [ + 1.5419, + 0.0239, + -0.0278, + 0.0068, + 0.0, + -0.0029, + 0.0009, + 0.0, + 0.0, + 0.0008 + ], + "BODY301_POLE_DEC": [ + 66.5392, + 0.013, + 0.0 + ], + "BODY301_PM": [ + 38.3213, + 13.17635815, + -1.3999999999999999e-12 + ] + }, "instrument_position": { "spk_table_start_time": 325441417.4304223, "spk_table_end_time": 325441420.7234223, @@ -389,11 +689,11 @@ "positions": [ [ -1602.0413180595058, - -516.3519355717643, + -516.3519355717642, 626.5629214314301 ], [ - -1602.2222753426279, + -1602.222275342628, -516.2237329096426, 626.209036267832 ], @@ -404,7 +704,7 @@ ], [ -1602.5839288255436, - -515.9672435181461, + -515.967243518146, 625.5011637017926 ], [ @@ -413,9 +713,9 @@ 625.1471764111179 ], [ - -1602.9452349872354, + -1602.9452349872352, -515.7106407008863, - 624.7931556915754 + 624.7931556915755 ], [ -1603.1257570271464, @@ -423,24 +723,24 @@ 624.4391002690046 ], [ - -1603.3061919349582, + -1603.306191934958, -515.4539272293902, 624.0850108587218 ], [ - -1603.48653981498, - -515.3255284898222, - 623.7308874532773 + -1603.4865398149805, + -515.3255284898223, + 623.7308874532774 ], [ - -1603.6668005479962, + -1603.6668005479964, -515.1971017775081, - 623.3767301122807 + 623.3767301122808 ], [ -1603.846974134003, -515.0686471073512, - 623.022538910241 + 623.0225389102411 ], [ -1604.0270606624097, @@ -448,30 +748,30 @@ 622.6683137055942 ], [ - -1604.2070600289019, + -1604.2070600289017, -514.8116538041043, - 622.3140546101049 + 622.314054610105 ], [ - -1604.3869722781783, - -514.6831152306211, - 621.9597616237739 + -1604.3869722781785, + -514.6831152306212, + 621.9597616237738 ] ], "velocities": [ [ - -0.7145494289773817, + -0.7145494289773819, 0.5060593097613282, - -1.396988974527007 + -1.3969889745270072 ], [ - -0.7142058550911952, - 0.506169991152465, - -1.3971235950133665 + -0.7142058550911954, + 0.5061699911524653, + -1.3971235950133671 ], [ -0.7138622425358848, - 0.5062806449448201, + 0.5062806449448202, -1.3972581395953048 ], [ @@ -480,17 +780,17 @@ -1.3973926082640118 ], [ - -0.7131749015619412, - 0.5065018696832321, - -1.397527000979457 + -0.7131749015619413, + 0.5065018696832322, + -1.3975270009794571 ], [ - -0.7128311731757869, - 0.5066124406175628, - -1.397661317765054 + -0.7128311731757871, + 0.5066124406175629, + -1.3976613177650545 ], [ - -0.7124874061027588, + -0.712487406102759, 0.5067229839556711, -1.3977955586435142 ], @@ -501,13 +801,13 @@ ], [ -0.7117997562042009, - 0.5069439877415162, - -1.3980638125508031 + 0.5069439877415163, + -1.3980638125508034 ], [ - -0.7114558734106707, - 0.5070544481775854, - -1.3981978255625913 + -0.7114558734106708, + 0.5070544481775853, + -1.3981978255625915 ], [ -0.711111952156552, @@ -516,17 +816,17 @@ ], [ -0.7107679922960224, - 0.5072752860807646, + 0.5072752860807647, -1.3984656236281483 ], [ - -0.7104239939260297, - 0.5073856635621689, + -0.7104239939260296, + 0.5073856635621687, -1.398599408696237 ], [ - -0.7100799570625971, - 0.507496013380294, + -0.710079957062597, + 0.5074960133802943, -1.3987331177658686 ] ], @@ -541,18 +841,18 @@ ], "positions": [ [ - 124045259.44540879, + 124045259.4454088, 78574027.41897403, - 34095053.07306479 + 34095053.0730648 ] ], "velocities": [ [ -16.302884180886178, 23.506531323358008, - 10.232698472917255 + 10.232698472917269 ] ], "reference_frame": 1 } -} +} \ No newline at end of file