Index: tests/GuiChecks/Potential/FitPartialCharges/testsuite-potential-fit-partial-charges.at
===================================================================
--- tests/GuiChecks/Potential/FitPartialCharges/testsuite-potential-fit-partial-charges.at	(revision af340c21b5447cefb53f0abf8de5efbe586d4b7b)
+++ tests/GuiChecks/Potential/FitPartialCharges/testsuite-potential-fit-partial-charges.at	(revision 917c4614b3ea55896fe148578f4fe572d88788a4)
@@ -18,20 +18,41 @@
 ### fit partial particle charges
 
-# the potential has been generated by:
-# ./molecuilder -i pre/water.pdb --center-in-box "8,0,8,0,0,8" --select-all-atoms --fragment-molecule BondFragment --distance 2 --order 1 --fragment-automation --server-address 127.0.0.1 --server-port 1026 --DoLongrange 1 --grid 4 --DoPrintDebug 1 --DoValenceOnly 0 --analyse-fragment-results --store-grids 1 --save-homologies homology_grid_4_full.dat
+AT_SETUP([Potential - Fit partial charges - atomfragment check])
+AT_KEYWORDS([potential parse-homologies fit-partial-charges save-particle-parameters])
+AT_SKIP_IF([../../molecuilder --help fit-partial-charges; if test $? -eq 5; then /bin/true; else /bin/false; fi])
+
+input=water.pdb
+homologyfile=homology_grid.dat
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPartialCharges/pre/$input $input], 0)
+AT_CHECK([chmod u+w $input], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPartialCharges/pre/$homologyfile $homologyfile], 0)
+AT_CHECK([chmod u+w $homologyfile], 0, [ignore], [ignore])
+# fails because atomFragments has not been parsed
+AT_CHECK([../../molecuilder --dry-run -l $input --select-all-atoms --parse-homologies $homologyfile --fit-partial-charges --radius 1.5 --save-particle-parameters water.particles --no-dry-run --store-session session-potential-fit-partial-charges.py --session-type python], 0, [stdout], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-potential-fit-partial-charges.py >session-potential-fit-partial-charges_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-potential-fit-partial-charges_new.py], 5, [stdout], [ignore])
+
+AT_CLEANUP
 
 AT_SETUP([Potential - Fit partial charges to water])
-AT_KEYWORDS([potential parse-homologies fit-partial-charges])
+AT_KEYWORDS([potential parse-homologies fit-partial-charges save-particle-parameters])
 AT_SKIP_IF([../../molecuilder --help fit-partial-charges; if test $? -eq 5; then /bin/true; else /bin/false; fi])
 
 # homology file created with water.pdb and as follows:
-# molecuilder -i water.pdb --select-all-atoms --fragment-molecule --distance 2 --order 1 --fragment-automation --server-address 127.0.0.1 --server-port 1026 --DoLongrange 1 --grid 5 --store-grids 1 --analyse-fragment-results --save-homologies homology_grid.dat
-file=homology_grid.dat
-AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPartialCharges/pre/$file $file], 0)
-AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
-AT_CHECK([../../molecuilder --dry-run --parse-homologies $file --fit-partial-charges --fragment-charges 8 1 1 --radius 1.5 --no-dry-run --store-session session-potential-fit-partial-charges.py --session-type python], 0, [stdout], [ignore])
+# molecuilder -i water.pdb --select-all-atoms --fragment-molecule --distance 2 --order 1 --fragment-automation --server-address 127.0.0.1 --server-port 1026 --DoLongrange 1 --grid 5 --store-grids 1 --analyse-fragment-results --save-homologies homology_grid.dat --save-atom-fragments atomfragments.dat
+input=water.pdb
+homologyfile=homology_grid.dat
+atomfragmentsfile=atomfragments.dat
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPartialCharges/pre/$input $input], 0)
+AT_CHECK([chmod u+w $input], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPartialCharges/pre/$homologyfile $homologyfile], 0)
+AT_CHECK([chmod u+w $homologyfile], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPartialCharges/pre/$atomfragmentsfile $atomfragmentsfile], 0)
+AT_CHECK([chmod u+w $atomfragmentsfile], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run -l $input --select-all-atoms --parse-homologies $homologyfile --parse-atom-fragments $atomfragmentsfile --fit-partial-charges --radius 1.5 --save-particle-parameters water.particles --no-dry-run --store-session session-potential-fit-partial-charges.py --session-type python], 0, [stdout], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-potential-fit-partial-charges.py >session-potential-fit-partial-charges_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-potential-fit-partial-charges_new.py], 0, [stdout], [ignore])
 # check that L_2 error is below 1e-6
+AT_CHECK([diff water.particles ${abs_top_srcdir}/tests/regression/Potential/FitPartialCharges/post/water.particles], 0)
 
 AT_CLEANUP
Index: tests/GuiChecks/Potential/FitPotential/testsuite-potential-fit-potential.at
===================================================================
--- tests/GuiChecks/Potential/FitPotential/testsuite-potential-fit-potential.at	(revision af340c21b5447cefb53f0abf8de5efbe586d4b7b)
+++ tests/GuiChecks/Potential/FitPotential/testsuite-potential-fit-potential.at	(revision 917c4614b3ea55896fe148578f4fe572d88788a4)
@@ -22,4 +22,6 @@
 AT_KEYWORDS([potential parse-homologies fit-potential morse])
 AT_SKIP_IF([../../molecuilder --help fit-potential; if test $? -eq 5; then /bin/true; else /bin/false; fi])
+# homology files probably originate from Labspace/PotentialFitting/WaterAngle
+# recreate homology file: PYTHONPATH=... /usr/bin/python .../tests/regression/Potential/FitPotential/pre/measurement_function.py length_common.pdb 2 0 0 5 4 127.0.0.1 2050 6-311G* 1 2. 10 .../share/molecuilder/data/bondtables/bondtable.dat
 
 file=length_homology.dat
@@ -31,5 +33,5 @@
 # check that L_2 error is below 1e-6
 # check parameters to printed precision
-AT_CHECK([grep "morse:.*particle_type1=8,.*particle_type2=1,.*spring_constant=1.2.*,.*equilibrium_distance=1.7.*,.*dissociation_energy=0.19.*;" length.potentials], 0, [ignore], [ignore])
+AT_CHECK([grep "morse:.*particle_type1=8,.*particle_type2=1,.*spring_constant=1.3.*,.*equilibrium_distance=1.7.*,.*dissociation_energy=0.19.*;" length.potentials], 0, [ignore], [ignore])
 
 AT_CLEANUP
@@ -38,14 +40,16 @@
 AT_KEYWORDS([potential parse-homologies fit-potential harmonic])
 AT_SKIP_IF([../../molecuilder --help fit-potential; if test $? -eq 5; then /bin/true; else /bin/false; fi])
+# homology files probably originate from Labspace/PotentialFitting/Water
+# see morse fitting
 
-file=harmonic_homology.dat
+file=length_homology.dat
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0)
 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
-AT_CHECK([../../molecuilder --dry-run 	--parse-homologies $file 	--set-random-number-engine "lagged_fibonacci607" 		--random-number-engine-parameters "seed=1;" 	--set-random-number-distribution "uniform_real" 		--random-number-distribution-parameters "min=0;max=1;" 	--fit-potential 		--potential-type "harmonic_bond" 		--potential-charges 8 1 		--fragment-charges 1 8 1 		--set-threshold 5e-6 	--save-potentials harmonic.potentials --no-dry-run --store-session session-potential-fit-potential.py --session-type python], 0, [stdout], [ignore])
+AT_CHECK([../../molecuilder --dry-run 	--parse-homologies $file 	--set-random-number-engine "lagged_fibonacci607" 		--random-number-engine-parameters "seed=1;" 	--set-random-number-distribution "uniform_real" 		--random-number-distribution-parameters "min=0;max=1;" 	--fit-potential 		--potential-type "harmonic_bond" 		--potential-charges 8 1 		--fragment-charges 1 8 1 		--set-threshold 6e-4 	--save-potentials harmonic.potentials --no-dry-run --store-session session-potential-fit-potential.py --session-type python], 0, [stdout], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-potential-fit-potential.py >session-potential-fit-potential_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-potential-fit-potential_new.py], 0, [stdout], [ignore])
-# check that L_2 error is below 5e-6
+# check that L_2 error is below 6e-4
 # check parameters to printed precision
-AT_CHECK([grep "harmonic_bond:.*particle_type1=8,.*particle_type2=1,.*spring_constant=0.29.*,.*equilibrium_distance=1.8.*;" harmonic.potentials], 0, [ignore], [ignore])
+AT_CHECK([grep "harmonic_bond:.*particle_type1=8,.*particle_type2=1,.*spring_constant=0.4.*,.*equilibrium_distance=1.8.*;" harmonic.potentials], 0, [ignore], [ignore])
 
 AT_CLEANUP
@@ -54,4 +58,6 @@
 AT_KEYWORDS([potential parse-homologies fit-potential harmonic_angle])
 AT_SKIP_IF([../../molecuilder --help fit-potential; if test $? -eq 5; then /bin/true; else /bin/false; fi])
+# homology files probably originate from Labspace/PotentialFitting/WaterAngle
+# recreate homology file: PYTHONPATH=... /usr/bin/python .../tests/regression/Potential/FitPotential/pre/measurement_function.py angle_common.pdb 2 0 0 5 4 127.0.0.1 2050 6-311G* 1 2. 10 .../share/molecuilder/data/bondtables/bondtable.dat
 
 file=angle_homology.dat
@@ -63,5 +69,5 @@
 # check that L_2 error is below 1e-6
 # check parameters to printed precision
-AT_CHECK([grep "harmonic_angle:.*particle_type1=1,.*particle_type2=8,.*particle_type3=1,.*spring_constant=0.10.*,.*equilibrium_distance=-0.27.*;" angle.potentials], 0, [ignore], [ignore])
+AT_CHECK([grep "harmonic_angle:.*particle_type1=1,.*particle_type2=8,.*particle_type3=1,.*spring_constant=0.10.*,.*equilibrium_distance=-0.29.*;" angle.potentials], 0, [ignore], [ignore])
 
 AT_CLEANUP
@@ -70,4 +76,6 @@
 AT_KEYWORDS([potential parse-homologies fit-potential torsion])
 AT_SKIP_IF([../../molecuilder --help fit-potential; if test $? -eq 5; then /bin/true; else /bin/false; fi])
+# homology files probably originate from Labspace/PotentialFitting/Butane
+# recreate homology file: PYTHONPATH=... /usr/bin/python .../tests/regression/Potential/FitPotential/pre/measurement_function.py torsion_common.pdb 4 0 0 5 4 127.0.0.1 2050 6-311G* 1 2. 10 .../share/molecuilder/data/bondtables/bondtable.dat
 
 file=torsion_homology.dat
@@ -86,15 +94,17 @@
 AT_KEYWORDS([potential parse-homologies fit-potential improper])
 AT_SKIP_IF([../../molecuilder --help fit-potential; if test $? -eq 5; then /bin/true; else /bin/false; fi])
+# homology files probably originate from Labspace/PotentialFitting/Ammonia
+# recreate homology file: PYTHONPATH=... /usr/bin/python .../tests/regression/Potential/FitPotential/pre/measurement_function.py improper_common.pdb 2 0 0 5 4 127.0.0.1 2050 6-311G* 1 2. 10 .../share/molecuilder/data/bondtables/bondtable.dat
 
 file=improper_homology.dat
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/FitPotential/pre/$file $file], 0)
 AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
-AT_CHECK([../../molecuilder --dry-run 	--parse-homologies $file 	--set-random-number-engine "lagged_fibonacci607" 		--random-number-engine-parameters "seed=1;" 	--set-random-number-distribution "uniform_real" 		--random-number-distribution-parameters "min=0;max=1;" 	--fit-potential 		--potential-type "improper" 		--potential-charges 1 7 1 1 		--fragment-charges 7 1 1 1 		--set-threshold 3e-4 	--save-potentials improper.potentials --no-dry-run --store-session session-potential-fit-potential.py --session-type python], 0, [stdout], [ignore])
+AT_CHECK([../../molecuilder --dry-run 	--parse-homologies $file 	--set-random-number-engine "lagged_fibonacci607" 		--random-number-engine-parameters "seed=1;" 	--set-random-number-distribution "uniform_real" 		--random-number-distribution-parameters "min=0;max=1;" 	--fit-potential 		--potential-type "improper" 		--potential-charges 7 1 1 1 		--fragment-charges 7 1 1 1 		--set-threshold 3e-4 	--save-potentials improper.potentials --no-dry-run --store-session session-potential-fit-potential.py --session-type python], 0, [stdout], [ignore])
 AT_CHECK([grep -v "Command.*DryRun" session-potential-fit-potential.py >session-potential-fit-potential_new.py], 0, [ignore], [ignore])
 AT_CHECK([../../molecuilderguitest session-potential-fit-potential_new.py], 0, [stdout], [ignore])
 # check that L_2 error is below 3e-4
 # check parameters to printed precision
-AT_CHECK([grep "improper:.*particle_type1=1,.*particle_type2=7,.*particle_type3=1,.*particle_type4=1,.*spring_constant=.*,.*equilibrium_distance=.*;" improper.potentials], 0, [ignore], [ignore])
-#AT_CHECK([grep "improper:.*particle_type1=1,.*particle_type2=7,.*particle_type3=1,.*particle_type4=1,.*spring_constant=1.02.*,.*equilibrium_distance=0.85.*;" improper.potentials], 0, [ignore], [ignore])
+AT_CHECK([grep "improper:.*particle_type1=7,.*particle_type2=1,.*particle_type3=1,.*particle_type4=1,.*spring_constant=.*,.*equilibrium_distance=.*;" improper.potentials], 0, [ignore], [ignore])
+#AT_CHECK([grep "improper:.*particle_type1=7,.*particle_type2=1,.*particle_type3=1,.*particle_type4=1,.*spring_constant=1.02.*,.*equilibrium_distance=0.85.*;" improper.potentials], 0, [ignore], [ignore])
 
 AT_CLEANUP
@@ -103,4 +113,6 @@
 AT_KEYWORDS([potential parse-homologies fit-potential lennardjones])
 AT_SKIP_IF([../../molecuilder --help fit-potential; if test $? -eq 5; then /bin/true; else /bin/false; fi])
+# homology files probably originate from Labspace/PotentialFitting/Argon
+# recreate homology file: PYTHONPATH=... /usr/bin/python .../tests/regression/Potential/FitPotential/pre/measurement_function.py lj_common.pdb 2 0 0 5 4 127.0.0.1 2050 6-311G* 2 11. 10 .../share/molecuilder/data/bondtables/bondtable.dat
 
 file=lj_homology.dat
Index: tests/GuiChecks/Potential/SaveParseParticleParameters/testsuite-potential-save-parse-particle-parameters.at
===================================================================
--- tests/GuiChecks/Potential/SaveParseParticleParameters/testsuite-potential-save-parse-particle-parameters.at	(revision 917c4614b3ea55896fe148578f4fe572d88788a4)
+++ tests/GuiChecks/Potential/SaveParseParticleParameters/testsuite-potential-save-parse-particle-parameters.at	(revision 917c4614b3ea55896fe148578f4fe572d88788a4)
@@ -0,0 +1,31 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2016 Frederik Heber
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+### parse and save some particle parameters
+
+AT_SETUP([Potential - save and parse particle file])
+AT_KEYWORDS([potential parse-particle-parameters save-particle-parameters])
+
+file=harmonic.particles
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/SaveParseParticleParameters/pre/$file $file], 0)
+AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run 	--parse-particle-parameters $file 	--save-particle-parameters harmonic_new.particles --no-dry-run --store-session session-potential-save-parse-particle-parameters.py --session-type python], 0, [stdout], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-potential-save-parse-particle-parameters.py >session-potential-save-parse-particle-parameters_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-potential-save-parse-particle-parameters_new.py], 0, [stdout], [ignore])
+AT_CHECK([diff $file harmonic_new.particles], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/GuiChecks/Potential/SaveParsePotentials/testsuite-potential-save-parse-potentials.at
===================================================================
--- tests/GuiChecks/Potential/SaveParsePotentials/testsuite-potential-save-parse-potentials.at	(revision 917c4614b3ea55896fe148578f4fe572d88788a4)
+++ tests/GuiChecks/Potential/SaveParsePotentials/testsuite-potential-save-parse-potentials.at	(revision 917c4614b3ea55896fe148578f4fe572d88788a4)
@@ -0,0 +1,31 @@
+#
+#    MoleCuilder - creates and alters molecular systems
+#    Copyright (C) 2016 Frederik Heber
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+### parse and save some potentials
+
+AT_SETUP([Potential - save and parse potential file])
+AT_KEYWORDS([potential parse-potentials save-potentials])
+
+file=harmonic.potentials
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/tests/regression/Potential/SaveParsePotentials/pre/$file $file], 0)
+AT_CHECK([chmod u+w $file], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder --dry-run 	--parse-potentials $file 	--save-potentials harmonic_new.potentials --no-dry-run --store-session session-potential-save-parse-potentials.py --session-type python], 0, [stdout], [ignore])
+AT_CHECK([grep -v "Command.*DryRun" session-potential-save-parse-potentials.py >session-potential-save-parse-potentials_new.py], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilderguitest session-potential-save-parse-potentials_new.py], 0, [stdout], [ignore])
+AT_CHECK([diff $file harmonic_new.potentials], 0, [ignore], [ignore])
+
+AT_CLEANUP
Index: tests/GuiChecks/Potential/testsuite-potential.at
===================================================================
--- tests/GuiChecks/Potential/testsuite-potential.at	(revision af340c21b5447cefb53f0abf8de5efbe586d4b7b)
+++ tests/GuiChecks/Potential/testsuite-potential.at	(revision 917c4614b3ea55896fe148578f4fe572d88788a4)
@@ -19,7 +19,13 @@
 AT_BANNER([MoleCuilder - potential tests])
 
+# parsing and saving potential file
+m4_include([Potential/SaveParsePotentials/testsuite-potential-save-parse-potentials.at])
+
 # fitting potential to fragment results
 m4_include([Potential/FitPotential/testsuite-potential-fit-potential.at])
 
+# parsing and saving particles file
+m4_include([Potential/SaveParseParticleParameters/testsuite-potential-save-parse-particle-parameters.at])
+
 # fitting particle charges to fragment results
 m4_include([Potential/FitPartialCharges/testsuite-potential-fit-partial-charges.at])
