def get_live_timeseries(): ts = TimeSeries() ts.set_live() ts.dt = 1 / sampling_rate ts.npts = ts_size # ts.put('net', 'IU') ts.put("npts", ts_size) ts.put("sampling_rate", sampling_rate) ts.tref = TimeReferenceType.UTC ts.t0 = datetime.utcnow().timestamp() ts["delta"] = 0.1 ts["calib"] = 0.1 ts["site_id"] = bson.objectid.ObjectId() ts["channel_id"] = bson.objectid.ObjectId() ts["source_id"] = bson.objectid.ObjectId() ts.set_as_origin("test", "0", "0", AtomicType.TIMESERIES) ts.data = DoubleVector(np.random.rand(ts_size)) return ts
def get_live_timeseries(): ts = TimeSeries() ts.set_live() ts.dt = 1 / sampling_rate ts.npts = ts_size # ts.put('net', 'IU') ts.put('npts', ts_size) ts.put('sampling_rate', sampling_rate) ts.tref = TimeReferenceType.UTC ts.t0 = datetime.utcnow().timestamp() ts['delta'] = 0.1 ts['calib'] = 0.1 ts['site_id'] = bson.objectid.ObjectId() ts['channel_id'] = bson.objectid.ObjectId() ts['source_id'] = bson.objectid.ObjectId() ts.set_as_origin('test', '0', '0', AtomicType.TIMESERIES) ts.data = DoubleVector(np.random.rand(ts_size)) return ts
def make_wavelet_noise_data(nscale=0.1, ns=2048, padlength=512, dt=0.05, npoles=3, corners=[0.08, 0.8]): wn = TimeSeries(ns) wn.t0 = 0.0 wn.dt = dt wn.tref = TimeReferenceType.Relative wn.live = True nd = ns + 2 * padlength y = nscale * randn(nd) sos = signal.butter(npoles, corners, btype='bandpass', output='sos', fs=1.0 / dt) y = signal.sosfilt(sos, y) for i in range(ns): wn.data[i] = y[i + padlength] return (wn)
def test_TimeSeries(): ts = TimeSeries() ts.npts = 100 ts.t0 = 0.0 ts.dt = 0.001 ts.live = 1 ts.tref = TimeReferenceType.Relative ts.data.append(1.0) ts.data.append(2.0) ts.data.append(3.0) ts.data.append(4.0) ts.sync_npts() assert ts.npts == 104 assert ts.npts == ts["npts"] ts += ts for i in range(4): ts.data[i] = i * 0.5 ts_copy = pickle.loads(pickle.dumps(ts)) assert ts.data == ts_copy.data assert ts.data[3] == 1.5 assert ts.data[103] == 8 assert ts.time(100) == 0.1 assert ts.sample_number(0.0998) == 100
def test_operators(): d = _CoreTimeSeries(10) d1 = make_constant_data_ts(d, nsamp=10) dsave = _CoreTimeSeries(d1) d = _CoreTimeSeries(6) d2 = make_constant_data_ts(d, t0=-0.2, nsamp=6, val=2.0) dsave = _CoreTimeSeries(d1) d1 += d2 assert np.allclose(d1.data, [3, 3, 3, 3, 1, 1, 1, 1, 1, 1]) d1 = _CoreTimeSeries(dsave) d = d1 + d2 assert np.allclose(d.data, [3, 3, 3, 3, 1, 1, 1, 1, 1, 1]) d1 = _CoreTimeSeries(dsave) d1 *= 2.5 assert np.allclose(d1.data, [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5]) d3 = TimeSeries(10) d4 = TimeSeries(6) d3 = make_constant_data_ts(d3, nsamp=10) d4 = make_constant_data_ts(d4, t0=-0.2, nsamp=6, val=2.0) dsave = _CoreTimeSeries(d3) d3 = TimeSeries(dsave) d3 += d4 assert np.allclose(d3.data, [3, 3, 3, 3, 1, 1, 1, 1, 1, 1]) d3 = TimeSeries(dsave) d = d3 + d4 assert np.allclose(d.data, [3, 3, 3, 3, 1, 1, 1, 1, 1, 1]) d1 = _CoreTimeSeries(dsave) d3 = TimeSeries(dsave) d3 *= 2.5 assert np.allclose(d3.data, [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5]) x = np.linspace(-0.7, 1.2, 20) for t in x: d3 = TimeSeries(dsave) d4.t0 = t d3 += d4 # These are selected asserts of the incremental test above # visually d4 moves through d3 as the t0 value advance. Assert # tests end member: skewed left, inside, and skewed right d3 = TimeSeries(dsave) d4.t0 = -0.7 # no overlap test d3 += d4 assert np.allclose(d3.data, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) d3 = TimeSeries(dsave) d4.t0 = -0.3 # overlap left d3 += d4 assert np.allclose(d3.data, [3, 3, 3, 1, 1, 1, 1, 1, 1, 1]) d3 = TimeSeries(dsave) d4.t0 = 0.3 # d4 inside d3 test d3 += d4 assert np.allclose(d3.data, [1, 1, 1, 3, 3, 3, 3, 3, 3, 1]) d3 = TimeSeries(dsave) d4.t0 = 0.7 # partial overlap right d3 += d4 assert np.allclose(d3.data, [1, 1, 1, 1, 1, 1, 1, 3, 3, 3]) d3 = TimeSeries(dsave) d4.t0 = 1.0 # no overlap test right d3 += d4 assert np.allclose(d3.data, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) # Repeat the same test for Seismogram objects # This section is edited cut-paste of above # Intentionally do not test _CoreSeismogram directly because # currently if it works for Seismogram it will for _CoreSeismogram d = _CoreSeismogram(10) d1 = make_constant_data_seis(d, nsamp=10) dsave = _CoreSeismogram(d1) d = _CoreSeismogram(6) d2 = make_constant_data_seis(d, t0=-0.2, nsamp=6, val=2.0) dsave = _CoreSeismogram(d1) d1 += d2 assert np.allclose( d1.data, np.array([ [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) d1 = _CoreSeismogram(dsave) d = d1 + d2 assert np.allclose( d.data, np.array([ [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) d1 = _CoreSeismogram(dsave) d1 *= 2.5 assert np.allclose( d1.data, np.array([ [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5], [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5], [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5], ]), ) d3 = Seismogram(10) d4 = Seismogram(6) d3 = make_constant_data_seis(d3, nsamp=10) d4 = make_constant_data_seis(d4, t0=-0.2, nsamp=6, val=2.0) dsave = Seismogram(d3) d3 += d4 assert np.allclose( d3.data, np.array([ [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) d3 = Seismogram(dsave) d = d3 + d4 assert np.allclose( d.data, np.array([ [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [3.0, 3.0, 3.0, 3.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) d3 = Seismogram(dsave) d3 *= 2.5 assert np.allclose( d1.data, np.array([ [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5], [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5], [2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5], ]), ) x = np.linspace(-0.7, 1.2, 20) for t in x: d3 = Seismogram(dsave) d4.t0 = t d3 += d4 # These are selected asserts of the incremental test above # visually d4 moves through d3 as the t0 value advance. Assert # tests end member: skewed left, inside, and skewed right d3 = Seismogram(dsave) d4.t0 = -0.7 # no overlap test d3 += d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], ]), ) d3 = Seismogram(dsave) d4.t0 = -0.3 # overlap left d3 += d4 assert np.allclose( d3.data, np.array([ [3, 3, 3, 1, 1, 1, 1, 1, 1, 1], [3, 3, 3, 1, 1, 1, 1, 1, 1, 1], [3, 3, 3, 1, 1, 1, 1, 1, 1, 1], ]), ) d3 = Seismogram(dsave) d4.t0 = 0.3 # d4 inside d3 test d3 += d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, 3, 3, 3, 3, 3, 3, 1], [1, 1, 1, 3, 3, 3, 3, 3, 3, 1], [1, 1, 1, 3, 3, 3, 3, 3, 3, 1], ]), ) d3 = Seismogram(dsave) d4.t0 = 0.7 # partial overlap right d3 += d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, 1, 1, 1, 1, 3, 3, 3], [1, 1, 1, 1, 1, 1, 1, 3, 3, 3], [1, 1, 1, 1, 1, 1, 1, 3, 3, 3], ]), ) d3 = Seismogram(dsave) d4.t0 = 1.0 # no overlap test right d3 += d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], ]), ) # Repeat exactly for - test but different numeric results # just omit *= tests d = _CoreTimeSeries(10) d1 = make_constant_data_ts(d, nsamp=10) dsave = _CoreTimeSeries(d1) d = _CoreTimeSeries(6) d2 = make_constant_data_ts(d, t0=-0.2, nsamp=6, val=2.0) dsave = _CoreTimeSeries(d1) d1 -= d2 assert np.allclose(d1.data, [-1, -1, -1, -1, 1, 1, 1, 1, 1, 1]) d1 = _CoreTimeSeries(dsave) d = d1 - d2 assert np.allclose(d.data, [-1, -1, -1, -1, 1, 1, 1, 1, 1, 1]) d3 = TimeSeries(10) d4 = TimeSeries(6) d3 = make_constant_data_ts(d3, nsamp=10) d4 = make_constant_data_ts(d4, t0=-0.2, nsamp=6, val=2.0) dsave = _CoreTimeSeries(d3) d3 = TimeSeries(dsave) d3 -= d4 assert np.allclose(d3.data, [-1, -1, -1, -1, 1, 1, 1, 1, 1, 1]) d3 = TimeSeries(dsave) d = d3 - d4 assert np.allclose(d.data, [-1, -1, -1, -1, 1, 1, 1, 1, 1, 1]) x = np.linspace(-0.7, 1.2, 20) for t in x: d3 = TimeSeries(dsave) d4.t0 = t d3 -= d4 # These are selected asserts of the incremental test above # visually d4 moves through d3 as the t0 value advance. Assert # tests end member: skewed left, inside, and skewed right d3 = TimeSeries(dsave) d4.t0 = -0.7 # no overlap test d3 -= d4 assert np.allclose(d3.data, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) d3 = TimeSeries(dsave) d4.t0 = -0.3 # overlap left d3 -= d4 assert np.allclose(d3.data, [-1, -1, -1, 1, 1, 1, 1, 1, 1, 1]) d3 = TimeSeries(dsave) d4.t0 = 0.3 # d4 inside d3 test d3 -= d4 assert np.allclose(d3.data, [1, 1, 1, -1, -1, -1, -1, -1, -1, 1]) d3 = TimeSeries(dsave) d4.t0 = 0.7 # partial overlap right d3 -= d4 assert np.allclose(d3.data, [1, 1, 1, 1, 1, 1, 1, -1, -1, -1]) d3 = TimeSeries(dsave) d4.t0 = 1.0 # no overlap test right d3 -= d4 assert np.allclose(d3.data, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) # Repeat the same test for Seismogram objects # This section is edited cut-paste of above # Intentionally do not test _CoreSeismogram directly because # currently if it works for Seismogram it will for _CoreSeismogram d = _CoreSeismogram(10) d1 = make_constant_data_seis(d, nsamp=10) dsave = _CoreSeismogram(d1) d = _CoreSeismogram(6) d2 = make_constant_data_seis(d, t0=-0.2, nsamp=6, val=2.0) dsave = _CoreSeismogram(d1) d1 -= d2 assert np.allclose( d1.data, np.array([ [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) d1 = _CoreSeismogram(dsave) d = d1 - d2 assert np.allclose( d.data, np.array([ [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) d3 = Seismogram(10) d4 = Seismogram(6) d3 = make_constant_data_seis(d3, nsamp=10) d4 = make_constant_data_seis(d4, t0=-0.2, nsamp=6, val=2.0) dsave = Seismogram(d3) d3 -= d4 assert np.allclose( d3.data, np.array([ [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) d3 = Seismogram(dsave) d = d3 - d4 assert np.allclose( d.data, np.array([ [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [-1.0, -1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], ]), ) x = np.linspace(-0.7, 1.2, 20) for t in x: d3 = Seismogram(dsave) d4.t0 = t d3 -= d4 # These are selected asserts of the incremental test above # visually d4 moves through d3 as the t0 value advance. Assert # tests end member: skewed left, inside, and skewed right d3 = Seismogram(dsave) d4.t0 = -0.7 # no overlap test d3 -= d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], ]), ) d3 = Seismogram(dsave) d4.t0 = -0.3 # overlap left d3 -= d4 assert np.allclose( d3.data, np.array([ [-1, -1, -1, 1, 1, 1, 1, 1, 1, 1], [-1, -1, -1, 1, 1, 1, 1, 1, 1, 1], [-1, -1, -1, 1, 1, 1, 1, 1, 1, 1], ]), ) d3 = Seismogram(dsave) d4.t0 = 0.3 # d4 inside d3 test d3 -= d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, -1, -1, -1, -1, -1, -1, 1], [1, 1, 1, -1, -1, -1, -1, -1, -1, 1], [1, 1, 1, -1, -1, -1, -1, -1, -1, 1], ]), ) d3 = Seismogram(dsave) d4.t0 = 0.7 # partial overlap right d3 -= d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, 1, 1, 1, 1, -1, -1, -1], [1, 1, 1, 1, 1, 1, 1, -1, -1, -1], [1, 1, 1, 1, 1, 1, 1, -1, -1, -1], ]), ) d3 = Seismogram(dsave) d4.t0 = 1.0 # no overlap test right d3 -= d4 assert np.allclose( d3.data, np.array([ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], ]), )