@@ -921,6 +921,7 @@ def test_get_residue_axes_from_topology_no_neighbor_bonds_uses_cached_indices(
921921 np .testing .assert_allclose (rot_axes , np .eye (3 ) * 2.0 )
922922 np .testing .assert_allclose (center , np .array ([9.0 , 8.0 , 7.0 ]))
923923 np .testing .assert_allclose (moi , np .array ([3.0 , 2.0 , 1.0 ]))
924+
924925 get_principal .assert_called_once ()
925926
926927
@@ -947,7 +948,10 @@ def test_get_residue_axes_from_topology_neighbor_bonds_uses_molecule_axes(
947948 monkeypatch .setattr (ax , "get_molecule_axes" , get_molecule )
948949
949950 trans_axes , rot_axes , center , moi = ax .get_residue_axes_from_topology (
950- u = universe , mol = mol , residue_atoms = residue_atoms , topology = topology
951+ u = universe ,
952+ mol = mol ,
953+ residue_atoms = residue_atoms ,
954+ topology = topology ,
951955 )
952956
953957 make_whole .assert_called_once_with (mol .atoms )
@@ -978,6 +982,7 @@ def test_get_UA_axes_from_topology_multiple_heavy_uses_cached_indices_and_box(
978982
979983 get_principal = MagicMock (return_value = (np .eye (3 ) * 2.0 ))
980984 get_bonded = MagicMock (return_value = (np .eye (3 ) * 4.0 , np .array ([1.0 , 1.0 , 1.0 ])))
985+
981986 monkeypatch .setattr (ax , "get_principal_axes_from_group" , get_principal )
982987 monkeypatch .setattr (ax , "get_bonded_axes_from_topology" , get_bonded )
983988
@@ -2172,3 +2177,44 @@ def test_get_non_terminal_axes_3points(monkeypatch):
21722177
21732178 assert np .allclose (centre , [1 , 0 , 0 ])
21742179 assert np .allclose (axes , 3 * np .eye (3 ))
2180+
2181+
2182+ def test_get_residue_axes_all_atom_MOI (monkeypatch ):
2183+ ax = AxesCalculator ()
2184+ u = MagicMock ()
2185+ u .dimensions = np .array ([10.0 , 10.0 , 10.0 , 90 , 90 , 90 ])
2186+ residue = u .select_atoms ("resindex 1" )
2187+ residue .__len__ .return_value = 5
2188+ monkeypatch .setattr ("CodeEntropy.levels.axes.make_whole" , lambda _ag : None )
2189+ atoms = _FakeAtomGroup (
2190+ [
2191+ _atom (index = 0 , mass = 12.0 , pos = (1 , 0 , 0 )),
2192+ _atom (index = 1 , mass = 12.0 , pos = (0 , 1 , 0 )),
2193+ _atom (index = 2 , mass = 12.0 , pos = (0 , 0 , 1 )),
2194+ _atom (index = 3 , mass = 1.0 , pos = (0 , 0 , 0 )),
2195+ _atom (index = 4 , mass = 1.0 , pos = (1 , 1 , 1 )),
2196+ ],
2197+ positions = np .array ([[1 , 0 , 0 ], [0 , 1 , 0 ], [0 , 0 , 1 ], [0 , 0 , 0 ], [1 , 1 , 1 ]]),
2198+ )
2199+ residue .atoms .positions = atoms .positions
2200+ residue .atoms .masses = atoms .masses
2201+
2202+ def _select_atoms (q ):
2203+ if q .startswith ("resindex" ):
2204+ return atoms [0 :2 ]
2205+
2206+ u .atoms .select_atoms .side_effect = _select_atoms
2207+ monkeypatch .setattr (ax , "get_principal_axes_from_group" , lambda _ag : 2 * np .eye (3 ))
2208+ monkeypatch .setattr (
2209+ ax ,
2210+ "get_non_terminal_axes" ,
2211+ lambda residue , edges , dimensions : ([1 , 0 , 0 ], np .eye (3 )),
2212+ )
2213+ trans_axes , rot_axes , rot_center , moi = ax .get_residue_axes (
2214+ data_container = u , index = 1 , relative_index = 0 , residue = None
2215+ )
2216+
2217+ assert np .allclose (trans_axes , 2 * np .eye (3 ))
2218+ assert np .allclose (rot_axes , np .eye (3 ))
2219+ assert np .allclose (rot_center , [1 , 0 , 0 ])
2220+ assert np .allclose (moi , [26 , 38 , 38 ])
0 commit comments