use molrs::types::F;
use ndarray::Array1;
use crate::compute::result::{ComputeResult, DescriptorRow};
#[derive(Debug, Clone)]
pub struct MSDResult {
pub per_particle: Array1<F>,
pub mean: F,
}
impl DescriptorRow for MSDResult {
fn as_row(&self) -> &[F] {
self.per_particle
.as_slice()
.expect("MSDResult::per_particle must be contiguous")
}
}
#[derive(Debug, Clone, Default)]
pub struct MSDTimeSeries {
pub data: Vec<MSDResult>,
}
impl MSDTimeSeries {
pub fn new(data: Vec<MSDResult>) -> Self {
Self { data }
}
pub fn len(&self) -> usize {
self.data.len()
}
pub fn is_empty(&self) -> bool {
self.data.is_empty()
}
}
impl ComputeResult for MSDTimeSeries {}
impl AsRef<[MSDResult]> for MSDTimeSeries {
fn as_ref(&self) -> &[MSDResult] {
&self.data
}
}