Loading tools/plan_json_to_pointing.py 0 → 100644 +75 −0 Original line number Diff line number Diff line import argparse import json import math from pathlib import Path def _get_nested(d, path, default=math.nan): cur = d for k in path: if not isinstance(cur, dict) or k not in cur: return default cur = cur[k] return cur def plan_json_to_pointing_text(json_path, out_path): json_path = Path(json_path) with json_path.open("r", encoding="utf-8") as f: data = json.load(f) if isinstance(data, dict) and "data" in data: data = data["data"] if not isinstance(data, list): raise TypeError( f"Unsupported JSON top-level type: {type(data).__name__}") header = ( "# ra dec lon(ecliptic) lat(ecliptic) pos_angle time(julian) sat_x sat_y sat_z " "sun_x sun_y sun_z moon_x moon_y moon_z sat_vx sat_vy sat_vz exp_time " "isDeep obs_config id\n" ) columns = [ ("ra", ("simresult", "ra")), ("dec", ("simresult", "dec")), ("lon(ecliptic)", ("simresult", "lambda")), ("lat(ecliptic)", ("simresult", "beta")), ("pos_angle", ("params", "pa_obj")), ("time(julian)", ("simresult", "jd")), ("sat_x", ("simresult", "sat_x")), ("sat_y", ("simresult", "sat_y")), ("sat_z", ("simresult", "sat_z")), ("sun_x", ("simresult", "sun_x")), ("sun_y", ("simresult", "sun_y")), ("sun_z", ("simresult", "sun_z")), ("moon_x", ("simresult", "moon_x")), ("moon_y", ("simresult", "moon_y")), ("moon_z", ("simresult", "moon_z")), ("sat_vx", ("simresult", "sat_vx")), ("sat_vy", ("simresult", "sat_vy")), ("sat_vz", ("simresult", "sat_vz")), ("exp_time", ("exptime",)), ("isDeep", ("simresult", "sky_type")), ("obs_config", None), ("id", ("obs_id",)), ] out_path = Path(out_path) with out_path.open("w", encoding="utf-8") as f: f.write(header) for item in data: values = [] for _, path in columns: if path is None: values.append("null") else: values.append(_get_nested(item, path)) f.write(" ".join(map(str, values)) + "\n") if __name__ == "__main__": jsonFn = "test_2461876_1_plan.json" outFn = "pointing_test.dat" plan_json_to_pointing_text(jsonFn, outFn) Loading
tools/plan_json_to_pointing.py 0 → 100644 +75 −0 Original line number Diff line number Diff line import argparse import json import math from pathlib import Path def _get_nested(d, path, default=math.nan): cur = d for k in path: if not isinstance(cur, dict) or k not in cur: return default cur = cur[k] return cur def plan_json_to_pointing_text(json_path, out_path): json_path = Path(json_path) with json_path.open("r", encoding="utf-8") as f: data = json.load(f) if isinstance(data, dict) and "data" in data: data = data["data"] if not isinstance(data, list): raise TypeError( f"Unsupported JSON top-level type: {type(data).__name__}") header = ( "# ra dec lon(ecliptic) lat(ecliptic) pos_angle time(julian) sat_x sat_y sat_z " "sun_x sun_y sun_z moon_x moon_y moon_z sat_vx sat_vy sat_vz exp_time " "isDeep obs_config id\n" ) columns = [ ("ra", ("simresult", "ra")), ("dec", ("simresult", "dec")), ("lon(ecliptic)", ("simresult", "lambda")), ("lat(ecliptic)", ("simresult", "beta")), ("pos_angle", ("params", "pa_obj")), ("time(julian)", ("simresult", "jd")), ("sat_x", ("simresult", "sat_x")), ("sat_y", ("simresult", "sat_y")), ("sat_z", ("simresult", "sat_z")), ("sun_x", ("simresult", "sun_x")), ("sun_y", ("simresult", "sun_y")), ("sun_z", ("simresult", "sun_z")), ("moon_x", ("simresult", "moon_x")), ("moon_y", ("simresult", "moon_y")), ("moon_z", ("simresult", "moon_z")), ("sat_vx", ("simresult", "sat_vx")), ("sat_vy", ("simresult", "sat_vy")), ("sat_vz", ("simresult", "sat_vz")), ("exp_time", ("exptime",)), ("isDeep", ("simresult", "sky_type")), ("obs_config", None), ("id", ("obs_id",)), ] out_path = Path(out_path) with out_path.open("w", encoding="utf-8") as f: f.write(header) for item in data: values = [] for _, path in columns: if path is None: values.append("null") else: values.append(_get_nested(item, path)) f.write(" ".join(map(str, values)) + "\n") if __name__ == "__main__": jsonFn = "test_2461876_1_plan.json" outFn = "pointing_test.dat" plan_json_to_pointing_text(jsonFn, outFn)