Workflow

_images/Figure01_workflow_summary_cmyk.png

This section only presents the “installation” and configuration of MSNoise (read “the first startup of MSNoise”), not the installation of the required software, which is described in Installation.

Installer (initialize Project)

This console scripts is responsible asking questions about the database connection, to create the db.ini file in order to store the answers and to create the tables in the database.

Questions are:

  • What database technology do you want to use?
    • sqlite: this will create a file in the current folder and use it as DB
    • mysql: this will connect to a local or remote mysql server, additional information is then required:
      • hostname: of the mysql server, defaults to 127.0.0.1
      • database: must already exist on hostname
      • username: as registered in the privileged users of the mysql server
      • password: his password

To run this script:

msnoise install --help

Usage:  [OPTIONS]

  This command launches the installer.

Options:
  --help  Show this message and exit.

Warning

The credentials will be saved in a flat text file in the current directory. It’s not very safe, but until now we haven’t thought of another solution.

MSNoise Admin (Web Interface)

MSNoise Admin is a web interface that helps the user define the configuration for all the processing steps, it also allows configuring the stations and filters to be used in the processes. It gives a view on the database tables.

Although the interface is still in development for extra features, it already fully replaces the former “Configurator”.

To start the admin:

$ msnoise admin

Which, by default, starts a web server listening on all interfaces on port 5000. This can be overriden by passing parameters to the command, e.g. for port 5099:

$ msnoise admin -p 5099

Next step is to open a web browser and open the ip address of the machine, by default on the current machine, it’ll be http://localhost:5000/ or http://127.0.0.1:5000/.

_images/msnoise_admin_home1.png

The top level menu shows four items:

Home

The index page shows

  • The project location and its database
  • Stats of the Data Availability, the CC jobs and the DTT jobs

Configuration

Station

Stations appear as a table and are editable.

Stations are defined as:

class msnoise.msnoise_admin.Station(net, sta, X, Y, altitude, coordinates, instrument, used)

Station Object

Parameters:
  • ref (int) – The Station ID in the database
  • net (str) – The network code of the Station
  • sta (str) – The station code
  • X (float) – The X coordinate of the station
  • Y (float) – The Y coordinate of the station
  • altitude (float) – The altitude of the station
  • coordinates (str) – The coordinates system. “DEG” is WGS84 latitude/ longitude in degrees. “UTM” is expressed in meters.
  • instrument (str) – The instrument code, useful with PAZ correction
  • used (bool) – Whether this station must be used in the computations.

Filter

Filters appear as a table and are editable. The filter parameters are validated before submission, so no errors should happen. Note: by default, the used parameter is set to False, don’t forget to change it!

Filters are defined as:

class msnoise.msnoise_admin.Filter(**kwargs)

Filter base class.

Parameters:
  • ref (int) – The id of the Filter in the database
  • low (float) – The lower frequency bound of the Whiten function (in Hz)
  • high (float) – The upper frequency bound of the Whiten function (in Hz)
  • mwcs_low (float) – The lower frequency bound of the linear regression done in MWCS (in Hz)
  • mwcs_high (float) – The upper frequency bound of the linear regression done in MWCS (in Hz)
  • rms_threshold (float) – Not used anymore
  • mwcs_wlen (float) – Window length (in seconds) to perform MWCS
  • mwcs_step (float) – Step (in seconds) of the windowing procedure in MWCS
  • used (bool) – Is the filter activated for the processing

Config

All configuration bits appear as a table and are editable. When editing one configuration item, the edition pages shows extra information about the parameter, where it is used and its default value. Most of the configuration bits are case-sensitive!

Example view:

_images/msnoise_admin_config.png

The table below repeats this

Parameter Name Description Default Value
data_folder Data Folder  
output_folder CC Output Folder CROSS_CORRELATIONS
data_structure Data Structure [SDS]/BUD/IDDS SDS
network Network to analyse [*]
channels Channels need to match the value (ex: [*], *Z, BH*, HHZ,...)
startdate Start Date to process: [1970-01-01]=’since beginning of the archive’ 1970-01-01
enddate End Date to process: [2100-01-01]=’No end’ 2018-01-01
analysis_duration Duration of the Analysis (total in seconds : 3600, [86400]) 86400
cc_sampling_rate Sampling Rate for the CrossCorrelation [20.0] 20.0
resampling_method Resampling method [Resample]/Decimate Resample
decimation_factor If Resampling method=Decimate, decimation factor [5] 5
preprocess_lowpass Preprocessing Low-pass value in Hz [8.0] 8.0
preprocess_highpass Preprocessing High-pass value in Hz [0.01] 0.01
remove_response Remove instrument response Y/[N] N
response_format Remove instrument file format [dataless]/inventory/paz/resp dataless
response_path Instrument correction file(s) location (path relative to db.ini), defaults to ‘./inventory’, i.e. a subfolder in the current project folder.<br>All files in that folder will be parsed. inventory
response_prefilt Remove instrument correction pre-filter (0.005, 0.006, 30.0, 35.0) (0.005, 0.006, 30.0, 35.0)
maxlag Maximum lag (in seconds) [120.0]
corr_duration Data windows to correlate (in seconds) [1800.]
overlap Amount of overlap between data windows [0:1[ [0.] 0.0
windsorizing Windsorizing at N time RMS , 0 disables windsorizing, -1 enables 1-bit normalization [3] 3
stack_method Stack Method: Linear Mean or Phase Weighted Stack: [linear]/pws linear
pws_timegate If stack_method=’pws’, width of the smoothing in seconds : 10.0 10.0
pws_power If stack_method=’pws’, Power of the Weighting: 2.0 2.0
crondays Number of days to monitors with cron [-1] -1
ZZ Compute ZZ correlation [Y]/N Y
ZR Compute ZR correlation [Y]/N N
ZT Compute ZT correlation [Y]/N N
RZ Compute RZ correlation [Y]/N N
RR Compute RR correlation [Y]/N N
RT Compute RT correlation [Y]/N N
TZ Compute TZ correlation [Y]/N N
TR Compute TR correlation [Y]/N N
TT Compute TT correlation [Y]/N N
autocorr Compute Auto correlation [Y]/N N
keep_all Keep all 30 seconds cross-corr [Y]/N N
keep_days Keep all daily cross-corr [Y]/N Y
ref_begin Beginning or REF stacks. Can be absolute (2012-01-01) or relative (-100) days 1970-01-01
ref_end End or REF stacks. Same as ref_begin 2018-01-01
mov_stack Number of days to stack for the Moving-window stacks ([5]= [day-4:day]), can be a comma-separated list 1,2,5,10 5
export_format Export stacks in which format(s) ? SAC/MSEED/[BOTH] MSEED
sac_format Format for SAC stacks ? [doublets]/clarke doublets
dtt_lag How is the lag window defined [dynamic]/static static
dtt_v If dtt_lag=dynamic: what velocity to use to avoid ballistic waves [1.0]km/s 1.0
dtt_minlag If dtt_lag=static: min lag time 5.0
dtt_width Width of the time lag window [30]s 30.0
dtt_sides Which sides to use [both]/left/right both
dtt_mincoh Minimum coherence on dt measurement, MWCS points with values lower than that will not be used in the WLS 0.65
dtt_maxerr Maximum error on dt measurement, MWCS points with values larger than that will not be used in the WLS 0.1
dtt_maxdt Maximum dt values, MWCS points with values larger than that will not be used in the WLS 0.1
plugins Comma separated list of plugin names. Plugins names should be importable Python modules.  

Database

Data Availability

Gives a view of the data_availability table. Allows to bulk edit/select rows. Its main goal is to check that the scan_archive procedure has successfully managed to list all files from one’s archive.

Jobs

Gives a view of the jobs table. Allows to bulk edit/select rows. Its main goal is to check the new_jobs or any other workflow step (or Plugins) successfully inserted/updated jobs.

Help

About

Shows some links and information about the package. Mostly the information present on the github readme file.

Bug Report

Web view of the msnoise bugreport -m, allows viewing if all required python modules are properly installed and available for MSNoise.

Populate Station Table

This script is responsible for rapidly scanning the data archive and identifying the Networks/Stations and insert them in the stations table in the database.

The data_folder (as defined in the config) is scanned expecting the data_structure and possible values are defined in data_structures.py:

data_structure['SDS'] = "YEAR/NET/STA/CHAN.TYPE/NET.STA.LOC.CHAN.TYPE.YEAR.DAY"
data_structure['BUD'] = "NET/STA/STA.NET.LOC.CHAN.YEAR.DAY"
data_structure['IDDS'] = "YEAR/NET/STA/CHAN.TYPE/DAY/NET.STA.LOC.CHAN.TYPE.YEAR.DAY.HOUR"
data_structure['PDF'] = "YEAR/STA/CHAN.TYPE/NET.STA.LOC.CHAN.TYPE.YEAR.DAY"

For other structures, one has to edit the data_structures.py file and define the reader in this script.

By default, station coordinates are initialized at 0.

To run this script:

$ msnoise populate

Custom data structure & station table population

If one’s data structure is not one of the pre-defined, MSNoise expects to find a file named custom.py in the current folder. This python file will contain the data_structure (here data_structure = “TOM” in the configuration and a function called populate wich will accept one argument and return a list of stations in the format NET_STA:

data_structure['TOM'] = "YEAR/NET/STA/CHAN/YEAR.DAY"

def populate(data_folder):
    datalist = sorted(glob.glob(os.path.join(data_folder, "*", "*")))
    stations = []
    for di in datalist
        tmp = os.path.split(di)
        sta = tmp[1]
        net = os.path.split(tmp[0])[1]
        stations.append("%s_%s" % (net, sta))
    return stations

Scan Archive

One advantage of MSNoise is its ability to be used as an automated monitoring tool. To run every night on the data acquired during the previous day, MSNoise needs to check the data archive for new or modified files. Those files could have been acquired during the last day, but be data of a previously offline station and contain useful information for, say, a month ago. The time to search for is defined in the config. The scan_archive script uses the find command (gnufind on Windows) with the -mtime argument to locate new or modified files. Once located, they are inserted (if new) or updated (if modified) in the data availability table.

To run the code on two Process, execute the following in console:

$ msnoise -t 2 scan_archive

Special case: first run

This script is the same as for the routine, but one has to pass the init argument:

$ msnoise -t 2 scan_archive --init

This will scan the data_archive folder the configured stations and will insert all files found in the data_availability table in the database. As usual, calling the script with a –help argument will show its usage.

New Jobs

This script searches the database for files flagged “N”ew or “M”odified. For each date in the configured range, it checks if other stations are available and defines the new jobs to be processed. Those are inserted in the jobs table of the database.

To run it from the console:

$ msnoise new_jobs

Warning

Upon first run, if you expect the number of jobs to be large (many days, many stations), pass the --init parameter to optimize the insert. Only use this flag once, otherwise problems will arise from duplicate entries in the jobs table.

Compute Cross-Correlations

This code is responsible for the computation of the cross-correlation functions.

This script will group jobs marked “T”odo in the database by day and process them using the following scheme. As soon as one day is selected, the corresponding jobs are marked “I”n Progress in the database. This allows running several instances of this script in parallel.

Configuration Parameters

  • cc_sampling_rate: Sampling Rate for the CrossCorrelation [20.0] (default=20.0)
  • analysis_duration: Duration of the Analysis (total in seconds : 3600, [86400]) (default=86400)
  • overlap: Amount of overlap between data windows [0:1[ [0.] (default=0.0)
  • maxlag: Maximum lag (in seconds) [120.0] (default=120.)
  • corr_duration: Data windows to correlate (in seconds) [1800.] (default=1800.)
  • windsorizing: Windsorizing at N time RMS , 0 disables windsorizing, -1 enables 1-bit normalization [3] (default=3)
  • resampling_method: Resampling method [Resample]/Decimate (default=Resample)
  • decimation_factor: If Resampling method=Decimate, decimation factor [5] (default=5)
  • remove_response: Remove instrument response Y/[N] (default=N)
  • response_format: Remove instrument file format [dataless]/inventory/paz/resp (default=dataless)
  • response_path: Instrument correction file(s) location (path relative to db.ini), defaults to ‘./inventory’, i.e. a subfolder in the current project folder.<br>All files in that folder will be parsed. (default=inventory)
  • response_prefilt: Remove instrument correction pre-filter (0.005, 0.006, 30.0, 35.0) (default=(0.005, 0.006, 30.0, 35.0))
  • preprocess_lowpass: Preprocessing Low-pass value in Hz [8.0] (default=8.0)
  • preprocess_highpass: Preprocessing High-pass value in Hz [0.01] (default=0.01)
  • keep_all: Keep all 30 seconds cross-corr [Y]/N (default=N)
  • keep_days: Keep all daily cross-corr [Y]/N (default=Y)
  • stack_method: Stack Method: Linear Mean or Phase Weighted Stack: [linear]/pws (default=linear) | new in 1.4
  • pws_timegate: If stack_method=’pws’, width of the smoothing in seconds : 10.0 (default=10.0) | new in 1.4
  • pws_power: If stack_method=’pws’, Power of the Weighting: 2.0 (default=2.0) | new in 1.4

Waveform Pre-processing

Pairs are first split and a station list is created. The database is then queried to get file paths. For each station, all files potentially containing data for the day are opened. The traces are then merged and splitted, to obtain the most continuous chunks possible. The different chunks are then demeaned, tapered and merged again to a 1-day long trace. If a chunk is not aligned on the sampling grid (that is, start at a integer times the sample spacing in s) , the chunk is phase-shifted in the frequency domain. This requires tapering and fft/ifft. If the gap between two chunks is small, compared to a currently hard-coded value (10 samples), the gap is filled with interpolated values. Larger gaps will not be filled with interpolated values and remaining chunks will be tapered and then merged with 0 values in the gaps.

If shorter than 1-day, the trace final is padded with zeros. If longer, it is cut to match the start/end of the day.

If configured, each 1-day long trace is corrected for its instrument response. Currently, only dataless seed and inventory XML are supported.

Note

Removing the instrument response is a computationally very expensive task and not useful for dv/v iff your instruments didn’t change during the analysed period. It is also not needed for tomography iff all instruments are the same, or at least have an identical phase response in the frequency band of interest.

Each 1-day long trace is then low-passed (at preprocess_lowpass Hz), high-passed (at preprocess_highpass Hz), then if needed, decimated/downsampled. Decimation/Downsampling are configurable (resampling_method) and users are advised testing both. One advantage of Downsampling over Decimation is that it is able to downsample the data by any factor, not only integer factors.

Note

Python 3 users will most probably struggle installing scikits.samplerate, and therefore will have to use Decimate instead of Resample.

Processing

Once all traces are preprocessed, station pairs are processed sequentially. If a component different from ZZ is to be computed, the traces are first rotated. This supposes the user has provided the station coordinates in the station table. The rotation is computed for Radial and Transverse components:

R = N * np.cos(Az * np.pi / 180.) + E * np.sin(Az * np.pi / 180.)
T = N * np.sin(Az * np.pi / 180.) - E * np.cos(Az * np.pi / 180.)

Then, for each corr_duration window in the signal, and for each filter configured in the database, the traces are clipped to windsorizing times the RMS (or 1-bit converted) and then whitened (see Whitening) between the frequency bounds. When both traces are ready, the cross-correlation function is computed (see Correlation). The function returned contains data for time lags corresponding to maxlag in the acausal (negative lags) and causal (positive lags) parts.

Stacking and Saving Results

If configured (setting keep_all to ‘Y’), each corr_duration CCF is saved to the hard disk. By default, the keep_days setting is set to True and so “N = 1 day / corr_duration” CCF are stacked and saved to the hard disk in the STACKS/001_DAYS folder.

Note

Currently, the keep-all data (every CCF) are not used by next steps.

If stack_method is ‘linear’, then a simple mean CFF of all windows is saved as the daily CCF. On the other hand, if stack_method is ‘pws’, then all the Phase Weighted Stack (PWS) is computed and saved as the daily CCF. The PWS is done in two steps: first the mean coherence between the instataneous phases of all windows is calculated, and eventually serves a weighting factor on the mean. The smoothness of this weighting array is defined using the pws_timegate parameter in the configuration. The weighting array is the power of the mean coherence array. If pws_power is equal to 0, a linear stack is done (then it’s faster to do set stack_method = ‘linear’). Usual value is 2.

Warning

PWS is largely untested, not cross-validated. It looks good, but that doesn’t mean a lot, does it? Use with Caution! And if you cross-validate it, please let us know!!

See also

Schimmel, M. and Paulssen H., “Noise reduction and detection of weak, coherent signals through phase-weighted stacks”. Geophysical Journal International 130, 2 (1997): 497-505.

Once done, each job is marked “D”one in the database.

To run this script:

$ msnoise compute_cc

This step also supports parallel processing/threading:

$ msnoise -t 4 compute_cc

will start 4 instances of the code (after 1 second delay to avoid database conflicts). This works both with SQLite and MySQL but be aware problems could occur with SQLite.

New in version 1.4: The Instrument Response removal & The Phase Weighted Stack & Parallel Processing

Stack

MSNoise is capable of using a reference function defined by absolute or relative dates span. For example, an absolute range could be “from 1 January 2010 to 31 December 2011” and a relative range could be “the last 200 days”. In the latter case, the REF will need to be exported at every run, meaning the following steps (MWCS and DTT) will be executed on the whole configured period. If the REF is defined between absolute dates, excluding “today”, the MWCS and DTT will only be calculated for new data (e.g. “yesterday” and “today”). The corresponding configuration bits are ref_begin and ref_end. In the future, we plan on allowing multiple references to be defined.

Only data for new/modified dates need to be exported. If any CC-job has been marked “Done” within the last day, the stacks will be calculated and a new DTT job will be inserted in the database. For dates in the period of interest, the moving-window stack will only be exported if new/modified CCF is available. The export directory are “REF/” and “DAY%03i/” where %03i will be replaced by the number of days stacked together (DAYS_005 for a 5-days stack, e.g.).

Please note that within MSNoise, stacks are always inclusive of the time/day mentionned. For example, a 5-days stack on January 10, will contain cross-correlation functions computed for January 6, 7, 8, 9 AND 10! The graphical representation centered on a “January 10” tick might then display changes in the CCF that occurred on the 10th !

Moving-window stack length(s) are configured using the mov_stack bit.

If stack_method is ‘linear’, then a simple mean CFF of all daily is saved as the mov or ref CCF. On the other hand, if stack_method is ‘pws’, then all the Phase Weighted Stack (PWS) is computed and saved as the mov or ref CCF. The PWS is done in two steps: first the mean coherence between the instataneous phases of all windows is calculated, and eventually serves a weighting factor on the mean. The smoothness of this weighting array is defined using the pws_timegate parameter in the configuration. The weighting array is the power of the mean coherence array. If pws_power is equal to 0, a linear stack is done (then it’s faster to do set stack_method = ‘linear’). Usual value is 2.

Warning

PWS is largely untested, not cross-validated. It looks good, but that doesn’t mean a lot, does it? Use with Caution! And if you cross-validate it, please let us know!!

See also

Schimmel, M. and Paulssen H., “Noise reduction and detection of weak, coherent signals through phase-weighted stacks”. Geophysical Journal International 130, 2 (1997): 497-505.

Configuration Parameters

  • ref_begin: Beginning or REF stacks. Can be absolute (2012-01-01) or relative (-100) days (default=1970-01-01)
  • ref_end: End or REF stacks. Same as ref_begin (default=2018-01-01)
  • mov_stack: Number of days to stack for the Moving-window stacks ([5]= [day-4:day]), can be a comma-separated list 1,2,5,10 (default=5)
  • stack_method: Stack Method: Linear Mean or Phase Weighted Stack: [linear]/pws (default=linear) | new in 1.4
  • pws_timegate: If stack_method=’pws’, width of the smoothing in seconds : 10.0 (default=10.0) | new in 1.4
  • pws_power: If stack_method=’pws’, Power of the Weighting: 2.0 (default=2.0) | new in 1.4

Usage:

The best way to call this code is to start it from the console (-h shows the help)

$ msnoise stack --help

Usage: msnoise-script.py stack [OPTIONS]

  Stacks the [REF] and/or [MOV] windows

Options:
  -r, --ref               Compute the REF Stack
  -m, --mov               Compute the MOV Stacks
  -s, --step              Compute the STEP Stacks
  -i, --interval INTEGER  Number of days before now to search for modified
                          Jobs
  --help                  Show this message and exit.

On a routine basis, one should thus run the following to compute REF and MOV stacks:

$ msnoise stack -r -m

While, when playing around with data, and surely on the first run, one should define the -i INTERVAL, as jobs might have been marked “Done” more than 24 hours before running the stack. This, for example, will tell the code to search for jobs marked in the last 10 days:

$ msnoise stack -r -m -i 10

New in version 1.4: The Phase Weighted Stack.

Compute MWCS

Warning

if using only mov_stack = 1, no DTT jobs is inserted in the database and consequently, no MWCS calculation will be done! FIX!

Following Clarke et al (2011), we apply the Moving-Window Cross-Spectral method to study the relative dephasing between Moving-Window stacks (“Current”) and a Reference using Moving-Window Cross-Spectral analysis. The jobs “T”o do have been inserted in the datavase during the stack procedure.

Filter Configuration Parameters

  • mwcs_low: The lower frequency bound of the linear regression done in MWCS (in Hz)
  • mwcs_high: The upper frequency bound of the linear regression done in MWCS (in Hz)
  • mwcs_wlen: Window length (in seconds) to perform MWCS
  • mwcs_step: Step (in seconds) of the windowing procedure in MWCS

In short, both time series are sliced in several overlapping windows and preprocessed. The similarity of the two time-series is assessed using the cross-coherence between energy densities in the frequency domain. The time delay between the two cross correlations is found in the unwrapped phase of the cross spectrum and is linearly proportional to frequency. This “Delay” for each window between two signals is the slope of a weighted linear regression (WLS) of the samples within the frequency band of interest.

For each filter, the frequency band can be configured using mwcs_low and mwcs_high, and the window and overlap lengths using mwcs_wlen and mwcs_overlap.

The output of this process is a table of delays measured at each window in the functions. The following is an example for lag times between -115 and -90. In this case, the window length was 10 seconds with an overlap of 5 seconds.

      LAG_TIME          DELAY           ERROR         MEAN COHERENCE
-1.1500000000e+02 -1.4781146383e-01 5.3727119135e-02 2.7585243911e-01
-1.1000000000e+02 -6.8207526992e-02 2.0546644311e-02 3.1620999352e-01
-1.0500000000e+02 -1.0337029577e-01 8.6645155402e-03 4.2439269880e-01
-1.0000000000e+02 -2.8668775696e-02 6.2522215988e-03 5.7159849528e-01
-9.5000000000e+01  4.1803941008e-02 1.5102285789e-02 4.1238557789e-01
-9.0000000000e+01  4.8139400233e-02 3.2700657018e-02 3.0586187792e-01

This process is job-based, so it is possible to run several instances in parallel.

To run this step:

$ msnoise compute_mwcs

This step also supports parallel processing/threading:

$ msnoise -t 4 compute_mwcs

will start 4 instances of the code (after 1 second delay to avoid database conflicts). This works both with SQLite and MySQL but be aware problems could occur with SQLite.

New in version 1.4: Parallel Processing

Compute dt/t

This code is responsible for the calculation of dt/t using the result of the MWCS calculations.

Warning

Previously, all pairs were analysed using the same parameters, which were hard-coded in the s06compute_dtt.py file. This has changed now, and MSNoise uses parameters set in the database via the configurator. Pre-1.3 users should upgrade their database using the “$ msnoise upgrade_db” command.

Configuration Parameters

  • dtt_lag: How is the lag window defined [dynamic]/static (default=static)
  • dtt_v: If dtt_lag=dynamic: what velocity to use to avoid ballistic waves [1.0]km/s (default=1.0)
  • dtt_minlag: If dtt_lag=static: min lag time (default=5.0)
  • dtt_width: Width of the time lag window [30]s (default=30.0)
  • dtt_sides: Which sides to use [both]/left/right (default=both)
  • dtt_mincoh: Minimum coherence on dt measurement, MWCS points with values lower than that will not be used in the WLS (default=0.65)
  • dtt_maxerr: Maximum error on dt measurement, MWCS points with values larger than that will not be used in the WLS (default=0.1)
  • dtt_maxdt: Maximum dt values, MWCS points with values larger than that will not be used in the WLS (default=0.1)

The dt/t is determined as the slope of the delays vs time lags. The slope is calculated a weighted linear regression (WLS) through selected points.

1. The selection of points is first based on the time lag criteria. The minimum time lag can either be defined absolutely or dynamically. When dtt_lag is set to “dynamic” in the database, the inter-station distance is used to determine the minimum time lag. This lag is calculated from the distance and a velocity configured (dtt_v). The velocity is determined by the user so that the minlag doesn’t include the ballistic waves. For example, if ballistic waves are visible with a velocity of 2 km/s, one could configure dtt_v=1.0. This way, if stations are located 15 km apart, the minimum lag time will be set to 15 s. The dtt_width determines the width of the lag window used. A value of 30.0 means the process will use time lags between 15 and 45 s in the example above, on both sides if configured (dtt_sides), or only causal or acausal parts of the CCF. The following figure shows the static time lags of dtt_width = 40s starting at dtt_minlag = 10s and the dynamic time lags for a dtt_v = 1.0 km/s for the Piton de La Fournaise network (including stations not on the volcano),

Note

It seems obvious that these parameters are frequency-dependent, but they are currently common for all filters !

_images/static.png _images/dynamic.png

Warning

In order to use the dynamic time lags, one has to provide the station coordinates !

2. Using example values above, we chose to use only 15-45 s coda part of the signal, neglecting direct waves in the 0-15 seconds range. We then select data which match three other thresholds: dtt_mincoh, dtt_maxerr and dtt_maxdt.

_images/Figure04_dttmatrix_01_005DAYS_ZZ-2010-10-12_cmyk.png

Each of the 4 left subplot of this figure shows a colormapper matrix of which each row corresponds to the data of 1 station pair and each column corresponds to different time lags. The cells are then colored using, from left to right: Delays, Errors, Phase Coherence and Data Selection.

Once data (cells) have been selected, they are analyzed two times: first using a WLS that is forced to pass the origin (0,0) and second when a constant is added to allow for the WLS to be offset from the origin. For each value, the error is computed and stored. M0 and EM0 are the slope and its error for the first WLS, and M, EM together with A and EA are the slope, its error, the constant and its error for the second WLS. The output of this calculation is a table, with one row for each station pair.

Date,          A,        EA,        EM,       EM0,         M,          M0,       Pairs
2013-01-06,-0.1683728,0.0526606,0.00208377,0.00096521, 0.00682021, 0.00037757,BE_GES_BE_HOU
2013-01-06,-0.0080464,0.0577936,0.00291327,0.00097298,-0.00226910,-0.00264354,BE_GES_BE_MEM
2013-01-06, 0.1007472,0.0144648,0.00179566,0.00454172,-0.00145738, 0.00741478,BE_GES_BE_RCHB
2013-01-06,-0.0556811,0.0098926,0.00057839,0.00108102,-0.00328965,-0.00136075,BE_GES_BE_SKQ
2013-01-06, 0.0150866,0.0202243,0.00096543,0.00089832, 0.00083714, 0.00104507,BE_GES_BE_STI
2013-01-06, 0.0268309,0.0328997,0.00153137,0.00150261, 0.00302331, 0.00302451,BE_GES_BE_UCC
2013-01-06,-0.0121293,0.0043351,0.00039019,0.00041347, 0.00025836,-0.00042709,BE_HOU_BE_MEM
2013-01-06, 0.1076247,0.0188662,0.00076824,0.00216383,-0.00030791, 0.00112692,BE_HOU_BE_RCHB
2013-01-06,-0.0468485,0.0194492,0.00069968,0.00078207,-0.00066133, 0.00027102,BE_HOU_BE_SKQ
2013-01-06, 0.0203057,0.0161316,0.00131522,0.00131182, 0.00051626,-3.10306611,BE_HOU_BE_STI
...
2013-01-06,-0.0022588,0.0037141,0.00010340,9.1996e-05, 0.00073635, 0.00076238,ALL

To run this script:

msnoise compute_dtt

Grouping Station Pairs

Although not clearly visible on the figure above, the very last row of the matrix doesn’t contain information about one station pair, but contains a weighted mean of all delays (from all pairs) for each time lag. For each time lag, delays from each pair is taken into account if it satisfies the same criteria as for the individual data selection. Once the last row (the ALL line) has been calculated, it goes through the normal process of the double WLS and is saved to the output file, as visible above. In the future, MSNoise will be able to treat as many groups as the user want, allowing, e.g. a “crater” and a “slopes” groups.

Mean of All Pairs vs Mean Pair

The dt/t calculated using the mean pair (ALL, in red on subplots 4 and 5) and by calculating the weighted mean of the dt/t of all pairs (in green) don’t show a significant difference. The standard deviation around the latter is more spread than on the former, but this has to be investigated.

Forcing vs No Forcing through Origin

The reason for allowing the WLS to cross the axis elsewhere than on (0,0) is, for example, to study the potential clock drifts or noise source position variations.