Gregoire Depret wrote: > I would like to apply rigid bodies only on the mainchain of my model in order > to run molecular dynamics and conjuguate gradients.
I would not recommend doing it this way - why not just select only the sidechain and pass that to your optimizers? Optimizers only move the selected atoms (keeping others fixed) anyway.
> mdl.restraints.rigid_bodies.append(rigid_body(mdl.residue_range('56:A', > '48:A')))
I'm not sure that this would work, unless 56:A is actually before 48:A - you would get a ValueError exception.
> and just before the optimization start : > > atmselall = selection(mdl) > atmsel = selection.only_mainchain(atmselall)
This could be written more concisely as atmselall = selection(mdl) atmsel = atmselall.only_mainchain()
or even atmsel = selection(mdl).only_mainchain()
> and then : > > cg.optimize(atmsel, max_iterations=50, actions=actions.trace(5, trcfil))
It seems to me that this would only optimize the mainchain, which you have already made rigid. So it's not clear to me exactly what it is you want to do. If you want to repack sidechains, my first suggestion is probably the most efficient way to do it.
> But my model is destroyed by CG and MD which is not the case when rigid body > is applied on the whole chain.
Do you have any restraints? Without restraints any sort of optimization will destroy your structure.
> Maybe I can define "rigid_body" with "atom_range" in place of "residue_range" > and selecting all the atoms of the backbone (Ca, CO, N) for my residue range, > but I think there must be a better way to achieve this.
A rigid body object can take any collection of atoms, so yes, you could use atom_range rather than residue_range, or pass in a selection object, or even just an explicit list of all the atoms you want to keep rigid.
Ben Webb, Modeller Caretaker