def get_peak_spectrals(data, samp_rate,periods):
    """Calculate peak pseudo-spectral parameters.

    Compute 5% damped PSA at input periods seconds.

    Data must be an acceleration Trace.

    :param data:
      Obspy Trace object, containing acceleration data to convolve with pendulum at freq.
    :param delta: 
      sample rate (samples per sec).
    :returns: 
      Dictionary containing keys of input periods, and values of corresponding spectral accelerations.
    """

    D = 0.05	# 5% damping

    psadict = {}
    for T in periods:
        freq = 1.0 / T
        omega = (2 * 3.14159 * freq) ** 2

        paz_sa = corn_freq_2_paz(freq, damp=D)
        paz_sa['sensitivity'] = omega
        paz_sa['zeros'] = []
        dd = simulate_seismometer(data.data, samp_rate, paz_remove=None, paz_simulate=paz_sa,
                     taper=True, simulate_sensitivity=True, taper_fraction=0.05)

        if abs(max(dd)) >= abs(min(dd)):
            psa = abs(max(dd))
        else:
            psa = abs(min(dd))
        psadict[T] = psa

    return psadict
def calculate_damped_spectral_acc(data, delta, freq, damp, ty):

    samp_rate = 1.0 / delta
    t = freq * 1.0
    d = damp
    omega = (2 * math.pi * t)**2

    paz_sa = corn_freq_2_paz(t, damp=d)
    paz_sa['sensitivity'] = omega
    paz_sa['zeros'] = []

    if ty == 'displacement':
        data = np.gradient(data, delta)
        data = np.gradient(data, delta)
    elif ty == 'velocity':
        data = np.gradient(data, delta)

    data = simulate_seismometer(data,
                                samp_rate,
                                paz_remove=None,
                                paz_simulate=paz_sa,
                                taper=True,
                                simulate_sensitivity=True,
                                taper_fraction=0.05)

    return data
def geophone_response(resonance_frequency,
                      gain,
                      damping=0.707,
                      output_resistance=np.inf,
                      cable_length=np.inf,
                      cable_capacitance=np.inf,
                      sensitivity=1,
                      stage_sequence_number=1):
    paz = corn_freq_2_paz(resonance_frequency, damp=damping)

    l = cable_length
    R = output_resistance
    C = cable_capacitance

    if ((R * l * C) != np.inf) and ((R * l * C) != 0):
        pole_cable = -1 / (R * l * C)
        paz['poles'].append(pole_cable)

    i_s = InstrumentSensitivity(sensitivity,
                                resonance_frequency,
                                input_units='M/S',
                                output_units='M/S',
                                input_units_description='velocity',
                                output_units_description='velocity')

    pzr = PolesZerosResponseStage(stage_sequence_number, gain,
                                  resonance_frequency, 'M/S', 'M/S',
                                  'LAPLACE (RADIANT/SECOND)',
                                  resonance_frequency, paz['zeros'],
                                  paz['poles'])

    return Response(instrument_sensitivity=i_s, response_stages=[pzr])
Exemple #4
0
 def _remove_node_response(st) -> obspy.Stream:
     """using the fairfield files, remove the response through deconvolution"""
     stt = st.copy()
     paz_5hz = corn_freq_2_paz(5.0, damp=0.707)
     paz_5hz["sensitivity"] = 76700
     pre_filt = (0.25, 0.5, 180.0, 200.0)
     stt.simulate(paz_remove=paz_5hz, pre_filt=pre_filt)
     return stt
Exemple #5
0
def _get_beamforming_example_stream():
    # Load data
    from obspy import read
    from obspy.core.util import AttribDict
    from obspy.signal.invsim import corn_freq_2_paz
    st = read("https://examples.obspy.org/agfa.mseed")
    # Set PAZ and coordinates for all 5 channels
    st[0].stats.paz = AttribDict({
        'poles': [(-0.03736 - 0.03617j), (-0.03736 + 0.03617j)],
        'zeros': [0j, 0j],
        'sensitivity': 205479446.68601453,
        'gain': 1.0})
    st[0].stats.coordinates = AttribDict({
        'latitude': 48.108589,
        'elevation': 0.450000,
        'longitude': 11.582967})
    st[1].stats.paz = AttribDict({
        'poles': [(-0.03736 - 0.03617j), (-0.03736 + 0.03617j)],
        'zeros': [0j, 0j],
        'sensitivity': 205479446.68601453,
        'gain': 1.0})
    st[1].stats.coordinates = AttribDict({
        'latitude': 48.108192,
        'elevation': 0.450000,
        'longitude': 11.583120})
    st[2].stats.paz = AttribDict({
        'poles': [(-0.03736 - 0.03617j), (-0.03736 + 0.03617j)],
        'zeros': [0j, 0j],
        'sensitivity': 250000000.0,
        'gain': 1.0})
    st[2].stats.coordinates = AttribDict({
        'latitude': 48.108692,
        'elevation': 0.450000,
        'longitude': 11.583414})
    st[3].stats.paz = AttribDict({
        'poles': [(-4.39823 + 4.48709j), (-4.39823 - 4.48709j)],
        'zeros': [0j, 0j],
        'sensitivity': 222222228.10910088,
        'gain': 1.0})
    st[3].stats.coordinates = AttribDict({
        'latitude': 48.108456,
        'elevation': 0.450000,
        'longitude': 11.583049})
    st[4].stats.paz = AttribDict({
        'poles': [(-4.39823 + 4.48709j), (-4.39823 - 4.48709j), (-2.105 + 0j)],
        'zeros': [0j, 0j, 0j],
        'sensitivity': 222222228.10910088,
        'gain': 1.0})
    st[4].stats.coordinates = AttribDict({
        'latitude': 48.108730,
        'elevation': 0.450000,
        'longitude': 11.583157})
    # Instrument correction to 1Hz corner frequency
    paz1hz = corn_freq_2_paz(1.0, damp=0.707)
    st.simulate(paz_remove='self', paz_simulate=paz1hz)
    return st
 def resi(x, debug = True):
     
     h=x[1]
     if debug:
         print('Here is h: ' + str(h))
     f=x[0]
     if debug:
         print('Here is f: ' + str(f))
     pazTEMP = corn_freq_2_paz(f,h)
     stTemp = st.copy()
     pazTEMP['sensitivity'] = x[2]
     stTemp[0].simulate(paz_remove=pazTEMP)
     stTemp[1].simulate(paz_remove=paz)
     stTemp.filter('highpass',freq=1./30.)
     comp = sum(np.abs(stTemp[0].data - stTemp[1].data)**2)
     if debug:
         print('Here is the residual: ' + str(comp))
 
     return comp
Exemple #7
0
def get_params():
   # Get Configuration
    params = {}
    ######################
    # params for BINFILE #
    ######################
    params['stations']  = model.load_stations('stationsBO.txt')
#    params['receivers']  = model.load_stations('receivers.txt')
    params['WORKDIR']               = os.getcwd()
    params['downsampling']          = False#True
    params['df']                    = 20. 
    params['dt']                    = 1./params['df']
    params['bin_duration']          = (3600.*24)#/4
    params['percentfill']           = 10
    params['freqmax']               = 9.8
    params['freqmin']               = 0.01
    params['stop']                  = 0 # important param but default = 0
    params['sizeout']               = 415 #size of the output matrix (sizein - stop)
    ###################
    # params for CORR #
    ###################
    params['rotation']              = False
    params['corrType']              = 'crosscoherence'
    params['analysis_duration']     = (3600.*24)#/24 # how much time to process as bunch. must stay like that not implemented to change now
    params['temp_norm']             = 0 # 0: removing eq with param 'clipping'; -1: 1-bit normalization; 1: Windsorinzing with param 'clipping'   
    params['clipping']              = 3. # clipping eq or windsorizing at 3 * std(trace)
    params['overlap']               = 0.4 
    params['corr_duration']         = 250. # slicing the 86400 in small windows
    params['npts']                  = params['corr_duration'] * params['df']
    params['nthreads']              = 12 
    params['outname']               = 'BO.BO' #net1.net2
    ##################
    # params for PAZ #
    ##################
    #"""/!\ hard coded in CorrelBinSingle.py. Sta a or sta b"""
    paz =corn_freq_2_paz(15.0, damp=0.57)
    #paz['sensitivity']=(76*16/16)/5.9605e-7
    params['paz'] = paz
    params['pre_filt'] = (0.05, 0.055, 9.0, 9.5)
    
    return params
def accelerometer_response(resonance_frequency,
                           gain,
                           sensitivity=1,
                           stage_sequence_number=1,
                           damping=0.707):
    i_s = InstrumentSensitivity(sensitivity,
                                resonance_frequency,
                                input_units='M/S/S',
                                output_units='M/S/S',
                                input_units_description='acceleration',
                                output_units_description='acceleration')

    paz = corn_freq_2_paz(resonance_frequency, damp=damping)

    paz['zeros'] = []

    pzr = PolesZerosResponseStage(1, 1, 14, 'M/S/S', 'M/S',
                                  'LAPLACE (RADIANT/SECOND)', 1, [],
                                  paz['poles'])

    return Response(instrument_sensitivity=i_s, response_stages=[pzr])
def get_peak_spectrals(data, samp_rate, periods):
    """Calculate peak pseudo-spectral parameters.

    Compute 5% damped PSA at input periods seconds.

    Data must be an acceleration Trace.

    :param data:
      Obspy Trace object, containing acceleration data to convolve with pendulum at freq.
    :param delta: 
      sample rate (samples per sec).
    :returns: 
      Dictionary containing keys of input periods, and values of corresponding spectral accelerations.
    """

    D = 0.05  # 5% damping

    psadict = {}
    for T in periods:
        freq = 1.0 / T
        omega = (2 * 3.14159 * freq)**2

        paz_sa = corn_freq_2_paz(freq, damp=D)
        paz_sa['sensitivity'] = omega
        paz_sa['zeros'] = []
        dd = simulate_seismometer(data.data,
                                  samp_rate,
                                  paz_remove=None,
                                  paz_simulate=paz_sa,
                                  taper=True,
                                  simulate_sensitivity=True,
                                  taper_fraction=0.05)

        if abs(max(dd)) >= abs(min(dd)):
            psa = abs(max(dd))
        else:
            psa = abs(min(dd))
        psadict[T] = psa

    return psadict
Exemple #10
0
import sys, glob
import numpy as np
from obspy import Trace, read, read_inventory
# from pylab import *
#import matplotlib.pyplot as plt
import math, os
import nnobspy
from pyrocko import model
from obspy.signal.invsim import corn_freq_2_paz

oridir = '/data/beroza/liuxin/NLphase2/'
bindir  = 'bins/full/'
f_prefilt=(0.02, 0.025, 9.5, 10.0)
resamp=20
nt = int(86400*resamp)
paz = corn_freq_2_paz(5.0, damp=0.67)
paz['sensitivity'] = 89.4  
#respdir = '../responses'
#inv = read_inventory('inv.xml')
#kjd
# ------------------------------------------------------------------------------
# Main
def Process(arg_list):

  # ------------------------------------------------------------
  # parameters
    stations = model.load_stations('stationsBO.txt')
    sday = int(arg_list[0])
    eday = int(arg_list[1])
    comp = arg_list[2]
    iyear = int(arg_list[3])
import matplotlib.pyplot as plt

import obspy
from obspy.clients.arclink import Client
from obspy.signal.invsim import corn_freq_2_paz, simulate_seismometer


# Retrieve data via ArcLink
# please provide a valid email address for the keyword user
client = Client(user="******")
t = obspy.UTCDateTime("2009-08-24 00:20:03")
st = client.get_waveforms('BW', 'RJOB', '', 'EHZ', t, t + 30)
paz = client.get_paz('BW', 'RJOB', '', 'EHZ', t)

# 1Hz instrument
one_hertz = corn_freq_2_paz(1.0)
# Correct for frequency response of the instrument
res = simulate_seismometer(st[0].data.astype('float32'),
                           st[0].stats.sampling_rate, paz, inst_sim=one_hertz)
# Correct for overall sensitivity
res = res / paz['sensitivity']

# Plot the seismograms
sec = np.arange(len(res)) / st[0].stats.sampling_rate
plt.subplot(211)
plt.plot(sec, st[0].data, 'k')
plt.title("%s %s" % (st[0].stats.station, t))
plt.ylabel('STS-2')
plt.subplot(212)
plt.plot(sec, res, 'k')
plt.xlabel('Time [s]')
import obspy
from obspy.signal.invsim import corn_freq_2_paz


paz_sts2 = {
    'poles': [-0.037004 + 0.037016j, -0.037004 - 0.037016j, -251.33 + 0j,
              - 131.04 - 467.29j, -131.04 + 467.29j],
    'zeros': [0j, 0j],
    'gain': 60077000.0,
    'sensitivity': 2516778400.0}
paz_1hz = corn_freq_2_paz(1.0, damp=0.707)  # 1Hz instrument
paz_1hz['sensitivity'] = 1.0

st = obspy.read()
# make a copy to keep our original data
st_orig = st.copy()

# Simulate instrument given poles, zeros and gain of
# the original and desired instrument
st.simulate(paz_remove=paz_sts2, paz_simulate=paz_1hz)

# plot original and simulated data
st_orig.plot()
st.plot()
Exemple #13
0
hs = []
sens = []
for sta in stas:
    f = open('Results_Swept_Sine' + sta, 'r')
    for line in f:
        line = line.split(',')
        fs.append(float(line[4]))
        hs.append(float(line[5]))
        sens.append(float(line[6]))
        chans.append(line[0])
    f.close()

#####################################################Make mean

for triple in zip(fs, hs, sens):
    paz = corn_freq_2_paz(triple[0], triple[1])
    h, f = paz_to_freq_resp(paz['poles'], paz['zeros'], 1., 1. / 1000., 2**14,
                            True)
    h *= triple[2]
    if 'hmean' not in vars():
        hmean = h
    else:
        hmean += h

hmean *= 1. / 9.

fig = plt.figure(1, figsize=(12, 12))
ax = fig.add_subplot(111)
plt.subplots_adjust(hspace=0.001)
for idx, quad in enumerate(zip(chans, fs, hs, sens)):
    if quad[0] == 'HHZ':
Exemple #14
0
    
        return comp
    
    
    f = 1. /(2.*np.pi / abs(pazTest['poles'][0]))
    h = abs(pazTest['poles'][0].real)/abs(pazTest['poles'][0])
    
    sen = 75900.
    pazTest['sensitivity'] = sen
    
    x = np.array([f, h, sen])
 
    bf = fmin_bfgs(resi,x)
    #else:
    #bf= x
    pazNEW = corn_freq_2_paz(bf[0],bf[1])
    pazNEW['sensitivity'] = bf[2]
    
    stTemp = st.copy()
    
    st[0].simulate(paz_remove=pazNEW)
    st[1].simulate(paz_remove=paz)
    stTemp[0].simulate(paz_remove=pazTest)
    st.filter('highpass',freq=1./30.)
    stTemp.filter('highpass',freq=1./30.)
    rat = st[0].std()/st[1].std()
    print('Here is the ratio of ' + sta + ' ' + chan + ' : ' + str(rat))
    
    ffile.write(chan + ', ' + str(f) + ', ' + str(h) + ', ' + str(sen) + ', ' + str(bf[0]) + ', ' + str(bf[1]) + ', ' + str(bf[2]) + ', ' + str(rat) + ', ' + str(resi(x)) +', ' + str(resi(bf)) + '\n')
    
    index, value = xcorr(st[0],st[1], 300)
Exemple #15
0
def peak_ground_motion(data, delta, freq, damp=0.1):
    """
    Peak ground motion parameters

    Compute the maximal displacement, velocity, acceleration and the peak
    ground acceleration at a certain frequency (standard frequencies for
    ShakeMaps are 0.3/1.0/3.0 Hz).

    Data must be displacement

    :type data: :class:`~numpy.ndarray`
    :param data: Data in displacement to convolve with pendulum at freq.
    :type delta: float
    :param delta: Sampling interval
    :type freq: float
    :param freq: Frequency in Hz.
    :type damp: float
    :param damp: damping factor. Default is set to 0.1
    :rtype: (float, float, float, float)
    :return: Peak Ground Acceleration, maximal displacement, velocity,
        acceleration
    """
    data = data.copy()

    # Displacement
    if abs(max(data)) >= abs(min(data)):
        m_dis = abs(max(data))
    else:
        m_dis = abs(min(data))

    # Velocity
    data = np.gradient(data, delta)
    if abs(max(data)) >= abs(min(data)):
        m_vel = abs(max(data))
    else:
        m_vel = abs(min(data))

    # Acceleration
    data = np.gradient(data, delta)
    if abs(max(data)) >= abs(min(data)):
        m_acc = abs(max(data))
    else:
        m_acc = abs(min(data))

    samp_rate = 1.0 / delta
    t = freq * 1.0
    d = damp
    omega = (2 * 3.14159 * t)**2

    paz_sa = corn_freq_2_paz(t, damp=d)
    paz_sa['sensitivity'] = omega
    paz_sa['zeros'] = []
    data = simulate_seismometer(data,
                                samp_rate,
                                paz_remove=None,
                                paz_simulate=paz_sa,
                                taper=True,
                                simulate_sensitivity=True,
                                taper_fraction=0.05)

    if abs(max(data)) >= abs(min(data)):
        pga = abs(max(data))
    else:
        pga = abs(min(data))

    return (pga, m_dis, m_vel, m_acc)
Exemple #16
0
        sens.append(float(line[6]))
        chans.append(line[0])
    f.close()

fig = plt.figure(1, figsize=(12, 12))
plt.subplots_adjust(hspace=0.001)
for idx, quad in enumerate(zip(chans, fs, hs, sens)):
    if quad[0] == 'HHZ':
        color = 'C0'
    elif quad[0] == 'HHN':
        color = 'C1'
    else:
        color = 'C2'
    print(quad[1])
    print(quad[2])
    paz = corn_freq_2_paz(quad[1], quad[2])
    h, f = paz_to_freq_resp(paz['poles'], paz['zeros'], 1., 1. / 1000., 2**14,
                            True)
    h *= quad[3]
    plt.subplot(2, 1, 1)
    if idx < 3:
        plt.loglog(f, np.abs(h), c=color, label=quad[0])
    else:
        plt.loglog(f, np.abs(h), c=color)
    plt.text(.11, .5 * 10**5, 'A)', fontsize=24)
    plt.xlim((.1, 100.))
    plt.xticks([])
    plt.legend(loc=4)
    plt.ylabel('Amplitude (Counts/m/s)')
    plt.subplot(2, 1, 2)
Exemple #17
0
from obspy.signal.cross_correlation import templates_max_similarity
from pprint import pprint
import matplotlib.pyplot as plt
from obspy.signal.invsim import corn_freq_2_paz
from eqcorrscan.core.template_gen import multi_template_gen
from obspy.core.event import read_events
from eqcorrscan.utils import pre_processing
from obspy.signal.invsim import corn_freq_2_paz

paz = {
    'sensitivity': 1258650000.0,
    'poles': [-0.074 + 0.074j, -0.074 - 0.074j, -222 + 222j, -222 - 222j],
    'gain': 98570.0,
    'zeros': [0j, 0j]
}
paz_1hz = corn_freq_2_paz(1.0, damp=0.707)  # 1Hz instrument
paz_1hz['sensitivity'] = 1.0

catalog = read_events('ludian.xml')
for e in catalog:
    picks = e.picks
    for p in picks:
        print(p)

ynst = read("2014080316.YN.mseed").sort(['starttime']).trim()

st = ynst.select(station='ZAT')
# st += ynst.select(station='QIJ')
# st += ynst.select(station='PGE')
# st += ynst.select(station='DOC')
# st += ynst.select(station='XUW')
Exemple #18
0
def peak_ground_motion(data, delta, freq, damp=0.1):
    """
    Peak ground motion parameters

    Compute the maximal displacement, velocity, acceleration and the peak
    ground acceleration at a certain frequency (standard frequencies for
    ShakeMaps are 0.3/1.0/3.0 Hz).

    Data must be displacement

    :type data: :class:`~numpy.ndarray`
    :param data: Data in displacement to convolve with pendulum at freq.
    :type delta: float
    :param delta: Sampling interval
    :type freq: float
    :param freq: Frequency in Hz.
    :type damp: float
    :param damp: damping factor. Default is set to 0.1
    :rtype: (float, float, float, float)
    :return: Peak Ground Acceleration, maximal displacement, velocity,
        acceleration
    """
    data = data.copy()

    # Displacement
    if abs(max(data)) >= abs(min(data)):
        m_dis = abs(max(data))
    else:
        m_dis = abs(min(data))

    # Velocity
    data = np.gradient(data, delta)
    if abs(max(data)) >= abs(min(data)):
        m_vel = abs(max(data))
    else:
        m_vel = abs(min(data))

    # Acceleration
    data = np.gradient(data, delta)
    if abs(max(data)) >= abs(min(data)):
        m_acc = abs(max(data))
    else:
        m_acc = abs(min(data))

    samp_rate = 1.0 / delta
    T = freq * 1.0
    D = damp
    omega = (2 * 3.14159 * T) ** 2

    paz_sa = corn_freq_2_paz(T, damp=D)
    paz_sa['sensitivity'] = omega
    paz_sa['zeros'] = []
    data = simulate_seismometer(data, samp_rate, paz_remove=None,
                                paz_simulate=paz_sa, taper=True,
                                simulate_sensitivity=True, taper_fraction=0.05)

    if abs(max(data)) >= abs(min(data)):
        pga = abs(max(data))
    else:
        pga = abs(min(data))

    return (pga, m_dis, m_vel, m_acc)
Exemple #19
0
st[4].stats.paz = AttribDict({
    'poles': [(-4.39823 + 4.48709j), (-4.39823 - 4.48709j), (-2.105 + 0j)],
    'zeros': [0j, 0j, 0j],
    'sensitivity':
    222222228.10910088,
    'gain':
    1.0
})
st[4].stats.coordinates = AttribDict({
    'latitude': 48.108730,
    'elevation': 0.450000,
    'longitude': 11.583157
})

# Instrument correction to 1Hz corner frequency
paz1hz = corn_freq_2_paz(1.0, damp=0.707)
st.simulate(paz_remove='self', paz_simulate=paz1hz)

# Execute array_processing
kwargs = dict(
    # slowness grid: X min, X max, Y min, Y max, Slow Step
    sll_x=-3.0,
    slm_x=3.0,
    sll_y=-3.0,
    slm_y=3.0,
    sl_s=0.03,
    # sliding window properties
    win_len=1.0,
    win_frac=0.05,
    # frequency properties
    frqlow=1.0,
Exemple #20
0
#files = glob.glob('okdata/' + sta +'/*/*/*' + chan + '*.seed')

#st= Stream()
#for idx, curfile in enumerate(files):
#print('On ' + str(idx+1) + ' of ' + str(len(files)))
#st= read(curfile)
#if idx == 0:
#ppsd = PPSD(st[0].stats, paz)
#ppsd.add(st)
#ppsd.save_npz(st[0].id + 'PDF.npz')

debug = True
string = 'newdata/output_raw/2017/XX/FF'

pazNEW = corn_freq_2_paz(4.9, .96)
pazNEW['sensitivity'] = 75900.

chans = ['HHZ', 'HHE', 'HHN']
for idx, chan in enumerate(chans):
    st = Stream()
    for s in range(1, 9):

        if debug:
            print('On ' + str(s) + ' ' + chan)
        st += read(string + str(s) + '/' + chan + '.D/XX*')

    stime = UTCDateTime('2017-05-03T01:10:00.0')
    etime = UTCDateTime('2017-05-04T01:10:00.0')
    st.trim(starttime=stime, endtime=etime)
    st.decimate(4)
    'elevation': 0.450000,
    'longitude': 11.583049})

st[4].stats.paz = AttribDict({
    'poles': [(-4.39823 + 4.48709j), (-4.39823 - 4.48709j), (-2.105 + 0j)],
    'zeros': [0j, 0j, 0j],
    'sensitivity': 222222228.10910088,
    'gain': 1.0})
st[4].stats.coordinates = AttribDict({
    'latitude': 48.108730,
    'elevation': 0.450000,
    'longitude': 11.583157})


# Instrument correction to 1Hz corner frequency
paz1hz = corn_freq_2_paz(1.0, damp=0.707)
st.simulate(paz_remove='self', paz_simulate=paz1hz)

# Execute array_processing
stime = obspy.UTCDateTime("20080217110515")
etime = obspy.UTCDateTime("20080217110545")
kwargs = dict(
    # slowness grid: X min, X max, Y min, Y max, Slow Step
    sll_x=-3.0, slm_x=3.0, sll_y=-3.0, slm_y=3.0, sl_s=0.03,
    # sliding window properties
    win_len=1.0, win_frac=0.05,
    # frequency properties
    frqlow=1.0, frqhigh=8.0, prewhiten=0,
    # restrict output
    semb_thres=-1e9, vel_thres=-1e9, timestamp='mlabday',
    stime=stime, etime=etime
Exemple #22
0
import numpy as np
import matplotlib.pyplot as plt

import obspy
from obspy.clients.arclink import Client
from obspy.signal.invsim import corn_freq_2_paz, simulate_seismometer

# Retrieve data via ArcLink
# please provide a valid email address for the keyword user
client = Client(user="******")
t = obspy.UTCDateTime("2009-08-24 00:20:03")
st = client.get_waveforms('BW', 'RJOB', '', 'EHZ', t, t + 30)
paz = client.get_paz('BW', 'RJOB', '', 'EHZ', t)

# 1Hz instrument
one_hertz = corn_freq_2_paz(1.0)
# Correct for frequency response of the instrument
res = simulate_seismometer(st[0].data.astype('float32'),
                           st[0].stats.sampling_rate,
                           paz,
                           inst_sim=one_hertz)
# Correct for overall sensitivity
res = res / paz['sensitivity']

# Plot the seismograms
sec = np.arange(len(res)) / st[0].stats.sampling_rate
plt.subplot(211)
plt.plot(sec, st[0].data, 'k')
plt.title("%s %s" % (st[0].stats.station, t))
plt.ylabel('STS-2')
plt.subplot(212)