Skip to main content

sc_neurocore_engine/neurons/
biophysical.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Commercial license available
3// © Concepts 1996–2026 Miroslav Šotek. All rights reserved.
4// © Code 2020–2026 Miroslav Šotek. All rights reserved.
5// ORCID: 0009-0009-3560-0851
6// Contact: www.anulum.li | protoscience@anulum.li
7// SC-NeuroCore — Biophysical Neuron Models
8
9//! Compatibility facade for biophysical and conductance-based neuron models.
10//!
11//! Each model owns its implementation and tests in a bounded child module
12//! while the historical public re-exports and `safe_rate` path remain stable.
13
14mod av_ron_cardiac;
15mod bertram_phantom;
16mod connor_stevens;
17mod de_schutter_purkinje;
18mod destexhe_thalamic;
19mod durstewitz_dopamine;
20mod gif_population;
21mod glif;
22mod golomb_fs;
23mod hill_tononi;
24mod hodgkin_huxley;
25mod huber_braun;
26mod mainen_sejnowski;
27mod mihalas_niebur;
28mod plant_r15;
29mod pospischil;
30mod prescott;
31mod traub_miles;
32mod wang_buzsaki;
33mod yamada;
34
35pub use av_ron_cardiac::AvRonCardiacNeuron;
36pub use bertram_phantom::BertramPhantomBurster;
37pub use connor_stevens::ConnorStevensNeuron;
38pub use de_schutter_purkinje::DeSchutterPurkinjeNeuron;
39pub use destexhe_thalamic::DestexheThalamicNeuron;
40pub use durstewitz_dopamine::DurstewitzDopamineNeuron;
41pub use gif_population::GIFPopulationNeuron;
42pub use glif::GLIFNeuron;
43pub use golomb_fs::GolombFSNeuron;
44pub use hill_tononi::HillTononiNeuron;
45pub use hodgkin_huxley::HodgkinHuxleyNeuron;
46pub use huber_braun::HuberBraunNeuron;
47pub use mainen_sejnowski::MainenSejnowskiNeuron;
48pub use mihalas_niebur::MihalasNieburNeuron;
49pub use plant_r15::PlantR15Neuron;
50pub use pospischil::PospischilNeuron;
51pub use prescott::PrescottNeuron;
52pub use traub_miles::TraubMilesNeuron;
53pub use wang_buzsaki::WangBuzsakiNeuron;
54pub use yamada::YamadaNeuron;
55
56// ── Helper: safe alpha/beta kinetics avoiding division-by-zero ──
57
58pub fn safe_rate(
59    number_factor: f64,
60    v_offset: f64,
61    v: f64,
62    denom_scale: f64,
63    fallback: f64,
64) -> f64 {
65    let d = v + v_offset;
66    if d.abs() < 1e-7 {
67        fallback
68    } else {
69        number_factor * d / (1.0 - (-d / denom_scale).exp())
70    }
71}