def serialize(self, rm): """ Serialize rupture model to NRML file """ srcm = SourceModelXMLWriter(None) with NRMLFile(self.dest, 'w') as fh: root = etree.Element( 'nrml', nsmap=SERIALIZE_NS_MAP ) if isinstance(rm, ComplexFaultRuptureModel): rm_elem = etree.SubElement(root, 'complexFaultRupture') mag = etree.SubElement(rm_elem, 'magnitude') mag.text = str(rm.magnitude) rake = etree.SubElement(rm_elem, 'rake') rake.text = str(rm.rake) hypocenter = etree.SubElement(rm_elem, 'hypocenter', attrib={'lon': rm.hypocenter[0], 'lat': rm.hypocenter[1], 'depth': rm.hypocenter[2]}) srcm._append_complex_fault_geom(rm_elem, rm.geometry) elif isinstance(rm, SimpleFaultRuptureModel): rm_elem = etree.SubElement(root, 'simpleFaultRupture') mag = etree.SubElement(rm_elem, 'magnitude') mag.text = str(rm.magnitude) rake = etree.SubElement(rm_elem, 'rake') rake.text = str(rm.rake) hypocenter = etree.SubElement(rm_elem, 'hypocenter', attrib={'lon': rm.hypocenter[0], 'lat': rm.hypocenter[1], 'depth': rm.hypocenter[2]}) srcm._append_simple_fault_geom(rm_elem, rm.geometry) else: raise ValueError('Rupture model %s not recognized' % rm.__class__) fh.write(etree.tostring(root, pretty_print=True, xml_declaration=True, encoding='UTF-8'))