CHEERSafe Demo: Complete Hurricane Damage Analysis Workflow¶
This notebook demonstrates the complete workflow for hurricane damage and loss assessment using the CHEERSafe package. We'll walk through each step from initial setup to final visualization of results.
Prerequisites¶
- Python 3.12+
- CHEERSafe package installed
- Required input files (building geometry, etc.)
Setup and Environment Configuration¶
First, we'll set up the notebook environment with automatic reloading for development.
%load_ext autoreload
%autoreload 2
Let's check our current working directory and navigate to the package root if needed.
%pwd
'/home/mammad/Documents/EDU/cope/CHEERSafe/LossModel/examples'
%cd ..
/home/mammad/Documents/EDU/cope/CHEERSafe/LossModel
If you need to install the package in development mode, uncomment the following line:
#%pip install -e .
System Configuration¶
Let's check the available CPU cores for parallel processing configuration.
import os
cpu_count = os.cpu_count()
print(f"Available CPU cores: {cpu_count}")
Available CPU cores: 24
Package Configuration and Imports¶
Configure the analysis parameters and import required modules. The configuration allows you to customize:
NUM_OF_WORKERS: Number of parallel workers for computationNUM_OF_ITERATIONS: Number of Monte Carlo iterationsINPUTS_PATH: Directory containing input filesOUTPUTS_PATH: Directory for output files
from cheersafe.config import Config
# Configure analysis parameters
Config.NUM_OF_WORKERS = 20
Config.NUM_OF_ITERATIONS = 300
Config.INPUTS_PATH = "Inputs"
Config.OUTPUTS_PATH = "Outputs"
# Import core analysis modules
from cheersafe.damage_probability_calculation import DamageProbabilityCalculation
from cheersafe.inventory import BuildingInventory
from cheersafe.tools.stats import Covariance, Sampling
Initialize Core Components¶
Set up the building inventory and statistical analysis tools:
- BuildingInventory: Manages building data and configurations
- Covariance: Handles covariance calculations for uncertainty analysis
- Sampling: Provides sampling methods for Monte Carlo simulation
# Initialize building inventory with building geometry data
myBuildingInventory = BuildingInventory(buildings_file_name="BuildingGeometry_Old.json")
# Initialize statistical analysis components
myCovariance = Covariance()
mySampling = Sampling()
Create Main Analysis Engine¶
Initialize the damage probability calculation engine with our configured components.
# Initialize the main damage probability calculation engine
myDamageProbabilityCalculation = DamageProbabilityCalculation(
BuildingInventory=myBuildingInventory,
Sampling=mySampling,
Covariance=myCovariance
)
Configure Analysis Parameters¶
Specify which building types and resistance indices to process in this analysis:
- Building Type 2: Specific building classification
- Resistance Index 46: Specific structural resistance category
# Set building types to process (can be a list of multiple types)
myDamageProbabilityCalculation.set_building_types_to_process([1,2])
2026-05-04 10:08:31,979 - INFO - Set to process building types: [1, 2]
# Set resistance indices to process (can be a list of multiple indices)
myDamageProbabilityCalculation.set_cindex_to_process([1,2,3,4])
2026-05-04 10:08:31,990 - INFO - Set to process component indices: [1, 2, 3, 4]
Run Damage Probability Analysis¶
Execute the main damage probability calculation. This step performs Monte Carlo simulations to calculate damage probabilities under various loading conditions.
# Calculate average damage probability across all scenarios
myDamageProbabilityCalculation.get_average_damage_probability()
2026-05-04 10:08:31,998 - INFO - CIndex: 1 2026-05-04 10:08:31,999 - INFO - Building type: 1 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.8s [Parallel(n_jobs=20)]: Done 160 tasks | elapsed: 2.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 4.1s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 3.2s remaining: 0.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 3.2s remaining: 0.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 160 tasks | elapsed: 2.0s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished 2026-05-04 10:09:02,985 - INFO - Saved result for building type 1, cIndex 1, with 300 iterations to Outputs/ProbDS_wfd_m1_c1_iter300.pkl 2026-05-04 10:09:02,987 - INFO - CIndex: 2 2026-05-04 10:09:02,987 - INFO - Building type: 1 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 160 tasks | elapsed: 2.0s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 3.2s remaining: 0.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 3.2s remaining: 0.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 3.2s remaining: 0.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished 2026-05-04 10:09:33,410 - INFO - Saved result for building type 1, cIndex 2, with 300 iterations to Outputs/ProbDS_wfd_m1_c2_iter300.pkl 2026-05-04 10:09:33,412 - INFO - CIndex: 3 2026-05-04 10:09:33,412 - INFO - Building type: 1 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 160 tasks | elapsed: 2.0s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 3.2s remaining: 0.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished 2026-05-04 10:10:03,810 - INFO - Saved result for building type 1, cIndex 3, with 300 iterations to Outputs/ProbDS_wfd_m1_c3_iter300.pkl 2026-05-04 10:10:03,811 - INFO - CIndex: 4 2026-05-04 10:10:03,812 - INFO - Building type: 1 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 160 tasks | elapsed: 2.0s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 3.2s remaining: 0.5s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 160 tasks | elapsed: 2.0s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 160 tasks | elapsed: 2.0s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 3.5s finished 2026-05-04 10:10:34,448 - INFO - Saved result for building type 1, cIndex 4, with 300 iterations to Outputs/ProbDS_wfd_m1_c4_iter300.pkl 2026-05-04 10:10:34,450 - INFO - CIndex: 1 2026-05-04 10:10:34,450 - INFO - Building type: 2 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.3s remaining: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.3s remaining: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.3s remaining: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.4s remaining: 0.4s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished 2026-05-04 10:10:57,388 - INFO - Saved result for building type 2, cIndex 1, with 300 iterations to Outputs/ProbDS_wfd_m2_c1_iter300.pkl 2026-05-04 10:10:57,390 - INFO - CIndex: 2 2026-05-04 10:10:57,390 - INFO - Building type: 2 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.3s remaining: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.5s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.4s remaining: 0.4s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.4s remaining: 0.4s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.4s remaining: 0.4s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished 2026-05-04 10:11:20,248 - INFO - Saved result for building type 2, cIndex 2, with 300 iterations to Outputs/ProbDS_wfd_m2_c2_iter300.pkl 2026-05-04 10:11:20,249 - INFO - CIndex: 3 2026-05-04 10:11:20,250 - INFO - Building type: 2 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.4s remaining: 0.4s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.4s remaining: 0.4s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.3s remaining: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.3s remaining: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished 2026-05-04 10:11:43,265 - INFO - Saved result for building type 2, cIndex 3, with 300 iterations to Outputs/ProbDS_wfd_m2_c3_iter300.pkl 2026-05-04 10:11:43,266 - INFO - CIndex: 4 2026-05-04 10:11:43,267 - INFO - Building type: 2 [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.4s remaining: 0.4s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 261 out of 300 | elapsed: 2.3s remaining: 0.3s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.7s finished [Parallel(n_jobs=20)]: Using backend LokyBackend with 20 concurrent workers. [Parallel(n_jobs=20)]: Done 10 tasks | elapsed: 0.2s [Parallel(n_jobs=20)]: Done 300 out of 300 | elapsed: 2.6s finished 2026-05-04 10:12:06,152 - INFO - Saved result for building type 2, cIndex 4, with 300 iterations to Outputs/ProbDS_wfd_m2_c4_iter300.pkl 2026-05-04 10:12:06,154 - INFO - All specified combinations processed and saved to individual files.
True
Aggregate Results¶
Collect and aggregate the calculated probabilities for further analysis.
# Aggregate results from all calculations
my_probabilities = myDamageProbabilityCalculation.aggregate_results()
2026-05-04 10:12:06,167 - INFO - Aggregating result files from Outputs 2026-05-04 10:12:06,168 - INFO - Found 8 result files to aggregate 2026-05-04 10:12:06,169 - INFO - Loaded ProbDS_wfd_m2_c2_iter300.pkl for building type 2 and cIndex 2 2026-05-04 10:12:06,170 - INFO - Loaded ProbDS_wfd_m2_c1_iter300.pkl for building type 2 and cIndex 1 2026-05-04 10:12:06,171 - INFO - Loaded ProbDS_wfd_m1_c2_iter300.pkl for building type 1 and cIndex 2 2026-05-04 10:12:06,171 - INFO - Loaded ProbDS_wfd_m1_c1_iter300.pkl for building type 1 and cIndex 1 2026-05-04 10:12:06,172 - INFO - Loaded ProbDS_wfd_m2_c3_iter300.pkl for building type 2 and cIndex 3 2026-05-04 10:12:06,173 - INFO - Loaded ProbDS_wfd_m1_c3_iter300.pkl for building type 1 and cIndex 3 2026-05-04 10:12:06,173 - INFO - Loaded ProbDS_wfd_m1_c4_iter300.pkl for building type 1 and cIndex 4 2026-05-04 10:12:06,174 - INFO - Loaded ProbDS_wfd_m2_c4_iter300.pkl for building type 2 and cIndex 4 2026-05-04 10:12:06,179 - INFO - Aggregated 8 results into Outputs/ProbDS_wfd_dictMaxIter300_aggregated.pkl
Results Analysis and Visualization¶
Use the analysis module to visualize and interpret the calculated damage probabilities.
# Import the analysis and visualization module
from cheersafe.damage_probability_analysis import DamageProbabilityAnalysis
Generate Analysis Plots¶
Create comprehensive plots showing damage probability relationships and fragility curves.
# Define analysis parameters
building_type = 1
c_index = 1
# Initialize analysis with aggregated results file
myDamageProbabilityAnalysis = DamageProbabilityAnalysis(
prob_ds_file_path="Outputs/ProbDS_wfd_dictMaxIter300_aggregated.pkl",
building_type=building_type,
resistance_type=c_index
)
# Generate comprehensive analysis plots
myDamageProbabilityAnalysis.plot_analysis_results()
<Figure size 640x480 with 0 Axes>
[<Figure size 1000x600 with 1 Axes>, <Figure size 1000x600 with 1 Axes>]
Summary¶
This notebook demonstrated the complete CHEERSafe workflow:
- Setup: Environment configuration and package imports
- Initialization: Building inventory and statistical tools setup
- Configuration: Analysis parameters and building type selection
- Calculation: Monte Carlo damage probability analysis
- Visualization: Results analysis and plotting
The generated plots show the relationship between wind speeds, structural parameters, and damage probabilities, providing insights for hurricane risk assessment and mitigation planning.
Next Steps¶
- Experiment with different building types and resistance indices
- Adjust the number of iterations for different accuracy/speed trade-offs
- Explore the API documentation for advanced customization options