Index: kernel/doc/examples/chain.py =================================================================== --- kernel/doc/examples/chain.py (revision 0) +++ kernel/doc/examples/chain.py (revision 0) @@ -0,0 +1,68 @@ +import IMP +import random + +#IMP.set_log_level(IMP.VERBOSE) +radius =1.0 +rk= IMP.FloatKey("radius") +m= IMP.Model() +pts= IMP.Particles() +for i in range(0,20): + p= IMP.Particle() + pi= m.add_particle(p) + d= IMP.XYZDecorator.create(p) + d.set_x(random.uniform(0,10)) + d.set_y(random.uniform(0,10)) + d.set_z(random.uniform(0,10)) + d.set_coordinates_are_optimized(True) + p.add_attribute(rk, radius, False) + if (i != 0): + bp= IMP.BondedDecorator.create(p) + bpr= IMP.BondedDecorator.cast(pts.back()) + b= IMP.custom_bond(bp, bpr, 1.5*radius, 10) + pts.append(p) +# if you want to inspect the particles +# notice that each bond is a particle +for p in m.get_particles(): + p.show() +# set up the nonbonded list +nbl= IMP.AllSphereNonbondedListScoreState(pts, rk) +nbli= m.add_score_state(nbl) +bl= IMP.BondDecoratorListScoreState(pts) +bli= nbl.add_bonded_list(bl) +# set up excluded volume +ps= IMP.SphereDistancePairScore(IMP.HarmonicLowerBound(0,1), + rk) +evr= IMP.NonbondedRestraint(nbl, ps, 1) +evri= m.add_restraint(evr) +# restraint for bonds +br= IMP.BondDecoratorRestraint(bl, IMP.Harmonic(0,1)) +bri= m.add_restraint(br) + +# just for fun to make the chain straight +ats= IMP.AngleTripletScore(IMP.Harmonic(3.1415, .1)) +ar= IMP.ChainTripletRestraint(ats) +ar.add_chain(pts) +ari= m.add_restraint(ar) + +p= IMP.ParticlePair(pts[0], pts[-1]) +pps= IMP.ParticlePairs() +pps.append(p) +cr= IMP.PairListRestraint(pps, + IMP.SphereDistancePairScore(IMP.Harmonic(3,1), + rk)) +cri=m.add_restraint(cr) + +# set up optimizer +o= IMP.ConjugateGradients() +o.set_model(m) + +# not elegant, but it works +vrml= IMP.VRMLLogOptimizerState("/tmp/state.%03d.vrml", pts) +vrml.set_radius(rk) +vrml.update() +vrml.set_skip_steps(100) +o.add_optimizer_state(vrml) + +o.optimize(1000) +# write the final state out +vrml.write_next_file()