From 251aa2319b52999635a7ae08f2fbf06cf858c98a Mon Sep 17 00:00:00 2001
From: miili
Date: Tue, 31 Oct 2023 14:57:42 +0100
Subject: [PATCH] Deployed a397482 with MkDocs version: 1.5.3
---
404.html | 24 +-
components/configuration/index.html | 336 +++++++-
components/feature_extraction/index.html | 26 +-
components/general/index.html | 900 ++++++++++++++++++++++
components/image_function/index.html | 50 +-
components/octree/index.html | 53 +-
components/ray_tracer/index.html | 72 +-
components/seismic_data/index.html | 68 +-
components/station_corrections/index.html | 74 +-
getting_started/index.html | 32 +-
images/fmm-concept.webp | Bin 0 -> 65114 bytes
images/octree-concept.webp | Bin 0 -> 40508 bytes
index.html | 24 +-
search/search_index.json | 2 +-
sitemap.xml.gz | Bin 127 -> 127 bytes
visualizing_results/index.html | 24 +-
16 files changed, 1535 insertions(+), 150 deletions(-)
create mode 100644 components/general/index.html
create mode 100644 images/fmm-concept.webp
create mode 100644 images/octree-concept.webp
diff --git a/404.html b/404.html
index 96c190ff..05334d43 100644
--- a/404.html
+++ b/404.html
@@ -374,7 +374,7 @@
- Getting Started
+ Getting Started 🚀
@@ -460,7 +460,7 @@
- Configuration
+ The Search
@@ -590,6 +590,26 @@
+
+
+
+
+
+
+
+
+
+
+ General Configuration
+
+
+
+
+
+
+
+
+
diff --git a/components/configuration/index.html b/components/configuration/index.html
index db846d26..74a176ec 100644
--- a/components/configuration/index.html
+++ b/components/configuration/index.html
@@ -24,7 +24,7 @@
- Configuration - Lassie - Earthquake Detector
+ The Search - Lassie - Earthquake Detector
@@ -133,7 +133,7 @@
@@ -385,7 +385,7 @@
- Getting Started
+ Getting Started 🚀
@@ -482,7 +482,7 @@
- Configuration
+ The Search
@@ -493,7 +493,7 @@
- Configuration
+ The Search
@@ -515,29 +515,36 @@
-
+
+
+
+ Structure
+
@@ -670,6 +677,26 @@
+
+
+
+
+
+
+
+
+
+
+ General Configuration
+
+
+
+
+
+
+
+
+
@@ -704,29 +731,36 @@
-
+
+
+
+ Structure
+
@@ -754,9 +788,205 @@
Lassie Configuration
-At center is a JSON configuration file which is parsed by Pydantic .
-Example Config
-See the following pages for more detailed information about the different building blocks of the config.
+At center is a JSON configuration file which is parsed by Pydantic . The following pages will detail how to setup this JSON file for the search.
+Also see the getting started guide for a brief introduction into the CLI.
+General configuration conventions are outlines in this guide as well.
+The Search
+The search configuration. This is the entrypoint for the EQ detection and localisation .
+More information on the submodules (e.g. Octree, Data Provider and other) can be found on subpages in the navigation.
+
+
Search Module
+Config Search JSON Block
+
+
+
+stations
+
+Station inventory from StationXML or Pyrocko Station YAML. Default is Stations
.
+
+data_provider
+
+Data provider for waveform data. Default is PyrockoSquirrel
.
+
+image_functions
+
+Image functions for waveform processing and phase on-set detection. Default is ImageFunctions
.
+
+ray_tracers
+
+List of ray tracers for travel time calculation. Default is RayTracers
.
+
+station_corrections
+
+Apply station corrections from a previous run. Default is None
.
+
+sampling_rate
+
+Sampling rate for the image function. Choose from 10, 20, 25, 50, 100 Hz. Default is 100
.
+
+detection_threshold
+
+Detection threshold for semblance. Default is 0.05
.
+
+node_split_threshold
+
+Threshold for splitting octree nodes, relative to the maximum detected semblance. Default is 0.9
.
+
+detection_blinding
+
+Blinding in seconds before and after the detection peak. Default is 0:00:02
.
+
+window_length
+
+Window length for processing. Default is 5 minutes. Default is 0:05:00
.
+
+n_threads_parstack
+
+Number of threads for stacking and migration. 0
uses all available cores. Default is 0
.
+
+n_threads_argmax
+
+Number of threads for argmax. Default is 4
. Default is 4
.
+
+
+
+
+
JSON block for Search {
+ "project_dir" : "." ,
+ "stations" : {
+ "pyrocko_station_yamls" : [],
+ "station_xmls" : [],
+ "blacklist" : [],
+ "stations" : []
+ },
+ "data_provider" : {
+ "provider" : "PyrockoSquirrel" ,
+ "environment" : "." ,
+ "waveform_dirs" : [],
+ "start_time" : null ,
+ "end_time" : null ,
+ "highpass" : null ,
+ "lowpass" : null ,
+ "channel_selector" : "*" ,
+ "async_prefetch_batches" : 4
+ },
+ "octree" : {
+ "location" : {
+ "lat" : 0.0 ,
+ "lon" : 0.0 ,
+ "east_shift" : 0.0 ,
+ "north_shift" : 0.0 ,
+ "elevation" : 0.0 ,
+ "depth" : 0.0
+ },
+ "size_initial" : 2000.0 ,
+ "size_limit" : 500.0 ,
+ "east_bounds" : [
+ -10000.0 ,
+ 10000.0
+ ],
+ "north_bounds" : [
+ -10000.0 ,
+ 10000.0
+ ],
+ "depth_bounds" : [
+ 0.0 ,
+ 20000.0
+ ],
+ "absorbing_boundary" : 1000.0
+ },
+ "image_functions" : [
+ {
+ "image" : "PhaseNet" ,
+ "model" : "ethz" ,
+ "window_overlap_samples" : 2000 ,
+ "torch_use_cuda" : false ,
+ "torch_cpu_threads" : 4 ,
+ "batch_size" : 64 ,
+ "stack_method" : "avg" ,
+ "upscale_input" : 1 ,
+ "phase_map" : {
+ "P" : "constant:P" ,
+ "S" : "constant:S"
+ },
+ "weights" : {
+ "P" : 1.0 ,
+ "S" : 1.0
+ }
+ }
+ ],
+ "ray_tracers" : [
+ {
+ "tracer" : "ConstantVelocityTracer" ,
+ "phase" : "constant:P" ,
+ "velocity" : 5000.0
+ },
+ {
+ "tracer" : "CakeTracer" ,
+ "phases" : {
+ "cake:P" : {
+ "definition" : "P,p"
+ },
+ "cake:S" : {
+ "definition" : "S,s"
+ }
+ },
+ "earthmodel" : {
+ "filename" : "/home/marius/.cache/lassie/velocity_models/default.nd" ,
+ "format" : "nd" ,
+ "crust2_profile" : "" ,
+ "raw_file_data" : "\n-1.00 5.50 3.59 2.7\n 0.00 5.50 3.59 2.7\n 1.00 5.50 3.59 2.7\n 1.00 6.00 3.92 2.7\n 4.00 6.00 3.92 2.7\n 4.00 6.20 4.05 2.7\n 8.00 6.20 4.05 2.7\n 8.00 6.30 4.12 2.7\n13.00 6.30 4.12 2.7\n13.00 6.40 4.18 2.7\n17.00 6.40 4.18 2.7\n17.00 6.50 4.25 2.7\n22.00 6.50 4.25 2.7\n22.00 6.60 4.31 2.7\n26.00 6.60 4.31 2.7\n26.00 6.80 4.44 2.7\n30.00 6.80 4.44 2.7\n30.00 8.10 5.29 2.7\n45.00 8.10 5.29 2.7\n"
+ },
+ "trim_earth_model_depth" : true ,
+ "lut_cache_size" : 2147483648
+ },
+ {
+ "tracer" : "FastMarchingRayTracer" ,
+ "phase" : "fm:P" ,
+ "interpolation_method" : "linear" ,
+ "nthreads" : 0 ,
+ "lut_cache_size" : 2147483648 ,
+ "velocity_model" : {
+ "model" : "Constant3DVelocityModel" ,
+ "grid_spacing" : "octree" ,
+ "velocity" : 5000.0
+ }
+ }
+ ],
+ "station_corrections" : null ,
+ "event_features" : [
+ {
+ "feature" : "GroundMotion" ,
+ "seconds_before" : 3.0 ,
+ "seconds_after" : 8.0
+ },
+ {
+ "feature" : "LocalMagnitude" ,
+ "seconds_before" : 5.0 ,
+ "seconds_after" : 15.0 ,
+ "estimator" : {
+ "name" : "iaspei-southern-california"
+ }
+ }
+ ],
+ "sampling_rate" : 100 ,
+ "detection_threshold" : 0.05 ,
+ "node_split_threshold" : 0.9 ,
+ "detection_blinding" : "PT2S" ,
+ "image_mean_p" : 1.0 ,
+ "window_length" : "PT300S" ,
+ "n_threads_parstack" : 0 ,
+ "n_threads_argmax" : 4 ,
+ "plot_octree_surface" : false ,
+ "created" : "2023-10-31T13:57:41.770870Z"
+}
+
+
+
+
+
+Minimal Config
+This is a minimal config which can used to start a Lassie search.
Minimal Lassie Config {
"project_dir" : "." ,
"stations" : {
@@ -822,11 +1052,47 @@ Example Config
"n_threads_argmax" : 4 ,
}
-Paths
-Paths can be relative to the location of the config file or absolute.
-Date and Time
-Serialisation of time, dates and date times and durations follow ISO8601 format with timezone information. E.g. 2023-10-28T01:21:21.003+00:00
.
-Duration are serialized like PD600S
, this example shows 600 seconds - 10 minutes.
+Structure
+Structure of the search and optimisation of the octree, which is focusing in on seismic energy.
+flowchart TD
+
+
+subgraph Data Input
+ waveforms(["Seismic Waveforms"])
+ image["
+ Phase Image Function
+ PhaseNet, EQTransformer, ...
+ "]
+end
+subgraph Migration
+ quadtree["Quadtree"]
+ travelTimes["
+ Seismic Travel Time Model
+ 1D Raytracer, ...
+ "]
+end
+subgraph Detection
+ search["Stacking Image Functions"]
+ detection["EQ Event Detection & Localisation"]
+end
+featureExtraction["
+ Feature Extraction
+ Local Magnitude, Ground Motion, ...
+"]
+stationCorrections["
+ Traveltime residuals from Image
+ → Station Corrections
+"]
+
+waveforms --> image
+image --> search
+quadtree --> travelTimes
+travelTimes -->search
+detection -- Refine Quadtree --> search
+search --> detection
+detection --> featureExtraction
+detection --> stationCorrections
+Building blocks of the specific stacking and migration method for earthquake detection, localisation and characterisation.
diff --git a/components/feature_extraction/index.html b/components/feature_extraction/index.html
index 8a85087e..7c592aa0 100644
--- a/components/feature_extraction/index.html
+++ b/components/feature_extraction/index.html
@@ -16,6 +16,8 @@
+
+
@@ -378,7 +380,7 @@
- Getting Started
+ Getting Started 🚀
@@ -466,7 +468,7 @@
- Configuration
+ The Search
@@ -604,6 +606,26 @@
+
+
+
+
+
+
+
+
+
+
+ General Configuration
+
+
+
+
+
+
+
+
+
diff --git a/components/general/index.html b/components/general/index.html
new file mode 100644
index 00000000..e260c067
--- /dev/null
+++ b/components/general/index.html
@@ -0,0 +1,900 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ General Configuration - Lassie - Earthquake Detector
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Lassie is in Beta 🧫
Please handle with care
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+General Settings
+Paths
+Paths can be relative to the location of the config file or absolute. File paths and directory paths are checked whether they exist .
+Date and Time
+Serialisation of time, dates and date times and durations follow ISO8601 format with timezone information. E.g. 2023-10-28T01:21:21.003+00:00
.
+Duration are serialized like PT600S
, this example shows 600 seconds - 10 minutes.
+Example of datetimes and durations {
+ "start_time" : "2023-10-28T01:21:21.003+00:00" ,
+ "end_time" : "2023-10-28T01:21:21.003+00:00" ,
+ "duration" : "PT600S"
+}
+
+Locations
+Geographic locations have a geographic reference and a relative shift in meters. The octree or velocity models are referenced using Location objects.
+All distances, depths and elevations are given in meters .
+
+
Location Module
+Config Location JSON Block
+
+
+
+lat
+
+Latitude in degrees. Default is PydanticUndefined
.
+
+lon
+
+Longitude in degrees. Default is PydanticUndefined
.
+
+east_shift
+
+East shift towards geographical reference in meters. Default is 0.0
.
+
+north_shift
+
+North shift towards geographical reference in meters. Default is 0.0
.
+
+elevation
+
+Elevation in meters. Default is 0.0
.
+
+depth
+
+Depth in meters, positive is down . Default is 0.0
.
+
+
+
+
+
JSON block for Location {
+ "lat" : 52.3825 ,
+ "lon" : 13.0644 ,
+ "east_shift" : 0.0 ,
+ "north_shift" : 0.0 ,
+ "elevation" : 0.0 ,
+ "depth" : 0.0
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/components/image_function/index.html b/components/image_function/index.html
index 3a429883..9009e54f 100644
--- a/components/image_function/index.html
+++ b/components/image_function/index.html
@@ -385,7 +385,7 @@
- Getting Started
+ Getting Started 🚀
@@ -473,7 +473,7 @@
- Configuration
+ The Search
@@ -583,7 +583,7 @@
@@ -705,7 +725,7 @@
-
+
PhaseNet Module
@@ -747,47 +767,47 @@ PhaseNet Image Function
Zhu, Weiqiang, and Gregory C. Beroza. "PhaseNet: A Deep-Neural-Network-Based Seismic Arrival Time Picking Method." arXiv preprint arXiv:1803.03211 (2018).
-
PhaseNet Module
+
PhaseNet Module
PhaseNet image function. For more details see SeisBench documentation.
-Config PhaseNet JSON Block
+
Config PhaseNet JSON Block
model
-SeisBench pre-trained PhaseNet model to use. Choose from ethz
, geofon
, instance
, iquique
, lendb
, neic
, obs
, original
, scedc
, stead
. For more details see SeisBench documentation
+SeisBench pre-trained PhaseNet model to use. Choose from ethz
, geofon
, instance
, iquique
, lendb
, neic
, obs
, original
, scedc
, stead
. For more details see SeisBench documentation Default is ethz
.
window_overlap_samples
-Window overlap in samples.
+Window overlap in samples. Default is 2000
.
torch_use_cuda
-Use CUDA for inference.
+Use CUDA for inference. Default is False
.
torch_cpu_threads
-Number of CPU threads to use if only CPU is used.
+Number of CPU threads to use if only CPU is used. Default is 4
.
batch_size
-Batch size for inference, larger values can improve performance.
+Batch size for inference, larger values can improve performance. Default is 64
.
stack_method
-Method to stack the overlaping blocks internally. Choose from avg
and max
.
+Method to stack the overlaping blocks internally. Choose from avg
and max
. Default is avg
.
upscale_input
-Upscale input by factor. This augments the input data from e.g. 100 Hz to 50 Hz (factor: 2
). Can be useful for high-frequency earthquake signals.
+Upscale input by factor. This augments the input data from e.g. 100 Hz to 50 Hz (factor: 2
). Can be useful for high-frequency earthquake signals. Default is 1
.
phase_map
-Phase mapping from SeisBench PhaseNet to Lassie phases.
+Phase mapping from SeisBench PhaseNet to Lassie phases. Default is {'P': 'constant:P', 'S': 'constant:S'}
.
weights
-Weights for each phase.
+Weights for each phase. Default is {'P': 1.0, 'S': 1.0}
.
diff --git a/components/octree/index.html b/components/octree/index.html
index 7a7757d6..1d7ca121 100644
--- a/components/octree/index.html
+++ b/components/octree/index.html
@@ -385,7 +385,7 @@
- Getting Started
+ Getting Started 🚀
@@ -473,7 +473,7 @@
- Configuration
+ The Search
@@ -595,7 +595,7 @@
@@ -684,7 +704,7 @@
-
+
Octree Module
@@ -713,42 +733,43 @@
-Octree
-
-A 3D space is searched for sources of seismic energy. Lassie created an octree structure which is iteratively refined when energy is detected, to focus on the source' location. This speeds up the search and improves the resolution of the localisations.
+
Octree
+A 3D space is searched for sources of seismic energy. Lassie created an octree structure which is iteratively refined when energy is detected, to focus on the source' location. This speeds up the search and improves the resolution of the localisations.
+
+Surface projection of the refined octree focusing on the seismic source region. In this example four levels of refinement are can be seen, refining the 3D octree from the initial 4000 nodes to 8823 nodes.
-
Octree Module
-Config Octree JSON Block
+
Octree Module
+
Config Octree JSON Block
location
-The reference location of the octree.
+The reference location of the octree. Default is Location
.
size_initial
-Initial size of a cubic octree node in meters.
+Initial size of a cubic octree node in meters. Default is 2000.0
.
size_limit
-Smallest possible size of an octree node in meters.
+Smallest possible size of an octree node in meters. Default is 500.0
.
east_bounds
-East bounds of the octree in meters.
+East bounds of the octree in meters. Default is (-10000.0, 10000.0)
.
north_bounds
-North bounds of the octree in meters.
+North bounds of the octree in meters. Default is (-10000.0, 10000.0)
.
depth_bounds
-Depth bounds of the octree in meters.
+Depth bounds of the octree in meters. Default is (0.0, 20000.0)
.
absorbing_boundary
-Absorbing boundary in meters. Detections inside the boundary will be tagged.
+Absorbing boundary in meters. Detections inside the boundary will be tagged. Default is 1000.0
.
diff --git a/components/ray_tracer/index.html b/components/ray_tracer/index.html
index 1be55781..ffab53e9 100644
--- a/components/ray_tracer/index.html
+++ b/components/ray_tracer/index.html
@@ -385,7 +385,7 @@
- Getting Started
+ Getting Started 🚀
@@ -473,7 +473,7 @@
- Configuration
+ The Search
@@ -563,7 +563,7 @@
This module is used for simple use cases and cross-referencing testing.
-
ConstantVelocityTracer Module
-
Config ConstantVelocityTracer JSON Block
+
ConstantVelocityTracer Module
+
Config ConstantVelocityTracer JSON Block
phase
-Name of the phase.
+Name of the phase. Default is constant:P
.
velocity
-Constant velocity of the phase in m/s.
+Constant velocity of the phase in m/s. Default is 5000.0
.
@@ -878,26 +898,26 @@
1D Layered Model
Pyrocko Cake 1D ray tracer for travel time calculation in 1D layered media
-
CakeTracer Module
-
Config CakeTracer JSON Block
+
CakeTracer Module
+
Config CakeTracer JSON Block
phases
-Dictionary of phases and timings to calculate.
+Dictionary of phases and timings to calculate. Default is {'cake:P': Timing(definition='P,p'), 'cake:S': Timing(definition='S,s')}
.
earthmodel
-Earth model to calculate travel times for.
+Earth model to calculate travel times for. Default is PydanticUndefined
.
trim_earth_model_depth
-Trim earth model to max depth of the octree.
+Trim earth model to max depth of the octree. Default is True
.
lut_cache_size
-Size of the LUT cache. Default is 2G
.
+Size of the LUT cache. Default is 2G
. Default is 2147483648
.
@@ -931,28 +951,30 @@
3D Fast Marching
Import NonLinLoc 3D velocity model
1D layered model 🥞
Constant velocity, mainly for testing purposes 🥼
-
-
FastMarchingTracer Module
-
Config FastMarchingTracer JSON Block
+
+Conceptual 2D visualisation for seismic traveltimes calculation in heterogenous media using the fast-marching method for the Eikonal solution is presented. Traveltimes from the receiving station at the surface (indicated by a yellow triangle) towards the subsurface grid are calculated, resulting in station-specifig traveltimes for all potential source locations simultaneously.
+
+
FastMarchingTracer Module
+
Config FastMarchingTracer JSON Block
interpolation_method
-Interpolation method for travel times.Choose from nearest
, linear
or cubic
.
+Interpolation method for travel times.Choose from nearest
, linear
or cubic
. Default is linear
.
nthreads
-Number of threads to use for travel time. If set to 0
, cpu_count*2
will be used.
+Number of threads to use for travel time. If set to 0
, cpu_count*2
will be used. Default is 0
.
lut_cache_size
-Size of the LUT cache. Default is 2G
.
+Size of the LUT cache. Default is 2G
. Default is 2147483648
.
velocity_model
-Velocity model for the ray tracer.
+Velocity model for the ray tracer. Default is Constant3DVelocityModel
.
diff --git a/components/seismic_data/index.html b/components/seismic_data/index.html
index 144ce8ca..5800430e 100644
--- a/components/seismic_data/index.html
+++ b/components/seismic_data/index.html
@@ -385,7 +385,7 @@
- Getting Started
+ Getting Started 🚀
@@ -473,7 +473,7 @@
- Configuration
+ The Search
@@ -543,7 +543,7 @@
-
+
PyrockoSquirrel Module
@@ -563,7 +563,7 @@
@@ -725,7 +745,7 @@
-
+
PyrockoSquirrel Module
@@ -745,7 +765,7 @@
-
+
Stations Module
@@ -781,42 +801,42 @@
Seismic Data
-The seismic can be delivered in MiniSeed or any other format compatible with Pyrocko.
-Organize your data in an SDS structure or just a single MiniSeed file.
+
The seismic can be delivered in MiniSeed or any other format compatible with Pyrocko. Lassie utilizes the Pyrocko Squirrel for fast and asynchronous data access.
+To prepare your data for EQ detection and localisation, organize it in a MiniSeed file or an SDS structure .
-
PyrockoSquirrel Module
+
PyrockoSquirrel Module
Waveform provider using Pyrocko's Squirrel.
-Config PyrockoSquirrel JSON Block
+
Config PyrockoSquirrel JSON Block
environment
-Path to a Squirrel environment.
+Path to a Squirrel environment. Default is .
.
waveform_dirs
-List of directories holding the waveform files.
+List of directories holding the waveform files. Default is []
.
start_time
-Start time for the search in ISO8601 .
+Start time for the search in ISO8601 . Default is None
.
end_time
-End time for the search in ISO8601 .
+End time for the search in ISO8601 . Default is None
.
highpass
-Highpass filter, corner frequency in Hz.
+Highpass filter, corner frequency in Hz. Default is None
.
lowpass
-Lowpass filter, corner frequency in Hz.
+Lowpass filter, corner frequency in Hz. Default is None
.
channel_selector
-Channel selector for waveforms, use e.g. EN?
for selection of all accelerometer data.
+Channel selector for waveforms, use e.g. EN?
for selection of all accelerometer data. Default is *
.
@@ -838,30 +858,30 @@
-
Meta data is required primarily for station locations and codes.
+
Meta data is required primarily for station locations and codes .
Supported data formats are:
-
Metadata does not need to include response information for pure detection and localisation. If local magnitudes \(M_L\) are extracted response information is required.
+
Metadata does not need to include response information for pure detection and localisation. If local magnitudes ML are extracted, response information is required.
-
Stations Module
-
Config Stations JSON Block
+
Stations Module
+
Config Stations JSON Block
pyrocko_station_yamls
-List of Pyrocko station YAML files.
+List of Pyrocko station YAML files. Default is []
.
station_xmls
-List of StationXML files.
+List of StationXML files. Default is []
.
blacklist
-Blacklist stations and exclude from detecion. Format is ['NET.STA.LOC', ...]
+Blacklist stations and exclude from detecion. Format is ['NET.STA.LOC', ...]
. Default is set()
.
diff --git a/components/station_corrections/index.html b/components/station_corrections/index.html
index ced2264d..6410cf1d 100644
--- a/components/station_corrections/index.html
+++ b/components/station_corrections/index.html
@@ -385,7 +385,7 @@
- Getting Started
+ Getting Started 🚀
@@ -473,7 +473,7 @@
- Configuration
+ The Search
@@ -615,8 +615,8 @@
@@ -684,8 +704,8 @@
-
- Stations Module
+
+ StationCorrections Module
@@ -717,32 +737,46 @@ Station Corrections
Station corrections can be extract from previous runs to refine the localisation accuracy. The corrections can also help to improve the semblance find more events in a dataset.
-
Stations Module
-Config Stations JSON Block
+
StationCorrections Module
+
Config StationCorrections JSON Block
-pyrocko_station_yamls
+rundir
+
+Lassie rundir to calculate the corrections from. Default is None
.
+
+measure
+
+Arithmetic measure for the traveltime delays. Choose from median
and average
. Default is median
.
+
+weighting
+
+Weighting of the traveltime delays. Choose from none
, PhaseNet
, semblance
, add-PhaseNet-semblance
and mul-PhaseNet-semblance
. Default is mul-PhaseNet-semblance
.
+
+minimum_num_picks
-List of Pyrocko station YAML files.
+Minimum number of picks at a station required to calculate station corrections. Default is 5
.
-station_xmls
+minimum_distance_border
-List of StationXML files.
+Minimum distance to the octree border to be considered for correction. Default is 2000.0
.
-blacklist
+minimum_depth
-Blacklist stations and exclude from detecion. Format is ['NET.STA.LOC', ...]
+Minimum depth of the detection to be considered for correction. Default is 3000.0
.
-
JSON block for Stations {
- "pyrocko_station_yamls" : [],
- "station_xmls" : [],
- "blacklist" : [],
- "stations" : []
-}
+JSON block for StationCorrections {
+ "rundir" : null ,
+ "measure" : "median" ,
+ "weighting" : "mul-PhaseNet-semblance" ,
+ "minimum_num_picks" : 5 ,
+ "minimum_distance_border" : 2000.0 ,
+ "minimum_depth" : 3000.0
+}
diff --git a/getting_started/index.html b/getting_started/index.html
index 0786b0e7..15aa7f7d 100644
--- a/getting_started/index.html
+++ b/getting_started/index.html
@@ -24,7 +24,7 @@
-
Getting Started - Lassie - Earthquake Detector
+
Getting Started 🚀 - Lassie - Earthquake Detector
@@ -133,7 +133,7 @@
@@ -396,7 +396,7 @@
- Getting Started
+ Getting Started 🚀
@@ -407,7 +407,7 @@
- Getting Started
+ Getting Started 🚀
@@ -541,7 +541,7 @@
- Configuration
+ The Search
@@ -671,6 +671,26 @@
+
+
+
+
+
+
+
+
+
+
+ General Configuration
+
+
+
+
+
+
+
+
+
@@ -762,7 +782,7 @@
Installation
Running Lassie
The main entry point in the executeable is the lassie
command. The provided command line interface (CLI) and a JSON config file is all what is needed to run the program.
-
lassie -h
+
usage: lassie [-h] [--verbose] [--version]
{init,search,continue,feature-extraction,corrections,serve,clear-cache,dump-schemas}
diff --git a/images/fmm-concept.webp b/images/fmm-concept.webp
new file mode 100644
index 0000000000000000000000000000000000000000..b34b396b7250e01b1036578e54c5e9f4679b05ed
GIT binary patch
literal 65114
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