Skip to content

fix: evaluator unit bug#277

Merged
leeping merged 2 commits intoleeping:masterfrom
wenyan4work:evaluator-fix
Feb 4, 2023
Merged

fix: evaluator unit bug#277
leeping merged 2 commits intoleeping:masterfrom
wenyan4work:evaluator-fix

Conversation

@wenyan4work
Copy link
Copy Markdown

@wenyan4work wenyan4work commented Dec 12, 2022

the unit system of openff-evaluator 0.3.9 has been changed to openff-units based on pint. So this simple fix is necessary.
Tested to work on openff-evaluator 0.4.1 / tutorial04

this PR fixes #276

Copy link
Copy Markdown
Collaborator

@j-wags j-wags left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, I just tried study 022 and got the attached output. How did you get the reference optimize.out? Maybe you forgot to commit some other changes?

Also, I activated CI on this PR so we can see if I've just messed up my install of this branch. Sorry for the delay on that!

study 022 output
(forcebalance-test) jw@mba$ ForceBalance.py optimize.in    
Warning: importing 'simtk.openmm' is deprecated.  Import 'openmm' instead.
#======================================================================#
#|             Welcome to ForceBalance version 1.9.4! =D              |#
#|                  Force Field Optimization System                   |#
#|                                                                    |#
#|                              Authors:                              |#
#|                           Lee-Ping Wang                            |#
#|                   Yudong Qiu, Keri A. McKiernan                    |#
#|           Jeffrey R. Wagner, Hyesu Jang, Simon Boothroyd           |#
#|           Arthur Vigil, Erik G. Brandt, John Stoppelman            |#
#|                   Johnny Israeli, Matt Thompson                    |#
#======================================================================#

                                                                       
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                   `.:+@@###@'                          
                           ,;'+###############.                         
                       +################':`                             
                         `.,,...####+.                                  
                                ,#####      +##.                        
                                 #####      ######                      
                     ###'        ####'     :#####'                      
                     :####@      ####.    ,####'                        
                      ######     ####    +###+                          
                       #####     ####   ###;                            
                        :##      ####  ++`                              
                                 ####``..:;+##############+`            
                  .,:;;'++##################################`           
         `############################++++''';;;;;;;;;;;'';             
           ,########':,.``       ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ####                                   
                                 ###                                    
                                  +`                                    
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        
                                                                        

Reading options from file: optimize.in
#========================================================#
#|   Options at their default values are not printed    |#
#|         Use 'verbose_options True' to Enable         |#
#========================================================#
Reading force field from file: smirnoff99Frosst_experimental.offxml
#=========================================================#
#|  Starting parameter indices, physical values and IDs  |#
#=========================================================#
   0 [  9.3800e+02 ] : Bonds/Bond/k/[#6X3:1]:[#6X3:2]
   1 [  1.4000e+00 ] : Bonds/Bond/length/[#6X3:1]:[#6X3:2]
   2 [  9.0000e+02 ] : Bonds/Bond/k/[#6X3a:1]-[#8X2H0:2]
   3 [  1.3230e+00 ] : Bonds/Bond/length/[#6X3a:1]-[#8X2H0:2]
   4 [  6.8000e+02 ] : Bonds/Bond/k/[#6X4:1]-[#1:2]
   5 [  1.0900e+00 ] : Bonds/Bond/length/[#6X4:1]-[#1:2]
   6 [  7.3400e+02 ] : Bonds/Bond/k/[#6X3:1]-[#1:2]
   7 [  1.0800e+00 ] : Bonds/Bond/length/[#6X3:1]-[#1:2]
   8 [  1.0950e+02 ] : Angles/Angle/angle/[#1:1]-[#6X4:2]-[#1:3]
   9 [  7.0000e+01 ] : Angles/Angle/k/[#1:1]-[#6X4:2]-[#1:3]
  10 [  1.2000e+02 ] : Angles/Angle/angle/[*:1]~[#6X3:2]~[*:3]
  11 [  1.4000e+02 ] : Angles/Angle/k/[*:1]~[#6X3:2]~[*:3]
  12 [  1.2000e+02 ] : Angles/Angle/angle/[#1:1]-[#6X3:2]~[*:3]
  13 [  1.0000e+02 ] : Angles/Angle/k/[#1:1]-[#6X3:2]~[*:3]
  14 [  1.2000e+02 ] : Angles/Angle/angle/[#6X3,#7:1]~;@[#8;r:2]~;@[#6X3,#7:3]
  15 [  1.4000e+02 ] : Angles/Angle/k/[#6X3,#7:1]~;@[#8;r:2]~;@[#6X3,#7:3]
  16 [  0.0000e+00 ] : ProperTorsions/Proper/k1/[*:1]~[#6X3:2]-[#6X4:3]-[*:4]
  17 [  3.6250e+00 ] : ProperTorsions/Proper/k1/[*:1]~[#6X3:2]:[#6X3:3]~[*:4]
  18 [  2.5000e+00 ] : ProperTorsions/Proper/k1/[*:1]-[#8X2:2]@[#6X3:3]~[*:4]
  19 [  1.4870e+00 ] : vdW/Atom/rmin_half/[#1:1]-[#6X4]
  20 [  1.5700e-02 ] : vdW/Atom/epsilon/[#1:1]-[#6X4]
  21 [  1.4590e+00 ] : vdW/Atom/rmin_half/[#1:1]-[#6X3]
  22 [  1.5000e-02 ] : vdW/Atom/epsilon/[#1:1]-[#6X3]
  23 [  1.9080e+00 ] : vdW/Atom/rmin_half/[#6X4:1]
  24 [  1.0940e-01 ] : vdW/Atom/epsilon/[#6X4:1]
  25 [  1.6837e+00 ] : vdW/Atom/rmin_half/[#8X2H0+0:1]
  26 [  1.7000e-01 ] : vdW/Atom/epsilon/[#8X2H0+0:1]
-----------------------------------------------------------
#=========================================================#
#|  Rescaling Factors by Type (Lower Takes Precedence):  |#
#=========================================================#
   ProperTorsions/Proper/k1             : 3.62500e+00
   Bonds/Bond/k                         : 1.00000e+01
   Bonds/Bond/length                    : 1.00000e-01
   Angles/Angle/k                       : 1.00000e+01
   Angles/Angle/angle                   : 1.00000e+01
   ProperTorsions/Proper/k              : 1.00000e+01
   vdW/Atom/epsilon                     : 1.00000e-01
   vdW/Atom/rmin_half                   : 1.00000e-01
-----------------------------------------------------------
#========================================================#
#|    Rescaling Types / Factors by Parameter Number:    |#
#========================================================#
   0 [    Bonds/Bond/k                  : 1.00000e+01 ] : Bonds/Bond/k/[#6X3:1]:[#6X3:2]
   1 [    Bonds/Bond/length             : 1.00000e-01 ] : Bonds/Bond/length/[#6X3:1]:[#6X3:2]
   2 [    Bonds/Bond/k                  : 1.00000e+01 ] : Bonds/Bond/k/[#6X3a:1]-[#8X2H0:2]
   3 [    Bonds/Bond/length             : 1.00000e-01 ] : Bonds/Bond/length/[#6X3a:1]-[#8X2H0:2]
   4 [    Bonds/Bond/k                  : 1.00000e+01 ] : Bonds/Bond/k/[#6X4:1]-[#1:2]
   5 [    Bonds/Bond/length             : 1.00000e-01 ] : Bonds/Bond/length/[#6X4:1]-[#1:2]
   6 [    Bonds/Bond/k                  : 1.00000e+01 ] : Bonds/Bond/k/[#6X3:1]-[#1:2]
   7 [    Bonds/Bond/length             : 1.00000e-01 ] : Bonds/Bond/length/[#6X3:1]-[#1:2]
   8 [    Angles/Angle/angle            : 1.00000e+01 ] : Angles/Angle/angle/[#1:1]-[#6X4:2]-[#1:3]
   9 [    Angles/Angle/k                : 1.00000e+01 ] : Angles/Angle/k/[#1:1]-[#6X4:2]-[#1:3]
  10 [    Angles/Angle/angle            : 1.00000e+01 ] : Angles/Angle/angle/[*:1]~[#6X3:2]~[*:3]
  11 [    Angles/Angle/k                : 1.00000e+01 ] : Angles/Angle/k/[*:1]~[#6X3:2]~[*:3]
  12 [    Angles/Angle/angle            : 1.00000e+01 ] : Angles/Angle/angle/[#1:1]-[#6X3:2]~[*:3]
  13 [    Angles/Angle/k                : 1.00000e+01 ] : Angles/Angle/k/[#1:1]-[#6X3:2]~[*:3]
  14 [    Angles/Angle/angle            : 1.00000e+01 ] : Angles/Angle/angle/[#6X3,#7:1]~;@[#8;r:2]~;@[#6X3,#7:3]
  15 [    Angles/Angle/k                : 1.00000e+01 ] : Angles/Angle/k/[#6X3,#7:1]~;@[#8;r:2]~;@[#6X3,#7:3]
  16 [    ProperTorsions/Proper/k       : 1.00000e+01 ] : ProperTorsions/Proper/k1/[*:1]~[#6X3:2]-[#6X4:3]-[*:4]
  17 [    ProperTorsions/Proper/k       : 1.00000e+01 ] : ProperTorsions/Proper/k1/[*:1]~[#6X3:2]:[#6X3:3]~[*:4]
  18 [    ProperTorsions/Proper/k       : 1.00000e+01 ] : ProperTorsions/Proper/k1/[*:1]-[#8X2:2]@[#6X3:3]~[*:4]
  19 [    vdW/Atom/rmin_half            : 1.00000e-01 ] : vdW/Atom/rmin_half/[#1:1]-[#6X4]
  20 [    vdW/Atom/epsilon              : 1.00000e-01 ] : vdW/Atom/epsilon/[#1:1]-[#6X4]
  21 [    vdW/Atom/rmin_half            : 1.00000e-01 ] : vdW/Atom/rmin_half/[#1:1]-[#6X3]
  22 [    vdW/Atom/epsilon              : 1.00000e-01 ] : vdW/Atom/epsilon/[#1:1]-[#6X3]
  23 [    vdW/Atom/rmin_half            : 1.00000e-01 ] : vdW/Atom/rmin_half/[#6X4:1]
  24 [    vdW/Atom/epsilon              : 1.00000e-01 ] : vdW/Atom/epsilon/[#6X4:1]
  25 [    vdW/Atom/rmin_half            : 1.00000e-01 ] : vdW/Atom/rmin_half/[#8X2H0+0:1]
  26 [    vdW/Atom/epsilon              : 1.00000e-01 ] : vdW/Atom/epsilon/[#8X2H0+0:1]
----------------------------------------------------------
#========================================================#
#|                Setup for force field                 |#
#========================================================#
fnms                      ['smirnoff99Frosst_experimental.offxml'] 
priors                    OrderedDict([('Bonds/Bond/k', 10.0), ('Bonds/Bond/length', 0.1), ('Angles/Angle/k', 10.0), ('Angles/Angle/angle', 10.0), ('ProperTorsions/Proper/k', 10.0), ('vdW/Atom/epsilon', 0.1), ('vdW/Atom/rmin_half', 0.1)]) 
----------------------------------------------------------
Backing up: optimize.tmp/optgeo to: optimize.bak/optgeo_2.tar.bz2
Reading optgeo options from file: targets/optgeo/optgeo_options.txt
/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/openff/interchange/components/interchange.py:339: UserWarning: Automatically up-converting BondHandler from version 0.3 to 0.4. Consider manually upgrading this BondHandler (or <Bonds> section in an OFFXML file) to 0.4 or newer. For more details, see https://openforcefield.github.io/standards/standards/smirnoff/#bonds.
  warnings.warn(
Traceback (most recent call last):
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/EGG-INFO/scripts/ForceBalance.py", line 41, in Run_ForceBalance
    objective   = Objective(options, tgt_opts, forcefield)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/objective.py", line 182, in __init__
    else: Tgt = Implemented_Targets[opts['type']](options,opts,forcefield)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/smirnoffio.py", line 686, in __init__
    super(OptGeoTarget_SMIRNOFF,self).__init__(options,tgt_opts,forcefield)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/opt_geo_target.py", line 79, in __init__
    self.create_engines(engine_args)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/smirnoffio.py", line 705, in create_engines
    self.engines[sysname] = self.engine_(target=self, mol=M, name=sysname, pdb=pdbpath, mol2=mol2path, **engine_args)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/smirnoffio.py", line 265, in __init__
    super(SMIRNOFF,self).__init__(name=name, **kwargs)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/openmmio.py", line 626, in __init__
    super(OpenMM,self).__init__(name=name, **kwargs)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/engine.py", line 80, in __init__
    self.prepare(**kwargs)
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/forcebalance-1.9.4-py3.9-macosx-10.9-x86_64.egg/forcebalance/smirnoffio.py", line 443, in prepare
    self.xyz_omms.append((positions, box))
  File "/Users/jeffreywagner/conda/envs/forcebalance-test/lib/python3.9/site-packages/openmm/unit/quantity.py", line 773, in append
    raise TypeError("Cannot append item without units into list with units")
TypeError: Cannot append item without units into list with units

@wenyan4work
Copy link
Copy Markdown
Author

I didn't have time to dive deep into this bug so I didn't try study022. I tried the tutorial04 in openff-evaluator and that scripts runs without raising error but the result is not fully correct.

according to

    I'm not sure at the moment. I'm pretty sure that changes are only needed there, not here.

Originally posted by @mattwthompson in openforcefield/openff-evaluator#482 (comment)

There are probably many more fixes necessary to make forcebalance work properly with evaluator 0.4.1 and openff-toolkit 0.11.*

Copy link
Copy Markdown
Collaborator

@j-wags j-wags left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @wenyan4work - It took me a while but I got this test running on my dinky laptop [1]. I reproduced the error in #276 and verified that this PR fixes it. Thanks for your patience!

[1] The key to getting this running in a reasonable amount of time on a GPU-less computer is to turn steps_per_iteration in these lines down to something like 5000. Since this is just a technical error instead of a numerical issue, I think this is sufficient to say I reproduced the bug and this patch fixes it.

@leeping
Copy link
Copy Markdown
Owner

leeping commented Feb 4, 2023

Thank you! I'll merge this now, so that we have it for ForceBalance v1.9.5.

@leeping leeping merged commit ea1e746 into leeping:master Feb 4, 2023
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

Successfully merging this pull request may close these issues.

evaluator unit bug

3 participants