示例#1
0
 def test_arrival(self):
     """
     Tests Arrival object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_arrival.xml')
     catalog = readQuakeML(filename)
     self.assertEqual(len(catalog), 1)
     self.assertEqual(len(catalog[0].origins[0].arrivals), 2)
     ar = catalog[0].origins[0].arrivals[0]
     # Test the actual Arrival object. Everything not set in the QuakeML
     # file should be None.
     self.assertEqual(ar.pick_id,
                      ResourceIdentifier('smi:ch.ethz.sed/pick/117634'))
     self.assertEqual(ar.phase, 'Pn')
     self.assertEqual(ar.azimuth, 12.0)
     self.assertEqual(ar.distance, 0.5)
     self.assertEqual(ar.takeoff_angle, 11.0)
     self.assertEqual(ar.takeoff_angle_errors.uncertainty, 0.2)
     self.assertEqual(ar.time_residual, 1.6)
     self.assertEqual(ar.horizontal_slowness_residual, 1.7)
     self.assertEqual(ar.backazimuth_residual, 1.8)
     self.assertEqual(ar.time_weight, 0.48)
     self.assertEqual(ar.horizontal_slowness_weight, 0.49)
     self.assertEqual(ar.backazimuth_weight, 0.5)
     self.assertEqual(ar.earth_model_id,
                      ResourceIdentifier('smi:ch.ethz.sed/earthmodel/U21'))
     self.assertEqual(len(ar.comments), 1)
     self.assertEqual(ar.creation_info.author, "Erika Mustermann")
     # exporting back to XML should result in the same document
     original = open(filename, "rt").read()
     processed = Pickler().dumps(catalog)
     self._compareStrings(original, processed)
示例#2
0
 def test_stationmagnitude(self):
     """
     Tests StationMagnitude object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_stationmagnitude.xml')
     catalog = readQuakeML(filename)
     self.assertEquals(len(catalog), 1)
     self.assertEquals(len(catalog[0].station_magnitudes), 1)
     mag = catalog[0].station_magnitudes[0]
     # Assert the actual StationMagnitude object. Everything that is not set
     # in the QuakeML file should be set to None.
     self.assertEqual(
         mag.resource_id,
         ResourceIdentifier("smi:ch.ethz.sed/magnitude/station/881342"))
     self.assertEquals(mag.origin_id,
                       ResourceIdentifier('smi:some/example/id'))
     self.assertEquals(mag.mag, 6.5)
     self.assertEquals(mag.mag_errors.uncertainty, 0.2)
     self.assertEquals(mag.station_magnitude_type, 'MS')
     self.assertEqual(
         mag.amplitude_id,
         ResourceIdentifier("smi:ch.ethz.sed/amplitude/824315"))
     self.assertEqual(mag.method_id,
         ResourceIdentifier(\
             "smi:ch.ethz.sed/magnitude/generic/surface_wave_magnitude"))
     self.assertEqual(
         mag.waveform_id,
         WaveformStreamID(network_code='BW',
                          station_code='FUR',
                          resource_uri="smi:ch.ethz.sed/waveform/201754"))
     self.assertEqual(mag.creation_info, None)
     # exporting back to XML should result in the same document
     original = open(filename, "rt").read()
     processed = Pickler().dumps(catalog)
     self._compareStrings(original, processed)
示例#3
0
    def test_stationmagnitudecontribution(self):
        """
        Tests the station magnitude contribution object.
        """
        filename = os.path.join(
            self.path, 'quakeml_1.2_stationmagnitudecontributions.xml')
        catalog = readQuakeML(filename)
        self.assertEqual(len(catalog), 1)
        self.assertEqual(len(catalog[0].magnitudes), 1)
        self.assertEqual(
            len(catalog[0].magnitudes[0].station_magnitude_contributions), 2)
        # Check the first stationMagnitudeContribution object.
        stat_contrib = \
            catalog[0].magnitudes[0].station_magnitude_contributions[0]
        self.assertEqual(stat_contrib.station_magnitude_id.resource_id,
                         "smi:ch.ethz.sed/magnitude/station/881342")
        self.assertEqual(stat_contrib.weight, 0.77)
        self.assertEqual(stat_contrib.residual, 0.02)
        # Check the second stationMagnitudeContribution object.
        stat_contrib = \
            catalog[0].magnitudes[0].station_magnitude_contributions[1]
        self.assertEqual(stat_contrib.station_magnitude_id.resource_id,
                         "smi:ch.ethz.sed/magnitude/station/881334")
        self.assertEqual(stat_contrib.weight, 0.55)
        self.assertEqual(stat_contrib.residual, 0.11)

        # exporting back to XML should result in the same document
        original = open(filename, "rt").read()
        processed = Pickler().dumps(catalog)
        self._compareStrings(original, processed)
示例#4
0
 def test_event(self):
     """
     Tests Event object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_event.xml')
     catalog = readQuakeML(filename)
     self.assertEqual(len(catalog), 1)
     event = catalog[0]
     self.assertEqual(
         event.resource_id,
         ResourceIdentifier('smi:ch.ethz.sed/event/historical/1165'))
     # enums
     self.assertEqual(event.event_type, 'earthquake')
     self.assertEqual(event.event_type_certainty, 'suspected')
     # comments
     self.assertEqual(len(event.comments), 2)
     c = event.comments
     self.assertEqual(c[0].text, 'Relocated after re-evaluation')
     self.assertEqual(c[0].resource_id, None)
     self.assertEqual(c[0].creation_info.agency_id, 'EMSC')
     self.assertEqual(c[1].text, 'Another comment')
     self.assertEqual(
         c[1].resource_id,
         ResourceIdentifier(id="smi:some/comment/id/number_3"))
     self.assertEqual(c[1].creation_info, None)
     # event descriptions
     self.assertEqual(len(event.event_descriptions), 3)
     d = event.event_descriptions
     self.assertEqual(d[0].text, '1906 San Francisco Earthquake')
     self.assertEqual(d[0].type, 'earthquake name')
     self.assertEqual(d[1].text, 'NEAR EAST COAST OF HONSHU, JAPAN')
     self.assertEqual(d[1].type, 'Flinn-Engdahl region')
     self.assertEqual(d[2].text, 'free-form string')
     self.assertEqual(d[2].type, None)
     # creation info
     self.assertEqual(event.creation_info.author, "Erika Mustermann")
     self.assertEqual(event.creation_info.agency_id, "EMSC")
     self.assertEqual(
         event.creation_info.author_uri,
         ResourceIdentifier("smi:smi-registry/organization/EMSC"))
     self.assertEqual(
         event.creation_info.agency_uri,
         ResourceIdentifier("smi:smi-registry/organization/EMSC"))
     self.assertEqual(
         event.creation_info.creation_time,
         UTCDateTime("2012-04-04T16:40:50+00:00"))
     self.assertEqual(event.creation_info.version, "1.0.1")
     # exporting back to XML should result in the same document
     with open(filename, "rt") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     self._compareStrings(original, processed)
示例#5
0
 def test_magnitude(self):
     """
     Tests Magnitude object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_magnitude.xml')
     catalog = readQuakeML(filename)
     self.assertEqual(len(catalog), 1)
     self.assertEqual(len(catalog[0].magnitudes), 1)
     mag = catalog[0].magnitudes[0]
     self.assertEqual(
         mag.resource_id,
         ResourceIdentifier('smi:ch.ethz.sed/magnitude/37465'))
     self.assertEqual(mag.mag, 5.5)
     self.assertEqual(mag.mag_errors.uncertainty, 0.1)
     self.assertEqual(mag.magnitude_type, 'MS')
     self.assertEqual(
         mag.method_id,
         ResourceIdentifier(
             'smi:ch.ethz.sed/magnitude/generic/surface_wave_magnitude'))
     self.assertEqual(mag.station_count, 8)
     self.assertEqual(mag.evaluation_status, 'preliminary')
     # comments
     self.assertEqual(len(mag.comments), 2)
     c = mag.comments
     self.assertEqual(c[0].text, 'Some comment')
     self.assertEqual(
         c[0].resource_id,
         ResourceIdentifier(id="smi:some/comment/id/muh"))
     self.assertEqual(c[0].creation_info.author, 'EMSC')
     self.assertEqual(c[1].creation_info, None)
     self.assertEqual(c[1].text, 'Another comment')
     self.assertEqual(c[1].resource_id, None)
     # creation info
     self.assertEqual(mag.creation_info.author, "NEIC")
     self.assertEqual(mag.creation_info.agency_id, None)
     self.assertEqual(mag.creation_info.author_uri, None)
     self.assertEqual(mag.creation_info.agency_uri, None)
     self.assertEqual(mag.creation_info.creation_time, None)
     self.assertEqual(mag.creation_info.version, None)
     # exporting back to XML should result in the same document
     with open(filename, "rt") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     self._compareStrings(original, processed)
示例#6
0
    def test_data_used_in_moment_tensor(self):
        """
        Tests the data used objects in moment tensors.
        """
        filename = os.path.join(self.path, 'quakeml_1.2_data_used.xml')

        # Test reading first.
        catalog = readQuakeML(filename)
        event = catalog[0]

        self.assertTrue(len(event.focal_mechanisms), 2)
        # First focmec contains only one data used element.
        self.assertEqual(
            len(event.focal_mechanisms[0].moment_tensor.data_used), 1)
        du = event.focal_mechanisms[0].moment_tensor.data_used[0]
        self.assertEqual(du.wave_type, "body waves")
        self.assertEqual(du.station_count, 88)
        self.assertEqual(du.component_count, 166)
        self.assertEqual(du.shortest_period, 40.0)
        # Second contains three. focmec contains only one data used element.
        self.assertEqual(
            len(event.focal_mechanisms[1].moment_tensor.data_used), 3)
        du = event.focal_mechanisms[1].moment_tensor.data_used
        self.assertEqual(du[0].wave_type, "body waves")
        self.assertEqual(du[0].station_count, 88)
        self.assertEqual(du[0].component_count, 166)
        self.assertEqual(du[0].shortest_period, 40.0)
        self.assertEqual(du[1].wave_type, "surface waves")
        self.assertEqual(du[1].station_count, 96)
        self.assertEqual(du[1].component_count, 189)
        self.assertEqual(du[1].shortest_period, 50.0)
        self.assertEqual(du[2].wave_type, "mantle waves")
        self.assertEqual(du[2].station_count, 41)
        self.assertEqual(du[2].component_count, 52)
        self.assertEqual(du[2].shortest_period, 125.0)

        # exporting back to XML should result in the same document
        with open(filename, "rt") as fp:
            original = fp.read()
        processed = Pickler().dumps(catalog)
        compare_xml_strings(original, processed)
示例#7
0
 def test_pick(self):
     """
     Tests Pick object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_pick.xml')
     catalog = readQuakeML(filename)
     self.assertEqual(len(catalog), 1)
     self.assertEqual(len(catalog[0].picks), 2)
     pick = catalog[0].picks[0]
     self.assertEqual(pick.resource_id,
                      ResourceIdentifier('smi:ch.ethz.sed/pick/117634'))
     self.assertEqual(pick.time, UTCDateTime('2005-09-18T22:04:35Z'))
     self.assertEqual(pick.time_errors.uncertainty, 0.012)
     self.assertEqual(
         pick.waveform_id,
         WaveformStreamID(network_code='BW',
                          station_code='FUR',
                          resource_uri='smi:ch.ethz.sed/waveform/201754'))
     self.assertEqual(
         pick.filter_id,
         ResourceIdentifier('smi:ch.ethz.sed/filter/lowpass/standard'))
     self.assertEqual(
         pick.method_id,
         ResourceIdentifier('smi:ch.ethz.sed/picker/autopicker/6.0.2'))
     self.assertEqual(pick.backazimuth, 44.0)
     self.assertEqual(pick.onset, 'impulsive')
     self.assertEqual(pick.phase_hint, 'Pn')
     self.assertEqual(pick.polarity, 'positive')
     self.assertEqual(pick.evaluation_mode, "manual")
     self.assertEqual(pick.evaluation_status, "confirmed")
     self.assertEqual(len(pick.comments), 2)
     self.assertEqual(pick.creation_info.author, "Erika Mustermann")
     # exporting back to XML should result in the same document
     with open(filename, "rt") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     self._compareStrings(original, processed)
示例#8
0
 def test_focalmechanism(self):
     """
     Tests FocalMechanism object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_focalmechanism.xml')
     catalog = readQuakeML(filename)
     self.assertEqual(len(catalog), 1)
     self.assertEqual(len(catalog[0].focal_mechanisms), 2)
     fm = catalog[0].focal_mechanisms[0]
     # general
     self.assertEqual(fm.resource_id,
                      ResourceIdentifier('smi:ISC/fmid=292309'))
     self.assertEqual(fm.waveform_id.network_code, 'BW')
     self.assertEqual(fm.waveform_id.station_code, 'FUR')
     self.assertEqual(
         fm.waveform_id.resource_uri,
         ResourceIdentifier(resource_id="smi:ch.ethz.sed/waveform/201754"))
     self.assertTrue(isinstance(fm.waveform_id, WaveformStreamID))
     self.assertEqual(fm.triggering_origin_id,
                      ResourceIdentifier('smi:local/originId=7680412'))
     self.assertAlmostEqual(fm.azimuthal_gap, 0.123)
     self.assertEqual(fm.station_polarity_count, 987)
     self.assertAlmostEqual(fm.misfit, 1.234)
     self.assertAlmostEqual(fm.station_distribution_ratio, 2.345)
     self.assertEqual(
         fm.method_id,
         ResourceIdentifier('smi:ISC/methodID=Best_double_couple'))
     # comments
     self.assertEqual(len(fm.comments), 2)
     c = fm.comments
     self.assertEqual(c[0].text, 'Relocated after re-evaluation')
     self.assertEqual(c[0].resource_id, None)
     self.assertEqual(c[0].creation_info.agency_id, 'MUH')
     self.assertEqual(c[1].text, 'Another MUH')
     self.assertEqual(
         c[1].resource_id,
         ResourceIdentifier(resource_id="smi:some/comment/id/number_3"))
     self.assertEqual(c[1].creation_info, None)
     # creation info
     self.assertEqual(fm.creation_info.author, "Erika Mustermann")
     self.assertEqual(fm.creation_info.agency_id, "MUH")
     self.assertEqual(
         fm.creation_info.author_uri,
         ResourceIdentifier("smi:smi-registry/organization/MUH"))
     self.assertEqual(
         fm.creation_info.agency_uri,
         ResourceIdentifier("smi:smi-registry/organization/MUH"))
     self.assertEqual(fm.creation_info.creation_time,
                      UTCDateTime("2012-04-04T16:40:50+00:00"))
     self.assertEqual(fm.creation_info.version, "1.0.1")
     # nodalPlanes
     self.assertAlmostEqual(fm.nodal_planes.nodal_plane_1.strike, 346.0)
     self.assertAlmostEqual(fm.nodal_planes.nodal_plane_1.dip, 57.0)
     self.assertAlmostEqual(fm.nodal_planes.nodal_plane_1.rake, 75.0)
     self.assertAlmostEqual(fm.nodal_planes.nodal_plane_2.strike, 193.0)
     self.assertAlmostEqual(fm.nodal_planes.nodal_plane_2.dip, 36.0)
     self.assertAlmostEqual(fm.nodal_planes.nodal_plane_2.rake, 112.0)
     self.assertEqual(fm.nodal_planes.preferred_plane, 2)
     # principalAxes
     self.assertAlmostEqual(fm.principal_axes.t_axis.azimuth, 216.0)
     self.assertAlmostEqual(fm.principal_axes.t_axis.plunge, 73.0)
     self.assertAlmostEqual(fm.principal_axes.t_axis.length, 1.050e+18)
     self.assertAlmostEqual(fm.principal_axes.p_axis.azimuth, 86.0)
     self.assertAlmostEqual(fm.principal_axes.p_axis.plunge, 10.0)
     self.assertAlmostEqual(fm.principal_axes.p_axis.length, -1.180e+18)
     self.assertEqual(fm.principal_axes.n_axis.azimuth, None)
     self.assertEqual(fm.principal_axes.n_axis.plunge, None)
     self.assertEqual(fm.principal_axes.n_axis.length, None)
     # momentTensor
     mt = fm.moment_tensor
     self.assertEqual(mt.resource_id,
                      ResourceIdentifier('smi:ISC/mtid=123321'))
     self.assertEqual(mt.derived_origin_id,
                      ResourceIdentifier('smi:ISC/origid=13145006'))
     self.assertAlmostEqual(mt.scalar_moment, 1.100e+18)
     self.assertAlmostEqual(mt.tensor.m_rr, 9.300e+17)
     self.assertAlmostEqual(mt.tensor.m_tt, 1.700e+17)
     self.assertAlmostEqual(mt.tensor.m_pp, -1.100e+18)
     self.assertAlmostEqual(mt.tensor.m_rt, -2.200e+17)
     self.assertAlmostEqual(mt.tensor.m_rp, 4.000e+17)
     self.assertAlmostEqual(mt.tensor.m_tp, 3.000e+16)
     self.assertAlmostEqual(mt.clvd, 0.22)
     # exporting back to XML should result in the same document
     original = open(filename, "rt").read()
     processed = Pickler().dumps(catalog)
     self._compareStrings(original, processed)
示例#9
0
 def test_origin(self):
     """
     Tests Origin object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_origin.xml')
     catalog = readQuakeML(filename)
     self.assertEqual(len(catalog), 1)
     self.assertEqual(len(catalog[0].origins), 1)
     origin = catalog[0].origins[0]
     self.assertEqual(
         origin.resource_id,
         ResourceIdentifier(
             'smi:www.iris.edu/ws/event/query?originId=7680412'))
     self.assertEqual(origin.time, UTCDateTime("2011-03-11T05:46:24.1200"))
     self.assertEqual(origin.latitude, 38.297)
     self.assertEqual(origin.latitude_errors.lower_uncertainty, None)
     self.assertEqual(origin.longitude, 142.373)
     self.assertEqual(origin.longitude_errors.uncertainty, None)
     self.assertEqual(origin.depth, 29.0)
     self.assertEqual(origin.depth_errors.confidence_level, 50.0)
     self.assertEqual(origin.depth_type, "from location")
     self.assertEqual(origin.method_id,
                      ResourceIdentifier(resource_id="smi:some/method/NA"))
     self.assertEqual(origin.time_fixed, None)
     self.assertEqual(origin.epicenter_fixed, False)
     self.assertEqual(
         origin.reference_system_id,
         ResourceIdentifier(resource_id="smi:some/reference/muh"))
     self.assertEqual(origin.earth_model_id,
                      ResourceIdentifier(resource_id="smi:same/model/maeh"))
     self.assertEqual(origin.evaluation_mode, "manual")
     self.assertEqual(origin.evaluation_status, "preliminary")
     self.assertEqual(origin.origin_type, "hypocenter")
     # composite times
     self.assertEqual(len(origin.composite_times), 2)
     c = origin.composite_times
     self.assertEqual(c[0].year, 2029)
     self.assertEqual(c[0].month, None)
     self.assertEqual(c[0].day, None)
     self.assertEqual(c[0].hour, 12)
     self.assertEqual(c[0].minute, None)
     self.assertEqual(c[0].second, None)
     self.assertEqual(c[1].year, None)
     self.assertEqual(c[1].month, None)
     self.assertEqual(c[1].day, None)
     self.assertEqual(c[1].hour, 1)
     self.assertEqual(c[1].minute, None)
     self.assertEqual(c[1].second, 29.124234)
     # quality
     self.assertEqual(origin.quality.used_station_count, 16)
     self.assertEqual(origin.quality.standard_error, 0)
     self.assertEqual(origin.quality.azimuthal_gap, 231)
     self.assertEqual(origin.quality.maximum_distance, 53.03)
     self.assertEqual(origin.quality.minimum_distance, 2.45)
     self.assertEqual(origin.quality.associated_phase_count, None)
     self.assertEqual(origin.quality.associated_station_count, None)
     self.assertEqual(origin.quality.depth_phase_count, None)
     self.assertEqual(origin.quality.secondary_azimuthal_gap, None)
     self.assertEqual(origin.quality.ground_truth_level, None)
     self.assertEqual(origin.quality.median_distance, None)
     # comments
     self.assertEqual(len(origin.comments), 2)
     c = origin.comments
     self.assertEqual(c[0].text, 'Some comment')
     self.assertEqual(
         c[0].resource_id,
         ResourceIdentifier(resource_id="smi:some/comment/reference"))
     self.assertEqual(c[0].creation_info.author, 'EMSC')
     self.assertEqual(c[1].resource_id, None)
     self.assertEqual(c[1].creation_info, None)
     self.assertEqual(c[1].text, 'Another comment')
     # creation info
     self.assertEqual(origin.creation_info.author, "NEIC")
     self.assertEqual(origin.creation_info.agency_id, None)
     self.assertEqual(origin.creation_info.author_uri, None)
     self.assertEqual(origin.creation_info.agency_uri, None)
     self.assertEqual(origin.creation_info.creation_time, None)
     self.assertEqual(origin.creation_info.version, None)
     # origin uncertainty
     u = origin.origin_uncertainty
     self.assertEqual(u.preferred_description, "uncertainty ellipse")
     self.assertEqual(u.horizontal_uncertainty, 9000)
     self.assertEqual(u.min_horizontal_uncertainty, 6000)
     self.assertEqual(u.max_horizontal_uncertainty, 10000)
     self.assertEqual(u.azimuth_max_horizontal_uncertainty, 80.0)
     # confidence ellipsoid
     c = u.confidence_ellipsoid
     self.assertEqual(c.semi_intermediate_axis_length, 2.123)
     self.assertEqual(c.major_axis_rotation, 5.123)
     self.assertEqual(c.major_axis_plunge, 3.123)
     self.assertEqual(c.semi_minor_axis_length, 1.123)
     self.assertEqual(c.semi_major_axis_length, 0.123)
     self.assertEqual(c.major_axis_azimuth, 4.123)
     # exporting back to XML should result in the same document
     original = open(filename, "rt").read()
     processed = Pickler().dumps(catalog)
     self._compareStrings(original, processed)