Compute dv/v from dt/t(MWCS)

DVV Aggregate Step

Aggregates per-pair dv/v time series (from mwcs_dtt, stretching, or wavelet_dtt) into network-level statistics across all station pairs.

For each (mov_stack, component, pair_type) combination, the step reads all per-pair output files and, at each time step, computes across-pair:

  • mean and std (always)

  • weighted_mean and weighted_std (if |mwcs_dtt_dvv.dvv_weighted_mean| is Y; weights = 1/σ²)

  • trimmed_mean and trimmed_std (if |mwcs_dtt_dvv.dvv_trimmed_mean| is Y; sigma-clip at |mwcs_dtt_dvv.dvv_trim_limit|)

  • percentiles (if |mwcs_dtt_dvv.dvv_percentiles| is set)

Pairs are split by type (CC/SC/AC) when |mwcs_dtt_dvv.dvv_split_pair_type| is Y, and by component when |mwcs_dtt_dvv.dvv_split_components| is Y. Setting either to N aggregates all pairs/components into a single ALL file.

Only pairs with data quality above |mwcs_dtt_dvv.dvv_quality_min| contribute. If |mwcs_dtt_dvv.dvv_output_percent| is Y, output is in percent (×100).

To run this step:

$ msnoise cc dtt compute_mwcs_dtt_dvv      # for MWCS
$ msnoise cc dtt compute_stretching_dvv    # for Stretching
$ msnoise cc dtt compute_wavelet_dtt_dvv   # for WCT

Aggregates per-pair dv/v results (from mwcs_dtt, stretching, or wavelet_dtt) into network-level statistics across station pairs.

One worker handles all three DVV step categories; the category is passed as an argument to main(). Each category maps to a parent DTT step:

DVV step category

Parent category

mwcs_dtt_dvv

mwcs_dtt

stretching_dvv

stretching

wavelet_dtt_dvv

wavelet_dtt

Output files live at:

<root>/<lineage>/<dvv_step>/_output/<mov_stack>/dvv_<pair_type>_<comp>.nc

where pair_type is one of CC, SC, AC, ALL and comp is the component pair string (e.g. ZZ) or ALL.

Configuration Parameters

  • mwcs_dtt_dvv.dvv_split_pair_type : Split dv/v by pair type (CC/SC/AC) separately. CC=inter-station; SC=same station different location; AC=autocorrelation. (default=Y)

  • mwcs_dtt_dvv.dvv_split_components : Split dv/v by component pair (ZZ/RR/TT/etc) separately. (default=Y)

  • stretching_dvv.dvv_split_pair_type : Split dv/v by pair type (CC/SC/AC) separately. CC=inter-station; SC=same station different location; AC=autocorrelation. (default=Y)

  • stretching_dvv.dvv_split_components : Split dv/v by component pair (ZZ/RR/TT/etc) separately. (default=Y)

  • wavelet_dtt_dvv.dvv_split_pair_type : Split dv/v by pair type (CC/SC/AC) separately. CC=inter-station; SC=same station different location; AC=autocorrelation. (default=Y)

  • wavelet_dtt_dvv.dvv_split_components : Split dv/v by component pair (ZZ/RR/TT/etc) separately. (default=Y)

  • stack.mov_stack : A list of two parameters: the time to “roll” over (default 1 day) and the granularity (step) of the resulting stacked CCFs (default 1 day) to stack for the Moving-window stacks. This can be a list of tuples, e.g. ((‘1d’,’1d’),(‘2d’,’1d’)) corresponds to the MSNoise 1.6 “1,2” before. Time deltas can be anything pandas can interpret (“d”, “min”, “sec”, etc). (default=((‘1D’,’1D’)))

  • cc.components_to_compute : List (comma separated) of components to compute between two different stations (default=ZZ)

  • cc.components_to_compute_single_station : List (comma separated) of components within a single station. ZZ would be the autocorrelation of Z component, while ZE or ZN are the cross-components. Defaults to [], no single-station computations are done. (default=)

See also

Reading these results in Python — use MSNoiseResult:

from msnoise.results import MSNoiseResult
from msnoise.core.db import connect
db = connect()
r = MSNoiseResult.from_ids(db, ...)  # include the steps you need
# then call r.get_dvv(...)

See Reading outputs with MSNoiseResult for the full guide and all available methods.