"platforms/vscode:/vscode.git/clone" did not exist on "2db43eaee407d11daf11ea20e01ff650cc055c9c"
Commit 5120bb0d authored by peastman's avatar peastman
Browse files

Merge pull request #1349 from jchodera/fix-ionic-strength

Fix error in ionicStrength definition in Modeller.addSolvent()
parents 6b3a8337 4b2ef27c
......@@ -264,7 +264,7 @@ class Modeller(object):
2. Water molecules are removed if their distance to any solute atom is less than the sum of their van der Waals radii.
3. If the solute is charged and neutralize=True, enough positive or negative ions are added to neutralize it. Each ion is added by
randomly selecting a water molecule and replacing it with the ion.
4. Ion pairs are added to give the requested total ionic strength.
4. Ion pairs are added to give the requested total ionic strength. Note that only monovalent ions are currently supported.
The box size can be specified in any of several ways:
......@@ -298,6 +298,7 @@ class Modeller(object):
ionicStrength : concentration=0*molar
the total concentration of ions (both positive and negative) to add. This
does not include ions that are added to neutralize the system.
Note that only monovalent ions are currently supported.
neutralize : bool=True
whether to add ions to neutralize the system
"""
......@@ -522,7 +523,7 @@ class Modeller(object):
# Add ions based on the desired ionic strength.
numIons = len(addedWaters)*ionicStrength/(55.4*molar) # Pure water is about 55.4 molar (depending on temperature)
numPairs = int(floor(numIons/2+0.5))
numPairs = int(floor(numIons+0.5))
for i in range(numPairs):
addIon(positiveElement)
for i in range(numPairs):
......
......@@ -395,7 +395,7 @@ class TestModeller(unittest.TestCase):
total_added = water_count+sodium_count+chlorine_count
self.assertEqual(total_added, 1364)
expected_ion_fraction = 2.0*molar/(55.4*molar)
expected_ions = math.floor(total_added*expected_ion_fraction/2+0.5)
expected_ions = math.floor(total_added*expected_ion_fraction+0.5)
self.assertEqual(sodium_count, expected_ions)
self.assertEqual(chlorine_count, expected_ions)
......@@ -437,7 +437,7 @@ class TestModeller(unittest.TestCase):
total_water_ions = water_count+sodium_count+chlorine_count
expected_ion_fraction = 1.0*molar/(55.4*molar)
expected_chlorine = math.floor((total_water_ions-10)*expected_ion_fraction/2+0.5)+5
expected_chlorine = math.floor((total_water_ions-10)*expected_ion_fraction+0.5)+5
expected_sodium = expected_chlorine if neutralize else expected_chlorine-5
self.assertEqual(sodium_count, expected_sodium)
self.assertEqual(chlorine_count, expected_chlorine)
......@@ -482,7 +482,7 @@ class TestModeller(unittest.TestCase):
total_water_ions = water_count+sodium_count+chlorine_count
expected_ion_fraction = 1.0*molar/(55.4*molar)
expected_sodium = math.floor((total_water_ions-10)*expected_ion_fraction/2+0.5)+5
expected_sodium = math.floor((total_water_ions-10)*expected_ion_fraction+0.5)+5
expected_chlorine = expected_sodium if neutralize else expected_sodium-5
self.assertEqual(sodium_count, expected_sodium)
self.assertEqual(chlorine_count, expected_chlorine)
......@@ -520,7 +520,7 @@ class TestModeller(unittest.TestCase):
total_added = water_count+positive_ion_count+chlorine_count
self.assertEqual(total_added, 1364)
expected_ions = math.floor(total_added*expected_ion_fraction/2+0.5)
expected_ions = math.floor(total_added*expected_ion_fraction+0.5)
self.assertEqual(positive_ion_count, expected_ions)
self.assertEqual(chlorine_count, expected_ions)
......@@ -544,7 +544,7 @@ class TestModeller(unittest.TestCase):
total_added = water_count+sodium_count+negative_ion_count
self.assertEqual(total_added, 1364)
expected_ions = math.floor(total_added*expected_ion_fraction/2+0.5)
expected_ions = math.floor(total_added*expected_ion_fraction+0.5)
self.assertEqual(positive_ion_count, expected_ions)
self.assertEqual(chlorine_count, expected_ions)
......@@ -1083,5 +1083,3 @@ class TestModeller(unittest.TestCase):
if __name__ == '__main__':
unittest.main()
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment