ENGINE.set_groups(groups) LOGGER.info("@%s Setting oxygen atoms groups (%i)"%(fname, len(groups),)) # run all frames independantly to optimize and fix oxygen atom positions WM.run_independant(nCycle=10, numberOfSteps=10000, saveFrequency=1, cycleTimeout=3600) ################################################################################ ######################### OPTIMIZE ALL ATOMS POSITION ########################## for sf in ENGINE.frames[multiframe]['frames_name']: fname = os.path.join(multiframe, sf) ENGINE.set_used_frame(fname) # set groups as oxygen atoms only ENGINE.set_groups_as_atoms() LOGGER.info("@%s Setting groups as atoms (%i)"%(fname, len(ENGINE.groups))) # run all frames independantly to optimize and fix oxygen atom positions WM.run_independant(nCycle=50, numberOfSteps=10000, saveFrequency=1, cycleTimeout=3600) ################################################################################ ################## MOVE ALL ATOMS IN ALL FRAMES SYNCHRONOUSLY ################## for sf in ENGINE.frames[multiframe]['frames_name']: fname = os.path.join(multiframe, sf) ENGINE.set_used_frame(fname) # set groups as all atoms ENGINE.set_groups_as_atoms() LOGGER.info("@%s Setting groups as atoms (%i)"%(fname, len(ENGINE.groups)))
def run_engine(PDF=True, IMD=True, B=True, BA=True, IA=True, molecular=True, nsteps=10000, ncores=1): ENGINE = Engine(path=None) ENGINE.set_pdb(pdbPath) # create experimental constraints if PDF: C = PairDistributionConstraint(experimentalData=expPath, weighting="atomicNumber") ENGINE.add_constraints(C) # create and define molecular constraints if IMD: C = InterMolecularDistanceConstraint(defaultDistance=1.5) ENGINE.add_constraints(C) if B: C = BondConstraint() ENGINE.add_constraints(C) C.create_bonds_by_definition( bondsDefinition={ "THF": [('O', 'C1', 1.29, 1.70), ('O', 'C4', 1.29, 1.70), ('C1', 'C2', 1.29, 1.70), ('C2', 'C3', 1.29, 1.70), ('C3', 'C4', 1.29, 1.70), ('C1', 'H11', 0.58, 1.15), ('C1', 'H12', 0.58, 1.15), ('C2', 'H21', 0.58, 1.15), ('C2', 'H22', 0.58, 1.15), ('C3', 'H31', 0.58, 1.15), ('C3', 'H32', 0.58, 1.15), ('C4', 'H41', 0.58, 1.15), ('C4', 'H42', 0.58, 1.15)] }) if BA: C = BondsAngleConstraint() ENGINE.add_constraints(C) C.create_angles_by_definition( anglesDefinition={ "THF": [ ('O', 'C1', 'C4', 95, 135), ('C1', 'O', 'C2', 95, 135), ('C4', 'O', 'C3', 95, 135), ('C2', 'C1', 'C3', 90, 120), ('C3', 'C2', 'C4', 90, 120), # H-C-H angle ('C1', 'H11', 'H12', 95, 125), ('C2', 'H21', 'H22', 95, 125), ('C3', 'H31', 'H32', 95, 125), ('C4', 'H41', 'H42', 95, 125), # H-C-O angle ('C1', 'H11', 'O', 100, 120), ('C1', 'H12', 'O', 100, 120), ('C4', 'H41', 'O', 100, 120), ('C4', 'H42', 'O', 100, 120), # H-C-C ('C1', 'H11', 'C2', 80, 123), ('C1', 'H12', 'C2', 80, 123), ('C2', 'H21', 'C1', 80, 123), ('C2', 'H21', 'C3', 80, 123), ('C2', 'H22', 'C1', 80, 123), ('C2', 'H22', 'C3', 80, 123), ('C3', 'H31', 'C2', 80, 123), ('C3', 'H31', 'C4', 80, 123), ('C3', 'H32', 'C2', 80, 123), ('C3', 'H32', 'C4', 80, 123), ('C4', 'H41', 'C3', 80, 123), ('C4', 'H42', 'C3', 80, 123) ] }) if IA: C = ImproperAngleConstraint() ENGINE.add_constraints(C) C.create_angles_by_definition( anglesDefinition={ "THF": [('C2', 'O', 'C1', 'C4', -15, 15), ('C3', 'O', 'C1', 'C4', -15, 15)] }) # initialize constraints data ENGINE.initialize_used_constraints() # run engine if molecular: ENGINE.set_groups_as_molecules() print 'molecular, %s atoms, %s steps, %2s cores' % ( ENGINE.numberOfAtoms, nsteps, ncores), tic = time.time() ENGINE.run(numberOfSteps=nsteps, saveFrequency=2 * nsteps, restartPdb=None, ncores=ncores) elapsed = float(time.time() - tic) / float(nsteps) print ' -- > %s seconds per step' % (elapsed, ) else: ENGINE.set_groups_as_atoms() print 'atomic , %s atoms, %s steps, %2s cores' % ( ENGINE.numberOfAtoms, nsteps, ncores), tic = time.time() ENGINE.run(numberOfSteps=nsteps, saveFrequency=2 * nsteps, restartPdb=None, ncores=ncores) elapsed = float(time.time() - tic) / float(nsteps) print ' -- > %s seconds per step' % (elapsed, ) # return elapsed time return elapsed