Source code for seismic.monitor.trim

'''
:copyright:
   The SeisMIC development team (makus@gfz-potsdam.de).
:license:
    EUROPEAN UNION PUBLIC LICENCE v. 1.2
   (https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12)
:author:
   Peter Makus (makus@gfz-potsdam.de)

Created: Tuesday, 15th November 2022 05:15:30 pm
Last Modified: Monday, 16th January 2023 11:14:37 am
'''

from typing import Tuple

import numpy as np

from seismic.correlate.stats import CorrStats


[docs]def corr_mat_trim( data: np.ndarray, stats: CorrStats, starttime: float, endtime: float) -> Tuple[np.ndarray, CorrStats]: """ Trim the correlation matrix to a given period. Trim the correlation matrix `corr_mat` to the period from `starttime` to `endtime` given in seconds from the zero position, so both can be positive and negative. If `starttime` and `endtime` are datetime.datetime objects they are taken as absolute start and endtime. :type data: np.ndarray :param corr_mat: correlation matrix to be trimmed :type starttime: float :param starttime: start time in seconds with respect to the zero position. Hence, this parameter describes a lag! :type endtime: float :param order: end time in seconds with respect to the zero position :rtype tuple: Tuple[np.ndarray, CorrStats] :return: trimmed correlation matrix and new stats object """ # fetch indices of start and end start = int( np.floor((starttime-stats['start_lag'])*stats['sampling_rate'])) end = int(np.floor((endtime-stats['start_lag'])*stats['sampling_rate'])) # check range if start < 0: print('Error: starttime before beginning of trace. Data not changed') return data, stats if end >= stats['npts']: print('Error: endtime after end of trace. Data not changed') return data, stats # select requested part from matrix # +1 is to include the last sample if len(data.shape) == 1: data = data[start:end+1] stats['npts'] = len(data) else: data = data[:, start:end + 1] stats['npts'] = data.shape[1] # set starttime, endtime and npts of the new stats stats['start_lag'] = starttime return data, stats