Esempio n. 1
0
 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)
Esempio n. 2
0
 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()])
Esempio n. 3
0
 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()])
Esempio n. 4
0
    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()),
            ]
Esempio n. 5
0
    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()
Esempio n. 6
0
 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),)
Esempio n. 7
0
 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),)
Esempio n. 8
0
    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)
Esempio n. 9
0
    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)
Esempio n. 10
0
    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)