Пример #1
0
def main():
    from Molecule import Molecule
    logger = logging.getLogger('pyar')
    handler = logging.FileHandler('clustering.log', 'w')
    formatter = logging.Formatter('%(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)

    input_files = sys.argv[1:]

    if len(input_files) < 2:
        print('Not enough files to cluster')
        sys.exit(0)

    mols = []
    for each_file in input_files:
        mol = Molecule.from_xyz(each_file)
        mol.energy = read_energy_from_xyz_file(each_file)
        mols.append(mol)
    plot_energy_histogram(mols)
    selected = choose_geometries(mols)
    cmd = ['/home/anoop/bin/molden']
    fls = []
    for one in selected:
        fls.append(one.name+'.xyz')
    print(' '.join(cmd+fls))
    # subp.check_call(cmd)
    return
Пример #2
0
def main():
    from Molecule import Molecule
    import sys
    mol = Molecule.from_xyz(sys.argv[1])
    method = {'charge': 0, 'multiplicity': 1, 'scftype': 'rhf'}
    geometry = Psi4(mol, method)
    geometry.optimize()
Пример #3
0
def main():
    from Molecule import Molecule
    mol = Molecule.from_xyz(sys.argv[1])
    geometry = Turbomole(mol)
    if len(sys.argv) == 2:
        geometry.optimize()
    elif len(sys.argv) == 3:
        gamma_force = sys.argv[2]
        geometry.optimize(gamma=gamma_force)
    else:
        sys.exit()
    return
Пример #4
0
def setup_molecules(input_files):

    molecules = []
    for each_file in input_files:
        try:
            mol = Molecule.from_xyz(each_file)
            print(each_file)
            molecules.append(mol)
        except IOError:
            print("File {} does not exist".format(each_file))
            sys.exit()
    print("I've parsed these molecules as input: {}".format(
        [i.name for i in molecules]))
    return molecules
Пример #5
0
def main():
    import sys
    input_files = sys.argv[1:]
    from Molecule import Molecule
    method = {
        'charge': 0,
        'multiplicity': 1,
        'scftype': 'rhf',
        'software': 'orca'
    }
    gamma = 0.0

    for m in input_files:
        mol = Molecule.from_xyz(m)
        if optimise(mol, method=method, gamma=gamma): print(mol.energy)
Пример #6
0
def main():

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--charge', type=int, default=0, help='charge')
    parser.add_argument('-m',
                        '--multiplicity',
                        type=int,
                        default=1,
                        help='multiplicity')
    parser.add_argument('--scftype',
                        type=str,
                        default='rhf',
                        choices=['rhf', 'uhf'],
                        help='SCF type (rhf/uhf)')
    parser.add_argument("input_file",
                        metavar='file',
                        type=str,
                        help='input coordinate file')
    parser.add_argument('--scan',
                        type=int,
                        nargs=2,
                        help='scan between two atoms')
    parser.add_argument('--cycle',
                        type=int,
                        default=350,
                        help='maximum number of optimization cycles')
    args = parser.parse_args()

    from Molecule import Molecule
    mol = Molecule.from_xyz(args.input_file)
    method_args = {
        'charge': args.charge,
        'multiplicity': args.multiplicity,
        'scftype': args.scftype,
        'software': 'xtb'
    }
    Xtb(mol, method_args)

    import optimiser

    print('optimising')
    optimiser.optimise(mol, method_args)

    if args.scan:
        pass
Пример #7
0
def main():

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--charge', type=int, default=0,
                        help='charge')
    parser.add_argument('-m', '--multiplicity', type=int, default=1,
                        help='multiplicity')
    parser.add_argument('--scftype', type=str, default='rhf',
                        choices=['rhf', 'uhf'],
                        help='SCF type (rhf/uhf)')
    parser.add_argument("input_file", metavar='file',
                        type=str,
                        help='input coordinate file')
    parser.add_argument('-o', '--opt', action='store_true',
                        help='optimize')
    parser.add_argument('-g', '--gamma', type=float, default=0.0,
                        help='optimize')
    parser.add_argument('--cycle', type=int, default=350,
                        help='maximum number of optimization cycles')
    parser.add_argument('-f1', nargs='+', type=int,
                        help='atoms in the first fragment')
    parser.add_argument('-f2', nargs='+', type=int,
                        help='atoms in the second fragment')
    args = parser.parse_args()

    from Molecule import Molecule
    mol = Molecule.from_xyz(args.input_file)
    mol.fragments = [args.f1, args.f2]
    method_args = {
        'charge': args.charge,
        'multiplicity': args.multiplicity,
        'scftype': args.scftype,
        'software': 'turbomole'
    }
    Turbomole(mol, method_args)
    if args.opt:
        import optimiser

        turbomole_logger.info('optimising')
        optimiser.optimise(mol, method_args, args.gamma)
    else:
        make_coord(mol.atoms_list, mol.coordinates)
        prepare_control(charge=method_args['charge'], multiplicity=method_args['multiplicity'])
        turbomole_logger.info('created input file')
Пример #8
0
def main():
    from Molecule import Molecule
    try:
        input_files = sys.argv[1:]
    except:
        print('usage: cluster.;y <xyz-file(s)>')
        sys.exit(1)

    if len(input_files) < 2:
        print('Not enough files to cluster')
        sys.exit(0)
    mols = {}
    for each_file in input_files:
        mol = Molecule.from_xyz(each_file)
        mol.energy = read_energy_from_xyz_file(each_file)
        mols[mol.name] = mol
    choose_geometries(mols)
    return
Пример #9
0
def main():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('-s', type=int, required=True, nargs=2,
                        help='scan between two atoms')
    parser.add_argument('-c', '--charge', type=int, default=0,
                        help='charge')
    parser.add_argument('-m', '--multiplicity', type=int, default=1,
                        help='multiplicity')
    parser.add_argument('--scftype', type=str, default= 'rhf', choices= ['rhf', 'uhf'],
                        help='SCF type (rhf/uhf)')
    parser.add_argument("input_file", metavar='file',
                        type=str,
                        help='input coordinate file')
    parser.add_argument('-o', '--opt', action='store_true',
                        help='optimize')
    args = parser.parse_args()
    from Molecule import Molecule
    mol = Molecule.from_xyz(args.input_file)

    method_args = {
        'charge': args.charge,
        'multiplicity': args.multiplicity,
        'scftype': args.scftype,
        'software': 'orca'
    }
    a, b = args.s
    coordinates = mol.coordinates
    import numpy as np
    start_dist = np.linalg.norm(coordinates[a] - coordinates[b])
    final_distance = mol.covalent_radius[a] + mol.covalent_radius[b]
    step = int(abs(final_distance - start_dist)*10)
    c_k = '\n!ScanTS\n% geom scan B '+str(a)+' '+str(b)+ '= '+ str(start_dist)\
          + ', ' + str(final_distance) + ', ' + str(step) + ' end end\n'
    geometry = Orca(mol, method_args, custom_keyword=c_k)
    if args.opt:
        import optimiser
        print('optimising')
        optimiser.optimise(mol, method_args, 0.0, custom_keyword=c_k)
    else:
        print('created input file')
Пример #10
0
def main():
    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('-N',
                        type=int,
                        required=True,
                        help='number of points/configurations')
    parser.add_argument('-mpt',
                        action='store_true',
                        help='generate random points on the surface of a unit '
                        'sphere')
    parser.add_argument('-mmc',
                        action='store_true',
                        help='generate N configurations of two molecules')
    parser.add_argument('-mcm',
                        action='store_true',
                        help='generate a composite molecule with seed and N '
                        'monomers')
    parser.add_argument('-i',
                        type=str,
                        nargs=2,
                        dest='file',
                        help="two molecules, seed and monomer, "
                        "in xyz file format")
    parser.add_argument('-method',
                        choices=['random', 'rotating', 'uniform'],
                        help="method for generating points")
    parser.add_argument(
        '-spr',
        type=str,
        help="create a molecules from N atoms of given elememts")
    parser.add_argument('-best',
                        type=int,
                        nargs=2,
                        help="create the best orientation with lowest a b "
                        "distance")

    args = parser.parse_args()
    print(args)
    tabu_logger.debug(args)

    N = args.N

    if args.file:
        from Molecule import Molecule
        seed = Molecule.from_xyz(args.file[0])
        monomer = Molecule.from_xyz(args.file[1])
    else:
        seed = None
        monomer = None

    if args.method == 'rotating':
        if args.file and monomer.number_of_atoms == 1:
            pts = rotating_octants(N, angle_tabu=False)
        else:
            pts = rotating_octants(N, angle_tabu=True)
    elif args.method == 'random':
        pts = make_random_points_and_angles(N)
    elif args.method == 'uniform':
        pts = uniformly_distributed_points(N)
    else:
        print('using default method: random')
        pts = make_random_points_and_angles(N)

    if args.mpt:
        plot_points(pts)

    if args.mmc:
        orientations = generate_orientations_from_points_and_angles(
            seed, monomer, pts)
        for i, each_orientation in enumerate(orientations):
            each_orientation.mol_to_xyz('mol' + str(i) + '.xyz')

    if args.mcm:
        import optimiser
        method_args = {
            'charge': 0,
            'multiplicity': 1,
            'scftype': 'rhf',
            'software': 'xtb'
        }
        for i in range(128):

            result = generate_composite_molecule(seed, monomer, pts)
            result.title = "trial_" + str(i).zfill(3)
            optimiser.optimise(result, method_args, 0.0)
            result.mol_to_xyz('result_' + str(i).zfill(3) + '.xyz')

    if args.spr:
        import scipy.spatial.distance as sdist

        from Molecule import Molecule
        from atomic_data import atomic_numbers, covalent_radii
        radii = covalent_radii[atomic_numbers[args.spr.capitalize()]]
        pts = pts[:, :3]
        factor = pts / 10
        while np.min(sdist.pdist(pts)) < 2 * radii:
            pts += factor

        atoms = [args.spr for _ in range(N)]
        result = Molecule(atoms, pts)

        result.mol_to_xyz('mol.xyz')

    if args.best:
        a = args.best[0]
        b = seed.number_of_atoms + args.best[1]
        generate_guess_for_bonding('xxx', seed, monomer, a, b, N)
Пример #11
0
            except subp.CalledProcessError as e:
                if e.output:
                    with open('xtb.out', 'w') as fb:
                        fb.write(e.output)
                msg = "SCF Failure. Check files in" + os.getcwd()
                xtb_turbo_logger.error(msg)
                return False, msg, None, None

        msg = [
            line for line in open('engrad.out').readlines() if 'ended' in line
        ]
        if os.path.isfile('.sccnotconverged'):
            msg = "SCF Failure. Check files in" + os.getcwd()
            return False, msg, None, None
        if 'abnormally' in msg:
            return False, msg, None, None
        else:
            return True, msg, interface.turbomole.get_energy(), \
                   interface.turbomole.get_gradients()


def main():
    pass


if __name__ == "__main__":
    from Molecule import Molecule
    my_mol = Molecule.from_xyz(sys.argv[1])
    geometry = XtbTurbo(my_mol, method={})
    geometry.optimize(gamma=100.0)