use serde::Serialize;
#[derive(Debug, Clone, Serialize)]
pub struct StarMetrics {
pub x: f64,
pub y: f64,
pub flux: f32,
pub peak: f32,
pub a: f32,
pub b: f32,
pub theta: f32,
pub eccentricity: f32,
pub fwhm: f32,
pub kron_radius: f32,
pub flux_auto: f32,
pub fluxerr_auto: f32,
pub npix: usize,
pub elongation: f32,
pub flag: u8,
}
#[derive(Debug, Clone, Serialize)]
pub struct StarStats {
pub count: usize,
pub median_fwhm: f32,
pub median_eccentricity: f32,
pub fwhm_std_dev: f32,
pub eccentricity_std_dev: f32,
pub median_kron_radius: f32,
pub median_flux: f32,
pub median_snr: f32,
pub median_elongation: f32,
pub flagged_fraction: f32,
pub kron_radius_std_dev: f32,
pub flux_std_dev: f32,
pub snr_std_dev: f32,
}
#[derive(Debug, Clone, Serialize)]
pub struct BackgroundMetrics {
pub median: f32,
pub rms: f32,
pub min: f32,
pub max: f32,
pub uniformity: f32,
}
#[derive(Debug, Clone, Copy, Serialize)]
pub struct QualityWeights {
pub fwhm: f32,
pub eccentricity: f32,
pub background: f32,
pub kron_radius: f32,
pub snr: f32,
pub flag: f32,
}
impl Default for QualityWeights {
fn default() -> Self {
Self {
fwhm: 0.3,
eccentricity: 0.2,
background: 0.2,
kron_radius: 0.15,
snr: 0.1,
flag: 0.05,
}
}
}
#[derive(Debug, Clone, Serialize)]
pub struct QualityScores {
pub fwhm: f32,
pub eccentricity: f32,
pub background: f32,
pub kron_radius: f32,
pub snr: f32,
pub flag: f32,
pub overall: f32,
}
#[derive(Debug, Clone, Serialize)]
pub struct FrameQualityMetrics {
pub frame_id: String,
pub star_stats: StarStats,
pub background: BackgroundMetrics,
pub scores: QualityScores,
}