Initial commit
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
//! # rtx-neuro-fem
|
||||
//!
|
||||
//! GPU-Accelerated Finite Element Head Modeling for MEG/EEG forward solutions.
|
||||
//!
|
||||
//! This crate provides realistic head models using the Finite Element Method (FEM)
|
||||
//! with GPU-accelerated solvers for computing electric potentials and lead fields.
|
||||
//!
|
||||
//! ## Key Features
|
||||
//!
|
||||
//! - **Tetrahedral Meshing**: Automatic mesh generation from FreeSurfer surfaces
|
||||
//! - **Multi-Layer Models**: Support for scalp, skull, CSF, gray/white matter
|
||||
//! - **Anisotropic Conductivity**: DTI-based white matter anisotropy
|
||||
//! - **GPU Acceleration**: Leverages rtx-fea for fast sparse solvers
|
||||
//! - **Lead Field Computation**: Efficient gain matrix calculation
|
||||
//!
|
||||
//! ## Head Model Layers
|
||||
//!
|
||||
//! ```text
|
||||
//! ┌─────────────────────────────────────┐
|
||||
//! │ Scalp (σ=0.43 S/m) │
|
||||
//! ├─────────────────────────────────────┤
|
||||
//! │ Skull (σ=0.01 S/m) │ ← Anisotropic
|
||||
//! ├─────────────────────────────────────┤
|
||||
//! │ CSF (σ=1.79 S/m) │
|
||||
//! ├─────────────────────────────────────┤
|
||||
//! │ Gray Matter (σ=0.33 S/m) │
|
||||
//! ├─────────────────────────────────────┤
|
||||
//! │ White Matter (σ=0.14 S/m tensor) │ ← Anisotropic from DTI
|
||||
//! └─────────────────────────────────────┘
|
||||
//! ```
|
||||
//!
|
||||
//! ## Example
|
||||
//!
|
||||
//! ```ignore
|
||||
//! use rtx_neuro_fem::{HeadFEM, HeadFEMConfig, TissueConfig};
|
||||
//!
|
||||
//! // Create FEM model from FreeSurfer surfaces
|
||||
//! let config = HeadFEMConfig::standard_5_layer();
|
||||
//!
|
||||
//! let mut fem = HeadFEM::new(config)?;
|
||||
//!
|
||||
//! // Generate mesh from surfaces
|
||||
//! fem.mesh_from_surfaces(&surfaces)?;
|
||||
//!
|
||||
//! // Compute lead field matrix
|
||||
//! let leadfield = fem.compute_leadfield(&source_space, &sensors)?;
|
||||
//! ```
|
||||
|
||||
#![warn(missing_docs)]
|
||||
|
||||
pub mod assembly;
|
||||
pub mod conductivity;
|
||||
pub mod error;
|
||||
pub mod leadfield;
|
||||
pub mod mesh;
|
||||
pub mod solver;
|
||||
|
||||
// Re-export main types
|
||||
pub use assembly::{FemAssembler, StiffnessMatrix};
|
||||
pub use conductivity::{AnisotropicModel, ConductivityTensor, TissueConductivity};
|
||||
pub use error::{FemError, FemResult};
|
||||
pub use leadfield::{LeadField, LeadFieldConfig};
|
||||
pub use mesh::{HeadMesh, MeshQuality, TetElement};
|
||||
pub use solver::{FemSolver, SolverConfig};
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_basic_imports() {
|
||||
// Test that main types are accessible
|
||||
let _: FemResult<()> = Ok(());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user