def addEvents(self, catalog): """ Display event locations """ points = [(o.latitude, o.longitude) for o in [get_preferred_origin(e) for e in catalog] if o] self.addMarkers(self.eventMarkers, points)
def to_sac_stream(self, st, waveform): """ Return a SACTrace based on the given stream, containing metadata headers from the waveform """ tr = SACTrace.from_obspy_trace(st[0]) tr.kevnm = waveform.event_description[:16] event = waveform.event_ref() if not event: LOGGER.warn("Lost reference to event %s", waveform.event_description) else: origin = get_preferred_origin(waveform.event_ref()) if origin: tr.evla = origin.latitude tr.evlo = origin.longitude tr.evdp = origin.depth / 1000 tr.o = origin.time - waveform.start_time magnitude = get_preferred_magnitude(waveform.event_ref()) if magnitude: tr.mag = magnitude.mag channel = waveform.channel_ref() if not channel: LOGGER.warn("Lost reference to channel %s", waveform.sncl) else: tr.stla = channel.latitude tr.stlo = channel.longitude tr.stdp = channel.depth tr.stel = channel.elevation tr.cmpaz = channel.azimuth tr.cmpinc = channel.dip + 90 tr.kinst = channel.sensor.description[:8] return Stream([tr.to_obspy_trace()])
def rows(self, data): """ Turn the data into rows (an iterable of lists) of QTableWidgetItems """ for i, event in enumerate(data): origin = get_preferred_origin(event) if not origin: continue magnitude = get_preferred_magnitude(event) if not magnitude: continue time = origin.time.strftime("%Y-%m-%d %H:%M:%S") # use strftime to remove milliseconds event_description = "no description" if len(event.event_descriptions) > 0: event_description = event.event_descriptions[0].text yield [ self.numericWidget(i), self.stringWidget(time), self.numericWidget(magnitude.mag, "%s %s" % (magnitude.mag, magnitude.magnitude_type)), self.numericWidget(origin.longitude, "%.03f°"), self.numericWidget(origin.latitude, "%.03f°"), self.numericWidget(origin.depth / 1000, "%.02f km"), # we wish to report in km self.stringWidget(event_description.title()), ]
def onEventSelectionChanged(self): """ Handle a click anywhere in the table. """ # Get selected ids ids = [] for idx in self.eventsTable.selectionModel().selectedRows(): ids.append(int(self.eventsTable.item(idx.row(), 0).text())) numSelected = len(ids) numTotal = self.eventsTable.rowCount() self.eventSelectionLabel.setText( "Selected %d of %d events" % (numSelected, numTotal)) # Get locations and event IDs points = [] eventIDs = [] for id in ids: event = self.pyweed.events[id] origin = get_preferred_origin(event) if not origin: continue points.append((origin.latitude, origin.longitude)) eventIDs.append(event.resource_id.id) # Update the events_handler with the latest selection information self.pyweed.set_selected_event_ids(eventIDs) self.seismap.addEventsHighlighting(points) self.stationOptionsWidget.onEventSelectionChanged() self.manageGetWaveformsButton()
def iter_selected_event_locations(self): """ Return an iterator of (id, (lat, lon)) for each event. """ for event in self.iter_selected_events(): origin = get_preferred_origin(event) if origin: yield (event.resource_id.id, (origin.latitude, origin.longitude),)
def updateSeismap(self, events=False, stations=False): """ Update seismap when [event|station]OptionsWidget coordinates change """ LOGGER.debug("Updating map from widget: %s" % ((events and "events") or "stations")) if events: options = self.eventOptionsWidget.getOptions() markers = self.seismap.eventMarkers else: options = self.stationOptionsWidget.getOptions() markers = self.seismap.stationMarkers try: self.seismap.clearBoundingMarkers(markers) if options["location_choice"] == EventOptions.LOCATION_BOX: self.seismap.addMarkerBox( markers, float(options["maxlatitude"]), float(options["maxlongitude"]), float(options["minlatitude"]), float(options["minlongitude"]) ) elif options["location_choice"] == EventOptions.LOCATION_POINT: self.seismap.addMarkerToroid( markers, float(options["latitude"]), float(options["longitude"]), float(options["minradius"]), float(options["maxradius"]) ) elif options["location_choice"] == StationOptions.LOCATION_EVENTS: # Show distance markers around all events for event in self.pyweed.iter_selected_events(): origin = get_preferred_origin(event) if origin: self.seismap.addMarkerToroid( markers, origin.latitude, origin.longitude, float(options["mindistance"]), float(options["maxdistance"]) ) except Exception as e: LOGGER.error("Failed to update seismap! %s", e, exc_info=True)
def __init__(self, event, network, station, channel, *args, **kwargs): super(WaveformEntry, self).__init__(*args, **kwargs) self.event_ref = weakref.ref(event) self.network_ref = weakref.ref(network) self.station_ref = weakref.ref(station) self.channel_ref = weakref.ref(channel) self.sncl = get_sncl(network, station, channel) self.event_description = get_event_description(event) origin = get_preferred_origin(event) self.event_time = origin.time self.event_time_str = format_time_str(origin.time) self.event_depth = origin.depth / 1000 mag = get_preferred_magnitude(event) self.event_mag = "%s%s" % (mag.mag, mag.magnitude_type) self.event_mag_value = mag.mag self.waveform_id = '%s_%s' % (self.sncl, get_event_id(event)) self.distance = get_distance(origin.latitude, origin.longitude, station.latitude, station.longitude)
def __init__(self, event, network, station, channel, *args, **kwargs): super(WaveformEntry, self).__init__(*args, **kwargs) self.event_ref = weakref.ref(event) self.network_ref = weakref.ref(network) self.station_ref = weakref.ref(station) self.channel_ref = weakref.ref(channel) self.sncl = get_sncl(network, station, channel) self.event_description = get_event_description(event) origin = get_preferred_origin(event) self.event_time = origin.time self.event_time_str = format_time_str(origin.time) self.event_depth = origin.depth / 1000 mag = get_preferred_magnitude(event) self.event_mag = "%s%s" % (mag.mag, mag.magnitude_type) self.event_mag_value = mag.mag self.waveform_id = '%s_%s' % (self.sncl, get_event_id(event)) self.distance = get_distance( origin.latitude, origin.longitude, station.latitude, station.longitude)