| Case | Tower Type | TSII Accuracy | Frequency Detection | Fatigue MAE | F_stab Error | Status |
|---|---|---|---|---|---|---|
| V1 | Guyed telecom mast — storm events | ±2.8% | 95.1% | 2.4% | ±4.1% | ✅ PASS |
| V2 | Lattice tower — fatigue forensics | ±3.2% | 94.8% | 2.9% | N/A | ✅ PASS |
| V3 | Monopole scale model — progressive | ±2.5% | 96.3% | 1.8% | ±3.7% | ✅ PASS |
| MEAN | — | ±2.83% | 95.4% | 2.37% | ±3.9% | 🏆 CERTIFIED |
TSII certification threshold = 0.90 · F_stability minimum = 1.50 · Damage limit = 0.80
pip install tower-core-engine
from tower_core import TowerCoreAssessor # Initialize with tower configuration assessor = TowerCoreAssessor( tower_config="configs/lattice_120m.yaml", sensor_stream="live" ) result = assessor.evaluate() print(result.signal) # "STEADY_STATE" | "MONITORING_PHASE_1" | "MITIGATION_PHASE_2" | "CRITICAL_BREACH" print(result.tsii) # Tower Structural Integrity Index [0,1] print(result.nfs) # Natural Frequency Shift (%) print(result.fatigue_damage_max) # Palmgren-Miner damage print(result.f_stability) # Overturning stability factor print(result.governance_level) # "none" | "level_1" | "level_2" | "stop"
from tower_core.fatigue import RainflowCounter, PalmgrenMiner, SNCurve import numpy as np # Load strain time series strain_ts = np.random.randn(10000) * 50 # Rainflow cycle counting (ASTM E1049-85) counter = RainflowCounter() cycles, amplitudes = counter.count(strain_ts) # S-N curve (Eurocode FAT90) sn = SNCurve(fat_class="FAT90") # Palmgren-Miner damage accumulation miner = PalmgrenMiner() damage = miner.from_amplitudes(amplitudes, cycles, sn) print(f"Fatigue damage: {damage:.4f} (limit: 0.80)")
from tower_core.stability import OverturningStability, GustResponse stab = OverturningStability(f_stab_min=1.50) M_restoring = stab.restoring_moment(W=100000, B=10) M_wind = 50000 F_stability = stab.factor(M_restoring, M_wind) gust = GustResponse() G = gust.gust_factor(z=50, f_n=0.85) print(f"F_stability: {F_stability:.2f} (minimum: 1.50)") print(f"Gust factor: {G:.2f}")
# Launch real-time Streamlit TSII governance dashboard $ streamlit run examples/streamlit_dashboard.py # Dashboard at: http://localhost:8501 # Panels: Natural frequency trend · Fatigue damage map · Overturning stability · TSII gauge · 24-48h forecast
git clone https://github.com/gitdeeper12/TOWER-CORE.git
git clone https://gitlab.com/gitdeeper12/TOWER-CORE.git
git clone https://bitbucket.org/gitdeeper-12/TOWER-CORE.git
git clone https://codeberg.org/gitdeeper12/TOWER-CORE.git
@software{baladi2026towercore_pypi,
author = {Baladi, Samir},
title = {{TOWER-CORE}: A Critical Framework for Structural Integrity
Assessment, Dynamic Stability Monitoring, and Safety
Governance in Vertical Tower Systems},
year = {2026},
version = {1.0.0},
publisher = {Python Package Index},
url = {https://pypi.org/project/tower-core-engine},
note = {Python package, MIT License, Series TOWER-SAFETY-01}
}
@dataset{baladi2026towercore_zenodo,
author = {Baladi, Samir},
title = {{TOWER-CORE}: A Critical Framework for Structural Integrity
Assessment, Dynamic Stability Monitoring, and Safety
Governance in Vertical Tower Systems —
Research Paper and Simulation Data},
year = {2026},
publisher = {Zenodo},
version = {1.0.0},
doi = {10.5281/zenodo.20394041},
url = {https://doi.org/10.5281/zenodo.20394041},
note = {Structural Safety & Reliability Engineering · TOWER-SAFETY-01}
}
@article{baladi2026towercore,
author = {Baladi, Samir},
title = {{TOWER-CORE}: A Critical Framework for Structural Integrity
Assessment, Dynamic Stability Monitoring, and Safety
Governance in Vertical Tower Systems},
year = {2026},
month = {May},
version = {1.0.0},
doi = {10.5281/zenodo.20394041},
url = {https://doi.org/10.5281/zenodo.20394041},
note = {Ronin Institute / Rite of Renaissance,
Series TOWER-SAFETY-01}
}
Baladi, S. (2026). TOWER-CORE: A Critical Framework for Structural Integrity Assessment, Dynamic Stability Monitoring, and Safety Governance in Vertical Tower Systems (Version 1.0.0, Series TOWER-SAFETY-01). Zenodo. https://doi.org/10.5281/zenodo.20394041