pub fn validate_geometries(geometries: &[Geometry]) -> Result<(), String>Expand description
Validates that interpolated geometries are chemically and numerically reasonable.
This function performs comprehensive validation of a set of geometries, checking for common issues that can arise during interpolation such as inconsistent atom counts, non-finite coordinates, and unreasonably large coordinate values.
§Arguments
geometries- A slice of geometries to validate
§Returns
Returns Ok(()) if all geometries pass validation, or Err(String) with
a descriptive error message if any issues are found.
§Validation Checks
- Non-empty: Ensures at least one geometry is provided
- Consistent atom count: All geometries have the same number of atoms
- Consistent elements: All geometries have the same element types
- Finite coordinates: No NaN or infinite coordinate values
- Reasonable coordinates: No coordinates with absolute value > 1000 Angstrom
§Examples
use omecp::lst::{interpolate_linear, validate_geometries};
use omecp::geometry::Geometry;
let elements = vec!["H".to_string(), "H".to_string()];
let coords1 = vec![0.0, 0.0, 0.0, 1.0, 0.0, 0.0];
let coords2 = vec![0.0, 0.0, 0.0, 2.0, 0.0, 0.0];
let geom1 = Geometry::new(elements.clone(), coords1);
let geom2 = Geometry::new(elements, coords2);
let path = interpolate_linear(&geom1, &geom2, 3);
assert!(validate_geometries(&path).is_ok());§Error Conditions
The function returns an error in the following cases:
- Empty geometry vector
- Inconsistent number of atoms between geometries
- Different element types between geometries
- Non-finite coordinates (NaN or infinite values)
- Coordinates with absolute values exceeding 1000 Angstrom
§Notes
- The 1000 Angstrom limit is a safety check for obviously incorrect structures
- This validation should be called after any interpolation operation
- Failed validation often indicates issues with input geometries or numerical problems during interpolation