Picker

Automatic phase picking workflows.

ai

Phase picking interfaces for EQTransformer and PhaseNet.

This module provides wrapper classes and configuration containers for running seismic phase picking workflows using:

  • EQTransformer

  • PhaseNet

The classes standardize:
  • model configuration

  • waveform preprocessing

  • prediction execution

  • result conversion to SeisMonitor format

The module also includes helper utilities for:
  • TensorFlow session cleanup

  • MiniSEED organization

  • datalist generation

  • duplicate pick removal

Notes

TensorFlow warnings and verbose logging are suppressed to reduce console noise during inference.

Examples

Run EQTransformer:

eqt_config = EQTransformerObj(
    model_path="model.h5",
    batch_size=4,
)

picker = EQTransformer(eqt_config)

picks = picker.pick(
    mseed_storage="./mseed",
    metadata_dir="./metadata",
    out_dir="./results",
)

Run PhaseNet:

pnet_config = PhaseNetObj(
    pnet_path="./PhaseNet",
    model_path="./model",
)

picker = PhaseNet(pnet_config)

picks = picker.pick(
    mseed_storage="./mseed",
    metadata_dir="./metadata",
    out_dir="./results",
)
class SeisMonitor.monitor.picker.ai.EQTransformer(eqt_obj)[source]

Bases: object

Wrapper class for EQTransformer predictions.

Parameters:

eqt_obj (EQTransformerObj) – EQTransformer configuration object.

pick(mseed_storage, metadata_dir, out_dir)[source]

Run EQTransformer phase picking.

Parameters:
  • mseed_storage (str) – Directory containing MiniSEED files.

  • metadata_dir (str) – Directory containing station metadata.

  • out_dir (str) – Output directory for prediction results.

Returns:

  • pandas.DataFrame – Picks converted to SeisMonitor format.

  • Notes – Saves results to {out_dir}/results/seismonitor_picks.csv

class SeisMonitor.monitor.picker.ai.EQTransformerObj(model_path, n_processor=2, overlap=0.3, detection_threshold=0.1, P_threshold=0.1, S_threshold=0.1, number_of_plots=1, batch_size=1, plot_mode=1, overwrite=False, rm_downloads=False)[source]

Bases: object

Configuration container for EQTransformer predictions.

Parameters:
  • model_path (str) – Path to the trained EQTransformer model.

  • n_processor (int, default=2) – Number of processors used during prediction.

  • overlap (float, default=0.3) – Overlap fraction between prediction windows.

  • detection_threshold (float, default=0.1) – Detection probability threshold.

  • P_threshold (float, default=0.1) – P-phase probability threshold.

  • S_threshold (float, default=0.1) – S-phase probability threshold.

  • number_of_plots (int, default=1) – Number of prediction plots to generate.

  • batch_size (int, default=1) – Number of waveforms processed per batch.

  • plot_mode (int, default=1) – Plotting mode used by EQTransformer.

  • overwrite (bool, default=False) – Whether existing outputs should be overwritten.

  • rm_downloads (bool, default=False) – Remove MiniSEED files after prediction.

name

Picker identifier.

Type:

str

class SeisMonitor.monitor.picker.ai.PhaseNet(pnet_obj)[source]

Bases: object

Wrapper class for PhaseNet predictions.

Parameters:

pnet_obj (PhaseNetObj) – PhaseNet configuration object.

pick(mseed_storage, metadata_dir, out_dir)[source]

Run PhaseNet phase picking.

Parameters:
  • mseed_storage (str) – Directory containing MiniSEED files.

  • metadata_dir (str) – Directory containing station metadata.

  • out_dir (str) – Output directory for prediction results.

Returns:

  • pandas.DataFrame – Picks converted to SeisMonitor format.

  • Notes – Saves results to {out_dir}/results/seismonitor_picks.csv

class SeisMonitor.monitor.picker.ai.PhaseNetObj(pnet_path, model_path, mode='pred', P_threshold=0.3, S_threshold=0.3, batch_size=2, plot=False, save_result=False, epochs=100, learning_rate=0.01, decay_step=-1, decay_rate=0.9, momentum=0.9, filters_root=8, depth=5, kernel_size=[7, 1], pool_size=[4, 1], drop_rate=0, dilation_rate=[1, 1], loss_type='cross_entropy', weight_decay=0, optimizer='adam', summary=True, class_weights=[1, 1, 1], log_dir='log', num_plots=10, input_length=None, input_mseed=True, filename_picks='picks', one_single_sampling_rate=-1, data_dir='./dataset/waveform_pred/', data_list='./dataset/waveform.csv', train_dir='./dataset/waveform_train/', train_list='./dataset/waveform.csv', valid_dir=None, valid_list=None, output_dir=None, rm_downloads=False)[source]

Bases: object

Configuration container for PhaseNet predictions.

Parameters:
  • pnet_path (str) – Path to PhaseNet repository.

  • model_path (str) – Path to trained PhaseNet model.

  • mode (str, default="pred") – Operation mode (‘pred’ for prediction).

  • P_threshold (float, default=0.3) – Minimum P-phase probability.

  • S_threshold (float, default=0.3) – Minimum S-phase probability.

  • batch_size (int, default=2) – Number of waveforms per batch.

  • plot (bool, default=False) – Whether to generate plots.

  • save_result (bool, default=False) – Whether to save prediction results.

  • epochs (int, default=100) – Number of training epochs.

  • learning_rate (float, default=0.01) – Initial learning rate.

  • decay_step (int, default=100) – Steps for learning rate decay.

  • decay_rate (float, default=0.9) – Learning rate decay rate.

  • momentum (float, default=0.9) – Momentum for optimizer.

  • filters_root (int, default=8) – Base number of filters.

  • depth (int, default=5) – Network depth.

  • kernel_size (list, default=[7, 5, 5, 5, 5]) – Kernel size for convolution.

  • pool_size (list, default=[4, 2, 2, 2, 2]) – Pooling size.

  • drop_rate (float, default=0.1) – Dropout rate.

  • dilation_rate (list, default=[1, 2, 4, 8, 16]) – Dilation rate for convolution.

  • loss_type (str, default="dice") – Loss function type.

  • weight_decay (float, default=1e-5) – Weight decay factor.

  • optimizer (str, default="adam") – Optimizer type.

  • summary (bool, default=True) – Whether to show summary.

  • class_weights (list, optional) – Weights for class balancing.

  • log_dir (str, default="logs") – Directory for logs.

  • num_plots (int, default=10) – Number of plots to generate.

  • input_length (int, optional) – Input length in samples.

  • input_mseed (bool, default=True) – Whether input is MSEED format.

  • filename_picks (str, default="picks") – Base name for picks output file.

  • one_single_sampling_rate (float, default=-1) – Override sampling rate (-1 for auto).

  • data_dir (str) – Directory for prediction data.

  • data_list (str) – Path to data list CSV.

  • train_dir (str) – Directory for training data.

  • train_list (str) – Path to training list CSV.

  • valid_dir (str, optional) – Directory for validation data.

  • valid_list (str, optional) – Path to validation list CSV.

  • output_dir (str, optional) – Directory for output.

  • rm_downloads (bool, default=False) – Whether to remove input MSEED files after processing.

utils

SeisMonitor.monitor.picker.utils.clone_aipicker(name, output_folder)[source]

Clone AI picker repository from GitHub.

Parameters:
  • name (str) – Name of the AI picker (‘EQTransformer’ or ‘PhaseNet’)

  • output_folder (str) – Directory path to store the cloned repository

Returns:

True if successful

Return type:

bool

Raises:

Exception – If invalid picker name is provided

SeisMonitor.monitor.picker.utils.create_datalist(self, all_in_folder=False)[source]

Create PhaseNet datalist(s) for processing.

Parameters:
  • self – Object with datalist_dir and mseed_storage attributes

  • all_in_folder (bool) – If True, create single datalist; otherwise, per station

SeisMonitor.monitor.picker.utils.eqt_picks_2_seismonitor_fmt(eqt_folder, mseed_folder, out_path)[source]

Convert EQTransformer picks to SeisMonitor format.

Parameters:
  • eqt_folder (str) – Directory containing EQTransformer pick files

  • mseed_folder (str) – Directory containing MSEED files

  • out_path (str) – Output path for the converted CSV file

Returns:

Converted picks DataFrame

Return type:

pandas.DataFrame

SeisMonitor.monitor.picker.utils.get_filenames(mseed, filter_net=None, filter_sta=None, filter_cha=None)[source]

Retrieve MSEED filenames with optional filtering.

Parameters:
  • mseed (str) – Path to MSEED files directory

  • filter_net (list, optional) – Networks to exclude

  • filter_sta (list, optional) – Stations to exclude

  • filter_cha (list, optional) – Channels to include (if specified)

Returns:

Filtered filenames

Return type:

list

Raises:

Exception – If filter parameters are not lists

SeisMonitor.monitor.picker.utils.get_pickframe(path, csv_filename)[source]

Collect picks from CSV files in a directory structure.

Parameters:
  • path (str) – Root directory containing station folders with picks

  • csv_filename (str) – Name of CSV file containing picks

Returns:

Combined picks DataFrame

Return type:

pandas.DataFrame

SeisMonitor.monitor.picker.utils.get_picks(datapicks, datalist, min_p_prob=0.3, min_s_prob=0.3, one_single_sampling_rate=-1, mode='df_obj', export=None)[source]

Read PhaseNet picks and convert to desired format.

Parameters:
  • datapicks (str) – Path to PhaseNet picks CSV

  • datalist (str) – Path to datalist CSV

  • min_p_prob (float) – Minimum P-phase probability

  • min_s_prob (float) – Minimum S-phase probability

  • one_single_sampling_rate (float) – Override sampling rate (-1 for auto)

  • mode (str) – Output mode (‘pick_obj’ or ‘df_obj’)

  • export (str, optional) – Path to export DataFrame as CSV

Returns:

Picks in specified format

Return type:

list or pandas.DataFrame

SeisMonitor.monitor.picker.utils.id_maker(pick_time, net, station, loc, ch, phasehint)[source]

Create SeisComP-style pick PublicID.

Parameters:
  • pick_time (UTCDateTime) – Pick time

  • net (str) – Network code

  • station (str) – Station code

  • loc (str) – Location code

  • ch (str) – Channel code

  • phasehint (str) – Phase hint (‘P’ or ‘S’)

Returns:

SeisComP pick PublicID

Return type:

str

SeisMonitor.monitor.picker.utils.make_dataframe(mseed, json_path, filter_net=None, filter_sta=None, filter_cha=None)[source]

Create DataFrame from MSEED files and JSON metadata.

Parameters:
  • mseed (str) – Directory containing MSEED files

  • json_path (str) – Path to JSON metadata file

  • filter_net (list, optional) – Networks to exclude

  • filter_sta (list, optional) – Stations to exclude

  • filter_cha (list, optional) – Channels to include

Returns:

DataFrame with waveform metadata

Return type:

pandas.DataFrame

SeisMonitor.monitor.picker.utils.make_phasenet_datalist(datadir, json_path, datalist_path, channel_list=None, filter_network=None, filter_station=None, **kwargs)[source]

Create PhaseNet datalist CSV file.

Parameters:
  • datadir (str) – Directory with MSEED files

  • json_path (str) – Path to JSON metadata

  • datalist_path (str) – Output path for datalist CSV

  • channel_list (list, optional) – Channels to include

  • filter_network (list, optional) – Networks to exclude

  • filter_station (list, optional) – Stations to exclude

  • kwargs – Additional keyword arguments

Returns:

Directory containing the datalist

Return type:

str

SeisMonitor.monitor.picker.utils.merge_picks(path, csv_filename, output_path, sort=None)[source]

Merge picks from multiple CSV files into one.

Parameters:
  • path (str) – Root directory containing station folders with picks

  • csv_filename (str) – Name of CSV file containing picks

  • output_path (str) – Path for output merged CSV

  • sort (str, optional) – Column name to sort by

SeisMonitor.monitor.picker.utils.mv_mseed2onefolder(mseed_folder, one_folder)[source]

Move MSEED files from subfolders to a single folder.

Parameters:
  • mseed_folder (str) – Source directory with MSEED files

  • one_folder (str) – Destination directory

SeisMonitor.monitor.picker.utils.mv_mseed2stationfolder(one_folder, mseed_folder)[source]

Move MSEED files to station-specific subfolders.

Parameters:
  • one_folder (str) – Source directory with MSEED files

  • mseed_folder (str) – Destination base directory

SeisMonitor.monitor.picker.utils.phasenet_from_console(pnet_obj, msg_author)[source]

Run PhaseNet from console with specified parameters.

Parameters:
  • pnet_obj – Object with PhaseNet configuration attributes

  • msg_author (str) – Author identifier for logging

SeisMonitor.monitor.picker.utils.pick_constructor(datalist, picks, prob, wf_name, ph_type, min_prob, one_single_sampling_rate=-1)[source]

Construct Pick objects from PhaseNet data.

Parameters:
  • datalist (str) – Path to datalist CSV

  • picks (list) – Pick sample points

  • prob (list) – Pick probabilities

  • wf_name (str) – Waveform name

  • ph_type (str) – Phase type (‘P’ or ‘S’)

  • min_prob (float) – Minimum probability threshold

  • one_single_sampling_rate (float) – Override sampling rate

Returns:

List of Pick objects

Return type:

list

Raises:

Exception – If datalist file is missing

SeisMonitor.monitor.picker.utils.picks2df(picks)[source]

Convert list of Pick objects to DataFrame.

Parameters:

picks (list) – List of Pick objects

Returns:

Converted DataFrame

Return type:

pandas.DataFrame

SeisMonitor.monitor.picker.utils.rm_phasenet_duplicate_picks(path, output_path)[source]

Remove duplicate picks from PhaseNet output.

Parameters:
  • path (str) – Path to input picks CSV

  • output_path (str) – Path for output cleaned CSV

Returns:

Cleaned picks DataFrame

Return type:

pandas.DataFrame

SeisMonitor.monitor.picker.utils.sample2time(sample, to, df, segment, dtt)[source]

Convert PhaseNet sample count to time.

Parameters:
  • sample (str) – Sample point of pick

  • to (datetime) – Waveform start time

  • df (float) – Sampling rate

  • segment (int) – Segment number

  • dtt (float) – Waveform duration in seconds

Returns:

(pick_time, creation_time, observation_type)

Return type:

tuple