I am teaching myself rosetta scripts. I followed the tutorial https://www.rosettacommons.org/demos/latest/tutorials/scripting_with_rosettascripts/scripting_with_rosettascripts#altering-the-pose-movers_packing_repacking-sidechains
One of the interesting thing is
<ReadResfile name="core_resfile" filename="core_resfile.txt" selector="corelayer" /> <OperateOnResidueSubset name="restrict_boundary_to_repack" selector="boundarylayer" > <RestrictToRepackingRLT /> </OperateOnResidueSubset> <OperateOnResidueSubset name="prevent_surface_from_repackin" selector="surfacelayer" > <PreventRepackingRLT /> </OperateOnResidueSubset>
if I replace this paragraph to
<ReadResfile name="core_resfile" filename="core_resfile.txt" selector="corelayer" />
<ReadResfile name="restrict_boundary_to_repack" filename="restrict_repack.txt" selector="boundarylayer" />
<ReadResfile name="prevent_surface_from_repackin" filename="restrict_natro.txt" selector="surfacelayer" />
where restrict_repack.txt has the content
restrict_natro.txt has the content
Then I saw this line in the output log
" core.pack.pack_rotamers: built 4406 rotamers at 29 positions." instead of "core.pack.pack_rotamers: built 4605 rotamers at 29 positions." if I am using "
RestrictToRepackingRLT" and "PreventRepackingRLT".
I think RestrictToRepackingRLT should be identical to "NATAA", and "PreventRepackingRLT" should be identical to "NATRO".
Are these runs *exactly* identical except for those TaskOperation lines? Because the exact number of rotamers being built at a particular position depends on the context of the protein -- there's things like backbone clash checks which will remove rotamers if they have little to no chance of being reasonably included. Slightly different protein conformations can cause the clash check to succeed/fail.
There's also the consideration if those operations aren't the very first thing in the protocol, then previous steps may slightly change the structure resulting in slightly different numbers of rotamers in various cases.
But your intuition is correct - those two ways of specifying behavior should be equivalent when run on equivalent structures. The preferred method is the OperateOnResidueSubset method, though. Primarily because it doesn't involve the extra files, but mainly because it more directly specifies your intent ("don't repack these residues" rather than "apply this resfile to these residues -- oh, and by the way, the resfile is saying not to repack them".)
Thank you rmoretti for clarification.