def setUp(self): # Set the source property self.src_mfd = mfdeven.EvenlyDiscretizedMFD(7.5, 1., [1.]) self.src_msr = msr.BaseMSR self.src_tom = tom.PoissonTOM(50) self.sarea = WC1994() self.upper_seismogenic_depth = 0. self.lower_seismogenic_depth = 40. self.dip = 90. self.rake = 0. self.mesh_spacing = 1. self.fault_trace_start = Point(0.0, 0.0) self.fault_trace_end = Point(1.0, 0.0) self.fault_trace_nodes = [self.fault_trace_start, self.fault_trace_end] # Set the fault trace self.fault_trace = Line(self.fault_trace_nodes)
def df2nrml(df, model_name): ''' Write pandas DataFrame of source models to NRML. Sources are twinned by magnitude to support alternative tectonic region types for large-magnitude events. ''' if model_name.endswith('.xml'): model_name = model_name[:-4] nrml_file = model_name.replace(' ', '_') + '.xml' aseismic = df.a == 0 if any(aseismic): print('Dropping zones with no seismicity from NRML: ' + ', '.join(str(item) for item in df.loc[aseismic].index)) df = df.loc[~aseismic].copy() df = add_name_id(df) df = twin_source_by_magnitude(df) _check_columns(df) df = natural_sort(df, by='id') # this may do nothing ... source_list = source_df_to_list(df) source_model = mtkSourceModel(name=model_name, sources=source_list) source_model = source_model.convert_to_oqhazardlib(tom.PoissonTOM(1.0)) # apply per-zone discretization for item in source_model: try: item.area_discretization = df.loc[df.id == item.source_id, 'discretization'].squeeze() except KeyError: pass print('Writing: %s' % os.path.abspath(nrml_file)) write_source_model(nrml_file, source_model, name=model_name) return source_model