Coder Social home page Coder Social logo

cliff's Introduction

CLIFF

CI codecov docs latest

The Component-Based Machine-Learned Intermolecular Force Field

Quick-start guide

For complete documentation, see these CLIFFnotes.

Installation and Dependencies

To handle the dependencies in CLIFF, it is recommended to make a conda environment,

conda create --name cliff python=3.8

Next we will install the required libraries:

conda install numpy
conda install scipy
conda install qcelemental -c conda-forge

and the pytest library for running the tests:

conda install pytest

For now, we use the external library QML to handle the computation of descriptors for machine learning models. Documentation of QML can be found at https://www.qmlcode.org/. The simplest way to install QML is with pip,

pip install qml --user -U

Note that QML also requires a Fortran compiler which is available from conda. As a last piece of setup, all KRR models in the three subdirectories in cliff/models/large need to be un-tarred.

Running the Code

CLIFF can be run using either a provided python script for command-line use, or by using import cliff in user-written python scripts.

Command-line usage

The simplest way to run CLIFF is with the provided run_cliff.py script, which includes a number of options:

usage: run_cliff.py [-h] [-i INPUT] [-d DIMER] [-a MONA] [-b MONB] [-n NAME]
                    [-p NPROC] [-fr [FRAG]]
CLIFF: a Component-based Learned Intermolecular Force Field

optional arguments:
  -h, --help            show this help message and exit
  -i INPUT, --input INPUT
                        Location of input configuration file
  -d DIMER, --dimer DIMER
                        Directory of dimer xyz files, or an individual dimer
                        xyz file
  -a MONA, --monA MONA  Monomer A xyz file
  -b MONB, --monB MONB  Monomer B xyz file
  -n NAME, --name NAME  Output job name
  -p NPROC, --nproc NPROC
                        Number of threads for numpy
  -fr [FRAG], --frag [FRAG]
                        Do fragmentation analysis

The -i flag allows the user to use their own config.ini file to specify any non-default parameters, and is considered more of an expert option.

This script can be called in two contexts, one where the user specifies one or many dimer .xyz files, where the last field of the comma-separated comment line in the xyz specifies the number of atoms in the first monomer. A single dimer .xyz file or an entire directory of such files can be specified with the -d flag,

run_cliff.py -d path/to/dimer/xyzs/

See /tests/test_cliff.py for an example, and see /tests/dimer_data for example dimer xys files.

Alternatively, run_cliff.py can be called by specifying monomer xyz files. In this approach, two files need to be specified, one for each monomer, and these files contain xyz coordinates for one or more monomers. See /tests/monomer_data for examples. The script can then be run as

run_cliff.py -a monomerA.xyz -b monomerB.xyz

where all combinations of monomers in monomerA.xyz and monomers in monomerB.xyz are used to compute interaction energies.

When using the runscript, all data is output to a .csv file and to a .log file, the name of which can be specified with -n.

Python usage

CLIFF can also be run in a python script, also using either dimer xyz files or two monomer xyz files. Here, we provide an example script to run CLIFF calculations on the dimer xyz files provided in the test directory:

import cliff
import glob

# put your own path before /tests
dimer_xyz = glob.glob("/tests/monomer_data/*.xyz")

# Call a function to load the dimers
# These dimers are QCelemental Molecule objects, with fragments specified
# A list of these objects can also be made directly with QCelementa and passed to CLIFF
dimers = [cliff.load_dimer_xyz(f) for f in dimer_xyz]

# get the energies
energies = cliff.predict_from_dimers(dimers)

In the above code, the energies object is a list of numpy arrays, with the entire data structure having dimension # dimers * 4. The output energies are in kcal/mol and ordered as electrostatics, exchange, induction, and dispersion.

Similarly, we can compute energies using monomer xyzs:

import cliff
import glob

# put your own path before /tests
monomerA = "/tests/monomer_data/monomerA.xyz"
monomerB = "/tests/monomer_data/monomerB.xyz"

# Create the qcelemental Molecule objects
monA = cliff.load_monomer_xyz(monomerA)
monB = cliff.load_monomer_xyz(monomerB)

# get the energies
energies = cliff.predict_from_monomer_list(monA,monB)

Here, the energies will be an array of lenght of # monomer A x # monomer B. For a given indices monA and monB (i.e., their place in the corresponding xyz file), the index of its energy components in energies would be monA*# monomerA + monB.

Copyright

Copyright (c) 2019, Jeff Schriber

Acknowledgements

Project based on the Computational Molecular Science Python Cookiecutter version 1.1.

cliff's People

Contributors

jeffschriber avatar mcneela avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.