Orbit Data Messages (CCSDS 502.0-B-3)
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

odm: rename find_epoch/find_float (merlint E331)

+45 -45
+45 -45
lib/opm.ml
··· 155 155 156 156 let find key pairs = List.assoc_opt key pairs 157 157 158 - let find_epoch key pairs = 158 + let epoch key pairs = 159 159 match find key pairs with 160 160 | Some v -> ( 161 161 match Kvn.parse_epoch v with Some t -> t | None -> Ptime.epoch) 162 162 | None -> Ptime.epoch 163 163 164 - let find_float key pairs = 164 + let float_val key pairs = 165 165 match find key pairs with Some v -> float_of v | None -> None 166 166 167 - let find_float_or key default pairs = 168 - match find_float key pairs with Some f -> f | None -> default 167 + let float_or key default pairs = 168 + match float_val key pairs with Some f -> f | None -> default 169 169 170 170 let parse_header pairs = 171 171 { ··· 194 194 195 195 let parse_keplerian pairs = 196 196 { 197 - semi_major_axis = find_float_or "SEMI_MAJOR_AXIS" 0.0 pairs; 198 - eccentricity = find_float_or "ECCENTRICITY" 0.0 pairs; 199 - inclination = find_float_or "INCLINATION" 0.0 pairs; 200 - ra_of_asc_node = find_float_or "RA_OF_ASC_NODE" 0.0 pairs; 201 - arg_of_pericenter = find_float_or "ARG_OF_PERICENTER" 0.0 pairs; 202 - true_anomaly = find_float "TRUE_ANOMALY" pairs; 203 - mean_anomaly = find_float "MEAN_ANOMALY" pairs; 204 - gm = find_float "GM" pairs; 197 + semi_major_axis = float_or "SEMI_MAJOR_AXIS" 0.0 pairs; 198 + eccentricity = float_or "ECCENTRICITY" 0.0 pairs; 199 + inclination = float_or "INCLINATION" 0.0 pairs; 200 + ra_of_asc_node = float_or "RA_OF_ASC_NODE" 0.0 pairs; 201 + arg_of_pericenter = float_or "ARG_OF_PERICENTER" 0.0 pairs; 202 + true_anomaly = float_val "TRUE_ANOMALY" pairs; 203 + mean_anomaly = float_val "MEAN_ANOMALY" pairs; 204 + gm = float_val "GM" pairs; 205 205 } 206 206 207 207 let parse_cartesian pairs epoch = 208 208 { 209 209 epoch; 210 - x = find_float_or "X" 0.0 pairs; 211 - y = find_float_or "Y" 0.0 pairs; 212 - z = find_float_or "Z" 0.0 pairs; 213 - x_dot = find_float_or "X_DOT" 0.0 pairs; 214 - y_dot = find_float_or "Y_DOT" 0.0 pairs; 215 - z_dot = find_float_or "Z_DOT" 0.0 pairs; 210 + x = float_or "X" 0.0 pairs; 211 + y = float_or "Y" 0.0 pairs; 212 + z = float_or "Z" 0.0 pairs; 213 + x_dot = float_or "X_DOT" 0.0 pairs; 214 + y_dot = float_or "Y_DOT" 0.0 pairs; 215 + z_dot = float_or "Z_DOT" 0.0 pairs; 216 216 } 217 217 218 218 let parse_spacecraft pairs = 219 - let mass = find_float "MASS" pairs in 220 - let solar_rad_area = find_float "SOLAR_RAD_AREA" pairs in 221 - let solar_rad_coeff = find_float "SOLAR_RAD_COEFF" pairs in 222 - let drag_area = find_float "DRAG_AREA" pairs in 223 - let drag_coeff = find_float "DRAG_COEFF" pairs in 219 + let mass = float_val "MASS" pairs in 220 + let solar_rad_area = float_val "SOLAR_RAD_AREA" pairs in 221 + let solar_rad_coeff = float_val "SOLAR_RAD_COEFF" pairs in 222 + let drag_area = float_val "DRAG_AREA" pairs in 223 + let drag_coeff = float_val "DRAG_COEFF" pairs in 224 224 match (mass, solar_rad_area, solar_rad_coeff, drag_area, drag_coeff) with 225 225 | None, None, None, None, None -> None 226 226 | _ -> Some { mass; solar_rad_area; solar_rad_coeff; drag_area; drag_coeff } ··· 231 231 Some 232 232 { 233 233 cov_ref_frame = find "COV_REF_FRAME" pairs; 234 - cx_x = find_float_or "CX_X" 0.0 pairs; 235 - cy_x = find_float_or "CY_X" 0.0 pairs; 236 - cy_y = find_float_or "CY_Y" 0.0 pairs; 237 - cz_x = find_float_or "CZ_X" 0.0 pairs; 238 - cz_y = find_float_or "CZ_Y" 0.0 pairs; 239 - cz_z = find_float_or "CZ_Z" 0.0 pairs; 240 - cx_dot_x = find_float_or "CX_DOT_X" 0.0 pairs; 241 - cx_dot_y = find_float_or "CX_DOT_Y" 0.0 pairs; 242 - cx_dot_z = find_float_or "CX_DOT_Z" 0.0 pairs; 243 - cx_dot_x_dot = find_float_or "CX_DOT_X_DOT" 0.0 pairs; 244 - cy_dot_x = find_float_or "CY_DOT_X" 0.0 pairs; 245 - cy_dot_y = find_float_or "CY_DOT_Y" 0.0 pairs; 246 - cy_dot_z = find_float_or "CY_DOT_Z" 0.0 pairs; 247 - cy_dot_x_dot = find_float_or "CY_DOT_X_DOT" 0.0 pairs; 248 - cy_dot_y_dot = find_float_or "CY_DOT_Y_DOT" 0.0 pairs; 249 - cz_dot_x = find_float_or "CZ_DOT_X" 0.0 pairs; 250 - cz_dot_y = find_float_or "CZ_DOT_Y" 0.0 pairs; 251 - cz_dot_z = find_float_or "CZ_DOT_Z" 0.0 pairs; 252 - cz_dot_x_dot = find_float_or "CZ_DOT_X_DOT" 0.0 pairs; 253 - cz_dot_y_dot = find_float_or "CZ_DOT_Y_DOT" 0.0 pairs; 254 - cz_dot_z_dot = find_float_or "CZ_DOT_Z_DOT" 0.0 pairs; 234 + cx_x = float_or "CX_X" 0.0 pairs; 235 + cy_x = float_or "CY_X" 0.0 pairs; 236 + cy_y = float_or "CY_Y" 0.0 pairs; 237 + cz_x = float_or "CZ_X" 0.0 pairs; 238 + cz_y = float_or "CZ_Y" 0.0 pairs; 239 + cz_z = float_or "CZ_Z" 0.0 pairs; 240 + cx_dot_x = float_or "CX_DOT_X" 0.0 pairs; 241 + cx_dot_y = float_or "CX_DOT_Y" 0.0 pairs; 242 + cx_dot_z = float_or "CX_DOT_Z" 0.0 pairs; 243 + cx_dot_x_dot = float_or "CX_DOT_X_DOT" 0.0 pairs; 244 + cy_dot_x = float_or "CY_DOT_X" 0.0 pairs; 245 + cy_dot_y = float_or "CY_DOT_Y" 0.0 pairs; 246 + cy_dot_z = float_or "CY_DOT_Z" 0.0 pairs; 247 + cy_dot_x_dot = float_or "CY_DOT_X_DOT" 0.0 pairs; 248 + cy_dot_y_dot = float_or "CY_DOT_Y_DOT" 0.0 pairs; 249 + cz_dot_x = float_or "CZ_DOT_X" 0.0 pairs; 250 + cz_dot_y = float_or "CZ_DOT_Y" 0.0 pairs; 251 + cz_dot_z = float_or "CZ_DOT_Z" 0.0 pairs; 252 + cz_dot_x_dot = float_or "CZ_DOT_X_DOT" 0.0 pairs; 253 + cz_dot_y_dot = float_or "CZ_DOT_Y_DOT" 0.0 pairs; 254 + cz_dot_z_dot = float_or "CZ_DOT_Z_DOT" 0.0 pairs; 255 255 } 256 256 257 257 let parse_maneuvers pairs = ··· 298 298 let pairs = parse_kvn_pairs s in 299 299 let header = parse_header pairs in 300 300 let metadata = parse_metadata pairs in 301 - let epoch = find_epoch "EPOCH" pairs in 301 + let epoch = epoch "EPOCH" pairs in 302 302 let state = 303 303 if has_keplerian pairs then Keplerian (parse_keplerian pairs) 304 304 else Cartesian (parse_cartesian pairs epoch)