def mean_std(shakemap, site_effects): gmf_dict.update({'kind': 'Silva&Horspool', 'spatialcorr': 'yes', 'crosscorr': 'yes'}) _, gmfs = to_gmfs( shakemap, gmf_dict, site_effects, trunclevel=3, num_gmfs=1000, seed=42, imts=['PGA', 'SA(0.3)', 'SA(1.0)', 'SA(3.0)']) return gmfs.mean(axis=1), numpy.log(gmfs).std(axis=1)
def test_for_mmi(self): f1 = 'file://' + os.path.join(CDIR, 'ghorka_grid.xml') f2 = 'file://' + os.path.join(CDIR, 'ghorka_uncertainty.xml') uridict = dict(kind='usgs_xml', grid_url=f1, uncertainty_url=f2) sitecol, shakemap, *_ = get_sitecol_shakemap(uridict.pop('kind'), uridict, imt_dt.names) n = 4 # number of sites self.assertEqual(len(sitecol), n) _, gmfs = to_gmfs(shakemap, {'kind': 'mmi'}, False, trunclevel=3, num_gmfs=1000, seed=42, imts=['MMI']) gmf_by_imt = gmfs.mean(axis=1) std_by_imt = gmfs.std(axis=1) aae(gmf_by_imt, [[3.80704848], [3.89791949], [3.88040454], [3.93584243]]) aae(std_by_imt, [[0.71068558], [0.72233552], [0.72033749], [0.69906908]])
def test_matrices(self): # distance matrix lons = numpy.array([84., 84., 84., 85.5, 85.5, 85.5, 87., 87., 87.]) lats = numpy.array([26., 27.5, 29., 26., 27.5, 29., 26., 27.5, 29.]) dmatrix = geo.geodetic.distance_matrix(lons, lats) aae(dmatrix.sum(), 18539.6131407) # spatial correlation sca = spatial_correlation_array(dmatrix, imts, 'yes') aae(sca.sum(), 36.000370229) # spatial covariance std = numpy.array([(0.5, 0.52, 0.64, 0.73)] * 9, imt_dt) # 9 sites scov = spatial_covariance_array([std[n] for n in imt_dt.names], sca) aae(scov.sum(), 13.166200147) # cross correlation ccor = cross_correlation_matrix(imts, 'yes') aae(ccor.sum(), 10.49124788) # cholesky decomposition L = cholesky(scov, ccor) self.assertEqual(L.shape, (36, 36)) aae(L.sum(), 30.5121263) # intensity val = numpy.array([(5.38409665, 3.9383686, 3.55435415, 4.37692394)] * 9, imt_dt) shakemap = numpy.zeros(9, shakemap_dt) # 9 sites shakemap['lon'] = lons shakemap['lat'] = lats shakemap['vs30'] = numpy.array([301.17] * 9) shakemap['val'] = val shakemap['std'] = std gmf_dict.update({ 'kind': 'Silva&Horspool', 'spatialcorr': 'yes', 'crosscorr': 'no' }) _, gmfs = to_gmfs(shakemap, gmf_dict, site_effects=False, trunclevel=3, num_gmfs=2, seed=42) # shape (N, E, M) aae(gmfs[..., 0].sum(axis=0), [0.4202056, 0.6426098]) # PGA gmf_dict.update({ 'kind': 'Silva&Horspool', 'spatialcorr': 'yes', 'crosscorr': 'yes' }) _, gmfs = to_gmfs(shakemap, gmf_dict, site_effects=True, trunclevel=3, num_gmfs=2, seed=42) aae(gmfs[..., 0].sum(axis=0), [0.5809818, 0.8790579]) # PGA aae(gmfs[..., 2].sum(axis=0), [0.6053580, 0.8245417]) # SA(1.0) # disable spatial correlation gmf_dict.update({ 'kind': 'Silva&Horspool', 'spatialcorr': 'no', 'crosscorr': 'no' }) _, gmfs = to_gmfs(shakemap, gmf_dict, site_effects=False, trunclevel=3, num_gmfs=2, seed=42) # shape (N, E, M) aae(gmfs[..., 0].sum(axis=0), [0.4202077, 0.6426078]) # PGA _, gmfs = to_gmfs(shakemap, {'kind': 'basic'}, site_effects=False, trunclevel=3, num_gmfs=2, seed=42) # shape (N, E, M) aae(gmfs[..., 0].sum(axis=0), [0.4202077, 0.6426078]) # PGA gmf_dict.update({ 'kind': 'Silva&Horspool', 'spatialcorr': 'no', 'crosscorr': 'yes' }) _, gmfs = to_gmfs(shakemap, gmf_dict, site_effects=True, trunclevel=3, num_gmfs=2, seed=42) aae(gmfs[..., 0].sum(axis=0), [0.5809846, 0.8790549]) # PGA aae(gmfs[..., 2].sum(axis=0), [0.6053580, 0.8245417]) # SA(1.0) # set stddev to zero shakemap['std'] = 0 with self.assertRaises(ValueError) as ctx: gmf_dict.update({ 'kind': 'Silva&Horspool', 'spatialcorr': 'no', 'crosscorr': 'yes' }) to_gmfs(shakemap, gmf_dict, site_effects=True, trunclevel=3, num_gmfs=2, seed=42) self.assertIn('stddev==0 for IMT=PGA', str(ctx.exception))