Merge pull request #2913 from RosettaCommons/aleaverfay/layer_design_concise_logic
Aleaverfay/layer design concise logic
Per a discussion on slack over the difficulty in working with the layer-design residue selectors, I am creating some new code to let you combine residue selectors with boolean logic and pair those combinations with residue level task operations. This PR is not done, and I'm about to head out the door, but I wanted to give @sboyken and @cdbahl the heads up that this code is in progress.
Example new syntax below:
```
<RESIDUE_SELECTORS>
<Layer name="surface" select_core="false" select_boundary="false" select_surface="true" use_sidechain_neighbors="true"/>
<Layer name="boundary" select_core="false" select_boundary="true" select_surface="false" use_sidechain_neighbors="true"/>
<Layer name="core" select_core="true" select_boundary="false" select_surface="false" use_sidechain_neighbors="true"/>
<SecondaryStructure name="helix" overlap="0" minH="3" include_terminal_loops="false" use_dssp="true" ss="H" />
<SecondaryStructure name="sheet" overlap="0" minE="3" include_terminal_loops="false" use_dssp="true" ss="E" />
<SecondaryStructure name="loop" overlap="0" minH="3" minE="3" include_terminal_loops="true" use_dssp="true" ss="L" />
</RESIDUE_SELECTORS>
<TASKOPERATIONS>
<DesignRestrictions name="layer_design">
<Action selector_logic ="surface AND ( helix OR sheet) " aas="DEHKNQRST"/>
<Action selector_logic="surface AND loop" aas="DEGHKNPQRST"/>
<Action selector_logic="boundary AND helix" aas="ADEIKLMNQRSTVWY"/>
<Action selector_logic="boundary AND sheet" aas="DEFIKLNQRSTVWY"/>
<Action selector_logic="boundary AND loop" aas="ADEFGIKLMNPQRSTVWY"/>
<Action selector_logic="core AND helix" aas="AFILMVWY"/>
<Action selector_logic="core AND sheet" aas="FILVWY"/>
<Action selector_logic="core AND loop" aas="AFILMPVWY"/>
</DesignRestrictions>
</TASKOPERATIONS>
```
`!` has the highest priority
`AND` has the next highest priority
`OR` has the lowest priority
```
x AND ! y OR z
```
would convert into a boolean-function equivalent of
```
OR( AND( x, !y ), z )
```
Parentheses may be used to define alternate groupings:
```
x AND !( y or z )
```
would be equivalent to
```
AND( x, !( OR( y, z ) ) )
```
...
There is now a new top-level block for residue level task operations:
```
<RESIDUE_LEVEL_TASK_OPERATIONS>
```
that you can use in defining Actions in the DesignRestrictions task operation. These RLTOs can also be listed in the OperateOnResidueSubset task operation -- which now can take more than one RLTO (though it still takes exactly one ResidueSelector). The OperateOneResidueSubset task operation can *also* use the selector_logic attribute to construct a boolean combination of ResidueSelectors, as the DesignRestrictions TaskOp does.