Skip to content

montage_visualizer

tit.tools.montage_visualizer

Montage Visualizer — renders PNG visualizations of electrode placements.

Public API

visualize_montage(montage_name, electrode_pairs, eeg_net, output_dir, sim_mode)

visualize_montage

visualize_montage(montage_name: str, electrode_pairs: list[list[str]], eeg_net: str, output_dir: str, sim_mode: str = 'U') -> None

Render a PNG showing electrode positions and connection arcs.

Parameters

montage_name : used as output filename base (unipolar) or "combined" (multipolar) electrode_pairs : list of [e1, e2] pairs, e.g. [["E030","E020"],["E095","E070"]] eeg_net : EEG cap name, e.g. "GSN-HydroCel-185.csv" output_dir : directory to write PNG(s) into sim_mode : "U" → one image per montage; "M" → single combined image

Source code in tit/tools/montage_visualizer.py
def visualize_montage(
    montage_name: str,
    electrode_pairs: list[list[str]],
    eeg_net: str,
    output_dir: str,
    sim_mode: str = "U",
) -> None:
    """
    Render a PNG showing electrode positions and connection arcs.

    Parameters
    ----------
    montage_name    : used as output filename base (unipolar) or "combined" (multipolar)
    electrode_pairs : list of [e1, e2] pairs, e.g. [["E030","E020"],["E095","E070"]]
    eeg_net         : EEG cap name, e.g. "GSN-HydroCel-185.csv"
    output_dir      : directory to write PNG(s) into
    sim_mode        : "U" → one image per montage; "M" → single combined image
    """
    if eeg_net in _SKIP_NETS:
        return

    coords = _load_coordinates(eeg_net)

    template = os.path.join(_RESOURCES_DIR, "GSN-256.png")
    os.makedirs(output_dir, exist_ok=True)

    if sim_mode == "U":
        out_image = os.path.join(
            output_dir, f"{montage_name}_highlighted_visualization.png"
        )
        subprocess.run(["cp", template, out_image], check=True)
    else:
        out_image = os.path.join(output_dir, "combined_montage_visualization.png")
        if not os.path.exists(out_image):
            subprocess.run(["cp", template, out_image], check=True)

    for i, pair in enumerate(electrode_pairs):
        e1, e2 = pair
        color = _COLORS[i % len(_COLORS)]
        ring = os.path.join(_RESOURCES_DIR, _RINGS[i % len(_RINGS)])
        if e1 in coords:
            _overlay_ring(out_image, *coords[e1], color, ring)
        if e2 in coords:
            _overlay_ring(out_image, *coords[e2], color, ring)
        if e1 in coords and e2 in coords:
            _draw_arc(out_image, *coords[e1], *coords[e2], color)