Skip to content

Commit

Permalink
Fix issues around averaging factors.
Browse files Browse the repository at this point in the history
The parse_{time,freq}_average_factor functions expect {time,freq}
resolutions, but they weren't getting them, and things weren't working
as expected. This commit fixes that and an associated test.
  • Loading branch information
cjordan committed Apr 6, 2022
1 parent 70a623f commit 90c2c21
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 42 deletions.
70 changes: 32 additions & 38 deletions src/calibrate/params/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -804,44 +804,38 @@ impl CalibrateParams {
} else {
// Parse and verify user input (specified resolutions must
// evenly divide the input data's resolutions).
let time_factor = parse_time_average_factor(
obs_context
.time_res
.map(|res| res * time_average_factor as f64),
output_vis_time_average,
1,
)
.map_err(|e| match e {
AverageFactorError::Zero => InvalidArgsError::OutputVisTimeAverageFactorZero,
AverageFactorError::NotInteger => {
InvalidArgsError::OutputVisTimeFactorNotInteger
}
AverageFactorError::NotIntegerMultiple { out, inp } => {
InvalidArgsError::OutputVisTimeResNotMulitple { out, inp }
}
AverageFactorError::Parse(e) => {
InvalidArgsError::ParseOutputVisTimeAverageFactor(e)
}
})?;
let freq_factor = parse_freq_average_factor(
obs_context
.freq_res
.map(|res| res * freq_average_factor as f64),
output_vis_freq_average,
1,
)
.map_err(|e| match e {
AverageFactorError::Zero => InvalidArgsError::OutputVisFreqAverageFactorZero,
AverageFactorError::NotInteger => {
InvalidArgsError::OutputVisFreqFactorNotInteger
}
AverageFactorError::NotIntegerMultiple { out, inp } => {
InvalidArgsError::OutputVisFreqResNotMulitple { out, inp }
}
AverageFactorError::Parse(e) => {
InvalidArgsError::ParseOutputVisFreqAverageFactor(e)
}
})?;
let time_factor =
parse_time_average_factor(obs_context.time_res, output_vis_time_average, 1)
.map_err(|e| match e {
AverageFactorError::Zero => {
InvalidArgsError::OutputVisTimeAverageFactorZero
}
AverageFactorError::NotInteger => {
InvalidArgsError::OutputVisTimeFactorNotInteger
}
AverageFactorError::NotIntegerMultiple { out, inp } => {
InvalidArgsError::OutputVisTimeResNotMulitple { out, inp }
}
AverageFactorError::Parse(e) => {
InvalidArgsError::ParseOutputVisTimeAverageFactor(e)
}
})?;
let freq_factor =
parse_freq_average_factor(obs_context.freq_res, output_vis_freq_average, 1)
.map_err(|e| match e {
AverageFactorError::Zero => {
InvalidArgsError::OutputVisFreqAverageFactorZero
}
AverageFactorError::NotInteger => {
InvalidArgsError::OutputVisFreqFactorNotInteger
}
AverageFactorError::NotIntegerMultiple { out, inp } => {
InvalidArgsError::OutputVisFreqResNotMulitple { out, inp }
}
AverageFactorError::Parse(e) => {
InvalidArgsError::ParseOutputVisFreqAverageFactor(e)
}
})?;

(time_factor, freq_factor)
};
Expand Down
12 changes: 8 additions & 4 deletions src/calibrate/params/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -383,16 +383,20 @@ fn test_handle_bad_array_pos() {
}

#[test]
/// test that it correctly stacks averaging factor.
/// Test that the input visibility frequency average factor stacks with the
/// output frequency averaging factor.
///
/// TODO(dev): use test data with multiple timesteps to test time factor stacking
/// TODO(dev): use test data with multiple timesteps to test time factor
/// stacking
fn test_handle_both_vis_avg() {
let mut args = get_reduced_1090008640(true);
// The input data is 40kHz; input is averaged 2x
args.freq_average_factor = Some("80kHz".into());
// Output is averaged 2x from the averaged input; a total of 4.
args.output_vis_freq_average = Some("160kHz".into());
args.outputs = Some(vec!["test.uvfits".into()]);
let result = args.into_params().unwrap();

// output averaging factor should be relative to cal averaging factor.
assert_eq!(result.output_vis_freq_average_factor, 2);
// output averaging factor is relative to the input frequency resolution.
assert_eq!(result.output_vis_freq_average_factor, 4);
}

0 comments on commit 90c2c21

Please sign in to comment.