def gen_noise_events(targets, synthetics, engine, noise_sources=1, delay=40): noise_events = [] noise_sources = num.random.choice(10, 1) for i in range(0, noise_sources[0]): event = gen_random_tectonic_event(i, magmin=-1., magmax=0.1) time = rand(event.time - delay, event.time + delay) mt = MomentTensor.random_dc(magnitude=event.magnitude) source = DCSource(lat=event.lat, lon=event.lon, depth=event.depth, strike=mt.strike1, dip=mt.dip1, rake=mt.rake1, time=time, magnitude=event.magnitude) response = engine.process(source, targets) noise_traces = response.pyrocko_traces() for tr, tr_noise in zip(synthetics, noise_traces): noise = trace.Trace(deltat=tr.deltat, tmin=tr.tmin, ydata=tr_noise.ydata) choice_ev = num.random.choice(5, 1) if choice_ev == 0: tr.add(noise) else: pass noise_events.append(event) return (noise_events)
def testKagan(self): eps = 0.01 for _ in xrange(500): mt1 = MomentTensor.random_mt(magnitude=-1.0) assert 0.0 == kagan_angle(mt1, mt1) mt1 = MomentTensor.random_dc(magnitude=-1.0) assert 0.0 == kagan_angle(mt1, mt1) angle = random.random() * 90.0 rot = rotation_from_angle_and_axis(angle, random_axis()) mrot = rot.T * mt1.m() * rot mt2 = MomentTensor(m=mrot) angle2 = kagan_angle(mt1, mt2) assert abs(angle - angle2) < eps
def testKagan(self): eps = 0.01 for _ in range(500): mt1 = MomentTensor.random_mt(magnitude=-1.0) assert 0.0 == kagan_angle(mt1, mt1) mt1 = MomentTensor.random_dc(magnitude=-1.0) assert 0.0 == kagan_angle(mt1, mt1) angle = random.random() * 90. rot = rotation_from_angle_and_axis(angle, random_axis()) mrot = rot.T * mt1.m() * rot mt2 = MomentTensor(m=mrot) angle2 = kagan_angle(mt1, mt2) assert abs(angle - angle2) < eps
def rand_source(event, SourceType="MT", pressure=None, volume=None): if event.moment_tensor is None: mt = MomentTensor.random_dc(magnitude=event.magnitude) event.moment_tensor = mt else: mt = event.moment_tensor if SourceType == "MT": source = MTSource(lat=event.lat, lon=event.lon, north_shift=event.north_shift, east_shift=event.east_shift, depth=event.depth, m6=mt.m6(), time=event.time) if SourceType == "explosion": source = ExplosionSource(lat=event.lat, lon=event.lon, north_shift=event.north_shift, east_shift=event.east_shift, depth=event.depth, time=event.time, moment=mt.moment) if SourceType == "VLVD": if volume is None or volume == 0: volume = num.random.uniform(0.001, 10000) pressure = pressure source = VLVDSource( lat=event.lat, lon=event.lon, north_shift=event.north_shift, east_shift=event.east_shift, depth=event.depth, azimuth=mt.strike1, dip=mt.dip1, time=event.time, volume_change=volume, # here synthetic volume change clvd_moment=mt.moment) # ? if SourceType == "PorePressurePointSource": source = PorePressurePointSource( lat=event.lat, lon=event.lon, north_shift=event.north_shift, east_shift=event.east_shift, depth=event.depth, pp=num.random.uniform(1, 1), # here change in pa time=event.time) # ? if SourceType == "PorePressureLineSource": source = PorePressureLineSource( lat=event.lat, lon=event.lon, north_shift=event.north_shift, east_shift=event.east_shift, depth=event.depth, azimuth=event.strike, dip=mt.dip1, pp=num.random.uniform(1, 1), # here change in pa time=event.time, length=num.random.uniform(1, 20) * km) # scaling!) if SourceType == "Rectangular": length = num.random.uniform(0.0001, 0.2) * km width = num.random.uniform(0.0001, 0.2) * km strike, dip, rake = pmt.random_strike_dip_rake() event.moment_tensor = MomentTensor(strike=strike, dip=dip, rake=rake) source = RectangularSource(lat=event.lat, lon=event.lon, north_shift=event.north_shift, east_shift=event.east_shift, depth=event.depth, strike=strike, dip=dip, rake=rake, length=length, width=width, time=event.time, magnitude=event.magnitude) return source, event