Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2D torsion scan #439

Open
xiki-tempula opened this issue Dec 20, 2023 · 1 comment
Open

2D torsion scan #439

xiki-tempula opened this issue Dec 20, 2023 · 1 comment

Comments

@xiki-tempula
Copy link

xiki-tempula commented Dec 20, 2023

Describe the bug
I tried to run 2D torsion scan but failed.

To Reproduce

import numpy as np
from openff.toolkit import Molecule, ForceField
import qcengine
from qcelemental.models.procedures import TorsionDriveInput, TDKeywords, QCInputSpecification, OptimizationSpecification

# load the molecule
lig = Molecule.from_file('lig_ejm_55.sdf')
# load the combined bespokefit force field
ff = ForceField('combined.offxml')

# now make the scan job
torsion_task = TorsionDriveInput(
    keywords=TDKeywords(
        dihedrals=[(4, 10, 16, 12), (4, 7, 15, 11)],
        grid_spacing=[15,15]
    ),
    initial_molecule=[
        lig.to_qcschema()
    ],
    input_specification=QCInputSpecification(
        model={'method': 'combined.offxml', 'basis': 'smirnoff'},
    ),
    optimization_spec=OptimizationSpecification(
        procedure='geometric',
        keywords={
            'program': 'openmm',
            'coordsys': 'dlc',
            'enforce': 0.1,
            'reset': True,
            'qccnv': True,
            'epsilon': 0.0
        }
    )
)

result = qcengine.compute_procedure(torsion_task, 'torsiondrive', raise_error=True)
with open('combined_2D_scan.json', 'w') as output:
    output.write(result.json())

Expected behavior
It runs.

Additional context
I got the error

Traceback (most recent call last):
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/IPython/core/interactiveshell.py", line 3550, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-2-3991d0bf5926>", line 1, in <module>
    runfile('/Users/zwu/Desktop/Torsion/openff/run_torsion_drive.py', wdir='/Users/zwu/Desktop/Torsion/openff')
  File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydev_bundle/pydev_umd.py", line 197, in runfile
    pydev_imports.execfile(filename, global_vars, local_vars)  # execute the script
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Applications/PyCharm.app/Contents/plugins/python/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/Users/zwu/Desktop/Torsion/openff/run_torsion_drive.py", line 41, in <module>
    result = qcengine.compute_procedure(torsion_task, 'torsiondrive', raise_error=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/compute.py", line 179, in compute_procedure
    output_data = executor.compute(input_data, config)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/procedures/torsiondrive.py", line 138, in compute
    output_data = self._compute(input_model, config)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/procedures/torsiondrive.py", line 70, in _compute
    grid_point_results = self._spawn_optimizations(next_jobs=next_jobs, input_model=input_model, config=config)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/procedures/torsiondrive.py", line 228, in _spawn_optimizations
    grid_point_results = {
                         ^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/procedures/torsiondrive.py", line 229, in <dictcomp>
    grid_point: [self._spawn_optimization(grid_point, job, input_model, config) for job in jobs]
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/procedures/torsiondrive.py", line 229, in <listcomp>
    grid_point: [self._spawn_optimization(grid_point, job, input_model, config) for job in jobs]
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/procedures/torsiondrive.py", line 189, in _spawn_optimization
    "set": [
           ^
  File "/Users/zwu/mambaforge/envs/danny/lib/python3.11/site-packages/qcengine/procedures/torsiondrive.py", line 193, in <listcomp>
    "value": int(angle),
             ^^^^^^^^^^
ValueError: invalid literal for int() with base 10: '15,180'

I think one should change
https://github.com/MolSSI/QCEngine/blob/master/qcengine/procedures/torsiondrive.py#L184
to
angles = grid_point.split(',')
lig_ejm_55.sdf.zip

@loriab
Copy link
Collaborator

loriab commented Jan 15, 2025

With the split(',') fix, even if I put in grid_spacing=[180, 90], the error is ValueError: invalid literal for int() with base 10: '180,180'. Also one of the docstrings suggests that the torsiondrive api should be returning a space-separated string there. So I think someone from openff or L-P's group might need to investigate. fyi @jthorton

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants