def compute_intra_event_residual(sa_intra_cm, periods, station_data, num_simu): # Computing correlation coefficients num_stations = len(station_data) num_periods = len(periods) if sa_intra_cm == 'Jayaram & Baker (2009)': rho = np.zeros((num_stations, num_stations, num_periods)) for i in range(num_stations): loc_i = np.array([station_data[i]['Latitude'], station_data[i]['Longitude']]) for j in range(num_stations): loc_j = np.array([station_data[j]['Latitude'], station_data[j]['Longitude']]) # Computing station-wise distances stn_dist = np.linalg.norm(loc_i - loc_j) * 111.0 for k in range(num_periods): rho[i, j, k] = \ CorrelationModel.jayaram_baker_correlation_2009(periods[k], stn_dist, flag_clustering = False) # Simulating residuals residuals = np.zeros((num_stations, num_periods, num_simu)) for k in range(num_periods): residuals[:, k, :] = np.random.multivariate_normal(np.zeros(num_stations), rho[:, :, k], num_simu).T elif sa_intra_cm == 'Loth & Baker (2013)': residuals = CorrelationModel.loth_baker_correlation_2013(station_data, periods, num_simu) elif sa_intra_cm == 'Markhvida et al. (2017)': num_pc = 19 residuals = CorrelationModel.markhvida_ceferino_baker_correlation_2017(station_data, periods, num_simu, num_pc) # return return residuals
def compute_inter_event_residual(sa_inter_cm, periods, num_simu): num_periods = len(periods) if sa_inter_cm == 'Baker & Jayaram (2008)': rho = np.array([CorrelationModel.baker_jayaram_correlation_2008(T1, T2) for T1 in periods for T2 in periods]).reshape([num_periods, num_periods]) else: # TODO: extending this to more inter-event correlation models print('ComputeIntensityMeaure: currently only supporting Baker & Jayaram (2008)') # Simulating residuals residuals = np.random.multivariate_normal(np.zeros(num_periods), rho, num_simu).T # return return residuals