Merge pull request #2675 from RosettaCommons/vmullig/polymer_dependent_efficiency
Improving efficiency of function that determines whether atoms depend on polymeric connections
The question of whether an atom depends on a polymeric connection has an answer that doesn't change once a ResidueType is initialized, so repeatedly figuring this out on the fly -- using a recursive function, no less -- is unecessarily inefficient. This underlies the slowness in N-methyl amino acid design that was tripping up @gbhardwaj, and causes the slowness issue that @everyday847 was seeing in issue #2673. This pull request adds a little bit of data to the ResidueType, initialized in the finalize() function, so that we can rapidly look up whether an atom depends on a polymeric connection.
Tasks:
-- Add the data to ResidueType class.
-- Add getters.
-- Initialize it in ResidueType::finalize().
-- Remove existing recursiveness in Residue::atom_depends_on_lower() and Residue::atom_depends_on_upper().
-- Have these functions call the new lookups in ResidueType.
-- Check unit tests.
-- New unit test for N-methyl amino acids? --> No.
-- New unit test for peptoids? --> No.
-- It turns out that I already have exactly the two unit tests that I was going to add, so there's no need for new unit tests.
-- Check integration tests. (Should be no change, except for speed. There will be central_class_modification changes, though, and possibly trajectory changes in the flipping tests.)
-- Beauty.
@lyskov: All integration tests are now printing out the Git SHA and date, meaning that they all fail consistently. I think this might be related to your recent PyRosetta-related changes.
Filtering out this spurious noise, the only actual integration test failure that I saw when I ran this is in the `oop_design` integration test. The trajectory changes slightly, which is in hindsight to be expected, since polymer-dependent atoms for oops are now being rebuilt properly. Importantly, the `ncaa_fixbb` integration test does _not_ fail, which means that peptoids are still being handled the same (their side-chains were already treated as polymer-dependent, and still are).