Targets¶
Targets is what Grond tries to match: The misfit between an observed target and forward model is minimized. Targets are derived from observables or synthesised data. A target can be, a filtered waveform, a spectrum, InSAR or GNSS displacement. Each target has properties which can be tuned. These can be frequency filters, selected observed components and essentially a Green’s functions store which is responsible for the synthetics at a particular target.
Different TargetGroups
can be combined to solve the inverse problem, leading to a joint optimisation from different data sources and observables.
Note
Weighting between different targets is described in the Method section.
General Target
configuration¶
Parameters valid for all types of MisfitTargets
are:
normalisation_family
¶Normalisation family (see the Grond documentation for how it works). Use distinct normalisation families when mixing misfit contributors with different magnitude scaling, like e.g. cross-correlation based misfit and time-domain \(L^p\) norm.
weight
¶How to weight contributions from this group in the global misfit.
path
¶Just a name used to identify targets from this group. Use dot-separated path notation to group related contributors.
interpolation
¶Green’s function store interpolation, choose from:
multilinear
Performs a linear interpolation between discrete Green’s function for improved resolution of synthetic data. This option is computationally more expensive.
nearest_neighbor
Uses the Green’s function calculation for the forward model.
Choices other than ‘nearest_neighbor’ may require dense GF stores to avoid aliasing artefacts in the forward modelling.
store_id
¶Name of the GF Store to use.
store_id_selector
¶GF Store selectors can be used to select different stores, based on station location, source location or other characteristics. The Crust2StoreIDSelector can be used to pick CRUST 2.0 models based on the event location. A manual station to store ID mapping can be achieved using the StationDictStoreIDSelector with keys NET.STAT.
Waveform targets¶
See the dataset configuration for loading waveforms and response information.
WaveformTarget
configuration¶- !grond.WaveformTargetGroup
normalisation_family: time_domain
path: all
weight: 1.0
distance_min: 10000.0
distance_max: 1000000.0
channels: [Z, R, T]
misfit_config: !grond.WaveformMisfitConfig
fmin: 0.01
fmax: 0.1
ffactor: 1.5
tmin: vel_surface:5.5
tmax: vel_surface:3.0
domain: time_domain
norm_exponent: 2
tautoshift_max: 0.0
autoshift_penalty_max: 0.0
interpolation: multilinear
store_id: crust2_ib
# store_id_selector: !grond.Crust2StoreIDSelector
# template: crust2_${id}
- Tapering¶
tmin
andtmax
define time-windows around phase arrivals of interest, those are cut out and tapered.\({\bf d}_{raw, synth}\) and the restituted observed waveforms. Only these parts are used in the misfit calculation. The taper window duration is configured for each seismic station individually by phase arrivals.
The tapering is source-model dependent, since the tapering time is given with respect to the theoretic phase arrival time. This arrival time depends on the source location, which is often part of the optimisation itself and therefore may change continuously with each iteration. Therefore, restitution, tapering and filtering are done for each misfit calculation anew. Grond uses the Pyrocko CosTaper taper. The
fade_out
time can be configured or it is calculated as the inverse of the minimum frequency of the chosen bandpass filter.Optionally, picked phase arrivals can be used to align time windows with synthetics. Note that this forced alignment reduces the ability to resolve the centroid location and centroid time. This option should be used carefully and only if necessary. To use picked phase arrivals, add
pick_synthetic_traveltime: '{stored:SynPhaseName}'
andpick_phasename: 'ObsPhaseName'
in the!grond.WaveformMisfitConfig
withSynPhaseName
andObsPhaseName
being the phase names in the Green’s function store and the pick file(s), respectively. Define in the!grond.WaveformTargetGroup
configuration if targets for which no phase arrival time pick are available should be excluded with (only_use_stations_with_picks: True
) or used without picks (only_use_stations_with_picks: False
).- Frequency filtering¶
fmin
andfmax
in Hz define the desired bandpass filter.norm_exponent
¶The Lp normalisation for calculating the waveform misfit.
domain
¶Can be selection from
time_domain
Misfit calculated in time domain, here it is useful to configure the
tautoshift_max
andautoshift_penalty_max
to allow for small time shifts of the synthetic data.
frequency_domain
Waveform misfit is calculated in the frequency domain.
log_frequency_domain
Waveform misfit is calculated in the logarithmic frequency domain.
envelope
Waveform envelops are compared.
absolute
The absolute amplitudes are used to calculate the misfit
cc_max_norm
Misfit is calculated from cross-correlation of the traces.
tautoshift_max
¶defines the maximum allowed time uin seconds the observed and synthetic trace may be shifted during the inversion.
autoshift_penalty_max
¶is the misfit penalty for autoshifting seismic traces.
Satellite targets¶
SatelliteTarget
configuration¶- !grond.SatelliteTargetGroup
normalisation_family: insar_target
path: all
weight: 1.0
kite_scenes: ['*all']
misfit_config: !grond.SatelliteMisfitConfig
optimise_orbital_ramp: true
ranges:
offset: -0.5 .. 0.5
ramp_east: -1e-4 .. 1e-4
ramp_north: -1e-4 .. 1e-4
interpolation: multilinear
store_id: crust2_ib_static
Observations of spatial surface displacements as derived from unwrapped InSAR data. These data must be hold in a special container format and prepared using the kite software package.
Prior to optimisation we have to parametrise a quadtree of the surface displacements (spatial sub-sampling) and pre-calculate the data’s covariance matrix with kite’s spool
tool:
spool events/<event_name>/data/insar/scene_ascending.yml
Please see kite’s documentation for insights into the pre-processing methods.
kite_scenes
¶The InSAR scenes are identified by their kite
scene_id
. Scenes can be explicitly selected, or the wildcard*all
can be used.optimise_orbital_ramp
:¶Optimisation for a 2D offset plane in each InSAR scene. This will compensate tradeoffs between the earthquake signal and uncorrected trends in the unwrapped surface displacements. The slopes of
ramp_north
andramp_east
are given in \(\frac{m}{m}\), the offset in \(m\) - these parameters have to be tuned with touch.
Example SatelliteTargetGroup
configuration section:
GNSS campaign targets¶
GNSSTarget
configuration¶- !grond.GNSSCampaignTargetGroup
normalisation_family: gnss_target
path: all
weight: 1.0
gnss_campaigns: ['*all']
misfit_config: !grond.GNSSCampaignMisfitConfig {}
interpolation: multilinear
store_id: crust2_ib_static
True 3D surface displacement as measured by GNSS stations can be included in the inversion process by defining a GNSSCampaignTargetGroup
. The station’s displacement data has to be stored according to gnss_campaign
. Please refer to Pyrocko’s documentation of the GNSS model (See example)
gnss_campaigns
¶The campaigns are identified by their
campaign_name
. Campaigns can be explicitly selected, or the wildcard*all
can be used.
Example GNSSCampaignTargetGroup
configuration section:
Phase pick targets (polarities)¶
PhasePickTargetGroup
configuration¶- !grond.PhasePickTargetGroup
normalisation_family: 'picks'
path: 'pick.p'
weight: 0.5
store_id: 'crust2_pb'
pick_synthetic_traveltime: '{stored:any_P}'
pick_phasename: 'P'
weight_traveltime: 1.0
weight_polarity: 1.0
Phase picks with polarities can be included in the inversion process by defining a PhasePickTargetGroup
. pick_synthetic_traveltime
defines the phase name in the configuration of the GF store, pick_phasename
the phase name in the pick file(s). Pick file(s) need to be provided within the dataset_config
in the picks_paths
list.
weight_traveltime
and weight_polarity
define the contribution of the travel time misfit and respectively the polarity misfit to the combined misfit function. Setting weight_traveltime: 0.0
will only consider the polarity, so that a location cannot be inverted based on this target group alone. Respectively, setting weight_polarity: 0.0
will not help resolving the focal mechanism, but can be used to constrain the hypocenter location.
Before the PhasePickTargetGroup
can be used, a ray attribute table needs to be generated for the GF store:
cd gf_stores # go into the directory that contains the used GF store
fomosto sat store_id # replace store_id with the name of your GF store