Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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