polysim_core/lib.rs
1//! # polysim-core
2//!
3//! Polymer structure generator and physical property simulator built on top of
4//! [BigSMILES](https://olsenlabmit.github.io/BigSMILES/docs/line_notation.html).
5//!
6//! ## Overview
7//!
8//! polysim-core turns a **BigSMILES** string into one or more concrete polymer
9//! chains (represented as SMILES) and computes physical/chemical properties on
10//! them.
11//!
12//! The typical workflow is:
13//!
14//! 1. **Parse** a BigSMILES string with [`parse`].
15//! 2. **Build** a chain with one of the builders in [`builder`].
16//! 3. **Compute** properties via [`properties`].
17//!
18//! ## Quick start
19//!
20//! ```rust
21//! use polysim_core::{parse, builder::{linear::LinearBuilder, BuildStrategy}};
22//!
23//! // Polyéthylène — 10 unités répétées
24//! let bs = parse("{[]CC[]}").unwrap();
25//! let chain = LinearBuilder::new(bs, BuildStrategy::ByRepeatCount(10))
26//! .homopolymer()
27//! .unwrap();
28//!
29//! assert_eq!(chain.repeat_count, 10);
30//! assert_eq!(chain.smiles, "CCCCCCCCCCCCCCCCCCCC");
31//! // La masse moléculaire moyenne (Mn) est calculée automatiquement
32//! assert!((chain.mn - 282.554).abs() < 0.01, "Mn = {} g/mol", chain.mn);
33//! ```
34
35pub mod builder;
36pub mod distribution;
37pub mod error;
38pub mod polymer;
39pub mod properties;
40
41pub use bigsmiles::{parse, BigSmiles};
42pub use builder::{BuildStrategy, EnsembleBuilder, GradientProfile};
43pub use distribution::ChainLengthDistribution;
44pub use error::PolySimError;
45pub use polymer::{Architecture, MonomerUnit, PolymerChain, PolymerEnsemble};