def test_simple(self): lons = numpy.array([numpy.arange(-1, 1.2, 0.2)] * 11) lats = lons.transpose() + 1 depths = lats + 10 mesh = RectangularMesh(lons, lats, depths) check = lambda lon, lat, depth, expected_distance, **kwargs: \ self.assertAlmostEqual( mesh.get_joyner_boore_distance( Mesh.from_points_list([Point(lon, lat, depth)]) )[0], expected_distance, **kwargs ) check(lon=0, lat=0.5, depth=0, expected_distance=0) check(lon=1, lat=1, depth=0, expected_distance=0) check(lon=0.6, lat=-1, depth=0, expected_distance=Point(0.6, -1).distance(Point(0.6, 0)), delta=0.1) check(lon=-0.8, lat=2.1, depth=10, expected_distance=Point(-0.8, 2.1).distance(Point(-0.8, 2)), delta=0.02) check(lon=0.75, lat=2.3, depth=3, expected_distance=Point(0.75, 2.3).distance(Point(0.75, 2)), delta=0.04)
def test_version(self): # this test is sensitive to different versions of shapely/libgeos lons = numpy.array([[ -121.3956, -121.41050474, -121.42542273, -121.44035399, -121.45529855, -121.47025643 ], [ -121.3956, -121.41050474, -121.42542273, -121.44035399, -121.45529855, -121.47025643 ]]) lats = numpy.array([[ 36.8257, 36.85963772, 36.89357357, 36.92750756, 36.96143968, 36.99536993 ], [ 36.8257, 36.85963772, 36.89357357, 36.92750756, 36.96143968, 36.99536993 ]]) mesh = RectangularMesh(lons, lats) dist = mesh.get_joyner_boore_distance( Mesh.from_points_list([Point(-121.76, 37.23)])) dist_ubuntu_12_04 = 36.61260128 dist_ubuntu_14_04 = 36.61389245 self.assertTrue( numpy.allclose(dist, dist_ubuntu_12_04) or numpy.allclose(dist, dist_ubuntu_14_04))
def test_simple(self): lons = numpy.array([numpy.arange(-1, 1.2, 0.2)] * 11) lats = lons.transpose() + 1 depths = lats + 10 mesh = RectangularMesh(lons, lats, depths) check = lambda lon, lat, depth, expected_distance, **kwargs: \ self.assertAlmostEqual( mesh.get_joyner_boore_distance( Mesh.from_points_list([Point(lon, lat, depth)]) )[0], expected_distance, **kwargs ) check(lon=0, lat=0.5, depth=0, expected_distance=0) check(lon=1, lat=1, depth=0, expected_distance=0) check(lon=0.6, lat=-1, depth=0, expected_distance=Point(0.6, -1).distance(Point(0.6, 0)), delta=0.1) check(lon=-0.8, lat=2.1, depth=10, expected_distance=Point(-0.8, 2.1).distance(Point(-0.8, 2)), delta=0.02) check(lon=0.75, lat=2.3, depth=3, expected_distance=Point(0.75, 2.3).distance(Point(0.75, 2)), delta=0.04)
def _test(self, points, site, expected_distance): lons, lats, depths = numpy.array(points).transpose() lons = lons.transpose() lats = lats.transpose() depths = depths.transpose() mesh = RectangularMesh(lons, lats, depths) distance = mesh.get_joyner_boore_distance( Mesh.from_points_list([Point(*site)]))[0] self.assertAlmostEqual(distance, expected_distance, delta=0.02)
def test_mesh_of_one_point(self): lons = numpy.array([[1.]]) lats = numpy.array([[0.]]) depths = numpy.array([[1.]]) mesh = RectangularMesh(lons, lats, depths) target_mesh = Mesh.from_points_list([Point(1, 0), Point(0.5, 0)]) dists = mesh.get_joyner_boore_distance(target_mesh) expected_dists = [0, Point(0.5, 0).distance(Point(1, 0))] aac(dists, expected_dists, atol=0.2)
def test_mesh_of_two_points(self): lons = numpy.array([[0, 0.5, 1]], float) lats = numpy.array([[0, 0, 0]], float) depths = numpy.array([[1, 0, 1]], float) mesh = RectangularMesh(lons, lats, depths) target_mesh = Mesh.from_points_list([Point(0.5, 1), Point(0.5, 0)]) dists = mesh.get_joyner_boore_distance(target_mesh) expected_dists = [Point(0.5, 1).distance(Point(0.5, 0)), 0] aac(dists, expected_dists, atol=.01)
def test_mesh_of_one_point(self): lons = numpy.array([[1.]]) lats = numpy.array([[0.]]) depths = numpy.array([[1.]]) mesh = RectangularMesh(lons, lats, depths) target_mesh = Mesh.from_points_list([Point(1, 0), Point(0.5, 0)]) dists = mesh.get_joyner_boore_distance(target_mesh) expected_dists = [0, Point(0.5, 0).distance(Point(1, 0))] self.assertTrue(numpy.allclose(dists, expected_dists, atol=0.2))
def test_mesh_of_two_points(self): lons = numpy.array([[0, 0.5, 1]], float) lats = numpy.array([[0, 0, 0]], float) depths = numpy.array([[1, 0, 1]], float) mesh = RectangularMesh(lons, lats, depths) target_mesh = Mesh.from_points_list([Point(0.5, 1), Point(0.5, 0)]) dists = mesh.get_joyner_boore_distance(target_mesh) expected_dists = [Point(0.5, 1).distance(Point(0.5, 0)), 0] numpy.testing.assert_almost_equal(dists, expected_dists)
def calculate_gmfs_filter(source_model, gsimlt, filter1, cmake, gsim_list, recMeshExposure, matrixMagsMin, matrixMagsStep, matrixDistsMin, matrixDistsStep, GMPEmatrix, imts, trunc_level): # The source filter will return only sites within the integration distance gmfs_median = [] # properties = [] # Source-Site Filtering for source in source_model: trt = source.trt gmpe_lt_index = gsimlt.all_trts.index(trt) for src, s_sites in filter1(source[:]): hypo_list = [] Mag = [] for rup in src.iter_ruptures(): Mag.append(round(rup.mag, 1)) hypo_rup = rup.hypocenter hypo_list.append(hypo_rup) rupsHypo = Mesh.from_points_list(hypo_list) if gsim_list[gmpe_lt_index].REQUIRES_DISTANCES == {'rjb'}: distRupExposure = np.around( RectangularMesh.get_joyner_boore_distance( recMeshExposure, rupsHypo)) elif gsim_list[gmpe_lt_index].REQUIRES_DISTANCES == {'rrup'}: distRupExposure = np.around(RectangularMesh.get_min_distance( recMeshExposure, rupsHypo)) filteringIndex = [] for i in range(len(Mag)): indexMag = int((Mag[i] - matrixMagsMin) / matrixMagsStep) indexDist = int((distRupExposure[i] - matrixDistsMin) / matrixDistsStep) filteringIndex.append(GMPEmatrix[indexDist, indexMag]) src_iter = src.iter_ruptures() filteredRup = list(compress(src_iter, filteringIndex)) for rup in filteredRup: gmf_computer = GmfComputer(rup, s_sites, imts, cmake, truncation_level=trunc_level) gmf_median = {} # if we have more than one gsim per trt, we need to do this # for gsim in gsim_list: # gmf_median[gsim] = gmf_computer.compute(gsim, # num_events=1) gmf_median[gsim_list[gmpe_lt_index]] = gmf_computer.compute( gsim_list[gmpe_lt_index], num_events=1) gmf_median['rate'] = rup.occurrence_rate gmf_median['sites'] = s_sites gmfs_median.append(gmf_median) # FiltMag = str(rup.mag) # FiltHypo = str(rup.hypocenter) # FiltRate = str(rup.occurrence_rate) # properties.append([FiltMag,FiltHypo,FiltRate]) return gmfs_median
def _test(self, points, site, expected_distance): lons, lats, depths = numpy.array(points).transpose() lons = lons.transpose() lats = lats.transpose() depths = depths.transpose() mesh = RectangularMesh(lons, lats, depths) distance = mesh.get_joyner_boore_distance( Mesh.from_points_list([Point(*site)]) )[0] self.assertAlmostEqual(distance, expected_distance, delta=0.02)
def test_vertical_mesh(self): lons = numpy.array([[0, 0.5, 1, 2], [0, 0.5, 1, 2]], float) lats = numpy.array([[0, 0, 0, 0], [0, 0, 0, 0]], float) depths = numpy.array([[1, 1, 1, 1], [2, 2, 2, 2]], float) mesh = RectangularMesh(lons, lats, depths) target_mesh = Mesh.from_points_list([Point(0.5, 0), Point(0.5, 1), Point(0.5, 5)]) dists = mesh.get_joyner_boore_distance(target_mesh) expected_dists = [ 0, Point(0.5, 1).distance(Point(0.5, 0)), Point(0.5, 5).distance(Point(0.5, 0))] aac(dists, expected_dists, atol=1)
def test_vertical_mesh(self): lons = numpy.array([[0, 0.5, 1, 2], [0, 0.5, 1, 2]], float) lats = numpy.array([[0, 0, 0, 0], [0, 0, 0, 0]], float) depths = numpy.array([[1, 1, 1, 1], [2, 2, 2, 2]], float) mesh = RectangularMesh(lons, lats, depths) target_mesh = Mesh.from_points_list([Point(0.5, 0), Point(0.5, 1), Point(0.5, 5)]) dists = mesh.get_joyner_boore_distance(target_mesh) expected_dists = [ 0, Point(0.5, 1).distance(Point(0.5, 0)), Point(0.5, 5).distance(Point(0.5, 0))] aac(dists, expected_dists, atol=1)
def test_version(self): # this test is sensitive to different versions of shapely/libgeos lons = numpy.array( [[-121.3956, -121.41050474, -121.42542273, -121.44035399, -121.45529855, -121.47025643], [-121.3956, -121.41050474, -121.42542273, -121.44035399, -121.45529855, -121.47025643]]) lats = numpy.array( [[36.8257, 36.85963772, 36.89357357, 36.92750756, 36.96143968, 36.99536993], [36.8257, 36.85963772, 36.89357357, 36.92750756, 36.96143968, 36.99536993]]) mesh = RectangularMesh(lons, lats) dist = mesh.get_joyner_boore_distance( Mesh.from_points_list([Point(-121.76, 37.23)])) dist_ubuntu_12_04 = 36.61260128 dist_ubuntu_14_04 = 36.61389245 self.assertTrue(numpy.allclose(dist, dist_ubuntu_12_04) or numpy.allclose(dist, dist_ubuntu_14_04))