%%{init: { 'logLevel': 'debug', 'theme': 'base' } }%%
graph LR
    waveform[Get Data] --> correlate(Correlation)
    correlate:::active -->|save| corrdb[(CorrDB/hdf5)]
    corrdb --> monitor
    monitor[Measure dv] -->|save| dv{{DV}}
    click waveform "../trace_data.html" "trace_data"
    click correlate "../correlate.html" "correlate"
    click monitor "../monitor.html" "monitor"
    click corrdb "../corrdb.html" "CorrDB"
    click dv "../monitor/dv.html" "DV"
    classDef active fill:#f666, stroke-width:4px, stroke:#f06;
    

CorrTrace, CorrStream, and CorrBulk classes#

Once the correlations are actually computed, they are assigned as CorrTrace and CorrStream objects. Both inherit most of their methods and attributes from their obspy parents. However, there are some extra attributes and functionalities.

CorrTrace#

Most notably a new Header object (CorrStats) with different attributes is associated to this type of trace. The header takes care of saving vital information like lag times (start_lag and end_lag), the start- and the endtime of the waveforms that were used to compute the correlation (corr_start and corr_end, respectively), and information about the coordinates of the stations.

CorrTrace does also come with its own plotting method plot() (check it for details). It can produce plots akin to this one:

../../_images/corrtr.svg

CorrStream#

Essentially, this class is just a fancy list of CorrTrace objects. However, it has methods to stack (stack()), select (select_corr_time()), or slide (slide()) time windows. It also enables us to create section stacks, sorted by interstation distance or time:

../../_images/cst.png

CorrBulk#

CorrStream does also have a method to create a CorrBulk object (create_corr_bulk()). Instead of relying on a list of traces, this object is based on numpy arrays, which makes all sorts of computations cheaper. Check out CorrBulk for available functions. This is also the object that SeisMIC’s own monitoring workflow is based on.