Skip to content

VulnerabilityCalculator#

VulnerabilityCalculator converts damage-state probabilities into an expected damage-ratio curve for one building type and one resistance configuration. Use it when you need a wind vulnerability curve rather than the full probability surface.

Inputs#

Input Type Units or indexing
prob_ds_file_path str Pickle containing dict[(m, c), ProbDS_wfd].
building_type int Building type key m; default 1.
resistance_type int Resistance/configuration key c; default 1, 1-based.
wind_scale_lines list[int] Optional wind-speed guide lines in mph.

Loaded arrays:

Value Shape Notes
prob_damage_states[(m, c)] [wind, flood, damage_state] Usually produced by DamageProbabilityCalculation.aggregate_results().
wind_speed [25, 3] Vulnerability curve uses column 1, mph.
damage_state [50, 2] Expected damage ratio uses column 1.

Outputs And Returns#

calculate_vulnerability_curve() returns (expected_damage_ratio, vulnerability_curve).

Output Shape Meaning
expected_damage_ratio [wind] Dot product of wind-only damage-state probabilities and damage ratios.
vulnerability_curve["wind_speed"] [wind] Wind speeds in mph.
vulnerability_curve["expected_damage_ratio"] [wind] Expected damage ratio.

plot_vulnerability_curve(save_path=None) returns a matplotlib figure and optionally saves it to save_path.

Configuration Behavior#

With AUTO_LOAD_DATASETS=True, datasets load during initialization. With False, load them manually before calling calculate_vulnerability_curve().

With AUTO_EXECUTE_METHODS=True, initialization assigns expected_damage_ratio and vulnerability_curve. With False, the method returns those values and the caller decides whether to assign them.

Minimal Examples#

Automatic:

from cheersafe.config import Config
from cheersafe.damage_probability_analysis import VulnerabilityCalculator

Config.AUTO_LOAD_DATASETS = True
Config.AUTO_EXECUTE_METHODS = True

vulnerability = VulnerabilityCalculator(
    building_type=1,
    resistance_type=1,
    prob_ds_file_path="Outputs/ProbDS_wfd_dictMaxIter50_aggregated.pkl",
)
curve = vulnerability.vulnerability_curve

Manual control:

from cheersafe.config import Config
from cheersafe.damage_probability_analysis import VulnerabilityCalculator

Config.AUTO_LOAD_DATASETS = False
Config.AUTO_EXECUTE_METHODS = False

vulnerability = VulnerabilityCalculator(
    building_type=1,
    resistance_type=1,
    prob_ds_file_path="Outputs/ProbDS_wfd_dictMaxIter50_aggregated.pkl",
)
vulnerability.load_prob_damage_states()
vulnerability.load_wind_speed()
vulnerability.load_flood_depth()
vulnerability.load_damage_state()
expected, curve = vulnerability.calculate_vulnerability_curve()