Bits & Flames bitsandflames/fyron

BOA

Fyron treats Body-and-Organ-Analysis workflows as one clinical imaging domain with three focused submodules:

  • fyron.boa_extraction turns BOA cohort folders into patient-level feature tables.
  • fyron.boa_radiomics extracts PyRadiomics texture and shape features from BOA masks.
  • fyron.visualization turns BOA CT and segmentation folders into review collages.

Keeping the Python modules separate is intentional. Extraction creates measurement features from JSON outputs. Radiomics creates texture and shape features from image-mask pairs. Visualization creates images for quality control, reports, and publication figures. They often use the same patient folders, but they have different outputs, dependencies, and failure modes.

BOA Folder Pattern

Most BOA workflows produce one folder per case:

text
boa-cohort/
  patient0001/
    bca-measurements.json
    total-measurements.json
    ct.nii.gz
    body-regions.nii.gz
    tissues.nii.gz
    total.nii.gz
  patient0002/
    bca-measurements.json
    total-measurements.json
    ct.nii.gz
    body-regions.nii.gz
    tissues.nii.gz
    total.nii.gz

The folder name is used as download_id by default in extraction, and as the row label source in visualization unless you pass explicit labels.

Choose The Right Submodule

GoalUseOutput
Find completed BOA patient foldersfyron.boa_extraction.discover_boa_caseslist of patient folder paths
Extract body-region tissue volumesfyron.boa_extraction.extract_body_region_featuresfeature dictionary or DataFrame
Extract organ volume, HU, CNR, ratiosfyron.boa_extraction.extract_total_segmentation_featuresfeature dictionary or DataFrame
Extract experimental aortic calcification burdenfyron.boa_extraction.extract_experimental_aortic_calcification_featuresfeature dictionary or DataFrame
Build one modeling table from BOA outputsfyron.boa_extraction.extract_boa_featurespandas.DataFrame
Extract radiomics from total.nii.gz or body-regions.nii.gzfyron.boa_radiomics.extract_boa_radiomics_featurespatient-level radiomics DataFrame
Create visual QC collagesfyron.visualization.create_boa_segmentation_collagePNG and metadata
Configure collage layersfyron.visualization.SegmentationLayerlayer configuration object

Typical Clinical Data Science Workflow

python
from fyron.boa_extraction import discover_boa_cases, extract_boa_features
from fyron.boa_radiomics import extract_boa_radiomics_features
from fyron.visualization import create_boa_segmentation_collage

cases = discover_boa_cases("/data/boa-cohort")

features = extract_boa_features(
    cases,
    num_workers=8,
    show_progress=True,
)

features.to_csv("boa_features.csv", index=False)

radiomics = extract_boa_radiomics_features(
    cases,
    segmentation_kind="total",
    labels={"liver": 5, "spleen": 1},
    num_workers=8,
)

create_boa_segmentation_collage(
    boa_folders=cases[:6],
    output_path="boa_qc.png",
    segmentation_layers=["body_regions", "tissues", "total"],
    slice_fraction=0.5,
)

Use measurement and radiomics table outputs for cohort joins, survival analysis, ML models, and correlation plots. Use the collage output to inspect whether the segmentations and selected slices are clinically plausible.

CLI Workflow

Run BOA feature extraction as a repeatable terminal step when patient folders already exist on disk:

bash
fyron boa-extract \
  --cohort-folder data/boa \
  --output boa_features.csv \
  --include-body-regions \
  --include-total \
  --include-aortic-experimental \
  --num-workers 8

Radiomics can be exported from the same folder structure:

bash
fyron boa-radiomics \
  --cohort-folder data/boa \
  --segmentation total \
  --output boa_radiomics.csv \
  --num-workers 8

Submodule Documentation

Start with the subpage that matches the task:

  • BOA Extraction for features, measurements, DataFrames, and model-ready tables.
  • BOA Radiomics for PyRadiomics features from body-regions.nii.gz and total.nii.gz.
  • BOA Visualization for segmentation collages, CT overlays, slice selection, and body-region cropping.

Design Boundary

The combined BOA docs page is a workflow map, not a fourth API layer. Keeping the actual package APIs as fyron.boa_extraction, fyron.boa_radiomics, and fyron.visualization prevents ambiguous function names and keeps imports explicit in notebooks:

python
from fyron.boa_extraction import extract_boa_features
from fyron.boa_radiomics import extract_boa_radiomics_features
from fyron.visualization import create_boa_segmentation_collage