示例#1
0
文件: glue.py 项目: woxin5295/kiwi
    def make_receiver_weights(self, seis, base_source):

        base_source = source.Source('circular',
                                    time=base_source['time'],
                                    depth=base_source['depth'],
                                    radius=0.,
                                    moment=7.0e18,
                                    rise_time=base_source['rise-time'])

        zero_source = base_source.clone()
        zero_source['moment'] = 0.0
        seis.set_source(zero_source)
        seis.set_synthetic_reference()
        seis.set_source(base_source)

        strike_grid = ('strike', -180., 150., 30.)
        dip_grid = ('dip', 0., 90., 30.)
        slip_rake_grid = ('slip-rake', -180., 150., 30.)
        sdr_grid = gridsearch.MisfitGrid(
            base_source, [strike_grid, dip_grid, slip_rake_grid])

        sdr_grid.compute(seis)

        means = sdr_grid.get_mean_misfits_by_r()
        means /= num.mean(means[means > 0.])
        dweights = num.where(means > 0., 1. / means, 0.)

        # reset reference seismograms
        seis.set_ref_seismograms(self._ref_seismogram_stem, 'mseed')

        return dweights
示例#2
0
    def __call__(self):

        # Change strike within Snuffler with the added scroll bar.
        #strike = 0
        #dip = 90
        #rake = 0
        #moment = 7.00e20
        depth = 3000
        rise_time = 1
        scale = 1E21
        mxx = 1. * scale
        mxy = 1. * scale
        myz = 1. * scale
        mxz = 1. * scale

        #explosion source
        source_params = dict(
            zip([
                'mxx', 'myy', 'mzz', 'mxy', 'mxz', 'myz', 'depth', 'rise-time'
            ], [mxx, mxx, mxx, mxy, mxz, myz, depth, rise_time]))

        s = source.Source(sourcetype='moment_tensor',
                          sourceparams=source_params)

        #strike dip rake
        #s = source.Source('bilateral',
        #sourceparams_str ='0 0 0 %g %g %g %g %g 0 0 0 0 1 %g' % (depth, moment, strike, dip, rake, rise_time))

        self.seis.set_source(s)
        recs = self.seis.get_receivers_snapshot(which_seismograms=('syn', ),
                                                which_spectra=(),
                                                which_processing='tapered')

        trs = []
        for rec in recs:
            for t in rec.get_traces():
                t.shift(rise_time * 0.5)
                trs.append(t)

        io.save(
            trs,
            'mseeds/%(network)s_%(station)s_%(location)s_%(channel)s.mseed')

        # Create event:
        ref_event = model.Event(lat=self.olat,
                                lon=self.olon,
                                depth=depth,
                                time=self.otime,
                                name='Reference Event')
        synthetic_event_marker = gui_util.EventMarker(event=ref_event)
        gui_util.Marker.save_markers([synthetic_event_marker],
                                     'reference_marker.txt')
示例#3
0
def to_kiwi_source(source):
    from tunguska import source as kiwi_source

    return kiwi_source.Source(
        time=source.time + source.length / source.velocity / 2.,
        depth=source.depth,
        moment=source.moment,
        strike=source.strike,
        dip=source.dip,
        slip_rake=source.rake,
        length_a=(1. - source.nucleation_x)/2. * source.length,
        length_b=(source.nucleation_x - -1.)/2. * source.length,
        width=source.width,
        rise_time=source.stf.duration)
示例#4
0
    for dist in distances:
        lat, lon = orthodrome.ne_to_latlon(olat, olon, dist, 0.)
        r = receiver.Receiver(lat, lon, components='ned')
        receivers.append(r)

    db = gfdb.Gfdb('benchdb')

    seis = seismosizer.Seismosizer(hosts=['localhost'] * 4)
    seis.set_database(db)
    seis.set_effective_dt(0.1)
    seis.set_local_interpolation('bilinear')
    seis.set_receivers(receivers)
    seis.set_source_location(olat, olon, 0.0)

    s = source.Source(
        'bilateral',
        sourceparams_str='0 0 0 5000 1e12  91 87 164 0 0 0 0 2500 0.2')

    # s = source.Source('bilateral',
    #    sourceparams_str='0 0 0 5000 1e12  91 87 164 0 600 600 600 2500 0.2')

    seis.set_source(s)
    seis.set_synthetic_reference()
    seis.set_ignore_sigint('T')
    seis.set_floating_shiftrange(0, -1.0, 1.0)
    seis.set_misfit_method('floating_l1norm')

    seis.output_seismograms('seis', 'mseed', 'synthetics', 'plain')

    done = []