Source code for tcra.vulnerability.Vulnerability

"""
The tcra vulnerability module contains function to estimate damage states
to buildings/structures through stochastic simulation.

"""

[docs]class FragilityAnalysis: """ This is FragilityAnalysis class. This class estimates probabilities of various damage states and assign damage states. Parameters ---------- fragility_curves : fragility curves defined for building structural archetypes mu : median value of lognormal distribution sigma : standard deviation of lognormal distribution Returns ------- damage_state : damage state """
[docs] def __init__(self, fragility_curves): self.fragility_curves = fragility_curves
[docs] def generate_fragility_curve(self, mu, sigma, intensity): """ Generate the fragility curve using log-normal distribution. Parameters ---------- fragility_curves : fragility curves defined for building structural archetypes mu : median value of lognormal distribution sigma : standard deviation of lognormal distribution Returns ------- lognorm.cdf : lognormal cumulative distribution function """ return lognorm.cdf(intensity, s=sigma, scale=mu)
[docs] def estimate_damage(self, building_data): """ Estimate damage probabilities for all buildings. Parameters ---------- building_data : building inventory mph : wind speed type : structural archetype defined in HAZUS mu : median value of lognormal distribution sigma : standard deviation of lognormal distribution id : ids x : longitude y : latitude Occupancy : building occupancy type Returns ------- pd.DataFrame : dataframe inventory with probability of failure """ results = [] for _, row in building_data.iterrows(): building_type = row['type'] intensity = row['mph'] fragility_curves_building = self.fragility_curves[building_type] building_probabilities = {} for damage_state, fragility_params in fragility_curves_building.items(): fragility_curve = self.generate_fragility_curve(fragility_params['mu'], fragility_params['sigma'], intensity) building_probabilities[damage_state] = fragility_curve building_probabilities['id'] = row['id'] building_probabilities['x'] = row['x'] building_probabilities['y'] = row['y'] building_probabilities['mph'] = row['mph'] building_probabilities['type'] = row['type'] building_probabilities['Occupancy'] = row['Occupancy'] results.append(building_probabilities) return pd.DataFrame(results)
[docs] def estimate_epn_damage_state(self, epn_data): """ Estimate damage probabilities for all electrical poles. Parameters ---------- epn_data : electrical system inventory mph : wind speed type : structural archetype defined in HAZUS mu : median value of lognormal distribution sigma : standard deviation of lognormal distribution id : ids x : longitude y : latitude Occupancy : building occupancy type Returns ------- pd.DataFrame : dataframe inventory with probability of failure """ results = [] for _, row in epn_data.iterrows(): epn_type = row['type'] intensity = row['mph'] fragility_curves_epn = self.fragility_curves[epn_type] epn_probabilities = {} for damage_state, fragility_params in fragility_curves_epn.items(): fragility_curve = self.generate_fragility_curve(fragility_params['mu'], fragility_params['sigma'], intensity) epn_probabilities[damage_state] = fragility_curve epn_probabilities['id'] = row['id'] epn_probabilities['x'] = row['x'] epn_probabilities['y'] = row['y'] epn_probabilities['mph'] = row['mph'] epn_probabilities['type'] = row['type'] results.append(epn_probabilities) return pd.DataFrame(results)
[docs] def sample_damage_state(self, Pr, DStates, seed=None): """ Generate damage states. Parameters ---------- Pr: building invetory with damage state probabilities DStates: damage states Returns ------- damage_state : damage state """ self.DStates = DStates np.random.seed(seed) # Set the random seed id=Pr.id p = pd.Series(data=np.random.uniform(size=Pr.shape[0]), index=Pr.index) damage_state = pd.Series(data=[None] * Pr.shape[0], index=Pr.index) for DS_name in DStates: damage_state[p < Pr[DS_name]] = DS_name return damage_state