choderalab / perses

Experiments with expanded ensembles to explore chemical space
http://perses.readthedocs.io
MIT License
179 stars 51 forks source link

Failures in setting up transformations involving bridged ring systems #699

Open jchodera opened 4 years ago

jchodera commented 4 years ago

Transformations from ligand 0 to ligands 56-60 appear to have failed:

JSON entries ```JSON "55": { "JOBID": 55, "directory": "RUN54", "end": 56, "ff": "openff-1.2.0", "ligand": "primary_amine_enumeration_for_chodera_lab_FEP-permuted-conformers.sdf", "protein": "receptors/monomer/Mpro-x2646_0_bound-protein.pdb", "start": 0, "target": "backtesting" }, "56": { "JOBID": 56, "directory": "RUN55", "end": 57, "ff": "openff-1.2.0", "ligand": "primary_amine_enumeration_for_chodera_lab_FEP-permuted-conformers.sdf", "protein": "receptors/monomer/Mpro-x2646_0_bound-protein.pdb", "start": 0, "target": "backtesting" }, "57": { "JOBID": 57, "directory": "RUN56", "end": 58, "ff": "openff-1.2.0", "ligand": "primary_amine_enumeration_for_chodera_lab_FEP-permuted-conformers.sdf", "protein": "receptors/monomer/Mpro-x2646_0_bound-protein.pdb", "start": 0, "target": "backtesting" }, "58": { "JOBID": 58, "directory": "RUN57", "end": 59, "ff": "openff-1.2.0", "ligand": "primary_amine_enumeration_for_chodera_lab_FEP-permuted-conformers.sdf", "protein": "receptors/monomer/Mpro-x2646_0_bound-protein.pdb", "start": 0, "target": "backtesting" }, "59": { "JOBID": 59, "directory": "RUN58", "end": 60, "ff": "openff-1.2.0", "ligand": "primary_amine_enumeration_for_chodera_lab_FEP-permuted-conformers.sdf", "protein": "receptors/monomer/Mpro-x2646_0_bound-protein.pdb", "start": 0, "target": "backtesting" }, ```

Here's the traceback for the first one:

2020-07-25 03:59:30,798:(0.60s):geometry:creating growth system...
2020-07-25 03:59:30,970:(0.17s):geometry:       creating bond force...
2020-07-25 03:59:30,970:(0.00s):geometry:       there are 28 bonds in reference force.
2020-07-25 03:59:30,972:(0.00s):geometry:       creating angle force...
2020-07-25 03:59:30,972:(0.00s):geometry:       there are 91 angles in reference force.
2020-07-25 03:59:30,976:(0.00s):geometry:       creating torsion force...
2020-07-25 03:59:30,977:(0.00s):geometry:       creating extra torsions force...
2020-07-25 03:59:30,977:(0.00s):geometry:       there are 209 torsions in reference force.
2020-07-25 03:59:30,986:(0.01s):geometry:       creating nonbonded force...
2020-07-25 03:59:30,986:(0.00s):geometry:               grabbing reference nonbonded method, cutoff, switching function, switching distance...
2020-07-25 03:59:30,987:(0.00s):geometry:               creating nonbonded exception force (i.e. custom bond for 1,4s)...
2020-07-25 03:59:30,987:(0.00s):geometry:               looping through exceptions calculating growth indices, and adding appropriate interactions to custom bond force.
2020-07-25 03:59:30,987:(0.00s):geometry:               there are 4289 in the reference Nonbonded force
Traceback (most recent call last):
  File "/home/chodera/miniconda/envs/perses-0.7.1/bin/perses-fah", line 10, in <module>
    sys.exit(run())
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/app/fah_generator.py", line 373, in run
    run_neq_fah_setup(**setup_options)
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/app/fah_generator.py", line 259, in run_neq_fah_setup
    setup_dict = run_setup(setup_options, serialize_systems=False, build_samplers=False)
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/app/setup_relative_calculation.py", line 404, in run_setup
    complex_box_dimensions=setup_options['complex_box_dimensions'],solvent_box_dimensions=setup_options['solvent_box_dimensions'])
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/app/relative_setup.py", line 405, in __init__
    self._ligand_positions_old_solvated, beta, validate_energy_bookkeeping=False)
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/rjmc/geometry.py", line 239, in propose
    logp_proposal, new_positions, rjmc_info, atoms_with_positions_reduced_potential, final_context_reduced_potential, neglected_angle_terms, omitted_terms = self._logp_propose(top_proposal, current_positions, beta, direction='forward', validate_energy_bookkeeping = validate_energy_bookkeeping)
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/rjmc/geometry.py", line 411, in _logp_propose
    use_14_nonbondeds = self._use_14_nonbondeds)
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/rjmc/geometry.py", line 2109, in __init__
    self._determine_extra_torsions(extra_modified_torsion_force, reference_topology, growth_indices)
  File "/home/chodera/miniconda/envs/perses-0.7.1/lib/python3.7/site-packages/perses/rjmc/geometry.py", line 2317, in _determine_extra_torsions
    p4_target_growth_index = min(tup[1] for tup in _nbr_to_growth_index_tuple if tup[1] > p1_target_growth_index)
ValueError: min() arg is an empty sequence

This didn't get far enough to output the map image to help debug. Note that we should probably output those images first so we can debug failures like this. I think it's between this reference image to these: image I'm not sure if there's anything we can easily do about these bridged ring systems, of course.

ZIP file with PDB and SDF attached: failure-RUN55.zip

Here's the PDF of all molecules in the set: primary_amine_enumeration_for_chodera_lab_FEP-permuted-conformers.pdf

jchodera commented 4 years ago

It looks like all of the failures for this set are the same

ValueError: min() arg is an empty sequence

except for two stereochemistry errors:

output/out_661.stderr:AssertionError: there is an atom with an undefined stereochemistry
output/out_662.stderr:AssertionError: there is an atom with an undefined stereochemistry

Here are all the failures:

(base) [chodera@lilac:synthetic-enumeration]$ grep Error output/out_*.stderr 
output/out_1000.stderr:FileExistsError: [Errno 17] File exists: '13420/RUNS/RUN999'
output/out_1025.stderr:ValueError: min() arg is an empty sequence
output/out_1032.stderr:ValueError: min() arg is an empty sequence
output/out_1037.stderr:ValueError: min() arg is an empty sequence
output/out_1038.stderr:ValueError: min() arg is an empty sequence
output/out_1071.stderr:ValueError: min() arg is an empty sequence
output/out_1076.stderr:ValueError: min() arg is an empty sequence
output/out_1077.stderr:ValueError: min() arg is an empty sequence
output/out_1084.stderr:ValueError: min() arg is an empty sequence
output/out_1085.stderr:ValueError: min() arg is an empty sequence
output/out_1087.stderr:ValueError: min() arg is an empty sequence
output/out_1089.stderr:ValueError: min() arg is an empty sequence
output/out_1090.stderr:ValueError: min() arg is an empty sequence
output/out_1164.stderr:ValueError: min() arg is an empty sequence
output/out_1165.stderr:ValueError: min() arg is an empty sequence
output/out_1206.stderr:ValueError: min() arg is an empty sequence
output/out_249.stderr:ValueError: min() arg is an empty sequence
output/out_251.stderr:ValueError: min() arg is an empty sequence
output/out_255.stderr:ValueError: min() arg is an empty sequence
output/out_256.stderr:ValueError: min() arg is an empty sequence
output/out_523.stderr:ValueError: min() arg is an empty sequence
output/out_524.stderr:ValueError: min() arg is an empty sequence
output/out_525.stderr:ValueError: min() arg is an empty sequence
output/out_54.stderr:ValueError: min() arg is an empty sequence
output/out_55.stderr:ValueError: min() arg is an empty sequence
output/out_56.stderr:ValueError: min() arg is an empty sequence
output/out_579.stderr:ValueError: min() arg is an empty sequence
output/out_57.stderr:ValueError: min() arg is an empty sequence
output/out_580.stderr:ValueError: min() arg is an empty sequence
output/out_581.stderr:ValueError: min() arg is an empty sequence
output/out_582.stderr:ValueError: min() arg is an empty sequence
output/out_583.stderr:ValueError: min() arg is an empty sequence
output/out_585.stderr:ValueError: min() arg is an empty sequence
output/out_586.stderr:ValueError: min() arg is an empty sequence
output/out_58.stderr:ValueError: min() arg is an empty sequence
output/out_591.stderr:ValueError: min() arg is an empty sequence
output/out_592.stderr:ValueError: min() arg is an empty sequence
output/out_593.stderr:ValueError: min() arg is an empty sequence
output/out_595.stderr:ValueError: min() arg is an empty sequence
output/out_59.stderr:ValueError: min() arg is an empty sequence
output/out_60.stderr:ValueError: min() arg is an empty sequence
output/out_661.stderr:AssertionError: there is an atom with an undefined stereochemistry
output/out_662.stderr:AssertionError: there is an atom with an undefined stereochemistry
output/out_684.stderr:ValueError: min() arg is an empty sequence
output/out_699.stderr:ValueError: min() arg is an empty sequence
output/out_700.stderr:ValueError: min() arg is an empty sequence
output/out_701.stderr:ValueError: min() arg is an empty sequence
output/out_702.stderr:ValueError: min() arg is an empty sequence
output/out_703.stderr:ValueError: min() arg is an empty sequence
output/out_704.stderr:ValueError: min() arg is an empty sequence
output/out_705.stderr:ValueError: min() arg is an empty sequence
output/out_706.stderr:ValueError: min() arg is an empty sequence
output/out_722.stderr:ValueError: min() arg is an empty sequence
output/out_724.stderr:ValueError: min() arg is an empty sequence
output/out_766.stderr:ValueError: min() arg is an empty sequence
output/out_767.stderr:ValueError: min() arg is an empty sequence
output/out_768.stderr:ValueError: min() arg is an empty sequence
output/out_779.stderr:ValueError: min() arg is an empty sequence
output/out_780.stderr:ValueError: min() arg is an empty sequence
output/out_784.stderr:ValueError: min() arg is an empty sequence
output/out_821.stderr:ValueError: min() arg is an empty sequence
output/out_839.stderr:ValueError: min() arg is an empty sequence
output/out_926.stderr:ValueError: min() arg is an empty sequence
output/out_927.stderr:ValueError: min() arg is an empty sequence
output/out_928.stderr:ValueError: min() arg is an empty sequence
output/out_929.stderr:ValueError: min() arg is an empty sequence
output/out_930.stderr:ValueError: min() arg is an empty sequence
output/out_931.stderr:ValueError: min() arg is an empty sequence
output/out_932.stderr:ValueError: min() arg is an empty sequence
output/out_934.stderr:ValueError: min() arg is an empty sequence
output/out_940.stderr:ValueError: min() arg is an empty sequence
output/out_949.stderr:ValueError: min() arg is an empty sequence
output/out_975.stderr:ValueError: min() arg is an empty sequence
output/out_976.stderr:ValueError: min() arg is an empty sequence
output/out_977.stderr:ValueError: min() arg is an empty sequence
output/out_978.stderr:ValueError: min() arg is an empty sequence
output/out_980.stderr:ValueError: min() arg is an empty sequence
output/out_982.stderr:ValueError: min() arg is an empty sequence
jchodera commented 4 years ago

Yep, these failures seem to involve some pretty crazy bridged rings: image

The stereochemistry failures involve a nitrogen that is pyramidal: image

image

hannahbrucemacdonald commented 4 years ago

Fixing the pyrimidal nitrogen is going to be much easier than the bridged rings, and it would be worth considering these as two issues