use std::f64::consts::{FRAC_PI_2, PI};
use mwa_hyperbeam::{analytic::AnalyticBeam, AzEl};
fn main() {
if let Err(e) = try_main() {
eprintln!("Error: {e}");
std::process::exit(1);
}
}
fn try_main() -> Result<(), Box<dyn std::error::Error>> {
let mut args = std::env::args().skip(1);
let num_directions: usize = args
.next()
.expect("number of directions supplied")
.parse()
.expect("number of directions is a number");
let beam = AnalyticBeam::new();
let mut azels = vec![];
for i in 0..num_directions {
let az = 0.9 * PI * i as f64 / num_directions as f64;
let za = 0.1 + 0.9 * PI / 2.0 * i as f64 / num_directions as f64;
azels.push(AzEl::from_radians(az, FRAC_PI_2 - za));
}
let freq_hz = 51200000;
let delays = [0; 16];
assert_eq!(delays.len(), 16);
let amps = [1.0; 16];
assert!(amps.len() == 16 || amps.len() == 32);
let latitude_rad = -0.4660608448386394; let norm_to_zenith = true;
let jones = beam.calc_jones_array(
&azels,
freq_hz,
&delays,
&s,
latitude_rad,
norm_to_zenith,
)?;
println!("The first Jones matrix:");
let j = jones[0];
println!(
"[[{:+.8}, {:+.8}]\n [{:+.8}, {:+.8}]]",
j[0], j[1], j[2], j[3]
);
Ok(())
}