Merge pull request #4667 from RosettaCommons/jadolfbr/parser_logic
Enable Residue Selector logic across RosettaScripts
This PR does one main thing, it allows most classes to use selector logic through their `selector=` option in a tag. It does this through using the logic in `parse_residue_selector` and `get_residue_selector` after checking if the selector exists in the DataMap first. (I was going to roll my own parsing logic/etc. before @ajasja pointed me to use the already-present logic - so thank you @ajasja for that - saved a lot of time!)
A lot of selectors have been updated to use the util - I was frankly shocked at how much pure copy-paste happened in getting selectors.
**This functionality has been extensively tested, has a unit test, and we have a few bonuses.**
1) You no longer need to use `!` and can use the actual word not. Why not eh? (courtesy goes to @ajasja for this)
2) You no longer have to have everything caps.
3) A disulfide container crash has been properly wrapped in an exit instead of a vector segfault
4) The `SelectedResiduesPyMOLMetric` now uses the custom type IN the selection. I Should have done that a long time ago.
5) Logic works when doing `selectors=` for each selector in between commas
I hope this will be as beneficial to everyone as it has to me the past week. My 150 lines of selectors have been cut to only a select important few.
**The caveat to this is as follows**: I tried to find all the classes where selectors were being pulled straight from the `DataMap` (which, honestly, I didn't know people actually did when I started this) and fixed as many as I could through a few searches. I may have missed some. Due to the inconsistent use of the `residue_selector` name and inconsistencies when using multiple selectors, I cannot envision a way to test this exhaustively. If you have ideas, please let me know!