Skip to content

Commit 0a6de2d

Browse files
authored
IMAP-Lo systematic error calculation fixes (#3315)
* fixes for issue 3314 * Derive Lo bg_rate_sys_err from the background, not the geometric factor The algorithm document (Appendix A, eq 64) specifies the background rate systematic as the exposure time weighted average of the per-pset systematic error. The systematic is a single symmetric value, so _plus and _minus are set equal to it for now. Note that the systematic errors are all 0s, since no constant has been introduced yet to populate this (to be Imap-Lo team supplied) value.
1 parent 9c089f6 commit 0a6de2d

4 files changed

Lines changed: 133 additions & 76 deletions

File tree

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
esa_mode,incident_E-Step,Observed_E-Step,Cntr_E,Cntr_E_unc,GF_Trpl_H,GF_Trpl_H_unc_minus,GF_Trpl_H_unc_plus
22
# [1],[1],[1],[keV],[keV],[cm^2sr keV/keV],[cm^2sr keV/keV],[cm^2sr keV/keV]
3-
0,1,1,0.01633,0.28,4.45E-05,4.03E-05,4.20E-05
4-
0,2,2,0.03047,0.43,5.02E-05,4.53E-05,4.72E-05
5-
0,3,3,0.05576,0.89,6.16E-05,5.58E-05,5.82E-05
6-
0,4,4,0.10626,1.9,7.12E-05,4.51E-05,4.89E-05
7-
0,5,5,0.20004,3.4,8.89E-05,5.85E-05,6.31E-05
8-
0,6,6,0.40496,7.3,1.12E-04,6.58E-05,7.23E-05
9-
0,7,7,0.78729,22,1.43E-04,8.25E-05,9.09E-05
10-
1,1,1,0.01719,0.22,1.05E-04,8.82E-05,9.26E-05
11-
1,2,2,0.03236,0.36,1.22E-04,1.02E-04,1.07E-04
12-
1,3,3,0.05948,0.77,1.44E-04,1.21E-04,1.27E-04
13-
1,4,4,0.11441,1.3,1.73E-04,1.17E-04,1.26E-04
14-
1,5,5,0.2137,3,2.15E-04,1.37E-04,1.49E-04
15-
1,6,6,0.43736,5.3,2.82E-04,1.65E-04,1.81E-04
16-
1,7,7,0.83888,11.7,3.61E-04,2.08E-04,2.29E-04
3+
0,1,1,0.01633,0.00028,4.45E-05,4.03E-05,4.20E-05
4+
0,2,2,0.03047,0.00043,5.02E-05,4.53E-05,4.72E-05
5+
0,3,3,0.05576,0.00089,6.16E-05,5.58E-05,5.82E-05
6+
0,4,4,0.10626,0.0019,7.12E-05,4.51E-05,4.89E-05
7+
0,5,5,0.20004,0.0034,8.89E-05,5.85E-05,6.31E-05
8+
0,6,6,0.40496,0.0073,1.12E-04,6.58E-05,7.23E-05
9+
0,7,7,0.78729,0.022,1.43E-04,8.25E-05,9.09E-05
10+
1,1,1,0.01719,0.00022,1.05E-04,8.82E-05,9.26E-05
11+
1,2,2,0.03236,0.00036,1.22E-04,1.02E-04,1.07E-04
12+
1,3,3,0.05948,0.00077,1.44E-04,1.21E-04,1.27E-04
13+
1,4,4,0.11441,0.0013,1.73E-04,1.17E-04,1.26E-04
14+
1,5,5,0.2137,0.003,2.15E-04,1.37E-04,1.49E-04
15+
1,6,6,0.43736,0.0053,2.82E-04,1.65E-04,1.81E-04
16+
1,7,7,0.83888,0.0117,3.61E-04,2.08E-04,2.29E-04
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
esa_mode,incident_E-Step,Observed_E-Step,Cntr_E,Cntr_E_unc,GF_Trpl_O,GF_Trpl_O_unc_minus,GF_Trpl_O_unc_plus
22
# [1],[1],[1],[keV],[keV],[cm^2sr keV/keV],[cm^2sr keV/keV],[cm^2sr keV/keV]
3-
0,1,1,0.01919,1.372344105,1.98E-05,1.74E-05,1.81E-05
4-
0,2,2,0.03675,2.537963082,3.18E-05,2.39E-05,2.53E-05
5-
0,3,3,0.07121,6.591339559,5.34E-05,4.05E-05,4.29E-05
6-
0,4,4,0.14141,17.43990907,8.64E-05,6.14E-05,6.56E-05
7-
0,5,5,0.274,35.83900763,1.32E-04,9.07E-05,9.72E-05
8-
0,6,6,0.58503,98.06681395,2.46E-04,1.53E-04,1.67E-04
9-
0,7,7,1.13506,238.1076888,3.81E-04,2.23E-04,2.45E-04
10-
1,1,1,0.02043303552,1.575924599,5.02E-05,4.41E-05,4.61E-05
11-
1,2,2,0.03972,2.953020557,8.13E-05,6.09E-05,6.47E-05
12-
1,3,3,0.07648,7.476494389,1.33E-04,1.01E-04,1.07E-04
13-
1,4,4,0.15353,14.87953071,2.38E-04,1.69E-04,1.80E-04
14-
1,5,5,0.29846,41.48950349,3.87E-04,2.67E-04,2.86E-04
15-
1,6,6,0.61524,83.57629594,6.61E-04,4.11E-04,4.47E-04
16-
1,7,7,1.24282,212.0806857,1.02E-03,6.10E-04,6.67E-04
3+
0,1,1,0.01919,0.001372344105,1.98E-05,1.74E-05,1.81E-05
4+
0,2,2,0.03675,0.002537963082,3.18E-05,2.39E-05,2.53E-05
5+
0,3,3,0.07121,0.006591339559,5.34E-05,4.05E-05,4.29E-05
6+
0,4,4,0.14141,0.01743990907,8.64E-05,6.14E-05,6.56E-05
7+
0,5,5,0.274,0.03583900763,1.32E-04,9.07E-05,9.72E-05
8+
0,6,6,0.58503,0.09806681395,2.46E-04,1.53E-04,1.67E-04
9+
0,7,7,1.13506,0.2381076888,3.81E-04,2.23E-04,2.45E-04
10+
1,1,1,0.02043303552,0.001575924599,5.02E-05,4.41E-05,4.61E-05
11+
1,2,2,0.03972,0.002953020557,8.13E-05,6.09E-05,6.47E-05
12+
1,3,3,0.07648,0.007476494389,1.33E-04,1.01E-04,1.07E-04
13+
1,4,4,0.15353,0.01487953071,2.38E-04,1.69E-04,1.80E-04
14+
1,5,5,0.29846,0.04148950349,3.87E-04,2.67E-04,2.86E-04
15+
1,6,6,0.61524,0.08357629594,6.61E-04,4.11E-04,4.47E-04
16+
1,7,7,1.24282,0.2120806857,1.02E-03,6.10E-04,6.67E-04

imap_processing/lo/l2/lo_l2.py

Lines changed: 49 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -499,6 +499,7 @@ def normalize_pset_coordinates(pset: xr.Dataset, species: str) -> xr.Dataset:
499499
f"{species}_counts": "counts",
500500
f"{species}_background_rates": "bg_rate",
501501
f"{species}_background_rates_stat_uncert": "bg_rate_stat_uncert",
502+
f"{species}_background_rates_sys_err": "bg_rate_sys_err",
502503
}
503504
pset_renamed = pset_renamed.rename_vars(rename_map)
504505

@@ -590,6 +591,10 @@ def calculate_efficiency_corrected_quantities(
590591
pset["bg_rate_stat_uncert_exposure_factor2"] = (
591592
pset["bg_rate_stat_uncert"] ** 2 * pset["exposure_factor"] ** 2
592593
)
594+
# background systematic * exposure_factor for weighted average.
595+
pset["bg_rate_sys_err_exposure_factor"] = (
596+
pset["bg_rate_sys_err"] * pset["exposure_factor"]
597+
)
593598

594599
return pset
595600

@@ -629,8 +634,10 @@ def project_pset_to_map(
629634
"counts_over_eff_squared",
630635
"bg_rate",
631636
"bg_rate_stat_uncert",
637+
"bg_rate_sys_err",
632638
"bg_rate_exposure_factor",
633639
"bg_rate_stat_uncert_exposure_factor2",
640+
"bg_rate_sys_err_exposure_factor",
634641
]
635642
if cg_correct:
636643
value_keys.append("energy_sc_exposure_factor")
@@ -1009,16 +1016,24 @@ def calculate_intensities(dataset: xr.Dataset) -> xr.Dataset:
10091016
dataset["counts_over_eff_squared"]
10101017
) / (dataset["geometric_factor"] * dataset["energy"] * dataset["exposure_factor"])
10111018

1012-
for suffix in ("minus", "plus"):
1013-
dataset[f"ena_intensity_sys_err_{suffix}"] = (
1014-
dataset["ena_intensity"]
1015-
* dataset[f"geometric_factor_stat_uncert_{suffix}"]
1016-
/ dataset["geometric_factor"]
1017-
)
1019+
plus_multiplier = dataset["geometric_factor"] / (
1020+
dataset["geometric_factor"] - dataset["geometric_factor_stat_uncert_minus"]
1021+
)
1022+
minus_multiplier = dataset["geometric_factor"] / (
1023+
dataset["geometric_factor"] + dataset["geometric_factor_stat_uncert_plus"]
1024+
)
1025+
1026+
dataset["ena_intensity_sys_err_plus"] = (
1027+
dataset["ena_intensity"] * plus_multiplier
1028+
) - dataset["ena_intensity"]
1029+
1030+
dataset["ena_intensity_sys_err_minus"] = dataset["ena_intensity"] - (
1031+
dataset["ena_intensity"] * minus_multiplier
1032+
)
10181033

1019-
# Symmetric systematic error (mean of the asymmetric minus/plus bounds)
1020-
dataset["ena_intensity_sys_err"] = 0.5 * (
1021-
dataset["ena_intensity_sys_err_minus"] + dataset["ena_intensity_sys_err_plus"]
1034+
# Symmetric systematic error
1035+
dataset["ena_intensity_sys_err"] = np.sqrt(
1036+
dataset["ena_intensity_sys_err_minus"] * dataset["ena_intensity_sys_err_plus"]
10221037
)
10231038

10241039
return dataset
@@ -1039,25 +1054,27 @@ def calculate_backgrounds(dataset: xr.Dataset) -> xr.Dataset:
10391054
Dataset with calculated background rates and intensities for the
10401055
specified species.
10411056
"""
1042-
# Equation 6 from mapping document (background rate)
1057+
# Equation 62 from mapping document (background rate)
10431058
# exposure time weighted average of the background rates
10441059
dataset["bg_rate"] = dataset["bg_rate_exposure_factor"] / dataset["exposure_factor"]
1045-
# Equation 7 from mapping document (background statistical uncertainty)
1060+
# Equation 63 from mapping document (background statistical uncertainty)
10461061
dataset["bg_rate_stat_uncert"] = np.sqrt(
10471062
dataset["bg_rate_stat_uncert_exposure_factor2"]
10481063
/ dataset["exposure_factor"] ** 2
10491064
)
1065+
# Equation 64 from mapping document (background systematic error).
1066+
dataset["bg_rate_sys_err"] = (
1067+
dataset["bg_rate_sys_err_exposure_factor"] / dataset["exposure_factor"]
1068+
)
1069+
# The background rate systematic is a single symmetric value.
1070+
dataset["bg_rate_sys_err_plus"] = dataset["bg_rate_sys_err"].copy()
1071+
dataset["bg_rate_sys_err_minus"] = dataset["bg_rate_sys_err"].copy()
10501072

1051-
for suffix in ("minus", "plus"):
1052-
dataset[f"bg_rate_sys_err_{suffix}"] = (
1053-
dataset["bg_rate"]
1054-
* dataset[f"geometric_factor_stat_uncert_{suffix}"]
1055-
/ dataset["geometric_factor"]
1056-
)
1057-
1058-
# Symmetric systematic error (mean of the asymmetric minus/plus bounds)
1059-
dataset["bg_rate_sys_err"] = 0.5 * (
1060-
dataset["bg_rate_sys_err_minus"] + dataset["bg_rate_sys_err_plus"]
1073+
plus_multiplier = dataset["geometric_factor"] / (
1074+
dataset["geometric_factor"] - dataset["geometric_factor_stat_uncert_minus"]
1075+
)
1076+
minus_multiplier = dataset["geometric_factor"] / (
1077+
dataset["geometric_factor"] + dataset["geometric_factor_stat_uncert_plus"]
10611078
)
10621079

10631080
# Background intensity
@@ -1068,16 +1085,17 @@ def calculate_backgrounds(dataset: xr.Dataset) -> xr.Dataset:
10681085
dataset["geometric_factor"] * dataset["energy"]
10691086
)
10701087

1071-
for suffix in ("minus", "plus"):
1072-
dataset[f"bg_intensity_sys_err_{suffix}"] = (
1073-
dataset["bg_intensity"]
1074-
* dataset[f"geometric_factor_stat_uncert_{suffix}"]
1075-
/ dataset["geometric_factor"]
1076-
)
1088+
dataset["bg_intensity_sys_err_plus"] = (
1089+
dataset["bg_intensity"] * plus_multiplier
1090+
) - dataset["bg_intensity"]
1091+
1092+
dataset["bg_intensity_sys_err_minus"] = dataset["bg_intensity"] - (
1093+
dataset["bg_intensity"] * minus_multiplier
1094+
)
10771095

1078-
# Symmetric systematic error (mean of the asymmetric minus/plus bounds)
1079-
dataset["bg_intensity_sys_err"] = 0.5 * (
1080-
dataset["bg_intensity_sys_err_minus"] + dataset["bg_intensity_sys_err_plus"]
1096+
# Symmetric systematic error
1097+
dataset["bg_intensity_sys_err"] = np.sqrt(
1098+
dataset["bg_intensity_sys_err_minus"] * dataset["bg_intensity_sys_err_plus"]
10811099
)
10821100

10831101
return dataset
@@ -1427,6 +1445,7 @@ def cleanup_intermediate_variables(dataset: xr.Dataset) -> xr.Dataset:
14271445
"counts_over_eff_squared",
14281446
"bg_rate_exposure_factor",
14291447
"bg_rate_stat_uncert_exposure_factor2",
1448+
"bg_rate_sys_err_exposure_factor",
14301449
]
14311450

14321451
for potential_var in potential_vars:

imap_processing/tests/lo/test_lo_l2.py

Lines changed: 56 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,13 @@ def sample_dataset_with_background_intermediates():
390390
bg_rate_stat_uncert_exposure_factor2,
391391
)
392392

393+
# Background systematic error times exposure time
394+
bg_rate_sys_err_exposure_factor = np.ones((1, n_energy)) * 0.05
395+
dataset["bg_rate_sys_err_exposure_factor"] = (
396+
("epoch", "energy"),
397+
bg_rate_sys_err_exposure_factor,
398+
)
399+
393400
# Add exposure time (using current naming convention)
394401
exposure = np.ones((1, n_energy)) * 1.0 # 1 second
395402
dataset["exposure_factor"] = (("epoch", "energy"), exposure)
@@ -848,6 +855,10 @@ def test_normalize_coordinates_basic(self, species):
848855
PSET_DIMS,
849856
np.ones(PSET_SHAPE) * 0.01,
850857
),
858+
f"{species}_background_rates_sys_err": (
859+
PSET_DIMS,
860+
np.ones(PSET_SHAPE) * 0.02,
861+
),
851862
},
852863
coords={
853864
"epoch": [8.1794907049e17],
@@ -880,6 +891,7 @@ def test_normalize_coordinates_basic(self, species):
880891
assert "exposure_factor" in result.data_vars
881892
assert "bg_rate" in result.data_vars
882893
assert "bg_rate_stat_uncert" in result.data_vars
894+
assert "bg_rate_sys_err" in result.data_vars
883895

884896
# Check that old variable names are gone
885897
assert f"{species}_counts" not in result.data_vars
@@ -919,6 +931,10 @@ def test_normalize_coordinates_removes_old_coordinate(self):
919931
PSET_DIMS,
920932
np.ones(PSET_SHAPE) * 0.01,
921933
),
934+
f"{species}_background_rates_sys_err": (
935+
PSET_DIMS,
936+
np.ones(PSET_SHAPE) * 0.02,
937+
),
922938
"esa_energy_step_var": xr.DataArray([1, 2, 3, 4, 5, 6, 7]), # Variable
923939
},
924940
coords={
@@ -1010,6 +1026,7 @@ def test_calculate_efficiency_corrected_quantities(self):
10101026
"exposure_factor": (("energy",), np.ones(7) * 1.0), # 1 second
10111027
"bg_rate": (("energy",), np.ones(7) * 0.1), # 0.1 counts/s
10121028
"bg_rate_stat_uncert": (("energy",), np.ones(7) * 0.01), # uncertainty
1029+
"bg_rate_sys_err": (("energy",), np.ones(7) * 0.02), # systematic
10131030
"efficiency": (
10141031
("energy",),
10151032
np.array([0.8, 0.85, 0.9, 0.95, 0.88, 0.92, 0.87]),
@@ -1025,6 +1042,7 @@ def test_calculate_efficiency_corrected_quantities(self):
10251042
assert "counts_over_eff_squared" in result.data_vars
10261043
assert "bg_rate_exposure_factor" in result.data_vars
10271044
assert "bg_rate_stat_uncert_exposure_factor2" in result.data_vars
1045+
assert "bg_rate_sys_err_exposure_factor" in result.data_vars
10281046

10291047
# Check dimensions
10301048
assert result["counts_over_eff"].dims == pset["counts"].dims
@@ -1052,6 +1070,11 @@ def test_calculate_efficiency_corrected_quantities(self):
10521070
result["bg_rate_stat_uncert_exposure_factor2"], expected_bg_uncert_exposure
10531071
)
10541072

1073+
expected_bg_sys_err_exposure = pset["bg_rate_sys_err"] * pset["exposure_factor"]
1074+
xr.testing.assert_allclose(
1075+
result["bg_rate_sys_err_exposure_factor"], expected_bg_sys_err_exposure
1076+
)
1077+
10551078

10561079
class TestCalculateRates:
10571080
"""Tests for the calculate_rates function."""
@@ -1134,17 +1157,17 @@ def test_calculate_intensities_basic(self, sample_dataset_with_geometric_factors
11341157
result["ena_intensity_stat_uncert"], expected_stat_uncert
11351158
)
11361159

1137-
# Check systematic uncertainty calculation. The single `_sys_err` is the
1138-
# mean of the asymmetric minus/plus bounds.
1139-
mean_gf_stat_uncert = 0.5 * (
1140-
sample_dataset_with_geometric_factors["geometric_factor_stat_uncert_minus"]
1141-
+ sample_dataset_with_geometric_factors["geometric_factor_stat_uncert_plus"]
1142-
)
1143-
expected_sys_err = (
1144-
result["ena_intensity"]
1145-
* mean_gf_stat_uncert
1146-
/ sample_dataset_with_geometric_factors["geometric_factor"]
1147-
)
1160+
# Check systematic uncertainty calculation
1161+
gf = sample_dataset_with_geometric_factors["geometric_factor"]
1162+
dg_minus = sample_dataset_with_geometric_factors[
1163+
"geometric_factor_stat_uncert_minus"
1164+
]
1165+
dg_plus = sample_dataset_with_geometric_factors[
1166+
"geometric_factor_stat_uncert_plus"
1167+
]
1168+
expected_sys_err_plus = result["ena_intensity"] * dg_minus / (gf - dg_minus)
1169+
expected_sys_err_minus = result["ena_intensity"] * dg_plus / (gf + dg_plus)
1170+
expected_sys_err = np.sqrt(expected_sys_err_minus * expected_sys_err_plus)
11481171
xr.testing.assert_allclose(result["ena_intensity_sys_err"], expected_sys_err)
11491172

11501173
def test_calculate_intensities_missing_variables(self):
@@ -1196,14 +1219,9 @@ def test_calculate_backgrounds_basic(
11961219
)
11971220
xr.testing.assert_allclose(result["bg_rate_stat_uncert"], expected_stat_uncert)
11981221

1199-
# Check systematic uncertainty calculation
1200-
# (mean(geometric_factor_stat_uncert bounds) / geometric_factor) * bg_rate
1201-
mean_gf_stat_uncert = 0.5 * (
1202-
dataset["geometric_factor_stat_uncert_minus"]
1203-
+ dataset["geometric_factor_stat_uncert_plus"]
1204-
)
1222+
# Check systematic error calculation
12051223
expected_sys_err = (
1206-
result["bg_rate"] * mean_gf_stat_uncert / dataset["geometric_factor"]
1224+
dataset["bg_rate_sys_err_exposure_factor"] / dataset["exposure_factor"]
12071225
)
12081226
xr.testing.assert_allclose(result["bg_rate_sys_err"], expected_sys_err)
12091227

@@ -1219,6 +1237,10 @@ def test_calculate_backgrounds_zero_exposure(self):
12191237
("epoch", "energy"),
12201238
np.ones((1, 7)) * 0.004,
12211239
),
1240+
"bg_rate_sys_err_exposure_factor": (
1241+
("epoch", "energy"),
1242+
np.ones((1, 7)) * 0.05,
1243+
),
12221244
"exposure_factor": (("epoch", "energy"), np.zeros((1, 7))),
12231245
"geometric_factor": (("energy",), np.ones(7) * 1e-4),
12241246
"geometric_factor_stat_uncert_minus": (("energy",), np.ones(7) * 1e-5),
@@ -1839,6 +1861,7 @@ def test_cleanup_intermediate_variables(self):
18391861
"counts_over_eff_squared": (("energy",), np.ones(7)),
18401862
"bg_rate_exposure_factor": (("energy",), np.ones(7)),
18411863
"bg_rate_stat_uncert_exposure_factor2": (("energy",), np.ones(7)),
1864+
"bg_rate_sys_err_exposure_factor": (("energy",), np.ones(7)),
18421865
"ena_intensity": (("energy",), np.ones(7)), # Should be kept
18431866
"exposure_factor": (("energy",), np.ones(7)), # Should be kept
18441867
}
@@ -1856,6 +1879,7 @@ def test_cleanup_intermediate_variables(self):
18561879
assert "counts_over_eff_squared" not in result.data_vars
18571880
assert "bg_rate_exposure_factor" not in result.data_vars
18581881
assert "bg_rate_stat_uncert_exposure_factor2" not in result.data_vars
1882+
assert "bg_rate_sys_err_exposure_factor" not in result.data_vars
18591883

18601884
def test_cleanup_partial_variables(self):
18611885
"""Test cleanup when only some intermediate variables exist."""
@@ -2327,6 +2351,10 @@ def test_calculate_all_rates_and_intensities_complete(self):
23272351
("energy",),
23282352
np.ones(7) * 0.009,
23292353
),
2354+
"bg_rate_sys_err_exposure_factor": (
2355+
("energy",),
2356+
np.ones(7) * 0.06,
2357+
),
23302358
}
23312359
)
23322360

@@ -2373,6 +2401,10 @@ def test_calculate_all_rates_with_cg_correction(
23732401
("epoch", "energy"),
23742402
np.ones((1, 7)) * 0.009,
23752403
)
2404+
dataset["bg_rate_sys_err_exposure_factor"] = (
2405+
("epoch", "energy"),
2406+
np.ones((1, 7)) * 0.06,
2407+
)
23762408
dataset["energy_sc_exposure_factor"] = xr.ones_like(dataset["ena_intensity"])
23772409

23782410
# Mock the interpolation function
@@ -2425,6 +2457,10 @@ def test_calculate_all_rates_cg_with_other_corrections(
24252457
("epoch", "energy"),
24262458
np.ones((1, 7)) * 0.009,
24272459
)
2460+
dataset["bg_rate_sys_err_exposure_factor"] = (
2461+
("epoch", "energy"),
2462+
np.ones((1, 7)) * 0.06,
2463+
)
24282464
dataset["energy_sc_exposure_factor"] = xr.ones_like(dataset["ena_intensity"])
24292465

24302466
with patch(
@@ -2869,8 +2905,10 @@ def test_project_pset_to_map_value_keys(self, minimal_pset_for_species):
28692905
"counts_over_eff_squared",
28702906
"bg_rate",
28712907
"bg_rate_stat_uncert",
2908+
"bg_rate_sys_err",
28722909
"bg_rate_exposure_factor",
28732910
"bg_rate_stat_uncert_exposure_factor2",
2911+
"bg_rate_sys_err_exposure_factor",
28742912
]
28752913

28762914
for key in expected_keys:

0 commit comments

Comments
 (0)