use nalgebra::Vector3;
use super::{MuellerComponentConfig, OutputConfig};
use crate::{diff::Mapping, orientation::EulerConvention};
use std::path::PathBuf;
pub const VERTEX_MERGE_DISTANCE: f32 = 0.001;
pub const CLIP_TOLERANCE: f32 = 1e16;
pub const COLINEAR_THRESHOLD: f32 = 0.0001;
pub const VEC_LENGTH_THRESHOLD: f32 = 0.001;
pub const RAYCAST_MINIMUM_DISTANCE: f32 = 0.01;
pub const DIFF_EPSILON: f32 = 1e-2;
pub const DIFF_DMIN: f32 = 1e-5;
pub const KXY_EPSILON: f32 = 1e-3;
pub const PROP_PERTURBATION: f32 = 1e-5;
pub const MIN_DISTORTION: f32 = 1e-5;
pub const DIRECT_THRESHOLD: f32 = 1e-4;
pub const PLANARITY_TOLERANCE: f32 = 1e-2;
pub const INTERVAL_IGNORE_TOLERANCE: f32 = 0.0001;
pub const CENTERED_GEOMETRY_TOLERANCE: f32 = 0.001;
pub const ZONE_THETA_OFFSET: f32 = 0.01;
pub const BBOX_TOLERANCE: f32 = 0.01;
pub const DEFAULT_WAVELENGTH: f32 = 0.532;
pub const DEFAULT_BEAM_POWER_THRESHOLD: f32 = 0.005;
pub const DEFAULT_BEAM_AREA_THRESHOLD_FAC: f32 = 0.1;
pub const DEFAULT_CUTOFF: f32 = 0.99;
pub const DEFAULT_MEDIUM_REFR_INDEX_RE: f32 = 1.0;
pub const DEFAULT_MEDIUM_REFR_INDEX_IM: f32 = 0.0;
pub const DEFAULT_PARTICLE_REFR_INDEX_RE: f32 = 1.31;
pub const DEFAULT_PARTICLE_REFR_INDEX_IM: f32 = 0.0;
pub const DEFAULT_MAX_REC: i32 = 10;
pub const DEFAULT_MAX_TIR: i32 = 10;
pub const DEFAULT_THETA_BINS: usize = 181;
pub const DEFAULT_PHI_BINS: usize = 181;
pub const DEFAULT_EULER_ORDER: EulerConvention = EulerConvention::ZYZ;
pub const DEFAULT_MAPPING: Mapping = Mapping::ApertureDiffraction;
pub const DEFAULT_COHERENCE: bool = true;
pub const DEFAULT_QUIET: bool = false;
pub const MIN_ORIENTATIONS: usize = 10;
pub fn default_scale_factor() -> f32 {
1.0
}
pub fn default_e_perp() -> Vector3<f32> {
Vector3::x()
}
pub fn default_prop() -> Vector3<f32> {
-Vector3::z()
}
pub fn default_geom_scale() -> Option<Vec<f32>> {
None
}
pub fn default_fov_factor() -> Option<f32> {
None
}
pub fn default_directory() -> PathBuf {
let current_dir = std::env::current_dir().unwrap_or_else(|_| PathBuf::new());
let mut run_number = 1;
let mut run_dir;
loop {
let run_name = format!("run{:05}", run_number);
run_dir = current_dir.join(&run_name);
if !run_dir.exists() {
break;
}
run_number += 1;
if run_number > 99999 {
log::warn!("Exceeded maximum run number. Using timestamp instead.");
let timestamp = chrono::Local::now().format("%Y%m%d_%H%M%S");
run_dir = current_dir.join(format!("run_{}", timestamp));
break;
}
}
run_dir
}
pub fn default_output_config() -> OutputConfig {
OutputConfig {
settings_json: false,
mueller_2d: true,
mueller_1d: true,
mueller_components: MuellerComponentConfig {
total: true,
beam: true,
external: true,
},
}
}
pub fn default_quiet() -> bool {
DEFAULT_QUIET
}