use crate::Size;
use uid_derive::UID;
pub(crate) mod optical_model;
pub use optical_model::{
OpticalModel, OpticalModelBuilder, OpticalModelOptions, PSSnOptions, ShackHartmannOptions,
};
pub(crate) mod shackhartmann;
#[derive(UID)]
pub enum WfeRms {}
impl Size<WfeRms> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize
}
}
#[derive(UID)]
#[uid(data = "Vec<f32>")]
pub enum Wavefront {}
impl Size<Wavefront> for OpticalModel {
fn len(&self) -> usize {
let n = self.src.pupil_sampling as usize;
self.src.size as usize * n * n
}
}
#[derive(UID)]
pub enum TipTilt {}
impl Size<TipTilt> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize * 2
}
}
#[derive(UID)]
pub enum SegmentWfe {}
impl Size<SegmentWfe> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize * 7 * 2
}
}
#[derive(UID)]
pub enum SegmentWfeRms {}
impl Size<SegmentWfeRms> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize * 7
}
}
#[derive(UID)]
pub enum SegmentPiston {}
impl Size<SegmentPiston> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize * 7
}
}
#[derive(UID)]
pub enum SegmentGradients {}
impl Size<SegmentGradients> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize * 14
}
}
#[derive(UID)]
pub enum SegmentTipTilt {}
impl Size<SegmentTipTilt> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize * 14
}
}
#[derive(UID)]
pub enum PSSn {}
impl Size<PSSn> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize
}
}
#[derive(UID)]
pub enum PSSnFwhm {}
impl Size<PSSnFwhm> for OpticalModel {
fn len(&self) -> usize {
self.src.size as usize * 2
}
}
#[derive(UID)]
pub enum SensorData {}
#[derive(UID)]
#[uid(data = "Vec<f32>")]
pub enum DetectorFrame {}
#[derive(UID)]
pub enum M1rbm {}
#[derive(UID)]
pub enum M1modes {}
#[derive(UID)]
pub enum M2modes {}
#[derive(UID)]
pub enum M2rbm {}
#[derive(UID)]
pub enum M2rxy {}
#[cfg(feature = "crseo")]
#[derive(UID)]
#[uid(data = "crseo::gmt::SegmentsDof")]
pub enum GmtState {}