Skip to main content

trail_test/
trail_test.rs

1use astroimage::ImageAnalyzer;
2
3fn analyze_file(label: &str, path: &str) {
4    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
5    println!("{label}");
6    println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
7
8    let analyzer = ImageAnalyzer::new();
9    let r = analyzer.analyze(path).unwrap();
10
11    println!("  Stars detected:       {}", r.stars_detected);
12    println!("  Stars after filter:   {}", r.stars.len());
13    println!("  Median FWHM:          {:.3}", r.median_fwhm);
14    println!("  Median eccentricity:  {:.3}", r.median_eccentricity);
15    println!("  Median SNR:           {:.1}", r.median_snr);
16    println!("  PSF signal:           {:.1}", r.psf_signal);
17    println!("  Trail R²:             {:.4}", r.trail_r_squared);
18    println!("  Possibly trailed:     {}", r.possibly_trailed);
19
20    // Show theta distribution
21    let n = r.stars.len();
22    if n >= 5 {
23        let mut thetas: Vec<f32> = r.stars.iter().map(|s| s.theta.to_degrees()).collect();
24        thetas.sort_by(|a, b| a.total_cmp(b));
25
26        let (sum_cos, sum_sin) = r.stars.iter().fold((0.0f64, 0.0f64), |(sc, ss), s| {
27            let a = 2.0 * s.theta as f64;
28            (sc + a.cos(), ss + a.sin())
29        });
30        let mean_theta = (sum_sin.atan2(sum_cos) * 0.5).to_degrees();
31
32        println!("\n  Theta ({} measured stars):", n);
33        println!("    Mean theta:   {mean_theta:.1}deg");
34        println!(
35            "    min={:.1}  p25={:.1}  median={:.1}  p75={:.1}  max={:.1}",
36            thetas[0],
37            thetas[n / 4],
38            thetas[n / 2],
39            thetas[3 * n / 4],
40            thetas[n - 1]
41        );
42    }
43
44    if !r.stars.is_empty() {
45        println!("\n  Top 5 stars:");
46        for (i, s) in r.stars.iter().take(5).enumerate() {
47            println!(
48                "    #{}: ecc={:.3} theta={:.1}deg fwhm={:.2} peak={:.0}",
49                i + 1,
50                s.eccentricity,
51                s.theta.to_degrees(),
52                s.fwhm,
53                s.peak
54            );
55        }
56    }
57    println!();
58}
59
60fn main() {
61    let good = "/Volumes/BigMac/Users/astrobureau/Pictures/Unsorted/edph/NINA/COPIED/CAMERA_DUO/Barnard 150/2024-09-28/LIGHT/2024-09-28_23-16-30_-10.00_180.00s_0281.fits";
62    let s_trail = "/Volumes/BigMac/Users/astrobureau/Pictures/Unsorted/edph/NINA/COPIED/CAMERA_DUO/Barnard 150/2024-09-28/LIGHT/2024-09-29_05-41-37_-9.90_180.00s_0381.fits";
63    let linear_trail = "/Volumes/BigMac/Users/astrobureau/Pictures/Unsorted/edph/NINA/COPIED/CAMERA_DUO/Barnard 150/2024-09-27/LIGHT/2024-09-28_05-41-28_-10.00_180.00s_0236.fits";
64
65    analyze_file("GOOD STARS (0281)", good);
66    analyze_file("S-SHAPED TRAILS (0381)", s_trail);
67    analyze_file("LINEAR TRAILS (0236)", linear_trail);
68}