def main(prefix, suffix="pos", unitconv="1.0"): ipos = [] imode = [] for filename in sorted(glob.glob(prefix + "." + suffix + "*")): imode.append(filename.split(".")[-1]) ipos.append(open(filename, "r")) nbeads = len(ipos) natoms = 0 ifr = 0 while True: try: for i in range(nbeads): ret = read_file(imode[i], ipos[i]) pos = ret["atoms"] cell = ret["cell"] if natoms == 0: natoms = pos.natoms beads = Beads(natoms, nbeads) cell.h *= float(unitconv) beads[i].q = pos.q * float(unitconv) beads.names = pos.names except EOFError: # finished reading files sys.exit(0) print_file_path("pdb", beads, cell) ifr += 1
def force(beads, cell, masses, temp, dt, state): global bead_out_files nbeads = len(beads.q) if len(bead_out_files) == 0: bead_out_files = [ open('CV_' + str(i + 1) + '.out', 'w') for i in range(nbeads) ] if len(state['modes']['a']) > (nbeads + 1) / 2: state['modes']['a'] = np.resize(state['modes']['a'], (nbeads + 1) / 2) cv_set = [cv.get_cv_set(q, state['CV'], masses) for q in beads.q] if state['ghts'].get('M') is None: state['ghts']['M'] = np.average( [bead_cv_set.m for bead_cv_set in cv_set], 0) / AMU state['ghts']['n'] = np.matmul(state['ghts']['M'], state['ghts']['n']) params = convert_params(state['params']) modes = convert_modes(state['modes']) nmodes = len(modes['a']) ghts = convert_ghts(state['ghts']) q = rp.get_q(ghts, cv_set) r = nm.get_r(q, nmodes) sigma = nm.get_sigma(modes, r) d = rp.get_d(ghts, cv_set) stage = state['stage'] stage['step'] = stage.get('step', 0) step = stage['step'] print_CV_every = state['output'].get('print_CV_every', 1) if step % print_CV_every == 0: restraints = [[ cv.get_cv(bead, restr).value for restr in state['restraints'] ] for bead in beads.q] write_centroid_data(cv_set, sigma, q, d, r, restraints, out_file) write_bead_data(cv_set, ghts, restraints, bead_out_files) stage['step'] += 1 if stage['name'] == 'optimize': optimizer.move(modes, ghts, cv_set, r, sigma, params, params['K'] / temp, dt) if stage['name'] == 'sample': if (stage.get('optimizer_data') and stage['step'] % stage.get('optimizer_data_step', 1) == 0): with open(stage['optimizer_data'], 'a+') as f: write_optimizer_data(cv_set, f) stage['last_save_step'] = stage.get('last_save_step', stage['step']) stage['last_saved'] = stage.get('last_saved', (stage['walker'] - 1) * stage['structures']) if abs(sigma.value * SQAMU) < stage['q_threshold'] and \ stage['step'] >= stage['last_save_step'] + stage['offset']: idx = stage['last_saved'] + 1 with open(str(idx) + ".xyz", 'w') as f: print_file_path('xyz', beads, cell, f, units='angstrom') stage['last_saved'] = idx stage['last_save_step'] = stage['step'] if idx == stage['walker'] * stage['structures']: softexit.trigger('exit ' + str(stage['walker'])) if stage['name'] == 'prepare' and stage['step'] <= stage['prepare_steps']: params['K'] *= float(stage['step']) / stage['prepare_steps'] params['K_d'] *= float(stage['step']) / stage['prepare_steps'] if stage['step'] == stage['prepare_steps']: stage['name'] = 'optimize' stage['step'] = 0 sigma_bias = harmonic_bias(rp.get_sigma(sigma, q), params['K'] * nbeads, 0) d_bias = side_harmonic_bias(d, params['K_d'] * nbeads, params['d_max']) restraint_biases = np.zeros(beads.q.shape, beads.q.dtype) for restraint in state.get('restraints', []): restraint_biases += np.array( [restraint_bias(bead, restraint) for bead in beads.q]) if stage['name'] == 'committor': if abs(sigma.value * SQAMU) > stage['q_threshold']: softexit.trigger('q_threshold reached') return sigma_bias * 0 recover_ghts(state, ghts) recover_modes(state, modes) return sigma_bias + d_bias + restraint_biases