def init(store_dir, variant): assert variant is None modelling_code_id = 'ahfullgreen' ahfull = AhfullgreenConfig() ahfull.time_region = (gf.Timing('begin-2'), gf.Timing('end+2')) ahfull.cut = (gf.Timing('begin-2'), gf.Timing('end+2')) store_id = os.path.basename(os.path.realpath(store_dir)) config = gf.meta.ConfigTypeA(id=store_id, ncomponents=10, sample_rate=20., receiver_depth=0 * km, source_depth_min=1 * km, source_depth_max=10 * km, source_depth_delta=1 * km, distance_min=1 * km, distance_max=20 * km, distance_delta=1 * km, earthmodel_1d=example_model(), modelling_code_id=modelling_code_id, tabulated_phases=[ gf.meta.TPDef(id='begin', definition='p'), gf.meta.TPDef(id='end', definition='s'), gf.meta.TPDef(id='p', definition='p'), gf.meta.TPDef(id='s', definition='s') ]) config.validate() return gf.store.Store.create_editables(store_dir, config=config, extra={'ahfullgreen': ahfull})
def init(store_dir, variant): if variant is None: variant = '2010beta' if ('qssp.' + variant) not in program_bins: raise gf.store.StoreError('unsupported qssp variant: %s' % variant) qssp = QSSPConfig(qssp_version=variant) qssp.time_region = ( gf.Timing('begin-50'), gf.Timing('end+100')) qssp.cut = ( gf.Timing('begin-50'), gf.Timing('end+100')) store_id = os.path.basename(os.path.realpath(store_dir)) config = gf.meta.ConfigTypeA( id=store_id, ncomponents=10, sample_rate=0.2, receiver_depth=0*km, source_depth_min=10*km, source_depth_max=20*km, source_depth_delta=10*km, distance_min=100*km, distance_max=1000*km, distance_delta=10*km, earthmodel_1d=cake.load_model(), modelling_code_id='qssp', tabulated_phases=[ gf.meta.TPDef( id='begin', definition='p,P,p\\,P\\,Pv_(cmb)p'), gf.meta.TPDef( id='end', definition='2.5'), gf.meta.TPDef( id='P', definition='!P'), gf.meta.TPDef( id='S', definition='!S'), gf.meta.TPDef( id='p', definition='!p'), gf.meta.TPDef( id='s', definition='!s')]) config.validate() return gf.store.Store.create_editables( store_dir, config=config, extra={'qssp': qssp})
class AhfullgreenConfig(Object): time_region = Tuple.T(2, gf.Timing.T(), default=(gf.Timing('-10'), gf.Timing('+890'))) cut = Tuple.T(2, gf.Timing.T(), optional=True) fade = Tuple.T(4, gf.Timing.T(), optional=True) def items(self): return dict(self.T.inamevals(self))
class QSSPConfig(Object): qssp_version = String.T(default='2010beta') time_region = Tuple.T(2, gf.Timing.T(), default=( gf.Timing('-10'), gf.Timing('+890'))) frequency_max = Float.T(optional=True) slowness_max = Float.T(default=0.4) antialiasing_factor = Float.T(default=0.1) # only available in 2017: switch_turning_point_filter = Int.T(default=0) max_pene_d1 = Float.T(default=2891.5) max_pene_d2 = Float.T(default=6371.0) earth_radius = Float.T(default=6371.0) switch_free_surf_reflection = Int.T(default=1) lowpass_order = Int.T(default=0, optional=True) lowpass_corner = Float.T(default=1.0, optional=True) bandpass_order = Int.T(default=0, optional=True) bandpass_corner_low = Float.T(default=1.0, optional=True) bandpass_corner_high = Float.T(default=1.0, optional=True) output_slowness_min = Float.T(default=0.0, optional=True) output_slowness_max = Float.T(optional=True) spheroidal_modes = Bool.T(default=True) toroidal_modes = Bool.T(default=True) # only available in 2010beta: cutoff_harmonic_degree_sd = Int.T(optional=True, default=0) cutoff_harmonic_degree_min = Int.T(default=0) cutoff_harmonic_degree_max = Int.T(default=25000) crit_frequency_sge = Float.T(default=0.0) crit_harmonic_degree_sge = Int.T(default=0) include_physical_dispersion = Bool.T(default=False) source_patch_radius = Float.T(default=0.0) cut = Tuple.T(2, gf.Timing.T(), optional=True) fade = Tuple.T(4, gf.Timing.T(), optional=True) relevel_with_fade_in = Bool.T(default=False) nonzero_fade_in = Bool.T(default=False) nonzero_fade_out = Bool.T(default=False) def items(self): return dict(self.T.inamevals(self))
def test_timing_defs(self): for s, d in [ ('100.0', dict(offset=100)), ('cake: P ', dict(offset=0.0, phases=['cake:P'])), ('iaspei: Pdiff', dict(phases=['iaspei:Pdiff'])), ('{iaspei: Pdiff}-50', dict(phases=['iaspei:Pdiff'], offset=-50.)), ('{cake: P | iaspei: Pdiff}-10', dict(offset=-10., phases=['cake:P', 'iaspei:Pdiff'])), ('first{cake: p | cake: P}', dict(phases=['cake:p', 'cake:P'], select='first')), ('first(p|P)-10', dict(phases=['stored:p', 'stored:P'], select='first', offset=-10.)), ('{stored:begin}-50', dict(phases=['stored:begin'], offset=-50.)) ]: t = gf.Timing(s) if 'phases' in d: for a, b in zip(d['phases'], t.phase_defs): self.assertEqual(a, b) if 'offset' in d: self.assertTrue(numeq(d['offset'], t.offset, 0.001)) if 'select' in d: self.assertEqual(d['select'], t.select)
return num.array(data, dtype=num.float) if __name__ == '__main__': engine = gf.get_engine() store_id = 'crust2_m5_hardtop_8Hz_fine' magnitude_min, magnitude_max = 3., 7. moment_tensor = None # random DC # moment_tensor = pmt.MomentTensor.from_values([strike, dip, rake]) stress_drop_min, stress_drop_max = 1.0e6, 10.0e6 rupture_velocity_min, rupture_velocity_max = 2500.*0.9, 3600.*0.9 depth_min, depth_max = 1.*km, 30.*km distance_min, distance_max = 100*km, 100*km measure_ML = wmeasure.AmplitudeMeasure( timing_tmin=gf.Timing('vel:8'), timing_tmax=gf.Timing('vel:2'), fmin=None, fmax=None, response=wmeasure.response_wa, components=['N', 'E'], quantity='velocity', maximum_method='peak_component') data = model( engine, store_id, magnitude_min, magnitude_max, moment_tensor, stress_drop_min, stress_drop_max, rupture_velocity_min, rupture_velocity_max, depth_min, depth_max,
def init(store_dir, variant, config_params=None): if variant is None: variant = '2010beta' if ('qssp.' + variant) not in program_bins: raise gf.store.StoreError('unsupported qssp variant: %s' % variant) qssp = QSSPConfig(qssp_version=variant) if variant != 'ppeg2017': qssp.time_region = ( gf.Timing('begin-50'), gf.Timing('end+100')) qssp.cut = ( gf.Timing('begin-50'), gf.Timing('end+100')) else: # variant == 'ppeg2017': qssp.frequency_max = 0.5 qssp.time_region = [ gf.Timing('-100'), gf.Timing('{stored:begin}+100')] qssp.cut = [ gf.Timing('-100'), gf.Timing('{stored:begin}+100')] qssp.antialiasing_factor = 1.0e-10 qssp.toroidal_modes = False qssp.cutoff_harmonic_degree_min = 2500 qssp.cutoff_harmonic_degree_max = 2500 qssp.crit_frequency_sge = 5.0 qssp.crit_harmonic_degree_sge = 50000 qssp.source_patch_radius = 10.0 qssp.bandpass_order = 6 qssp.bandpass_corner_low = 0.0 qssp.bandpass_corner_high = 0.125 store_id = os.path.basename(os.path.realpath(store_dir)) if variant == 'ppeg2017': quantity = 'acceleration' else: quantity = None if variant == 'ppeg2017': sample_rate = 4.0 else: sample_rate = 0.2 d = dict( id=store_id, ncomponents=10, component_scheme='elastic10', stored_quantity=quantity, sample_rate=sample_rate, receiver_depth=0*km, source_depth_min=10*km, source_depth_max=20*km, source_depth_delta=10*km, distance_min=100*km, distance_max=1000*km, distance_delta=10*km, earthmodel_1d=cake.load_model(), modelling_code_id='qssp', tabulated_phases=[ gf.meta.TPDef( id='begin', definition='p,P,p\\,P\\,Pv_(cmb)p'), gf.meta.TPDef( id='end', definition='2.5'), gf.meta.TPDef( id='P', definition='!P'), gf.meta.TPDef( id='S', definition='!S'), gf.meta.TPDef( id='p', definition='!p'), gf.meta.TPDef( id='s', definition='!s')]) if config_params is not None: d.update(config_params) config = gf.meta.ConfigTypeA(**d) config.validate() return gf.store.Store.create_editables( store_dir, config=config, extra={'qssp': qssp})