def get_picks_data(self): if not self._picks_data: markers = pmarker.load_markers(self.expand_path(self.picks_path)) nsl_to_index = {} picked_index = [] picked_times = [] index = -1 for marker in markers: if isinstance(marker, pmarker.PhaseMarker) \ and marker.get_phasename() == self.picks_phasename: nsl = marker.one_nslc()[:3] if nsl not in nsl_to_index: index += 1 nsl_to_index[nsl] = index ind = nsl_to_index[nsl] picked_index.append(ind) picked_times.append((marker.tmin + marker.tmax) * 0.5) self._picks_data = ( nsl_to_index, num.array(picked_index, dtype=num.int64), num.array(picked_times, dtype=num.float)) return self._picks_data
def add_clippings(self, markers_filename): markers = pmarker.load_markers(markers_filename) clippings = {} for marker in markers: nslc = marker.one_nslc() nsl = nslc[:3] if nsl not in clippings: clippings[nsl] = [] if nslc not in clippings: clippings[nslc] = [] clippings[nsl].append(marker.tmin) clippings[nslc].append(marker.tmin) for k, times in clippings.items(): atimes = num.array(times, dtype=num.float) if k not in self.clippings: self.clippings[k] = atimes else: self.clippings[k] = num.concatenate(self.clippings, atimes)
def snuffler_from_commandline(args=None): if args is None: args = sys.argv[1:] usage = '''usage: %prog [options] waveforms ...''' parser = OptionParser(usage=usage) parser.add_option( '--format', dest='format', default='detect', choices=io.allowed_formats('load'), help='assume input files are of given FORMAT. Choices: %s' % io.allowed_formats('load', 'cli_help', 'detect')) parser.add_option( '--pattern', dest='regex', metavar='REGEX', help='only include files whose paths match REGEX') parser.add_option( '--stations', dest='station_fns', action='append', default=[], metavar='STATIONS', help='read station information from file STATIONS') parser.add_option( '--stationxml', dest='stationxml_fns', action='append', default=[], metavar='STATIONSXML', help='read station information from XML file STATIONSXML') parser.add_option( '--event', '--events', dest='event_fns', action='append', default=[], metavar='EVENT', help='read event information from file EVENT') parser.add_option( '--markers', dest='marker_fns', action='append', default=[], metavar='MARKERS', help='read marker information file MARKERS') parser.add_option( '--follow', type='float', dest='follow', metavar='N', help='follow real time with a window of N seconds') parser.add_option( '--cache', dest='cache_dir', default=config.config().cache_dir, metavar='DIR', help='use directory DIR to cache trace metadata ' '(default=\'%default\')') parser.add_option( '--force-cache', dest='force_cache', action='store_true', default=False, help='use the cache even when trace attribute spoofing is active ' '(may have silly consequences)') parser.add_option( '--store-path', dest='store_path', metavar='PATH_TEMPLATE', help='store data received through streams to PATH_TEMPLATE') parser.add_option( '--store-interval', type='float', dest='store_interval', default=600, metavar='N', help='dump stream data to file every N seconds [default: %default]') parser.add_option( '--ntracks', type='int', dest='ntracks', default=24, metavar='N', help='initially use N waveform tracks in viewer [default: %default]') parser.add_option( '--opengl', dest='opengl', action='store_true', default=False, help='use OpenGL for drawing') parser.add_option( '--qt5', dest='gui_toolkit_qt5', action='store_true', default=False, help='use Qt5 for the GUI') parser.add_option( '--qt4', dest='gui_toolkit_qt4', action='store_true', default=False, help='use Qt4 for the GUI') parser.add_option( '--debug', dest='debug', action='store_true', default=False, help='print debugging information to stderr') options, args = parser.parse_args(list(args)) if options.debug: util.setup_logging('snuffler', 'debug') else: util.setup_logging('snuffler', 'warning') if options.gui_toolkit_qt4: config.override_gui_toolkit = 'qt4' if options.gui_toolkit_qt5: config.override_gui_toolkit = 'qt5' this_pile = pile.Pile() stations = [] for stations_fn in extend_paths(options.station_fns): stations.extend(model.station.load_stations(stations_fn)) for stationxml_fn in extend_paths(options.stationxml_fns): stations.extend( stationxml.load_xml( filename=stationxml_fn).get_pyrocko_stations()) events = [] for event_fn in extend_paths(options.event_fns): events.extend(model.event.Event.load_catalog(event_fn)) markers = [] for marker_fn in extend_paths(options.marker_fns): markers.extend(marker.load_markers(marker_fn)) return snuffle( this_pile, stations=stations, events=events, markers=markers, ntracks=options.ntracks, follow=options.follow, controls=True, opengl=options.opengl, paths=args, cache_dir=options.cache_dir, regex=options.regex, format=options.format, force_cache=options.force_cache, store_path=options.store_path, store_interval=options.store_interval)
def add_picks(self, filename): self.pick_markers.extend(pmarker.load_markers(filename)) self._picks = None
def command_qc_polarization(args): def setup(parser): parser.add_option( '--time-factor-pre', dest='time_factor_pre', type=float, metavar='NUMBER', default=0.5, help='set duration to extract before synthetic P phase arrival, ' 'relative to 1/fmin. fmin is taken from the selected target ' 'group in the config file (default=%default)') parser.add_option( '--time-factor-post', dest='time_factor_post', type=float, metavar='NUMBER', default=0.5, help='set duration to extract after synthetic P phase arrival, ' 'relative to 1/fmin. fmin is taken from the selected target ' 'group in the config file (default=%default)') parser.add_option( '--distance-min', dest='distance_min', type=float, metavar='NUMBER', help='minimum event-station distance [m]') parser.add_option( '--distance-max', dest='distance_max', type=float, metavar='NUMBER', help='maximum event-station distance [m]') parser.add_option( '--depth-min', dest='depth_min', type=float, metavar='NUMBER', help='minimum station depth [m]') parser.add_option( '--depth-max', dest='depth_max', type=float, metavar='NUMBER', help='maximum station depth [m]') parser.add_option( '--picks', dest='picks_filename', metavar='FILENAME', help='add file with P picks in Snuffler marker format') parser.add_option( '--save', dest='output_filename', metavar='FILENAME.FORMAT', help='save output to file FILENAME.FORMAT') parser.add_option( '--dpi', dest='output_dpi', type=float, default=120., metavar='NUMBER', help='DPI setting for raster formats (default=120)') parser, options, args = cl_parse('qc-polarization', args, setup) if len(args) != 3: help_and_die(parser, 'missing arguments') if options.output_filename: import matplotlib matplotlib.use('Agg') import grond.qc config_path, event_name, target_group_path = args try: config = grond.read_config(config_path) except grond.GrondError as e: die(str(e)) ds = config.get_dataset(event_name) engine = config.engine_config.get_engine() nsl_to_time = None if options.picks_filename: markers = marker.load_markers(options.picks_filename) marker.associate_phases_to_events(markers) nsl_to_time = {} for m in markers: if isinstance(m, marker.PhaseMarker): ev = m.get_event() if ev is not None and ev.name == event_name: nsl_to_time[m.one_nslc()[:3]] = m.tmin if not nsl_to_time: help_and_die( parser, 'no markers associated with event "%s" found in file "%s"' % ( event_name, options.picks_filename)) target_group_paths_avail = [] for target_group in config.target_groups: name = target_group.path if name == target_group_path: imc = target_group.misfit_config fmin = imc.fmin fmax = imc.fmax ffactor = imc.ffactor store = engine.get_store(target_group.store_id) timing = '{cake:P|cake:p|cake:P\\|cake:p\\}' grond.qc.polarization( ds, store, timing, fmin=fmin, fmax=fmax, ffactor=ffactor, time_factor_pre=options.time_factor_pre, time_factor_post=options.time_factor_post, distance_min=options.distance_min, distance_max=options.distance_max, depth_min=options.depth_min, depth_max=options.depth_max, nsl_to_time=nsl_to_time, output_filename=options.output_filename, output_dpi=options.output_dpi) return target_group_paths_avail.append(name) die('no target group with path "%s" found. Available: %s' % ( target_group_path, ', '.join(target_group_paths_avail)))
from pyrocko import util, marker as pm markers = pm.load_markers('my_markers.pf') pm.associate_phases_to_events(markers) for marker in markers: print util.time_to_str(marker.tmin), util.time_to_str(marker.tmax) # only event and phase markers have an event attached if isinstance(marker, (pm.EventMarker, pm.PhaseMarker)): ev = marker.get_event() print ev # may be shared between markers