# This will create a VTFM optimization schedule and then # use it to optimize the model from modeller import * from modeller.scripts import complete_pdb # Load in optimizer and schedule support from modeller import schedule, optimizers log.verbose() env = environ() env.io.atom_files_directory = ['../atom_files'] env.edat.dynamic_sphere = True env.libs.topology.read(file='$(LIB)/top_heav.lib') env.libs.parameters.read(file='$(LIB)/par.lib') code = '1fas' mdl = complete_pdb(env, code) # Generate the restraints: atmsel = selection(mdl) mdl.restraints.make(atmsel, restraint_type='stereo', spline_on_site=False) # Create our own library schedule: # 5 steps of conjugate gradients (CG), each step using a larger # residue range (2 up to 9999) and energy scaling factor (0.01 up to 1.0), # followed by 3 steps of molecular dynamics (MD) at successively lower # temperature. The scaling factors for the last 5 steps are always retained. CG = optimizers.conjugate_gradients MD = optimizers.molecular_dynamics libsched = schedule.schedule(5, [ schedule.step(CG, 2, physical.values(default=0.01)), schedule.step(CG, 5, physical.values(default=0.1)), schedule.step(CG, 10, physical.values(default=0.2)), schedule.step(CG, 50, physical.values(default=0.5)), schedule.step(CG, 9999, physical.values(default=1.0)), schedule.step(MD(temperature=300.), 9999, \ physical.values(default=1.0)), schedule.step(MD(temperature=200.), 9999, \ physical.values(default=1.0)), schedule.step(MD(temperature=100.), 9999, \ physical.values(default=1.0)) ]) # Make a trimmed schedule suitable for our model, and scale it by schedule_scale mysched = libsched.make_for_model(mdl) * env.schedule_scale # Write the trimmed schedule to a file fh = open(code+'.sch', 'w') mysched.write(fh) fh.close() # Optimize for all steps in the schedule for step in mysched: step.optimize(atmsel, output='REPORT', max_iterations=200) mdl.write(file=code+'.B')