diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 47542fde..cf07413c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,6 +50,10 @@ jobs: pip install -r requirements.txt pip install -r requirements-dev.txt pip install -e . + - name: Prepare Packmol + run: | + echo $HOME + echo "$HOME/work/mdgo/mdgo/tests/packmol" >> $GITHUB_PATH - name: Prepare Selenium # https://github.com/marketplace/actions/setup-chromedriver uses: nanasess/setup-chromedriver@master diff --git a/docs/source/aqueous.rst b/docs/source/aqueous.rst new file mode 100644 index 00000000..25a97d0a --- /dev/null +++ b/docs/source/aqueous.rst @@ -0,0 +1,152 @@ + +================================ +Force Fields for Aqueous Systems +================================ + +The Aqueous module provides tools for setting up molecular dynamics simulations +involving water and ions. + +Water Models +============ + +`mdgo` contains parameters for several popular water models. This section lists +a brief description and literature reference to the available models. + +SPC +--- + +TIP3P-EW +-------- + +TIP3P-FB +-------- + +Wang, L., Martinez, T. J., Pande, V.S., Building Force Fields: An Automatic, Systematic, +and Reproducible Approach. J. Phys. Chem. Lett. 2014, 5, 11, 1885–1891. +https://pubs.acs.org/doi/abs/10.1021/jz500737m + +Parameters are given in Supporting Table 1. Note that the epsilon for Oxygen must be converted +from kJ/mol to kcal/mol. + +TIP4P-EW +-------- + +[Vega & de Miguel, J Chem Phys 126:154707 (2007), Vega et al, Faraday Discuss 141:251 (2009)]. + +TIP4P-FB +-------- + +Wang, L., Martinez, T. J., Pande, V.S., Building Force Fields: An Automatic, Systematic, +and Reproducible Approach. J. Phys. Chem. Lett. 2014, 5, 11, 1885–1891. +https://pubs.acs.org/doi/abs/10.1021/jz500737m + +Parameters are given in Supporting Table 1. Note that the epsilon for oxygen must be converted +from kJ/mol to kcal/mol. + +TIP4P-2005 +---------- + +Abascal & Vega, J Chem Phys 123:234505 (2005) + +OPC +---- + +Izadi, Anandakrishnan, and Onufriev, Building Water Models: A Different Approach. +J. Phys. Chem. Lett. 2014, 5, 21, 3863–3871 https://doi.org/10.1021/jz501780a + +Parameters are given in Table 2. Note that the epsilon for oxygen must be converted +from kJ/mol to kcal/mol. + +OPC3 +---- + +Izadi and Onufriev, Accuracy limit of rigid 3-point water models +J. Chemical Physics 145, 074501, 2016. https://doi.org/10.1063/1.4960175 + +Parameters are given in Table II. Note that the epsilon for oxygen must be converted +from kJ/mol to kcal/mol. + + +Ion Parameter Sets +================== + +``mdgo`` contains a compilation of several sets of Lennard Jones +parameters for ions in water. All values are reported as :math:`\sigma_i` +and :math:`\epsilon_i` in the equation + +.. math:: + + E = 4 \\epsilon_i \\left[ \\left( \\frac{\sigma_i}{r} \\right)^{12} - \\left( \\frac{\sigma_i}{r} \\right)^{6} \\right] + +Values of :math:`\sigma_i` and :math:`\epsilon_i` are given in Angstrom +and kcal/mol, respectively, corresponding to the ‘real’ units system in +LAMMPS. + +Aqvist (aq) +----------- + +Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy +Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024. +https://pubs.acs.org/doi/10.1021/j100384a009 + +Values were parameterized to the SPC water model and are reported in +Table I and II as :math:`A_i` and :math:`B_i` coefficients in the +following form of the Lennard-Jones potential: + +.. math:: + + + E = \left[ \left( \frac{A_i^2}{r} \right)^{12} - \left( \frac{B_i^2}{r} \right)^{6} \right] + +This parameter set is a work in progress! + +Jensen and Jorgensen (jj) +------------------------- + +Jensen, K. P. and Jorgensen, W. L., Halide, Ammonium, and Alkali Metal +Ion Parameters for Modeling Aqueous Solutions. J. Chem. Theory Comput. +2006, 2, 6, 1499–1509. https://pubs.acs.org/doi/abs/10.1021/ct600252r + +Values were parameterized to the TIP4P water model using geometric +combining rules and are reported directly as sigma_i and epsilon_i in +Table 2. + +Joung-Cheatham (jc) +------------------- + +Joung, and Thomas E. Cheatham, Thomas E. III, Determination of Alkali +and Halide Monovalent Ion Parameters for Use in Explicitly Solvated +Biomolecular Simulations. J. Phys. Chem. B 2008, 112, 30, 9020–9041. +https://pubs.acs.org/doi/10.1021/jp8001614 + +Values were parameterized for the SPC/E, TIP3P, and TIP4P_EW water +models using Lorentz-Berthelot combining rules (LAMMPS: ‘arithmetic’) +and are reported in Table 5 as :math:`R_{min}`/2 and epsilon_i. R_min/2 +values are converted to :math:`\sigma_i` values using +:math:`\sigma_i = R_{min}/2 * 2^(5/6)` + +Li and Merz group (lm) +---------------------- + +Sengupta et al. Parameterization of Monovalent Ions for the OPC3, OPC, +TIP3P-FB, and TIP4P-FB Water Models. J. Chem. Information Modeling +61(2), 2021. https://pubs.acs.org/doi/10.1021/acs.jcim.0c01390 + +Li et al. Systematic Parametrization of Divalent Metal Ions for the +OPC3, OPC, TIP3P-FB, and TIP4P-FB Water Models. J. Chem. Theory and +Computation 16(7), 2020. +https://pubs.acs.org/doi/10.1021/acs.jctc.0c00194 + +Li et al. Parametrization of Trivalent and Tetravalent Metal Ions for +the OPC3, OPC, TIP3P-FB, and TIP4P-FB Water Models. J. Chem. Theory and +Computation 17(4), 2021. +https://pubs.acs.org/doi/10.1021/acs.jctc.0c01320 + +Values were parameterized for the OPC, OPC3, TIP3P-FB, and TIP4P-FB +water models using Lorentz-Berthelot combining rules (LAMMPS: +‘arithmetic’) and are reported in Table 3 as :math:`R_{min}`/2 and +epsilon_i. R_min/2 values are converted to :math:`\sigma_i` values using +:math:`\sigma_i = R_{min}/2 * 2^(5/6)`. This set of values is optimized +for reproducing ion-oxygen distance. An alternate set of values optimized for +hydration free energies is available in the original papers. + diff --git a/mdgo/data/ion/aqvist/Ba++.lmp b/mdgo/data/ion/aqvist/Ba++.lmp deleted file mode 100644 index baa174d8..00000000 --- a/mdgo/data/ion/aqvist/Ba++.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Ba++ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 137.327 - -Pair Coeffs #lj/cut/coul/long - - 1 0.047096 3.816610 - -Atoms - - 1 1 1 2.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/Ca++.lmp b/mdgo/data/ion/aqvist/Ca++.lmp deleted file mode 100644 index 877c9ccf..00000000 --- a/mdgo/data/ion/aqvist/Ca++.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Ca++ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 40.078 - -Pair Coeffs #lj/cut/coul/long - - 1 0.449657 2.412031 - -Atoms - - 1 1 1 2.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/Cs+.lmp b/mdgo/data/ion/aqvist/Cs+.lmp deleted file mode 100644 index eef404dc..00000000 --- a/mdgo/data/ion/aqvist/Cs+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cs+ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 132.905 - -Pair Coeffs #lj/cut/coul/long - - 1 0.000081 6.715999 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/K+.lmp b/mdgo/data/ion/aqvist/K+.lmp deleted file mode 100644 index a75632b7..00000000 --- a/mdgo/data/ion/aqvist/K+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -K+ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 39.0983 - -Pair Coeffs #lj/cut/coul/long - - 1 0.000328 4.934628 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/Li+.lmp b/mdgo/data/ion/aqvist/Li+.lmp deleted file mode 100644 index be22826e..00000000 --- a/mdgo/data/ion/aqvist/Li+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Li+ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 6.940 - -Pair Coeffs #lj/cut/coul/long - - 1 0.018279 2.126452 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/Mg++.lmp b/mdgo/data/ion/aqvist/Mg++.lmp deleted file mode 100644 index e99230e4..00000000 --- a/mdgo/data/ion/aqvist/Mg++.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Mg++ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 24.305 - -Pair Coeffs #lj/cut/coul/long - - 1 0.875044 1.644471 - -Atoms - - 1 1 1 2.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/Na+.lmp b/mdgo/data/ion/aqvist/Na+.lmp deleted file mode 100644 index 4c85ad3b..00000000 --- a/mdgo/data/ion/aqvist/Na+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Na+ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 22.990 - -Pair Coeffs #lj/cut/coul/long - - 1 0.002772 3.330445 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/Rb+.lmp b/mdgo/data/ion/aqvist/Rb+.lmp deleted file mode 100644 index 599e579f..00000000 --- a/mdgo/data/ion/aqvist/Rb+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Rb+ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 85.4678 - -Pair Coeffs #lj/cut/coul/long - - 1 0.000171 5.621773 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/aqvist/Sr++.lmp b/mdgo/data/ion/aqvist/Sr++.lmp deleted file mode 100644 index e549ac46..00000000 --- a/mdgo/data/ion/aqvist/Sr++.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Sr++ -# Aqvist, J. Ion-Water Interaction Potentials Derived from Free Energy Perturbation Slmulations J. Phys. Chem. 1990, 94, 8021– 8024 - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 87.62 - -Pair Coeffs #lj/cut/coul/long - - 1 0.118226 3.102688 - -Atoms - - 1 1 1 2.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/Br-.lmp b/mdgo/data/ion/jensen_jorgensen/Br-.lmp deleted file mode 100644 index cf1a7c22..00000000 --- a/mdgo/data/ion/jensen_jorgensen/Br-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Br- -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 79.904 - -Pair Coeffs #lj/cut/coul/long - - 1 0.71 4.28 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/Cl-.lmp b/mdgo/data/ion/jensen_jorgensen/Cl-.lmp deleted file mode 100644 index aa287353..00000000 --- a/mdgo/data/ion/jensen_jorgensen/Cl-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cl- -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 35.453 - -Pair Coeffs #lj/cut/coul/long - - 1 0.71 4.02 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/Cs+.lmp b/mdgo/data/ion/jensen_jorgensen/Cs+.lmp deleted file mode 100644 index feda650f..00000000 --- a/mdgo/data/ion/jensen_jorgensen/Cs+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cs+ -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 132.905 - -Pair Coeffs #lj/cut/coul/long - - 1 0.0005 6.20 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/F-.lmp b/mdgo/data/ion/jensen_jorgensen/F-.lmp deleted file mode 100644 index 85d4a202..00000000 --- a/mdgo/data/ion/jensen_jorgensen/F-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -F- -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 18.998 - -Pair Coeffs #lj/cut/coul/long - - 1 0.71 3.05 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/I-.lmp b/mdgo/data/ion/jensen_jorgensen/I-.lmp deleted file mode 100644 index b2ef7c48..00000000 --- a/mdgo/data/ion/jensen_jorgensen/I-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -I- -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 126.90 - -Pair Coeffs #lj/cut/coul/long - - 1 0.71 4.81 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/K+.lmp b/mdgo/data/ion/jensen_jorgensen/K+.lmp deleted file mode 100644 index cfeae7e2..00000000 --- a/mdgo/data/ion/jensen_jorgensen/K+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -K+ -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 39.0983 - -Pair Coeffs #lj/cut/coul/long - - 1 0.0005 5.17 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/Li+.lmp b/mdgo/data/ion/jensen_jorgensen/Li+.lmp deleted file mode 100644 index 80466706..00000000 --- a/mdgo/data/ion/jensen_jorgensen/Li+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Li+ -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 6.940 - -Pair Coeffs #lj/cut/coul/long - - 1 0.0005 2.87 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/NH4+.lmp b/mdgo/data/ion/jensen_jorgensen/NH4+.lmp deleted file mode 100644 index 9d77ee57..00000000 --- a/mdgo/data/ion/jensen_jorgensen/NH4+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -NH4+ united-atiom parameter -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 18.038 - -Pair Coeffs #lj/cut/coul/long - - 1 0.0005 5.34 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/Na+.lmp b/mdgo/data/ion/jensen_jorgensen/Na+.lmp deleted file mode 100644 index 1780909d..00000000 --- a/mdgo/data/ion/jensen_jorgensen/Na+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Na+ -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 22.990 - -Pair Coeffs #lj/cut/coul/long - - 1 0.0005 4.07 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/jensen_jorgensen/Rb+.lmp b/mdgo/data/ion/jensen_jorgensen/Rb+.lmp deleted file mode 100644 index 171d8692..00000000 --- a/mdgo/data/ion/jensen_jorgensen/Rb+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Rb+ -# Kasper P. Jensen and William L. Jorgensen, J. Chem. Theory Comput. 2006, 2, 6, 1499–1509. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 85.4678 - -Pair Coeffs #lj/cut/coul/long - - 1 0.0005 5.60 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/Br-.lmp.data b/mdgo/data/ion/joung_cheatham/spce/Br-.lmp.data deleted file mode 100644 index 59129416..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/Br-.lmp.data +++ /dev/null @@ -1,22 +0,0 @@ -Br- optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 79.904 - -Pair Coeffs #lj/cut/coul/long - - 1 0.027 5.144 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/Cl-.lmp b/mdgo/data/ion/joung_cheatham/spce/Cl-.lmp deleted file mode 100644 index 296d34ec..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/Cl-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cl- optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 35.453 - -Pair Coeffs #lj/cut/coul/long - - 1 0.013 5.053 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/Cs+.lmp b/mdgo/data/ion/joung_cheatham/spce/Cs+.lmp deleted file mode 100644 index ded2e690..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/Cs+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cs+ optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 132.905 - -Pair Coeffs #lj/cut/coul/long - - 1 0.090 3.617 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/F-.lmp b/mdgo/data/ion/joung_cheatham/spce/F-.lmp deleted file mode 100644 index b5cae983..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/F-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -F- optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 18.998 - -Pair Coeffs #lj/cut/coul/long - - 1 0.007 4.081 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/I-.lmp b/mdgo/data/ion/joung_cheatham/spce/I-.lmp deleted file mode 100644 index b291ff1e..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/I-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -I- optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 126.90 - -Pair Coeffs #lj/cut/coul/long - - 1 0.043 5.533 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/K+.lmp b/mdgo/data/ion/joung_cheatham/spce/K+.lmp deleted file mode 100644 index 464d8fa7..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/K+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -K+ optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 39.0983 - -Pair Coeffs #lj/cut/coul/long - - 1 0.430 2.846 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/Li+.lmp b/mdgo/data/ion/joung_cheatham/spce/Li+.lmp deleted file mode 100644 index 3035e2c9..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/Li+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Li+ optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 6.940 - -Pair Coeffs #lj/cut/coul/long - - 1 0.337 1.651 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/Na+.lmp b/mdgo/data/ion/joung_cheatham/spce/Na+.lmp deleted file mode 100644 index a0c5f9be..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/Na+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Na+ optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 22.990 - -Pair Coeffs #lj/cut/coul/long - - 1 0.353 2.238 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/spce/Rb+.lmp b/mdgo/data/ion/joung_cheatham/spce/Rb+.lmp deleted file mode 100644 index 4bb2839e..00000000 --- a/mdgo/data/ion/joung_cheatham/spce/Rb+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Rb+ optimized for SPC/E water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 85.4678 - -Pair Coeffs #lj/cut/coul/long - - 1 0.445 3.095 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/Br-.lmp.data b/mdgo/data/ion/joung_cheatham/tip3p/Br-.lmp.data deleted file mode 100644 index fd92edd4..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/Br-.lmp.data +++ /dev/null @@ -1,22 +0,0 @@ -Br- optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 79.904 - -Pair Coeffs #lj/cut/coul/long - - 1 0.059 4.824 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/Cl-.lmp b/mdgo/data/ion/joung_cheatham/tip3p/Cl-.lmp deleted file mode 100644 index aab4afd2..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/Cl-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cl- optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 35.453 - -Pair Coeffs #lj/cut/coul/long - - 1 0.036 4.617 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/Cs+.lmp b/mdgo/data/ion/joung_cheatham/tip3p/Cs+.lmp deleted file mode 100644 index 5df55535..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/Cs+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cs+ optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 132.905 - -Pair Coeffs #lj/cut/coul/long - - 1 0.407 3.532 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/F-.lmp b/mdgo/data/ion/joung_cheatham/tip3p/F-.lmp deleted file mode 100644 index bf0d2293..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/F-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -F- optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 18.998 - -Pair Coeffs #lj/cut/coul/long - - 1 0.003 4.175 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/I-.lmp b/mdgo/data/ion/joung_cheatham/tip3p/I-.lmp deleted file mode 100644 index 1252121e..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/I-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -I- optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 126.90 - -Pair Coeffs #lj/cut/coul/long - - 1 0.054 5.395 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/K+.lmp b/mdgo/data/ion/joung_cheatham/tip3p/K+.lmp deleted file mode 100644 index b79e821c..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/K+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -K+ optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 39.0983 - -Pair Coeffs #lj/cut/coul/long - - 1 0.194 3.039 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/Li+.lmp b/mdgo/data/ion/joung_cheatham/tip3p/Li+.lmp deleted file mode 100644 index 935fdbed..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/Li+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Li+ optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 6.940 - -Pair Coeffs #lj/cut/coul/long - - 1 0.028 1.966 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/Na+.lmp b/mdgo/data/ion/joung_cheatham/tip3p/Na+.lmp deleted file mode 100644 index bffc1028..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/Na+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Na+ optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 22.990 - -Pair Coeffs #lj/cut/coul/long - - 1 0.087 2.480 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip3p/Rb+.lmp b/mdgo/data/ion/joung_cheatham/tip3p/Rb+.lmp deleted file mode 100644 index 943d4f30..00000000 --- a/mdgo/data/ion/joung_cheatham/tip3p/Rb+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Rb+ optimized for TIP3P water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 85.4678 - -Pair Coeffs #lj/cut/coul/long - - 1 0.328 3.231 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/Br-.lmp.data b/mdgo/data/ion/joung_cheatham/tip4pew/Br-.lmp.data deleted file mode 100644 index 43be2d0c..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/Br-.lmp.data +++ /dev/null @@ -1,22 +0,0 @@ -Br- optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 79.904 - -Pair Coeffs #lj/cut/coul/long - - 1 0.030 5.183 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/Cl-.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/Cl-.lmp deleted file mode 100644 index 2ae45ca3..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/Cl-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cl- optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 35.453 - -Pair Coeffs #lj/cut/coul/long - - 1 0.012 5.164 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/Cs+.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/Cs+.lmp deleted file mode 100644 index 40c8973d..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/Cs+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Cs+ optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 132.905 - -Pair Coeffs #lj/cut/coul/long - - 1 0.394 3.368 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/F-.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/F-.lmp deleted file mode 100644 index 9a6d2b3b..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/F-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -F- optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 18.998 - -Pair Coeffs #lj/cut/coul/long - - 1 0.002 4.671 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/I-.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/I-.lmp deleted file mode 100644 index 660eaba4..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/I-.lmp +++ /dev/null @@ -1,22 +0,0 @@ -I- optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 126.90 - -Pair Coeffs #lj/cut/coul/long - - 1 0.042 5.612 - -Atoms - - 1 1 1 -1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/K+.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/K+.lmp deleted file mode 100644 index 24b783ba..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/K+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -K+ optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 39.0983 - -Pair Coeffs #lj/cut/coul/long - - 1 0.279 2.841 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/Li+.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/Li+.lmp deleted file mode 100644 index 246e15bc..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/Li+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Li+ optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 6.940 - -Pair Coeffs #lj/cut/coul/long - - 1 0.104 1.673 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/Na+.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/Na+.lmp deleted file mode 100644 index f9556f56..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/Na+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Na+ optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 22.990 - -Pair Coeffs #lj/cut/coul/long - - 1 0.168 2.259 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion/joung_cheatham/tip4pew/Rb+.lmp b/mdgo/data/ion/joung_cheatham/tip4pew/Rb+.lmp deleted file mode 100644 index e1995153..00000000 --- a/mdgo/data/ion/joung_cheatham/tip4pew/Rb+.lmp +++ /dev/null @@ -1,22 +0,0 @@ -Rb+ optimized for TIP4P_EW water model -# In Suk Joung and Thomas E. Cheatham III, J. Phys. Chem. B 2008, 112, 30, 9020–9041. - - 1 atoms - - 1 atom types - - 0.0 1.0 xlo xhi - 0.0 1.0 ylo yhi - 0.0 1.0 zlo zhi - -Masses - - 1 85.4678 - -Pair Coeffs #lj/cut/coul/long - - 1 0.433 3.046 - -Atoms - - 1 1 1 1.0 0.50000 0.50000 0.50000 diff --git a/mdgo/data/ion_lj_params.json b/mdgo/data/ion_lj_params.json new file mode 100644 index 00000000..2014c35a --- /dev/null +++ b/mdgo/data/ion_lj_params.json @@ -0,0 +1 @@ +[{"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Li[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 2.87, "epsilon": 0.0005}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Li[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": 1.4094017720980168, "epsilon": 0.3367344}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Li[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 1.8263423721876955, "epsilon": 0.0279896}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Li[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 1.4396923285147885, "epsilon": 0.1039884}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Li[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.351972615890496, "epsilon": 0.00633615}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Li[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.3537544133267763, "epsilon": 0.0064158}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Li[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.327027451782566, "epsilon": 0.00530214}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Li[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.3252456543462854, "epsilon": 0.00523385}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Na[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 4.07, "epsilon": 0.0005}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Na[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": 2.159538492772182, "epsilon": 0.3526418}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Na[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 2.439280690268249, "epsilon": 0.0874393}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Na[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 2.184483656880112, "epsilon": 0.1684375}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Na[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.6014242569697905, "epsilon": 0.0278401}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Na[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.6192422313325974, "epsilon": 0.0303831}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Na[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.5836062826069837, "epsilon": 0.02545423}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Na[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.565788308244177, "epsilon": 0.02322071}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "K[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 5.17, "epsilon": 0.0005}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "K[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": 2.8384033159951207, "epsilon": 0.4297054}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "K[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 3.037964628858557, "epsilon": 0.1936829}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "K[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 2.833057923686279, "epsilon": 0.2794651}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "K[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.1021093365646615, "epsilon": 0.16721338}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "K[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.105672931437223, "epsilon": 0.1686942}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "K[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.0949821468195386, "epsilon": 0.16426906}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "K[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.0967639442558195, "epsilon": 0.16500296}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Rb[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 5.6, "epsilon": 0.0005}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Rb[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": 3.0949821468195386, "epsilon": 0.4451036}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Rb[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 3.23039875197687, "epsilon": 0.3278219}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Rb[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 3.0450918186036797, "epsilon": 0.4331494}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Rb[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.225053359668028, "epsilon": 0.22132374}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Rb[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.225053359668028, "epsilon": 0.22132374}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Rb[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.225053359668028, "epsilon": 0.22132374}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Rb[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.210798980177783, "epsilon": 0.21475916}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Cs[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 6.2, "epsilon": 0.0005}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cs[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": 3.601012618723251, "epsilon": 0.0898565}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cs[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 3.5208317340906206, "epsilon": 0.4065394}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cs[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 3.364033559697921, "epsilon": 0.3944318}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cs[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.542213303325989, "epsilon": 0.37853483}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cs[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.5457768981985502, "epsilon": 0.38035199}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cs[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.563594872561357, "epsilon": 0.3894325}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cs[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.5457768981985502, "epsilon": 0.38035199}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "F[-1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 3.05, "epsilon": 0.71}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "F[-1]", "combining_rule": "LB", "water_model": "spce", "sigma": 4.0215168136854915, "epsilon": 0.0074005}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "F[-1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 4.103479495754403, "epsilon": 0.003364}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "F[-1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 4.522201893280362, "epsilon": 0.0015752}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "F[-1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.105672931437223, "epsilon": 0.1686942}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "F[-1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.0949821468195386, "epsilon": 0.16426906}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "F[-1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.1003275391283807, "epsilon": 0.16647513}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "F[-1]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.064691590402767, "epsilon": 0.15202035}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Cl[-1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 4.02, "epsilon": 0.71}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cl[-1]", "combining_rule": "LB", "water_model": "spce", "sigma": 4.830452849756919, "epsilon": 0.012785}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cl[-1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 4.477656957373345, "epsilon": 0.035591}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cl[-1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 4.917760924134672, "epsilon": 0.0116615}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cl[-1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.8593732469839495, "epsilon": 0.53486081}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cl[-1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.848682462366266, "epsilon": 0.52988504}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cl[-1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.8593732469839495, "epsilon": 0.53486081}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cl[-1]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.8308644880034586, "epsilon": 0.52153239}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Br[-1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 4.28, "epsilon": 0.71}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Br[-1]", "combining_rule": "LB", "water_model": "spce", "sigma": 4.901724747208147, "epsilon": 0.0269586}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Br[-1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 4.64692771382001, "epsilon": 0.0586554}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Br[-1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 4.932015303624918, "epsilon": 0.0303773}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Br[-1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 4.1515880265339815, "epsilon": 0.65885086}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Br[-1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 4.124861064989771, "epsilon": 0.64855145}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Br[-1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 4.169406000896788, "epsilon": 0.66559495}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Br[-1]", "combining_rule": "LB", "water_model": "opc", "sigma": 4.1195156726809286, "epsilon": 0.64646527}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "I[-1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 4.81, "epsilon": 0.71}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "I[-1]", "combining_rule": "LB", "water_model": "spce", "sigma": 5.201066716503301, "epsilon": 0.0427845}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "I[-1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": 5.095940667762741, "epsilon": 0.0536816}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "I[-1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": 5.259866031900563, "epsilon": 0.0417082}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "I[-1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 4.627327942020922, "epsilon": 0.80596674}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "I[-1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 4.614855359966957, "epsilon": 0.80293907}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "I[-1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 4.611291765094396, "epsilon": 0.80206648}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "I[-1]", "combining_rule": "LB", "water_model": "opc", "sigma": 4.584564803550186, "epsilon": 0.79541413}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "H4N[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": 5.34, "epsilon": 0.0005}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "H4N[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "H4N[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "H4N[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "H4N[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "H4N[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "H4N[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "H4N[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Tl[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tl[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tl[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tl[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.3230522186634657, "epsilon": 0.26807617}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.3248340160997465, "epsilon": 0.26894857}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.3141432314820625, "epsilon": 0.26372453}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.287416269937852, "epsilon": 0.25078}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Cu[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cu[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cu[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cu[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.1631020876447438, "epsilon": 0.00139196}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.1613202902084634, "epsilon": 0.00136949}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.1524113030270597, "epsilon": 0.00126172}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.139938720973095, "epsilon": 0.001123}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Ag[+1]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ag[+1]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ag[+1]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ag[+1]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ag[+1]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.681605141602421, "epsilon": 0.04058327}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ag[+1]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.676259749293579, "epsilon": 0.03962711}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ag[+1]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.638842003131685, "epsilon": 0.03336723}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ag[+1]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.6530963826219307, "epsilon": 0.03566355}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Be[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Be[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Be[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Be[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Be[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.072230418394429, "epsilon": 0.00057544}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Be[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.0704486209581483, "epsilon": 0.00056491}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Be[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.0490670517227803, "epsilon": 0.00045105}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Be[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.0241218876148506, "epsilon": 0.00034392}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Cu[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cu[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cu[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cu[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.5176797774645987, "epsilon": 0.01791152}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.5176797774645987, "epsilon": 0.01791152}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.49451641079295, "epsilon": 0.01570749}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cu[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.478480233866424, "epsilon": 0.01430674}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Ni[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ni[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ni[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ni[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ni[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.4464078800133717, "epsilon": 0.01179373}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ni[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.4464078800133717, "epsilon": 0.01179373}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ni[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.4196809184691617, "epsilon": 0.00997323}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ni[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.396517551797513, "epsilon": 0.00858042}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Zn[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Zn[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Zn[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Zn[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zn[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.49451641079295, "epsilon": 0.01570749}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zn[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.49451641079295, "epsilon": 0.01570749}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zn[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.4642258543761786, "epsilon": 0.01314367}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zn[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.4464078800133717, "epsilon": 0.01179373}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Co[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Co[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Co[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Co[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Co[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.505207195410634, "epsilon": 0.0166976}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Co[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.505207195410634, "epsilon": 0.0166976}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Co[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.480262031302704, "epsilon": 0.01445748}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Co[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.4624440569398978, "epsilon": 0.01300356}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Cr[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cr[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cr[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cr[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.478480233866424, "epsilon": 0.01430674}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.478480233866424, "epsilon": 0.01430674}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.449971474885933, "epsilon": 0.01205473}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.4303717030868457, "epsilon": 0.01067299}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Fe[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Fe[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Fe[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Fe[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.5176797774645987, "epsilon": 0.01791152}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.5176797774645987, "epsilon": 0.01430674}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.49451641079295, "epsilon": 0.01570749}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.478480233866424, "epsilon": 0.01430674}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Mg[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Mg[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Mg[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Mg[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mg[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.49451641079295, "epsilon": 0.01570749}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mg[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.49451641079295, "epsilon": 0.01570749}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mg[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.4642258543761786, "epsilon": 0.01314367}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mg[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.4464078800133717, "epsilon": 0.01179373}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "V[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "V[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "V[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "V[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "V[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.6370602056954042, "epsilon": 0.03308772}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "V[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.6370602056954042, "epsilon": 0.03308772}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "V[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.610333244151194, "epsilon": 0.02909167}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "V[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.5942970672246677, "epsilon": 0.02686716}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Mn[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Mn[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Mn[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Mn[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mn[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.604987851842352, "epsilon": 0.02833599}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mn[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.604987851842352, "epsilon": 0.02833599}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mn[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.59964245953351, "epsilon": 0.02759452}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Mn[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.5729154979892996, "epsilon": 0.02409615}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Hg[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Hg[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Hg[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Hg[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hg[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.822367139068595, "epsilon": 0.07163727}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hg[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.822367139068595, "epsilon": 0.07163727}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hg[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.8009855698332267, "epsilon": 0.06617338}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hg[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.788512987779262, "epsilon": 0.06311131}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Cd[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cd[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cd[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cd[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cd[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.7083321031466316, "epsilon": 0.04560206}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cd[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.7190228877643157, "epsilon": 0.04772212}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cd[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.692295926220105, "epsilon": 0.04254294}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cd[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.683386939038702, "epsilon": 0.04090549}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Ca[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ca[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ca[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ca[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ca[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.8811664544658573, "epsilon": 0.08806221}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ca[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.8811664544658573, "epsilon": 0.08806221}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ca[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ca[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.833057923686279, "epsilon": 0.07447106}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Sn[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sn[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sn[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sn[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sn[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.1110183237460647, "epsilon": 0.17092614}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sn[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.1110183237460647, "epsilon": 0.17092614}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sn[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.0842913622018546, "epsilon": 0.1598965}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sn[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.0557826032213637, "epsilon": 0.1485017}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Sr[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sr[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sr[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sr[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sr[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.1395270827265556, "epsilon": 0.183041}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sr[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.1395270827265556, "epsilon": 0.183041}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sr[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.1110183237460647, "epsilon": 0.17092614}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sr[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.0842913622018546, "epsilon": 0.1598965}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Ba[+2]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ba[+2]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ba[+2]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ba[+2]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ba[+2]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.4174874827863415, "epsilon": 0.31509345}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ba[+2]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.4174874827863415, "epsilon": 0.31509345}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ba[+2]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.385415128933289, "epsilon": 0.29896986}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ba[+2]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.3551245725165177, "epsilon": 0.28387745}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Al[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Al[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Al[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Al[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Al[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.2931733004932333, "epsilon": 0.00412163}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Al[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.2931733004932333, "epsilon": 0.00412163}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Al[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.2575373517676196, "epsilon": 0.00312065}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Al[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.2272467953508484, "epsilon": 0.00243637}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Fe[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Fe[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Fe[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Fe[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.5283705620822827, "epsilon": 0.0190038}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.5283705620822827, "epsilon": 0.0190038}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.5016436005380727, "epsilon": 0.01636246}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Fe[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.49451641079295, "epsilon": 0.01570749}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Cr[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cr[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cr[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Cr[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.4303717030868457, "epsilon": 0.01067299}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.4303717030868457, "epsilon": 0.01067299}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.396517551797513, "epsilon": 0.00858042}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Cr[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.3804813748709868, "epsilon": 0.00770969}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "In[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "In[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "In[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "In[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "In[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.5746972954255805, "epsilon": 0.02431873}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "In[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.588951674915826, "epsilon": 0.02615377}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "In[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.5711337005530193, "epsilon": 0.02387506}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "In[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.565788308244177, "epsilon": 0.02322071}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Tl[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tl[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tl[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tl[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.665568964675895, "epsilon": 0.03776169}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.665568964675895, "epsilon": 0.03776169}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.6513145851856494, "epsilon": 0.03537062}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tl[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.6424055980042462, "epsilon": 0.03393126}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Y[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Y[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Y[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Y[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Y[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Y[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Y[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.820585341632314, "epsilon": 0.07117158}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Y[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.8063309621420687, "epsilon": 0.06751391}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "La[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "La[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "La[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "La[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "La[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.0842913622018546, "epsilon": 0.1598965}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "La[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.0878549570744163, "epsilon": 0.16134811}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "La[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.0557826032213637, "epsilon": 0.1485017}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "La[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.0290556416771532, "epsilon": 0.13818331}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Ce[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ce[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ce[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ce[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.1252727032363103, "epsilon": 0.17693975}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.1323998929814327, "epsilon": 0.1799796}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.0967639442558195, "epsilon": 0.16500296}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.0736005775841706, "epsilon": 0.15557763}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Pr[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Pr[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Pr[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Pr[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pr[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.1110183237460647, "epsilon": 0.17092614}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pr[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.1181455134911875, "epsilon": 0.17392181}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pr[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.0842913622018546, "epsilon": 0.1598965}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pr[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.0593461980939254, "epsilon": 0.14990448}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Nd[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Nd[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Nd[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Nd[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Nd[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.014801262186908, "epsilon": 0.13282966}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Nd[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.014801262186908, "epsilon": 0.13282966}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Nd[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.9845107057701368, "epsilon": 0.12180998}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Nd[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.9613473390984875, "epsilon": 0.11371963}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Sm[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sm[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sm[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Sm[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sm[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.970256326279891, "epsilon": 0.11679623}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sm[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.970256326279891, "epsilon": 0.11679623}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sm[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.9399657698631194, "epsilon": 0.10651723}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Sm[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.9185842006277514, "epsilon": 0.09957472}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Eu[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Eu[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Eu[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Eu[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Eu[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.9845107057701368, "epsilon": 0.12180998}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Eu[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.9845107057701368, "epsilon": 0.12180998}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Eu[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.954220149353365, "epsilon": 0.11129023}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Eu[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.9328385801179966, "epsilon": 0.10417397}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Gd[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Gd[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Gd[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Gd[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Gd[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.8954208339561025, "epsilon": 0.09235154}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Gd[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.8954208339561025, "epsilon": 0.09235154}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Gd[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.8651302775393312, "epsilon": 0.08337961}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Gd[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Tb[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tb[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tb[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tb[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tb[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.909675213446348, "epsilon": 0.09675968}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tb[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.909675213446348, "epsilon": 0.09675968}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tb[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.8811664544658573, "epsilon": 0.08806221}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tb[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.8651302775393312, "epsilon": 0.08337961}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Dy[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Dy[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Dy[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Dy[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Dy[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.8651302775393312, "epsilon": 0.08337961}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Dy[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.8651302775393312, "epsilon": 0.08337961}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Dy[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.8366215185588404, "epsilon": 0.07543075}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Dy[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.820585341632314, "epsilon": 0.07117158}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Er[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Er[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Er[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Er[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Er[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Er[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Er[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.820585341632314, "epsilon": 0.07117158}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Er[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.8063309621420687, "epsilon": 0.06751391}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Tm[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tm[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tm[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Tm[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tm[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tm[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.850875898049086, "epsilon": 0.07934493}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tm[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.820585341632314, "epsilon": 0.07117158}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Tm[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.8063309621420687, "epsilon": 0.06751391}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Lu[+3]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Lu[+3]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Lu[+3]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Lu[+3]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Lu[+3]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.820585341632314, "epsilon": 0.07117158}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Lu[+3]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.820585341632314, "epsilon": 0.07117158}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Lu[+3]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.792076582651823, "epsilon": 0.06397679}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Lu[+3]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.7760404057252974, "epsilon": 0.06014121}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Hf[+4]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Hf[+4]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Hf[+4]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Hf[+4]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hf[+4]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.6530963826219307, "epsilon": 0.03566355}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hf[+4]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.6530963826219307, "epsilon": 0.03566355}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hf[+4]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.6138968390237554, "epsilon": 0.02960343}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Hf[+4]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.6032060544060713, "epsilon": 0.02808726}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Zr[+4]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Zr[+4]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Zr[+4]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Zr[+4]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zr[+4]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.686950533911263, "epsilon": 0.04155519}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zr[+4]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.686950533911263, "epsilon": 0.04155519}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zr[+4]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.6637871672396147, "epsilon": 0.03745682}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Zr[+4]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.6513145851856494, "epsilon": 0.03537062}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Ce[+4]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ce[+4]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ce[+4]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Ce[+4]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+4]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.037964628858557, "epsilon": 0.14158262}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+4]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.043310021167399, "epsilon": 0.1436416}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+4]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.014801262186908, "epsilon": 0.13282966}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Ce[+4]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.998765085260382, "epsilon": 0.12693448}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "U[+4]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "U[+4]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "U[+4]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "U[+4]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "U[+4]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.037964628858557, "epsilon": 0.14158262}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "U[+4]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.043310021167399, "epsilon": 0.1436416}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "U[+4]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.014801262186908, "epsilon": 0.13282966}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "U[+4]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.998765085260382, "epsilon": 0.12693448}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Pu[+4]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Pu[+4]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Pu[+4]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Pu[+4]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pu[+4]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 2.996983287824101, "epsilon": 0.12628793}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pu[+4]", "combining_rule": "LB", "water_model": "opc3", "sigma": 2.996983287824101, "epsilon": 0.12628793}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pu[+4]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 2.970256326279891, "epsilon": 0.11679623}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Pu[+4]", "combining_rule": "LB", "water_model": "opc", "sigma": 2.954220149353365, "epsilon": 0.11129023}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "jensen_jorgensen", "formula": "Th[+4]", "combining_rule": "geometric", "water_model": "tip4p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Th[+4]", "combining_rule": "LB", "water_model": "spce", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Th[+4]", "combining_rule": "LB", "water_model": "tip3p", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "joung_cheatham", "formula": "Th[+4]", "combining_rule": "LB", "water_model": "tip4pew", "sigma": NaN, "epsilon": NaN}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Th[+4]", "combining_rule": "LB", "water_model": "tip3pfb", "sigma": 3.0611279955302058, "epsilon": 0.15060822}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Th[+4]", "combining_rule": "LB", "water_model": "opc3", "sigma": 3.0664733878390478, "epsilon": 0.15272873}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Th[+4]", "combining_rule": "LB", "water_model": "tip4pfb", "sigma": 3.0450918186036797, "epsilon": 0.14433113}, {"@module": "mdgo.forcefield", "@class": "IonLJData", "@version": null, "name": "li_merz", "formula": "Th[+4]", "combining_rule": "LB", "water_model": "opc", "sigma": 3.036182831422276, "epsilon": 0.14089951}] \ No newline at end of file diff --git a/mdgo/data/water/water_opc.lmp b/mdgo/data/water/water_opc.lmp new file mode 100644 index 00000000..dc5f34fd --- /dev/null +++ b/mdgo/data/water/water_opc.lmp @@ -0,0 +1,55 @@ +OPC3 water model +# Original model from Izadi, Anandakrishnan, and Onufriev, Building Water Models: +# A Different Approach. J. Phys. Chem. Lett. 2014, 5, 21, 3863–3871 +# https://doi.org/10.1021/jz501780a +# Table 2. +# real units (kcal/mol, Angstrom) +# Command 'fix shake' is needed. +# LJ and couloumb cutoffs of 9 and 7 angstroms are adopted from the TIP3B-FB paper +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. + + 3 atoms + 2 bonds + 1 angles + + 2 atom types + 1 bond types + 1 angle types + + 0.0 3.1 xlo xhi + 0.0 3.1 ylo yhi + 0.0 3.1 zlo zhi + +Masses + + 1 1.00794 + 2 15.9994 + +Pair Coeffs #lj/cut/tip4p/long 2 1 1 1 0.1594 9.0 7.0 + + 1 0.0000 0.0000 + 2 0.21280 3.16655 + +Bond Coeffs #harmonic + + 1 1000 0.8724 + +Angle Coeffs #harmonic + + 1 1000 103.6 + +Atoms + + 1 1 2 -1.3582 1.55000 1.55000 1.50000 + 2 1 1 0.6791 1.55000 2.36649 2.07736 + 3 1 1 0.6791 1.55000 0.73351 2.07736 + +Bonds + + 1 1 1 2 + 2 1 1 3 + +Angles + + 1 1 2 1 3 diff --git a/mdgo/data/water/water_opc3.lmp b/mdgo/data/water/water_opc3.lmp new file mode 100644 index 00000000..5ff74ba1 --- /dev/null +++ b/mdgo/data/water/water_opc3.lmp @@ -0,0 +1,53 @@ +OPC3 water model +# Original model from Izadi and Onufriev, Accuracy limit of rigid 3-point water models +# J. Chemical Physics 145, 074501, 2016. https://doi.org/10.1063/1.4960175, Table II. +# real units (kcal/mol, Angstrom) +# Command 'fix shake' is needed. +# LJ and couloumb cutoffs of 9 and 7 angstroms are adopted from the TIP3B-FB paper +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. + + 3 atoms + 2 bonds + 1 angles + + 2 atom types + 1 bond types + 1 angle types + + 0.0 3.1 xlo xhi + 0.0 3.1 ylo yhi + 0.0 3.1 zlo zhi + +Masses + + 1 1.00794 + 2 15.9994 + +Pair Coeffs #lj/cut/coul/long 9.0 7.0 + + 1 0.000 0.000 + 2 0.16340 3.17427 + +Bond Coeffs #harmonic + + 1 1000 0.97888 + +Angle Coeffs #harmonic + + 1 1000 109.47 + +Atoms + + 1 1 2 -0.89517 1.55000 1.55000 1.50000 + 2 1 1 0.447585 1.55000 2.36649 2.07736 + 3 1 1 0.447585 1.55000 0.73351 2.07736 + +Bonds + + 1 1 1 2 + 2 1 1 3 + +Angles + + 1 1 2 1 3 diff --git a/mdgo/data/water/water_spc.lmp b/mdgo/data/water/water_spc.lmp index 3629ab44..7a630ee3 100644 --- a/mdgo/data/water/water_spc.lmp +++ b/mdgo/data/water/water_spc.lmp @@ -1,5 +1,7 @@ SPC water model # Berendsen et al, in "Intermolecular forces", p. 331 (1981). Command 'fix shake' is needed. +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. 3 atoms 2 bonds @@ -25,11 +27,11 @@ Pair Coeffs #lj/cut/coul/long 10.0 Bond Coeffs #harmonic - 1 0.0 1.0 + 1 1000 1.0 Angle Coeffs #harmonic - 1 0.0 109.47 + 1 1000 109.47 Atoms diff --git a/mdgo/data/water/water_spce.lmp b/mdgo/data/water/water_spce.lmp index fcc55ddd..fd8aa791 100644 --- a/mdgo/data/water/water_spce.lmp +++ b/mdgo/data/water/water_spce.lmp @@ -1,5 +1,7 @@ SPC/E water model # From Berendsen et al, J Phys Chem 91:6269 (1987). Command 'fix shake' is needed. +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. 3 atoms 2 bonds @@ -25,11 +27,11 @@ Pair Coeffs #lj/cut/coul/long 10.0 Bond Coeffs #harmonic - 1 0.0 1.0 + 1 1000 1.0 Angle Coeffs #harmonic - 1 0.0 109.47 + 1 1000 109.47 Atoms diff --git a/mdgo/data/water/water_tip3p_fb.lmp b/mdgo/data/water/water_tip3p_fb.lmp new file mode 100644 index 00000000..3f9f7776 --- /dev/null +++ b/mdgo/data/water/water_tip3p_fb.lmp @@ -0,0 +1,54 @@ +Optimized TIP3P-FB parameters for water +# Original model from Wang et al., Building Force Fields: An Automatic, +# Systematic, and Reproducible Approach, J. Phys. Chem. Letters 5(11), 2014. +# https://pubs.acs.org/doi/10.1021/jz500737m +# real units (kcal/mol, Angstrom) +# Command 'fix shake' is needed. +# LJ and couloumb cutoffs of 9 and 7 angstroms were used in the original work +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. + + 3 atoms + 2 bonds + 1 angles + + 2 atom types + 1 bond types + 1 angle types + + 0.0 3.1 xlo xhi + 0.0 3.1 ylo yhi + 0.0 3.1 zlo zhi + +Masses + + 1 1.00794 + 2 15.9994 + +Pair Coeffs #lj/cut/coul/long 9.0 7.0 + + 1 0.000 0.000 + 2 0.15587 3.1780 + +Bond Coeffs #harmonic + + 1 1000 1.0118 + +Angle Coeffs #harmonic + + 1 1000 108.15 + +Atoms + + 1 1 2 -0.84844 1.55000 1.55000 1.50000 + 2 1 1 0.42422 1.55000 2.36649 2.07736 + 3 1 1 0.42422 1.55000 0.73351 2.07736 + +Bonds + + 1 1 1 2 + 2 1 1 3 + +Angles + + 1 1 2 1 3 diff --git a/mdgo/data/water/water_tip4p_2005.lmp b/mdgo/data/water/water_tip4p_2005.lmp index 4f448a9d..4b81832c 100644 --- a/mdgo/data/water/water_tip4p_2005.lmp +++ b/mdgo/data/water/water_tip4p_2005.lmp @@ -1,5 +1,7 @@ This forcefield file sets a 13-Angstrom cutoff, recommended for liquid-vapor simulations -# [Vega & de Miguel, J Chem Phys 126:154707 (2007), Vega et al, Faraday Discuss 141:251 (2009)]. Note that the original TIP4P/2005 model was run with an 8.5 Angstrom cutoff [Abascal & Vega, J Chem Phys 123:234505 (2005)]. +# [Vega & de Miguel, J Chem Phys 126:154707 (2007), Vega et al, Faraday Discuss 141:251 (2009)]. Note that the original TIP4P/2005 model was run with an 8.5 Angstrom cutoff [Abascal & Vega, J Chem Phys 123:234505 (2005)]. +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. 3 atoms 2 bonds @@ -25,11 +27,11 @@ Pair Coeffs #lj/cut/tip4p/long 2 1 1 1 0.1546 13.0 Bond Coeffs #harmonic - 1 0.0 0.9572 + 1 1000 0.9572 Angle Coeffs #harmonic - 1 0.0 104.52 + 1 1000 104.52 Atoms diff --git a/mdgo/data/water/water_tip4p_ew.lmp b/mdgo/data/water/water_tip4p_ew.lmp index 4b079bae..a65b9343 100644 --- a/mdgo/data/water/water_tip4p_ew.lmp +++ b/mdgo/data/water/water_tip4p_ew.lmp @@ -1,5 +1,7 @@ Optimized TIP4P parameters to use with Ewald methods for long-range electrostatics. (e.g. pppm/tip4p 1.0e-5) # Original model from Horn et al, J Chem Phys 120: 9665 (2004). Command 'fix shake' is needed. +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. 3 atoms 2 bonds @@ -25,11 +27,11 @@ Pair Coeffs #lj/cut/tip4p/long 2 1 1 1 0.125 10.0 Bond Coeffs #harmonic - 1 0.0 0.9572 + 1 1000 0.9572 Angle Coeffs #harmonic - 1 0.0 104.52 + 1 1000 104.52 Atoms diff --git a/mdgo/data/water/water_tip4p_fb.lmp b/mdgo/data/water/water_tip4p_fb.lmp new file mode 100644 index 00000000..d5aee0a8 --- /dev/null +++ b/mdgo/data/water/water_tip4p_fb.lmp @@ -0,0 +1,54 @@ +Optimized TIP4P-FB parameters for water +# Original model from Wang et al., Building Force Fields: An Automatic, +# Systematic, and Reproducible Approach, J. Phys. Chem. Letters 5(11), 2014. +# https://pubs.acs.org/doi/10.1021/jz500737m +# real units (kcal/mol, Angstrom) +# Command 'fix shake' is needed. +# LJ and couloumb cutoffs of 9 and 7 angstroms were used in the original work +# Bond and angle coefficients of 1000 are added to keep the water molecule together +# during e.g. energy minimization in LAMMPS when `fix shake` is not active. + + 3 atoms + 2 bonds + 1 angles + + 2 atom types + 1 bond types + 1 angle types + + 0.0 3.1 xlo xhi + 0.0 3.1 ylo yhi + 0.0 3.1 zlo zhi + +Masses + + 1 1.00794 + 2 15.9994 + +Pair Coeffs #lj/cut/tip4p/long 2 1 1 1 0.10527 9.0 7.0 + + 1 0.000 0.000 + 2 0.17908 3.1655 + +Bond Coeffs #harmonic + + 1 1000 0.9572 + +Angle Coeffs #harmonic + + 1 1000 104.52 + +Atoms + + 1 1 2 -1.05174 1.55000 1.55000 1.50000 + 2 1 1 0.52587 1.55000 2.36649 2.07736 + 3 1 1 0.52587 1.55000 0.73351 2.07736 + +Bonds + + 1 1 1 2 + 2 1 1 3 + +Angles + + 1 1 2 1 3 diff --git a/mdgo/forcefield.py b/mdgo/forcefield.py index 197528db..01392d7e 100644 --- a/mdgo/forcefield.py +++ b/mdgo/forcefield.py @@ -22,31 +22,36 @@ https://www.schrodinger.com/kb/1842 for details. """ -import time import os import re import shutil import signal import subprocess -from typing import Optional +import time +from dataclasses import dataclass from string import Template +from typing import Optional, Union from urllib.parse import quote + import numpy as np import pubchempy as pcp -from pymatgen.io.lammps.data import LammpsData +from monty.json import MSONable +from monty.serialization import loadfn +from pymatgen.core import Lattice, Structure +from pymatgen.core.ion import Ion +from pymatgen.io.lammps.data import ForceField, LammpsData, Topology, lattice_2_lmpbox from selenium import webdriver -from selenium.webdriver.common.by import By -from selenium.webdriver.support.ui import WebDriverWait -from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import ( - TimeoutException, NoSuchElementException, + TimeoutException, WebDriverException, ) -from typing_extensions import Final - -from mdgo.util import lmp_mass_to_name, ff_parser, sdf_to_pdb +from selenium.webdriver.common.by import By +from selenium.webdriver.support import expected_conditions as EC +from selenium.webdriver.support.ui import WebDriverWait +from typing_extensions import Final, Literal +from mdgo.util import ff_parser, lmp_mass_to_name, sdf_to_pdb __author__ = "Tingzheng Hou" __version__ = "1.0" @@ -64,18 +69,26 @@ "spc": "water_spc.lmp", "spce": "water_spce.lmp", "tip3pew": "water_tip3p_ew.lmp", + "tip3pfb": "water_tip3p_fb.lmp", + "opc3": "water_opc3.lmp", "tip4p2005": "water_tip4p_2005.lmp", "tip4pew": "water_tip4p_ew.lmp", + "tip4pfb": "water_tip4p_fb.lmp", + "opc": "water_opc.lmp", }, - "ion": { - "aq": ["default"], - "aqvist": ["default"], - "jj": ["default"], - "jensen_jorgensen": ["default"], - "jc": ["spce", "tip3p", "tip4pew"], - "joung_cheatham": ["spce", "tip3p", "tip4pew"], - }, - "alias": {"aq": "aqvist", "jj": "jensen_jorgensen", "jc": "joung_cheatham"}, +} +WATER_SIGMA: Final[dict] = { + "spc": 3.16557, + "spce": 3.16557, + "tip3p": 3.1507, + "tip3pew": 3.188, + "tip3pfb": 3.178, + "opc": 3.16655, + "opc3": 3.17427, + "tip4p": 3.1536, + "tip4p2005": 3.1589, + "tip4pew": 3.16435, + "tip4pfb": 3.1655, } @@ -560,10 +573,65 @@ def _obtain_entry_api(self, search_text, name, output_format) -> Optional[str]: return cid +@dataclass +class IonLJData(MSONable): + """ + A lightweight dataclass for storing ion force field parameters. The data + file ion_lj_params.json distributed with mdgo is a serialized list of these + objects. + + Attributes: + name: The name of the parameter set + formula: formula of the ion, e.g. 'Li+' + combining_rule: the method used to compute pairwise interaction parameters + from single atom parameters. 'geometric' or 'LB' for Lorentz-Berthelot + water_model: The water model for which the ion parameters were optimized. + sigma: The Lennard Jones sigma value, in Å + epsilon: The Lennard Jones epsilon value, in kcal/mol + """ + + name: Literal["jensen_jorgensen", "joung_cheatham", "li_merz"] + formula: str + combining_rule: Literal["geometric", "LB"] + water_model: Literal[ + "spc", + "spce", + "tip3p", + "tip3pew", + "tip3pfb", + "opc3", + "tip4p2005", + "tip4p", + "tip4pew", + "tip4pfb", + "opc", + ] + sigma: float + epsilon: float + + class Aqueous: """ A class for retreiving water and ion force field parameters. + Available water models are: + 1. SPC + 2. SPC/E + 3. TIP3P-EW + 4. TIP3P-FB + 5. OPC3 + 6. TIP4P-EW + 7. TIP4P-2005 + 8. TIP4P-FB + 9. OPC + + Multiple sets of Lennard Jones parameters for ions are available as well. + Not every set is available for every water model. The parameter sets included + are: + 1. Jensen and Jorgensen, 2006 (abbreviation 'jj') + 2. Joung and Cheatham, 2008 (abbreviation 'jc') + 3. Li and Merz group, 2020 (abbreviation, 'lm') + Examples: Retreive SPC/E water model: >>> spce_data = Aqueous.get_water() @@ -574,64 +642,183 @@ class Aqueous: """ @staticmethod - def get_water(model: str = "spce") -> Optional[LammpsData]: + def get_water(model: str = "spce") -> LammpsData: """ Retrieve water model parameters. Args: - model: Water model to use. Valid choices are "spc", "spce", - "tip3pew", "tip4p2005", and "tip4pew". (Default: "spce") + model: Water model to use. Valid choices are "spc", "spce", "opc3", + "tip3pew", "tip3pfb", "tip4p2005", "tip4pew", "tip4pfb", and "opc". + (Default: "spce") Returns: LammpsData: Force field parameters for the chosen water model. If you specify an invalid water model, None is returned. """ - data_path = DATA_DIR signature = "".join(re.split(r"[\W|_]+", model)).lower() if DATA_MODELS["water"].get(signature): - return LammpsData.from_file(os.path.join(data_path, "water", DATA_MODELS["water"].get(signature))) - print("Water model not found. Please specify a customized data path or try another water model.\n") - return None + return LammpsData.from_file(os.path.join(DATA_DIR, "water", DATA_MODELS["water"].get(signature))) + raise ValueError("Water model not found. Please specify a customized data path or try another water model.\n") @staticmethod - def get_ion(model: str = "jensen_jorgensen", water: str = "default", ion: str = "li+") -> Optional[LammpsData]: + def get_ion( + ion: Union[Ion, str], + parameter_set: str = "auto", + water_model: str = "auto", + mixing_rule: Optional[str] = None, + ) -> LammpsData: """ Retrieve force field parameters for an ion in water. Args: - model: Force field to use. Valid choices are "aqvist" (or "aq"), - "jensen_jorgensen" (or "jj"), ""joung_cheatham" (or "jc"). - water: Water model to use. For the jensen_jorgensen and aqvist - models, the only choice is 'default'. For the joung_cheatham - model, valid choices are "spce", "tip3p", and "tip4pew". - ion: Formula of the ion (e.g., "Li+"). + ion: Formula of the ion (e.g., "Li+"). Not case sensitive. May be + passed as either a string or an Ion object. + parameter_set: Force field parameters to use for ions. + Valid choices are: + 1. "jj" for the Jensen and Jorgensen parameters (2006)" + 2. "jc" for Joung-Cheatham parameters (2008) + 3. "lm" for the Li and Merz group parameters (2020-2021)" + The default parameter set is "auto", which assigns a recommended + parameter set that is compatible with the chosen water model. + water_model: Water model to use. Models must be given as a string + (not case sensitive). "-" and "/" are ignored. Hence "tip3pfb" + and "TIP3P-FB" are both valid inputs for the TIP3P-FB water model. + Available water models are: + 1. SPC + 2. SPC/E + 3. TIP3P-EW + 4. TIP3P-FB + 5. OPC3 + 6. TIP4P-EW + 7. TIP4P-2005 + 8. TIP4P-FB + 9. OPC + The default water model is "auto", which assigns a recommended + water model that is compatible with the chosen ion parameters. Other + combinations are possible at your own risk. See documentation. + + When both the parameter_set and water_model are set to "auto", the function returns the + Joung-Cheatham parameters for the SPC/E water model. + + For a systematic comparison of the performance of different water models, refer to + + Sachini et al., Systematic Comparison of the Structural and Dynamic Properties of + Commonly Used Water Models for Molecular Dynamics Simulations. J. Chem. Inf. Model. + 2021, 61, 9, 4521–4536. https://doi.org/10.1021/acs.jcim.1c00794 + + mixing_rule: The mixing rule to use for the ion parameter. Default to None, which does not + change the original mixing rule of the parameter set. Available choices are 'LB' + (Lorentz-Berthelot or arithmetic) and 'geometric'. If the specified mixing rule does not + match the default mixing rule of the parameter set, the output parameter will be converted + accordingly. + Returns: Force field parameters for the chosen water model. - If the desired combination of force field and water model - for the given ion is not available, None is returned. """ - data_path = DATA_DIR - alias = DATA_MODELS.get("alias", {}) - signature = model.lower() - if signature in alias: - signature = alias.get(model) - ion_type = ion.capitalize() - for key in DATA_MODELS["ion"]: - if key.startswith(signature): - ion_model = DATA_MODELS["ion"].get(key) - if water in ion_model: - if water == "default": - file_path = os.path.join(data_path, "ion", key, ion_type + ".lmp") - else: - file_path = os.path.join(data_path, "ion", key, water, ion_type + ".lmp") - if os.path.exists(file_path): - return LammpsData.from_file(file_path) - print("Ion not found. Please try another ion.\n") - return None - print("Water model not found. Please try another water model.\n") - return None - print("Ion model not found. Please try another ion model.\n") - return None + alias = {"aq": "aqvist", "jj": "jensen_jorgensen", "jc": "joung_cheatham", "lm": "li_merz"} + default_sets = { + "spc": "N/A", + "spce": "jc", + "tip3p": "jc", + "tip3pew": "N/A", + "tip3pfb": "lm", + "opc3": "lm", + "tip4p2005": "N/A", + "tip4p": "jj", + "tip4pew": "jc", + "tip4pfb": "lm", + "opc": "lm", + "jj": "tip4p", + "jc": "spce", + "lm": "tip4pfb", + } + water_model = water_model.replace("-", "").replace("/", "").lower() + parameter_set = parameter_set.lower() + + if water_model == "auto" and parameter_set == "auto": + water_model = "spce" + parameter_set = "jc" + elif parameter_set == "auto": + parameter_set = default_sets.get(water_model, parameter_set) + if parameter_set == "N/A": + raise ValueError( + f"The {water_model} water model has no specifically parameterized ion parameter sets" + "Please try a different water model." + ) + elif water_model == "auto": + water_model = default_sets.get(parameter_set, water_model) + + parameter_set = alias.get(parameter_set, parameter_set) + + # Make the Ion object to get mass and charge + if isinstance(ion, Ion): + ion_obj = ion + else: + ion_obj = Ion.from_formula(ion.capitalize()) + + # load ion data as a list of IonLJData objects + ion_data = loadfn(os.path.join(DATA_DIR, "ion_lj_params.json")) + + # make sure the ion is in the DataFrame + key = ion_obj.reduced_formula + filtered_data = [d for d in ion_data if d.formula == key] + if len(filtered_data) == 0: + raise ValueError(f"Ion {key} not found in database. Please try a different ion.") + + # make sure the parameter set is in the DataFrame + filtered_data = [d for d in filtered_data if d.name == parameter_set and d.water_model == water_model] + if len(filtered_data) == 0: + raise ValueError( + f"No {parameter_set} parameters for water model {water_model} for ion {key}. " + "See documentation and try a different combination." + ) + + if len(filtered_data) != 1: + raise ValueError( + f"Something is wrong: multiple ion data entries for {key}, {parameter_set}, and {water_model}" + ) + + # we only consider monatomic ions at present + # construct a cubic LammpsBox from a lattice + lat = Lattice([[1, 0, 0], [0, 1, 0], [0, 0, 1]]) + box = lattice_2_lmpbox(lat)[0] + # put it in the center of a cubic Structure + struct = Structure(lat, ion_obj, [[0.5, 0.5, 0.5]]) + # construct Topology with the ion centered in the box + topo = Topology(struct, charges=[ion_obj.charge]) + + # retrieve Lennard-Jones parameters + # construct ForceField object + sigma = filtered_data[0].sigma + epsilon = filtered_data[0].epsilon + if mixing_rule is None: + pass + else: + default_mixing = filtered_data[0].combining_rule + water_sigma = WATER_SIGMA.get(filtered_data[0].water_model) + if mixing_rule.lower() in ["lb", "arithmetic", "lorentz-berthelot", "lorentz berthelot"]: + mixing_rule = "LB" + elif mixing_rule.lower() == "geometric": + mixing_rule = "geometric" + else: + raise ValueError("Invalid mixing rule. Supported mixing rules are 'LB'(arithmetic) and 'geometric'. ") + if default_mixing == mixing_rule: + pass + elif default_mixing == "LB" and mixing_rule == "geometric": + sigma = ((water_sigma + sigma) / 2) ** 2 / water_sigma + print( + "The parameter mixing rule has been converted from the original 'LB' to 'geometric'.\n" + "Please use the parameter set with caution!" + ) + else: + sigma = 2 * ((water_sigma * sigma) ** (1 / 2)) - water_sigma + print( + "The parameter mixing rule has been converted from the original 'geometric' to 'LB'.\n" + "Please use the parameter set with caution!" + ) + ff = ForceField([(str(e), e) for e in ion_obj.elements], nonbond_coeffs=[[epsilon, sigma]]) + + return LammpsData.from_ff_and_topologies(box, ff, [topo], atom_style="full") class ChargeWriter: diff --git a/mdgo/mdgopackmol.py b/mdgo/mdgopackmol.py index 51ee0c04..f34d8406 100644 --- a/mdgo/mdgopackmol.py +++ b/mdgo/mdgopackmol.py @@ -13,21 +13,27 @@ set the folder of the packmol executable to the PATH environment variable. """ -import subprocess import os +import subprocess +from pathlib import Path +from typing import Dict, List, Optional, Union + +from pymatgen.core import Molecule +from monty.os.path import which -# import tempfile -from typing import Optional, List, Dict +# from pymatgen.io.core import InputFile, InputSet, InputGenerator -# from subprocess import PIPE, Popen +from mdgo.volume import molecular_volume -__author__ = "Tingzheng Hou" +__author__ = "Tingzheng Hou, Ryan Kingsbury" __version__ = "1.0" __maintainer__ = "Tingzheng Hou" __email__ = "tingzheng_hou@berkeley.edu" -__date__ = "Feb 9, 2021" +__date__ = "Feb - Oct, 2021" +# TODO - inherit from InputSet +# consider adding a generator class PackmolWrapper: """ Wrapper for the Packmol software that can be used to pack various types of @@ -35,10 +41,11 @@ class PackmolWrapper: Examples: - >>> structures = [{"name": "structure_name", "file": "/path/to/xyz"}] + >>> molecules = [{"name": "EMC", + "number": 2, + "coords": "/Users/th/Downloads/test_selenium/EMC.lmp.xyz"}] >>> pw = PackmolWrapper("/path/to/work/dir", - ... structures, - ... {"structure_name": 2}, + ... molecules, ... [0., 0., 0., 10., 10., 10.] ... ) >>> pw.make_packmol_input() @@ -48,31 +55,34 @@ class PackmolWrapper: def __init__( self, path: str, - structures: List[dict], - numbers: Dict[str, int], - box: List[float], - tolerance: Optional[float] = 2.0, - seed: Optional[int] = 1, - inputfile: str = "packmol.inp", - outputfile: str = "output.xyz", + molecules: List[Dict], + box: Optional[List[float]] = None, + tolerance: float = 2.0, + seed: int = 1, + control_params: Optional[Dict] = None, + inputfile: Union[str, Path] = "packmol.inp", + outputfile: Union[str, Path] = "packmol_out.xyz", ): """ Args: path: The path to the directory for file i/o. Note that the path cannot contain any spaces. - structures: A list of dict containing information about molecules. - Each dict requires two keys, "name", the structure name, - and "file", the path to the structure file, e.g. - {"name": "water", - "file": "/path/to/water.xyz"} - numbers: A dict of the numbers of each molecule. Each dict must have - keys corresponding to 'name' keys in 'structures', and integer - values representing the number of that molecule to pack into the - box, e.g. - {"water": 20} - box: A list of xlo, ylo, zlo, xhi, yhi, zhi, in Å. - tolerance: Tolerance for packmol. - seed: Random seed for packmol. + molecules: A list of dict containing information about molecules to pack + into the box. Each dict requires three keys: + 1. "name" - the structure name + 2. "number" - the number of that molecule to pack into the box + 3. "coords" - Coordinates in the form of either a Molecule object or + a path to a file. + Example: + {"name": "water", + "number": 500, + "coords": "/path/to/input/file.xyz"} + box: A list of box dimensions xlo, ylo, zlo, xhi, yhi, zhi, in Å. If set to None + (default), mdgo will estimate the required box size based on the volumes of + the provided molecules using mdgo.volume.molecular_volume() + tolerance: Tolerance for packmol, in Å. + seed: Random seed for packmol. Use a value of 1 (default) for deterministic + output, or -1 to generate a new random seed from the current time. inputfile: Path to the input file. Default to 'packmol.inp'. outputfile: Path to the output file. Default to 'output.xyz'. """ @@ -80,58 +90,111 @@ def __init__( self.input = os.path.join(self.path, inputfile) self.output = os.path.join(self.path, outputfile) self.screen = os.path.join(self.path, "packmol.stdout") - self.structures = structures - self.numbers = numbers + self.molecules = molecules + self.control_params = control_params if control_params else {} self.box = box self.tolerance = tolerance self.seed = seed - def run_packmol(self): - """Run packmol and write out the packed structure.""" + def run_packmol(self, timeout=30): + """Run packmol and write out the packed structure. + Args: + timeout: Timeout in seconds. + Raises: + ValueError if packmol does not succeed in packing the box. + TimeoutExpiredError if packmold does not finish within the timeout. + """ + if not which("packmol"): + raise RuntimeError( + "PackmolWrapper requires the executable 'packmol' to be in " + "the path. Please download packmol from " + "https://github.com/leandromartinez98/packmol " + "and follow the instructions in the README to compile. " + "Don't forget to add the packmol binary to your path" + ) try: p = subprocess.run( "packmol < '{}'".format(self.input), check=True, shell=True, + timeout=timeout, stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) + # this workaround is needed because packmol can fail to find + # a solution but still return a zero exit code + # see https://github.com/m3g/packmol/issues/28 + if "ERROR" in p.stdout.decode(): + msg = p.stdout.decode().split("ERROR")[-1] + raise ValueError(f"Packmol failed with return code 0 and stdout: {msg}") except subprocess.CalledProcessError as e: raise ValueError("Packmol failed with errorcode {} and stderr: {}".format(e.returncode, e.stderr)) from e else: with open(self.screen, "w") as out: out.write(p.stdout.decode()) + # TODO - should be in InputSet.get_inputs() or Inputfile.get_string() + # maybe don't define an Inputfile class, just keep internal to + # InputSet def make_packmol_input(self): """Make a Packmol usable input file.""" + if self.box: + box_list = " ".join(str(i) for i in self.box) + else: + # estimate the total volume of all molecules + net_volume = 0.0 + for idx, d in enumerate(self.molecules): + if not isinstance(d["coords"], Molecule): + mol = Molecule.from_file(d["coords"]) + else: + mol = d["coords"] + # molecular volume in cubic Å + vol = molecular_volume(mol, radii_type="pymatgen", molar_volume=False) + # pad the calculated length by an amount related to the tolerance parameter + # the amount to add was determined arbitrarily + vol *= self.tolerance + net_volume += vol * d["number"] + + box_length = net_volume ** (1.0 / 3.0) + print(f"Auto determined box size is {box_length:.1f} Å per side.") + box_list = "0.0 0.0 0.0 {:.1f} {:.1f} {:.1f}".format(box_length, box_length, box_length) + with open(self.input, "w") as out: - out.write( - "# " - + " + ".join( - str(self.numbers[structure["name"]]) + " " + structure["name"] for structure in self.structures - ) - + "\n" - ) + out.write("# " + " + ".join(str(d["number"]) + " " + d["name"] for d in self.molecules) + "\n") out.write("# Packmol input generated by mdgo.\n") + for k, v in self.control_params.items(): + if isinstance(v, list): + out.write("{} {}\n".format(k, " ".join(str(x) for x in v))) + else: + out.write("{} {}\n".format(k, str(v))) out.write("seed {}\n".format(self.seed)) out.write("tolerance {}\n\n".format(self.tolerance)) - out.write("filetype xyz\n\n") - out.write("output {}\n\n".format(self.output)) - for structure in self.structures: - out.write("structure {}\n".format(structure["file"])) - out.write(" number {}\n".format(str(self.numbers[structure["name"]]))) - out.write(" inside box {}\n".format(" ".join(str(i) for i in self.box))) + out.write("filetype xyz\n\n") + out.write(f"output {self.output}\n\n") + + for i, d in enumerate(self.molecules): + if isinstance(d["coords"], str): + out.write(f'structure "{d["coords"]}"\n') + elif isinstance(d["coords"], Path): + out.write(f'structure "{str(d["coords"])}"\n') + elif isinstance(d["coords"], Molecule): + fname = os.path.join(self.path, f"packmol_{d['name']}.xyz") + d["coords"].to(filename=fname) + out.write(f"structure {fname}\n") + out.write(" number {}\n".format(str(d["number"]))) + out.write(" inside box {}\n".format(box_list)) out.write("end structure\n\n") if __name__ == "__main__": """ - structures = [{"name": "EMC", - "file": "/Users/th/Downloads/test_selenium/EMC.lmp.xyz"}] - pw = PackmolWrapper("/Users/th/Downloads/test_selenium/", structures, - {"EMC": '2'}, [0., 0., 0., 10., 10., 10.]) + molecules = [{"name": "EMC", + "number": 2, + "coords": "/Users/th/Downloads/test_selenium/EMC.lmp.xyz"}] + pw = PackmolWrapper("/Users/th/Downloads/test_selenium/", molecules, + [0., 0., 0., 10., 10., 10.]) pw.make_packmol_input() pw.run_packmol() """ diff --git a/requirements.txt b/requirements.txt index 7cb98902..15af39a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ MDAnalysis numpy>=1.16.0 pandas pubchempy -pymatgen>=2022.0.8 +pymatgen>=2022.0.17 scipy selenium setuptools diff --git a/setup.py b/setup.py index 91cf1b89..938ed090 100644 --- a/setup.py +++ b/setup.py @@ -17,7 +17,7 @@ "matplotlib", "scipy", "tqdm", - "pymatgen>=2022.0.9", + "pymatgen>=2022.0.17", "statsmodels", "pubchempy", "MDAnalysis", diff --git a/tests/packmol/.gitignore b/tests/packmol/.gitignore new file mode 100644 index 00000000..717dbc09 --- /dev/null +++ b/tests/packmol/.gitignore @@ -0,0 +1,5 @@ +build/ +*.mod +*.o +*.swp + diff --git a/tests/packmol/AUTHORS b/tests/packmol/AUTHORS new file mode 100644 index 00000000..59bd0d16 --- /dev/null +++ b/tests/packmol/AUTHORS @@ -0,0 +1,11 @@ +L. Martinez, R. Andrade, E. G. Birgin, J. M. Martinez. Packmol: A +package for building initial configurations for molecular dynamics +simulations. Journal of Computational Chemistry, 30(13):2157-2164, +2009. + +J. M. Martinez and L. Martinez. Packing optimization for automated +generation of complex system's initial configurations for molecular +dynamics and docking. Journal of Computational Chemistry, 24(7):819-825, +2003. + +Home-Page: http://m3g.iqm.unicamp.br/packmol diff --git a/tests/packmol/LICENSE b/tests/packmol/LICENSE new file mode 100644 index 00000000..8db8be26 --- /dev/null +++ b/tests/packmol/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2009-2018 Leandro Martínez, José Mario Martínez, Ernesto Birgin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/tests/packmol/README.md b/tests/packmol/README.md new file mode 100644 index 00000000..5e88317d --- /dev/null +++ b/tests/packmol/README.md @@ -0,0 +1,36 @@ +Packmol +======= + +Packmol - Creates Initial Configurations for Molecular Dynamics Simulations + +This page contains the version history of Packmol. You can download packmol from this page, but give preference to the official Packmol page: + +http://m3g.iqm.unicamp.br/packmol + +Detailed installation and usage instructions are available at this home-page. + +What is Packmol +--------------- + +Packmol creates an initial point for molecular dynamics simulations by packing molecules in defined regions of space. The packing guarantees that short range repulsive interactions do not disrupt the simulations. + +The great variety of types of spatial constraints that can be attributed to the molecules, or atoms within the molecules, makes it easy to create ordered systems, such as lamellar, spherical or tubular lipid layers. + +The user must provide only the coordinates of one molecule of each type, the number of molecules of each type and the spatial constraints that each type of molecule must satisfy. + +The package is compatible with input files of PDB, TINKER, XYZ and MOLDY formats. + +See http://m3g.iqm.unicamp.br/packmol for more information. + +References +---------- + +Please always cite one of the following references in publications for which Packmol was useful: + +L Martinez, R Andrade, EG Birgin, JM Martinez, Packmol: A package for building initial configurations for molecular dynamics simulations. Journal of Computational Chemistry, 30, 2157-2164, 2009. (http://www3.interscience.wiley.com/journal/122210103/abstract) + +JM Martinez, L Martinez, Packing optimization for the automated generation of complex system's initial configurations for molecular dynamics and docking. Journal of Computational Chemistry, 24, 819-825, 2003. +(http://www3.interscience.wiley.com/journal/104086246/abstract) + + + diff --git a/tests/packmol/packmol b/tests/packmol/packmol new file mode 100755 index 00000000..11b5b994 Binary files /dev/null and b/tests/packmol/packmol differ diff --git a/tests/test_files/LiTFSI.xyz b/tests/test_files/LiTFSi.xyz similarity index 100% rename from tests/test_files/LiTFSI.xyz rename to tests/test_files/LiTFSi.xyz diff --git a/tests/test_files/subdir with spaces/EMC.xyz b/tests/test_files/subdir with spaces/EMC.xyz new file mode 100644 index 00000000..758aab5f --- /dev/null +++ b/tests/test_files/subdir with spaces/EMC.xyz @@ -0,0 +1,17 @@ +15 + +C 0.18700 -1.22900 -0.00000 +O 1.37700 -1.84500 -0.00000 +O -0.76900 -2.17300 -0.00000 +O 0.00000 -0.03100 -0.00100 +C 2.53300 -0.96600 -0.00000 +C -2.11800 -1.66800 -0.00000 +C 3.76700 -1.84400 -0.00000 +H 2.48200 -0.32400 -0.88900 +H 2.48200 -0.32300 0.88800 +H -2.29900 -1.06000 0.89400 +H -2.75500 -2.55600 -0.00000 +H -2.29900 -1.06100 -0.89600 +H 4.66400 -1.20900 -0.00000 +H 3.79600 -2.48400 0.89100 +H 3.79600 -2.48400 -0.89200 diff --git a/tests/test_forcefield.py b/tests/test_forcefield.py index 52ade358..9f0a2302 100644 --- a/tests/test_forcefield.py +++ b/tests/test_forcefield.py @@ -1,8 +1,12 @@ import os import sys import tempfile -from io import StringIO import unittest +from io import StringIO + +import numpy as np +import pytest + from mdgo.forcefield import * test_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "test_files") @@ -68,5 +72,98 @@ def test_chrome(self) -> None: shutil.rmtree(download_dir) +class AqueousTest(unittest.TestCase): + def test_get_ion(self): + """ + Some unit tests for get_ion + """ + # string input, all lowercase + cation_ff = Aqueous.get_ion(parameter_set="lm", water_model="opc3", ion="li+") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.354, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.0064158, atol=0.0000001) + + # string input, using the default ion parameter set for the water model + cation_ff = Aqueous.get_ion(parameter_set="lm", water_model="opc3", ion="li+") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.354, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.0064158, atol=0.0000001) + + # Ion object input, all lowercase + li = Ion.from_formula("Li+") + cation_ff = Aqueous.get_ion(parameter_set="jc", water_model="spce", ion=li) + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 1.409, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.3367344, atol=0.0000001) + + # anion + anion_ff = Aqueous.get_ion(parameter_set="jj", water_model="tip4p", ion="F-") + assert isinstance(anion_ff, LammpsData) + assert np.allclose(anion_ff.force_field["Pair Coeffs"]["coeff2"].item(), 3.05, atol=0.001) + assert np.allclose(anion_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.71, atol=0.0000001) + + # divalent, uppercase water model with hyphen + cation_ff = Aqueous.get_ion(parameter_set="lm", water_model="TIP3P-FB", ion="Zn+2") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.495, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.01570749, atol=0.0000001) + + # trivalent, with brackets in ion name + cation_ff = Aqueous.get_ion(parameter_set="lm", water_model="auto", ion="La[3+]") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 3.056, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.1485017, atol=0.0000001) + + # model auto selection + cation_ff = Aqueous.get_ion(ion="li+") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 1.409, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.3367344, atol=0.0000001) + cation_ff = Aqueous.get_ion(parameter_set="jj", ion="li+") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.87, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.0005, atol=0.0000001) + cation_ff = Aqueous.get_ion(water_model="opc3", ion="li+") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.3537544133267763, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.0064158, atol=0.0000001) + + # ion not found + with pytest.raises(ValueError, match="not found in database"): + cation_ff = Aqueous.get_ion(parameter_set="jj", water_model="opc3", ion="Cu+3") + + # parameter set not found + with pytest.raises(ValueError, match="No jensen_jorgensen parameters for water model opc3 for ion"): + cation_ff = Aqueous.get_ion(parameter_set="jj", water_model="opc3", ion="Cu+") + + # water model not found + with pytest.raises(ValueError, match="No ryan parameters for water model tip8p for ion"): + cation_ff = Aqueous.get_ion(parameter_set="ryan", water_model="tip8p", ion="Cu+") + + # mixing rule + cation_ff = Aqueous.get_ion(parameter_set="jc", water_model="spce", ion="li+", mixing_rule="LB") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 1.409, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.3367344, atol=0.0000001) + cation_ff = Aqueous.get_ion(parameter_set="jj", water_model="tip4p", ion="li+", mixing_rule="arithmetic") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.863, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.0005, atol=0.0000001) + cation_ff = Aqueous.get_ion( + parameter_set="lm", water_model="tip3pfb", ion="li+", mixing_rule="lorentz-berthelot" + ) + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.352, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.00633615, atol=0.0000001) + cation_ff = Aqueous.get_ion(parameter_set="jc", water_model="spce", ion="li+", mixing_rule="geometric") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 1.653, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.3367344, atol=0.0000001) + cation_ff = Aqueous.get_ion(parameter_set="jc", water_model="tip4pew", ion="na+", mixing_rule="geometric") + assert isinstance(cation_ff, LammpsData) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff2"].item(), 2.260, atol=0.001) + assert np.allclose(cation_ff.force_field["Pair Coeffs"]["coeff1"].item(), 0.1684375, atol=0.0000001) + + if __name__ == "__main__": unittest.main() diff --git a/tests/test_mdgopackmol.py b/tests/test_mdgopackmol.py index d6cfbef8..9adbfba6 100644 --- a/tests/test_mdgopackmol.py +++ b/tests/test_mdgopackmol.py @@ -1,11 +1,231 @@ import os -import unittest +import tempfile +from pathlib import Path +from subprocess import TimeoutExpired +import pytest +import numpy as np +from pymatgen.core import Molecule -class MyTestCase(unittest.TestCase): - def test_something(self): - self.assertEqual(True, True) +from mdgo.mdgopackmol import PackmolWrapper +test_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "test_files") -if __name__ == "__main__": - unittest.main() + +@pytest.fixture +def ethanol(): + """ + Returns a Molecule of ethanol + """ + ethanol_coords = [ + [0.00720, -0.56870, 0.00000], + [-1.28540, 0.24990, 0.00000], + [1.13040, 0.31470, 0.00000], + [0.03920, -1.19720, 0.89000], + [0.03920, -1.19720, -0.89000], + [-1.31750, 0.87840, 0.89000], + [-1.31750, 0.87840, -0.89000], + [-2.14220, -0.42390, -0.00000], + [1.98570, -0.13650, -0.00000], + ] + ethanol_atoms = ["C", "C", "O", "H", "H", "H", "H", "H", "H"] + + return Molecule(ethanol_atoms, ethanol_coords) + + +@pytest.fixture +def water(): + """ + Returns a Molecule of water + """ + water_coords = [ + [9.626, 6.787, 12.673], + [9.626, 8.420, 12.673], + [10.203, 7.604, 12.673], + ] + water_atoms = ["H", "H", "O"] + + return Molecule(water_atoms, water_coords) + + +class TestPackmolWrapper: + def test_packmol_with_molecule(self, water, ethanol): + """ + Test coords input as Molecule + """ + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "water", "number": 10, "coords": water}, + {"name": "ethanol", "number": 20, "coords": ethanol}, + ], + ) + pw.make_packmol_input() + pw.run_packmol() + assert os.path.exists(os.path.join(scratch_dir, "packmol_out.xyz")) + out = Molecule.from_file(os.path.join(scratch_dir, "packmol_out.xyz")) + assert out.composition.num_atoms == 10 * 3 + 20 * 9 + + def test_packmol_with_str(self): + """ + Test coords input as strings + """ + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "EMC", "number": 10, "coords": os.path.join(test_dir, "subdir with spaces", "EMC.xyz")}, + {"name": "LiTFSi", "number": 20, "coords": os.path.join(test_dir, "LiTFSi.xyz")}, + ], + ) + pw.make_packmol_input() + pw.run_packmol() + assert os.path.exists(os.path.join(scratch_dir, "packmol_out.xyz")) + out = Molecule.from_file(os.path.join(scratch_dir, "packmol_out.xyz")) + assert out.composition.num_atoms == 10 * 15 + 20 * 16 + + def test_packmol_with_path(self): + """ + Test coords input as Path. Use a subdirectory with spaces. + """ + p1 = Path(os.path.join(test_dir, "subdir with spaces", "EMC.xyz")) + p2 = Path(os.path.join(test_dir, "LiTFSi.xyz")) + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "EMC", "number": 10, "coords": p1}, + {"name": "LiTFSi", "number": 20, "coords": p2}, + ], + ) + pw.make_packmol_input() + pw.run_packmol() + assert os.path.exists(os.path.join(scratch_dir, "packmol_out.xyz")) + out = Molecule.from_file(os.path.join(scratch_dir, "packmol_out.xyz")) + assert out.composition.num_atoms == 10 * 15 + 20 * 16 + + def test_control_params(self, water, ethanol): + """ + Check that custom control_params work and that ValueError + is raised when 'ERROR' appears in stdout (even if return code is 0) + """ + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "water", "number": 1000, "coords": water}, + {"name": "ethanol", "number": 2000, "coords": ethanol}, + ], + control_params={"maxit": 0, "nloop": 0}, + ) + pw.make_packmol_input() + with open(os.path.join(scratch_dir, "packmol.inp"), "r") as f: + input_string = f.read() + assert "maxit 0" in input_string + assert "nloop 0" in input_string + with pytest.raises(ValueError): + pw.run_packmol() + + def test_timeout(self, water, ethanol): + """ + Check that the timeout works + """ + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "water", "number": 1000, "coords": water}, + {"name": "ethanol", "number": 2000, "coords": ethanol}, + ], + ) + pw.make_packmol_input() + with pytest.raises(TimeoutExpired): + pw.run_packmol(1) + + def test_no_return_and_box(self, water, ethanol): + """ + Make sure the code raises an error if packmol doesn't + exit cleanly. Also verify the box arg works properly. + """ + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "water", "number": 1000, "coords": water}, + {"name": "ethanol", "number": 2000, "coords": ethanol}, + ], + box=[0, 0, 0, 2, 2, 2], + ) + pw.make_packmol_input() + with open(os.path.join(scratch_dir, "packmol.inp"), "r") as f: + input_string = f.read() + assert "inside box 0 0 0 2 2 2" in input_string + with pytest.raises(ValueError): + pw.run_packmol() + + def test_random_seed(self, water, ethanol): + """ + Confirm that seed = -1 generates random structures + while seed = 1 is deterministic + """ + # deterministic output + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "water", "number": 10, "coords": water}, + {"name": "ethanol", "number": 20, "coords": ethanol}, + ], + seed=1, + inputfile="input.in", + outputfile="output.xyz", + ) + pw.make_packmol_input() + pw.run_packmol() + out1 = Molecule.from_file(os.path.join(scratch_dir, "output.xyz")) + pw.run_packmol() + out2 = Molecule.from_file(os.path.join(scratch_dir, "output.xyz")) + assert np.array_equal(out1.cart_coords, out2.cart_coords) + + # randomly generated structures + with tempfile.TemporaryDirectory() as scratch_dir: + pw = PackmolWrapper( + scratch_dir, + molecules=[ + {"name": "water", "number": 10, "coords": water}, + {"name": "ethanol", "number": 20, "coords": ethanol}, + ], + seed=-1, + inputfile="input.in", + outputfile="output.xyz", + ) + pw.make_packmol_input() + pw.run_packmol() + out1 = Molecule.from_file(os.path.join(scratch_dir, "output.xyz")) + pw.run_packmol() + out2 = Molecule.from_file(os.path.join(scratch_dir, "output.xyz")) + assert not np.array_equal(out1.cart_coords, out2.cart_coords) + + def test_arbitrary_filenames(self, water, ethanol): + """ + Make sure custom input and output filenames work. + Use a subdirectory with spaces. + """ + with tempfile.TemporaryDirectory() as scratch_dir: + os.mkdir(os.path.join(scratch_dir, "subdirectory with spaces")) + pw = PackmolWrapper( + os.path.join(scratch_dir, "subdirectory with spaces"), + molecules=[ + {"name": "water", "number": 10, "coords": water}, + {"name": "ethanol", "number": 20, "coords": ethanol}, + ], + inputfile="input.in", + outputfile="output.xyz", + ) + pw.make_packmol_input() + assert os.path.exists(os.path.join(scratch_dir, "subdirectory with spaces", "input.in")) + pw.run_packmol() + assert os.path.exists(os.path.join(scratch_dir, "subdirectory with spaces", "output.xyz")) + out = Molecule.from_file(os.path.join(scratch_dir, "subdirectory with spaces", "output.xyz")) + assert out.composition.num_atoms == 10 * 3 + 20 * 9