def test_preferred_tags(self): """ Testing preferred magnitude, origin and focal mechanism tags """ # testing empty event ev = Event() self.assertEqual(ev.preferred_origin(), None) self.assertEqual(ev.preferred_magnitude(), None) self.assertEqual(ev.preferred_focal_mechanism(), None) # testing existing event filename = os.path.join(self.path, 'preferred.xml') catalog = read_events(filename) self.assertEqual(len(catalog), 1) ev_str = "Event:\t2012-12-12T05:46:24.120000Z | +38.297, +142.373 " + \ "| 2.0 MW" self.assertIn(ev_str, str(catalog.events[0])) # testing ids ev = catalog.events[0] self.assertEqual('smi:orig2', ev.preferred_origin_id) self.assertEqual('smi:mag2', ev.preferred_magnitude_id) self.assertEqual('smi:fm2', ev.preferred_focal_mechanism_id) # testing objects self.assertEqual(ev.preferred_origin(), ev.origins[1]) self.assertEqual(ev.preferred_magnitude(), ev.magnitudes[1]) self.assertEqual( ev.preferred_focal_mechanism(), ev.focal_mechanisms[1])
def event_magnitude(event: Event) -> float: """ Get a magnitude for the event. """ try: magnitude = event.preferred_magnitude() or event.magnitudes[0] magnitude = magnitude.mag except IndexError: magnitude = None return magnitude
def estimate_region(event: Event, min_length: float = 50.) -> dict: """ Estimate the region to find templates within given a triggering event. Parameters ---------- event The event that triggered this function min_length Minimum length in km for diameter of event circle around the triggering event Returns ------- Dictionary keyed by "latitude", "longitude" and "maxradius" Notes ----- Uses a basic Wells and Coppersmith relation, scaled by 1.25 times. """ from obspy.geodetics import kilometer2degrees try: origin = event.preferred_origin() or event.origins[0] except IndexError: Logger.error("Triggering event has no origin, not using.") return None try: magnitude = event.preferred_magnitude() or event.magnitudes[0] except IndexError: Logger.warning("Triggering event has no magnitude, using minimum " "length or {0}".format(min_length)) magnitude = None if magnitude: length = 10**((magnitude.mag - 5.08) / 1.16) # Wells and Coppersmith # Scale up a bit - for Darfield this gave 0.6 deg, but the aftershock # region is more like 1.2 deg radius length *= 1.25 else: length = min_length if length <= min_length: length = min_length length = kilometer2degrees(length) length /= 2. return { "latitude": origin.latitude, "longitude": origin.longitude, "maxradius": length }
def estimate_region( event: Event, min_length: float = 50., scaling_relation: Union[str, Callable] = 'default', multiplier: float = 1.25, ) -> dict: """ Estimate the region to find templates within given a triggering event. Parameters ---------- event The event that triggered this function min_length Minimum length in km for diameter of event circle around the triggering event scaling_relation Name of registered scaling-relationship or Callable that takes only the earthquake magnitude as an argument and returns length in km multiplier Fudge factor to scale the scaling relation up by a constant. Returns ------- Dictionary keyed by "latitude", "longitude" and "maxradius" Notes ----- The `scaling_relation` * `multiplier` defines the `maxradius` of the region """ from obspy.geodetics import kilometer2degrees try: origin = event.preferred_origin() or event.origins[0] except IndexError: Logger.error("Triggering event has no origin, not using.") return None try: magnitude = event.preferred_magnitude() or event.magnitudes[0] except IndexError: Logger.warning("Triggering event has no magnitude, using minimum " "length or {0}".format(min_length)) magnitude = None if magnitude: if not callable(scaling_relation): scaling_relation = get_scaling_relation(scaling_relation) length = scaling_relation(magnitude.mag) length *= multiplier else: length = min_length if length <= min_length: length = min_length length = kilometer2degrees(length) length /= 2. return { "latitude": origin.latitude, "longitude": origin.longitude, "maxradius": length }