def upgrade_file(path, multipoint): """Upgrade to the latest NRML version""" node0 = nrml.read(path, chatty=False)[0] shutil.copy(path, path + '.bak') # make a backup of the original file tag = striptag(node0.tag) gml = True if tag == 'vulnerabilityModel': vf_dict, cat_dict = get_vulnerability_functions_04(path) # below I am converting into a NRML 0.5 vulnerabilityModel node0 = Node( 'vulnerabilityModel', cat_dict, nodes=[obj_to_node(val) for val in vf_dict.values()]) gml = False elif tag == 'fragilityModel': node0 = read_nrml.convert_fragility_model_04( nrml.read(path)[0], path) gml = False elif tag == 'sourceModel': node0 = nrml.read(path)[0] dic = groupby(node0.nodes, operator.itemgetter('tectonicRegion')) node0.nodes = [Node('sourceGroup', dict(tectonicRegion=trt, name="group %s" % i), nodes=srcs) for i, (trt, srcs) in enumerate(dic.items(), 1)] if multipoint: sourceconverter.update_source_model(node0, path + '.bak') with open(path, 'wb') as f: nrml.write([node0], f, gml=gml)
def upgrade_file(path, multipoint): """Upgrade to the latest NRML version""" node0 = nrml.read(path)[0] shutil.copy(path, path + '.bak') # make a backup of the original file tag = striptag(node0.tag) gml = True if tag == 'vulnerabilityModel': vf_dict, cat_dict = get_vulnerability_functions_04(path) # below I am converting into a NRML 0.5 vulnerabilityModel node0 = Node('vulnerabilityModel', cat_dict, nodes=[obj_to_node(val) for val in vf_dict.values()]) gml = False elif tag == 'fragilityModel': node0 = read_nrml.convert_fragility_model_04(nrml.read(path)[0], path) gml = False elif tag == 'sourceModel': node0 = nrml.read(path)[0] dic = groupby(node0.nodes, operator.itemgetter('tectonicRegion')) node0.nodes = [ Node('sourceGroup', dict(tectonicRegion=trt, name="group %s" % i), nodes=srcs) for i, (trt, srcs) in enumerate(dic.items(), 1) ] if multipoint: sourceconverter.update_source_model(node0, path + '.bak') with open(path, 'wb') as f: nrml.write([node0], f, gml=gml)
def test(self): npd = PMF([(0.5, NodalPlane(1, 20, 3)), (0.5, NodalPlane(2, 2, 4))]) hd = PMF([(1, 14)]) mesh = Mesh(numpy.array([0, 1]), numpy.array([0.5, 1])) mmfd = MultiMFD('incrementalMFD', size=2, min_mag=[4.5], bin_width=[2.0], occurRates=[[.3, .1], [.4, .2, .1]]) mps = MultiPointSource('mp1', 'multi point source', 'Active Shallow Crust', mmfd, PeerMSR(), 1.0, 10, 20, npd, hd, mesh) # test the splitting splits = list(mps) self.assertEqual(len(splits), 2) for split in splits: self.assertEqual(split.grp_id, mps.grp_id) got = obj_to_node(mps).to_str() print(got) exp = '''\ multiPointSource{id='mp1', name='multi point source'} multiPointGeometry gml:posList [0.0, 0.5, 1.0, 1.0] upperSeismoDepth 10 lowerSeismoDepth 20 magScaleRel 'PeerMSR' ruptAspectRatio 1.0 multiMFD{kind='incrementalMFD', size=2} bin_width [2.0] min_mag [4.5] occurRates [0.3, 0.1, 0.4, 0.2, 0.1] lengths [2, 3] nodalPlaneDist nodalPlane{dip=20, probability=0.5, rake=3, strike=1} nodalPlane{dip=2, probability=0.5, rake=4, strike=2} hypoDepthDist hypoDepth{depth=14, probability=1.0} ''' self.assertEqual(got, exp) # test serialization to and from hdf5 tmp = general.gettemp(suffix='.hdf5') with hdf5.File(tmp, 'w') as f: f[mps.source_id] = mps with hdf5.File(tmp, 'r') as f: f[mps.source_id] # test the bounding box bbox = mps.get_bounding_box(maxdist=100) numpy.testing.assert_almost_equal( (-0.8994569916564479, -0.39932, 1.8994569916564479, 1.89932), bbox)
def test(self): npd = PMF([(0.5, NodalPlane(1, 20, 3)), (0.5, NodalPlane(2, 2, 4))]) hd = PMF([(1, 14)]) mesh = Mesh(numpy.array([0, 1]), numpy.array([0.5, 1])) mmfd = MultiMFD('incrementalMFD', size=2, min_mag=[4.5], bin_width=[2.0], occurRates=[[.3, .1], [.4, .2, .1]]) mps = MultiPointSource('mp1', 'multi point source', 'Active Shallow Crust', mmfd, PeerMSR(), 1.0, 10, 20, npd, hd, mesh) # test the splitting splits = list(mps) self.assertEqual(len(splits), 2) for split in splits: self.assertEqual(split.src_group_id, mps.src_group_id) got = obj_to_node(mps).to_str() print(got) exp = '''\ multiPointSource{id='mp1', name='multi point source', tectonicRegion='Active Shallow Crust'} multiPointGeometry gml:posList [0.0, 0.5, 1.0, 1.0] upperSeismoDepth 10 lowerSeismoDepth 20 magScaleRel 'PeerMSR' ruptAspectRatio 1.0 multiMFD{kind='incrementalMFD', size=2} bin_width [2.0] min_mag [4.5] occurRates [0.3, 0.1, 0.4, 0.2, 0.1] lengths [2, 3] nodalPlaneDist nodalPlane{dip=20, probability=0.5, rake=3, strike=1} nodalPlane{dip=2, probability=0.5, rake=4, strike=2} hypoDepthDist hypoDepth{depth=14, probability=1.0} ''' self.assertEqual(got, exp) # test serialization to and from hdf5 tmp = general.gettemp(suffix='.hdf5') with hdf5.File(tmp, 'w') as f: f[mps.source_id] = mps with hdf5.File(tmp, 'r') as f: f[mps.source_id] # test the bounding box bbox = mps.get_bounding_box(maxdist=100) numpy.testing.assert_almost_equal( (-0.8994569916564479, -0.39932, 1.8994569916564479, 1.89932), bbox)
def test(self): npd = PMF([(0.5, NodalPlane(1, 20, 3)), (0.5, NodalPlane(2, 2, 4))]) hd = PMF([(1, 14)]) mesh = Mesh(numpy.array([0, 1]), numpy.array([0.5, 1])) tom = PoissonTOM(50.) mmfd = MultiMFD('incrementalMFD', size=2, min_mag=[4.5], bin_width=[2.0], occurRates=[[.3, .1], [.4, .2, .1]]) mps = MultiPointSource('mp1', 'multi point source', 'Active Shallow Crust', mmfd, 2.0, PeerMSR(), 1.0, tom, 10, 20, npd, hd, mesh) mps.src_group_id = 1 # test the splitting splits = list(split_source(mps)) self.assertEqual(len(splits), 2) for split in splits: self.assertEqual(split.src_group_id, mps.src_group_id) got = obj_to_node(mps).to_str() print(got) self.assertEqual(got, '''\ multiPointSource{id='mp1', name='multi point source', tectonicRegion='Active Shallow Crust'} multiPointGeometry gml:posList [0, 0.5, 1, 1.0] upperSeismoDepth 10 lowerSeismoDepth 20 magScaleRel 'PeerMSR' ruptAspectRatio 1.0 multiMFD{kind='incrementalMFD', size=2} bin_width [2.0] min_mag [4.5] occurRates [0.29999999999999999, 0.10000000000000001, 0.40000000000000002, 0.20000000000000001, 0.10000000000000001] lengths [2, 3] nodalPlaneDist nodalPlane{dip=20, probability=0.5, rake=3, strike=1} nodalPlane{dip=2, probability=0.5, rake=4, strike=2} hypoDepthDist hypoDepth{depth=14, probability=1.0} ''')
def test(self): npd = PMF([(0.5, NodalPlane(1, 20, 3)), (0.5, NodalPlane(2, 2, 4))]) hd = PMF([(1, 14)]) mesh = Mesh(numpy.array([0, 1]), numpy.array([0.5, 1])) tom = PoissonTOM(50.) mmfd = MultiMFD('incrementalMFD', min_mag=[4.5, 4.5], bin_width=[2.0, 2.0], occurRates=[[.3, .1], [.4, .2, .1]]) mps = MultiPointSource('mp1', 'multi point source', 'Active Shallow Crust', mmfd, 2.0, PeerMSR(), 1.0, tom, 10, 20, npd, hd, mesh) mps.src_group_id = 1 # test the splitting splits = list(split_source(mps)) self.assertEqual(len(splits), 2) for split in splits: self.assertEqual(split.src_group_id, mps.src_group_id) self.assertEqual(obj_to_node(mps).to_str(), '''\ multiPointSource{id='mp1', name='multi point source', tectonicRegion='Active Shallow Crust'} multiPointGeometry gml:posList [0, 0.5, 1, 1.0] upperSeismoDepth 10 lowerSeismoDepth 20 magScaleRel 'PeerMSR' ruptAspectRatio 1.0 multiMFD{kind='incrementalMFD'} bin_width [2.0, 2.0] min_mag [4.5, 4.5] occurRates [0.3, 0.1, 0.4, 0.2, 0.1] lengths [2, 3] nodalPlaneDist nodalPlane{dip=20, probability=0.5, rake=3, strike=1} nodalPlane{dip=2, probability=0.5, rake=4, strike=2} hypoDepthDist hypoDepth{depth=14, probability=1.0} ''')
def to_xml(self): """ Convert the source into an XML string, very useful for debugging """ from openquake.hazardlib import nrml, sourcewriter return nrml.to_string(sourcewriter.obj_to_node(self))