Author: bugman Date: Mon Mar 19 06:27:21 2007 New Revision: 3233 URL: http://svn.gna.org/viewcvs/relax?rev=3233&view=rev Log: Fixed the generic_fns.residue.delete() function and its associated unit tests. An additional unit test for deletion using residue names has been added. Modified: 1.3/generic_fns/residue.py 1.3/test_suite/unit_tests/generic_fns/test_residue.py Modified: 1.3/generic_fns/residue.py URL: http://svn.gna.org/viewcvs/relax/1.3/generic_fns/residue.py?rev=3233&r1=3232&r2=3233&view=diff ============================================================================== --- 1.3/generic_fns/residue.py (original) +++ 1.3/generic_fns/residue.py Mon Mar 19 06:27:21 2007 @@ -114,7 +114,7 @@ def delete(res_id=None): """Function for deleting residues from the current data pipe. - @param res_id: The residue identifier string. + @param res_id: The molecule and residue identifier string. @type res_id: str """ @@ -130,11 +130,25 @@ # Molecule loop. for mol in molecule_loop(mol_token): + # List of indecies to delete. + indecies = [] + # Loop over the residues of the molecule. for i in xrange(len(mol.res)): # Remove the residue is there is a match. - if mol.res[i].num in residues: - mol.res[i].pop() + if mol.res[i].num in residues or mol.res[i].name in residues: + indecies.append(i) + + # Reverse the indecies. + indecies.reverse() + + # Delete the residues. + for index in indecies: + mol.res.pop(index) + + # Create an empty residue container if no residues remain. + if len(mol.res) == 0: + mol.res.add_item() class Residue: Modified: 1.3/test_suite/unit_tests/generic_fns/test_residue.py URL: http://svn.gna.org/viewcvs/relax/1.3/test_suite/unit_tests/generic_fns/test_residue.py?rev=3233&r1=3232&r2=3233&view=diff ============================================================================== --- 1.3/test_suite/unit_tests/generic_fns/test_residue.py (original) +++ 1.3/test_suite/unit_tests/generic_fns/test_residue.py Mon Mar 19 06:27:21 2007 @@ -27,7 +27,7 @@ from data import Data as relax_data_store from data.pipe_container import PipeContainer from generic_fns import residue -from relax_errors import RelaxError, RelaxNoRunError, RelaxRunError +from relax_errors import RelaxError, RelaxNoRunError, RelaxRunError, RelaxSpinSelectDisallowError @@ -143,29 +143,56 @@ self.assertRaises(RelaxError, residue.create, 1, 'Ala') - def test_delete(self): - """Test the deletion of a residue. - - The function used is generic_fns.residues.delete(). - """ - - # Create some residues and add some data to the spin containers. - residue.create(1, 'Ala') - residue.create(2, 'Ala') - residue.create(3, 'Ala') - residue.create(4, 'Ala') + def test_delete_name(self): + """Test residue deletion using residue name identifiers. + + The function used is generic_fns.residues.delete(). + """ + + # Create some residues and add some data to the spin containers. + residue.create(1, 'Ala') + residue.create(2, 'Ala') + residue.create(3, 'Ala') + residue.create(4, 'Gly') + relax_data_store['orig'].mol[0].res[3].spin[0].num = 111 + relax_data_store['orig'].mol[0].res[3].spin[0].x = 1 + + # Delete the first residue. + residue.delete(res_id=':Ala') + + # Test that the first residue is 4 Gly. + self.assertEqual(relax_data_store['orig'].mol[0].res[0].num, 4) + self.assertEqual(relax_data_store['orig'].mol[0].res[0].name, 'Gly') + self.assertEqual(relax_data_store['orig'].mol[0].res[0].spin[0].num, 111) + self.assert_(hasattr(relax_data_store['orig'].mol[0].res[0].spin[0], 'x')) + + + def test_delete_num(self): + """Test residue deletion using residue number identifiers. + + The function used is generic_fns.residues.delete(). + """ + + # Create some residues and add some data to the spin containers. + residue.create(1, 'Ala') + residue.create(2, 'Ala') + residue.create(3, 'Ala') + residue.create(4, 'Gly') relax_data_store['orig'].mol[0].res[3].spin[0].num = 111 relax_data_store['orig'].mol[0].res[3].spin[0].x = 1 # Delete the first residue. residue.delete(res_id=':1') - # Test that the residue no longer exists (and defaults back to the empty residue). - self.assertNotEqual(relax_data_store['orig'].mol[0].res[1].spin[0].num, 111) - self.assert_(not hasattr(relax_data_store['orig'].mol[0].res[1].spin[0], 'x')) - - # Delete the first residue. - residue.delete(res_id=':1') + # Test that the sequence. + self.assertEqual(relax_data_store['orig'].mol[0].res[0].num, 2) + self.assertEqual(relax_data_store['orig'].mol[0].res[0].name, 'Ala') + self.assertEqual(relax_data_store['orig'].mol[0].res[1].num, 3) + self.assertEqual(relax_data_store['orig'].mol[0].res[1].name, 'Ala') + self.assertEqual(relax_data_store['orig'].mol[0].res[2].num, 4) + self.assertEqual(relax_data_store['orig'].mol[0].res[2].name, 'Gly') + self.assertEqual(relax_data_store['orig'].mol[0].res[2].spin[0].num, 111) + self.assert_(hasattr(relax_data_store['orig'].mol[0].res[2].spin[0], 'x')) def test_delete_all(self): @@ -191,7 +218,7 @@ def test_delete_shift(self): - """Test the deletion of multiple residue. + """Test the deletion of multiple residues. The function used is generic_fns.residues.delete(). """ @@ -207,18 +234,18 @@ # Delete the first and third residues. residue.delete(res_id=':1,3') - # Test that the residue no longer exists (and defaults back to the empty residue). + # Test that the remaining residues. + self.assertEqual(relax_data_store['orig'].mol[0].res[0].num, 2) + self.assertEqual(relax_data_store['orig'].mol[0].res[1].num, 4) self.assertEqual(relax_data_store['orig'].mol[0].res[1].spin[0].num, 111) self.assert_(hasattr(relax_data_store['orig'].mol[0].res[1].spin[0], 'x')) - self.assertEqual(relax_data_store['orig'].mol[0].res[0].num, None) - self.assertEqual(relax_data_store['orig'].mol[0].res[0].name, None) def test_delete_fail(self): - """Test the failure of the deletion of a non-existant residue. - - The function used is generic_fns.residues.delete(). - """ - - # Delete a non-existant residue (2). - self.assertRaises(RelaxError, residue.delete, res_id=':2') + """Test the failure of residue deletion when an atom id is supplied. + + The function used is generic_fns.residues.delete(). + """ + + # Supply an atom id. + self.assertRaises(RelaxSpinSelectDisallowError, residue.delete, res_id='@2')