#![warn(missing_docs)]
mod check;
mod compendium;
mod cusum;
mod expansion;
mod material;
mod xml;
pub use check::{audit, check_labels, AuditIssue, AuditKind, Collision, DEFAULT_WIDTHS};
pub use compendium::{
CompendiumElement, CompendiumEntry, CompendiumIsotope, Error as CompendiumError,
MaterialsLibrary,
};
pub use cusum::Cusum;
pub use expansion::{
parse_formula, AbundanceProvider, FormulaError, FormulaResult, NaturalAbundances, NoAbundances,
};
pub use material::{
Ame2020, Analytics, AnalyticsError, ChainDecays, DecayEnergies, DecayEnergyProvider,
DecayProvider, DoseFactors, DosePathway, DoseProvider, DoseSource, MassProvider, Material,
NoDecay, NoDecayEnergies, NoDoses, NoMasses, AVOGADRO, CI_PER_BQ, GRAMS_PER_U, MEV_TO_JOULES,
PCI_PER_BQ,
};
pub use xml::MaterialsDoc;
use nucleide_nuclei::NuclideId;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum Error {
#[error("invalid nuclide name `{name}`")]
BadNuclide {
name: String,
#[source]
source: nucleide_nuclei::Error,
},
#[error("no atomic mass available for nuclide `{0}`")]
MissingMass(NuclideId),
#[error("material is empty or its masses sum to a non-positive value")]
Degenerate,
#[error("operation requires a mass density but none was set")]
MissingDensity,
#[error("negative mixing fraction `{0}`")]
NegativeFraction(f64),
#[error("separation efficiency `{0}` is outside [0, 1]")]
InvalidEfficiency(f64),
#[error("invalid CUSUM parameter: {0}")]
InvalidCusum(String),
#[error(transparent)]
Write(#[from] std::io::Error),
}