Ejemplo n.º 1
0
    def test_station_magnitude_contribution(self):
        """
        Tests the station magnitude contribution object.
        """
        filename = os.path.join(
            self.path, 'quakeml_1.2_stationmagnitudecontributions.xml')
        catalog = _read_quakeml(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.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.id,
            "smi:ch.ethz.sed/magnitude/station/881334")
        self.assertEqual(stat_contrib.weight, 0.)
        self.assertEqual(stat_contrib.residual, 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)
Ejemplo n.º 2
0
 def test_pick(self):
     """
     Tests Pick object.
     """
     filename = os.path.join(self.path, "quakeml_1.2_pick.xml")
     catalog = _read_quakeml(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)
     compare_xml_strings(original, processed)
Ejemplo n.º 3
0
 def test_station_magnitude(self):
     """
     Tests StationMagnitude object.
     """
     filename = os.path.join(self.path, "quakeml_1.2_stationmagnitude.xml")
     catalog = _read_quakeml(filename)
     self.assertEqual(len(catalog), 1)
     self.assertEqual(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.assertEqual(mag.origin_id, ResourceIdentifier("smi:some/example/id"))
     self.assertEqual(mag.mag, 6.5)
     self.assertEqual(mag.mag_errors.uncertainty, 0.2)
     self.assertEqual(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
     with open(filename, "rt") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     compare_xml_strings(original, processed)
Ejemplo n.º 4
0
 def test_arrival(self):
     """
     Tests Arrival object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_arrival.xml')
     catalog = _read_quakeml(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
     with open(filename, "rt") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     compare_xml_strings(original, processed)
Ejemplo n.º 5
0
 def test_event(self):
     """
     Tests Event object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_event.xml')
     catalog = _read_quakeml(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)
     compare_xml_strings(original, processed)
Ejemplo n.º 6
0
 def test_write_catalog(self):
     """
     Test writing Catalog to KML.
     """
     # write the example catalog to KML and read it into a string
     cat = read_events()
     with NamedTemporaryFile(suffix=".kml") as tf:
         cat.write(tf.name, format="KML")
         with open(tf.name, "rb") as fh:
             got = fh.read()
     # read expected result into string
     filename = os.path.join(self.path, 'catalog.kml')
     with open(filename, "rb") as fh:
         expected = fh.read()
     # compare the two
     compare_xml_strings(expected, got)
Ejemplo n.º 7
0
 def test_write_inventory(self):
     """
     Test writing Inventory to KML.
     """
     # write the example inventory to KML and read it into a string
     inv = read_inventory()
     with NamedTemporaryFile(suffix=".kml") as tf:
         inv.write(tf.name, format="KML")
         with open(tf.name, "rb") as fh:
             got = fh.read()
     # read expected result into string
     filename = os.path.join(self.path, 'inventory.kml')
     with open(filename, "rb") as fh:
         expected = fh.read()
     # compare the two
     compare_xml_strings(expected, got)
Ejemplo n.º 8
0
 def test_write_Catalog(self):
     """
     Test writing Catalog to KML.
     """
     # write the example catalog to KML and read it into a string
     cat = read_events()
     with NamedTemporaryFile(suffix=".kml") as tf:
         cat.write(native_str(tf.name), format="KML")
         with open(tf.name, "rb") as fh:
             got = fh.read()
     # read expected result into string
     filename = os.path.join(self.path, 'catalog.kml')
     with open(filename, "rb") as fh:
         expected = fh.read()
     # compare the two
     compare_xml_strings(expected, got)
Ejemplo n.º 9
0
 def test_write_Inventory(self):
     """
     Test writing Inventory to KML.
     """
     # write the example inventory to KML and read it into a string
     inv = read_inventory()
     with NamedTemporaryFile(suffix=".kml") as tf:
         inv.write(native_str(tf.name), format="KML")
         with open(tf.name, "rb") as fh:
             got = fh.read()
     # read expected result into string
     filename = os.path.join(self.path, 'inventory.kml')
     with open(filename, "rb") as fh:
         expected = fh.read()
     # compare the two
     compare_xml_strings(expected, got)
Ejemplo n.º 10
0
 def test_magnitude(self):
     """
     Tests Magnitude object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_magnitude.xml')
     catalog = _read_quakeml(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)
     compare_xml_strings(original, processed)
Ejemplo n.º 11
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 = _read_quakeml(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)
Ejemplo n.º 12
0
    def test_read_nlloc_hyp(self):
        """
        Test reading nonlinloc hypocenter phase file.
        """
        filename = get_example_file("nlloc_custom.hyp")
        cat = read_nlloc_hyp(filename,
                             coordinate_converter=_mock_coordinate_converter)
        # reset pick channel codes, these got automatically mapped upon reading
        for pick in cat[0].picks:
            pick.waveform_id.channel_code = None
        with open(get_example_file("nlloc_custom.qml"), 'rb') as tf:
            quakeml_expected = tf.read().decode()
        with NamedTemporaryFile() as tf:
            cat.write(tf, format="QUAKEML")
            tf.seek(0)
            quakeml_got = tf.read().decode()

        # test creation times manually as they get omitted in the overall test
        creation_time = UTCDateTime("2014-10-17T16:30:08.000000Z")
        self.assertEqual(cat[0].creation_info.creation_time, creation_time)
        self.assertEqual(cat[0].origins[0].creation_info.creation_time,
                         creation_time)

        quakeml_expected = remove_unique_ids(quakeml_expected,
                                             remove_creation_time=True)
        quakeml_got = remove_unique_ids(quakeml_got, remove_creation_time=True)
        # In python 3 float.__str__ outputs 5 decimals of precision more.
        # We use it in writing QuakeML, so files look different on Py2/3.
        # We use regex to cut off floats in the xml such that we only compare
        # 7 digits.
        pattern = r'(<.*?>[0-9]*?\.[0-9]{7})[0-9]*?(</.*?>)'
        quakeml_expected = re.sub(pattern, r'\1\2', quakeml_expected)
        quakeml_got = re.sub(pattern, r'\1\2', quakeml_got)

        # remove (changing) obspy version number from output
        re_pattern = '<version>ObsPy .*?</version>'
        quakeml_expected = re.sub(re_pattern, '', quakeml_expected, 1)
        quakeml_got = re.sub(re_pattern, '', quakeml_got, 1)

        compare_xml_strings(quakeml_expected, quakeml_got)
Ejemplo n.º 13
0
 def test_pick(self):
     """
     Tests Pick object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_pick.xml')
     catalog = _read_quakeml(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)
     compare_xml_strings(original, processed)
Ejemplo n.º 14
0
 def test_station_magnitude(self):
     """
     Tests StationMagnitude object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_stationmagnitude.xml')
     catalog = _read_quakeml(filename)
     self.assertEqual(len(catalog), 1)
     self.assertEqual(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.assertEqual(
         mag.origin_id,
         ResourceIdentifier('smi:some/example/id'))
     self.assertEqual(mag.mag, 6.5)
     self.assertEqual(mag.mag_errors.uncertainty, 0.2)
     self.assertEqual(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
     with open(filename, "rt") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     compare_xml_strings(original, processed)
Ejemplo n.º 15
0
    def test_read_nlloc_hyp(self):
        """
        Test reading nonlinloc hypocenter phase file.
        """
        filename = get_example_file("nlloc_custom.hyp")
        cat = read_nlloc_hyp(filename,
                             coordinate_converter=_mock_coordinate_converter)
        with open(get_example_file("nlloc_custom.qml"), 'rb') as tf:
            quakeml_expected = tf.read().decode()
        with NamedTemporaryFile() as tf:
            cat.write(tf, format="QUAKEML")
            tf.seek(0)
            quakeml_got = tf.read().decode()

        # test creation times manually as they get omitted in the overall test
        creation_time = UTCDateTime("2014-10-17T16:30:08.000000Z")
        self.assertEqual(cat[0].creation_info.creation_time, creation_time)
        self.assertEqual(cat[0].origins[0].creation_info.creation_time,
                         creation_time)

        quakeml_expected = remove_unique_ids(quakeml_expected,
                                             remove_creation_time=True)
        quakeml_got = remove_unique_ids(quakeml_got, remove_creation_time=True)
        # In python 3 float.__str__ outputs 5 decimals of precision more.
        # We use it in writing QuakeML, so files look different on Py2/3.
        # We use regex to cut off floats in the xml such that we only compare
        # 7 digits.
        pattern = r'(<.*?>[0-9]*?\.[0-9]{7})[0-9]*?(</.*?>)'
        quakeml_expected = re.sub(pattern, r'\1\2', quakeml_expected)
        quakeml_got = re.sub(pattern, r'\1\2', quakeml_got)

        # remove (changing) obspy version number from output
        re_pattern = '<version>ObsPy .*?</version>'
        quakeml_expected = re.sub(re_pattern, '', quakeml_expected, 1)
        quakeml_got = re.sub(re_pattern, '', quakeml_got, 1)

        compare_xml_strings(quakeml_expected, quakeml_got)
Ejemplo n.º 16
0
 def test_origin(self):
     """
     Tests Origin object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_origin.xml')
     catalog = _read_quakeml(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(id="smi:some/method/NA"))
     self.assertEqual(origin.time_fixed, None)
     self.assertEqual(origin.epicenter_fixed, False)
     self.assertEqual(
         origin.reference_system_id,
         ResourceIdentifier(id="smi:some/reference/muh"))
     self.assertEqual(
         origin.earth_model_id,
         ResourceIdentifier(id="smi:same/model/maeh"))
     self.assertEqual(origin.region, 'Kalamazoo')
     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(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
     with open(filename, "rt") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     compare_xml_strings(original, processed)
Ejemplo n.º 17
0
 def test_focalmechanism(self):
     """
     Tests FocalMechanism object.
     """
     filename = os.path.join(self.path, 'quakeml_1.2_focalmechanism.xml')
     catalog = _read_quakeml(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(len(fm.waveform_id), 2)
     self.assertEqual(fm.waveform_id[0].network_code, 'BW')
     self.assertEqual(fm.waveform_id[0].station_code, 'FUR')
     self.assertEqual(
         fm.waveform_id[0].resource_uri,
         ResourceIdentifier(id="smi:ch.ethz.sed/waveform/201754"))
     self.assertTrue(isinstance(fm.waveform_id[0], 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(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
     with open(filename, "rb") as fp:
         original = fp.read()
     processed = Pickler().dumps(catalog)
     compare_xml_strings(original, processed)