vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization package

Submodules

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.centroids module

Centroid Visualization Plots.

Contains plotting functions for visualizing cluster centroid simulation results: - Reflectivity curves from forward simulation - Parameter bar charts comparing centroid values

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.centroids.create_centroid_plots(app, centroid_results: List[Dict], q_values, original_data, param_names: List[str], spectrum_idx: int, samples: ndarray | None = None, cluster_labels: ndarray | None = None)

Orchestrate creation of all centroid-related plots.

Parameters:
  • app – VIPR application instance

  • centroid_results – List of dicts with centroid info and curves

  • q_values – Q-values for x-axis

  • original_data – Original experimental data

  • param_names – List of parameter names

  • spectrum_idx – Spectrum index

  • samples – Original parameter samples (for box-plot uncertainty visualization)

  • cluster_labels – Cluster assignments (for box-plot uncertainty visualization)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.corner module

Clustered Corner Plot.

Contains all logic for creating the enhanced corner plot with cluster overlay. Shows posterior distributions with identified cluster modes.

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.corner.create_clustered_corner_plot(app, samples, cluster_labels, param_names, spectrum_idx, centroid_results=None)

Create improved corner plot with cluster overlay.

Features: - Top-N cluster filtering (shows only 3 largest if >4 exist) - Better color palette (tab10) with higher contrast - Filled contours with transparency gradients - Cluster-specific 1D histograms - “Mode” terminology with percentages - Optional polished parameter markers

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments

  • param_names – Parameter names

  • spectrum_idx – Spectrum index

  • centroid_results – Optional list of centroid results (for polished markers)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.interactive module

Interactive cluster visualization data export.

Exports cluster analysis data via DataCollector for interactive Plotly-based visualization in the frontend. Enables: - Interactive corner plots with clickable clusters - Synchronized reflectivity curve highlighting - Real-time cluster selection without server round-trips

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.interactive.add_centroid_summary_csv(app, param_names: List[str], centroid_results: List[Dict], spectrum_idx: int = 0)

Export cluster centroids as a compact CSV file.

Creates a separate CSV with one row per cluster containing: - Parameter values at centroid position - Cluster metadata (size, label) - Optionally polished parameter values

This is ideal for external matplotlib processing as it provides a compact summary of cluster centers without duplicating data across thousands of rows.

Example output (3 clusters, 2 parameters):

cluster_id,cluster_label,size,Thickness_L1,Roughness_L1 0,0,1500,45.2,3.1 1,1,2000,48.7,2.8 2,2,500,42.3,4.2

Parameters:
  • app – VIPR application instance

  • param_names – List of parameter names

  • centroid_results – List of dicts with centroid info (from simulation.py)

  • spectrum_idx – Spectrum index (for multi-spectrum batches)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.interactive.add_interactive_cluster_data(app, samples: ndarray, cluster_labels: ndarray, param_names: List[str], centroid_results: List[Dict], q_values: Any, original_data: Any | None, spectrum_idx: int = 0)

Export all interactive cluster visualization data to DataCollector.

This is the main entry point that exports both corner plot and curves data for interactive frontend visualization. Called by the clustering orchestrator after matplotlib visualizations are created.

Parameters:
  • app – VIPR application instance (with datacollector)

  • samples – Parameter samples array (num_samples, num_params)

  • cluster_labels – Cluster assignment for each sample

  • param_names – List of parameter names

  • centroid_results – List of dicts with centroid info (from simulation.py)

  • q_values – Q-values for reflectivity curves

  • original_data – Original experimental data (if available)

  • spectrum_idx – Spectrum index (for multi-spectrum batches)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.interactive.add_interactive_corner_data(app, samples: ndarray, cluster_labels: ndarray, param_names: List[str], centroid_results: List[Dict], spectrum_idx: int = 0)

Export corner plot data for interactive frontend visualization.

Creates a diagram with per-parameter value lists and cluster labels. Frontend can use this to render an interactive scatter plot matrix (corner plot) where users can click on clusters.

Data structure: - One list per parameter with all sample values - One list with cluster labels for coloring - Metadata with parameter names and cluster info

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples array (num_samples, num_params)

  • cluster_labels – Cluster assignment for each sample (num_samples,)

  • param_names – List of parameter names

  • centroid_results – List of dicts with centroid info (from simulation.py)

  • spectrum_idx – Spectrum index (for multi-spectrum batches)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.interactive.add_interactive_curves_data(app, centroid_results: List[Dict], q_values: Any, original_data: Any | None, spectrum_idx: int = 0)

Export reflectivity curves data for synchronized visualization.

Creates a diagram with experimental data and simulated curves for each cluster centroid. Frontend can use this to render an interactive line plot that responds to cluster selection in the corner plot.

Parameters:
  • app – VIPR application instance

  • centroid_results – List of dicts with centroid info and curves

  • q_values – Q-values for x-axis (tensor or array)

  • original_data – Original experimental data (if available)

  • spectrum_idx – Spectrum index (for multi-spectrum batches)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.marginals module

Per-Cluster Marginal Distributions.

Creates 1D histograms for each parameter within each cluster, showing the uncertainty of individual parameters within each solution.

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.marginals.create_cluster_marginals(app, samples: ndarray, cluster_labels: ndarray, param_names: list, spectrum_idx: int, cluster_sizes: list, centroid_results=None)

Create 1D marginal histograms for each parameter within each cluster.

This shows the uncertainty of individual parameters WITHIN each cluster solution, complementing the multivariate clustering analysis. Optionally overlays centroid positions (unpolished and polished) as vertical lines.

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments

  • param_names – Names of parameters

  • spectrum_idx – Spectrum index

  • cluster_sizes – List of (label, size) tuples sorted by size descending

  • centroid_results – Optional list of centroid dicts with ‘centroid’ and ‘polished_params’ keys for overlay visualization

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.parallel_coordinates module

Parallel Coordinates Visualization.

Visualizes high-dimensional parameter distributions with cluster coloring. Features: - Quantile clipping to remove outliers - Separability-based axis sorting - Stratified sampling for cleaner visualization

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.parallel_coordinates.create_parallel_coordinates_plot(app, samples: ndarray, cluster_labels: ndarray, param_names: List[str], spectrum_idx: int, seed: int | None = None, cluster_sizes: list | None = None)

Create parallel coordinates plot with cluster coloring.

Features: - Axes sorted by separability (best cluster discriminators first) - Quantile clipping (1-99%) to remove outliers - Stratified sampling for cleaner visualization

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments for each sample

  • param_names – List of parameter names

  • spectrum_idx – Spectrum index

  • seed – Optional random seed for reproducible sampling (default: None)

  • cluster_sizes – List of (label, size) tuples sorted by size descending (default: None)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.utils module

Visualization Utility Functions.

Shared helper functions used across multiple visualization modules. This ensures DRY (Don’t Repeat Yourself) principle compliance.

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.utils.add_units_to_param(param_name: str) str

Add appropriate units to parameter names for axis labels.

Parameters:

param_name – Parameter name (e.g., ‘thickness’, ‘sld’)

Returns:

Parameter name with appropriate units appended

Examples

>>> add_units_to_param('thickness')
'thickness (Å)'
>>> add_units_to_param('sld')
'sld (10⁻⁶ Å⁻²)'
>>> add_units_to_param('other_param')
'other_param'

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.validation module

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.validation.create_validation_plots(app, samples: ndarray, cluster_labels: ndarray, spectrum_idx: int, cluster_sizes: list)

Create cluster validation plots (silhouette only).

BIC/AIC analysis is now in the separate model_selection hook.

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments

  • spectrum_idx – Spectrum index

  • cluster_sizes – List of (label, size) tuples sorted by size descending

Module contents

Visualization Package API.

Provides a clean, high-level interface to all plotting functions related to cluster analysis. This facade hides the internal module structure from external consumers.

Public API:
  • create_validation_plots: Silhouette and BIC plots

  • create_clustered_corner_plot: Corner plot with cluster overlay

  • create_cluster_marginals: 1D marginal distributions per cluster

  • create_centroid_plots: Reflectivity curves and parameter charts

  • create_parallel_coordinates_plot: Parallel coordinates for parameter correlations

  • add_interactive_cluster_data: Export interactive data to DataCollector (NEW)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.add_interactive_cluster_data(app, samples: ndarray, cluster_labels: ndarray, param_names: List[str], centroid_results: List[Dict], q_values: Any, original_data: Any | None, spectrum_idx: int = 0)

Export all interactive cluster visualization data to DataCollector.

This is the main entry point that exports both corner plot and curves data for interactive frontend visualization. Called by the clustering orchestrator after matplotlib visualizations are created.

Parameters:
  • app – VIPR application instance (with datacollector)

  • samples – Parameter samples array (num_samples, num_params)

  • cluster_labels – Cluster assignment for each sample

  • param_names – List of parameter names

  • centroid_results – List of dicts with centroid info (from simulation.py)

  • q_values – Q-values for reflectivity curves

  • original_data – Original experimental data (if available)

  • spectrum_idx – Spectrum index (for multi-spectrum batches)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.create_centroid_plots(app, centroid_results: List[Dict], q_values, original_data, param_names: List[str], spectrum_idx: int, samples: ndarray | None = None, cluster_labels: ndarray | None = None)

Orchestrate creation of all centroid-related plots.

Parameters:
  • app – VIPR application instance

  • centroid_results – List of dicts with centroid info and curves

  • q_values – Q-values for x-axis

  • original_data – Original experimental data

  • param_names – List of parameter names

  • spectrum_idx – Spectrum index

  • samples – Original parameter samples (for box-plot uncertainty visualization)

  • cluster_labels – Cluster assignments (for box-plot uncertainty visualization)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.create_cluster_marginals(app, samples: ndarray, cluster_labels: ndarray, param_names: list, spectrum_idx: int, cluster_sizes: list, centroid_results=None)

Create 1D marginal histograms for each parameter within each cluster.

This shows the uncertainty of individual parameters WITHIN each cluster solution, complementing the multivariate clustering analysis. Optionally overlays centroid positions (unpolished and polished) as vertical lines.

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments

  • param_names – Names of parameters

  • spectrum_idx – Spectrum index

  • cluster_sizes – List of (label, size) tuples sorted by size descending

  • centroid_results – Optional list of centroid dicts with ‘centroid’ and ‘polished_params’ keys for overlay visualization

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.create_clustered_corner_plot(app, samples, cluster_labels, param_names, spectrum_idx, centroid_results=None)

Create improved corner plot with cluster overlay.

Features: - Top-N cluster filtering (shows only 3 largest if >4 exist) - Better color palette (tab10) with higher contrast - Filled contours with transparency gradients - Cluster-specific 1D histograms - “Mode” terminology with percentages - Optional polished parameter markers

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments

  • param_names – Parameter names

  • spectrum_idx – Spectrum index

  • centroid_results – Optional list of centroid results (for polished markers)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.create_parallel_coordinates_plot(app, samples: ndarray, cluster_labels: ndarray, param_names: List[str], spectrum_idx: int, seed: int | None = None, cluster_sizes: list | None = None)

Create parallel coordinates plot with cluster coloring.

Features: - Axes sorted by separability (best cluster discriminators first) - Quantile clipping (1-99%) to remove outliers - Stratified sampling for cleaner visualization

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments for each sample

  • param_names – List of parameter names

  • spectrum_idx – Spectrum index

  • seed – Optional random seed for reproducible sampling (default: None)

  • cluster_sizes – List of (label, size) tuples sorted by size descending (default: None)

vipr_reflectometry.flow_models.postprocess.cluster.clustering.visualization.create_validation_plots(app, samples: ndarray, cluster_labels: ndarray, spectrum_idx: int, cluster_sizes: list)

Create cluster validation plots (silhouette only).

BIC/AIC analysis is now in the separate model_selection hook.

Parameters:
  • app – VIPR application instance

  • samples – Parameter samples (num_samples, num_params)

  • cluster_labels – Cluster assignments

  • spectrum_idx – Spectrum index

  • cluster_sizes – List of (label, size) tuples sorted by size descending