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
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')
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)
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 = []