Skip to main content

analyze_batch/
analyze_batch.rs

1use astroimage::ImageAnalyzer;
2
3fn main() {
4    let dir = "tests/no_trails";
5    let mut files: Vec<_> = std::fs::read_dir(dir)
6        .unwrap()
7        .filter_map(|e| e.ok())
8        .filter(|e| e.path().extension().map_or(false, |ext| ext == "fits"))
9        .map(|e| e.path())
10        .collect();
11    files.sort();
12
13    println!(
14        "{:<12} {:>5} {:>5} {:>6} {:>6} {:>6} {:>6} {:>7} {:>8} {:>8} {:>6} {:>6} {:>6} {:>7}",
15        "FILE", "DET", "KEPT", "FWHM", "ECC", "SNR", "HFR", "SNR_W", "PSF_SIG", "FR_SNR", "W", "H", "R²", "TRAIL?"
16    );
17    println!("{}", "-".repeat(124));
18
19    for path in &files {
20        let name = path.file_name().unwrap().to_str().unwrap();
21        // Extract short name (frame number)
22        let short = if let Some(pos) = name.rfind('_') {
23            &name[pos + 1..name.len() - 5] // strip .fits
24        } else {
25            &name[..name.len().min(12)]
26        };
27
28        let analyzer = ImageAnalyzer::new();
29        match analyzer.analyze(path) {
30            Ok(r) => {
31                println!(
32                    "{:<12} {:>5} {:>5} {:>6.2} {:>6.3} {:>6.1} {:>6.2} {:>7.3} {:>8.1} {:>8.1} {:>6} {:>6} {:>6.3} {:>7}",
33                    short,
34                    r.stars_detected,
35                    r.stars.len(),
36                    r.median_fwhm,
37                    r.median_eccentricity,
38                    r.median_snr,
39                    r.median_hfr,
40                    r.snr_weight,
41                    r.psf_signal,
42                    r.frame_snr,
43                    r.width,
44                    r.height,
45                    r.trail_r_squared,
46                    if r.possibly_trailed { "YES" } else { "no" },
47                );
48            }
49            Err(e) => {
50                println!("{:<12} ERROR: {}", short, e);
51            }
52        }
53    }
54}