Skip to content

Commit c3ea0ba

Browse files
committed
Tests: converter add_atom_to_xyz_using_internal_coords()
added test for add_atom_to_xyz_using_internal_coords
1 parent e19e95c commit c3ea0ba

1 file changed

Lines changed: 108 additions & 1 deletion

File tree

arc/species/converter_test.py

Lines changed: 108 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from arc.common import ARC_PATH, almost_equal_coords, almost_equal_coords_lists, almost_equal_lists
2323
from arc.exceptions import ConverterError
2424
from arc.species.species import ARCSpecies
25-
from arc.species.vectors import calculate_dihedral_angle
25+
from arc.species.vectors import calculate_dihedral_angle, calculate_param
2626
from arc.species.zmat import _compare_zmats, xyz_to_zmat
2727

2828

@@ -5058,6 +5058,113 @@ def test_cluster_confs_by_rmsd(self):
50585058
xyzs3 = [nco_1, nco_2, nco_6, nco_7, nco_8, nco_9]
50595059
self.assertEqual(len(converter.cluster_confs_by_rmsd(xyzs3)), 4)
50605060

5061+
def test_add_atom_to_xyz_using_internal_coords(self):
5062+
"""Test the add_atom_to_xyz_using_internal_coords() function."""
5063+
xyz_1 = """ C -3.63243985 -0.48299420 -0.05541310
5064+
H -3.27244945 -1.49054926 -0.06723326
5065+
H -3.24128971 0.04543562 -0.89960709
5066+
H -4.70149255 -0.48565830 -0.10034895
5067+
C -3.17488405 0.21042224 1.24128129
5068+
H -3.53487445 1.21797729 1.25310144
5069+
H -3.56603419 -0.31800758 2.08547528
5070+
C -1.63624745 0.21425655 1.30595531
5071+
H -1.24509731 0.74268637 0.46176133
5072+
H -1.31833530 0.69604590 2.20690531"""
5073+
new_xyz_1 = converter.add_atom_to_xyz_using_internal_coords(xyz=xyz_1,
5074+
element='Cl',
5075+
r_index=7,
5076+
a_indices=(4, 7),
5077+
d_indices=(0, 4, 7),
5078+
r_value=1.77,
5079+
a_value=109.5,
5080+
d_value=-60.0,
5081+
)
5082+
expected_xyz_1 = {'symbols': ('C', 'H', 'H', 'H', 'C', 'H', 'H', 'C', 'H', 'H', 'Cl'),
5083+
'isotopes': (12, 1, 1, 1, 12, 1, 1, 12, 1, 1, 35),
5084+
'coords': ((-3.63243985, -0.4829942, -0.0554131), (-3.27244945, -1.49054926, -0.06723326),
5085+
(-3.24128971, 0.04543562, -0.89960709), (-4.70149255, -0.4856583, -0.10034895),
5086+
(-3.17488405, 0.21042224, 1.24128129), (-3.53487445, 1.21797729, 1.25310144),
5087+
(-3.56603419, -0.31800758, 2.08547528), (-1.63624745, 0.21425655, 1.30595531),
5088+
(-1.24509731, 0.74268637, 0.46176133), (-1.3183353, 0.6960459, 2.20690531),
5089+
(-1.0399130826377951, -1.4521481683234707, 1.2864453881141027))}
5090+
self.assertEqual(new_xyz_1, expected_xyz_1)
5091+
self.assertAlmostEqual(calculate_param(coords=new_xyz_1['coords'], atoms=[7, 10]), 1.77, places=2)
5092+
self.assertAlmostEqual(calculate_param(coords=new_xyz_1['coords'], atoms=[4, 7, 10]), 109.5, places=1)
5093+
self.assertAlmostEqual(calculate_param(coords=new_xyz_1['coords'], atoms=[0, 4, 7, 10]), 300, places=1)
5094+
5095+
new_xyz_2 = converter.add_atom_to_xyz_using_internal_coords(xyz=xyz_1,
5096+
element='Cl',
5097+
r_index=4,
5098+
a_indices=(4, 0),
5099+
d_indices=(0, 4, 7),
5100+
r_value=2.70,
5101+
a_value=61.46,
5102+
d_value=-60.0,
5103+
opt_method='BFGS',
5104+
)
5105+
self.assertEqual(new_xyz_2['coords'][-1], (-1.0966631688164716, -1.5123640474266677, 1.296181153302943))
5106+
self.assertAlmostEqual(calculate_param(coords=new_xyz_1['coords'], atoms=[4, 10]), 2.70, places=1)
5107+
self.assertAlmostEqual(calculate_param(coords=new_xyz_1['coords'], atoms=[4, 0, 10]), 61.46, places=0)
5108+
self.assertAlmostEqual(calculate_param(coords=new_xyz_1['coords'], atoms=[0, 4, 7, 10]), 300, places=1)
5109+
5110+
xyz_3 = """C -1.01765390 -0.08355112 0.05206009
5111+
O 0.22303684 -0.79051481 0.05294172
5112+
C 0.35773087 -1.66017412 -0.97863090
5113+
O -0.45608483 -1.87500387 -1.86208833
5114+
H -1.82486467 -0.81522856 0.14629516
5115+
H -1.06962462 0.60119223 0.90442455
5116+
H -1.14968688 0.45844916 -0.88969505
5117+
H 1.33643417 -2.15859899 -0.90083808"""
5118+
new_xyz_3 = converter.add_atom_to_xyz_using_internal_coords(xyz=xyz_3,
5119+
element='O',
5120+
r_index=2,
5121+
a_indices=(1, 2),
5122+
d_indices=(3, 7, 2),
5123+
r_value=1.85,
5124+
a_value=77.4,
5125+
d_value=140,
5126+
)
5127+
expected_xyz = {'symbols': ('C', 'O', 'C', 'O', 'H', 'H', 'H', 'H', 'O'),
5128+
'isotopes': (12, 16, 12, 16, 1, 1, 1, 1, 16),
5129+
'coords': ((-1.0176539, -0.08355112, 0.05206009), (0.22303684, -0.79051481, 0.05294172),
5130+
(0.35773087, -1.66017412, -0.9786309), (-0.45608483, -1.87500387, -1.86208833),
5131+
(-1.82486467, -0.81522856, 0.14629516), (-1.06962462, 0.60119223, 0.90442455),
5132+
(-1.14968688, 0.45844916, -0.88969505), (1.33643417, -2.15859899, -0.90083808),
5133+
(1.4828269120297688, -2.3770289575185632, 0.3030781302151979))}
5134+
self.assertEqual(new_xyz_3, expected_xyz)
5135+
self.assertAlmostEqual(calculate_param(coords=new_xyz_3['coords'], atoms=[2, 8]), 1.85, places=2)
5136+
self.assertAlmostEqual(calculate_param(coords=new_xyz_3['coords'], atoms=[1, 2, 8]), 77.4, places=1)
5137+
self.assertAlmostEqual(calculate_param(coords=new_xyz_3['coords'], atoms=[3, 7, 2, 8]), 140, places=1)
5138+
5139+
xyz_4 = """C 2.44505336 0.33426556 -0.05839486
5140+
C 1.22268719 -0.52813666 0.01896600
5141+
O 1.23293886 -1.74943142 -0.03929182
5142+
O 0.11391589 0.24824549 0.16222715
5143+
C -1.11109125 -0.48993657 0.24566449
5144+
C -2.25017001 0.49859954 0.40179846
5145+
H 2.37692031 0.99705687 -0.92466676
5146+
H 3.32902965 -0.29956749 -0.17330464
5147+
H 2.54916374 0.91324784 0.86263828
5148+
H -1.08105124 -1.15952384 1.11255293
5149+
H -1.25277743 -1.07595826 -0.66934869
5150+
H -2.28059310 1.18899674 -0.44763085
5151+
H -3.21043340 -0.02017141 0.47000585
5152+
H -2.11200849 1.10694712 1.30175876"""
5153+
new_xyz_4 = converter.add_atom_to_xyz_using_internal_coords(xyz=xyz_4,
5154+
element='O',
5155+
r_index=1,
5156+
a_indices=(3, 1),
5157+
d_indices=(2, 0, 1),
5158+
r_value=1.85,
5159+
a_value=77.4,
5160+
d_value=140,
5161+
)
5162+
self.assertEqual(new_xyz_4['coords'][-1], (1.89932405279869, 0.9989208520839763, 0.8144268165647406))
5163+
self.assertAlmostEqual(calculate_param(coords=new_xyz_4['coords'], atoms=[1, 14]), 1.85, places=2)
5164+
self.assertAlmostEqual(calculate_param(coords=new_xyz_4['coords'], atoms=[3, 1, 14]), 77.4, places=1)
5165+
self.assertAlmostEqual(calculate_param(coords=new_xyz_4['coords'], atoms=[2, 0, 1, 14]), 140, places=1)
5166+
5167+
50615168
@classmethod
50625169
def tearDownClass(cls):
50635170
"""

0 commit comments

Comments
 (0)