Example #1
0
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)
Example #2
0
    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
Example #3
0
    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
Example #4
0
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