#![warn(missing_docs)]
pub mod digitiser;
pub mod frame;
pub mod pipeline;
pub mod proof;
pub mod propagation;
pub mod scene;
pub mod sensor;
pub mod source;
#[cfg(all(feature = "wasm", target_arch = "wasm32"))]
pub mod wasm;
pub use proof::Proof;
pub use digitiser::{
adc_dequantise, adc_quantise, DigitiserConfig, Lockin, LowPass, ADC_BITS, ADC_FULL_SCALE_T,
ADC_LSB_T,
};
pub use frame::{MagFrame, MAG_FRAME_MAGIC, MAG_FRAME_VERSION};
pub use pipeline::{Pipeline, PipelineConfig};
pub use propagation::{
attenuate, material_is_heavy, material_loss_db_per_m, LosSegment, Material, Propagator,
};
pub use scene::{CurrentLoop, DipoleSource, EddyCurrent, FerrousObject, Scene};
pub use sensor::{nv_axes, NvReading, NvSensor, NvSensorConfig};
pub use source::{
current_loop_field, dipole_field, ferrous_field, scene_field_at, scene_field_at_sensors,
R_MIN_M,
};
#[derive(Debug, thiserror::Error)]
pub enum NvsimError {
#[error("serde error: {0}")]
Serde(#[from] serde_json::Error),
#[error("magic mismatch: got 0x{got:08X}, expected 0x{expected:08X}")]
MagicMismatch {
got: u32,
expected: u32,
},
#[error("frame length mismatch: got {got} bytes, expected {expected}")]
FrameLengthMismatch {
got: usize,
expected: usize,
},
#[error("unsupported frame version: got {got}, this build supports {supported}")]
UnsupportedVersion {
got: u16,
supported: u16,
},
#[error("invalid config: {0}")]
InvalidConfig(String),
}
pub const MU_0: f64 = 4.0 * std::f64::consts::PI * 1.0e-7;
pub const GAMMA_E: f64 = 28.0e9;
pub const D_GS: f64 = 2.87e9;