Function birli::io::write_uvfits
source · pub fn write_uvfits<T: AsRef<Path>>(
path: T,
corr_ctx: &CorrelatorContext,
jones_array: ArrayView3<'_, Jones<f32>>,
weight_array: ArrayView3<'_, f32>,
timestep_range: &Range<usize>,
coarse_chan_range: &Range<usize>,
baseline_idxs: &[usize],
array_pos: Option<LatLngHeight>,
phase_centre: Option<RADec>,
avg_time: usize,
avg_freq: usize
) -> Result<(), IOError>
Expand description
Write the given ndarrays of flags and Jones
matrix visibilities to a
uvfits file.
mwalib timestep, coarse channel and baseline indices are needed to map between indices in the arrays and indices according to mwalib, which are not the same.
Examples
use tempfile::tempdir;
use birli::{
FlagContext,
marlu::mwalib::CorrelatorContext,
get_weight_factor,
flag_to_weight_array,
VisSelection, io::{read_mwalib, write_uvfits}
};
// define our input files
let metafits_path = "tests/data/1196175296_mwa_ord/1196175296.metafits";
let gpufits_paths = vec![
"tests/data/1196175296_mwa_ord/1196175296_20171201145440_gpubox01_00.fits",
];
// define a temporary directory for output files
let tmp_dir = tempdir().unwrap();
// define our output flag file template
let uvfits_out = tmp_dir.path().join("synthetic.uvfits");
// Create an mwalib::CorrelatorContext for accessing visibilities.
let corr_ctx = CorrelatorContext::new(metafits_path, &gpufits_paths).unwrap();
// Determine which timesteps and coarse channels we want to use
let vis_sel = VisSelection::from_mwalib(&corr_ctx).unwrap();
// Create a blank array to store flags and visibilities
let fine_chans_per_coarse = corr_ctx.metafits_context.num_corr_fine_chans_per_coarse;
let mut flag_array = vis_sel.allocate_flags(fine_chans_per_coarse).unwrap();
let mut jones_array = vis_sel.allocate_jones(fine_chans_per_coarse).unwrap();
// read visibilities out of the gpubox files
read_mwalib(&vis_sel, &corr_ctx, jones_array.view_mut(), flag_array.view_mut(), false)
.unwrap();
// write the visibilities to disk as .uvfits
let num_pols = corr_ctx.metafits_context.num_visibility_pols;
let weight_factor = get_weight_factor(&corr_ctx);
let weight_array = flag_to_weight_array(flag_array.view(), weight_factor);
write_uvfits(
uvfits_out.as_path(),
&corr_ctx,
jones_array.view(),
weight_array.view(),
&vis_sel.timestep_range,
&vis_sel.coarse_chan_range,
&vis_sel.baseline_idxs,
None,
None,
1,
1,
)
.unwrap();
Errors
See: UvfitsWriter
TODO: reduce number of arguments.