fix: use underscores in branch names for CSV headers

This commit is contained in:
2026-07-03 15:10:10 +03:00
parent a7eef7bc20
commit c2795bf86e
2 changed files with 17 additions and 16 deletions
+5 -5
View File
@@ -723,11 +723,11 @@ class BetaSpectrumAnalyzer:
if csv_verbosity == "full":
# Per-branch spectra and components with concise branch naming
for i in range(self._n_branches):
data[f"branch {i + 1}"] = self._get_branch_spectrum(i)
data[f"branch_{i + 1}_spectrum"] = self._get_branch_spectrum(i)
for comp_name in ["PhaseSpace", "Radiative"]:
key = self._get_component_key(i, comp_name)
if key in components:
data[f"branch {i + 1}_{comp_name}"] = components[key]
data[f"branch_{i + 1}_{comp_name}"] = components[key]
# Universal components (no prefix)
for name, values in components.items():
@@ -742,14 +742,14 @@ class BetaSpectrumAnalyzer:
neutrino_mass_keV = self.config.neutrino_mass_MeV * 1000
if branch_endpoint_keV <= neutrino_mass_keV:
# Branch is degenerate, spectrum should be all zeros
data[f"branch {i + 1}"] = np.zeros_like(branch_spectrum)
data[f"branch_{i + 1}_spectrum_normalized"] = np.zeros_like(branch_spectrum)
else:
# Branch is valid, normalize as usual
sum_spectrum = np.sum(branch_spectrum)
if sum_spectrum > 0:
data[f"branch {i + 1}"] = branch_spectrum / sum_spectrum
data[f"branch_{i + 1}_spectrum_normalized"] = branch_spectrum / sum_spectrum
else:
data[f"branch {i + 1}"] = branch_spectrum
data[f"branch_{i + 1}_spectrum_normalized"] = branch_spectrum
df = pd.DataFrame(data)
df.to_csv(filename, index=False, float_format="%.4e")
+12 -11
View File
@@ -467,8 +467,8 @@ class TestMultiBranchCSVExport:
assert "total_spectrum" in df.columns
# Should have per-branch spectrum columns (intensity/endpoint/transition are in the header)
assert "branch 1" in df.columns
assert "branch 2" in df.columns
assert "branch_1_spectrum" in df.columns
assert "branch_2_spectrum" in df.columns
# Should NOT have repeated per-branch metadata columns
assert "branch_1_intensity" not in df.columns
@@ -503,6 +503,7 @@ class TestMultiBranchCSVExport:
df = pd.read_csv(csv_path, comment="#")
assert "total_spectrum" in df.columns
assert "branch_1_spectrum" in df.columns
assert "Fermi" in df.columns
@@ -659,9 +660,9 @@ class TestMultiBranchEdgeCases:
W, _ = spectrum.get_energy_grid(config)
values = spectrum(W)
assert np.all(
np.isfinite(values)
), "High-Z multi-branch must not produce NaN/inf"
assert np.all(np.isfinite(values)), (
"High-Z multi-branch must not produce NaN/inf"
)
def test_no_branches_defaults_to_single(self):
"""No branches list should default to single-branch mode."""
@@ -726,9 +727,9 @@ class TestMultiBranchEdgeCases:
contrib = universal_product * branch.intensity * bs[i]
# Branch contribution should not exceed total
assert np.all(
contrib <= total + 1e-10
), f"Branch {i} contribution exceeds total at some points"
assert np.all(contrib <= total + 1e-10), (
f"Branch {i} contribution exceeds total at some points"
)
# Branch contribution should be non-negative
assert np.all(contrib >= 0), f"Branch {i} contribution has negative values"
@@ -778,6 +779,6 @@ class TestMultiBranchEdgeCases:
assert integral > 0, f"Branch {i} has zero integral"
# Sum of branch integrals should equal total
assert np.isclose(
sum(integrals), total_integral, rtol=1e-6
), "Sum of branch integrals should equal total integral"
assert np.isclose(sum(integrals), total_integral, rtol=1e-6), (
"Sum of branch integrals should equal total integral"
)