def test_get_all_site_summaries(self): """Test getting all the site summaries.""" sa = SiteAnalyzer(self.tin_dioxide) data = sa.get_all_site_summaries() self.assertEqual(len(data.keys()), 2) self.assertEqual(data[0]["element"], "Sn4+") self.assertEqual(data[0]["geometry"]["type"], "octahedral") self.assertAlmostEqual(data[0]["geometry"]["likeness"], 0.9349776258427136) self.assertEqual(len(data[0]["nn"]), 6) self.assertEqual(len(data[0]["nnn"]["corner"]), 8) self.assertEqual(len(data[0]["nnn"]["edge"]), 2) self.assertEqual(data[0]["poly_formula"], "O6") self.assertEqual(data[0]["sym_labels"], (1,))
def test_get_all_site_summaries(self): """Test getting all the site summaries.""" sa = SiteAnalyzer(self.tin_dioxide) data = sa.get_all_site_summaries() self.assertEqual(len(data.keys()), 2) self.assertEqual(data[0]['element'], 'Sn4+') self.assertEqual(data[0]['geometry']['type'], 'octahedral') self.assertAlmostEqual(data[0]['geometry']['likeness'], 0.9349776258427136) self.assertEqual(len(data[0]['nn']), 6) self.assertEqual(len(data[0]['nnn']['corner']), 8) self.assertEqual(len(data[0]['nnn']['edge']), 2) self.assertEqual(data[0]['poly_formula'], 'O6') self.assertEqual(data[0]['sym_labels'], (1, ))
def condense_structure(self, structure: Structure) -> Dict[str, Any]: """Condenses the structure into an intermediate dict representation. Args: structure: A pymatgen structure object. Returns: The condensed structure information. The data is formatted as a :obj:`dict` with a fixed set of keys. An up-to-date example of the, the condensed representation of MoS2 given in the documentation. See: ``robocrystallographer/docs_rst/source/format.rst`` or https://hackingmaterials.lbl.gov/robocrystallographer/format.html """ # sort so we can give proper symmetry labels structure = structure.get_sorted_structure() # wrap all site coords into unit cell structure.translate_sites(range(structure.num_sites), [1, 1, 1]) sga = SpacegroupAnalyzer(structure, symprec=self.symprec) if self.use_conventional_cell: structure = sga.get_conventional_standard_structure() else: structure = sga.get_symmetrized_structure() bonded_structure = self.near_neighbors.get_bonded_structure(structure) components = get_structure_components( bonded_structure, inc_orientation=True, inc_site_ids=True, inc_molecule_graph=True, ) dimensionality = max(c["dimensionality"] for c in components) mineral = self._condense_mineral(structure, components) formula = self._condense_formula(structure, components) structure_data = { "formula": formula, "spg_symbol": sga.get_space_group_symbol(), "crystal_system": sga.get_crystal_system(), "mineral": mineral, "dimensionality": dimensionality, } site_analyzer = SiteAnalyzer( bonded_structure, symprec=self.symprec, use_symmetry_equivalent_sites=self.use_symmetry_equivalent_sites, ) structure_data["sites"] = site_analyzer.get_all_site_summaries() structure_data[ "distances"] = site_analyzer.get_all_bond_distance_summaries() structure_data[ "angles"] = site_analyzer.get_all_connectivity_angle_summaries() structure_data[ "nnn_distances"] = site_analyzer.get_all_nnn_distance_summaries() component_summary, component_makeup = self._condense_components( components, sga, site_analyzer) structure_data["components"] = component_summary structure_data["component_makeup"] = component_makeup if components_are_vdw_heterostructure(components): hs_info = get_vdw_heterostructure_information( components, use_iupac_formula=self.use_iupac_formula, use_common_formulas=self.use_common_formulas, ) else: hs_info = None structure_data["vdw_heterostructure_info"] = hs_info return structure_data