Пример #1
0
    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)
Пример #2
0
 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))
Пример #3
0
    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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
 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))
Пример #8
0
 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)
Пример #9
0
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
Пример #10
0
 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)
Пример #11
0
 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)
Пример #12
0
 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)
Пример #13
0
 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))