A cheminformatics -> quantum chemistry workflow toolkit leveraging rdkit and cclib.
A typical workflow involves:
Generating a series of input molecules as SMILES
- optionally, by combining different fragments into larger molecules/oligomers
For each molecule:
a. write .com
Gaussian input files, .sh
SLURM submission files
b. submit a job (assuming you are working within a HPC)
c. parse output file to submit further calculations or retrieve descriptors
Combine descriptors and results in a pandas dataframe format or similar for plotting / further analysis
Only Gaussian is supported at the moment, but we plan to add support for Psi4.
git clone https://github.com/matta-research-group/QCflow/qcflow-0.3.git
cd QCflow
# install requirements into new environment
conda env create -f QCflow.yml
conda activate QCflow
# install the QCflow package
pip install .
The run_calc function within run_gaussian.py
is an example workflow that submit gaussian calculations to the KCL CREATE HPC.
Users external to Kings College London will need to alter the slurm.py file to match their HPC submission requirements.
Altering the loaded modules found on line 55 within slurm.py
file will allow you to submit jobs to your HPC.
file.write(f'module load gaussian_sse4/16-C-gcc-13.2.0 \n') ### KCL CREATE HPC
file.write(f'module load your_gaussian_module \n') ### Your HPC
Once the alteration has been made, just pip install .
again and the package will update for your HPC.
QCflow can prepare and submit input files for the following jobs:
sp
sp_a
sp_c
n_c_geo
n_a_geo
opt
tor
opt_a
opt_c
pop_opt_n
sp_hirsh
├── build
│ ├── bdist.macosx-10.13-x86_64
│ └── lib
│ └── QCflow
│ ├── energy_calculations.py
│ ├── find_torsion.py
│ ├── fragments.py
│ ├── __init__.py
│ ├── load_gaussian.py
│ ├── run_gaussian.py
│ ├── slurm.py
│ ├── testing_data.py
│ ├── torsion_parser.py
│ └── write_gaussian.py
├── LICENSE
├── QCflow
│ ├── energy_calculations.py
│ ├── find_torsion.py
│ ├── fragments.py
│ ├── future_functions
│ │ └── orbital_parse.py
│ ├── __init__.py
│ ├── load_gaussian.py
│ ├── __pycache__
│ │ ├── find_torsion.cpython-311.pyc
│ │ ├── find_torsion.cpython-39.pyc
│ │ ├── fragments.cpython-311.pyc
│ │ ├── fragments.cpython-38.pyc
│ │ ├── fragments.cpython-39.pyc
│ │ ├── __init__.cpython-311.pyc
│ │ ├── __init__.cpython-38.pyc
│ │ ├── __init__.cpython-39.pyc
│ │ ├── load_gaussian.cpython-311.pyc
│ │ ├── load_gaussian.cpython-39.pyc
│ │ ├── run_opt_neutral.cpython-311.pyc
│ │ ├── run_opt_neutral.cpython-39.pyc
│ │ ├── run_opt_set_dihedral.cpython-311.pyc
│ │ ├── slurm.cpython-311.pyc
│ │ ├── slurm.cpython-39.pyc
│ │ ├── torsion_parser.cpython-311.pyc
│ │ ├── torsion_parser.cpython-39.pyc
│ │ ├── torsion_run.cpython-311.pyc
│ │ ├── torsion_run.cpython-39.pyc
│ │ ├── write_gaussian.cpython-311.pyc
│ │ └── write_gaussian.cpython-39.pyc
│ ├── run_gaussian.py
│ ├── slurm.py
│ ├── testing_data.py
│ ├── torsion_parser.py
│ └── write_gaussian.py
├── qcflow.egg-info
│ ├── dependency_links.txt
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ └── top_level.txt
├── QCflow_logo_narrow.jpg
├── QCflow.yml
├── README.md
├── setup.py
└── tests
├── b_18_v2
│ ├── b_18_v2_n_a_geo.log
│ ├── b_18_v2_n_c_geo.log
│ ├── b_18_v2_opt_a.log
│ ├── b_18_v2_opt_c.log
│ ├── b_18_v2_opt.com
│ ├── b_18_v2_opt.log
│ ├── b_18_v2_opt.sh
│ ├── b_18_v2_sp_a.log
│ ├── b_18_v2_sp_c.log
│ ├── b_18_v2_sp_hirsh.log
│ └── b_18_v2_tor.log
├── example_dic.json
├── fake_dict.json
├── __pycache__
│ ├── tests.cpython-312.pyc
│ └── tests.cpython-312-pytest-7.4.4.pyc
├── test_dict.json
├── test.py
└── torsion_1
└── torsion_1_tor.log