Skip to main content

Python wrapper for Q-Chem

Project description

Build, Test & Upload Coverage Status PyPI version Documentation Status

PyQchem

Python wrapper for Q-Chem (https://www.q-chem.com)
Online manual: https://pyqchem.readthedocs.io/

Main features

  • Easy to use clean python interface for Q-Chem
  • No special q-chem installation needed (reads Q-Chem environment)
  • Output parsers for different type of calculations
  • Custom basis set and guess support using high level interface
  • Calculation Cache system powered by SQLite database
  • python 2.7.x/3.5+ compatibility

Installation instructions

  1. Requirements
  • numpy
  • scipy
  • matplotlib
  • requests
  • lxml
  • wfnsympy (optional)
  • paramiko (optional)
  • pymatgen (optional)

2a. From pypi repository (recommended)

pip install pyqchem --user

2b. Installation from source

python setup.py install --user

Examples

Simple pythonic API to define your input

from pyqchem import Structure, QchemInput, get_output_from_qchem
from pyqchem.parsers.basic import basic_parser_qchem

molecule = Structure(coordinates=[[0.0, 0.0, 0.0],
                                  [0.0, 0.0, 0.9]],
                     symbols=['H', 'H'],
                     charge=0,
                     multiplicity=1)

qc_input = QchemInput(molecule,
                      jobtype='sp',
                      exchange='hf',
                      basis='6-31G')

data = get_output_from_qchem(qc_input,
                             processors=4,
                             parser=basic_parser_qchem)

# obtain a python dictionary
print('Energy: ', data['scf_energy'])

Link calculations in powerful workflows

from pyqchem import QchemInput, get_output_from_qchem
from pyqchem.parsers.parser_optimization import basic_optimization
from pyqchem.parsers.parser_frequencies import basic_frequencies
from pyqchem.tools import get_geometry_from_pubchem

molecule = get_geometry_from_pubchem('aspirin')

qc_input = QchemInput(molecule,
                      jobtype='opt',
                      exchange='hf',
                      basis='sto-3g',
                      geom_opt_tol_gradient=300,
                      geom_opt_tol_energy=100,
                      geom_opt_tol_displacement=1200)

parsed_data, electronic_structure = get_output_from_qchem(qc_input,
                                                          processors=4,
                                                          parser=basic_optimization,
                                                          read_fchk=True)

qc_input = QchemInput(parsed_data['optimized_molecule'],
                      jobtype='freq',
                      exchange='hf',
                      basis='sto-3g',
                      scf_guess=electronic_structure['coefficients'])

parsed_data = get_output_from_qchem(qc_input,
                                    processors=4,
                                    parser=basic_frequencies)


for i, mode in enumerate(parsed_data['modes']):
    print('mode:                      {}'.format(i+1))
    print('frequency (cm-1):          {:10.2f}'.format(mode['frequency']))
    print('force constant (mdyne/A):  {:10.5f}\n'.format(mode['force_constant']))

Custom basis support

from pyqchem import QchemInput, Structure
from pyqchem.basis import get_basis_from_BSE


molecule = Structure(coordinates=[[0.0, 0.0, 0.0000],
                                  [0.0, 0.0, 1.5811]],
                     symbols=['Se', 'H'],
                     charge=-1,
                     multiplicity=1)

basis_custom = get_basis_from_BSE(molecule, 'cc-pVTZ')

qc_input = QchemInput(molecule,
                      jobtype='sp',
                      exchange='hf',
                      basis=basis_custom)

Handle qchem errors

from pyqchem import get_output_from_qchem
from pyqchem.errors import OutputError, ParserError
from pyqchem.parsers.parser_rasci import parser_rasci

try:
    parsed_data = get_output_from_qchem(qc_input,
                                        processors=4,
                                        parser=parser_rasci,
                                        )

except OutputError as e:
    print('Calculation ended with errors. Error lines:')
    print(e.error_lines)
    
    # Try to parse your output anyway
    try: 
        parsed_data = parser_rasci(e.full_output)
    except ParserError:
        print('Failed parsing')
        exit()


print('Energy: ', parsed_data['scf_energy'])

Additional example scripts are found at the examples folder

Contact info

Abel Carreras
abelcarreras83@gmail.com

Donostia International Physics Center (DIPC)
Donostia-San Sebastian (Spain)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyqchem-0.9.8.tar.gz (56.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyqchem-0.9.8-py3-none-any.whl (62.2 kB view details)

Uploaded Python 3

File details

Details for the file pyqchem-0.9.8.tar.gz.

File metadata

  • Download URL: pyqchem-0.9.8.tar.gz
  • Upload date:
  • Size: 56.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for pyqchem-0.9.8.tar.gz
Algorithm Hash digest
SHA256 7cbbad9de913d71cb1d91ce9cf3b50fc3429f49097d90a261f83962b478aa0cb
MD5 e2054d00b2e488bf3eb50b45376d027b
BLAKE2b-256 e681889fa0621b1dac70b0c1f23da225842c675cc3a14052f8e8e083fa03f73c

See more details on using hashes here.

File details

Details for the file pyqchem-0.9.8-py3-none-any.whl.

File metadata

  • Download URL: pyqchem-0.9.8-py3-none-any.whl
  • Upload date:
  • Size: 62.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.9.23

File hashes

Hashes for pyqchem-0.9.8-py3-none-any.whl
Algorithm Hash digest
SHA256 d875c9286416de720d9a14d6b56f4cfc8f9d8c2a6077d88263acd29f7f0d5944
MD5 124a9021fc0744f2ca62600a2f70766b
BLAKE2b-256 4b5876a3dbe6d2f47459afb1bb302211f5ecbae4b56486f6f8ce20ff1a677b5c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page