| { |
| "_comment": "V2 signal map — corrected against rodriguezj FetchRawData.py / FetchECEAndPrad / FetchBolometer.", |
| "_source_of_truth": "rodriguezj_ref/pedestal_scripts_used/FetchRawData.py + SIGNAL_MAP_RODRIGUEZJ_SOURCE.md", |
| "_created": "2026-04-04", |
| "_v2_created": "2026-04-04", |
| "_notes": [ |
| "V2 changes vs V1: see _v2_changelog at bottom.", |
| "method=tree now stores FULL node path in pointname (e.g. RESULTS.AEQDSK.KAPPA).", |
| " _fetch_tree should: openTree(tree, shot) then get(pointname) — NOT prepend \\TREE::.", |
| "method=ptdata stores the exact case-sensitive PTDATA string.", |
| "method=zipfit_column is new: fetch 2D PROFILES.EDENSFIT from ZIPFIT01, slice column_index.", |
| "ADVISOR VALIDATION NEEDED for: prad_divl, prad_divu, prad_tot (SPECTROSCOPY/PTDATA access on Polaris)." |
| ], |
|
|
| "history_block1_base_signals": { |
| "_doc": "67 signals x 4 stats = indices 0-267. Order matches history_feature_order.txt.", |
|
|
| "kappa": {"pointname": "RESULTS.AEQDSK.KAPPA", "tree": "EFIT01", "method": "tree"}, |
| "betap": {"pointname": "RESULTS.AEQDSK.BETAP", "tree": "EFIT01", "method": "tree"}, |
| "tribot": {"pointname": "RESULTS.AEQDSK.TRIBOT", "tree": "EFIT01", "method": "tree"}, |
| "tritop": {"pointname": "RESULTS.AEQDSK.TRITOP", "tree": "EFIT01", "method": "tree"}, |
| "rmaxis": {"pointname": "RESULTS.AEQDSK.R0", "tree": "EFIT01", "method": "tree", "notes": "was RMAXIS in v1; Jesse uses R0"}, |
| "zmaxis": {"pointname": "RESULTS.AEQDSK.Z0", "tree": "EFIT01", "method": "tree", "notes": "was ZMAXIS in v1; Jesse uses Z0"}, |
| "li": {"pointname": "efsli", "tree": null, "method": "ptdata", "notes": "was EFIT01::LI in v1; Jesse uses ptdata efsli"}, |
| "rvsin": {"pointname": "RESULTS.AEQDSK.RVSIN", "tree": "EFIT01", "method": "tree"}, |
| "rvsout": {"pointname": "RESULTS.AEQDSK.RVSOUT", "tree": "EFIT01", "method": "tree"}, |
| "zvsin": {"pointname": "RESULTS.AEQDSK.ZVSIN", "tree": "EFIT01", "method": "tree"}, |
| "zvsout": {"pointname": "RESULTS.AEQDSK.ZVSOUT", "tree": "EFIT01", "method": "tree"}, |
| "pohm": {"pointname": "RESULTS.AEQDSK.POH", "tree": "EFIT01", "method": "tree", "notes": "was ptdata POHM in v1; Jesse uses EFIT01 tree"}, |
| "pinj": {"pointname": "bmspinj", "tree": null, "method": "ptdata", "notes": "was PINJ in v1"}, |
| "tinj": {"pointname": "bmstinj", "tree": null, "method": "ptdata", "notes": "was TINJ in v1"}, |
| "ech_total": {"pointname": "ECHPWR", "tree": null, "method": "ptdata", "notes": "was ECHPWRC in v1; Jesse uses ECHPWR"}, |
| "pinj_15l": {"pointname": "bmspinj15l", "tree": null, "method": "ptdata", "notes": "was PINJ_15L in v1"}, |
| "pinj_15r": {"pointname": "bmspinj15r", "tree": null, "method": "ptdata"}, |
| "pinj_21l": {"pointname": "bmspinj21l", "tree": null, "method": "ptdata"}, |
| "pinj_21r": {"pointname": "bmspinj21r", "tree": null, "method": "ptdata"}, |
| "pinj_30l": {"pointname": "bmspinj30l", "tree": null, "method": "ptdata"}, |
| "pinj_30r": {"pointname": "bmspinj30r", "tree": null, "method": "ptdata"}, |
| "pinj_33l": {"pointname": "bmspinj33l", "tree": null, "method": "ptdata"}, |
| "pinj_33r": {"pointname": "bmspinj33r", "tree": null, "method": "ptdata"}, |
| "tinj_15l": {"pointname": "bmstinj15l", "tree": null, "method": "ptdata", "notes": "was TINJ_15L in v1"}, |
| "tinj_15r": {"pointname": "bmstinj15r", "tree": null, "method": "ptdata"}, |
| "tinj_21l": {"pointname": "bmstinj21l", "tree": null, "method": "ptdata"}, |
| "tinj_21r": {"pointname": "bmstinj21r", "tree": null, "method": "ptdata"}, |
| "tinj_30l": {"pointname": "bmstinj30l", "tree": null, "method": "ptdata"}, |
| "tinj_30r": {"pointname": "bmstinj30r", "tree": null, "method": "ptdata"}, |
| "tinj_33l": {"pointname": "bmstinj33l", "tree": null, "method": "ptdata"}, |
| "tinj_33r": {"pointname": "bmstinj33r", "tree": null, "method": "ptdata"}, |
| "f1a": {"pointname": "F1A", "tree": null, "method": "ptdata"}, |
| "f2a": {"pointname": "F2A", "tree": null, "method": "ptdata"}, |
| "f3a": {"pointname": "F3A", "tree": null, "method": "ptdata"}, |
| "f4a": {"pointname": "F4A", "tree": null, "method": "ptdata"}, |
| "f5a": {"pointname": "F5A", "tree": null, "method": "ptdata"}, |
| "f6a": {"pointname": "F6A", "tree": null, "method": "ptdata"}, |
| "f7a": {"pointname": "F7A", "tree": null, "method": "ptdata"}, |
| "f8a": {"pointname": "F8A", "tree": null, "method": "ptdata"}, |
| "f9a": {"pointname": "F9A", "tree": null, "method": "ptdata"}, |
| "f1b": {"pointname": "F1B", "tree": null, "method": "ptdata"}, |
| "f2b": {"pointname": "F2B", "tree": null, "method": "ptdata"}, |
| "f3b": {"pointname": "F3B", "tree": null, "method": "ptdata"}, |
| "f4b": {"pointname": "F4B", "tree": null, "method": "ptdata"}, |
| "f5b": {"pointname": "F5B", "tree": null, "method": "ptdata"}, |
| "f6b": {"pointname": "F6B", "tree": null, "method": "ptdata"}, |
| "f7b": {"pointname": "F7B", "tree": null, "method": "ptdata"}, |
| "f8b": {"pointname": "F8B", "tree": null, "method": "ptdata"}, |
| "f9b": {"pointname": "F9B", "tree": null, "method": "ptdata"}, |
| "ecoila": {"pointname": "ECOILA", "tree": null, "method": "ptdata"}, |
| "ecoilb": {"pointname": "ECOILB", "tree": null, "method": "ptdata"}, |
| "e567up": {"pointname": "E567UP", "tree": null, "method": "ptdata"}, |
| "e567dn": {"pointname": "E567DN", "tree": null, "method": "ptdata"}, |
| "e89up": {"pointname": "E89UP", "tree": null, "method": "ptdata"}, |
| "e89dn": {"pointname": "E89DN", "tree": null, "method": "ptdata"}, |
| "gasa_cal": {"pointname": "GASFLOW.GASA:FLOW", "tree": "NEUTRALS", "method": "tree", "notes": "was ptdata GASA_CAL in v1; Jesse uses NEUTRALS tree"}, |
| "gasb_cal": {"pointname": "GASFLOW.GASB:FLOW", "tree": "NEUTRALS", "method": "tree"}, |
| "gasc_cal": {"pointname": "GASFLOW.GASC:FLOW", "tree": "NEUTRALS", "method": "tree"}, |
| "gasd_cal": {"pointname": "GASFLOW.GASD:FLOW", "tree": "NEUTRALS", "method": "tree"}, |
| "gase_cal": {"pointname": "GASFLOW.GASE:FLOW", "tree": "NEUTRALS", "method": "tree"}, |
| "ip": {"pointname": "IP", "tree": null, "method": "ptdata"}, |
| "ipspr15v": {"pointname": "ipspr15V", "tree": null, "method": "ptdata", "notes": "case-sensitive V"}, |
| "bt": {"pointname": "bt", "tree": null, "method": "ptdata", "notes": "lowercase per Jesse"}, |
| "density": {"pointname": "dssdenest", "tree": null, "method": "ptdata", "notes": "was ELECTRONS::DENSITY in v1; Jesse uses ptdata dssdenest"}, |
| "n1rms": {"pointname": "nssampn1l", "tree": null, "method": "ptdata", "notes": "was N1RMS in v1"}, |
| "n2rms": {"pointname": "nssampn2l", "tree": null, "method": "ptdata", "notes": "was N2RMS in v1"}, |
| "prad": {"pointname": "PRAD", "tree": null, "method": "ptdata"} |
| }, |
|
|
| "history_block2_pedestal_target": { |
| "_doc": "2 features at indices 268-269. Only mean and std (not min/max).", |
| "pedestal": { |
| "pointname": "PROFILES.EDENSFIT", |
| "tree": "ZIPFIT01", |
| "method": "zipfit_column", |
| "column_index": 100, |
| "notes": "was ptdata EDENSFIT100 in v1; Jesse fetches 2D ZIPFIT01 PROFILES.EDENSFIT and slices col 100" |
| } |
| }, |
|
|
| "history_block3_ece_channels": { |
| "_doc": "40 ECE channels x 4 stats = indices 270-429.", |
| "ece1": {"pointname": "ece1", "tree": null, "method": "ptdata", "notes": "was tree ECE::ECE01 in v1; Jesse uses ptdata"}, |
| "ece2": {"pointname": "ece2", "tree": null, "method": "ptdata"}, |
| "ece3": {"pointname": "ece3", "tree": null, "method": "ptdata"}, |
| "ece4": {"pointname": "ece4", "tree": null, "method": "ptdata"}, |
| "ece5": {"pointname": "ece5", "tree": null, "method": "ptdata"}, |
| "ece6": {"pointname": "ece6", "tree": null, "method": "ptdata"}, |
| "ece7": {"pointname": "ece7", "tree": null, "method": "ptdata"}, |
| "ece8": {"pointname": "ece8", "tree": null, "method": "ptdata"}, |
| "ece9": {"pointname": "ece9", "tree": null, "method": "ptdata"}, |
| "ece10": {"pointname": "ece10", "tree": null, "method": "ptdata"}, |
| "ece11": {"pointname": "ece11", "tree": null, "method": "ptdata"}, |
| "ece12": {"pointname": "ece12", "tree": null, "method": "ptdata"}, |
| "ece13": {"pointname": "ece13", "tree": null, "method": "ptdata"}, |
| "ece14": {"pointname": "ece14", "tree": null, "method": "ptdata"}, |
| "ece15": {"pointname": "ece15", "tree": null, "method": "ptdata"}, |
| "ece16": {"pointname": "ece16", "tree": null, "method": "ptdata"}, |
| "ece17": {"pointname": "ece17", "tree": null, "method": "ptdata"}, |
| "ece18": {"pointname": "ece18", "tree": null, "method": "ptdata"}, |
| "ece19": {"pointname": "ece19", "tree": null, "method": "ptdata"}, |
| "ece20": {"pointname": "ece20", "tree": null, "method": "ptdata"}, |
| "ece21": {"pointname": "ece21", "tree": null, "method": "ptdata"}, |
| "ece22": {"pointname": "ece22", "tree": null, "method": "ptdata"}, |
| "ece23": {"pointname": "ece23", "tree": null, "method": "ptdata"}, |
| "ece24": {"pointname": "ece24", "tree": null, "method": "ptdata"}, |
| "ece25": {"pointname": "ece25", "tree": null, "method": "ptdata"}, |
| "ece26": {"pointname": "ece26", "tree": null, "method": "ptdata"}, |
| "ece27": {"pointname": "ece27", "tree": null, "method": "ptdata"}, |
| "ece28": {"pointname": "ece28", "tree": null, "method": "ptdata"}, |
| "ece29": {"pointname": "ece29", "tree": null, "method": "ptdata"}, |
| "ece30": {"pointname": "ece30", "tree": null, "method": "ptdata"}, |
| "ece31": {"pointname": "ece31", "tree": null, "method": "ptdata"}, |
| "ece32": {"pointname": "ece32", "tree": null, "method": "ptdata"}, |
| "ece33": {"pointname": "ece33", "tree": null, "method": "ptdata"}, |
| "ece34": {"pointname": "ece34", "tree": null, "method": "ptdata"}, |
| "ece35": {"pointname": "ece35", "tree": null, "method": "ptdata"}, |
| "ece36": {"pointname": "ece36", "tree": null, "method": "ptdata"}, |
| "ece37": {"pointname": "ece37", "tree": null, "method": "ptdata"}, |
| "ece38": {"pointname": "ece38", "tree": null, "method": "ptdata"}, |
| "ece39": {"pointname": "ece39", "tree": null, "method": "ptdata"}, |
| "ece40": {"pointname": "ece40", "tree": null, "method": "ptdata"} |
| }, |
|
|
| "history_block4_radiation": { |
| "_doc": "3 radiation signals x 4 stats = indices 430-441.", |
| "prad_tot": {"pointname": "PRAD_TOT", "tree": null, "method": "ptdata", "notes": "Jesse uses ptdata PRAD_TOT (FetchECEAndPrad); may be absent for some shots"}, |
| "prad_divl": {"pointname": "\\PRAD_DIVL", "tree": "SPECTROSCOPY", "method": "tree", "notes": "was ptdata in v1; Jesse uses SPECTROSCOPY tree (FetchBolometer); may need atlas.gat.com"}, |
| "prad_divu": {"pointname": "\\PRAD_DIVU", "tree": "SPECTROSCOPY", "method": "tree", "notes": "was ptdata in v1; Jesse uses SPECTROSCOPY tree (FetchBolometer); may need atlas.gat.com"} |
| }, |
|
|
| "history_block5_edensfit89_target": { |
| "_doc": "1 signal x 4 stats = indices 442-445.", |
| "edensfit89": { |
| "pointname": "PROFILES.EDENSFIT", |
| "tree": "ZIPFIT01", |
| "method": "zipfit_column", |
| "column_index": 89, |
| "notes": "was ptdata EDENSFIT89 in v1; Jesse fetches 2D ZIPFIT01 PROFILES.EDENSFIT and slices col 89" |
| } |
| }, |
|
|
| "history_block6_pedestal_targets": { |
| "_doc": "3 ZIPFIT profile-derived signals x 4 stats = indices 446-457. Used by v2_458 bundles only.", |
| "te_ped": { |
| "pointname": "PROFILES.ETEMPFIT", |
| "tree": "ZIPFIT01", |
| "method": "zipfit_column", |
| "column_index": 89, |
| "notes": "electron temperature pedestal proxy from ETEMPFIT rho column 89" |
| }, |
| "ti_ped": { |
| "pointname": "PROFILES.ITEMPFIT", |
| "tree": "ZIPFIT01", |
| "method": "zipfit_column", |
| "column_index": 89, |
| "notes": "ion temperature pedestal proxy from ITEMPFIT rho column 89" |
| }, |
| "t_rot_ped": { |
| "pointname": "PROFILES.TROTFIT", |
| "tree": "ZIPFIT01", |
| "method": "zipfit_column", |
| "column_index": 89, |
| "notes": "toroidal rotation pedestal proxy from TROTFIT rho column 89" |
| } |
| }, |
|
|
| "fpe_signals": { |
| "_doc": "32 FPE actuator channels (real-time input to FPE encoder). Order matches normalization_params.json.", |
| "_order": [ |
| "pohm", "pinj", "tinj", "ech_total", |
| "f1a", "f2a", "f3a", "f4a", "f5a", "f6a", "f7a", "f8a", "f9a", |
| "f1b", "f2b", "f3b", "f4b", "f5b", "f6b", "f7b", "f8b", "f9b", |
| "ecoila", "ecoilb", |
| "gasa_cal", "gasb_cal", "gasc_cal", "gasd_cal", "gase_cal", |
| "ip", "ipspr15v", "bt" |
| ], |
| "_note": "These are a subset of block1 signals; use the same pointname/tree/method entries from block1." |
| }, |
|
|
| "history_signal_order": { |
| "_doc": "Ordered list of signal names matching history_feature_order.txt. Used by _compute_shot_stats().", |
| "block1_67_signals": [ |
| "kappa", "betap", "tribot", "tritop", "rmaxis", "zmaxis", "li", |
| "rvsin", "rvsout", "zvsin", "zvsout", |
| "pohm", "pinj", "tinj", "ech_total", |
| "pinj_15l", "pinj_15r", "pinj_21l", "pinj_21r", |
| "pinj_30l", "pinj_30r", "pinj_33l", "pinj_33r", |
| "tinj_15l", "tinj_15r", "tinj_21l", "tinj_21r", |
| "tinj_30l", "tinj_30r", "tinj_33l", "tinj_33r", |
| "f1a", "f2a", "f3a", "f4a", "f5a", "f6a", "f7a", "f8a", "f9a", |
| "f1b", "f2b", "f3b", "f4b", "f5b", "f6b", "f7b", "f8b", "f9b", |
| "ecoila", "ecoilb", |
| "e567up", "e567dn", "e89up", "e89dn", |
| "gasa_cal", "gasb_cal", "gasc_cal", "gasd_cal", "gase_cal", |
| "ip", "ipspr15v", "bt", |
| "density", "n1rms", "n2rms", "prad" |
| ], |
| "block2_pedestal": ["pedestal"], |
| "block3_40_ece": [ |
| "ece1", "ece2", "ece3", "ece4", "ece5", "ece6", "ece7", "ece8", "ece9", "ece10", |
| "ece11", "ece12", "ece13", "ece14", "ece15", "ece16", "ece17", "ece18", "ece19", "ece20", |
| "ece21", "ece22", "ece23", "ece24", "ece25", "ece26", "ece27", "ece28", "ece29", "ece30", |
| "ece31", "ece32", "ece33", "ece34", "ece35", "ece36", "ece37", "ece38", "ece39", "ece40" |
| ], |
| "block4_3_radiation": ["prad_tot", "prad_divl", "prad_divu"], |
| "block5_edensfit89": ["edensfit89"], |
| "block6_pedestal_targets": ["te_ped", "ti_ped", "t_rot_ped"] |
| }, |
|
|
| "_v2_changelog": { |
| "_doc": "Every change from signal_map.json (v1) with rationale.", |
| "method_changed": { |
| "li": "EFIT01 tree -> ptdata efsli (FetchRawData.py line 77)", |
| "pohm": "ptdata POHM -> EFIT01 tree RESULTS.AEQDSK.POH (FetchRawData.py line 69)", |
| "density": "ELECTRONS tree -> ptdata dssdenest (FetchRawData.py line 88)", |
| "gasa_cal": "ptdata GASA_CAL -> NEUTRALS tree GASFLOW.GASA:FLOW (FetchRawData.py line 116)", |
| "gasb_cal": "ptdata -> NEUTRALS tree (same pattern)", |
| "gasc_cal": "ptdata -> NEUTRALS tree (same pattern)", |
| "gasd_cal": "ptdata -> NEUTRALS tree (same pattern)", |
| "gase_cal": "ptdata -> NEUTRALS tree (same pattern)", |
| "ece1-ece40": "ECE tree ECE01..ECE40 -> ptdata ece1..ece40 (FetchECEAndPrad.py)", |
| "prad_divl": "ptdata PRAD_DIVL -> SPECTROSCOPY tree (FetchBolometer.py)", |
| "prad_divu": "ptdata PRAD_DIVU -> SPECTROSCOPY tree (FetchBolometer.py)", |
| "pedestal": "ptdata EDENSFIT100 -> zipfit_column (ZIPFIT01 col 100)", |
| "edensfit89":"ptdata EDENSFIT89 -> zipfit_column (ZIPFIT01 col 89)" |
| }, |
| "pointname_changed": { |
| "pinj": "PINJ -> bmspinj", |
| "tinj": "TINJ -> bmstinj", |
| "pinj_15l": "PINJ_15L -> bmspinj15l (and all 8 beam ports)", |
| "tinj_15l": "TINJ_15L -> bmstinj15l (and all 8 beam ports)", |
| "n1rms": "N1RMS -> nssampn1l", |
| "n2rms": "N2RMS -> nssampn2l", |
| "ech_total": "ECHPWRC -> ECHPWR", |
| "ipspr15v": "IPSPR15V -> ipspr15V (case fix)", |
| "bt": "BT -> bt (case fix)" |
| }, |
| "node_path_changed": { |
| "kappa": "KAPPA -> RESULTS.AEQDSK.KAPPA (full EFIT path)", |
| "betap": "BETAP -> RESULTS.AEQDSK.BETAP", |
| "tribot": "TRIBOT -> RESULTS.AEQDSK.TRIBOT", |
| "tritop": "TRITOP -> RESULTS.AEQDSK.TRITOP", |
| "rmaxis": "RMAXIS -> RESULTS.AEQDSK.R0", |
| "zmaxis": "ZMAXIS -> RESULTS.AEQDSK.Z0", |
| "rvsin": "RVSIN -> RESULTS.AEQDSK.RVSIN", |
| "rvsout": "RVSOUT -> RESULTS.AEQDSK.RVSOUT", |
| "zvsin": "ZVSIN -> RESULTS.AEQDSK.ZVSIN", |
| "zvsout": "ZVSOUT -> RESULTS.AEQDSK.ZVSOUT" |
| }, |
| "unchanged": [ |
| "f1a-f9b (PTDATA, correct in v1)", |
| "ecoila, ecoilb (PTDATA, correct in v1)", |
| "e567up, e567dn, e89up, e89dn (PTDATA, correct in v1)", |
| "ip (PTDATA IP, correct in v1)", |
| "prad (PTDATA PRAD, correct in v1)", |
| "prad_tot (PTDATA PRAD_TOT, same in both — may still be broken for some shots)" |
| ] |
| } |
| } |
|
|