I can’t answer your actual question, but I can answer bits and pieces. Have you looked for a SequenceRelax Mover…?
“I am also not sure how many steps of minimization MinMover does each time I apply it as it continues to find a better minimum each time I call it with apply().”
There are several minimizer flavors. I know the “flavor” can be chosen as part of the constructor. linmin may be default; linmin is likely to behave in this fashion. The dfpmin and related algorithms are better in several senses. http://www.rosettacommons.org/manuals/archive/rosetta3.2.1_user_guide/minimization_overview.html
“Also it seems to me that the bond lengths and angles do not change with the my attached script except at the cut point but ideally I would like these to move as well if possible.”
Score12 has no terms to handle bond angle and length, only torsion. If the minimizer is allowed to change those DOFs, it will let them drift far outside the accepted range, because it doesn’t know any better. Thus, they are fixed by default. MM-based torsion, angle, and bond length terms exist, but I do not know if they can be accessed from that release, nor can they be trivially activated when using score12 otherwise.
If you want to add sidechain packing, it is easy to add to the code you describe. In pseudocode:
task = PackerTask(pose)
vector = new vector of booleans, all set to false, length = pose.total_residue()
for i in range 15-24:
vector = true
packer = PackRotamersMover(scorefunction?, packertask?)
#may need packer.task(task)
packer.apply(pose) # as desired