Exemple #1
0
    def testContinuousDownsample(self):

        y = num.random.random(1000)

        for (dt1, dt2) in [(0.1, 1.0), (0.2, 1.0), (0.5, 1.0), (0.2, 0.4),
                           (0.4, 1.2)]:

            for tadd in (0.0, 0.01, 0.2, 0.5, 0.7, 0.75):
                a = trace.Trace(tmin=sometime + tadd, deltat=dt1, ydata=y)
                bs = [
                    trace.Trace(location='b',
                                tmin=sometime + i * dt1 * 100 + tadd,
                                deltat=dt1,
                                ydata=y[i * 100:(i + 1) * 100])
                    for i in range(10)
                ]

                a.downsample_to(dt2, demean=False, snap=True)
                c2s = []
                downsampler = trace.co_downsample_to(trace.co_list_append(c2s),
                                                     dt2)

                for b in bs:
                    c = downsampler.send(b)
                    c2s.append(c)

                downsampler.close()
                assert (round(c2s[0].tmin / dt2) * dt2 - c2s[0].tmin) \
                    / dt1 < 0.5001
Exemple #2
0
    def testMisfitOfSameTracesZero(self):
        y = num.random.random(10000)
        y -= max(y) * 0.5
        t1 = trace.Trace(tmin=0, ydata=y, deltat=0.01)
        t2 = trace.Trace(tmin=0, ydata=y, deltat=0.01)
        # ttraces = [t2]
        fresponse = trace.FrequencyResponse()
        taper = trace.CosFader(xfade=2.)
        norms = [1, 2]
        domains = ['time_domain', 'frequency_domain', 'envelope', 'absolute']
        setups = [
            trace.MisfitSetup(norm=n,
                              taper=taper,
                              domain=domain,
                              filter=fresponse) for domain in domains
            for n in norms
        ]

        for setup in setups:
            m, n, tr, tc = t1.misfit(candidate=t2, setup=setup, debug=True)
            if isinstance(tr, trace.Trace):
                self.assertEqual(tr.tmin, tc.tmin)
                self.assertTrue(all(tr.get_ydata() == tc.get_ydata()))
            else:
                self.assertTrue(all(tc == tr))

            self.assertEqual(m, 0., 'misfit\'s m of equal traces is != 0')
Exemple #3
0
    def testCorrelate(self):

        for la, lb, mode, res in [([0, 1, .5, 0, 0], [0, 0, 0, 1,
                                                      0], 'same', 0.3),
                                  ([0, 1, .5, 0, 0, 0], [0, 1,
                                                         0], 'valid', 0.1),
                                  ([0, 1, .5], [0, 0, 0, 1, 0,
                                                0], 'full', 0.3)]:

            for ia in range(5):
                for ib in range(5):

                    ya = floats(la + [0] * ia)
                    yb = floats(lb + [0] * ib)

                    a = trace.Trace(tmin=10., deltat=0.1, ydata=ya)
                    b = trace.Trace(tmin=10.1, deltat=0.1, ydata=yb)
                    c = trace.correlate(a, b, mode=mode)

                    if not numeq(c.max(), [res, 1.], 0.0001):
                        print
                        print mode
                        print len(ya), ya
                        print len(yb), yb
                        print c.ydata, c.max()
Exemple #4
0
    def testFFTCorrelate(self):
        for na in range(1, 20):
            for nb in range(1, 20):
                a1 = num.random.random(na)
                a2 = num.random.random(nb)

                t1 = trace.Trace(station='t1', ydata=a1)
                t2 = trace.Trace(station='t2', ydata=a2)

                for mode in 'full', 'same', 'valid':
                    c1 = trace.correlate(t1, t2, mode=mode)
                    c2 = trace.correlate(t1, t2, mode=mode, use_fft=True)
                    c1.set_station('c1')
                    c2.set_station('c2')
                    assert c1.get_ydata().size == c2.get_ydata().size
                    d = num.abs(c1.get_ydata() - c2.get_ydata())

                    if not num.all(d < 1e-5):
                        assert mode == 'same'

                        assert abs(abs(c1.tmin - c2.tmin) - 1.0) < 1e-5
                        assert abs(abs(c1.tmax - c2.tmax) - 1.0) < 1e-5

                        tmin = max(c1.tmin, c2.tmin)
                        tmax = min(c1.tmax, c2.tmax)
                        c1.chop(tmin, tmax, include_last=True)
                        c2.chop(tmin, tmax, include_last=True)

                        d = num.abs(c1.get_ydata() - c2.get_ydata())
                        assert (num.all(d < 1e-5))
                    else:
                        assert num.all(d < 1e-5)
Exemple #5
0
    def testCropping(self):
        n = 20
        tmin = sometime
        t = trace.Trace(tmin=tmin,
                        deltat=0.05,
                        ydata=num.ones(n, dtype=num.float))
        tmax = t.tmax
        t.ydata[:3] = 0.0
        t.ydata[-3:] = 0.0
        t.crop_zeros()
        assert abs(t.tmin - (tmin + 0.05 * 3)) < 0.05 * 0.01
        assert abs(t.tmax - (tmax - 0.05 * 3)) < 0.05 * 0.01
        t = trace.Trace(tmin=tmin,
                        deltat=0.05,
                        ydata=num.zeros(n, dtype=num.float))
        ok = False
        try:
            t.crop_zeros()
        except trace.NoData:
            ok = True

        assert ok

        t = trace.Trace(tmin=tmin,
                        deltat=0.05,
                        ydata=num.ones(n, dtype=num.float))
        t.crop_zeros()
        assert t.ydata.size == 20
Exemple #6
0
 def testProjection(self):
     s2 = math.sqrt(2.)
     ndata = num.array([s2,s2], dtype=num.float)
     edata = num.array([s2,0.], dtype=num.float)
     ddata = num.array([1.,-1.], dtype=num.float)
     dt = 1.0
     n = trace.Trace(deltat=dt, ydata=ndata, tmin=100, channel='N')
     e = trace.Trace(deltat=dt, ydata=edata, tmin=100, channel='E')
     d = trace.Trace(deltat=dt, ydata=ddata, tmin=100, channel='D')
     azi = 45.
     cazi = math.cos(azi*d2r)
     sazi = math.sin(azi*d2r)
     rot45 = num.array([[cazi, sazi, 0],[-sazi,cazi, 0], [0,0,-1]], dtype=num.float)
     C = lambda x: model.Channel(x)
     rotated = trace.project([n,e,d], rot45, [C('N'),C('E'),C('D')], [C('R'),C('T'),C('U')])
     for tr in rotated:
         if tr.channel == 'R':
             r = tr
         if tr.channel == 'T':
             t = tr
         if tr.channel == 'U':
             u = tr
     
     assert( num.all(r.get_ydata() - num.array([ 2., 1. ]) < 1.0e-6 ) )
     assert( num.all(t.get_ydata() - num.array([ 0., -1 ]) < 1.0e-6 ) )
     assert( num.all(u.get_ydata() - num.array([ -1., 1. ]) < 1.0e-6 ) )
     
     deps = trace.project_dependencies(rot45, [C('N'),C('E'),C('D')], [C('R'),C('T'),C('U')])
     assert( set(['N','E']) == set(deps['R']) and set(['N', 'E']) == set(deps['T']) and
             set(['D']) == set(deps['U']) )
     
     # should work though no horizontals given
     projected = trace.project([d], rot45, [C('N'),C('E'),C('D')], [C('R'),C('T'),C('U')])
     if tr.channel == 'U': u = tr 
     assert( num.all(u.get_ydata() - num.array([ -1., 1. ]) < 1.0e-6 ) )
Exemple #7
0
    def test_trace_equal(self):
        ydata = num.arange(10)
        tr1 = trace.Trace(ydata=ydata)
        tr2 = trace.Trace(ydata=ydata)

        tr_set = set([tr1, tr2])

        assert len(tr_set), 2
Exemple #8
0
 def testEqualizeSamplingRates(self):
     y = num.random.random(1000)
     t1 = trace.Trace(tmin=0, ydata=y, deltat=0.01)
     t2 = trace.Trace(tmin=0, ydata=y, deltat=0.5)
     t1_new, t2_new = trace.equalize_sampling_rates(t1, t2)
     self.assertEqual(
         t1_new.deltat, t2_new.deltat,
         'Equalization of sampling rates failed: dt1=%s, dt2=%s' %
         (t1.deltat, t2.deltat))
Exemple #9
0
 def testAdd2(self):
     for toff in num.random.random(100):
         t1 = trace.Trace(tmin=sometime,
                          deltat=0.05,
                          ydata=num.ones(5, dtype=num.float))
         t2 = trace.Trace(tmin=sometime - toff * 0.1,
                          deltat=0.05,
                          ydata=num.ones(5, dtype=num.float))
         t1.add(t2, interpolate=False)
Exemple #10
0
    def testCorrelateNormalization(self):

        ya = floats([1, 2, 1])
        yb = floats([0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 2, 1])

        a = trace.Trace(tmin=sometime, deltat=0.1, ydata=ya)
        b = trace.Trace(tmin=sometime, deltat=0.1, ydata=yb)

        c_ab = trace.correlate(a, b)
        c_ab2 = trace.correlate(a, b, normalization='gliding')
        c_ba = trace.correlate(b, a)
        c_ba2 = trace.correlate(b, a, normalization='gliding')
        assert numeq(c_ab.ydata, c_ba.ydata[::-1], 0.001)
        assert numeq(c_ab2.ydata, c_ba2.ydata[::-1], 0.001)
Exemple #11
0
 def testLQTRotation(self):
     ba = 225.
     inci = 90. - num.arctan(1. / num.sqrt(2.)) * 180. / num.pi
     in_channels = list('ZEN')
     zdata = num.ones(2)
     edata = num.ones(2)
     ndata = num.ones(2)
     z = trace.Trace(deltat=1., ydata=zdata, tmin=1., channel='Z')
     e = trace.Trace(deltat=1., ydata=edata, tmin=1., channel='E')
     n = trace.Trace(deltat=1., ydata=ndata, tmin=1., channel='N')
     l, q, t = trace.rotate_to_lqt([z, n, e], ba, inci, in_channels)
     assert (num.all(l.get_ydata() - num.sqrt(3.) < 1.0e-12))
     assert (num.all(t.get_ydata() < 1.0e-12))
     assert (num.all(q.get_ydata() < 1.0e-12))
Exemple #12
0
 def testAdd(self):
     n = 20
     tmin = sometime
     deltat = 0.05
     for distortion in [ -0.2, 0.2 ]:
         for ioffs, result in [ (  1, [0.,1.,1.,1.,0.]),
                             ( -1, [1.,1.,0.,0.,0.]),
                             (  3, [0.,0.,0.,1.,1.]),
                             (  10, [0.,0.,0.,0.,0.]),
                             (  -10, [0.,0.,0.,0.,0.]) ]:
                             
             a = trace.Trace(tmin=tmin, deltat=deltat, ydata=num.zeros(5,dtype=num.float))
             b = trace.Trace(tmin=tmin+(ioffs+distortion)*deltat, deltat=deltat, ydata=num.ones(3,dtype=num.float))
             a.add(b, interpolate=False)
             assert numeq(a.ydata, result, 0.001)
Exemple #13
0
 def testFiltering(self):
     tmin = sometime
     b = time.time()
     for i in range(100):
         n = 10000
         t = trace.Trace(tmin=tmin, deltat=0.05, ydata=num.ones(n,dtype=num.float))
         t.lowpass(4,  5.)
         t.highpass(4, 0.1)
     d1 = time.time() - b
     b = time.time()
     for i in range(100):
         n = 10000
         t = trace.Trace(tmin=tmin, deltat=0.05, ydata=num.ones(n,dtype=num.float))
         t.bandpass_fft(0.1, 5.)
     d2 = time.time() - b
Exemple #14
0
def iload(filename, load_data=True):
    from pyrocko import mseed_ext

    have_zero_rate_traces = False
    try:
        traces = []
        for tr in mseed_ext.get_traces(filename, load_data):
            network, station, location, channel = tr[1:5]
            tmin = float(tr[5]) / float(mseed_ext.HPTMODULUS)
            tmax = float(tr[6]) / float(mseed_ext.HPTMODULUS)
            try:
                deltat = reuse(1.0 / float(tr[7]))
            except ZeroDivisionError as e:
                have_zero_rate_traces = True
                continue

            ydata = tr[8]

            traces.append(
                trace.Trace(network, station, location, channel, tmin, tmax,
                            deltat, ydata))

        for tr in traces:
            yield tr

    except (OSError, mseed_ext.MSeedError) as e:
        raise FileLoadError(str(e) + ' (file: %s)' % filename)

    if have_zero_rate_traces:
        logger.warning('Ignoring traces with sampling rate of zero in file %s '
                       '(maybe LOG traces)' % filename)
Exemple #15
0
    def testExtend(self):
        tmin = sometime
        t = trace.Trace(tmin=tmin, ydata=num.ones(10, dtype=num.float))
        tmax = t.tmax
        t.extend(tmin - 10.2, tmax + 10.7)
        assert int(round(tmin - t.tmin)) == 10
        assert int(round(t.tmax - tmax)) == 11
        assert num.all(t.ydata[:10] == num.zeros(10, dtype=num.float))
        assert num.all(t.ydata[-11:] == num.zeros(11, dtype=num.float))
        assert num.all(t.ydata[10:-11] == num.ones(10, dtype=num.float))

        t = trace.Trace(tmin=tmin, ydata=num.arange(10, dtype=num.float) + 1.)
        t.extend(tmin - 10.2, tmax + 10.7, fillmethod='repeat')
        assert num.all(t.ydata[:10] == num.ones(10, dtype=num.float))
        assert num.all(t.ydata[-11:] == num.zeros(11, dtype=num.float) + 10.)
        assert num.all(t.ydata[10:-11] == num.arange(10, dtype=num.float) + 1.)
Exemple #16
0
    def testRotation(self):
        s2 = math.sqrt(2.)
        ndata = num.array([s2, s2], dtype=num.float)
        edata = num.array([s2, 0.], dtype=num.float)
        dt = 1.0
        n = trace.Trace(deltat=dt, ydata=ndata, tmin=100, channel='N')
        e = trace.Trace(deltat=dt, ydata=edata, tmin=100, channel='E')
        rotated = trace.rotate([n, e], 45., ['N', 'E'], ['R', 'T'])
        for tr in rotated:
            if tr.channel == 'R':
                r = tr
            if tr.channel == 'T':
                t = tr

        assert numeq(r.get_ydata(), [2., 1.], 1.0e-6)
        assert numeq(t.get_ydata(), [0., -1], 1.0e-6)
Exemple #17
0
    def get_traces(self):

        station, network = self.get_station(), self.get_network()

        traces = []
        for icomp, comp in enumerate(self.components):
            channel = comp
            for (whichset, sgram) in zip(
                ('references', 'synthetics'),
                (self.ref_seismograms[icomp], self.syn_seismograms[icomp])):
                if sgram and len(sgram[0]) > 1:
                    starttime = sgram[0][0]
                    endtime = sgram[0][-1]
                    deltat = (endtime - starttime) / (len(sgram[0]) - 1)
                    data = sgram[1]
                    location = whichset
                    tr = trace.Trace(network,
                                     station,
                                     location,
                                     channel,
                                     tmin=starttime,
                                     tmax=endtime,
                                     deltat=deltat,
                                     ydata=data)

                    traces.append(tr)
        return traces
Exemple #18
0
 def to_trace(self):
     
     assert self.iftype == SacFile.header_name2num['itime']
     assert self.leven == True
     
     tmin = self.get_ref_time() + self.b
     tmax = tmin + self.delta*(self.npts-1)
     
     data =None
     if self.data:
         data = self.data[0]
         
     meta = {}
     exclude = ('b', 'e', 'knetwk', 'kstnm', 'khole', 'kcmpnm', 'delta', 'nzyear', 'nzjday', 'nzhour', 'nzmin', 'nzsec', 'nzmsec')
     for k in SacFile.header_keys:
         if k in exclude: continue
         v = self.__dict__[k]
         if v is not None:
             meta[reuse(k)] = v
             
     return trace.Trace(nonetoempty(self.knetwk)[:2],
                               nonetoempty(self.kstnm)[:5],
                               nonetoempty(self.khole)[:2],
                               nonetoempty(self.kcmpnm)[:3],
                               tmin,
                               tmax,
                               self.delta,
                               data,
                               meta=meta)
Exemple #19
0
    def testIntegrationDifferentiation(self):

        tlen = 100.
        dt = 0.1
        n = int(tlen / dt)
        f = 0.5
        tfade = tlen / 10.

        xdata = num.arange(n) * dt
        ydata = num.sin(xdata * 2. * num.pi * f)
        a = trace.Trace(channel='A', deltat=dt, ydata=ydata)

        b = a.transfer(tfade, (0.0, 0.1, 2., 3.),
                       transfer_function=trace.IntegrationResponse())
        b.set_codes(channel='B')

        c = a.transfer(tfade, (0.0, 0.1, 2., 3.),
                       transfer_function=trace.DifferentiationResponse())
        c.set_codes(channel='C')

        eps = 0.001
        xdata = b.get_xdata()
        ydata = b.get_ydata()
        ydata_shouldbe = -num.cos(xdata * 2 * num.pi * f) / (2. * num.pi * f)
        assert num.amax(num.abs(ydata-ydata_shouldbe)) < eps, \
            'integration failed'

        xdata = c.get_xdata()
        ydata = c.get_ydata()
        ydata_shouldbe = num.cos(xdata * 2 * num.pi * f) * (2. * num.pi * f)
        assert num.amax(num.abs(ydata-ydata_shouldbe)) < eps, \
            'differentiation failed'
Exemple #20
0
    def iter_pyrocko_traces(self, load_data=True):
        for idata, d in enumerate(self.data):
            fn = os.path.join(d['dir'], d['dfile'])
            logger.debug('converting %s', d['dfile'])
            try:
                if load_data:
                    ydata = self.read_wf_file(os.path.join(self.superdir,
                                                           fn), d['nsamp'],
                                              storage_types[d['datatype']],
                                              d['foff'])
                else:
                    ydata = None

            except IOError as e:
                if e.errno == 2:
                    logger.debug(e)
                    continue
                else:
                    raise e
            dt = 1. / d['samprate']
            yield trace.Trace(station=d['sta'],
                              channel=d['chan'],
                              deltat=dt,
                              tmin=d['time'],
                              tmax=d['time'] + d['nsamp'] / d['samprate'],
                              ydata=ydata)
Exemple #21
0
    def testProjectionsZOnly(self):
        km = 1000.

        ev = model.Event(lat=-10, lon=150., depth=0.0)

        for azi in num.linspace(0., 360., 37):
            lat, lon = orthodrome.ne_to_latlon(ev.lat, ev.lon,
                                               10. * km * math.cos(azi),
                                               10. * km * math.sin(azi))

            sta = model.Station(lat=lat, lon=lon)
            sta.set_event_relative_data(ev)
            sta.set_channels_by_name('BHZ', 'BHN', 'BHE')
            traces = [
                trace.Trace(channel='BHZ', ydata=num.array([1.0])),
            ]

            projected = []
            for m, in_channels, out_channels in sta.guess_projections_to_enu():
                projected.extend(
                    trace.project(traces, m, in_channels, out_channels))

            def g(traces, cha):
                for tr in traces:
                    if tr.channel == cha:
                        return tr

            z = g(projected, 'U')
            assert (near(z.ydata[0], 1.0, 0.001))
Exemple #22
0
    def testWriteRead(self):
        now = time.time()
        n = 10
        deltat = 0.1
        
        networks = [ rn(2) for i in range(5) ]
        
        traces1 = [ trace.Trace(rc(networks), rn(4), rn(2), rn(3), tmin=now+i*deltat*n*2, deltat=deltat, ydata=num.arange(n, dtype=num.int32), mtime=now)
            for i in range(3) ]
            
        tempdir = tempfile.mkdtemp()

        for format in ('mseed', 'sac', 'yaff'):
            fns = io.save(traces1, pjoin(tempdir, '%(network)s_%(station)s_%(location)s_%(channel)s'), format=format)

            for fn in fns:
                assert io.detect_format(fn) == format

            traces2 = []
            for fn in fns:
                traces2.extend(io.load(fn, format='detect'))
                
            for tr in traces1:
                assert tr in traces2, 'failed for format %s' % format
                
            for fn in fns:
                os.remove(fn)

        shutil.rmtree(tempdir)
Exemple #23
0
def iload(filename, load_data=True, subformat='l4'):

    try:
        npad = 4
        if subformat is not None:
            try:
                endianness = {'l': '<', 'b': '>'}[subformat[0]]
                if len(subformat) > 1:
                    npad = int(subformat[1:])
            except:
                raise SeisanFileError('Bad subformat specification: "%s"' %
                                      subformat)
        else:
            endianness = '<'

        f = open(filename, 'r')
        try:
            read_file_header(f, npad=npad)

        except util.UnpackError, e:
            raise SeisanFileError('Error loading header from file %s: %s' %
                                  (filename, str(e)))

        try:
            itrace = 0
            while True:
                try:
                    (net, sta, loc, cha, tmin, tflag, deltat, nsamples,
                     sample_bytes, lat, lon, elevation,
                     gain) = read_channel_header(f, npad=npad)

                    data = read_channel_data(f,
                                             endianness,
                                             sample_bytes,
                                             nsamples,
                                             gain,
                                             load_data,
                                             npad=npad)
                    tmax = None
                    if data is None:
                        tmax = tmin + (nsamples - 1) * deltat

                    t = trace.Trace(net,
                                    sta,
                                    loc,
                                    cha,
                                    tmin=tmin,
                                    tmax=tmax,
                                    deltat=deltat,
                                    ydata=data)
                    yield t
                except util.UnpackError, e:
                    raise SeisanFileError(
                        'Error loading trace %i from file %s: %s' %
                        (itrace, filename, str(e)))

                itrace += 1

        except EOF:
            pass
Exemple #24
0
 def process(self):
     try:
         line = self.slink.stdout.readline()
         
         if not line:
             return False
         
         toks = line.split(', ')
         if len(toks) != 1:
             nslc = tuple(toks[0].split('_'))
             if len(nslc) == 3: nslc = nslc[0], nslc[1], '', nslc[2]
             nsamples = int(toks[1].split()[0])
             rate = float(toks[2].split()[0])
             st,sms = toks[3].split()[0].split('.')
             us = int(sms)
             tstamp = calendar.timegm(time.strptime(st,'%Y,%j,%H:%M:%S'))+us*0.000001
             if nsamples != 0:
                 self.header = nslc, nsamples, rate, tstamp
         else:
             if self.header:
                 self.vals.extend([ float(x) for x in line.split() ])
                 
                 if len(self.vals) == self.header[1]:
                     nslc, nsamples, rate, tstamp = self.header
                     deltat = 1.0/rate
                     net, sta, loc, cha = nslc
                     tr = trace.Trace(network=net, station=sta, location=loc, channel=cha, tmin=tstamp, deltat=deltat, ydata=num.array(self.vals))
                     self.got_trace(tr)
                     self.vals = []
                     self.header = None
     
         return True
     
     except:
         return False
Exemple #25
0
    def to_trace(self, data):
        tmin = self.begintime - suds_tzero
        deltat = 1.0 / self.rate

        if data is None:
            tmax = tmin + (self.length - 1) * deltat
            arr = None
        else:
            tmax = None
            if self.datatype == 'l':
                arr = num.fromstring(data, dtype=num.int32)
            elif self.datatype == 'i':
                arr = num.fromstring(data, dtype=num.int16)
            elif self.datatype == 'f':
                arr = num.fromstring(data, dtype=num.float32)
            elif self.datatype == 'd':
                arr = num.fromstring(data, dtype=num.float64)
            else:
                raise SudsError(
                    'data type "%s" not implemented yet' % self.datatype)

            if self.length != arr.size:
                raise SudsError('found and reported number of samples differ')

        return trace.Trace(
            self.dt_name.network.rstrip('\0 '),
            self.dt_name.st_name.rstrip('\0 '),
            '',
            self.dt_name.component.rstrip('\0 '),
            ydata=arr,
            deltat=deltat,
            tmin=tmin,
            tmax=tmax)
Exemple #26
0
 def to_trace(self):
     return trace.Trace(
         '', self.kstnm, '', '',
         self.ref_time,
         self.ref_time+self.delta*(self.npts-1),
         self.delta,
         self.data)
Exemple #27
0
    def testMisfitBox(self):

        ydata = num.zeros(9)
        ydata[3:6] = 1.0

        deltat = 0.5

        tr = trace.Trace(ydata=ydata, deltat=0.5, tmin=0.0)

        tshiftmin = -(tr.tmax - tr.tmin) * 2
        tshiftmax = (tr.tmax - tr.tmin) * 2

        tshifts = num.linspace(
            tshiftmin, tshiftmax,
            int(round((tshiftmax - tshiftmin) / deltat)) + 1)

        candidates = []
        for tshift in tshifts:
            trc = tr.copy()
            trc.shift(tshift)
            candidates.append(trc)

        trace.MisfitSetup(norm=2,
                          taper=trace.CosTaper(tr.tmin, tr.tmin, tr.tmax,
                                               tr.tmax),
                          domain='time_domain')
Exemple #28
0
def iload(filename, load_data=True):
    with open(filename, 'r') as f:
        read_xw01(f)
        try:
            while True:
                h = read_wid1(f)
                (tmin, nsamples, sta, chid, cha, sample_rate, _, data_format,
                 diff_flag, gain) = h[:10]

                deltat = 1.0 / sample_rate
                if load_data:
                    ydata, checksum = read_dat1_chk1(f, data_format, diff_flag,
                                                     nsamples)
                    tmax = None
                else:
                    skip_dat1_chk1(f, data_format, diff_flag, nsamples)
                    ydata = None
                    tmax = tmin + (nsamples - 1) * deltat

                yield trace.Trace('',
                                  sta,
                                  '',
                                  cha,
                                  tmin=tmin,
                                  tmax=tmax,
                                  deltat=deltat,
                                  ydata=ydata)

        except EOF:
            pass
Exemple #29
0
    def work_block(self, firstx, lastx, nx, z):
        # dummy implementation, should be overloaded in subclass
        if nx > 1:
            dx = (lastx - firstx) / (nx - 1)
        else:
            dx = 1.0
        traces = []
        for ix in xrange(nx):
            x = firstx + ix * dx
            for i in xrange(poel_components):
                ig = i + 1
                data = num.random.random(100)
                tmin = 0.
                deltat = self.gfdb_config['dt']
                rawtrace = trace.Trace('',
                                       '%i' % ix,
                                       '',
                                       '%i' % ig,
                                       tmin=tmin,
                                       deltat=deltat,
                                       ydata=data)

                tr = GFTrace(x, z, ig, rawtrace)
                traces.append(tr)

        return traces
Exemple #30
0
    def get_traces(self):

        fn = self.config.get_output_filename(self.tempdir)
        data = num.loadtxt(fn, skiprows=1, dtype=num.float)
        nsamples, ntraces = data.shape
        deltat = (data[-1, 0] - data[0, 0]) / (nsamples - 1)
        toffset = data[0, 0]

        tred = self.config.time_reduction
        rec = self.config.receiver
        tmin = rec.tstart + toffset + deltat + tred

        traces = []
        for itrace, comp in enumerate(self.config.components):
            # qseis2d gives velocity-integrate to displacement
            # integration removes one sample, add it again in front
            displ = cumtrapz(num.concatenate((num.zeros(1), data[:,
                                                                 itrace + 1])),
                             dx=deltat)

            tr = trace.Trace('',
                             '%04i' % itrace,
                             '',
                             comp,
                             tmin=tmin,
                             deltat=deltat,
                             ydata=displ,
                             meta=dict(distance=rec.distance, azimuth=0.0))

            traces.append(tr)

        return traces