use serde::Deserialize;
use serde_json;
use std::{f64::consts::PI, fs::read_to_string, path::PathBuf};
#[derive(Debug, Deserialize)]
pub struct Parameters {
pub num_neutrons: usize,
pub block_size: usize,
pub gun_pos: [f64; 3],
pub gun_target: [f64; 3],
pub gun_spread: f64,
pub scat_coeff: f64,
pub abs_coeff: f64,
pub mins: [f64; 3],
pub maxs: [f64; 3],
pub num_voxels: [usize; 3],
}
impl Parameters {
#[inline]
#[must_use]
pub fn load(path: &PathBuf) -> Self {
let contents = read_to_string(path).expect(&format!(
"Failed to read parameters file at {}",
path.display(),
));
let mut params: Parameters =
serde_json::from_str(&contents).expect("Invalid parameters file");
params.gun_spread *= PI / 180.0;
params
}
}