Skip to content

cosmotron_mcp.tools.sacc

assemble_sacc_from_session

assemble_sacc_from_session(session_dir: str, bin_indices: list[int] | None = None, output_name: str = 'data_vector_sacc.fits') -> dict

Assemble a SACC data vector from a session's per-bin Cℓ + covariance + n(z).

ONE call replaces the hand-assembly of tracers/data_points/covariance. Auto-detects mode from which artefacts are present on disk:

Auto mode (single-bin or no cross-Cl files): reads results/spectra/cls_bin_NN_x_NN.json + results/covariance/covariance_bin_NN_x_NN.json per bin, builds SACC with auto-spectra only and block-diagonal covariance. Prerequisites: compute_cls_from_session + compute_covariance_from_session.

Tomographic mode (cross-Cl files cls_bin_{i:02d}_x_{j:02d}.json present): reads all N(N+1)/2 Cℓ files + results/covariance/covariance_all_bins.json, builds SACC with all auto + cross data points and the full joint covariance matrix. Prerequisites: compute_all_cls_from_session + compute_full_covariance_from_session.

NEVER hand-build a SACC with import sacc; the low-level save_data_vector_sacc is used internally. Writes to results/{output_name} and registers the artefact.

Parameters:

Name Type Description Default
session_dir str

Session directory.

required
bin_indices list[int] | None

Subset of tomographic bins to include; None includes every bin in the manifest.

None
output_name str

Output filename, written under results/.

'data_vector_sacc.fits'

Returns:

Type Description
dict

``{sacc_path, n_tracers, n_data_points, has_covariance,

dict

tracer_names, session_dir, bins, mode}``.

Source code in cosmotron_mcp/server.py
@mcp.tool()
@sync_budget_guard
def assemble_sacc_from_session(
    session_dir: str,
    bin_indices: list[int] | None = None,
    output_name: str = "data_vector_sacc.fits",
) -> dict:
    """Assemble a SACC data vector from a session's per-bin Cℓ + covariance + n(z).

    ONE call replaces the hand-assembly of tracers/data_points/covariance.
    Auto-detects mode from which artefacts are present on disk:

    **Auto mode** (single-bin or no cross-Cl files): reads
    `results/spectra/cls_bin_NN_x_NN.json` + `results/covariance/covariance_bin_NN_x_NN.json` per bin,
    builds SACC with auto-spectra only and block-diagonal covariance.
    Prerequisites: `compute_cls_from_session` + `compute_covariance_from_session`.

    **Tomographic mode** (cross-Cl files `cls_bin_{i:02d}_x_{j:02d}.json` present):
    reads all N(N+1)/2 Cℓ files + `results/covariance/covariance_all_bins.json`, builds SACC
    with all auto + cross data points and the full joint covariance matrix.
    Prerequisites: `compute_all_cls_from_session` + `compute_full_covariance_from_session`.

    NEVER hand-build a SACC with `import sacc`; the low-level `save_data_vector_sacc`
    is used internally. Writes to `results/{output_name}` and registers the artefact.

    Args:
        session_dir: Session directory.
        bin_indices: Subset of tomographic bins to include; `None` includes
            every bin in the manifest.
        output_name: Output filename, written under `results/`.

    Returns:
        ``{sacc_path, n_tracers, n_data_points, has_covariance,
        tracer_names, session_dir, bins, mode}``.
    """
    _require_human_gates(session_dir)
    result = _assemble_sacc_from_session(
        session_dir, bin_indices=bin_indices, output_name=output_name)
    _log_tool_call(session_dir, "assemble_sacc_from_session", {
        "bin_indices": bin_indices, "output_name": output_name,
    })
    return result

assemble_validation_sacc_from_session

assemble_validation_sacc_from_session(session_dir: str, output_name: str = 'validation_bmodes_sacc.fits') -> dict

Assemble the SEPARATE B-mode validation SACC (BB/EB), never the data vector.

For every spin-2 bin: BB + EB auto-spectra (cls_BB_denoised/cls_EB_denoised) + their VALIDATION covariances (compute_validation_covariance_from_session, auto-built if absent) → results/validation_bmodes_sacc.fits with sacc data types galaxy_shear_cl_bb/galaxy_shear_cl_eb and the same src{k} tracers as the main SACC. Registered as artefact type validation_sacc.

NEVER feed this file to inference — it is a data-quality product. run_inference resolves the main data vector by artefact type sacc, so this file is ignored.

Parameters:

Name Type Description Default
session_dir str

Session directory.

required
output_name str

Output filename, written under results/.

'validation_bmodes_sacc.fits'

Returns:

Type Description
dict

``{sacc_path, n_tracers, n_data_points, has_covariance,

dict

tracer_names, components, session_dir, bins}``.

Source code in cosmotron_mcp/server.py
@mcp.tool()
@sync_budget_guard
def assemble_validation_sacc_from_session(
    session_dir: str,
    output_name: str = "validation_bmodes_sacc.fits",
) -> dict:
    """Assemble the SEPARATE B-mode validation SACC (BB/EB), never the data vector.

    For every spin-2 bin: BB + EB auto-spectra (`cls_BB_denoised`/`cls_EB_denoised`)
    + their VALIDATION covariances (`compute_validation_covariance_from_session`,
    auto-built if absent) → `results/validation_bmodes_sacc.fits` with sacc data
    types `galaxy_shear_cl_bb`/`galaxy_shear_cl_eb` and the same `src{k}` tracers as
    the main SACC. Registered as artefact type `validation_sacc`.

    NEVER feed this file to inference — it is a data-quality product. `run_inference`
    resolves the main data vector by artefact type `sacc`, so this file is ignored.

    Args:
        session_dir: Session directory.
        output_name: Output filename, written under `results/`.

    Returns:
        ``{sacc_path, n_tracers, n_data_points, has_covariance,
        tracer_names, components, session_dir, bins}``.
    """
    _require_human_gates(session_dir)
    result = _assemble_validation_sacc_from_session(session_dir, output_name=output_name)
    _log_tool_call(session_dir, "assemble_validation_sacc_from_session",
                   {"output_name": output_name})
    return result