public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Reinis Danne" <rei4dan@gmail.com>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/sci:master commit in: sci-chemistry/ambertools/files/, sci-chemistry/ambertools/
Date: Sat,  3 Mar 2012 21:06:52 +0000 (UTC)	[thread overview]
Message-ID: <1330808084.8ce9886cd5e61b892ee7e1087c09013e310a15ea.rei4dan@gentoo> (raw)

commit:     8ce9886cd5e61b892ee7e1087c09013e310a15ea
Author:     Reinis Danne <rei4dan <AT> gmail <DOT> com>
AuthorDate: Sat Mar  3 20:54:44 2012 +0000
Commit:     Reinis Danne <rei4dan <AT> gmail <DOT> com>
CommitDate: Sat Mar  3 20:54:44 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=8ce9886c

sci-chemistry/ambertools: Add bugfixes 22-27

---
 sci-chemistry/ambertools/ChangeLog                 |    8 +-
 sci-chemistry/ambertools/ambertools-1.5-r3.ebuild  |  157 +
 .../files/ambertools-1.5-bugfix_22-27.patch        | 3343 ++++++++++++++++++++
 3 files changed, 3507 insertions(+), 1 deletions(-)

diff --git a/sci-chemistry/ambertools/ChangeLog b/sci-chemistry/ambertools/ChangeLog
index 50f0545..0945272 100644
--- a/sci-chemistry/ambertools/ChangeLog
+++ b/sci-chemistry/ambertools/ChangeLog
@@ -1,7 +1,13 @@
 # ChangeLog for sci-chemistry/ambertools
-# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
+# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
 # $Header: /var/cvsroot/gentoo-x86/sci-chemistry/ambertools/ChangeLog,v 1.2 2011/08/02 14:42:37 alexxy Exp $
 
+*ambertools-1.5-r3 (03 Mar 2012)
+
+  03 Mar 2012; Reinis Danne <rei4dan@gmail.com> +ambertools-1.5-r3.ebuild,
+  +files/ambertools-1.5-bugfix_22-27.patch:
+  Add bugfixes 22-27.
+
   26 Oct 2011; Reinis Danne <rei4dan@gmail.com>
   files/ambertools-1.5-gentoo2.patch:
   Fix possible buffer overflow.

diff --git a/sci-chemistry/ambertools/ambertools-1.5-r3.ebuild b/sci-chemistry/ambertools/ambertools-1.5-r3.ebuild
new file mode 100644
index 0000000..bebf36c
--- /dev/null
+++ b/sci-chemistry/ambertools/ambertools-1.5-r3.ebuild
@@ -0,0 +1,157 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/sci-chemistry/ambertools/ambertools-1.5-r1.ebuild,v 1.2 2011/08/02 14:42:37 alexxy Exp $
+
+EAPI=4
+
+inherit eutils fortran-2 toolchain-funcs
+
+DESCRIPTION="A suite for carrying out complete molecular mechanics investigations"
+HOMEPAGE="http://ambermd.org/#AmberTools"
+SRC_URI="
+	AmberTools-${PV}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86 ~amd64-linux"
+IUSE="openmp X"
+
+RESTRICT="fetch"
+
+RDEPEND="
+	virtual/cblas
+	virtual/lapack
+	sci-libs/clapack
+	sci-libs/arpack
+	sci-libs/cifparse-obj
+	sci-chemistry/mopac7
+	sci-libs/netcdf
+	sci-libs/fftw:2.1
+	sci-chemistry/reduce
+	virtual/fortran"
+DEPEND="${RDEPEND}
+	dev-util/byacc
+	dev-libs/libf2c
+	sys-devel/ucpp"
+S="${WORKDIR}/amber11"
+
+pkg_nofetch() {
+	einfo "Go to ${HOMEPAGE} and get ${A}"
+	einfo "Place it in ${DISTDIR}"
+}
+
+pkg_setup() {
+	fortran-2_pkg_setup
+	if use openmp; then
+		tc-has-openmp || \
+			die "Please select an openmp capable compiler like gcc[openmp]"
+	fi
+	AMBERHOME="${S}"
+}
+
+src_prepare() {
+	epatch \
+		"${FILESDIR}/${P}-bugfix_1-21.patch" \
+		"${FILESDIR}/${P}-bugfix_22-27.patch" \
+		"${FILESDIR}/${P}-gentoo2.patch"
+	cd "${S}"/AmberTools/src
+	rm -r \
+		arpack \
+		blas \
+		byacc \
+		lapack \
+		fftw-2.1.5 \
+		fftw-3.2.2 \
+		c9x-complex \
+		cifparse \
+		netcdf \
+		pnetcdf \
+		reduce \
+		ucpp-1.3 \
+		|| die
+}
+
+src_configure() {
+	cd "${S}"/AmberTools/src
+	sed -e "s:\\\\\$(LIBDIR)/arpack.a:-larpack:g" \
+		-e "s:\\\\\$(LIBDIR)/lapack.a:$(pkg-config lapack --libs) -lclapack:g" \
+		-e "s:\\\\\$(LIBDIR)/blas.a:$(pkg-config blas cblas --libs):g" \
+		-e "s:\\\\\$(LIBDIR)/libdrfftw.a:${EPREFIX}/usr/$(get_libdir)/libdrfftw.a:g" \
+		-e "s:\\\\\$(LIBDIR)/libdfftw.a:${EPREFIX}/usr/$(get_libdir)/libdrfftw.a:g" \
+		-e "s:GENTOO_CFLAGS:${CFLAGS} -DBINTRAJ :g" \
+		-e "s:GENTOO_CXXFLAGS:${CXXFLAGS}:g" \
+		-e "s:GENTOO_FFLAGS:${FFLAGS}:g" \
+		-e "s:GENTOO_LDFLAGS:${LDFLAGS}:g" \
+		-e "s:fc=g77:fc=$(tc-getFC):g" \
+		-e "s:\$netcdflib:$(pkg-config netcdf --libs):g" \
+		-e "s:NETCDF=\$netcdf:NETCDF=netcdf.mod:g" \
+		-i configure || die
+	sed -e "s:arsecond_:arscnd_:g" \
+		-i sff/time.c \
+		-i sff/sff.h \
+		-i sff/sff.c || die
+	sed -e "s:\$(NAB):\$(NAB) -lrfftw:g" \
+		-i nss/Makefile || die
+
+	local myconf
+
+	use X || myconf="${myconf} -noX11"
+
+	use openmp && myconf="${myconf} -openmp"
+
+	./configure \
+		${myconf} \
+		-nobintraj \
+		-nomdgx \
+		-nomtkpp \
+		-nopython \
+		-nosleap \
+		gnu
+}
+
+src_compile() {
+	cd "${S}"/AmberTools/src
+	emake || die
+}
+
+src_test() {
+	cd "${S}"/AmberTools/test
+	make test || die
+}
+
+src_install() {
+	rm -r bin/chemistry bin/MMPBSA_mods
+	rm bin/ante-MMPBSA.py bin/extractFrcmod.py
+
+	for x in bin/*
+		do dobin ${x} || die
+	done
+
+	dobin AmberTools/src/antechamber/mopac.sh
+	sed -e "s:\$AMBERHOME/bin/mopac:mopac7:g" \
+		-i "${ED}/usr/bin/mopac.sh" || die
+
+	# Make symlinks untill binpath for amber will be fixed
+	dodir /usr/share/${PN}/bin
+	cd "${ED}/usr/bin"
+	for x in *
+		do dosym /usr/bin/${x} /usr/share/${PN}/bin/${x}
+	done
+	cd "${S}"
+
+	dodoc doc/AmberTools.pdf doc/leap_pg.pdf
+	dolib.a lib/*
+	insinto /usr/include/${PN}
+	doins include/*
+	insinto /usr/share/${PN}
+	doins -r dat
+	cd AmberTools
+	doins -r benchmarks
+	doins -r examples
+	doins -r test
+
+	cat >> "${T}"/99ambertools <<- EOF
+	AMBERHOME="${EPREFIX}/usr/share/ambertools"
+	EOF
+	doenvd "${T}"/99ambertools
+}

diff --git a/sci-chemistry/ambertools/files/ambertools-1.5-bugfix_22-27.patch b/sci-chemistry/ambertools/files/ambertools-1.5-bugfix_22-27.patch
new file mode 100644
index 0000000..6df705c
--- /dev/null
+++ b/sci-chemistry/ambertools/files/ambertools-1.5-bugfix_22-27.patch
@@ -0,0 +1,3343 @@
+diff -urN amber11.orig/AmberTools/examples/mtkpp/MCPB/run.MCPB.csh amber11/AmberTools/examples/mtkpp/MCPB/run.MCPB.csh
+--- amber11.orig/AmberTools/examples/mtkpp/MCPB/run.MCPB.csh	2011-04-14 15:30:12.000000000 +0300
++++ amber11/AmberTools/examples/mtkpp/MCPB/run.MCPB.csh	2012-03-03 20:03:01.387032575 +0200
+@@ -2,111 +2,10 @@
+ echo " "
+ echo "  MTK++ MCPB example "
+ echo " "
+-
+-# Clean up
+-rm -rf 1AMP_OH.README
+-rm -rf *.bcl
+-rm -rf createLibraries.sh createRespAdditions.sh getCharges.sh
+-rm -rf *.pdb
+-rm -rf *.log
+-
+-cp data/*.pdb .
+-cp data/*.bcl .
+-cp data/*.log .
+-cp data/*.fchk .
+-
+-echo "Generating scripts "
+-sh genMetalFF.sh -n 1AMP_OH
+-
+-cp data/1AMP.pdb .
+-cp data/1AMP_OH_fixed.pdb .
+-cp data/1AMP_OH_sidechain.bcl .
+-cp data/1AMP_OH_addStdMol.bcl .
+-cp data/1AMP_OH_large.bcl .
+-cp data/1AMP_OH_large_mk.log .
+-
+-cp data/1AMP_OH_sidechain_fc_md.log .
+-cp data/1AMP_OH_sidechain_opt_md.fchk .
+-cp data/1AMP_OH_sidechain_opt_md.log .
+-
+-echo "Adding Hydrogens to pdb file "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_addHs.bcl \
+-                    -l 1AMP_OH_addHs.bcl.log || goto error
+-
+-echo "Creating Model 1"
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_sidechain.bcl \
+-                    -l 1AMP_OH_sidechain.bcl.log || goto error
+-
+-echo "Adding standard molecule to library "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_addStdMol.bcl \
+-                    -l 1AMP_OH_addStdMol.bcl.log || goto error
+-
+-echo "Creating Model 2 "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large.bcl \
+-                    -l 1AMP_OH_large.bcl.log || goto error
+-
+-echo "Creating RESP files 0 "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_mk0.bcl \
+-                    -l 1AMP_OH_large_mk0.bcl.log || goto error
+-mv 1AMP_OH_large_respAdds 1AMP_OH_large_respAdds0 || goto error
+-
+-echo "Creating RESP files 1 "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_mk1.bcl \
+-                    -l 1AMP_OH_large_mk1.bcl.log || goto error
+-mv 1AMP_OH_large_respAdds 1AMP_OH_large_respAdds1 || goto error
+-
+-echo "Creating RESP files 2 "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_mk2.bcl \
+-                    -l 1AMP_OH_large_mk2.bcl.log || goto error
+-mv 1AMP_OH_large_respAdds 1AMP_OH_large_respAdds2 || goto error
+-
+-echo "Creating RESP files 3 "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_mk3.bcl \
+-                    -l 1AMP_OH_large_mk3.bcl.log || goto error
+-mv 1AMP_OH_large_respAdds 1AMP_OH_large_respAdds3 || goto error
+-
+-echo "Determining charges "
+-sh ./getCharges.sh 0 || goto error
+-sh ./getCharges.sh 1 || goto error
+-sh ./getCharges.sh 2 || goto error
+-sh ./getCharges.sh 3 || goto error
+-
+-echo "Creating library files "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_chg0.bcl \
+-                    -l 1AMP_OH_large_chg0.bcl.log || goto error
+-
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_chg1.bcl \
+-                    -l 1AMP_OH_large_chg1.bcl.log || goto error
+-
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_chg2.bcl \
+-                    -l 1AMP_OH_large_chg2.bcl.log || goto error
+-
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_large_chg3.bcl \
+-                    -l 1AMP_OH_large_chg3.bcl.log || goto error
+-
+-echo "Determining Seminario force constants "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_sidechain_fc_sem.bcl \
+-                    -l 1AMP_OH_sidechain_fc_sem.bcl.log || goto error
+-
+-echo "Determining Traditional force constants "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_sidechain_fc_md.bcl \
+-                    -l 1AMP_OH_sidechain_fc_md.bcl.log || goto error
+-
+-echo "Exporting Seminario library to AMBER format "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_toAmberFormats_sem.bcl \
+-                    -l 1AMP_OH_toAmberFormats_sem.bcl.log || goto error
+-
+-echo "Exporting Traditional library to AMBER format "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_toAmberFormats_md.bcl \
+-                    -l 1AMP_OH_toAmberFormats_md.bcl.log || goto error
+-
+-echo "Reading protonated file and updating residue names "
+-$AMBERHOME/bin/MCPB -i 1AMP_OH_resNames.bcl \
+-                    -l 1AMP_OH_resNames.bcl.log || goto error
+-
+-echo No errors detected
++echo " "
++echo "  This example has been removed due to incompatibility with"
++echo "  the current minor revision of MTK++. An updated MCPB example"
++echo "  is planned for a future release."
++echo " "
+ exit(0)
+ 
+-error:
+-echo Problem: check log files and try again
+-exit(1)
+diff -urN amber11.orig/AmberTools/examples/mtkpp/stats/pca1/run.stats.csh amber11/AmberTools/examples/mtkpp/stats/pca1/run.stats.csh
+--- amber11.orig/AmberTools/examples/mtkpp/stats/pca1/run.stats.csh	2011-04-14 15:30:12.000000000 +0300
++++ amber11/AmberTools/examples/mtkpp/stats/pca1/run.stats.csh	2012-03-03 20:03:01.387032575 +0200
+@@ -3,12 +3,12 @@
+ echo "  MTK++ stats example"
+ echo " "
+ 
+-../$AMBERHOME/bin/stats -i pca.stats \
+-                        -l pca.stats.log || goto error
++$AMBERHOME/bin/stats -i pca.stats \
++                     -l pca.stats.log || goto error
+ 
+ echo No errors detected
+ exit(0)
+ 
+ error:
+ echo Problem: check .out and try again
+-exit(1)
+\ Nav jaunu rindu faila beigās
++exit(1)
+diff -urN amber11.orig/AmberTools/src/configure amber11/AmberTools/src/configure
+--- amber11.orig/AmberTools/src/configure	2012-03-03 22:42:38.558776473 +0200
++++ amber11/AmberTools/src/configure	2012-03-03 20:02:57.727033628 +0200
+@@ -61,6 +61,9 @@
+       -debug         Compile with debug symbols
+       -noopt         Disable all compiler optimisations (sometimes needed if
+                      debug symbols are requested)
++      -nopatch       Do NOT run \$AMBERHOME/AT15_Amber11.py after configure writes
++                     the config.h file, even if Amber11 is found in the directory.
++                     This flag has no effect if Amber11 is not present.
+ 
+     Rarely used/tested NAB options:
+       -scalapack     Use ScaLAPACK for linear algebra. Do not use in
+@@ -165,6 +168,7 @@
+ debug='no'
+ optimise='yes'
+ is_mac='no'
++nopatch='no'
+ 
+ #------------------------------------------------------------------------------
+ #  Architecture specific: 
+@@ -216,6 +220,7 @@
+         -nomtkpp)       mtkpp='';;
+         -debug)         debug='yes';;
+         -noopt)         optimise='no';;
++        -nopatch)       nopatch='yes';;
+         -help)          usage;;
+         --help)         usage;;
+         -h)             usage;;
+@@ -2144,7 +2149,7 @@
+ fi
+ 
+ # For AmberTools 1.5 + Amber 11, print a message about running AT15_Amber11.py
+-if [ -d ../../src/sander ]; then
++if [ -d ../../src/sander -a "$nopatch" = 'yes' ]; then
+    echo ""
+    echo " NOTE: after installing AmberTools, if you want to compile"
+    echo "       Amber11 using AmberTools 1.5, you must run the "
+@@ -2155,5 +2160,14 @@
+    echo "       script will modify your Amber11 files.)"
+ fi
+ 
++if [ -d ../../src/sander -a "$nopatch" = 'no' ]; then
++   echo ""
++   echo " Running \$AMBERHOME/AT15_Amber11.py to patch config.h for building Amber 11."
++   echo " Check Amber11_Conversion.log for details of what was done. Running this script"
++   echo " a second time has no effect (positive or negative)"
++   echo ""
++   ../../AT15_Amber11.py > Amber11_Conversion.log 2>&1
++fi
++
+ exit
+ 
+diff -urN amber11.orig/AmberTools/src/cpptraj/src/AmberRestart.cpp amber11/AmberTools/src/cpptraj/src/AmberRestart.cpp
+--- amber11.orig/AmberTools/src/cpptraj/src/AmberRestart.cpp	2012-03-03 22:42:00.557775196 +0200
++++ amber11/AmberTools/src/cpptraj/src/AmberRestart.cpp	2012-03-03 20:03:06.928030979 +0200
+@@ -53,7 +53,7 @@
+         mprintf("Error: AmberRestart::open(): Reading restart atoms/time.\n");
+         return 1;
+       }
+-      nread=sscanf(buffer,"%5i%15lE%15lE",&restartAtoms,&restartTime,&restartTemp);
++      nread=sscanf(buffer,"%i %lE %lE",&restartAtoms,&restartTime,&restartTemp);
+       if (nread<1) {
+         mprintf("Error: AmberRestart::open(): Getting restart atoms/time.\n");
+         return 1;
+diff -urN amber11.orig/AmberTools/src/cpptraj/src/main.cpp amber11/AmberTools/src/cpptraj/src/main.cpp
+--- amber11.orig/AmberTools/src/cpptraj/src/main.cpp	2012-03-03 22:42:47.132776753 +0200
++++ amber11/AmberTools/src/cpptraj/src/main.cpp	2012-03-03 20:03:06.928030979 +0200
+@@ -6,7 +6,7 @@
+ #include "PtrajMpi.h"
+ #include "CpptrajStdio.h"
+ #ifndef CPPTRAJ_VERSION_STRING
+-#define CPPTRAJ_VERSION_STRING "V1.1.1"
++#define CPPTRAJ_VERSION_STRING "V1.1.2"
+ #endif
+ 
+ void Usage(char *programName) {
+diff -urN amber11.orig/AmberTools/src/mmpbsa_py/MMPBSA_mods/amberoutputs.py amber11/AmberTools/src/mmpbsa_py/MMPBSA_mods/amberoutputs.py
+--- amber11.orig/AmberTools/src/mmpbsa_py/MMPBSA_mods/amberoutputs.py	2011-04-14 15:30:17.000000000 +0300
++++ amber11/AmberTools/src/mmpbsa_py/MMPBSA_mods/amberoutputs.py	2012-03-03 20:03:11.481029669 +0200
+@@ -2315,7 +2315,7 @@
+          return math.sqrt(abs(_stdev(self.com_data[0]) ** 2 + _stdev(self.rec_data[0]) ** 2 + _stdev(self.lig_data[0]) ** 2))
+ 
+       sum = sum2 = 0
+-      for i in range(len(self.com_data)):
++      for i in range(len(self.com_data[0])):
+          sum += self.com_data[0][i] - self.rec_data[0][i] - self.lig_data[0][i]
+          sum2 += (self.com_data[0][i] - self.rec_data[0][i] - self.lig_data[0][i]) ** 2
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/configure amber11/AmberTools/src/mtkpp/configure
+--- amber11.orig/AmberTools/src/mtkpp/configure	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/configure	2012-03-03 20:03:01.397032571 +0200
+@@ -788,7 +788,6 @@
+ with_gnu_ld
+ with_sysroot
+ enable_libtool_lock
+-with_gnu_ld
+ with_mkl_dir
+ with_mkl_libs
+ with_boost
+@@ -811,22 +810,9 @@
+ CCC
+ CC
+ CFLAGS
+-LDFLAGS
+-LIBS
+-CPPFLAGS
+ CPP
+-CPPFLAGS
+ CXXCPP
+-CPPFLAGS
+-XMKMF
+-CXX
+-LDFLAGS
+-LIBS
+-CPPFLAGS
+-CCC
+-CC
+-LDFLAGS
+-LIBS'
++XMKMF'
+ 
+ 
+ # Initialize some variables set by options.
+@@ -16665,7 +16651,7 @@
+     *)              platform=UNKNOWN
+         is_unknown=yes
+         echo 'ERROR: this platform is not supported at this time!'
+-        exit 1 ;;
++        exit  ;;
+ esac
+  if test "$is_darwin" = "yes"; then
+   IS_DARWIN_TRUE=
+@@ -17838,8 +17824,8 @@
+ $as_echo "#define HAVE_ZLIB 1" >>confdefs.h
+ 
+   CFLAGS=$CFLAGS" -DHAVE_ZLIB"
+-  CXXFLAGS=$CXXFLAGS" -DHAVE_ZLIB -DHAVE_ZLIB"
+-  defines_string=$defines_string" -DHAVE_ZLIB -DHAVE_ZLIB"
++  CXXFLAGS=$CXXFLAGS" -DHAVE_ZLIB"
++  defines_string=$defines_string" -DHAVE_ZLIB"
+   FLIBS=$FLIBS" -lz"
+ else
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/configure.in amber11/AmberTools/src/mtkpp/configure.in
+--- amber11.orig/AmberTools/src/mtkpp/configure.in	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/configure.in	2012-03-03 20:03:01.400032571 +0200
+@@ -383,7 +383,7 @@
+     *)              platform=UNKNOWN
+         is_unknown=yes
+         echo 'ERROR: this platform is not supported at this time!'
+-        exit 1 ;;
++        exit  ;;
+ esac
+ AM_CONDITIONAL(IS_DARWIN, test "$is_darwin" = "yes")
+ AM_CONDITIONAL(IS_LINUX, test "$is_linux" = "yes")
+@@ -457,8 +457,8 @@
+ if test $ac_have_zlibh = yes; then
+   AC_DEFINE(HAVE_ZLIB, 1, [Define to 1 if ZLIB is available.])
+   CFLAGS=$CFLAGS" -DHAVE_ZLIB"
+-  CXXFLAGS=$CXXFLAGS" -DHAVE_ZLIB -DHAVE_ZLIB"
+-  defines_string=$defines_string" -DHAVE_ZLIB -DHAVE_ZLIB"
++  CXXFLAGS=$CXXFLAGS" -DHAVE_ZLIB"
++  defines_string=$defines_string" -DHAVE_ZLIB"
+   FLIBS=$FLIBS" -lz"
+ else
+   AC_DEFINE(HAVE_ZLIB, 0, [Define to 0 if ZLIB is unavailable.])
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Minimizers/Makefile.am amber11/AmberTools/src/mtkpp/src/Minimizers/Makefile.am
+--- amber11.orig/AmberTools/src/mtkpp/src/Minimizers/Makefile.am	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Minimizers/Makefile.am	2012-03-03 20:03:01.400032571 +0200
+@@ -1,4 +1,4 @@
+-DIAGNOSTICS_LD=-L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD=-L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB=-lDiagnostics
+ INCLUDES = -I$(srcdir)/..
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Minimizers/Makefile.in amber11/AmberTools/src/mtkpp/src/Minimizers/Makefile.in
+--- amber11.orig/AmberTools/src/mtkpp/src/Minimizers/Makefile.in	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Minimizers/Makefile.in	2012-03-03 20:03:01.401032571 +0200
+@@ -239,7 +239,7 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ xerces_path = @xerces_path@
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB = -lDiagnostics
+ INCLUDES = -I$(srcdir)/..
+ lib_LTLIBRARIES = libMinimizers.la
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/MM/Makefile.am amber11/AmberTools/src/mtkpp/src/MM/Makefile.am
+--- amber11.orig/AmberTools/src/mtkpp/src/MM/Makefile.am	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/MM/Makefile.am	2012-03-03 20:03:01.400032571 +0200
+@@ -1,6 +1,6 @@
+-DIAGNOSTICS_LD=-L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD=-L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB=-lDiagnostics
+-LOG_LD=-L$(top_builddir)/src/Log/$(SRCDIR)
++LOG_LD=-L$(abs_top_builddir)/src/Log/$(SRCDIR)
+ LOG_LIB=-lLog
+ 
+ INCLUDES = -I@boost_inc@ -I$(srcdir)/..
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/MM/Makefile.in amber11/AmberTools/src/mtkpp/src/MM/Makefile.in
+--- amber11.orig/AmberTools/src/mtkpp/src/MM/Makefile.in	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/MM/Makefile.in	2012-03-03 20:03:01.400032571 +0200
+@@ -241,9 +241,9 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ xerces_path = @xerces_path@
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB = -lDiagnostics
+-LOG_LD = -L$(top_builddir)/src/Log/$(SRCDIR)
++LOG_LD = -L$(abs_top_builddir)/src/Log/$(SRCDIR)
+ LOG_LIB = -lLog
+ INCLUDES = -I@boost_inc@ -I$(srcdir)/..
+ lib_LTLIBRARIES = libMM.la
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/atomType.h amber11/AmberTools/src/mtkpp/src/Molecule/atomType.h
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/atomType.h	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/atomType.h	2012-03-03 20:03:01.402032570 +0200
+@@ -74,6 +74,9 @@
+ 
+     //!
+     double evalue;
++
++    //! Atomic polarizability in A**3
++    double atomPolarizability;
+ };
+ 
+ // ============================================================
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/collection.cpp amber11/AmberTools/src/mtkpp/src/Molecule/collection.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/collection.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/collection.cpp	2012-03-03 20:03:01.403032569 +0200
+@@ -484,6 +484,11 @@
+     for (moleculeIterator m = this->itsMoleculeList.begin();
+          m != this->itsMoleculeList.end(); m++) {
+       pMolecule = *m;
++
++      if (pMolecule->getName() == "Reference") {
++        continue;  
++      }
++
+       std::vector<submolecule*> subMolList = pMolecule->getSubMoleculeList();
+       for (sMolIterator c = subMolList.begin(); c != subMolList.end(); c++) {
+         pSubMolecule = *c;
+@@ -3408,7 +3413,10 @@
+         }
+         errMessage += metalAtom->getParent()->getName() + "@|"
+                     + metalAtom->getName() + "|-"
+-                    + primShellAtoms[e]->getParent()->getName() + "@|"
++                    + primShellAtoms[e]->getParent()->getName()
++                    + i2s(primShellAtoms[e]->getParent()->getSubMolId())
++                    + primShellAtoms[e]->getParent()->getiCode()
++                    + "@|"
+                     + primShellAtoms[e]->getName() + "| dist = " + d2s(localBond->size) +"\n";
+ 
+         // Angles
+@@ -3488,7 +3496,8 @@
+         std::vector<stdGroup*> stdGrpList = this->pStdLibrary->getStdGroupList();
+ 
+         for (unsigned int i = 0; i < stdGrpList.size(); i++) {
+-//std::cout << i << " " << stdGrpList.size() << " " << stdGrpList[i]->getName() << " " << stdGrpList[i]->hasStdMolecule() << std::endl;
++//std::cout << "\n\ncollection::assignMetalParameters " << i << " " << stdGrpList.size() << " " << stdGrpList[i]->getName() << " "
++//          << stdGrpList[i]->hasStdMolecule() << std::endl;
+           if (stdGrpList[i]->hasStdMolecule()) {
+             //std::cout << "stdgroup name: " << stdGrpList[i]->getName() << std::endl;
+             //stdGroup* pStdGroup = stdGrpList[i];
+@@ -3515,6 +3524,7 @@
+ 
+               // create new molecule
+               molecule* pNewMolecule = this->addMolecule();
++              std::vector<atom*> atomList;
+ 
+               // copy residues
+               std::vector<metalCenter*> metCens = itsMetalGroups[j]->getMetalCenters();
+@@ -3536,6 +3546,10 @@
+                     addedResidues.push_back(primShellAtoms[l]->getParent());
+                     submolecule* pNewSubmolecule = pNewMolecule->addSubMolecule();
+                     pNewSubmolecule->copy(primShellAtoms[l]->getParent());
++                    std::vector<atom*> atomListTmp = primShellAtoms[l]->getParent()->getAtomList();
++                    for (unsigned int i = 0 ; i < atomListTmp.size(); i++) {
++                        atomList.push_back(atomListTmp[i]);
++                    }
+ /*
+ std::cout << "Primary Shell " << primShellAtoms[l]->getParent()->getName() << " "
+           << primShellAtoms[l]->getParent()->getSubMolId() << " "
+@@ -3556,6 +3570,11 @@
+                     addedResidues.push_back(secShellAtoms[l]->getParent());
+                     submolecule* pNewSubmolecule = pNewMolecule->addSubMolecule();
+                     pNewSubmolecule->copy(secShellAtoms[l]->getParent());
++
++                    std::vector<atom*> atomListTmp = secShellAtoms[l]->getParent()->getAtomList();
++                    for (unsigned int i = 0 ; i < atomListTmp.size(); i++) {
++                        atomList.push_back(atomListTmp[i]);
++                    }
+ /*
+ std::cout << "Secondary Shell " << secShellAtoms[l]->getParent()->getName() << " "
+           << secShellAtoms[l]->getParent()->getSubMolId()
+@@ -3573,6 +3592,12 @@
+                   addedResidues.push_back(metalAtom->getParent());
+                   submolecule* pNewSubmolecule = pNewMolecule->addSubMolecule();
+                   pNewSubmolecule->copy(metalAtom->getParent());
++
++                    std::vector<atom*> atomListTmp = metalAtom->getParent()->getAtomList();
++                    for (unsigned int i = 0 ; i < atomListTmp.size(); i++) {
++                        atomList.push_back(atomListTmp[i]);
++                    }
++
+ /*
+ std::cout << "Metal Atom " << metalAtom->getParent()->getName() << " "
+           << metalAtom->getParent()->getSubMolId()
+@@ -3582,7 +3607,7 @@
+                 }
+               }
+ 
+-//std::cout << " \n\n NEW MOLECULE \n";
++//std::cout << "NEW MOLECULE \n";
+ 
+               // Copy bonds
+               if (pNewMolecule) {
+@@ -3646,16 +3671,26 @@
+                   }
+                 }
+               }
++
++//std::cout << " After copy " << std::endl;
++
+               int nAtomsA = pStdMolecule->getNumAtoms();
+               int nAtomsB = pNewMolecule->getNumAtoms();
++
++              int nBondsA = pStdMolecule->getNumBonds();
++              int nBondsB = pNewMolecule->getNumBonds();
++
+               int nHeavyAtomsA = pStdMolecule->getNumHeavyAtoms();
+               int nHeavyAtomsB = pNewMolecule->getNumHeavyAtoms();
+ 
++//std::cout << "CHECK " << nAtomsA << " " << nAtomsB << " " << nBondsA << " " << nBondsB << "\n";
+               int w = 0;
+               if (nAtomsA != nAtomsB) w++;
+               int h = 0;
+               if (nHeavyAtomsA != nHeavyAtomsB) h++;
+ 
++//std::cout << " w = " << w << " h = " << h << std::endl;
++
+               if (w or h) {
+                 std::string eMes = " " + stdGrpList[i]->getName() + " is not a match \n";
+                 eMes +=   "   std mol nAtoms: " + i2s(nAtomsA) +
+@@ -3671,8 +3706,17 @@
+                   // Determine corresponences between two molecules
+                   std::vector<std::vector<int> > correspondenceMatrices;
+                   //int cor = 0;
++//std::cout << " superimpose " << std::endl;
+                   superimpose* pSuperImpose = new superimpose();
+-                  int f = pSuperImpose->initializeCorrespondences(pStdMolecule, pNewMolecule, 3, correspondenceMatrices);
++                  int f = 0;
++                  try {
++                    f = pSuperImpose->initializeCorrespondences(pStdMolecule, pNewMolecule, 3, correspondenceMatrices);
++                  }
++                  catch (...) {
++                    f = 1;
++                  }
++
++//std::cout << " after superimpose " << std::endl;
+ 
+                   if (f != 0) {
+                     std::string eMes = " Error initializing correspondences\n " + stdGrpList[i]->getName() + " is not a match \n";
+@@ -3689,6 +3733,8 @@
+                     pNewMolecule->getCoordinates(CoordsB);
+                     int cor = 0;
+ 
++//std::cout << " f = 0 " << std::endl;
++
+                     double dRMSD = pSuperImpose->rmsd(pStdMolecule, CoordsB, correspondenceMatrices, cor);
+                     std::string eMes = " " + stdGrpList[i]->getName() + " is a match with rmsd of " + d2s(dRMSD) + "\n";
+                     MTKpp::errorLogger.throwError("collection::assignMetalParameters", eMes, INFO);
+@@ -3703,38 +3749,52 @@
+                       for (int t = 0; t < nHeavyAtoms; t++) {
+                         for (int t2 = 0; t2 < nHeavyAtoms; t2++) {
+                           if (correspondenceMatrices[cor][t*nHeavyAtoms+t2]) {
+-//std::cout << t+1 << ":" << t2+1 << "; |";
+-
+                             atom* pA1 = molHeavyAtoms1[t];
+                             atom* pA2 = molHeavyAtoms2[t2];
+ 
+                             if (pA1 and pA2) {
+-//atom* collection::getAtom(int number, bool atomIndex, bool fileId, bool atomColIndex)
+-
++                              // getAtom(int number, bool atomIndex, bool fileId, bool atomColIndex)
+                               atom* pOrgAtom = this->getAtom(pA2->getFileID(), 0, 1, 0);
+-/*
+-std::cout << pA1->getName() << "|" << pA2->getName() << "|" << pOrgAtom->getName() << " "
+-          << pA1->getParent()->getName() << "|" << pA2->getParent()->getName() << "|" << pOrgAtom->getParent()->getName() << " |"
+-          << pA1->getFileID() << "|" << pA2->getFileID() << "|" << pOrgAtom->getFileID() << "|"
+-          << pA1->getColIndex() << "|" << pA2->getColIndex() << "|" << pOrgAtom->getColIndex() 
+-                        << " |\n";
+-*/
+-                              pOrgAtom->getParent()->setName(pA1->getParent()->getName());
++                              // atom* pOrgAtom = this->getAtom(pA2->getColIndex(), 0, 0, 1);
++
++
++//std::cout << pA1->getName() << "|" << pA2->getName() << "|" << pOrgAtom->getName() << " "
++//          << pA1->getParent()->getName() << "|" << pA2->getParent()->getName() << "|" << pOrgAtom->getParent()->getName() << " |"
++//          << pA1->getFileID() << "|" << pA2->getFileID() << "|" << pOrgAtom->getFileID() << "|"
++//          << pA1->getColIndex() << "|" << pA2->getColIndex() << "|" << pOrgAtom->getColIndex() 
++//                        << " |\n";
++
++                              //pOrgAtom->getParent()->setName(pA1->getParent()->getName());
++                              
++                              for (unsigned int i = 0 ; i < atomList.size(); i++) {
++                                  if (atomList[i]->getFileID() == pA2->getFileID()) {
++                                    //std::cout <<  "setting " << atomList[i]->getParent()->getName() << " to " 
++                                    //          << pA1->getParent()->getName() << "\n";
++                                    atomList[i]->getParent()->setName(pA1->getParent()->getName());
++                                  }
+                             }
++//std::cout << pOrgAtom->getParent() << " "  << pOrgAtom->getParent()->getName() << " " 
++//<< pA2->getFileID()
++//          << " "  << pOrgAtom->getParent()->getColIndex() << "\n";
+                           }
+                         }
+                       }
+                     }
++
++                    }
+                   }
+                 }
+               }
++
+               // delete new molecule
++              if (pNewMolecule) {
+               this->delMolecule(pNewMolecule);
+             }
+           }
+         }
+       }
+     }
++    }
+ 
+ ///////////////////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////////
+@@ -4377,6 +4437,7 @@
+     }
+     std::cout << "       TOTAL CHARGE = " << localTotalCharge << std::endl;
+ */
++
+ }
+ 
+ // ============================================================
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/hydrophobize.cpp amber11/AmberTools/src/mtkpp/src/Molecule/hydrophobize.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/hydrophobize.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/hydrophobize.cpp	2012-03-03 20:03:01.404032569 +0200
+@@ -315,7 +315,7 @@
+       if (!vertices[i]->isVisited()) {
+         graph* subGraph = new graph();
+ 
+-        std::cout << "\n " << vertices[i]->getIndex() << " ";
++//        std::cout << "\n " << vertices[i]->getIndex() << " ";
+         molGraph->dfs(vertices[i]);
+ 
+         for (unsigned int j = 0; j < vertices.size(); j++) {
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/Makefile.am amber11/AmberTools/src/mtkpp/src/Molecule/Makefile.am
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/Makefile.am	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/Makefile.am	2012-03-03 20:03:01.401032571 +0200
+@@ -1,8 +1,8 @@
+-DIAGNOSTICS_LD=-L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD=-L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB=-lDiagnostics
+-GRAPH_LD=-L$(top_builddir)/src/Graph/$(SRCDIR)
++GRAPH_LD=-L$(abs_top_builddir)/src/Graph/$(SRCDIR)
+ GRAPH_LIB=-lGraph
+-LOG_LD=-L$(top_builddir)/src/Log/$(SRCDIR)
++LOG_LD=-L$(abs_top_builddir)/src/Log/$(SRCDIR)
+ LOG_LIB=-lLog
+ 
+ INCLUDES = -I@boost_inc@ -I$(srcdir)/.. -I$(top_srcdir)/src/eigen3b2
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/Makefile.in amber11/AmberTools/src/mtkpp/src/Molecule/Makefile.in
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/Makefile.in	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/Makefile.in	2012-03-03 20:03:01.401032571 +0200
+@@ -248,11 +248,11 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ xerces_path = @xerces_path@
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB = -lDiagnostics
+-GRAPH_LD = -L$(top_builddir)/src/Graph/$(SRCDIR)
++GRAPH_LD = -L$(abs_top_builddir)/src/Graph/$(SRCDIR)
+ GRAPH_LIB = -lGraph
+-LOG_LD = -L$(top_builddir)/src/Log/$(SRCDIR)
++LOG_LD = -L$(abs_top_builddir)/src/Log/$(SRCDIR)
+ LOG_LIB = -lLog
+ INCLUDES = -I@boost_inc@ -I$(srcdir)/.. -I$(top_srcdir)/src/eigen3b2
+ lib_LTLIBRARIES = libMolecule.la
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/parameters.cpp amber11/AmberTools/src/mtkpp/src/Molecule/parameters.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/parameters.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/parameters.cpp	2012-03-03 20:03:01.404032569 +0200
+@@ -145,6 +145,7 @@
+     pAtomType->description = "";
+     pAtomType->rvalue = 0.0;
+     pAtomType->evalue = 0.0;
++    pAtomType->atomPolarizability = 0.0;
+     pAtomType->groupName = "";
+     pAtomType->optimize = false;
+     this->itsTypeList.push_back(pAtomType);
+@@ -184,6 +185,7 @@
+     pAtomType->description = a->description;
+     pAtomType->rvalue = a->rvalue;
+     pAtomType->evalue = a->evalue;
++    pAtomType->atomPolarizability = a->atomPolarizability;
+     pAtomType->groupName = g;
+     pAtomType->optimize = a->optimize;
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/parameters.h amber11/AmberTools/src/mtkpp/src/Molecule/parameters.h
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/parameters.h	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/parameters.h	2012-03-03 20:03:01.405032569 +0200
+@@ -76,6 +76,9 @@
+     //! Well Depth
+     double evalue;
+ 
++    //! Atomic polarizability in A**3
++    double atomPolarizability;
++
+     //! group name
+     std::string groupName;
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/stdFrag.cpp amber11/AmberTools/src/mtkpp/src/Molecule/stdFrag.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/stdFrag.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/stdFrag.cpp	2012-03-03 20:03:01.405032569 +0200
+@@ -305,7 +305,8 @@
+       this->itsSymbol = symbol;
+     }
+     else {
+-      std::cout << " Length of Fragment Symbol = " << symbol.size()
++      std::cout << " Length of Fragment Symbol (" << symbol 
++                << ") = " << symbol.size()
+                 << " --> Must be 3." << std::endl;
+     }
+ }
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/stdGroup.cpp amber11/AmberTools/src/mtkpp/src/Molecule/stdGroup.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/stdGroup.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/stdGroup.cpp	2012-03-03 20:03:01.406032569 +0200
+@@ -35,6 +35,7 @@
+ #include "stdLibrary.h"
+ 
+ #include "molecule.h"
++#include "submolecule.h"
+ 
+ namespace MTKpp
+ {
+@@ -258,5 +259,24 @@
+     }
+ }
+ 
++// ============================================================
++// Function : getCharge()
++// ------------------------------------------------------------
++// 
++// ============================================================
++double stdGroup::getCharge()
++{
++    double d = 0.0;
++    if (pMolecule) {
++      std::vector<submolecule*> sList = this->pMolecule->getSubMoleculeList();
++      for (unsigned int p = 0; p < sList.size(); p++) {
++        this->pStdFrag = this->getStdFrag(sList[p]->getName());
++        d += this->pStdFrag->getCharge();
++        //std::cout << this->pStdFrag->getSymbol() << " " << this->pStdFrag->getCharge() << std::endl;
++      }
++    }
++    return d;
++}
++
+ } // MTKpp namespace
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Molecule/stdGroup.h amber11/AmberTools/src/mtkpp/src/Molecule/stdGroup.h
+--- amber11.orig/AmberTools/src/mtkpp/src/Molecule/stdGroup.h	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Molecule/stdGroup.h	2012-03-03 20:03:01.406032569 +0200
+@@ -160,6 +160,12 @@
+     */
+     molecule*                getStdMolecule();
+ 
++    /*!
++       \brief Get getCharge
++       \return molecule charge
++    */
++    double                   getCharge();
++
+ protected:
+     //! stdLibrary pointer
+     stdLibrary*              pParent;
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/frcmodParser.cpp amber11/AmberTools/src/mtkpp/src/Parsers/frcmodParser.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/frcmodParser.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/frcmodParser.cpp	2012-03-03 20:03:01.407032569 +0200
+@@ -98,6 +98,7 @@
+     while (ifrcmod) {
+       std::string buffer(80,'*');
+       getline(ifrcmod,fileline);
++//std::cout << "|" << fileline << "|" << std::endl;
+       bMASS = false;
+       bBOND = false;
+       bANGLE = false;
+@@ -105,118 +106,311 @@
+       bIMPROPER = false;
+       bNONBON = false;
+ 
++      if ( (fileline.size() > 0) and (stripString(fileline, " ") != "") ) {
++        std::vector<std::string> splitstring;
++        splitString(fileline, " ", splitstring, 0);
++
++        if (splitstring[0] == "MASS") bMASS = true;
++        if (splitstring[0] == "BOND") bBOND = true;
++        if (splitstring[0] == "ANGL" or splitstring[0] == "ANGLE") bANGLE = true;
++        if (splitstring[0] == "DIHE" or splitstring[0] == "DIHEDRAL") bDIHE = true;
++        if (splitstring[0] == "IMPROP" or  splitstring[0] == "IMPROPER") bIMPROPER = true;
++        if (splitstring[0] == "NONB" or splitstring[0] == "NONBON") bNONBON = true;
++      }
++/*
++      try {
+       if (fileline.substr(0,4) == "MASS") bMASS = true;
++      }
++      catch (std::out_of_range) {
++         std::cout << " out_of_range MAS " << std::endl;
++      }
++
++      try {
+       if (fileline.substr(0,4) == "BOND") bBOND = true;
++      }
++      catch (std::out_of_range) {
++         std::cout << " out_of_range BOND " << std::endl;
++      }
++
++      try {
+       if (fileline.substr(0,5) == "ANGLE") bANGLE = true;
++      }
++      catch (std::out_of_range) {
++         std::cout << " out_of_range ANG" << std::endl;
++      }
++
++      try {
+       if (fileline.substr(0,4) == "DIHE") bDIHE = true;
++      }
++      catch (std::out_of_range) {
++         std::cout << " out_of_range DIHE " << std::endl;
++      }
++
++      try {
+       if (fileline.substr(0,8) == "IMPROPER") bIMPROPER = true;
++      }
++      catch (std::out_of_range) {
++         std::cout << " out_of_range IMP " << std::endl;
++      }
++
++      try {
+       if (fileline.substr(0,6) == "NONBON") bNONBON = true;
++      }
++      catch (std::out_of_range) {
++         std::cout << " out_of_range NONB" << std::endl;
++      }
++*/
+ 
+       if (bMASS) {
+         getline(ifrcmod,fileline);
+-        while (fileline != "") {
++        while (stripString(fileline, " ") != "") {
++        //while (GetAlphaChar(fileline, 0) != "0") {
++          std::vector<std::string> splitLine;
++          splitString(fileline, " ", splitLine, 0);
++          if (splitLine.size() >= 2) {
++            for (unsigned int i = 0; i < 2; i++) {
++              splitLine[i] = stripString(splitLine[i], " ");
++            }
+           pAtomType = pParameters->addAtomType();
++            pAtomType->name = splitLine[0];
+           pAtomType->groupName = this->groupName;
+-          pAtomType->mass = strtod(fileline.substr(3,5).c_str(), 0);
++            pAtomType->mass = string2Double(splitLine[1]); //strtod(fileline.substr(3,5).c_str(), 0);
++
++            if (splitLine.size() > 2) {
++              char *end;
++              double ret_double = strtod(splitLine[2].c_str(), &end);
++              if (!*end) {
++                pAtomType->atomPolarizability = ret_double;
++              }
++//std::cout << splitLine[2] << " " << ret_double << std::endl;
++            }
++
+           getline(ifrcmod,fileline);
+         }
+       }
++      }
+ 
+       if (bBOND) {
+         getline(ifrcmod,fileline);
+-        while (fileline != "") {
+-          std::string atomNames = fileline.substr(0,5);
++        //while (fileline != "") {
++        while (stripString(fileline, " ") != "") {
++          //std::string atomNames = fileline.substr(0,5);
+           std::vector<std::string> splitLine;
+-          splitString(atomNames, "-", splitLine, 0);
+-          if (splitLine.size() == 2) {
+-            for (unsigned int i = 0; i < 2; i++) {
+-              splitLine[i] = stripString(splitLine[i]," ");
+-            }
++          splitString(fileline, "-", splitLine, 0);
++
++          std::vector<std::string> splitLine2;
++          splitString(splitLine[1], " ", splitLine2, 0);
++
++          //if (splitLine.size() == 2) {
++            //for (unsigned int i = 0; i < 2; i++) {
++            //  splitLine[i] = stripString(splitLine[i]," ");
++            //}
+             pBondParam = pParameters->addBondParam();
+             pBondParam->groupName = this->groupName;
+-            pBondParam->atomType1 = std::string(splitLine[0]);
+-            pBondParam->atomType2 = std::string(splitLine[1]);
+-            pBondParam->keq = strtod(fileline.substr(7,5).c_str(), 0);
+-            pBondParam->req = strtod(fileline.substr(16,5).c_str(), 0);
++            pBondParam->atomType1 = stripString(splitLine[0], " ");
++            pBondParam->atomType2 = stripString(splitLine2[0], " ");
++//std::cout << "|" << pBondParam->atomType1 << "|" << pBondParam->atomType2 << "|" << std::endl;
++            pBondParam->keq = string2Double(splitLine2[1]);
++            pBondParam->req = string2Double(splitLine2[2]);
++
++//            pBondParam->keq = strtod(fileline.substr(7,5).c_str(), 0);
++//            pBondParam->req = strtod(fileline.substr(16,5).c_str(), 0);
++
++//std::cout << "\n " << fileline << std::endl;
++//std::cout << " BOND " << pBondParam->atomType1 << " " << pBondParam->atomType2 << " " << pBondParam->keq << " " << pBondParam->req << std::endl;
++//std::cout << " BOND " << fileline.substr(7,5) << " "  << fileline.substr(16,5) <<std::endl;
++
+             getline(ifrcmod,fileline);
+-          }
++          //}
+         }
+       }
+ 
+       if (bANGLE) {
+         getline(ifrcmod,fileline);
+-        while (fileline != "") {
+-          std::string atomNames = fileline.substr(0,8);
++        //while (fileline != "") {
++        while (stripString(fileline, " ") != "") {
++//          std::string atomNames = fileline.substr(0,8);
++
+           std::vector<std::string> splitLine;
+-          splitString(atomNames, "-", splitLine, 0);
+-          if (splitLine.size() == 3) {
+-            for (unsigned int i = 0; i < 3; i++) {
+-              splitLine[i] = stripString(splitLine[i]," ");
+-            }
++          splitString(fileline, "-", splitLine, 0);
++
++          std::vector<std::string> splitLine2;
++          splitString(splitLine[2], " ", splitLine2, 0);
++
++          //std::vector<std::string> splitLine;
++          //splitString(atomNames, "-", splitLine, 0);
++
++          //std::vector<std::string> splitLine2;
++          //splitString(fileline, " ", splitLine2, 0);
++
++          //if (splitLine.size() == 3) {
++            //for (unsigned int i = 0; i < 3; i++) {
++            //  splitLine[i] = stripString(splitLine[i]," ");
++            //}
+             pAngleParam = pParameters->addAngleParam();
+             pAngleParam->groupName = this->groupName;
+-            pAngleParam->atomType1 = std::string(splitLine[0]);
+-            pAngleParam->atomType2 = std::string(splitLine[1]);
+-            pAngleParam->atomType3 = std::string(splitLine[2]);
+-            pAngleParam->keq = strtod(fileline.substr(11,7).c_str(), 0);
+-            pAngleParam->req = strtod(fileline.substr(20,8).c_str(), 0) * DEG2RAD;
++            pAngleParam->atomType1 = stripString(splitLine[0], " ");
++            pAngleParam->atomType2 = stripString(splitLine[1], " ");
++            pAngleParam->atomType3 = stripString(splitLine2[0], " ");
++//std::cout << "|" << pAngleParam->atomType1 << "|" << pAngleParam->atomType2 << "|" << pAngleParam->atomType3 << "|" << std::endl;
++
++            pAngleParam->keq = string2Double(splitLine2[1]);
++            pAngleParam->req = string2Double(splitLine2[2]) * DEG2RAD;
++
++            //pAngleParam->keq = strtod(fileline.substr(11,7).c_str(), 0);
++            //pAngleParam->req = strtod(fileline.substr(20,8).c_str(), 0) * DEG2RAD;
++
++//std::cout << "\n " << fileline << std::endl;
++//std::cout << " ANGLE " << pAngleParam->atomType1 << " " << pAngleParam->atomType2 << " " << pAngleParam->atomType3 << " " << pAngleParam->keq << " " << string2Double(splitLine2[2]) << std::endl;
++
+             getline(ifrcmod,fileline);
+-          }
++          //}
+         }
+       }
+ 
+       if (bDIHE) {
+         getline(ifrcmod,fileline);
+-        while (fileline != "") {
+-          std::string atomNames = fileline.substr(0,11);
++        //while (fileline != "") {
++        while (stripString(fileline, " ") != "") {
++
++//std::cout << "\n " << fileline << std::endl;
++
++//std::cout << fileline.substr(0,12) << std::endl;
++
++// snip = str.substr(0,12); 
++//(3) erase the substring of 0..where str.erase(0,where); 
++
++          std::string atTypes = fileline.substr(0,12);
+           std::vector<std::string> splitLine;
+-          splitString(atomNames, "-", splitLine, 0);
+-          if (splitLine.size() == 4) {
+-            for (unsigned int i = 0; i < 4; i++) {
+-              splitLine[i] = stripString(splitLine[i]," ");
+-            }
++          splitString(atTypes, "-", splitLine, 0);
++
++/*for (unsigned int i = 0; i < splitLine.size(); i++) {
++  std::cout << splitLine[i] << std::endl;
++}*/
++
++          fileline.erase(0,12);
++
++          std::vector<std::string> splitLine2;
++          splitString(fileline, " ", splitLine2, 0);
++/*
++for (unsigned int i = 0; i < splitLine2.size(); i++) {
++  std::cout << splitLine2[i] << std::endl;
++}*/
++
++          //std::string atomNames = fileline.substr(0,11);
++          //std::vector<std::string> splitLine;
++          //splitString(atomNames, "-", splitLine, 0);
++
++          //if (splitLine.size() == 4) {
++            //for (unsigned int i = 0; i < 4; i++) {
++              //splitLine[i] = stripString(splitLine[i], " ");
++            //}
+             pTorsionParam = pParameters->addTorsionParam();
+             pTorsionParam->groupName = this->groupName;
+-            pTorsionParam->atomType1 = std::string(splitLine[0]);
+-            pTorsionParam->atomType2 = std::string(splitLine[1]);
+-            pTorsionParam->atomType3 = std::string(splitLine[2]);
+-            pTorsionParam->atomType4 = std::string(splitLine[3]);
+-            pTorsionParam->npth = atoi(fileline.substr(11,4).c_str());
+-            pTorsionParam->Vn = strtod(fileline.substr(18,8).c_str(), 0);
+-            pTorsionParam->gamma = strtod(fileline.substr(31,8).c_str(), 0) * DEG2RAD;
+-            pTorsionParam->Nt = strtod(fileline.substr(42,12).c_str(), 0);
++            pTorsionParam->atomType1 = stripString(splitLine[0], " ");
++            pTorsionParam->atomType2 = stripString(splitLine[1], " ");
++            pTorsionParam->atomType3 = stripString(splitLine[2], " ");
++            pTorsionParam->atomType4 = stripString(splitLine[3], " ");
++
++            pTorsionParam->npth = string2Int(splitLine2[0]);
++            pTorsionParam->Vn = string2Double(splitLine2[1]);
++            pTorsionParam->gamma = string2Double(splitLine2[2]) * DEG2RAD;
++            pTorsionParam->Nt = string2Double(splitLine2[3]);
++
++            //pTorsionParam->npth = atoi(fileline.substr(11,4).c_str());
++            //pTorsionParam->Vn = strtod(fileline.substr(18,8).c_str(), 0);
++            //pTorsionParam->gamma = strtod(fileline.substr(31,8).c_str(), 0) * DEG2RAD;
++            //pTorsionParam->Nt = strtod(fileline.substr(42,12).c_str(), 0);
++
++//std::cout << " DIHE " << pTorsionParam->atomType1 << " " << pTorsionParam->atomType2 << " " << pTorsionParam->atomType3 << " " << pTorsionParam->atomType4 << " " << pTorsionParam->npth << " " <<  pTorsionParam->Vn << " " << string2Double(splitLine2[2]) << " " << pTorsionParam->Nt << std::endl;
++ 
+             getline(ifrcmod,fileline);
+-          }
++//std::cout << " DIHE LINE: " << fileline << std::endl;
++          //}
+         }
+       }
+ 
+       if (bIMPROPER) {
+         getline(ifrcmod,fileline);
+-        while (fileline != "") {
+-          std::string atomNames = fileline.substr(0,11);
++        //while (fileline != "") {
++        while (stripString(fileline, " ") != "") {
++
++          std::string atTypes = fileline.substr(0,12);
+           std::vector<std::string> splitLine;
+-          splitString(atomNames, "-", splitLine, 0);
+-          if (splitLine.size() == 4) {
+-            for (unsigned int i = 0; i < 4; i++) {
+-              splitLine[i] = stripString(splitLine[i]," ");
+-            }
++          splitString(atTypes, "-", splitLine, 0);
++
++          fileline.erase(0,12);
++
++          std::vector<std::string> splitLine2;
++          splitString(fileline, " ", splitLine2, 0);
++
++//          std::vector<std::string> splitLine;
++//          splitString(fileline, "-", splitLine, 0);
++
++//          std::vector<std::string> splitLine2;
++//          splitString(splitLine[3], " ", splitLine2, 0);
++
++          //std::string atomNames = fileline.substr(0,11);
++          //std::vector<std::string> splitLine;
++          //splitString(atomNames, "-", splitLine, 0);
++          //if (splitLine.size() == 4) {
++            //for (unsigned int i = 0; i < 4; i++) {
++              //splitLine[i] = stripString(splitLine[i]," ");
++            //}
+             pImproperParam = pParameters->addImproperParam();
+             pImproperParam->groupName = this->groupName;
+-            pImproperParam->atomType1 = std::string(splitLine[0]);
+-            pImproperParam->atomType2 = std::string(splitLine[1]);
+-            pImproperParam->atomType3 = std::string(splitLine[2]);
+-            pImproperParam->atomType4 = std::string(splitLine[3]);
+-            pImproperParam->Vn = strtod(fileline.substr(18,8).c_str(), 0);
+-            pImproperParam->gamma = strtod(fileline.substr(31,8).c_str(), 0) * DEG2RAD;
+-            pImproperParam->Nt = strtod(fileline.substr(42,12).c_str(), 0);
++            pImproperParam->atomType1 = stripString(splitLine[0], " ");
++            pImproperParam->atomType2 = stripString(splitLine[1], " ");
++            pImproperParam->atomType3 = stripString(splitLine[2], " ");
++            pImproperParam->atomType4 = stripString(splitLine[3], " ");
++
++            pImproperParam->Vn = string2Double(splitLine2[0]);
++            pImproperParam->gamma = string2Double(splitLine2[1]) * DEG2RAD;
++            pImproperParam->Nt = string2Double(splitLine2[2]);
++
++            //pImproperParam->Vn = strtod(fileline.substr(18,8).c_str(), 0);
++            //pImproperParam->gamma = strtod(fileline.substr(31,8).c_str(), 0) * DEG2RAD;
++            //pImproperParam->Nt = strtod(fileline.substr(42,12).c_str(), 0);
++
++//std::cout << "\n " << fileline << std::endl;
++//std::cout << " IMPR " << pImproperParam->atomType1 << " " << pImproperParam->atomType2 << " " << pImproperParam->atomType3 << " " << pImproperParam->atomType4 << " " << pImproperParam->Vn << " " << string2Double(splitLine2[1]) << " " << pImproperParam->Nt << std::endl;
++
+             getline(ifrcmod,fileline);
+-          }
++          //}
+         }
+       }
+       if (bNONBON) {
++        getline(ifrcmod,fileline);
++//std::cout << fileline << std::endl;
++        //while (fileline != "") {
++        while (stripString(fileline, " ") != "") {
++          std::vector<std::string> splitLine;
++          splitString(fileline, " ", splitLine, 0);
++          if (splitLine.size() >= 3) {
++            for (unsigned int i = 0; i < 3; i++) {
++              splitLine[i] = stripString(splitLine[i], " ");
++            }
++//std::cout << " |" << splitLine[0] << "|" << std::endl;
++
++//std::cout << "\n " << fileline << std::endl;
++
++            pAtomType = pParameters->getAtomType(stripString(splitLine[0], " "));
++            if (pAtomType) {
++              pAtomType->rvalue = string2Double(splitLine[1]);
++              pAtomType->evalue = string2Double(splitLine[2]);
+ 
++//std::cout << pAtomType->name << " " << pAtomType->rvalue << " " << pAtomType->evalue << std::endl;
++
++      }
++            else {
++              std::cout << " Can't find atom type " << std::endl;
++    }
++            getline(ifrcmod,fileline);
++          }
++        }
+       }
+     }
++
+     ifrcmod.close();
+ }
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/gaussianParser.cpp amber11/AmberTools/src/mtkpp/src/Parsers/gaussianParser.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/gaussianParser.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/gaussianParser.cpp	2012-03-03 20:03:01.408032569 +0200
+@@ -84,7 +84,7 @@
+ 
+     this->bMem = 0;
+ 
+-    this->bnProc = 0;
++		this->bNProc = 0;
+ 
+     this->bWriteInternalCoords = true;
+     this->bWriteCartCoords = false;
+@@ -168,7 +168,7 @@
+     while (igau) {
+       getline(igau,fileline);
+ 
+-      if (containsSubStr(fileline, "modredundant")) {
++			if (containsSubStr(fileline, "ModRedundant")) {
+         bModRedundant = true;
+       }
+       if (fileline.substr(0,59) == " Redundant internal coordinates taken from checkpoint file:") {
+@@ -626,6 +626,7 @@
+ void gaussianParser::Write(const std::string &gaussfile, molecule* pMolecule,
+                            std::vector< vector3d > &coordinates)
+ {
++		std::string routecard;
+     std::ofstream ogauss;
+     ogauss.open(gaussfile.c_str());
+ 
+@@ -643,52 +644,64 @@
+        return;
+      }
+ 
+-    ogauss << "$rungauss" << std::endl;
++		ogauss << "$RunGauss" << std::endl;
+ 
+     if (bChkPt) {
+-      ogauss << "%chk=" << this->itsChkPtFile << std::endl;
++			ogauss << "%Chk=" << this->itsChkPtFile << std::endl;
+     }
+     if (bMem) {
+-      ogauss << "%mem=" << this->itsMem << std::endl;
++			ogauss << "%Mem=" << this->itsMem << std::endl;
+     }
+-    if (bnProc) {
+-      ogauss << "%nproc=" << this->itsnProc << std::endl;
++		if (bNProc) {
++			ogauss << "%NProcShared=" << this->itsNProc << std::endl;
+     }
+ 
+-    ogauss << "#" << this->itsVerbosity << " " << this->itsTheory << "/" << this->itsBasisSet << " ";
++		routecard = "#" + this->itsVerbosity + " " + this->itsTheory + "/" + this->itsBasisSet;
+ 
+     if (!itsCommandOptions.empty()) {
+       for (mapIterator p = itsCommandOptions.begin(); p != itsCommandOptions.end(); p++) {
+         std::string c =  p->first;
+         std::vector<std::string> o = p->second;
++				std::string opts = "";
+         if (o.size() == 1) {
+-          if ( p->second[0] == "NONE") {
+-            ogauss << p->first << " ";
+-          }
+-          else {
+-            ogauss << p->first << "=" << p->second[0] << " ";
++					if ( p->second[0] != "NONE") {
++						opts = "=" + p->second[0];
+           }
+         }
+         else {
+-          ogauss << p->first << "(";
++					opts = "(";
+           for (unsigned int i = 0; i < o.size(); i++) {
+-            if (i == o.size()-1) {
+-              ogauss << o[i];
++						opts = opts + o[i];
++						if (i != o.size()-1) {
++							opts = opts + ",";
+             }
+-            else {
+-              ogauss << o[i] << ",";
+             }
++					opts = opts + ")";
+           }
+-          ogauss << ")" << " ";
++				
++				if (routecard.length() + c.length() + opts.length() < 72) {
++					routecard = routecard + " " + c + opts;
++				} else {
++					if (routecard.length() != 0) {
++						ogauss << routecard << std::endl;
++					}
++					routecard = c + opts;
+         }
+       }
+     }
+     for (unsigned int i = 0; i < this->iops.size(); i++) {
+-      ogauss << this->iops[i] << " ";
++			if (routecard.length() + this->iops[i].length() < 72) {
++				routecard = routecard + " " + this->iops[i];
++			} else {
++				if (routecard.length() != 0) {
++					ogauss << routecard << std::endl;
++				}
++				routecard = this->iops[i];
++			}
+     }
+ 
+     // Flush command block and follow with a blank line
+-    ogauss << "\n" << std::endl;
++		ogauss << routecard << "\n" << std::endl;
+ 
+     // Write name (if required) and follow with a blank line
+     if (bWriteMoleculeName) {
+@@ -740,11 +753,11 @@
+       ogauss << std::endl;
+     }
+ 
+-    std::vector<std::string> optOptions = this->getCommandOption("opt");
++		std::vector<std::string> optOptions = this->getCommandOption("Opt");
+     if (optOptions.size() > 0) {
+       bool bMD = 0;
+       for (unsigned int x = 0; x < optOptions.size(); x++) {
+-        if (optOptions[x] == "modredundant") {
++				if (optOptions[x] == "ModRedundant") {
+           bMD = 1;
+         }
+       }
+@@ -766,13 +779,13 @@
+       }
+     }
+ 
+-    if (this->itsBasisSet.substr(0,3) == "GEN") {
++		if (this->itsBasisSet.substr(0,3) == "Gen") {
+       std::ifstream iBSFile;
+       iBSFile.open(this->itsBasisSetFile.c_str());
+ 
+       if (!iBSFile) {
+         std::cout << "\nERROR!"
+-                  << "\nBasis set \"GEN\" requires a custom file."
++				<< "\nBasis set \"Gen\" requires a custom file."
+                   << "\nFile \"" << this->itsBasisSetFile << "\" is missing or unreadable."
+                   << "\nPlease choose another file. For instructions, consult your program's"
+                   << "\ndocumentation."
+@@ -789,13 +802,13 @@
+     }
+ 
+     // +BPR
+-    if (this->getCommandOption("pseudo").size() > 0) {
++		if (this->getCommandOption("Pseudo").size() > 0) {
+       std::ifstream iPseudoFile;
+       iPseudoFile.open(this->itsPseudoPotentialFile.c_str());
+ 
+       if (!iPseudoFile) {
+         std::cout << "\nERROR!"
+-                  << "\npseudo=read or pseudo=cards requires a custom file."
++				<< "\nPseudo=Read or Pseudo=Cards requires a custom file."
+                   << "\nFile \"" << this->itsPseudoPotentialFile << "\" is missing or unreadable."
+                   << "\nPlease choose another file. For instructions, consult your program's"
+                   << "\ndocumentation."
+@@ -812,7 +825,7 @@
+     }
+     // -BPR
+ 
+-    if (this->getCommandOption("pop").size() > 0) {
++		if (this->getCommandOption("Pop").size() > 0) {
+       if (!itsMKRadii.empty()) {
+         for (dMapIterator p = itsMKRadii.begin(); p != itsMKRadii.end(); p++) {
+           ogauss << p->first << "=" << p->second << "\n";
+@@ -1037,14 +1050,14 @@
+ }
+ 
+ // ============================================================
+-// Function : setnProc
++	// Function : setNProc
+ // ------------------------------------------------------------
+ //
+ // ============================================================
+-void gaussianParser::setnProc(const std::string &n)
++	void gaussianParser::setNProc(const std::string &n)
+ {
+-    this->bnProc = 1;
+-    this->itsnProc = n;
++		this->bNProc = 1;
++		this->itsNProc = n;
+ }
+ 
+ // ============================================================
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/gaussianParser.h amber11/AmberTools/src/mtkpp/src/Parsers/gaussianParser.h
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/gaussianParser.h	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/gaussianParser.h	2012-03-03 20:03:01.408032569 +0200
+@@ -196,9 +196,9 @@
+ 
+     /*!
+        \brief Set number of processors to use
+-       \param n nprocs
++       \param n number of processors
+     */
+-    void           setnProc(const std::string &n);
++    void           setNProc(const std::string &n);
+ 
+     /*!
+        \brief Set level of theory
+@@ -354,10 +354,10 @@
+     bool           bMem;
+ 
+     //! number of processors
+-    std::string    itsnProc;
++    std::string    itsNProc;
+ 
+-    //! Turn on mem
+-    bool           bnProc;
++    //! Turn on number of processors
++    bool           bNProc;
+ 
+     //! Use internal or cartesian coordinates
+     bool           bWriteInternalCoords;
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/Makefile.am amber11/AmberTools/src/mtkpp/src/Parsers/Makefile.am
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/Makefile.am	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/Makefile.am	2012-03-03 20:03:01.406032569 +0200
+@@ -1,15 +1,15 @@
+-DIAGNOSTICS_LD=-L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD=-L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB=-lDiagnostics
+-MOLECULE_LD=-L$(top_builddir)/src/Molecule/$(SRCDIR)
++MOLECULE_LD=-L$(abs_top_builddir)/src/Molecule/$(SRCDIR)
+ MOLECULE_LIB=-lMolecule
+-GA_LD=-L$(top_builddir)/src/GA/$(SRCDIR)
++GA_LD=-L$(abs_top_builddir)/src/GA/$(SRCDIR)
+ GA_LIB=-lGA
+-LOG_LD=-L$(top_builddir)/src/Log/$(SRCDIR)
++LOG_LD=-L$(abs_top_builddir)/src/Log/$(SRCDIR)
+ LOG_LIB=-lLog
+-STATS_LD=-L$(top_builddir)/src/Statistics/$(SRCDIR)
++STATS_LD=-L$(abs_top_builddir)/src/Statistics/$(SRCDIR)
+ STATS_LIB=-lStatistics
+ 
+-TINYXML_LD=-L$(top_builddir)/src/tinyxml/$(SRCDIR)
++TINYXML_LD=-L$(abs_top_builddir)/src/tinyxml/$(SRCDIR)
+ TINYXML_LIB=-ltinyxml
+ 
+ if USE_XERCES
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/Makefile.in amber11/AmberTools/src/mtkpp/src/Parsers/Makefile.in
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/Makefile.in	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/Makefile.in	2012-03-03 20:03:01.407032569 +0200
+@@ -267,17 +267,17 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ xerces_path = @xerces_path@
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB = -lDiagnostics
+-MOLECULE_LD = -L$(top_builddir)/src/Molecule/$(SRCDIR)
++MOLECULE_LD = -L$(abs_top_builddir)/src/Molecule/$(SRCDIR)
+ MOLECULE_LIB = -lMolecule
+-GA_LD = -L$(top_builddir)/src/GA/$(SRCDIR)
++GA_LD = -L$(abs_top_builddir)/src/GA/$(SRCDIR)
+ GA_LIB = -lGA
+-LOG_LD = -L$(top_builddir)/src/Log/$(SRCDIR)
++LOG_LD = -L$(abs_top_builddir)/src/Log/$(SRCDIR)
+ LOG_LIB = -lLog
+-STATS_LD = -L$(top_builddir)/src/Statistics/$(SRCDIR)
++STATS_LD = -L$(abs_top_builddir)/src/Statistics/$(SRCDIR)
+ STATS_LIB = -lStatistics
+-TINYXML_LD = -L$(top_builddir)/src/tinyxml/$(SRCDIR)
++TINYXML_LD = -L$(abs_top_builddir)/src/tinyxml/$(SRCDIR)
+ TINYXML_LIB = -ltinyxml
+ @USE_XERCES_TRUE@XERCES_LD = -L@xerces_path@/lib/
+ @USE_XERCES_TRUE@XERCES_LIB = -lxerces-c
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/mtkppParser.cpp amber11/AmberTools/src/mtkpp/src/Parsers/mtkppParser.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/mtkppParser.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/mtkppParser.cpp	2012-03-03 20:03:01.409032568 +0200
+@@ -1769,6 +1769,15 @@
+     atomElem->SetAttribute("type", int2String(pAtom->getType()));
+     atomElem->SetAttribute("formalCharge", int2String(pAtom->getFormalCharge()));
+ 
++    // Coordinates
++    TiXmlElement* coordElem = new TiXmlElement("coord");
++    atomElem->LinkEndChild(coordElem);
++
++    coordElem->SetAttribute("x", double2String(pAtom->getX()));
++    coordElem->SetAttribute("y", double2String(pAtom->getY()));
++    coordElem->SetAttribute("z", double2String(pAtom->getZ()));
++
++    // Properties
+     std::map<std::string, double> atomDMap = pAtom->getPropertyMap();
+     std::map<std::string, int> atomIMap = pAtom->getIntPropertyMap();
+ 
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/paramParser.cpp amber11/AmberTools/src/mtkpp/src/Parsers/paramParser.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/paramParser.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/paramParser.cpp	2012-03-03 20:03:01.410032567 +0200
+@@ -144,6 +144,10 @@
+             pAtomType->evalue = string2Double(element->Attribute("potentialWellDepth"));
+           }
+ 
++          if (element->Attribute("atomPolarizability")) {
++            pAtomType->atomPolarizability = string2Double(element->Attribute("atomPolarizability"));
++          }
++
+           if (element->Attribute("element")) {
+             pAtomType->element = element->Attribute("element");
+           }
+@@ -1808,6 +1812,7 @@
+         entry->SetAttribute("mass"          , double2String(pAtomType->mass).c_str());
+         entry->SetAttribute("vdwRadius"     , double2String(pAtomType->rvalue).c_str());
+         entry->SetAttribute("potentialWellDepth" , double2String(pAtomType->evalue).c_str());
++        entry->SetAttribute("atomPolarizability" , double2String(pAtomType->atomPolarizability).c_str());
+         entry->SetAttribute("element"       , pAtomType->element);
+         entry->SetAttribute("hybridization" , pAtomType->hybridization);
+         entry->SetAttribute("groupName"     , pAtomType->groupName);
+@@ -2035,6 +2040,7 @@
+               typeElem->setAttribute(X("mass"), X(double2String(pAtomType->mass).c_str()));
+               typeElem->setAttribute(X("vdwRadius"), X(double2String(pAtomType->rvalue).c_str()));
+               typeElem->setAttribute(X("potentialWellDepth"), X(double2String(pAtomType->evalue).c_str()));
++              typeElem->setAttribute(X("atomPolarizability"), X(double2String(pAtomType->atomPolarizability).c_str()));
+               typeElem->setAttribute(X("element"), X(pAtomType->element.c_str()));
+               typeElem->setAttribute(X("hybridization"), X(pAtomType->hybridization.c_str()));
+               typeElem->setAttribute(X("groupName"), X(pAtomType->groupName.c_str()));
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/pdbParser.cpp amber11/AmberTools/src/mtkpp/src/Parsers/pdbParser.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/pdbParser.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/pdbParser.cpp	2012-03-03 20:03:01.410032567 +0200
+@@ -840,6 +840,7 @@
+     for (atomIterator a = atomList.begin(); a != atomList.end(); a++) {
+       pAtom = *a;
+       pSubMolecule = pAtom->getParent();
++      //std::cout << pSubMolecule->getColIndex() << std::endl;
+       char temp[100];
+ 
+       char tmp_element[3];
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/prepParser.cpp amber11/AmberTools/src/mtkpp/src/Parsers/prepParser.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/prepParser.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/prepParser.cpp	2012-03-03 20:03:01.411032567 +0200
+@@ -66,71 +66,106 @@
+ prepParser::~prepParser() {}
+ 
+ // =========================================================
+-// Function : Read
+-// ---------------------------------------------------------
+-// parsers a prep file
+-// ---------------------------------------------------------
+-// Format :
+-// =========================================================
+-void prepParser::Read(const std::string &prepfile, stdGroup* pStdGroup)
+-{
+-    std::string errorMessage = " Reading " + prepfile + " " +
+-                               pStdGroup->getName() + " ... implement ";
+-    errorLogger.throwError("prepParser", errorMessage, 1);
+-}
+-
+-// =========================================================
+-// Function : Read
++// Function : openFile
+ // ---------------------------------------------------------
+-// parsers a prep file
++// open a prep file
+ // ---------------------------------------------------------
+ // Format :
+ // =========================================================
+-void prepParser::Read(const std::string &prepfile, stdFrag* pStdFrag)
++int prepParser::openFile(const std::string &prepfile)
+ {
+-    errorLogger.throwError("prepParser", "Read", INFO);
+-
+-    std::ifstream iprep;
+     iprep.open(prepfile.c_str());
+ 
++    //std::cout << "\n\n  prepParser::openFile " << prepfile << std::endl;
+     if (!iprep) {
+       setError(1);
+       std::string errorMessage = "  Error, Can't Find " + prepfile;
+       setErrorMessage(errorMessage);
+       errorLogger.throwError("prepParser::Read", errorMessage, 1);
+-      return;
++      return 1;
+     }
+ 
+     std::string fileline;
+-    std::string title;
+-    std::string atom;
+-    std::string buffer(80,'*');
+ 
+     // SKIP FIRST TWO LINES
+     getline(iprep,fileline);
+     getline(iprep,fileline);
++
++    return 0;
++}
++
++// =========================================================
++// Function : read fragment header section
++// ---------------------------------------------------------
++// 
++// ---------------------------------------------------------
++// Format :
++// =========================================================
++int prepParser::readHeader(std::string &name, std::string &symbol, double &charge)
++{
++    std::string fileline;
++
+     getline(iprep,fileline);
+-    //std::string name = stripString(fileline," ");
+-    //pStdFrag->setName(fileline);
++    if (stripString(fileline, " ") == "STOP") return 1;
++
++    name = stripString(fileline," ");
++
++    // blank line
+     getline(iprep,fileline);
++
++    // symbol
+     getline(iprep,fileline);
+     std::vector<std::string> splitLine;
+     splitString(fileline, " ", splitLine, 0);
+-    pStdFrag->setSymbol(splitLine[0]);
++    symbol = splitLine[0];
++
++    // 
+     getline(iprep,fileline);
++
++    // charge
+     getline(iprep,fileline);
+-    //pStdFrag->setCharge(splitLine[0]);
++    charge = string2Double(stripString(fileline, " "));
++
++    return 0;
++}
++
++// =========================================================
++// Function : read fragment main section
++// ---------------------------------------------------------
++// 
++// ---------------------------------------------------------
++// Format :
++// =========================================================
++void prepParser::readFragment(stdFrag* pStdFrag)
++{
++    std::string fileline;
++
++    std::vector<stdBond*> todos;
+ 
+     while (iprep) {
+       getline(iprep,fileline);
+-      if (fileline == "") break;
++
++      std::string filelineTest = stripString(fileline, " ");
++      if (filelineTest == "") break;
++
++//std::cout << "|" << fileline << "|" << std::endl;
+ 
+       std::vector<std::string> splitstring;
+       splitString(fileline, " ", splitstring, 0);
+       if (atoi(splitstring[0].c_str()) > 3) {
+         stdAtom* pStdAtom = pStdFrag->addStdAtom();
+         int atIndex = atoi(splitstring[0].c_str()) - 3;
+-        std::string atomName = fileline.substr(6,4);
++
++////////
++        //std::string atomName = fileline.substr(6,4);
++        std::string atomName = splitstring[1];
++        if (atomName.size() == 1) atomName = " " + atomName + "  ";
++        else if (atomName.size() == 2) atomName = " " + atomName + " ";
++        else if (atomName.size() == 3) atomName = " " + atomName;
++
++//std::cout << "|" << atomName << "|" << std::endl;
++/////////
++
+         std::string atomType = splitstring[2];
+         std::string atomChain = splitstring[3];
+ 
+@@ -170,32 +205,54 @@
+         pStdBond->atom1 = pStdAtom->index;
+         pStdBond->atom2 = pStdAtom->bond12;
+         pStdBond->type = 1;
++
+         if (pStdAtom->atSymbol == "H") {
+           if (pStdAtom->bond12 > 0) {
+             stdAtom* pStdBondedAtom = pStdFrag->getStdAtom(pStdAtom->bond12);
++
++            if (pStdBondedAtom) {
+             std::string bondedAtomSymbol = pStdBondedAtom->atSymbol;
+             if (bondedAtomSymbol == "N" or bondedAtomSymbol == "O" or bondedAtomSymbol == "S") {
+               pStdBond->kind = 1;
+             }
+           }
++            else {
++              todos.push_back(pStdBond);
++            }
++          }
+         }
+         else {
+           pStdBond->kind = 0;
+         }
++
+         pStdBond->topology = 2;
+         pStdBond->stereo = 0;
+         pStdBond->length = pStdAtom->bondLength;
+       }
+     }
+ 
++    for (unsigned int x = 0; x < todos.size(); x++) {
++      stdAtom* pStdBondedAtom1 = pStdFrag->getStdAtom(todos[x]->atom1);
++      stdAtom* pStdBondedAtom2 = pStdFrag->getStdAtom(todos[x]->atom2);
++      if (pStdBondedAtom1 and pStdBondedAtom2) {
++        std::string bondedAtomSymbol = pStdBondedAtom2->atSymbol;
++        if (bondedAtomSymbol == "N" or bondedAtomSymbol == "O" or bondedAtomSymbol == "S") {
++          todos[x]->kind = 1;
++        }
++      }
++    }
++
+     // Read charge, alias, loop, and improper data
+     while (iprep) {
+       getline(iprep,fileline);
++//std::cout << "!" << fileline << "!" << std::endl;
+       if (fileline != "") {
+         if (fileline.substr(0,6) == "CHARGE") {
+           while (iprep) {
+             getline(iprep,fileline);
+-            if (fileline == "") break;
++
++            std::string filelineTest = stripString(fileline, " ");
++            if (filelineTest == "") break;
+           }
+         }
+         else if (fileline.substr(0,5) == "ALIAS")  {
+@@ -252,7 +309,7 @@
+             else {
+               std::string errorMessage = "  ALIAS Tag Error ... exiting ";
+               errorLogger.throwError("prepParser::Read", errorMessage, 1);
+-              //exit(0);
++
+               std::stringstream ss;
+               ss << "prepParser::Read"<< errorMessage;
+               throw MTKException(ss.str());
+@@ -263,11 +320,20 @@
+         else if (fileline.substr(0,4) == "LOOP")  {
+           while (iprep) {
+             getline(iprep,fileline);
+-            if (fileline == "") break;
++
++            std::string filelineTest = stripString(fileline, " ");
++            if (filelineTest == "") break;
++
++            //if (fileline == "") break;
+ 
+             std::vector<std::string> atomNames;
+             splitString(fileline, " ", atomNames, 0);
+-
++/*
++for (unsigned int x = 0; x <atomNames.size();x++){
++  std::cout << atomNames[x] <<std::endl;
++}
++pStdFrag->print();
++*/
+             std::vector< std::vector<std::string> > possibleNames;
+             for (int d = 0; d < 2; d++) {
+               int atNameSize = atomNames[d].size();
+@@ -315,17 +381,22 @@
+             else {
+               std::string errorMessage = "  LOOP Tag Error ... exiting ";
+               errorLogger.throwError("prepParser::Read", errorMessage, 1);
+-              //exit(0);
+-
+               std::stringstream ss;
+               ss << "prepParser::Read"<< errorMessage;
+               throw MTKException(ss.str());
+             }
+           }
+         }
++        else if (fileline.substr(0,4) == "DONE")  {
++          break;
++        }
+         else if (fileline.substr(0,8) == "IMPROPER")  {
+           while (iprep) {
+             getline(iprep,fileline);
++
++            std::string filelineTest = stripString(fileline, " ");
++            if (filelineTest == "") break;
++
+             if (fileline == "") break;
+ 
+             std::vector<std::string> atomNames;
+@@ -424,7 +495,6 @@
+               else {
+                 std::string errorMessage = "  IMPROPER Tag Error ... exiting ";
+                 errorLogger.throwError("prepParser::Read", errorMessage, 1);
+-                //exit(0);
+ 
+                 std::stringstream ss;
+                 ss << "prepParser::Read" << errorMessage;
+@@ -642,8 +712,112 @@
+       }
+ // QBio end
+     }
+-
+     errorLogger.throwError("prepParser::Read", eMessage, INFO);
++}
++
++// =========================================================
++// Function : Read
++// ---------------------------------------------------------
++// parsers a prep file
++// ---------------------------------------------------------
++// Format :
++// =========================================================
++void prepParser::Read(const std::string &prepfile, stdGroup* pStdGroup)
++{
++    int r = openFile(prepfile);
++    if (r == 1) return;
++
++    while(iprep) {
++      std::string name = "";
++      std::string symbol = "";
++      double charge = 0.0;
++      int h = readHeader(name, symbol, charge);
++      if (h == 1) break;
++
++      stdFrag* pStdFrag = pStdGroup->addStdFrag();
++      if (!pStdFrag) {
++        setError(1);
++        std::string errorMessage = "  Error creating fragment ";
++        setErrorMessage(errorMessage);
++        errorLogger.throwError("prepParser::Read", errorMessage, 1);
++        return;
++      }
++
++      if (symbol.size() == 1) symbol = symbol + "  ";
++      if (symbol.size() == 2) symbol = symbol + " ";
++      if (symbol.size() > 3) symbol = symbol.substr(1,3);
++
++      pStdFrag->setSymbol(symbol);       // 3L code
++      //pStdFrag->setCode("P2XML"+name); // 8L code
++      pStdFrag->setName(name);           // long name
++      pStdFrag->setType("m");            // fragment type
++
++      //std::cout << " prepParser::Read " << name << "  charge " << charge << " symbol " << symbol << std::endl;
++      readFragment(pStdFrag);
++    }
++
++    iprep.close();
++
++    return;
++}
++
++// =========================================================
++// Function : Read
++// ---------------------------------------------------------
++// parsers a prep file
++// ---------------------------------------------------------
++// Format :
++// =========================================================
++void prepParser::Read(const std::string &prepfile, stdFrag* pStdFrag)
++{
++    errorLogger.throwError("prepParser", "Read", INFO);
++/*
++    std::ifstream iprep;
++    iprep.open(prepfile.c_str());
++
++    if (!iprep) {
++      setError(1);
++      std::string errorMessage = "  Error, Can't Find " + prepfile;
++      setErrorMessage(errorMessage);
++      errorLogger.throwError("prepParser::Read", errorMessage, 1);
++      return;
++    }
++*/
++
++    int r = openFile(prepfile);
++    if (r == 1) return;
++
++    std::string fileline;
++    std::string title;
++    std::string atom;
++    //std::string buffer(80,'*');
++
++    // SKIP FIRST TWO LINES
++    //getline(iprep,fileline);
++    //getline(iprep,fileline);
++
++/*
++    getline(iprep,fileline);
++    //std::string name = stripString(fileline," ");
++    //pStdFrag->setName(fileline);
++    getline(iprep,fileline);
++    getline(iprep,fileline);
++    std::vector<std::string> splitLine;
++    splitString(fileline, " ", splitLine, 0);
++    pStdFrag->setSymbol(splitLine[0]);
++    getline(iprep,fileline);
++    getline(iprep,fileline);
++    //pStdFrag->setCharge(splitLine[0]);
++*/
++
++    std::string name = "";
++    std::string symbol = "";
++    double charge = 0.0;
++    readHeader(name, symbol, charge);
++
++    pStdFrag->setSymbol(symbol);
++
++    readFragment(pStdFrag);
+ 
+     iprep.close();
+ }
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/prepParser.h amber11/AmberTools/src/mtkpp/src/Parsers/prepParser.h
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/prepParser.h	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/prepParser.h	2012-03-03 20:03:01.411032567 +0200
+@@ -89,6 +89,25 @@
+     ~prepParser();
+ 
+     /*!
++       \brief open prep file
++       \param i input file
++    */
++    int            openFile(const std::string &i);
++
++    /*!
++       \brief read fragment header section
++       \param name fragment name
++       \param symbol fragment symbol
++       \param charge fragment charge
++    */
++    int           readHeader(std::string &name, std::string &symbol, double &charge);
++
++    /*!
++       \brief read fragment main section
++    */
++    void           readFragment(stdFrag* pStdFrag);
++
++    /*!
+        \brief Read prep file
+        \param i input file
+        \param g stdGroup pointer
+@@ -127,6 +146,9 @@
+ 
+     //! atom pointer
+     atom*          pAtom;
++
++    //! file handler
++    std::ifstream iprep;
+ };
+ 
+ } // MTKpp namespace
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Parsers/stdLibParser.cpp amber11/AmberTools/src/mtkpp/src/Parsers/stdLibParser.cpp
+--- amber11.orig/AmberTools/src/mtkpp/src/Parsers/stdLibParser.cpp	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Parsers/stdLibParser.cpp	2012-03-03 20:03:01.412032567 +0200
+@@ -3280,7 +3280,7 @@
+ // ------------------------------------------------------------
+ // Write xml files using tinyxml
+ // ------------------------------------------------------------
+-void stdLibParser::Write(std::string fileName)
++void stdLibParser::Write(std::string fileName) // TinyXML
+ {
+     std::string errMessage = " Writing " + fileName;
+     errorLogger.throwError("stdLibParser", errMessage, INFO);
+@@ -3512,6 +3512,7 @@
+       TiXmlElement* impElem = new TiXmlElement("improper");
+       frag->LinkEndChild(impElem);
+ 
++      /*
+       if (improperList[k]->atom1 == -1) {
+         impElem->SetAttribute("Atom1", "p1");
+       }
+@@ -3520,7 +3521,8 @@
+       }
+       else {
+         impElem->SetAttribute("Atom1", int2String(improperList[k]->atom1));
+-      }
++      }*/
++      impElem->SetAttribute("Atom1", int2String(improperList[k]->atom1));
+       impElem->SetAttribute("Atom2", int2String(improperList[k]->atom2));
+       impElem->SetAttribute("Atom3", int2String(improperList[k]->atom3));
+       impElem->SetAttribute("Atom4", int2String(improperList[k]->atom4));
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Statistics/Makefile.am amber11/AmberTools/src/mtkpp/src/Statistics/Makefile.am
+--- amber11.orig/AmberTools/src/mtkpp/src/Statistics/Makefile.am	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Statistics/Makefile.am	2012-03-03 20:03:01.413032567 +0200
+@@ -1,4 +1,4 @@
+-DIAGNOSTICS_LD=-L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD=-L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB=-lDiagnostics
+ 
+ INCLUDES = -I@boost_inc@  -I$(srcdir)/.. -I$(top_srcdir)/src/eigen3b2
+diff -urN amber11.orig/AmberTools/src/mtkpp/src/Statistics/Makefile.in amber11/AmberTools/src/mtkpp/src/Statistics/Makefile.in
+--- amber11.orig/AmberTools/src/mtkpp/src/Statistics/Makefile.in	2011-04-14 15:30:18.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/src/Statistics/Makefile.in	2012-03-03 20:03:01.413032567 +0200
+@@ -241,7 +241,7 @@
+ top_builddir = @top_builddir@
+ top_srcdir = @top_srcdir@
+ xerces_path = @xerces_path@
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics/$(SRCDIR)
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics/$(SRCDIR)
+ DIAGNOSTICS_LIB = -lDiagnostics
+ INCLUDES = -I@boost_inc@  -I$(srcdir)/.. -I$(top_srcdir)/src/eigen3b2
+ lib_LTLIBRARIES = libStatistics.la
+diff -urN amber11.orig/AmberTools/src/mtkpp/tests/Makefile.am amber11/AmberTools/src/mtkpp/tests/Makefile.am
+--- amber11.orig/AmberTools/src/mtkpp/tests/Makefile.am	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/tests/Makefile.am	2012-03-03 20:03:01.414032567 +0200
+@@ -42,25 +42,25 @@
+   LAPACK_LIB=-llapack -lblas -lg2c
+ endif
+ 
+-MOLECULE_LD=-L$(top_builddir)/src/Molecule
++MOLECULE_LD=-L$(abs_top_builddir)/src/Molecule
+ MOLECULE_LIB=-lMolecule
+-DIAGNOSTICS_LD=-L$(top_builddir)/src/Diagnostics
++DIAGNOSTICS_LD=-L$(abs_top_builddir)/src/Diagnostics
+ DIAGNOSTICS_LIB=-lDiagnostics
+-LOG_LD=-L$(top_builddir)/src/Log
++LOG_LD=-L$(abs_top_builddir)/src/Log
+ LOG_LIB=-lLog
+-GRAPH_LD=-L$(top_builddir)/src/Graph
++GRAPH_LD=-L$(abs_top_builddir)/src/Graph
+ GRAPH_LIB=-lGraph
+-GA_LD=-L$(top_builddir)/src/GA
++GA_LD=-L$(abs_top_builddir)/src/GA
+ GA_LIB=-lGA
+-MM_LD=-L$(top_builddir)/src/MM
++MM_LD=-L$(abs_top_builddir)/src/MM
+ MM_LIB=-lMM
+-MINIMIZERS_LD=-L$(top_builddir)/src/Minimizers
++MINIMIZERS_LD=-L$(abs_top_builddir)/src/Minimizers
+ MINIMIZERS_LIB=-lMinimizers
+-PARSERS_LD=-L$(top_builddir)/src/Parsers
++PARSERS_LD=-L$(abs_top_builddir)/src/Parsers
+ PARSERS_LIB=-lParsers
+-STATS_LD=-L$(top_builddir)/src/Statistics
++STATS_LD=-L$(abs_top_builddir)/src/Statistics
+ STATS_LIB=-lStatistics
+-TINYXML_LD=-L$(top_builddir)/src/tinyxml
++TINYXML_LD=-L$(abs_top_builddir)/src/tinyxml
+ TINYXML_LIB=-ltinyxml
+ 
+ # INCLUDES = -I@boost_inc@ -I@xerces_path@/include  -I$(top_srcdir)/src -I$(top_srcdir)/include -I$(top_srcdir)/src/tinyxml -I$(top_srcdir)/src/Parsers -I$(top_srcdir)/src/Molecule -I$(top_srcdir)/src/Statistics -I$(top_srcdir)/src/Utils $(tmpQT_INCPATH)
+diff -urN amber11.orig/AmberTools/src/mtkpp/tests/Makefile.in amber11/AmberTools/src/mtkpp/tests/Makefile.in
+--- amber11.orig/AmberTools/src/mtkpp/tests/Makefile.in	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/tests/Makefile.in	2012-03-03 20:03:01.414032567 +0200
+@@ -303,25 +303,25 @@
+ @USE_QT_TRUE@tmpQT_LIBS = $(QT_LIBS)
+ @IS_LINUX_TRUE@LAPACK_LD = -L/usr/lib64
+ @IS_LINUX_TRUE@LAPACK_LIB = -llapack -lblas -lg2c
+-MOLECULE_LD = -L$(top_builddir)/src/Molecule
++MOLECULE_LD = -L$(abs_top_builddir)/src/Molecule
+ MOLECULE_LIB = -lMolecule
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics
+ DIAGNOSTICS_LIB = -lDiagnostics
+-LOG_LD = -L$(top_builddir)/src/Log
++LOG_LD = -L$(abs_top_builddir)/src/Log
+ LOG_LIB = -lLog
+-GRAPH_LD = -L$(top_builddir)/src/Graph
++GRAPH_LD = -L$(abs_top_builddir)/src/Graph
+ GRAPH_LIB = -lGraph
+-GA_LD = -L$(top_builddir)/src/GA
++GA_LD = -L$(abs_top_builddir)/src/GA
+ GA_LIB = -lGA
+-MM_LD = -L$(top_builddir)/src/MM
++MM_LD = -L$(abs_top_builddir)/src/MM
+ MM_LIB = -lMM
+-MINIMIZERS_LD = -L$(top_builddir)/src/Minimizers
++MINIMIZERS_LD = -L$(abs_top_builddir)/src/Minimizers
+ MINIMIZERS_LIB = -lMinimizers
+-PARSERS_LD = -L$(top_builddir)/src/Parsers
++PARSERS_LD = -L$(abs_top_builddir)/src/Parsers
+ PARSERS_LIB = -lParsers
+-STATS_LD = -L$(top_builddir)/src/Statistics
++STATS_LD = -L$(abs_top_builddir)/src/Statistics
+ STATS_LIB = -lStatistics
+-TINYXML_LD = -L$(top_builddir)/src/tinyxml
++TINYXML_LD = -L$(abs_top_builddir)/src/tinyxml
+ TINYXML_LIB = -ltinyxml
+ 
+ # INCLUDES = -I@boost_inc@ -I@xerces_path@/include  -I$(top_srcdir)/src -I$(top_srcdir)/include -I$(top_srcdir)/src/tinyxml -I$(top_srcdir)/src/Parsers -I$(top_srcdir)/src/Molecule -I$(top_srcdir)/src/Statistics -I$(top_srcdir)/src/Utils $(tmpQT_INCPATH)
+diff -urN amber11.orig/AmberTools/src/mtkpp/tools/Makefile.am amber11/AmberTools/src/mtkpp/tools/Makefile.am
+--- amber11.orig/AmberTools/src/mtkpp/tools/Makefile.am	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/tools/Makefile.am	2012-03-03 20:03:01.417032565 +0200
+@@ -25,7 +25,7 @@
+   tmpQT_LIBS = $(QT_LIBS)
+ endif
+ 
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics
+ DIAGNOSTICS_LIB = -lDiagnostics
+ MOLECULE_LD = -L$(top_builddir)/src/Molecule
+ MOLECULE_LIB = -lMolecule
+diff -urN amber11.orig/AmberTools/src/mtkpp/tools/Makefile.in amber11/AmberTools/src/mtkpp/tools/Makefile.in
+--- amber11.orig/AmberTools/src/mtkpp/tools/Makefile.in	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/tools/Makefile.in	2012-03-03 20:03:01.417032565 +0200
+@@ -392,7 +392,7 @@
+ @USE_XERCES_TRUE@XERCES_LIB = -lxerces-c
+ @USE_QT_TRUE@tmpQT_INCPATH = $(QT_INCPATH)
+ @USE_QT_TRUE@tmpQT_LIBS = $(QT_LIBS)
+-DIAGNOSTICS_LD = -L$(top_builddir)/src/Diagnostics
++DIAGNOSTICS_LD = -L$(abs_top_builddir)/src/Diagnostics
+ DIAGNOSTICS_LIB = -lDiagnostics
+ MOLECULE_LD = -L$(top_builddir)/src/Molecule
+ MOLECULE_LIB = -lMolecule
+diff -urN amber11.orig/AmberTools/src/mtkpp/tools/MCPB.cpp amber11/AmberTools/src/mtkpp/tools/MCPB.cpp
+--- amber11.orig/AmberTools/src/mtkpp/tools/MCPB.cpp	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/tools/MCPB.cpp	2012-03-03 20:03:01.416032566 +0200
+@@ -67,6 +67,7 @@
+ #include "Parsers/mtkppParser.h"
+ #include "Parsers/dMParser.h"
+ #include "Parsers/commLineOptions.h"
++#include "Parsers/StringManip.h"
+ 
+ // - Log
+ #include "Log/errorHandler.h"
+@@ -84,6 +85,12 @@
+ 
+ using namespace MTKpp;
+ 
++std::string getEnvVar(std::string const& key)
++{
++    char const* val = getenv(key.c_str()); 
++    return val == NULL ? std::string() : std::string(val);
++}
++
+ void printFunctionList()
+ {
+     std::string functionList = "\n MCPB Functions:\n";
+@@ -181,32 +188,32 @@
+     functionList += "      Find all metal centers in the collection\n";
+     functionList += "      syntax: findMetalCenters\n";
+     functionList += "\n";
+-    functionList += "      g03Charges\n";
++	functionList += "      gaussianCharges\n";
+     functionList += "      Generate a Gaussian input file for partial-charge computation\n";
+     functionList += "      Optional: set the Gaussian job file name\n";
+-    functionList += "      syntax: g03Charges //cuCYM4 cuCYM4.com\n";
++	functionList += "      syntax: gaussianCharges //cuCYM4 cuCYM4.com\n";
+     functionList += "\n";
+-    functionList += "      g03Mem\n";
+-    functionList += "      Set amount of memory requested for g03\n";
+-    functionList += "      syntax: g03Mem 3600MB\n";
++	functionList += "      gaussianMem\n";
++	functionList += "      Set amount of memory requested for Gaussian\n";
++	functionList += "      syntax: gaussianMem 3600MB\n";
+     functionList += "\n";
+-    functionList += "      g03MoldenFormat\n";
++	functionList += "      gaussianMoldenFormat\n";
+     functionList += "      Request Gaussian log files formatted for viewing in Molden\n";
+-    functionList += "      (adds the GFINPUT and IOP(6/7=3) keywords)\n";
+-    functionList += "      syntax: g03MoldenFormat\n";
++	functionList += "      (adds the GFInput and IOp(6/7=3) keywords)\n";
++	functionList += "      syntax: gaussianMoldenFormat\n";
+     functionList += "\n";
+-    functionList += "      g03nProc\n";
+-    functionList += "      Set number of processors requested for g03\n";
+-    functionList += "      syntax: g03nProc 2\n";
++	functionList += "      gaussianNProc\n";
++	functionList += "      Set number of processors requested for Gaussian\n";
++	functionList += "      syntax: gaussianNProc 2\n";
+     functionList += "\n";
+-    functionList += "      g03OptAndFC\n";
++	functionList += "      gaussianOptAndFC\n";
+     functionList += "      Generate Gaussian input files for optimisation and force constants\n";
+     functionList += "      Optional: set the Gaussian job file name\n";
+-    functionList += "      syntax: g03OptAndFC //cuCYM4 cuCYM4.com\n";
++	functionList += "      syntax: gaussianOptAndFC //cuCYM4 cuCYM4.com\n";
+     functionList += "\n";
+-    functionList += "      g03Verbosity\n";
++	functionList += "      gaussianVerbosity\n";
+     functionList += "      Set the verbosity of Gaussian output ([T]erse, [N]ormal, [P]rolix)\n";
+-    functionList += "      syntax: g03Verbosity [T|N|P]\n";
++	functionList += "      syntax: gaussianVerbosity [T|N|P]\n";
+     functionList += "\n";
+     functionList += "      levelOfTheory\n";
+     functionList += "      Set Gaussian Theory Level\n";
+@@ -256,9 +263,9 @@
+     functionList += "      Read Formatted Checkpoint file\n";
+     functionList += "      syntax: readFormattedChkPtFile file.fchk\n";
+     functionList += "\n";
+-    functionList += "      readG03Output\n";
+-    functionList += "      Read G03 Output\n";
+-    functionList += "      syntax: readG03Output cuCYM4.log\n";
++	functionList += "      readGaussianOutput\n";
++	functionList += "      Read Gaussian Output\n";
++	functionList += "      syntax: readGaussianOutput cuCYM4.log\n";
+     functionList += "\n";
+     functionList += "      readMolZmatMapping\n";
+     functionList += "      Read Molecule <--> Z-Matrix mapping file\n";
+@@ -470,7 +477,7 @@
+     else {
+       printHeader(std::cout, prog_name, authors);
+       clo->printUsage();
+-      std::cout << " Please provide a MCPB file " << std::endl;
++		std::cout << " Please provide an MCPB file " << std::endl;
+       return 0;
+     }
+ 
+@@ -515,7 +522,9 @@
+     std::string errorMessage = "";
+ 
+     std::vector<std::vector<std::string> > inputFileContents;
++
+     int failure = readInputFile(inputFile, inputFileContents);
++
+     if (failure) {
+       printHeader(std::cout, prog_name, authors);
+       clo->printUsage();
+@@ -660,7 +669,7 @@
+               std::vector<std::vector<std::string> > sourceInputFileContents;
+               failure = readInputFile(cur[1], sourceInputFileContents);
+               if (failure) {
+-                errorMessage =  " Error Reading File " + cur[1];
++							errorMessage =  " Error reading file " + cur[1];
+                 MTKpp::errorLogger.throwError("MCPB::source", errorMessage, 1);
+                 exit(1);
+               }
+@@ -668,7 +677,7 @@
+                                             sourceInputFileContents.end());
+             }
+             else {
+-              errorMessage =  " Error Reading File " + cur[1];
++						errorMessage =  " Error reading file " + cur[1];
+               MTKpp::errorLogger.throwError("MCPB::source", errorMessage, 1);
+               exit(1);
+             }
+@@ -742,6 +751,20 @@
+            \endcode
+         */
+         if ((inputFileContents[i].size() == 3)) {
++                //std::cout << "SET COMMAND " << inputFileContents[i][2] << std::endl;
++                if (inputFileContents[i][2].compare(0,1,"$") == 0) {   
++                  std::string envVariable = "";
++                  std::string tVar = inputFileContents[i][2];
++                  envVariable = getEnvVar(tVar.substr(1,tVar.size()-1));
++                  if (envVariable == "") {
++                      std::cout << " Environment variable " << tVar.substr(1,tVar.size()-1)
++                                << " is unset " << std::endl;
++                    exit(1);
++                  }
++                  //std::cout << "Environment variable = " << envVariable << std::endl;
++                  inputFileContents[i][2] = envVariable;
++			    }
++
+           variableMap[inputFileContents[i][1]] = inputFileContents[i][2];
+           for (unsigned int j = i+1; j < inputFileContents.size(); j++) {
+             bool bReplaced = false;
+@@ -813,6 +836,115 @@
+         }
+       }
+ 
++		else if (inputFileContents[i][0] == "printGroupCharge") {
++			/*!
++			 @ingroup MCPB_commands
++			 \code
++			 Function: printFrag
++
++			 Description: Print fragment details
++
++			 syntax: printGroupCharge Zn-CCCC
++
++			 \endcode
++			 */
++			if ((inputFileContents[i].size() != 2) or (!pCollection)) {
++				MTKpp::errorLogger.throwError("MCPB::printGroupCharge", " Incorrect use of printGroupCharge ... exiting", MTK_ERROR);
++				exit(1);
++			}
++			else {
++				stdLibrary* pStdLibrary = pCollection->getStdLibrary();
++				if (pStdLibrary) {
++					stdGroup* pStdGroup =  pStdLibrary->getStdGroup(inputFileContents[i][1]);
++					std::cout << " Group " << pStdGroup->getName() << "\n";
++					if (pStdGroup) {
++						molecule* pM = pStdGroup->getStdMolecule();
++						if (pM) {
++							double groupCharge = 0.0;
++							std::vector<submolecule*> pSM = pM->getSubMoleculeList();
++							//std::cout << "  Number of submolecules = " << pSM.size() << "\n";
++							for (unsigned int x = 0; x < pSM.size(); x++) {
++								stdFrag* pSF = pStdGroup->getStdFrag(pSM[x]->getName());
++								if (pSF) {
++									std::cout << " " << pSF->getSymbol() << "\n";
++									double fCharge = 0.0;
++									std::vector<atom*> pA = pSM[x]->getAtomList();
++									for (unsigned int y = 0; y < pA.size(); y++) {
++										stdAtom* pSA = pA[y]->getStdAtom();
++										if (pSA) {
++											fCharge += pSA->atmCharge;
++											std::cout << "       |" << pSA->identity << "| " << pSA->atmCharge << "\n";
++										}
++										else {
++											std::cout << " Error find std atom " << std::endl;
++											exit(1);
++										}
++									}
++									groupCharge += fCharge;
++									std::cout << "     Total Fragment Charge " << pSF->getCharge() << "\n";
++								}
++							}
++							/*std::vector<stdFrag*> pL = pStdGroup->getStdFragList();
++							for (unsigned int x = 0; x < pL.size(); x++) {
++								std::cout << "   Fragment " << pL[x]->getSymbol() << "\n";
++								std::vector<stdAtom*> pL2 = pL[x]->getStdAtomList();
++								double fCharge = 0.0;
++								for (unsigned int y = 0; y < pL2.size(); y++) {
++									fCharge += pL2[y]->atmCharge;
++									std::cout << "       Atom " << pL2[y]->identity << " " << pL2[y]->atmCharge << "\n";
++								}
++								groupCharge += fCharge;
++								//groupCharge += pL[x]->getCharge();
++								std::cout << "   Fragment Charge " << pL[x]->getCharge() << "\n";
++							}
++							*/
++
++							std::cout   << "  Total Charge = " << groupCharge << "\n" << std::endl;
++						}
++					}
++				}
++			}
++		}
++
++		else if (inputFileContents[i][0] == "printFrag") {
++			/*!
++			 @ingroup MCPB_commands
++			 \code
++			 Function: printFrag
++
++			 Description: Print fragment details
++
++			 syntax: printFrag Zn-CCCC CY1
++
++			 \endcode
++			 */
++			if ((inputFileContents[i].size() != 3) or (!pCollection)) {
++				MTKpp::errorLogger.throwError("MCPB::printFrag", " Incorrect use of printFrag ... exiting", MTK_ERROR);
++				exit(1);
++			}
++			else {
++				stdLibrary* pStdLibrary = pCollection->getStdLibrary();
++				if (pStdLibrary) {
++                  stdGroup* pStdGroup =  pStdLibrary->getStdGroup(inputFileContents[i][1]);
++
++                  double groupCharge = 0.0;
++                  std::vector<stdFrag*> pL = pStdGroup->getStdFragList();
++                  for (unsigned int x = 0; x < pL.size(); x++) {
++                    groupCharge += pL[x]->getCharge();
++
++                  }
++                  std::cout << " Group " << inputFileContents[i][1] << " charge = "
++                            << groupCharge << std::endl;
++                  
++                  stdFrag* pStdFrag = pStdGroup->getStdFrag(inputFileContents[i][2]);
++                  if (pStdFrag) {
++                    std::cout << "   Fragment " << inputFileContents[i][2] << " charge = "
++                              << pStdFrag->getCharge() << std::endl;
++                  }
++		        }
++		   }
++		}
++	
+       else if (inputFileContents[i][0] == "readPdb") {
+         /*!
+            @ingroup MCPB_commands
+@@ -2227,7 +2359,8 @@
+               double resCharge = 0.0;
+               for (unsigned int y = 0; y < residueAtoms.size(); y++) {
+                 stdAtom* pLStdAtom = residueAtoms[y]->getStdAtom();
+-                std::cout << "       " << residueAtoms[y]->getName() << " " << residueAtoms[y]->getFileID()
++							std::cout << "       "							
++							 << residueAtoms[y]->getName() << " " << residueAtoms[y]->getFileID()
+                           << " " << residueAtoms[y]->getType() << " " << residueAtoms[y]->getValence()
+                           << " " << residueAtoms[y]->getHybridization() << "   ";
+                 if (pLStdAtom) {
+@@ -2437,6 +2570,11 @@
+             molecule* selMol = pSel->getMol();
+             pPdbParser->Write(inputFileContents[i][2], selMol);
+           }
++				else {
++				    MTKpp::errorLogger.throwError("MCPB::writePdb",
++								      " Error molecule was not selected ... exiting ", MTK_ERROR);
++			        exit(1);
++				}
+         }
+       }
+ 
+@@ -2674,7 +2812,6 @@
+ 
+            syntax: basisSet GEN bs.txt
+            syntax: basisSet GEN.6D.7F bs.txt
+-           syntax: basisSet GENECP bs.txt pseudo.txt
+            \endcode
+         */
+         if (inputFileContents[i].size() == 2) {
+@@ -2685,6 +2822,11 @@
+           pGParser->setBasisSet(inputFileContents[i][1]);
+           pGParser->setBasisSetFile(inputFileContents[i][2]);
+         }
++			else {
++				MTKpp::errorLogger.throwError("MCPB::basisSet",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
++			}
+       }
+       
+       else if (inputFileContents[i][0] == "pseudoPotentials") {
+@@ -2698,8 +2840,15 @@
+            syntax: pseudoPotential pseudo.txt
+            \endcode
+         */
+-        pGParser->addCommandOption("pseudo","read");
++			if (inputFileContents[i].size() == 2) {
++				pGParser->addCommandOption("Pseudo","Read");
+         pGParser->setPseudoPotentialFile(inputFileContents[i][1]);
++			} else {
++				MTKpp::errorLogger.throwError("MCPB::pseudoPotentials",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
++			}
++
+       }
+ 
+       else if (inputFileContents[i][0] == "modRedundant") {
+@@ -2713,8 +2862,14 @@
+            syntax: modRedundant modred.txt
+            \endcode
+         */
+-        pGParser->addCommandOption("opt","modredundant");
++			if (inputFileContents[i].size() == 2) {
++				pGParser->addCommandOption("Opt","ModRedundant");
+         pGParser->setModRedundantFile(inputFileContents[i][1]);
++			} else {
++				MTKpp::errorLogger.throwError("MCPB::modRedundant",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
++			}
+       }
+ 
+       else if (inputFileContents[i][0] == "clusterCharge") {
+@@ -2728,7 +2883,13 @@
+            syntax: clusterCharge cuCYM4 -3
+            \endcode
+         */
++			if (inputFileContents[i].size() == 3) {
+         pGParser->setCharge(atoi(inputFileContents[i][2].c_str()));
++			} else {
++				MTKpp::errorLogger.throwError("MCPB::clusterCharge",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
++			}
+       }
+ 
+       else if (inputFileContents[i][0] == "clusterSpin") {
+@@ -2742,76 +2903,94 @@
+            syntax: clusterSpin 0
+            \endcode
+         */
++			if (inputFileContents[i].size() == 2) {
+         pGParser->setMultiplicity(atoi(inputFileContents[i][1].c_str()));
++			} else {
++				MTKpp::errorLogger.throwError("MCPB::clusterSpin",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
++			}
+       }
+ 
+-      else if (inputFileContents[i][0] == "g03MoldenFormat") {
++		else if (inputFileContents[i][0] == "gaussianMoldenFormat") {
+         /*!
+            @ingroup MCPB_commands
+            \code
+-           Function: g03MoldenFormat
++			 Function: gaussianMoldenFormat
+ 
+            Description: Use Molden formatted output in log file. Print out
+                 details of the basis set and the molecular orbitals.
+ 
+-           syntax: g03MoldenFormat (bare word)
++			 syntax: gaussianMoldenFormat (bare word)
+            \endcode
+         */
+-        pGParser->addCommandOption("gfinput");
+-        pGParser->addIop("iop(6/7=3)");
++			pGParser->addCommandOption("GFInput");
++			pGParser->addIop("IOp(6/7=3)");
+       }
+       
+-      else if (inputFileContents[i][0] == "g03Verbosity") {
++		else if (inputFileContents[i][0] == "gaussianVerbosity") {
+         if (inputFileContents[i].size() == 2) {
+           pGParser->setVerbosity(inputFileContents[i][1]);
++			} else {
++				MTKpp::errorLogger.throwError("MCPB::gaussianVerbosity",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
+         }
+       }
+ 
+-      else if (inputFileContents[i][0] == "g03Mem") {
++		else if (inputFileContents[i][0] == "gaussianMem") {
+         /*!
+            @ingroup MCPB_commands
+            \code
+-           Function: g03Mem
++			 Function: gaussianMem
+ 
+-           Description: Set amount of memory requested for g03
++			 Description: Set amount of memory requested for Gaussian
+ 
+-           syntax: g03Mem 3600MB
++			 syntax: gaussianMem 3600MB
+            \endcode
+         */
+         if (inputFileContents[i].size() == 2) {
+           pGParser->setMem(inputFileContents[i][1]);
++			} else {
++				MTKpp::errorLogger.throwError("MCPB::gaussianMem",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
+         }
+       }
+ 
+-      else if (inputFileContents[i][0] == "g03nProc") {
++		else if (inputFileContents[i][0] == "gaussianNProc") {
+         /*!
+            @ingroup MCPB_commands
+            \code
+-           Function: g03nProc
++			 Function: gaussianNProc
+ 
+-           Description: Set number of processors requested for g03
++			 Description: Set number of processors requested for Gaussian
+ 
+-           syntax: g03nProc 2
++			 syntax: gaussianNProc 2
+            \endcode
+         */
+         if (inputFileContents[i].size() == 2) {
+-          pGParser->setnProc(inputFileContents[i][1]);
++				pGParser->setNProc(inputFileContents[i][1]);
++			} else {
++				MTKpp::errorLogger.throwError("MCPB::gaussianNProc",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
+         }
+       }
+ 
+-      else if (inputFileContents[i][0] == "g03OptAndFC") {
++		else if (inputFileContents[i][0] == "gaussianOptAndFC") {
+         /*!
+            @ingroup MCPB_commands
+            \code
+-           Function: g03OptAndFC
++			 Function: gaussianOptAndFC
+ 
+            Description: Set Gaussian input name
+ 
+-           syntax: g03OptAndFC //cuCYM4 cuCYM4.com
++			 syntax: gaussianOptAndFC //cuCYM4 cuCYM4.com
+            \endcode
+         */
+         if ((inputFileContents[i].size() != 3) or (!pCollection)) {
+-          MTKpp::errorLogger.throwError("MCPB::g03OptAndFC",
++				MTKpp::errorLogger.throwError("MCPB::gaussianOptAndFC",
+                      " Incorrect use ... exiting ", MTK_ERROR);
+           exit(1);
+         }
+@@ -2819,7 +2998,7 @@
+           selection* pSel = new selection(pCollection);
+           failure = pSel->parse(inputFileContents[i][1]);
+           if (failure) {
+-            MTKpp::errorLogger.throwError("MCPB::g03OptAndFC",
++					MTKpp::errorLogger.throwError("MCPB::gaussianOptAndFC",
+                      " Error in selection parsing ... exiting ", MTK_ERROR);
+             exit(1);
+           }
+@@ -2833,17 +3012,17 @@
+             pGParser->setCartesian(1);
+             pGParser->setWriteMoleculeName(1);
+             pGParser->setWriteChargeAndMult(1);
+-            pGParser->addCommandOption("integral(Grid=UltraFine)");
++					pGParser->addCommandOption("Integral", "(Grid=UltraFine)");
+             
+-            std::vector<std::string> optOptions = pGParser->getCommandOption("opt");
++					std::vector<std::string> optOptions = pGParser->getCommandOption("Opt");
+             if (optOptions.size() == 0) {
+-              pGParser->addCommandOption("opt");
++						pGParser->addCommandOption("Opt");
+             }
+ 
+-            pGParser->addCommandOption("scf", "xqc");
+-            pGParser->addCommandOption("geom", "PrintInputOrient");
++					pGParser->addCommandOption("SCF", "XQC");
++					pGParser->addCommandOption("Geom", "PrintInputOrient");
+             pGParser->Write(fileNameBase+"_opt.com", pSelMol);
+-            pGParser->removeCommandOption("opt");
++					pGParser->removeCommandOption("Opt");
+ 
+             // k's
+             // Do not write coordinates, name, charge or multiplicity,
+@@ -2851,40 +3030,40 @@
+             pGParser->setNoCoords();
+             pGParser->setWriteMoleculeName(0);
+             pGParser->setWriteChargeAndMult(0);
+-            pGParser->addCommandOption("freq", "noraman");
+-            pGParser->addCommandOption("geom", "allcheckpoint");
+-            pGParser->addCommandOption("guess", "read");
+-            pGParser->addIop("iop(7/33=1)");
++					pGParser->addCommandOption("Freq", "NoRaman");
++					pGParser->addCommandOption("Geom", "AllCheckpoint");
++					pGParser->addCommandOption("Guess", "Read");
++					pGParser->addIop("IOp(7/33=1)");
+             pGParser->Write(fileNameBase+"_fc.com", pSelMol);
+             pGParser->clearIop();
+ 
+ /*
+             // optimization
+-            pGParser->addCommandOption("opt", "z-matrix");
++					 pGParser->addCommandOption("Opt", "Z-Matrix");
+             pGParser->generateZMatrix(pSelMol);
+             // [molecule index] = zmatrix index;
+             pGParser->writeMappingFile(fileNameBase+"_zmat.map");
+-            pGParser->addCommandOption("geom", "PrintInputOrient");
++					 pGParser->addCommandOption("Geom", "PrintInputOrient");
+             pGParser->Write(fileNameBase+"_opt.com", pSelMol);
+-            pGParser->removeCommandOption("opt");
++					 pGParser->removeCommandOption("Opt");
+ */
+           }
+         }
+       }
+ 
+-      else if (inputFileContents[i][0] == "g03Charges") {
++		else if (inputFileContents[i][0] == "gaussianCharges") {
+         /*!
+            @ingroup MCPB_commands
+            \code
+-           Function: g03Charges
++			 Function: gaussianCharges
+ 
+            Description: Set Gaussian input name
+ 
+-           syntax: g03Charges //cuCYM4 cuCYM4.com
++			 syntax: gaussianCharges //cuCYM4 cuCYM4.com
+            \endcode
+         */
+         if ((inputFileContents[i].size() != 3) or (!pCollection)) {
+-          MTKpp::errorLogger.throwError("MCPB::g03Charges",
++				MTKpp::errorLogger.throwError("MCPB::gaussianCharges",
+                      " Incorrect use ... exiting ", MTK_ERROR);
+           exit(1);
+         }
+@@ -2892,7 +3071,7 @@
+           selection* pSel = new selection(pCollection);
+           failure = pSel->parse(inputFileContents[i][1]);
+           if (failure) {
+-            MTKpp::errorLogger.throwError("MCPB::g03Charges",
++					MTKpp::errorLogger.throwError("MCPB::gaussianCharges",
+                      " Error in selection parsing ... exiting ", MTK_ERROR);
+             exit(1);
+           }
+@@ -2907,14 +3086,14 @@
+ 
+             // q's
+             std::vector<std::string> popOptions;
+-            popOptions.push_back("mk");
+-            popOptions.push_back("readradii");
+-            pGParser->addCommandOption("pop", popOptions);
+-            pGParser->removeCommandOption("freq");
+-            pGParser->addIop("iop(6/33=2)");
++					popOptions.push_back("MK");
++					popOptions.push_back("ReadRadii");
++					pGParser->addCommandOption("Pop", popOptions);
++					pGParser->removeCommandOption("Freq");
++					pGParser->addIop("IOp(6/33=2)");
+ 
+-            pGParser->addCommandOption("integral(Grid=UltraFine)");
+-            pGParser->addCommandOption("scf", "xqc");
++					pGParser->addCommandOption("Integral", "(Grid=UltraFine)");
++					pGParser->addCommandOption("SCF", "XQC");
+ 
+             pGParser->Write(fileNameBase+"_mk.com", pSelMol);
+ 
+@@ -3053,7 +3232,8 @@
+                       result = find(bbb.begin(), bbb.end(), dd);
+ 
+                       if (result != bbb.end()) {
+-                        freezingAtoms += "\n BBB "  + submols[s]->getName() + " " + int2String(submols[s]->getSubMolId()) + " " + dd;
++											freezingAtoms += "\n BBB "  + submols[s]->getName() + " "
++											              + int2String(submols[s]->getSubMolId()) + " " + dd;
+                         sprintf(temp,"%5d%10.5f", 1, pStdAtom_a->atmCharge);
+                         orespAdd << temp << std::endl;
+                         sprintf(temp,"%5d%5d", 1, subAtoms[a]->getIndex());
+@@ -3071,7 +3251,6 @@
+             MTKpp::errorLogger.throwError("MCPB::respgenAdditions",
+                           freezingAtoms, INFO);
+           }
+-
+           orespAdd << "\n" << std::endl;
+           orespAdd.close();
+         }
+@@ -3099,22 +3278,22 @@
+         }
+       }
+ 
+-      else if (inputFileContents[i][0] == "readG03Output") {
++		else if (inputFileContents[i][0] == "readGaussianOutput") {
+         /*!
+            @ingroup MCPB_commands
+            \code
+-           Function: readG03Output
++			 Function: readGaussianOutput
+ 
+-           Description: Read G03 Output
++			 Description: Read Gaussian Output
+ 
+-           syntax: readG03Output cuCYM4.log
++			 syntax: readGaussianOutput cuCYM4.log
+            \endcode
+         */
+         if ((inputFileContents[i].size() == 2) or (pGParser)) {
+           pGParser->Read(inputFileContents[i][1], pSheet);
+         }
+         else {
+-          MTKpp::errorLogger.throwError("MCPB::readG03Output",
++				MTKpp::errorLogger.throwError("MCPB::readGaussianOutput",
+                      " Incorrect use ... exiting ", MTK_ERROR);
+           exit(1);
+         }
+@@ -3481,8 +3660,8 @@
+             pGParser->setCartesian(0);
+             pGParser->setWriteMoleculeName(1);
+             pGParser->setWriteChargeAndMult(1);
+-            pGParser->addCommandOption("freq", "noraman");
+-            pGParser->addIop("iop(7/33=1)");
++					pGParser->addCommandOption("Freq", "NoRaman");
++					pGParser->addIop("IOp(7/33=1)");
+             pGParser->Write(inputFileContents[i][2], pSelMol);
+             pGParser->writeMappingFile(inputFileContents[i][2]+".map");
+           }
+@@ -3826,6 +4005,7 @@
+               if (pStdFrag) {
+                 bool doIt = pStdGroup->hasStdFrag(pStdFrag->getSymbol());
+                 if (doIt) {
++								//std::cout << " " << pStdFrag->getSymbol() << "\n";
+                   //submolecule* pStdSubmol = pStdMolecule->addSubMolecule();
+                   //pStdSubmol->copy(submolList[t]);
+                   std::vector<atom*> lAtomList = submolList[t]->getAtomList();
+@@ -3834,7 +4014,8 @@
+                     if (pStdAtom) {
+                       //std::cout << " |" << lAtomList[r]->getName() << "| " <<  lAtomList[r]->getZcharge() << "\n";
+                       pStdAtom->atmCharge = lAtomList[r]->getZcharge();
+-                      groupCharge += lAtomList[r]->getZcharge();
++										//groupCharge += lAtomList[r]->getZcharge();
++										groupCharge += pStdAtom->atmCharge;
+                     }
+                   }
+                 }
+@@ -3861,11 +4042,398 @@
+ */
+           }
+           updateRespChargesMessage += " Charge: " + double2String(groupCharge, 2);
++				//std::cout << " Group charge = " << double2String(groupCharge, 2) << "\n";
+           MTKpp::errorLogger.throwError("MCPB::updateRespCharges",
+                      updateRespChargesMessage, INFO);
+         }
+       }
+ 
++		else if (inputFileContents[i][0] == "respgen") {
++			/*!
++			 @ingroup MCPB_commands
++			 \code
++			 Function: respgen
++
++			 Description: Create resp1 and resp2 files (recreates functionality of respgen)
++
++			 syntax: respgen /COL/MOL Group fileName
++			 \endcode
++			 */
++
++			if ((inputFileContents[i].size() != 4) or (!pCollection)) {
++				MTKpp::errorLogger.throwError("MCPB::respgen",
++							      " Incorrect use ... exiting ", MTK_ERROR);
++				exit(1);
++			}
++			else {
++				selection* pSel = new selection(pCollection);
++				failure = pSel->parse(inputFileContents[i][1]);
++				if (failure) {
++					MTKpp::errorLogger.throwError("MCPB::respgen",
++								      " Error in selection parsing ... exiting ", MTK_ERROR);
++					exit(1);
++				}
++
++				stdLibrary* pStdLibrary = pCollection->getStdLibrary();
++				stdGroup* pStdGroup = 0;
++				if (pStdLibrary) {
++					pStdGroup = pStdLibrary->getStdGroup(inputFileContents[i][2]);
++					if (!pStdGroup) {
++						MTKpp::errorLogger.throwError("MCPB::respgen",
++						 " Can't find stdGroup ... exiting ", MTK_ERROR);
++						exit(1);
++					}
++				}
++				else {
++					MTKpp::errorLogger.throwError("MCPB::respgen",
++								      " Error in selection parsing ... exiting ", MTK_ERROR);
++				}
++
++				if (pSel->getSelectionType() == 1) {
++				  molecule* pSelMol = pSel->getMol();
++					if (!pSelMol) {
++					  std::cout << " Error in respgen selection \n";
++					  exit(1);
++					}
++
++				std::vector<std::string>::iterator result;
++
++				acParser* pAcParser = new acParser();
++				pAcParser->Write(inputFileContents[i][3]+".ac", pCollection);
++				delete pAcParser;
++
++				std::string bb0FileResp1 = inputFileContents[i][3] + "_bb0.resp1";
++				std::string bb0FileResp2 = inputFileContents[i][3] + "_bb0.resp2";
++				std::ofstream obb0FileResp1;
++				std::ofstream obb0FileResp2;
++				obb0FileResp1.open(bb0FileResp1.c_str());
++				obb0FileResp2.open(bb0FileResp2.c_str());
++
++				std::string bb1FileResp1 = inputFileContents[i][3] + "_bb1.resp1";
++				std::string bb1FileResp2 = inputFileContents[i][3] + "_bb1.resp2";
++				std::ofstream obb1FileResp1;
++				std::ofstream obb1FileResp2;
++				obb1FileResp1.open(bb1FileResp1.c_str());
++				obb1FileResp2.open(bb1FileResp2.c_str());
++
++				std::string bb2FileResp1 = inputFileContents[i][3] + "_bb2.resp1";
++				std::string bb2FileResp2 = inputFileContents[i][3] + "_bb2.resp2";
++				std::ofstream obb2FileResp1;
++				std::ofstream obb2FileResp2;
++				obb2FileResp1.open(bb2FileResp1.c_str());
++				obb2FileResp2.open(bb2FileResp2.c_str());
++
++				std::string bb3FileResp1 = inputFileContents[i][3] + "_bb3.resp1";
++				std::string bb3FileResp2 = inputFileContents[i][3] + "_bb3.resp2";
++				std::ofstream obb3FileResp1;
++				std::ofstream obb3FileResp2;
++				obb3FileResp1.open(bb3FileResp1.c_str());
++				obb3FileResp2.open(bb3FileResp2.c_str());
++
++				if (!obb0FileResp1 or !obb0FileResp2 or !obb1FileResp1 or !obb1FileResp2 or
++				    !obb2FileResp1 or !obb2FileResp2 or !obb3FileResp1 or !obb3FileResp2) {
++					MTKpp::errorLogger.throwError("MCPB::respgen",
++								      " Unable to open RESP files ... exiting ", MTK_ERROR);
++					exit(1);
++				}
++
++				std::vector<molecule*> molList = pCollection->getMoleculeList();
++
++				std::string terminalFrags = "";
++				char temp[100];
++				bool bFirst = true;
++				for (unsigned int m = 0; m < molList.size(); m++) {
++					molecule* pMol = molList[m];
++					std::vector<submolecule*> submols = pMol->getSubMoleculeList();
++					for (unsigned int s = 0; s < submols.size(); s++) {
++						if (submols[s]->hasStdFrag()) {
++							stdFrag* pStdFrag = submols[s]->getStdFrag();
++							if (pStdFrag->getParent()->getName() != inputFileContents[i][2]) {
++								if (bFirst) {
++									sprintf(temp,"%5d%10.5f\n", pStdFrag->numStdAtoms(), 0.0);
++									bFirst = false;
++								}
++								else {
++									sprintf(temp,"\n%5d%10.5f\n", pStdFrag->numStdAtoms(), 0.0);
++								}
++								
++								terminalFrags += std::string(temp);
++								std::vector<atom*> atomList = submols[s]->getAtomList();
++								char temp2[80];
++								int counter = 0;
++								for (unsigned int a = 0; a < atomList.size(); a++) {
++									if (counter > 7) { // was 6
++										terminalFrags += "\n";
++										counter = 0;
++									}
++									sprintf(temp2,"%5d%5d", 1, atomList[a]->getIndex());
++									terminalFrags += std::string(temp2);
++									counter++;
++								}
++								//terminalFrags += "\n";
++							}
++						}
++					}
++				}
++				//std::cout << terminalFrags << std::endl;
++
++				std::string bb0 = terminalFrags + "\n";
++				std::string bb1 = terminalFrags + "\n";
++				std::string bb2 = terminalFrags + "\n";
++				std::string bb3 = terminalFrags + "\n";
++
++				int lInd = 0;
++				for (unsigned int m = 0; m < molList.size(); m++) {
++					molecule* pMol = molList[m];
++
++					if (pMol->getName() == "Reference") continue;
++
++					std::vector<submolecule*> submols = pMol->getSubMoleculeList();
++					for (unsigned int s = 0; s < submols.size(); s++) {
++						if (submols[s]->hasStdFrag()) {
++							stdFrag* pStdFrag = submols[s]->getStdFrag();
++							//std::cout << " respgen " <<  pStdFrag->getParent()->getName() << " " << inputFileContents[i][2] << " \n ";
++							if (pStdFrag->getParent()->getName() != inputFileContents[i][2]) continue;
++							std::vector<atom*> subAtoms = submols[s]->getAtomList();
++							for (unsigned int a = 0; a < subAtoms.size(); a++) {
++								stdAtom* pStdAtom_a = subAtoms[a]->getStdAtom();
++								lInd++;
++								// iBB == 1
++								if (pStdAtom_a) {
++									std::string dd = pStdAtom_a->identity + ":" + pStdAtom_a->type;
++		
++									//result = find(bb_heavy.begin(), bb_heavy.end(), subAtoms[a]->getName());
++									//result = find(bb_heavy.begin(), bb_heavy.end(), pStdAtom_a->identity);
++									result = find(bb_heavy.begin(), bb_heavy.end(), dd);
++
++									if (result != bb_heavy.end()) {
++										sprintf(temp,"%5d%10.5f\n", 1, pStdAtom_a->atmCharge);
++										//freezingAtoms += "\n BB Heavy "  + submols[s]->getName() + " " + int2String(submols[s]->getSubMolId()) + " " + dd;
++										//std::cout << "\n BB Heavy "  + submols[s]->getName() + " " + int2String(submols[s]->getSubMolId()) + " " + dd;
++										//std::cout << dd << " " << subAtoms[a]->getName() << " ---> " << subAtoms[a]->getStdAtom()->type << std::endl;
++										//orespAdd << temp << std::endl;
++										bb1 += std::string(temp);
++										sprintf(temp,"%5d%5d\n", 1, subAtoms[a]->getIndex());
++										//orespAdd << temp << std::endl;
++										bb1 += std::string(temp);
++									}
++
++								// iBB == 2
++									dd = pStdAtom_a->identity + ":" + pStdAtom_a->type;
++
++									//result = find(bb.begin(), bb.end(), subAtoms[a]->getName());
++									result = find(bb.begin(), bb.end(), dd);
++
++									if (result != bb.end()) {
++										//freezingAtoms += "\n BB "  + submols[s]->getName() + " " + int2String(submols[s]->getSubMolId()) + " " + dd;
++										sprintf(temp,"%5d%10.5f\n", 1, pStdAtom_a->atmCharge);
++										//orespAdd << temp << std::endl;
++										bb2 += std::string(temp);
++										sprintf(temp,"%5d%5d\n", 1, subAtoms[a]->getIndex());
++										//orespAdd << temp << std::endl;
++										bb2 += std::string(temp);
++									}
++								// iBB == 3 
++									dd = pStdAtom_a->identity + ":" + pStdAtom_a->type;
++
++									//result = find(bbb.begin(), bbb.end(), subAtoms[a]->getName());
++									result = find(bbb.begin(), bbb.end(), dd);
++
++									if (result != bbb.end()) {
++										//freezingAtoms += "\n BBB "  + submols[s]->getName() + " "
++										//              + int2String(submols[s]->getSubMolId()) + " " + dd;
++										sprintf(temp,"%5d%10.5f\n", 1, pStdAtom_a->atmCharge);
++										bb3 += std::string(temp);
++										//orespAdd << temp << std::endl;
++										sprintf(temp,"%5d%5d\n", 1, subAtoms[a]->getIndex());
++										bb3 += std::string(temp);
++										//orespAdd << temp << std::endl;
++									}
++								}
++								else {
++									MTKpp::errorLogger.throwError("MCPB::respgen",
++										" Unknown option ... exiting ", MTK_ERROR);
++								}
++							}
++						}
++					}
++				}
++
++				std::string resp1 = "";
++				resp1 += "Resp charges for organic molecule\n";
++				resp1 += "\n";
++				resp1 += " &cntrl\n";
++				resp1 += "\n";
++				resp1 += " nmol = 1,\n";
++				resp1 += " ihfree = 1,\n";
++				resp1 += " ioutopt = 1,\n";
++				resp1 += "\n";
++				resp1 += " &end\n";
++				resp1 += "    1.0\n";
++				resp1 += "Resp charges for organic molecule\n";
++
++				//std::cout << pStdGroup->getCharge() << " " << pSelMol->getNumAtoms() << std::endl;
++				sprintf(temp,"%5d%5d\n", int(pStdGroup->getCharge()),  pSelMol->getNumAtoms());
++				resp1 += std::string(temp);
++
++				std::vector<submolecule*> sList = pSelMol->getSubMoleculeList();
++				typedef std::map<std::string, int>::iterator mapIterator;
++
++				std::map<std::string, int> lMap;
++				int ind = 0;
++				for (unsigned int p = 0; p < sList.size(); p++) {
++					std::vector<atom*> aList = sList[p]->getAtomList();
++					for (unsigned int a = 0; a < aList.size(); a++) {
++						if (!aList[a]->getStdAtom()) {
++							std::cout << " Error ... exiting()\n";
++							exit(1);
++						}
++						int elNum = aList[a]->getAtomicNum();
++						std::string key = "";
++						if (elNum == 1) {
++							std::vector<atom*> hBondedAtoms = aList[a]->getBondedAtoms();
++							if (hBondedAtoms.size() == 1) {
++								key = aList[a]->getParent()->getName() + ":" + hBondedAtoms[0]->getName() + ":" + aList[a]->getStdAtom()->type;
++							}
++							else {
++								key = aList[a]->getParent()->getName() + ":" + aList[a]->getStdAtom()->type;
++							}
++						}
++						else {
++							key = aList[a]->getParent()->getName() + ":" + aList[a]->getName();
++						}
++
++						mapIterator mi = lMap.find(key);
++
++						int fg = 0;
++						if (mi != lMap.end()){
++							fg = lMap[key]+1;
++						}
++						else {
++							lMap[key] = ind;
++						}
++						//sprintf(temp,"%4d %-11s%5d%5d\n", ind+1, key.c_str(), aList[a]->getAtomicNum(), fg);
++						sprintf(temp,"%5d%5d\n", aList[a]->getAtomicNum(), fg);
++						resp1 += std::string(temp);
++						ind++;
++					}
++				}
++
++				std::string resp2 = "";
++
++				resp2 += "Resp charges for organic molecule\n";
++				resp2 += "\n";
++				resp2 +=  " &cntrl\n";
++				resp2 +=  "\n";
++				resp2 +=  " nmol = 1,\n";
++				resp2 +=  " ihfree = 1,\n";
++				resp2 +=  " ioutopt = 1,\n";
++				resp2 +=  " iqopt = 2,\n";
++				resp2 +=  " qwt = 0.001,\n";
++				resp2 +=  "\n";
++				resp2 +=  " &end\n";
++				resp2 +=  "    1.0\n";
++				resp2 +=  "Resp charges for organic molecule\n";
++
++				sprintf(temp,"%5d%5d\n", int(pStdGroup->getCharge()),  pSelMol->getNumAtoms());
++				resp2 += std::string(temp);
++
++				ind = 0;
++				std::map<std::string, int> lMap2;
++
++				for (unsigned int p = 0; p < sList.size(); p++) {
++					std::vector<atom*> aList = sList[p]->getAtomList();
++					for (unsigned int a = 0; a < aList.size(); a++) {
++
++						if (!aList[a]->getStdAtom()) {
++							std::cout << " Error ... exiting()\n";
++							exit(1);
++						}
++						int elNum = aList[a]->getAtomicNum();
++						std::string key = "";
++						if (elNum == 1) {
++							std::vector<atom*> hBondedAtoms = aList[a]->getBondedAtoms();
++							if (hBondedAtoms.size() == 1) {
++								key = aList[a]->getParent()->getName() + ":" + hBondedAtoms[0]->getName() + ":" + 
++								 aList[a]->getStdAtom()->type;
++							}
++ 							else {
++								key = aList[a]->getParent()->getName() + ":" + aList[a]->getStdAtom()->type;
++							}
++						}
++						else {
++							key = aList[a]->getParent()->getName() + ":" + aList[a]->getName();
++						}
++
++						mapIterator mi = lMap2.find(key);
++
++						int fg = 0;
++						if (mi != lMap2.end()){
++							fg = lMap2[key]+1;
++						}
++						else {
++							lMap2[key] = ind;
++						}
++						std::string atName = aList[a]->getName();
++						std::string atType = aList[a]->getStdAtom()->type;
++						int atNum = aList[a]->getAtomicNum();
++
++						if (atName == " CH3" or atName == " CB " or containsSubStr(key, " CB :H1") or
++							containsSubStr(key, " CB :HC") or 
++							containsSubStr(key, " CH3:HC") or containsSubStr(key, " CH3:H1") or
++							containsSubStr(key, "GLY: CA ")) {// or (atNum > 16)) {
++							//if (atName == " CH3" or atName == " CB " or  atType == "H1" or  atType == "HC") {
++							//sprintf(temp,"%4d %-11s%5d%5d\n", ind+1, key.c_str(), aList[a]->getAtomicNum(), fg);
++							sprintf(temp,"%5d%5d\n", aList[a]->getAtomicNum(), fg);
++						}
++						else {
++							//sprintf(temp,"%4d %-11s%5d%5d\n", ind+1, key.c_str(), aList[a]->getAtomicNum(), -99);
++							sprintf(temp,"%5d%5d\n", aList[a]->getAtomicNum(), -99);
++						}
++						resp2 += std::string(temp);
++
++						ind++;
++					}
++				}
++
++				std::string twoBlankLine = "\n\n";
++				bb0 += twoBlankLine;
++				bb1 += twoBlankLine;
++				bb2 += twoBlankLine;
++				bb3 += twoBlankLine;
++
++				obb0FileResp1 << resp1;
++				obb0FileResp1 << bb0;
++				obb0FileResp2 << resp2;
++				obb0FileResp2 << bb0;
++
++				obb1FileResp1 << resp1;
++				obb1FileResp1 << bb1;
++				obb1FileResp2 << resp2;
++				obb1FileResp2 << bb1;
++
++				obb2FileResp1 << resp1;
++				obb2FileResp1 << bb2;
++				obb2FileResp2 << resp2;
++				obb2FileResp2 << bb2;
++
++				obb3FileResp1 << resp1;
++				obb3FileResp1 << bb3;
++				obb3FileResp2 << resp2;
++				obb3FileResp2 << bb3;
++
++				obb0FileResp1.close();
++				obb0FileResp2.close();
++				obb1FileResp1.close();
++				obb1FileResp2.close();
++				obb2FileResp1.close();
++				obb2FileResp2.close();
++				obb3FileResp1.close();
++				obb3FileResp2.close();
++				}
++			}
++		}
++
+       else if (inputFileContents[i][0] == "addStdMol") {
+         /*!
+            @ingroup MCPB_commands
+@@ -4496,63 +5064,63 @@
+           table<double>* nmodeEVectors = pSheet->getTable("NMode EigenVectors");
+           ublas::matrix<double> &nmodeEVectorsMatrixT = nmodeEVectors->getMatrix();
+ 
+-          table<double>* g03EValues = pSheet->getTable("Gaussian EigenValues");
+-          ublas::matrix<double> &g03EValuesMatrix = g03EValues->getMatrix();
++				 table<double>* gaussianEValues = pSheet->getTable("Gaussian EigenValues");
++				 ublas::matrix<double> &gaussianEValuesMatrix = gaussianEValues->getMatrix();
+ 
+-          table<double>* g03EVectors = pSheet->getTable("Gaussian EigenVectors");
+-          ublas::matrix<double> &g03EVectorsMatrixT = g03EVectors->getMatrix();
++				 table<double>* gaussianEVectors = pSheet->getTable("Gaussian EigenVectors");
++				 ublas::matrix<double> &gaussianEVectorsMatrixT = gaussianEVectors->getMatrix();
+ 
+           int nRowsNMode = nmodeEValues->getNumRows();
+-          int nRowsG03 = g03EValues->getNumRows();
++				 int nRowsGaussian = gaussianEValues->getNumRows();
+ 
+           int nColsNMode = nmodeEVectors->getNumColumns();
+-          int nColsG03 = g03EVectors->getNumColumns();
++				 int nColsGaussian = gaussianEVectors->getNumColumns();
+ 
+-          if (nRowsNMode != nRowsG03 and nColsNMode != nColsG03) {
++				 if (nRowsNMode != nRowsGaussian and nColsNMode != nColsGaussian) {
+             std::cout << " PROBLEM " << std::endl;
+           }
+           else {
+             std::cout << " EIGENVALUES " << std::endl;
+             for (int z = 0; z < nRowsNMode; z++) {
+-              std::cout << nmodeEValuesMatrix(z, 0) << " " << g03EValuesMatrix(z, 0) << std::endl;
++				 std::cout << nmodeEValuesMatrix(z, 0) << " " << gaussianEValuesMatrix(z, 0) << std::endl;
+             }
+ 
+             //std::cout << " NMODE " << std::endl;
+             //nmodeEVectors->printMatrix();
+ 
+-            //std::cout << " G03 " << std::endl;
+-            //g03EVectors->printMatrix();
++				 //std::cout << " Gaussian " << std::endl;
++				 //gaussianEVectors->printMatrix();
+             //std::cout << " \n\n " << std::endl;
+ 
+             // Normalize Eigenvector matrices
+             for (int zi = 0; zi < nRowsNMode; zi++) {
+               double normNMode = 0.0;
+-              double normG03 = 0.0;
++				 double normGaussian = 0.0;
+               for (int zk = 0; zk < nColsNMode; zk++) {
+                 normNMode += (nmodeEVectorsMatrixT(zi, zk) * nmodeEVectorsMatrixT(zi, zk));
+-                normG03 += (g03EVectorsMatrixT(zi, zk) * g03EVectorsMatrixT(zi, zk));
++				 normGaussian += (gaussianEVectorsMatrixT(zi, zk) * gaussianEVectorsMatrixT(zi, zk));
+               }
+               normNMode = sqrt(normNMode);
+-              normG03 = sqrt(normG03);
++				 normGaussian = sqrt(normGaussian);
+               for (int zk = 0; zk < nColsNMode; zk++) {
+-                //std::cout << g03EVectorsMatrixT(zi, zk) << " " << normG03 << " "
+-                //          << g03EVectorsMatrixT(zi, zk) / normG03 << " ";
++				 //std::cout << gaussianEVectorsMatrixT(zi, zk) << " " << normGaussian << " "
++				 //          << gaussianEVectorsMatrixT(zi, zk) / normGaussian << " ";
+                 double newValue1 = nmodeEVectorsMatrixT(zi, zk) / normNMode;
+-                double newValue2 = g03EVectorsMatrixT(zi, zk) / normG03;
++				 double newValue2 = gaussianEVectorsMatrixT(zi, zk) / normGaussian;
+                 nmodeEVectors->setCellValue(zi, zk, newValue1);
+-                g03EVectors->setCellValue(zi, zk, newValue2);
+-                //std::cout << g03EVectors->getCellValue(zi, zk) << std::endl;
++				 gaussianEVectors->setCellValue(zi, zk, newValue2);
++				 //std::cout << gaussianEVectors->getCellValue(zi, zk) << std::endl;
+               }
+             }
+ 
+             ublas::matrix<double> &nmodeEVectorsMatrix = nmodeEVectors->getMatrix();
+-            ublas::matrix<double> &g03EVectorsMatrix = g03EVectors->getMatrix();
++				 ublas::matrix<double> &gaussianEVectorsMatrix = gaussianEVectors->getMatrix();
+ 
+             //std::cout << " NMODE " << std::endl;
+             //nmodeEVectors->printMatrix();
+ 
+-            //std::cout << " G03 " << std::endl;
+-            //g03EVectors->printMatrix();
++				 //std::cout << " Gaussian " << std::endl;
++				 //gaussianEVectors->printMatrix();
+             //std::cout << " \n\n " << std::endl;
+ 
+             // dot product
+@@ -4563,12 +5131,12 @@
+             double eN2 = 0.0;
+             double dff = 0.0;
+             for (int zi = 0; zi < nRowsNMode; zi++) { // NMode
+-              for (int zj = 0; zj < nRowsNMode; zj++) { // G03
++				 for (int zj = 0; zj < nRowsNMode; zj++) { // Gaussian
+                 for (int zk = 0; zk < nColsNMode; zk++) { // Loop over coordinates in Eigenvector
+-                  //std::cout << nmodeEVectorsMatrix(zi, zk) << " " <<  g03EVectorsMatrix(zj, zk) << " ";
++				 //std::cout << nmodeEVectorsMatrix(zi, zk) << " " <<  gaussianEVectorsMatrix(zj, zk) << " ";
+                   eN += (nmodeEVectorsMatrix(zi, zk) * nmodeEVectorsMatrix(zi, zk));
+-                  eN2 += (g03EVectorsMatrix(zj, zk) * g03EVectorsMatrix(zj, zk));
+-                  dotProduct += (nmodeEVectorsMatrix(zi, zk) * g03EVectorsMatrix(zj, zk));
++				 eN2 += (gaussianEVectorsMatrix(zj, zk) * gaussianEVectorsMatrix(zj, zk));
++				 dotProduct += (nmodeEVectorsMatrix(zi, zk) * gaussianEVectorsMatrix(zj, zk));
+                 }
+                 //std::cout << " eN = " << sqrt(eN) << " eN2 = " << sqrt(eN2) << " ";
+                 std::cout <<  zi << " - " << zj << " " << dotProduct << " " << dotProductMax << std::endl;
+@@ -4582,11 +5150,11 @@
+                 }
+                 dotProduct = 0.0;
+               }
+-              double dffL = nmodeEValuesMatrix(zi, 0) - g03EValuesMatrix(dotProductMaxIndex, 0);
++				 double dffL = nmodeEValuesMatrix(zi, 0) - gaussianEValuesMatrix(dotProductMaxIndex, 0);
+               dffL *= dffL;
+               std::cout << "        nmode index = " << zi << " BestMatch = " << dotProductMaxIndex
+                         << " => dotProduct =" << dotProductMax << " EVALUES: "
+-                        << " " << nmodeEValuesMatrix(zi, 0) << " " << g03EValuesMatrix(dotProductMaxIndex, 0) << "  "
++				 << " " << nmodeEValuesMatrix(zi, 0) << " " << gaussianEValuesMatrix(dotProductMaxIndex, 0) << "  "
+                         << dffL
+                         << std::endl;
+ 
+@@ -4617,7 +5185,7 @@
+       }
+ 
+       else {
+-        std::string unknownCommand = " Unknown command " + inputFileContents[i][0];
++			std::string unknownCommand = " Unknown command: \"" + inputFileContents[i][0] + "\"";
+         MTKpp::errorLogger.throwError("MCPB", unknownCommand, MTK_ERROR);
+       }
+     }
+@@ -4628,4 +5196,3 @@
+     delete pSheet;
+     return 0;
+ }
+-
+diff -urN amber11.orig/AmberTools/src/mtkpp/tools/prep2xml.cpp amber11/AmberTools/src/mtkpp/tools/prep2xml.cpp
+--- amber11.orig/AmberTools/src/mtkpp/tools/prep2xml.cpp	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/tools/prep2xml.cpp	2012-03-03 20:03:01.418032565 +0200
+@@ -86,6 +86,7 @@
+     clo->addUsage( "          -a log file                                  " );
+     clo->addUsage( "          -l hybridize name                          \n" );
+     clo->addUsage( "    flags:                                             " );
++    clo->addUsage( "          -c convert only                              " );
+     clo->addUsage( "          -h help                                    \n" );
+ 
+     // 4. SET THE OPTION STRINGS/CHARACTERS
+@@ -97,6 +98,7 @@
+     clo->setOption( "hyb",       'l' );
+     clo->setOption( "log",       'a' );
+ 
++    clo->setFlag  ( "convert",   'c' );
+     clo->setFlag  ( "help",      'h' );
+ 
+     // 5. PROVIDE THE COMMANDLINE 
+@@ -117,6 +119,11 @@
+     std::string fragName       = "";
+     std::string molName        = "";
+     std::string logFile        = "";
++    bool bConvertOnly          = 0;
++
++    if ( clo->getFlag( "convert" ) || clo->getFlag( 'c' ) ) {
++      bConvertOnly = 1;
++    }
+ 
+     std::string AMBERHOME = getenv("AMBERHOME");
+     std::string parametersFile = AMBERHOME + "/dat/mtkpp/hybridize/labute.txt";
+@@ -166,13 +173,13 @@
+     else if ( clo->getValue( "frag" ) != 0 ) {
+       fragName =  clo->getValue( "frag" );
+     }
+-    else {
++/*    else {
+       printHeader(std::cout, prog_name, authors);
+       clo->printUsage();
+       std::cout << " Please provide a fragment name " << std::endl;
+       return 0;
+     }
+-
++*/
+     if ( clo->getValue( "l" ) != 0 ) {
+       parametersFile = clo->getValue( "l" );
+     }
+@@ -186,13 +193,14 @@
+     else if ( clo->getValue( "mol" ) != 0 ) {
+       molName =  clo->getValue( "mol" );
+     }
++/*
+     else {
+       printHeader(std::cout, prog_name, authors);
+       clo->printUsage();
+       std::cout << " Please provide a molecule name " << std::endl;
+       return 0;
+     }
+-
++*/
+     if ( clo->getValue( "a" ) != 0 ) {
+       logFile = clo->getValue( "a" );
+     }
+@@ -307,6 +315,22 @@
+       std::cout << " Incorrect use of prep2xml " << std::endl;
+       exit(1);
+     }
++
++    /////////
++    if (fragName == "") {
++      prepParser* pPrepParser = new prepParser();
++      pPrepParser->Read(prepFile, pStdGroup);
++      delete pPrepParser;
++
++      pStdLibParser->Write(libXmlFile, groupName);
++      delete pStdLibParser;
++
++      // - Clean up - //
++      delete pCollection;
++      return 0;
++    }
++    ///////////
++
+     stdFrag* pStdFrag = pStdGroup->addStdFrag();
+     if (!pStdFrag) {
+       std::cout << " Incorrect use of prep2xml " << std::endl;
+@@ -322,6 +346,15 @@
+     pPrepParser->Read(prepFile, pStdFrag);
+     delete pPrepParser;
+ 
++    if (bConvertOnly) {
++      pStdLibParser->Write(libXmlFile, groupName);
++      delete pStdLibParser;
++
++      // - Clean up - //
++      delete pCollection;
++      return 0;
++    }
++
+     int f = pStdFrag->generateCoordinates();
+     if (f) {
+       std::cout << " Incorrect use of prep2xml " << std::endl;
+@@ -443,7 +476,7 @@
+     // atoms
+     for (unsigned int i = 0; i < atomList.size(); i++) {
+       stdAtoms[i]->kind = atomList[i]->getType();
+-      std::cout << atomList[i]->getIndex() << " " << atomList[i]->getName() << " " << atomList[i]->getType() << std::endl;
++      //std::cout << atomList[i]->getIndex() << " " << atomList[i]->getName() << " " << atomList[i]->getType() << std::endl;
+     }
+ 
+     // bonds
+diff -urN amber11.orig/AmberTools/src/mtkpp/tools/stdLib2Sdf.cpp amber11/AmberTools/src/mtkpp/tools/stdLib2Sdf.cpp
+--- amber11.orig/AmberTools/src/mtkpp/tools/stdLib2Sdf.cpp	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/mtkpp/tools/stdLib2Sdf.cpp	2012-03-03 20:03:01.418032565 +0200
+@@ -42,6 +42,9 @@
+ // - COMMAND LINE OPTIONS
+ #include "Parsers/commLineOptions.h"
+ 
++// - Log
++#include "Log/errorHandler.h"
++
+ // temp
+ #include "time.h"
+ 
+@@ -174,7 +177,7 @@
+     }
+ 
+     // Set errorLog stream to the log file
+-    //MTKpp::errorLogger.setStream(&oLog);
++    MTKpp::errorLogger.setStream(&oLog);
+ 
+     // Print MTK++ copyright message
+     printHeader(oLog, prog_name, authors);
+diff -urN amber11.orig/AmberTools/src/pbsa/pb_list.f amber11/AmberTools/src/pbsa/pb_list.f
+--- amber11.orig/AmberTools/src/pbsa/pb_list.f	2011-04-14 15:30:19.000000000 +0300
++++ amber11/AmberTools/src/pbsa/pb_list.f	2012-03-03 20:02:55.131034376 +0200
+@@ -949,7 +949,7 @@
+         ymin == ZERO .and. ymax == ZERO .and. &
+         zmin == ZERO .and. zmax == ZERO ) newbox = .true.
+ 
+-   if ( newbox ) then
++   if ( .not. ligand ) then
+       if ( ifcap == 0 .or. ifcap == 5 ) then
+          xmin =  9999.0; ymin =  9999.0; zmin =  9999.0
+          xmax = -9999.0; ymax = -9999.0; zmax = -9999.0
+diff -urN amber11.orig/AmberTools/src/rism/safemem.f amber11/AmberTools/src/rism/safemem.f
+--- amber11.orig/AmberTools/src/rism/safemem.f	2012-03-03 22:43:02.986777264 +0200
++++ amber11/AmberTools/src/rism/safemem.f	2012-03-03 20:02:52.131035237 +0200
+@@ -62,7 +62,7 @@
+     !BYTES_PER_KILOBYTES :: used to convert between bytes and KB
+     integer*8,parameter :: BYTES_PER_KB = 1024**1
+ 
+-    type(memTracker),private :: totalMem
++    type(memTracker),save,private :: totalMem
+ 
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



             reply	other threads:[~2012-03-03 21:07 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-03 21:06 Reinis Danne [this message]
  -- strict thread matches above, loose matches on Subject: below --
2020-09-26 16:21 [gentoo-commits] proj/sci:master commit in: sci-chemistry/ambertools/files/, sci-chemistry/ambertools/ Aisha Tammy
2016-02-19 12:56 Justin Lecher
2016-02-19 12:56 Justin Lecher
2015-10-28  9:07 Justin Lecher
2014-11-11 15:48 Justin Lecher
2012-10-21 12:52 Reinis Danne
2012-10-20 16:41 Reinis Danne
2012-08-28 16:53 Reinis Danne
2012-03-03 22:11 Reinis Danne
2011-10-26 20:06 Reinis Danne
2011-10-25 22:40 Reinis Danne
2011-07-28 13:08 Alexey Shvetsov
2011-06-25 17:21 Justin Lecher
2011-06-05  0:21 Reinis Danne
2011-03-08 13:40 Alexey Shvetsov
2011-03-07  1:49 Alexey Shvetsov
2011-03-06 21:40 Alexey Shvetsov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1330808084.8ce9886cd5e61b892ee7e1087c09013e310a15ea.rei4dan@gentoo \
    --to=rei4dan@gmail.com \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox