use std::f64::consts::{FRAC_PI_2, PI};
use mwa_hyperbeam::{fee::FEEBeam, 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_file = args.next();
let beam = match beam_file {
Some(f) => FEEBeam::new(f)?,
None => FEEBeam::new_from_env()?,
};
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 norm_to_zenith = true;
let latitude_rad = Some(-0.4660608448386394); let iau_order = true;
let jones = beam.calc_jones_array(
&azels,
freq_hz,
&delays,
&s,
norm_to_zenith,
latitude_rad,
iau_order,
)?;
println!("The first Jones matrix:");
let j = jones[0];
println!(
"[[{:+.8}, {:+.8}]\n [{:+.8}, {:+.8}]]",
j[0], j[1], j[2], j[3]
);
Ok(())
}