def _spgr(self) -> gemmi.SpaceGroup: if self.symmops: symm_ops = self.symmops else: symm_ops = self.symmops_from_spgr return gemmi.find_spacegroup_by_ops( gemmi.GroupOps([gemmi.Op(o) for o in symm_ops]))
def compare_hall_symops_with_sgtbx(self, hall, existing_group=True): cctbx_sg = sgtbx.space_group(hall) cctbx_triplets = set(m.as_xyz() for m in cctbx_sg.all_ops(mod=1)) gemmi_gops = gemmi.symops_from_hall(hall) self.assertEqual(len(gemmi_gops.sym_ops), cctbx_sg.order_p()) self.assertEqual(len(gemmi_gops.cen_ops), cctbx_sg.n_ltr()) self.assertEqual(len(gemmi_gops), cctbx_sg.order_z()) self.assertEqual(gemmi_gops.is_centric(), cctbx_sg.is_centric()) ctr = gemmi_gops.find_centering() self.assertEqual(ctr, cctbx_sg.conventional_centring_type_symbol()) gemmi_triplets = set(m.triplet() for m in gemmi_gops) self.assertEqual(cctbx_triplets, gemmi_triplets) gemmi_sg = gemmi.find_spacegroup_by_ops(gemmi_gops) if existing_group: self.assertEqual(gemmi_sg.point_group_hm(), cctbx_sg.point_group_type()) self.assertEqual(gemmi_sg.crystal_system_str(), cctbx_sg.crystal_system().lower()) self.assertEqual(gemmi_sg.is_sohncke(), cctbx_sg.is_chiral()) self.assertEqual(gemmi_sg.is_enantiomorphic(), cctbx_sg.type().is_enantiomorphic()) self.assertEqual(gemmi_sg.is_symmorphic(), cctbx_sg.type().is_symmorphic()) self.assertEqual(gemmi_sg.centring_type(), ctr) else: self.assertIsNone(gemmi_sg)
def test_groupops(self): gops = gemmi.GroupOps([gemmi.Op(t) for t in ['x, y, z', 'x, -y, z+1/2', 'x+1/2, y+1/2, z', 'x+1/2, -y+1/2, z+1/2']]) self.assertEqual(gops.find_centering(), 'C') self.assertEqual(len(gops), 4) self.assertEqual(gemmi.find_spacegroup_by_ops(gops).hm, 'C 1 c 1')
def test_operations(self): gops = gemmi.symops_from_hall('-P 2a 2ac (z,x,y)') self.assertEqual(set(gemmi.SpaceGroup('Pbaa').operations()), set(gops)) self.assertEqual(gemmi.find_spacegroup_by_ops(gops).hm, 'P b a a')