Index: configure.ac
===================================================================
--- configure.ac	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ configure.ac	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -134,4 +134,7 @@
 AC_CONFIG_FILES([tests/regression/molecuilder], [chmod +x tests/regression/molecuilder])
 AC_CONFIG_FILES([
+	tests/CodeChecks/atlocal 
+	tests/CodeChecks/Makefile])
+AC_CONFIG_FILES([
 	tests/Tesselations/Makefile 
 	tests/Tesselations/defs])
@@ -145,9 +148,19 @@
 	src/Makefile 
 	src/Actions/Makefile
-  src/Exceptions/Makefile
-  src/Helpers/Makefile
-  src/LinearAlgebra/Makefile
-  src/Parser/Makefile
+	src/Exceptions/Makefile
+	src/Helpers/Makefile
+	src/LinearAlgebra/Makefile
+	src/Parser/Makefile
 	src/UIElements/Makefile
-	src/unittests/Makefile])
+])
+AC_CONFIG_FILES([
+	src/unittests/Makefile
+	src/Actions/unittests/Makefile
+	src/Descriptors/unittests/Makefile
+	src/Helpers/unittests/Makefile
+	src/LinearAlgebra/unittests/Makefile
+  src/Parser/unittests/Makefile
+	src/Patterns/unittests/Makefile
+  src/UIElements/Menu/unittests/Makefile
+])
 AC_OUTPUT
Index: src/Actions/CommandAction/BondLengthTableAction.cpp
===================================================================
--- src/Actions/CommandAction/BondLengthTableAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/CommandAction/BondLengthTableAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -47,5 +47,7 @@
   if (configuration->BG == NULL) {
     configuration->BG = new BondGraph(configuration->GetIsAngstroem());
-    if ((!params.BondGraphFileName.empty()) && (configuration->BG->LoadBondLengthTable(params.BondGraphFileName.string()))) {
+    if ((!params.BondGraphFileName.empty())
+        && boost::filesystem::exists(params.BondGraphFileName)
+        && (configuration->BG->LoadBondLengthTable(params.BondGraphFileName.string()))) {
       DoLog(0) && (Log() << Verbose(0) << "Bond length table loaded successfully." << endl);
       return Action::success;
Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -15,5 +15,6 @@
   ${MOLECULEACTIONSOURCE} \
   ${PARSERACTIONSOURCE} \
-  ${SELECTIONACTIONSOURCE} \
+  ${SELECTIONATOMACTIONSOURCE} \
+  ${SELECTIONMOLECULEACTIONSOURCE} \
   ${TESSELATIONACTIONSOURCE} \
   ${WORLDACTIONSOURCE} \
@@ -29,5 +30,6 @@
   ${MOLECULEACTIONHEADER} \
   ${PARSERACTIONHEADER} \
-  ${SELECTIONACTIONHEADER} \
+  ${SELECTIONATOMACTIONHEADER} \
+  ${SELECTIONMOLECULEACTIONHEADER} \
   ${TESSELATIONACTIONHEADER} \
   ${WORLDACTIONHEADER} \
@@ -122,53 +124,62 @@
   MoleculeAction/VerletIntegrationAction.hpp
                  
-SELECTIONACTIONSOURCE = \
-	SelectionAction/AllAtomsAction.cpp \
-	SelectionAction/AllAtomsInsideCuboidAction.cpp \
-	SelectionAction/AllAtomsInsideSphereAction.cpp \
-	SelectionAction/AllAtomsOfMoleculeAction.cpp \
-	SelectionAction/AllMoleculesAction.cpp \
-	SelectionAction/AtomByElementAction.cpp \
-	SelectionAction/AtomByIdAction.cpp \
-	SelectionAction/ClearAllAtomsAction.cpp \
-	SelectionAction/ClearAllMoleculesAction.cpp \
-	SelectionAction/MoleculeByFormulaAction.cpp \
-	SelectionAction/MoleculeByIdAction.cpp \
-	SelectionAction/MoleculeByOrderAction.cpp \
-	SelectionAction/MoleculeOfAtomAction.cpp \
-	SelectionAction/NotAllAtomsAction.cpp \
-	SelectionAction/NotAllAtomsInsideCuboidAction.cpp \
-	SelectionAction/NotAllAtomsInsideSphereAction.cpp \
-	SelectionAction/NotAllAtomsOfMoleculeAction.cpp \
-	SelectionAction/NotAllMoleculesAction.cpp \
-	SelectionAction/NotAtomByElementAction.cpp \
-	SelectionAction/NotAtomByIdAction.cpp \
-	SelectionAction/NotMoleculeByFormulaAction.cpp \
-	SelectionAction/NotMoleculeByIdAction.cpp \
-	SelectionAction/NotMoleculeOfAtomAction.cpp
-SELECTIONACTIONHEADER = \
-	SelectionAction/AllAtomsAction.hpp \
-	SelectionAction/AllAtomsInsideCuboidAction.hpp \
-	SelectionAction/AllAtomsInsideSphereAction.hpp \
-	SelectionAction/AllAtomsOfMoleculeAction.hpp \
-	SelectionAction/AllMoleculesAction.hpp \
-	SelectionAction/AtomByElementAction.hpp \
-	SelectionAction/AtomByIdAction.hpp \
-	SelectionAction/ClearAllAtomsAction.hpp \
-	SelectionAction/ClearAllMoleculesAction.hpp \
-	SelectionAction/MoleculeByFormulaAction.hpp \
-	SelectionAction/MoleculeByIdAction.hpp \
-	SelectionAction/MoleculeByOrderAction.hpp \
-	SelectionAction/MoleculeOfAtomAction.hpp \
-	SelectionAction/NotAllAtomsAction.hpp \
-	SelectionAction/NotAllAtomsInsideCuboidAction.hpp \
-	SelectionAction/NotAllAtomsInsideSphereAction.hpp \
-	SelectionAction/NotAllAtomsOfMoleculeAction.hpp \
-	SelectionAction/NotAllMoleculesAction.hpp \
-	SelectionAction/NotAtomByElementAction.hpp \
-	SelectionAction/NotAtomByIdAction.hpp \
-	SelectionAction/NotMoleculeByFormulaAction.hpp \
-	SelectionAction/NotMoleculeByIdAction.hpp \
-	SelectionAction/NotMoleculeOfAtomAction.cpp
-
+SELECTIONATOMACTIONSOURCE = \
+	SelectionAction/Atoms/AllAtomsAction.cpp \
+	SelectionAction/Atoms/AllAtomsInsideCuboidAction.cpp \
+	SelectionAction/Atoms/AllAtomsInsideSphereAction.cpp \
+	SelectionAction/Atoms/AllAtomsOfMoleculeAction.cpp \
+	SelectionAction/Atoms/AtomByElementAction.cpp \
+	SelectionAction/Atoms/AtomByIdAction.cpp \
+	SelectionAction/Atoms/ClearAllAtomsAction.cpp \
+	SelectionAction/Atoms/NotAllAtomsAction.cpp \
+	SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.cpp \
+	SelectionAction/Atoms/NotAllAtomsInsideSphereAction.cpp \
+	SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.cpp \
+	SelectionAction/Atoms/NotAtomByElementAction.cpp \
+	SelectionAction/Atoms/NotAtomByIdAction.cpp
+SELECTIONATOMACTIONHEADER = \
+	SelectionAction/Atoms/AllAtomsAction.hpp \
+	SelectionAction/Atoms/AllAtomsInsideCuboidAction.hpp \
+	SelectionAction/Atoms/AllAtomsInsideSphereAction.hpp \
+	SelectionAction/Atoms/AllAtomsOfMoleculeAction.hpp \
+	SelectionAction/Atoms/AtomByElementAction.hpp \
+	SelectionAction/Atoms/AtomByIdAction.hpp \
+	SelectionAction/Atoms/ClearAllAtomsAction.hpp \
+	SelectionAction/Atoms/NotAllAtomsAction.hpp \
+	SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.hpp \
+	SelectionAction/Atoms/NotAllAtomsInsideSphereAction.hpp \
+	SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.hpp \
+	SelectionAction/Atoms/NotAtomByElementAction.hpp \
+	SelectionAction/Atoms/NotAtomByIdAction.hpp
+
+SELECTIONMOLECULEACTIONSOURCE = \
+	SelectionAction/Molecules/AllMoleculesAction.cpp \
+	SelectionAction/Molecules/ClearAllMoleculesAction.cpp \
+	SelectionAction/Molecules/MoleculeByFormulaAction.cpp \
+	SelectionAction/Molecules/MoleculeByIdAction.cpp \
+	SelectionAction/Molecules/MoleculeByNameAction.cpp \
+	SelectionAction/Molecules/MoleculeByOrderAction.cpp \
+	SelectionAction/Molecules/MoleculeOfAtomAction.cpp \
+	SelectionAction/Molecules/NotAllMoleculesAction.cpp \
+	SelectionAction/Molecules/NotMoleculeByFormulaAction.cpp \
+	SelectionAction/Molecules/NotMoleculeByIdAction.cpp \
+	SelectionAction/Molecules/NotMoleculeByNameAction.cpp \
+	SelectionAction/Molecules/NotMoleculeByOrderAction.cpp \
+	SelectionAction/Molecules/NotMoleculeOfAtomAction.cpp
+SELECTIONMOLECULEACTIONHEADER = \
+	SelectionAction/Molecules/AllMoleculesAction.hpp \
+	SelectionAction/Molecules/ClearAllMoleculesAction.hpp \
+	SelectionAction/Molecules/MoleculeByFormulaAction.hpp \
+	SelectionAction/Molecules/MoleculeByIdAction.hpp \
+	SelectionAction/Molecules/MoleculeByNameAction.hpp \
+	SelectionAction/Molecules/MoleculeByOrderAction.hpp \
+	SelectionAction/Molecules/MoleculeOfAtomAction.hpp \
+	SelectionAction/Molecules/NotAllMoleculesAction.hpp \
+	SelectionAction/Molecules/NotMoleculeByFormulaAction.hpp \
+	SelectionAction/Molecules/NotMoleculeByIdAction.hpp \
+	SelectionAction/Molecules/NotMoleculeByNameAction.hpp \
+	SelectionAction/Molecules/NotMoleculeByOrderAction.hpp \
+	SelectionAction/Molecules/NotMoleculeOfAtomAction.hpp
+	
 TESSELATIONACTIONSOURCE = \
   TesselationAction/ConvexEnvelopeAction.cpp \
Index: src/Actions/MoleculeAction/LoadAction.cpp
===================================================================
--- src/Actions/MoleculeAction/LoadAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/MoleculeAction/LoadAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -64,5 +64,5 @@
     boost::filesystem::ifstream input;
     input.open(params.filename);
-    FormatParserStorage::getInstance().get(input, FilenameSuffix);
+    FormatParserStorage::getInstance().load(input, FilenameSuffix);
     input.close();
 
Index: src/Actions/MoleculeAction/SaveAction.cpp
===================================================================
--- src/Actions/MoleculeAction/SaveAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/MoleculeAction/SaveAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -60,5 +60,5 @@
   output.open(params.filename);
   if (!output.fail()) {
-    FormatParserStorage::getInstance().put(output, FilenameSuffix);
+    FormatParserStorage::getInstance().saveSelectedMolecules(output, FilenameSuffix);
   } else {
     DoeLog(1) && (eLog() << Verbose(1) << "Could not open file " << params.filename << "." << endl);
@@ -66,5 +66,5 @@
   output.close();
 
-  return Action::failure;
+  return Action::success;
 }
 
Index: src/Actions/MoleculeAction/SaveAction.def
===================================================================
--- src/Actions/MoleculeAction/SaveAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/MoleculeAction/SaveAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -30,4 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "save world as file of certain type"
+#define DESCRIPTION "save selected molecules as file of certain type"
 #define SHORTFORM "s"
Index: c/Actions/SelectionAction/AllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * AllAtomsAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/AllAtomsAction.hpp"
-
-// and construct the stuff
-#include "AllAtomsAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionAllAtomsAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms." << endl);
-  World::getInstance().selectAllAtoms(AllAtoms());
-  return Action::state_ptr(new SelectionAllAtomsState(selectedAtoms,params));
-}
-
-Action::state_ptr SelectionAllAtomsAction::performUndo(Action::state_ptr _state) {
-  SelectionAllAtomsState *state = assert_cast<SelectionAllAtomsState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionAllAtomsAction::performRedo(Action::state_ptr _state){
-  //SelectionAllAtomsState *state = assert_cast<SelectionAllAtomsState*>(_state.get());
-
-  World::getInstance().selectAllAtoms(AllAtoms());
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionAllAtomsAction::canUndo() {
-  return true;
-}
-
-bool SelectionAllAtomsAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/AllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * AllAtomsAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
-#undef paramdefaults
-#undef paramreferences
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 3
-#define ACTIONNAME AllAtoms
-#define TOKEN "select-all-atoms"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select all atoms"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/AllAtomsAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * AllAtomsAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef ALLATOMSACTION_HPP_
-#define ALLATOMSACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "AllAtomsAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* ALLATOMSACTION_HPP_ */
Index: c/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideCuboidAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,88 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * AllAtomsInsideCuboidAction.cpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "Descriptors/AtomShapeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "LinearAlgebra/RealSpaceMatrix.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "Shapes/BaseShapes.hpp"
-#include "Shapes/Shape.hpp"
-#include "Shapes/ShapeOps.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp"
-
-// and construct the stuff
-#include "AllAtomsInsideCuboidAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionAllAtomsInsideCuboidAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-  RealSpaceMatrix RotationMatrix;
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  RotationMatrix.setRotation(params.Xangle, params.Yangle, params.Zangle);
-
-  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position << " and extension of " << params.extension << "." << endl);
-  Shape s = translate(transform(stretch(Cuboid(),params.extension),RotationMatrix),params.position);
-  World::getInstance().selectAllAtoms(AtomByShape(s));
-  return Action::state_ptr(new SelectionAllAtomsInsideCuboidState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionAllAtomsInsideCuboidAction::performUndo(Action::state_ptr _state) {
-  SelectionAllAtomsInsideCuboidState *state = assert_cast<SelectionAllAtomsInsideCuboidState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionAllAtomsInsideCuboidAction::performRedo(Action::state_ptr _state){
-  SelectionAllAtomsInsideCuboidState *state = assert_cast<SelectionAllAtomsInsideCuboidState*>(_state.get());
-  RealSpaceMatrix RotationMatrix;
-
-  RotationMatrix.setRotation(state->params.Xangle, state->params.Yangle, state->params.Zangle);
-  Shape s = translate(transform(stretch(Cuboid(),state->params.extension),RotationMatrix),state->params.position);
-  World::getInstance().selectAllAtoms(AtomByShape(s));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionAllAtomsInsideCuboidAction::canUndo() {
-  return true;
-}
-
-bool SelectionAllAtomsInsideCuboidAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/AllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideCuboidAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,35 +1,0 @@
-/*
- * AllAtomsInsideCuboidAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-#include "Actions/Values.hpp"
-
-class Vector;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (Vector)(Vector)(double)(double)(double)
-#define paramtokens ("select-atoms-inside-cuboid")("position")("angle-x")("angle-y")("angle-z")
-#define paramdescriptions ("dimensions of cuboid")("position in R^3 space")("angle of a rotation around x axis")("angle of a rotation around y axis")("angle of a rotation around z axis")
-#undef paramdefaults
-#define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 7
-#define ACTIONNAME AllAtomsInsideCuboid
-#define TOKEN "select-atoms-inside-cuboid"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select all atoms inside a cuboid"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideCuboidAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * AllAtomsInsideCuboidAction.hpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-#ifndef ALLATOMSINSIDECUBOIDACTION_HPP_
-#define ALLATOMSINSIDECUBOIDACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "AllAtomsInsideCuboidAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* ALLATOMSINSIDECUBOIDACTION_HPP_ */
Index: c/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideSphereAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * AllAtomsInsideSphereAction.cpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "Descriptors/AtomShapeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "Shapes/BaseShapes.hpp"
-#include "Shapes/Shape.hpp"
-#include "Shapes/ShapeOps.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/AllAtomsInsideSphereAction.hpp"
-
-// and construct the stuff
-#include "AllAtomsInsideSphereAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionAllAtomsInsideSphereAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms inside a sphere at " << params.position << " with radius " << params.radius << "." << endl);
-  Shape s = translate(resize(Sphere(),params.radius),params.position);
-  World::getInstance().selectAllAtoms(AtomByShape(s));
-  return Action::state_ptr(new SelectionAllAtomsInsideSphereState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionAllAtomsInsideSphereAction::performUndo(Action::state_ptr _state) {
-  SelectionAllAtomsInsideSphereState *state = assert_cast<SelectionAllAtomsInsideSphereState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionAllAtomsInsideSphereAction::performRedo(Action::state_ptr _state){
-  SelectionAllAtomsInsideSphereState *state = assert_cast<SelectionAllAtomsInsideSphereState*>(_state.get());
-
-  Shape s = translate(resize(Sphere(),state->params.radius),state->params.position);
-  World::getInstance().selectAllAtoms(AtomByShape(s));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionAllAtomsInsideSphereAction::canUndo() {
-  return true;
-}
-
-bool SelectionAllAtomsInsideSphereAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/AllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideSphereAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * AllAtomsInsideSphereAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class Vector;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (double)(Vector)
-#define paramtokens ("select-atoms-inside-sphere")("position")
-#define paramdescriptions ("sphere radius")("position in R^3 space")
-#undef paramdefaults
-#define paramreferences (radius)(position)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 8
-#define ACTIONNAME AllAtomsInsideSphere
-#define TOKEN "select-atoms-inside-sphere"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select all atoms inside a sphere"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/AllAtomsInsideSphereAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsInsideSphereAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * AllAtomsInsideSphereAction.hpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-#ifndef ALLATOMSINSIDESPHEREACTION_HPP_
-#define ALLATOMSINSIDESPHEREACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "AllAtomsInsideSphereAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* ALLATOMSINSIDESPHEREACTION_HPP_ */
Index: c/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * AllAtomsOfMoleculeAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "atom.hpp"
-#include "molecule.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp"
-
-// and construct the stuff
-#include "AllAtomsOfMoleculeAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionAllAtomsOfMoleculeAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms of molecule " << params.mol->getName() << "." << endl);
-  World::getInstance().selectAtomsOfMolecule(params.mol);
-  return Action::state_ptr(new SelectionAllAtomsOfMoleculeState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionAllAtomsOfMoleculeAction::performUndo(Action::state_ptr _state) {
-  SelectionAllAtomsOfMoleculeState *state = assert_cast<SelectionAllAtomsOfMoleculeState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionAllAtomsOfMoleculeAction::performRedo(Action::state_ptr _state){
-  SelectionAllAtomsOfMoleculeState *state = assert_cast<SelectionAllAtomsOfMoleculeState*>(_state.get());
-
-  World::getInstance().selectAtomsOfMolecule(state->params.mol);
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionAllAtomsOfMoleculeAction::canUndo() {
-  return true;
-}
-
-bool SelectionAllAtomsOfMoleculeAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/AllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * AllAtomsOfMoleculeAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class molecule;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const molecule *)
-#define paramtokens ("select-molecules-atoms")
-#define paramdescriptions ("molecule to select")
-#undef paramdefaults
-#define paramreferences (mol)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 12
-#define ACTIONNAME AllAtomsOfMolecule
-#define TOKEN "select-molecules-atoms"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select all atoms of a molecule"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllAtomsOfMoleculeAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * AllAtomsOfMoleculeAction.hpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-#ifndef ALLATOMSOFMOLECULEACTION_HPP_
-#define ALLATOMSOFMOLECULEACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "AllAtomsOfMoleculeAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* ALLATOMSOFMOLECULEACTION_HPP_ */
Index: c/Actions/SelectionAction/AllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/AllMoleculesAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * AllMoleculesAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/MoleculeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/AllMoleculesAction.hpp"
-
-// and construct the stuff
-#include "AllMoleculesAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionAllMoleculesAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
-  DoLog(1) && (Log() << Verbose(1) << "Selecting all molecules." << endl);
-  World::getInstance().selectAllMolecules(AllMolecules());
-  return Action::state_ptr(new SelectionAllMoleculesState(selectedMolecules,params));
-}
-
-Action::state_ptr SelectionAllMoleculesAction::performUndo(Action::state_ptr _state) {
-  SelectionAllMoleculesState *state = assert_cast<SelectionAllMoleculesState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionAllMoleculesAction::performRedo(Action::state_ptr _state){
-  //SelectionAllMoleculesState *state = assert_cast<SelectionAllMoleculesState*>(_state.get());
-
-  World::getInstance().selectAllMolecules(AllMolecules());
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionAllMoleculesAction::canUndo() {
-  return true;
-}
-
-bool SelectionAllMoleculesAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/AllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/AllMoleculesAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * AllMoleculesAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
-#undef paramdefaults
-#undef paramreferences
-
-#define statetypes (std::vector<molecule*>)
-#define statereferences (selectedMolecules)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 4
-#define ACTIONNAME AllMolecules
-#define TOKEN "select-all-molecules"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select all molecules"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/AllMoleculesAction.hpp
===================================================================
--- src/Actions/SelectionAction/AllMoleculesAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,17 +1,0 @@
-/*
- * AllMoleculesAction.hpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-#ifndef ALLMOLECULESSACTION_HPP_
-#define ALLMOLECULESSACTION_HPP_
-
-
-#include "Actions/Action.hpp"
-
-#include "AllMoleculesAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* ALLMOLECULESSACTION_HPP_ */
Index: c/Actions/SelectionAction/AtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/AtomByElementAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * AtomByElementAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomTypeDescriptor.hpp"
-#include "atom.hpp"
-#include "element.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/AtomByElementAction.hpp"
-
-// and construct the stuff
-#include "AtomByElementAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionAtomByElementAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Selecting atoms of type " << *params.elemental << endl);
-  World::getInstance().selectAllAtoms(AtomByType(params.elemental));
-  return Action::state_ptr(new SelectionAtomByElementState(selectedAtoms,params));
-}
-
-Action::state_ptr SelectionAtomByElementAction::performUndo(Action::state_ptr _state) {
-  SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionAtomByElementAction::performRedo(Action::state_ptr _state){
-  SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
-
-  World::getInstance().selectAllAtoms(AtomByType(state->params.elemental));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionAtomByElementAction::canUndo() {
-  return true;
-}
-
-bool SelectionAtomByElementAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/AtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/AtomByElementAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * AtomByElementAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class element;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const element*)
-#define paramtokens ("select-atom-by-element")
-#define paramdescriptions ("element")
-#undef paramdefaults
-#define paramreferences (elemental)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 5
-#define ACTIONNAME AtomByElement
-#define TOKEN "select-atom-by-element"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select an atom by element"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/AtomByElementAction.hpp
===================================================================
--- src/Actions/SelectionAction/AtomByElementAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * AtomByElementAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef ATOMBYELEMENTACTION_HPP_
-#define ATOMBYELEMENTACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "AtomByElementAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* ATOMBYELEMENTACTION_HPP_ */
Index: c/Actions/SelectionAction/AtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/AtomByIdAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * AtomByIdAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/AtomByIdAction.hpp"
-
-// and construct the stuff
-#include "AtomByIdAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionAtomByIdAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  if (!World::getInstance().isSelected(params.Walker)) {
-    DoLog(1) && (Log() << Verbose(1) << "Selecting atom " << *params.Walker << endl);
-    World::getInstance().selectAtom(params.Walker);
-    return Action::state_ptr(new SelectionAtomByIdState(params));
-  } else {
-    return Action::success;
-  }
-}
-
-Action::state_ptr SelectionAtomByIdAction::performUndo(Action::state_ptr _state) {
-  SelectionAtomByIdState *state = assert_cast<SelectionAtomByIdState*>(_state.get());
-
-  if (state->params.Walker != NULL)
-    World::getInstance().unselectAtom(state->params.Walker);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionAtomByIdAction::performRedo(Action::state_ptr _state){
-  SelectionAtomByIdState *state = assert_cast<SelectionAtomByIdState*>(_state.get());
-
-  if (state->params.Walker != NULL)
-    World::getInstance().selectAtom(state->params.Walker);
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionAtomByIdAction::canUndo() {
-  return true;
-}
-
-bool SelectionAtomByIdAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/AtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/AtomByIdAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * AtomByIdAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class atom;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const atom*)
-#define paramtokens ("select-atom-by-id")
-#define paramdescriptions ("atom index")
-#undef paramdefaults
-#define paramreferences (Walker)
-
-#undef statetypes
-#undef statereferences
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 6
-#define ACTIONNAME AtomById
-#define TOKEN "select-atom-by-id"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select an atom by index"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/AtomByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/AtomByIdAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * AtomByIdAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef ATOMBYIDACTION_HPP_
-#define ATOMBYIDACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "AtomByIdAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* ATOMBYIDACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/AllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,76 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AllAtomsAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "AllAtomsAction.hpp"
+
+// and construct the stuff
+#include "AllAtomsAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionAllAtomsAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms." << endl);
+  World::getInstance().selectAllAtoms(AllAtoms());
+  return Action::state_ptr(new SelectionAllAtomsState(selectedAtoms,params));
+}
+
+Action::state_ptr SelectionAllAtomsAction::performUndo(Action::state_ptr _state) {
+  SelectionAllAtomsState *state = assert_cast<SelectionAllAtomsState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+
+  BOOST_FOREACH(atom *_atom, state->selectedAtoms)
+    World::getInstance().selectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAllAtomsAction::performRedo(Action::state_ptr _state){
+  //SelectionAllAtomsState *state = assert_cast<SelectionAllAtomsState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AllAtoms());
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAllAtomsAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllAtomsAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/AllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * AllAtomsAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<atom*>)
+#define statereferences (selectedAtoms)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 3
+#define ACTIONNAME AllAtoms
+#define TOKEN "select-all-atoms"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select all atoms"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/AllAtomsAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * AllAtomsAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLATOMSACTION_HPP_
+#define ALLATOMSACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "AllAtomsAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* ALLATOMSACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,87 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AllAtomsInsideCuboidAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "AllAtomsInsideCuboidAction.hpp"
+
+// and construct the stuff
+#include "AllAtomsInsideCuboidAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionAllAtomsInsideCuboidAction::performCall() {
+  RealSpaceMatrix RotationMatrix;
+
+  // obtain information
+  getParametersfromValueStorage();
+
+  RotationMatrix.setRotation(params.Xangle, params.Yangle, params.Zangle);
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position << " and extension of " << params.extension << "." << endl);
+  Shape s = translate(transform(stretch(Cuboid(),params.extension),RotationMatrix),params.position);
+  std::vector<atom *> selectedAtoms = World::getInstance().getAllAtoms(AtomsBySelection() && AtomByShape(s));
+  World::getInstance().selectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionAllAtomsInsideCuboidState(selectedAtoms, s, params));
+}
+
+Action::state_ptr SelectionAllAtomsInsideCuboidAction::performUndo(Action::state_ptr _state) {
+  SelectionAllAtomsInsideCuboidState *state = assert_cast<SelectionAllAtomsInsideCuboidState*>(_state.get());
+
+  World::getInstance().unselectAllAtoms(AtomByShape(state->s));
+  BOOST_FOREACH(atom *_atom, state->selectedAtoms)
+    World::getInstance().selectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAllAtomsInsideCuboidAction::performRedo(Action::state_ptr _state){
+  SelectionAllAtomsInsideCuboidState *state = assert_cast<SelectionAllAtomsInsideCuboidState*>(_state.get());
+  RealSpaceMatrix RotationMatrix;
+
+  World::getInstance().selectAllAtoms(AtomByShape(state->s));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAllAtomsInsideCuboidAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllAtomsInsideCuboidAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,36 @@
+/*
+ * AllAtomsInsideCuboidAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+#include "Actions/Values.hpp"
+
+class Vector;
+class Shape;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (Vector)(Vector)(double)(double)(double)
+#define paramtokens ("select-atoms-inside-cuboid")("position")("angle-x")("angle-y")("angle-z")
+#define paramdescriptions ("dimensions of cuboid")("position in R^3 space")("angle of a rotation around x axis")("angle of a rotation around y axis")("angle of a rotation around z axis")
+#undef paramdefaults
+#define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
+
+#define statetypes (std::vector<atom*>)(Shape)
+#define statereferences (selectedAtoms)(s)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 7
+#define ACTIONNAME AllAtomsInsideCuboid
+#define TOKEN "select-atoms-inside-cuboid"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select all atoms inside a cuboid"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideCuboidAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * AllAtomsInsideCuboidAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLATOMSINSIDECUBOIDACTION_HPP_
+#define ALLATOMSINSIDECUBOIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "AllAtomsInsideCuboidAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* ALLATOMSINSIDECUBOIDACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,81 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AllAtomsInsideSphereAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "AllAtomsInsideSphereAction.hpp"
+
+// and construct the stuff
+#include "AllAtomsInsideSphereAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionAllAtomsInsideSphereAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms inside a sphere at " << params.position << " with radius " << params.radius << "." << endl);
+  Shape s = translate(resize(Sphere(),params.radius),params.position);
+  std::vector<atom *> selectedAtoms = World::getInstance().getAllAtoms(AtomsBySelection() && AtomByShape(s));
+  World::getInstance().selectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionAllAtomsInsideSphereState(selectedAtoms, s, params));
+}
+
+Action::state_ptr SelectionAllAtomsInsideSphereAction::performUndo(Action::state_ptr _state) {
+  SelectionAllAtomsInsideSphereState *state = assert_cast<SelectionAllAtomsInsideSphereState*>(_state.get());
+
+  World::getInstance().unselectAllAtoms(AtomByShape(state->s));
+  BOOST_FOREACH(atom *_atom, state->selectedAtoms)
+    World::getInstance().selectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAllAtomsInsideSphereAction::performRedo(Action::state_ptr _state){
+  SelectionAllAtomsInsideSphereState *state = assert_cast<SelectionAllAtomsInsideSphereState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AtomByShape(state->s));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAllAtomsInsideSphereAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllAtomsInsideSphereAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,34 @@
+/*
+ * AllAtomsInsideSphereAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class Vector;
+class Shape;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (double)(Vector)
+#define paramtokens ("select-atoms-inside-sphere")("position")
+#define paramdescriptions ("sphere radius")("position in R^3 space")
+#undef paramdefaults
+#define paramreferences (radius)(position)
+
+#define statetypes (std::vector<atom*>)(Shape)
+#define statereferences (selectedAtoms)(s)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 8
+#define ACTIONNAME AllAtomsInsideSphere
+#define TOKEN "select-atoms-inside-sphere"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select all atoms inside a sphere"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsInsideSphereAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * AllAtomsInsideSphereAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLATOMSINSIDESPHEREACTION_HPP_
+#define ALLATOMSINSIDESPHEREACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "AllAtomsInsideSphereAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* ALLATOMSINSIDESPHEREACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,77 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AllAtomsOfMoleculeAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "Descriptors/AtomOfMoleculeSelectionDescriptor.hpp"
+#include "atom.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "AllAtomsOfMoleculeAction.hpp"
+
+// and construct the stuff
+#include "AllAtomsOfMoleculeAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionAllAtomsOfMoleculeAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all atoms of currently selected molecule." << endl);
+  std::vector<atom *> selectedAtoms = World::getInstance().getAllAtoms(AtomsBySelection());
+  World::getInstance().selectAllAtoms(AtomsByMoleculeSelection());
+  return Action::state_ptr(new SelectionAllAtomsOfMoleculeState(selectedAtoms, params));
+}
+
+Action::state_ptr SelectionAllAtomsOfMoleculeAction::performUndo(Action::state_ptr _state) {
+  SelectionAllAtomsOfMoleculeState *state = assert_cast<SelectionAllAtomsOfMoleculeState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  BOOST_FOREACH(atom *_atom, state->selectedAtoms)
+    World::getInstance().selectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAllAtomsOfMoleculeAction::performRedo(Action::state_ptr _state){
+  SelectionAllAtomsOfMoleculeState *state = assert_cast<SelectionAllAtomsOfMoleculeState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AtomsByMoleculeSelection());
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAllAtomsOfMoleculeAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllAtomsOfMoleculeAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * AllAtomsOfMoleculeAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<atom*>)
+#define statereferences (selectedAtoms)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 12
+#define ACTIONNAME AllAtomsOfMolecule
+#define TOKEN "select-molecules-atoms"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select all atoms of currently selected molecules"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AllAtomsOfMoleculeAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * AllAtomsOfMoleculeAction.hpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLATOMSOFMOLECULEACTION_HPP_
+#define ALLATOMSOFMOLECULEACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "AllAtomsOfMoleculeAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* ALLATOMSOFMOLECULEACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/AtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByElementAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AtomByElementAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,77 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomByElementAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomTypeDescriptor.hpp"
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "atom.hpp"
+#include "element.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "AtomByElementAction.hpp"
+
+// and construct the stuff
+#include "AtomByElementAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionAtomByElementAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting atoms of type " << *params.elemental << endl);
+  std::vector<atom *> selectedAtoms = World::getInstance().getAllAtoms(AtomsBySelection());
+  World::getInstance().selectAllAtoms(AtomByType(params.elemental));
+  return Action::state_ptr(new SelectionAtomByElementState(selectedAtoms,params));
+}
+
+Action::state_ptr SelectionAtomByElementAction::performUndo(Action::state_ptr _state) {
+  SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
+
+  World::getInstance().unselectAllAtoms(AtomByType(state->params.elemental));
+  BOOST_FOREACH(atom *_atom, state->selectedAtoms)
+    World::getInstance().selectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAtomByElementAction::performRedo(Action::state_ptr _state){
+  SelectionAtomByElementState *state = assert_cast<SelectionAtomByElementState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AtomByType(state->params.elemental));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAtomByElementAction::canUndo() {
+  return true;
+}
+
+bool SelectionAtomByElementAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/AtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByElementAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AtomByElementAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * AtomByElementAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class element;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const element*)
+#define paramtokens ("select-atom-by-element")
+#define paramdescriptions ("element")
+#undef paramdefaults
+#define paramreferences (elemental)
+
+#define statetypes (std::vector<atom*>)
+#define statereferences (selectedAtoms)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 5
+#define ACTIONNAME AtomByElement
+#define TOKEN "select-atom-by-element"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select an atom by element"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/AtomByElementAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByElementAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AtomByElementAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * AtomByElementAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMBYELEMENTACTION_HPP_
+#define ATOMBYELEMENTACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "AtomByElementAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* ATOMBYELEMENTACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/AtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AtomByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,78 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomByIdAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "AtomByIdAction.hpp"
+
+// and construct the stuff
+#include "AtomByIdAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionAtomByIdAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  if (params.Walker != NULL) {
+    if (!World::getInstance().isSelected(params.Walker)) {
+      DoLog(1) && (Log() << Verbose(1) << "Selecting atom " << *params.Walker << endl);
+      World::getInstance().selectAtom(params.Walker);
+      return Action::state_ptr(new SelectionAtomByIdState(params));
+    } else {
+      return Action::success;
+    }
+  } else {
+    return Action::failure;
+  }
+}
+
+Action::state_ptr SelectionAtomByIdAction::performUndo(Action::state_ptr _state) {
+  SelectionAtomByIdState *state = assert_cast<SelectionAtomByIdState*>(_state.get());
+
+  World::getInstance().unselectAtom(state->params.Walker);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAtomByIdAction::performRedo(Action::state_ptr _state){
+  SelectionAtomByIdState *state = assert_cast<SelectionAtomByIdState*>(_state.get());
+
+  World::getInstance().selectAtom(state->params.Walker);
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAtomByIdAction::canUndo() {
+  return true;
+}
+
+bool SelectionAtomByIdAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/AtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AtomByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * AtomByIdAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class atom;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const atom*)
+#define paramtokens ("select-atom-by-id")
+#define paramdescriptions ("atom index")
+#undef paramdefaults
+#define paramreferences (Walker)
+
+#undef statetypes
+#undef statereferences
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 6
+#define ACTIONNAME AtomById
+#define TOKEN "select-atom-by-id"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select an atom by index"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/AtomByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/AtomByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/AtomByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * AtomByIdAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMBYIDACTION_HPP_
+#define ATOMBYIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "AtomByIdAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* ATOMBYIDACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,75 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ClearAllAtomsAction.cpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "ClearAllAtomsAction.hpp"
+
+// and construct the stuff
+#include "ClearAllAtomsAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionClearAllAtomsAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+  DoLog(1) && (Log() << Verbose(1) << "Clearing atoms selection." << endl);
+  World::getInstance().clearAtomSelection();
+  return Action::state_ptr(new SelectionClearAllAtomsState(selectedAtoms, params));
+}
+
+Action::state_ptr SelectionClearAllAtomsAction::performUndo(Action::state_ptr _state) {
+  SelectionClearAllAtomsState *state = assert_cast<SelectionClearAllAtomsState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  BOOST_FOREACH(atom *_atom, state->selectedAtoms)
+    World::getInstance().selectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionClearAllAtomsAction::performRedo(Action::state_ptr _state){
+  //SelectionClearAllAtomsState *state = assert_cast<SelectionClearAllAtomsState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionClearAllAtomsAction::canUndo() {
+  return true;
+}
+
+bool SelectionClearAllAtomsAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * ClearAllAtomsAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<atom*>)
+#define statereferences (selectedAtoms)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 1
+#define ACTIONNAME ClearAllAtoms
+#define TOKEN "clear-atom-selection"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "clear the atom selection"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/ClearAllAtomsAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * ClearAllAtomsAction.hpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+#ifndef CLEARALLATOMSACTION_HPP_
+#define CLEARALLATOMSACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "ClearAllAtomsAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* CLEARALLATOMSACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,75 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAllAtomsAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotAllAtomsAction.hpp"
+
+// and construct the stuff
+#include "NotAllAtomsAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotAllAtomsAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms." << endl);
+  World::getInstance().clearAtomSelection();
+  return Action::state_ptr(new SelectionNotAllAtomsState(selectedAtoms, params));
+}
+
+Action::state_ptr SelectionNotAllAtomsAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAllAtomsState *state = assert_cast<SelectionNotAllAtomsState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+  BOOST_FOREACH(atom *_atom, state->unselectedAtoms)
+    World::getInstance().selectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAllAtomsAction::performRedo(Action::state_ptr _state){
+  //SelectionNotAllAtomsState *state = assert_cast<SelectionNotAllAtomsState*>(_state.get());
+
+  World::getInstance().clearAtomSelection();
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAllAtomsAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAllAtomsAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotAllAtomsAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<atom*>)
+#define statereferences (unselectedAtoms)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 13
+#define ACTIONNAME NotAllAtoms
+#define TOKEN "unselect-all-atoms"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect all atoms"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotAllAtomsAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTALLATOMSACTION_HPP_
+#define NOTALLATOMSACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotAllAtomsAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTALLATOMSACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,86 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAllAtomsInsideCuboidAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotAllAtomsInsideCuboidAction.hpp"
+
+// and construct the stuff
+#include "NotAllAtomsInsideCuboidAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performCall() {
+  RealSpaceMatrix RotationMatrix;
+
+  // obtain information
+  getParametersfromValueStorage();
+  RotationMatrix.setRotation(params.Xangle, params.Yangle, params.Zangle);
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position << " and extension of " << params.extension << "." << endl);
+  Shape s = translate(transform(stretch(Cuboid(),params.extension),RotationMatrix),params.position);
+  std::vector<atom *> unselectedAtoms = World::getInstance().getAllAtoms((!AtomsBySelection()) && AtomByShape(s));
+  World::getInstance().unselectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionNotAllAtomsInsideCuboidState(unselectedAtoms, s, params));
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAllAtomsInsideCuboidState *state = assert_cast<SelectionNotAllAtomsInsideCuboidState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AtomByShape(state->s));
+  BOOST_FOREACH(atom *_atom, state->unselectedAtoms)
+    World::getInstance().unselectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performRedo(Action::state_ptr _state){
+  SelectionNotAllAtomsInsideCuboidState *state = assert_cast<SelectionNotAllAtomsInsideCuboidState*>(_state.get());
+  RealSpaceMatrix RotationMatrix;
+
+  World::getInstance().unselectAllAtoms(AtomByShape(state->s));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAllAtomsInsideCuboidAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAllAtomsInsideCuboidAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,36 @@
+/*
+ * NotAllAtomsInsideCuboidAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+#include "Actions/Values.hpp"
+
+class Shape;
+class Vector;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (Vector)(Vector)(double)(double)(double)
+#define paramtokens ("unselect-atoms-inside-cuboid")("position")("angle-x")("angle-y")("angle-z")
+#define paramdescriptions ("dimension of cuboid")("position in R^3 space")("angle of a rotation around x axis")("angle of a rotation around y axis")("angle of a rotation around z axis")
+#undef paramdefaults
+#define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
+
+#define statetypes (std::vector<atom*>)(Shape)
+#define statereferences (unselectedAtoms)(s)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 17
+#define ACTIONNAME NotAllAtomsInsideCuboid
+#define TOKEN "unselect-atoms-inside-cuboid"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect all atoms inside a cuboid"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideCuboidAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotAllAtomsInsideCuboidAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTALLATOMSINSIDECUBOIDACTION_HPP_
+#define NOTALLATOMSINSIDECUBOIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotAllAtomsInsideCuboidAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTALLATOMSINSIDECUBOIDACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,81 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAllAtomsInsideSphereAction.cpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "Descriptors/AtomShapeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotAllAtomsInsideSphereAction.hpp"
+
+// and construct the stuff
+#include "NotAllAtomsInsideSphereAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms inside a sphere at " << params.position << " with radius " << params.radius << "." << endl);
+  Shape s = translate(resize(Sphere(),params.radius),params.position);
+  std::vector<atom *> unselectedAtoms = World::getInstance().getAllAtoms((!AtomsBySelection()) && AtomByShape(s));
+  World::getInstance().unselectAllAtoms(AtomByShape(s));
+  return Action::state_ptr(new SelectionNotAllAtomsInsideSphereState(unselectedAtoms, s, params));
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAllAtomsInsideSphereState *state = assert_cast<SelectionNotAllAtomsInsideSphereState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AtomByShape(state->s));
+  BOOST_FOREACH(atom *_atom, state->unselectedAtoms)
+    World::getInstance().unselectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performRedo(Action::state_ptr _state){
+  SelectionNotAllAtomsInsideSphereState *state = assert_cast<SelectionNotAllAtomsInsideSphereState*>(_state.get());
+
+  World::getInstance().unselectAllAtoms(AtomByShape(state->s));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAllAtomsInsideSphereAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAllAtomsInsideSphereAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,34 @@
+/*
+ * NotAllAtomsInsideSphereAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class Shape;
+class Vector;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (double)(Vector)
+#define paramtokens ("unselect-atoms-inside-sphere")("position")
+#define paramdescriptions ("radius of sphere")("position in R^3 space")
+#undef paramdefaults
+#define paramreferences (radius)(position)
+
+#define statetypes (std::vector<atom*>)(Shape)
+#define statereferences (unselectedAtoms)(s)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 18
+#define ACTIONNAME NotAllAtomsInsideSphere
+#define TOKEN "unselect-atoms-inside-sphere"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect all atoms inside a sphere"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsInsideSphereAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotAllAtomsInsideSphereAction.hpp
+ *
+ *  Created on: Aug 9, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTALLATOMSINSIDESPHEREACTION_HPP_
+#define NOTALLATOMSINSIDESPHEREACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotAllAtomsInsideSphereAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTALLATOMSINSIDESPHEREACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,77 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAllAtomsOfMoleculeAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "Descriptors/AtomOfMoleculeSelectionDescriptor.hpp"
+#include "atom.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotAllAtomsOfMoleculeAction.hpp"
+
+// and construct the stuff
+#include "NotAllAtomsOfMoleculeAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotAllAtomsOfMoleculeAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms of currently selected molecules." << endl);
+  std::vector<atom *> unselectedAtoms = World::getInstance().getAllAtoms(!AtomsBySelection());
+  World::getInstance().unselectAllAtoms(AtomsByMoleculeSelection());
+  return Action::state_ptr(new SelectionNotAllAtomsOfMoleculeState(unselectedAtoms, params));
+}
+
+Action::state_ptr SelectionNotAllAtomsOfMoleculeAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAllAtomsOfMoleculeState *state = assert_cast<SelectionNotAllAtomsOfMoleculeState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AllAtoms());
+  BOOST_FOREACH(atom *_atom, state->unselectedAtoms)
+    World::getInstance().unselectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAllAtomsOfMoleculeAction::performRedo(Action::state_ptr _state){
+  //SelectionNotAllAtomsOfMoleculeState *state = assert_cast<SelectionNotAllAtomsOfMoleculeState*>(_state.get());
+
+  World::getInstance().unselectAllAtoms(AtomsByMoleculeSelection());
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAllAtomsOfMoleculeAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAllAtomsOfMoleculeAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotAllAtomsOfMoleculeAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<atom*>)
+#define statereferences (unselectedAtoms)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 22
+#define ACTIONNAME NotAllAtomsOfMolecule
+#define TOKEN "unselect-molecules-atoms"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect all atoms of currently selected molecules"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAllAtomsOfMoleculeAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotAllAtomsOfMoleculeAction.hpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTALLATOMSOFMOLECULEACTION_HPP_
+#define NOTALLATOMSOFMOLECULEACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotAllAtomsOfMoleculeAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTALLATOMSOFMOLECULEACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/NotAtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByElementAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByElementAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,77 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAtomByElementAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomSelectionDescriptor.hpp"
+#include "Descriptors/AtomTypeDescriptor.hpp"
+#include "atom.hpp"
+#include "element.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotAtomByElementAction.hpp"
+
+// and construct the stuff
+#include "NotAtomByElementAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotAtomByElementAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting atoms of type " << *params.elemental << endl);
+  std::vector<atom *> unselectedAtoms = World::getInstance().getAllAtoms(!AtomsBySelection());
+  World::getInstance().unselectAllAtoms(AtomByType(params.elemental));
+  return Action::state_ptr(new SelectionNotAtomByElementState(unselectedAtoms,params));
+}
+
+Action::state_ptr SelectionNotAtomByElementAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
+
+  World::getInstance().selectAllAtoms(AtomByType(state->params.elemental));
+  BOOST_FOREACH(atom *_atom, state->unselectedAtoms)
+    World::getInstance().unselectAtom(_atom);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAtomByElementAction::performRedo(Action::state_ptr _state){
+  SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
+
+  World::getInstance().unselectAllAtoms(AtomByType(state->params.elemental));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAtomByElementAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAtomByElementAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/NotAtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByElementAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByElementAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotAtomByElementAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class element;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const element*)
+#define paramtokens ("unselect-atom-by-element")
+#define paramdescriptions ("element")
+#undef paramdefaults
+#define paramreferences (elemental)
+
+#define statetypes (std::vector<atom*>)
+#define statereferences (unselectedAtoms)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 15
+#define ACTIONNAME NotAtomByElement
+#define TOKEN "unselect-atom-by-element"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect an atom by element"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/NotAtomByElementAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByElementAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByElementAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotAtomByElementAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTATOMBYELEMENTACTION_HPP_
+#define NOTATOMBYELEMENTACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotAtomByElementAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTATOMBYELEMENTACTION_HPP_ */
Index: src/Actions/SelectionAction/Atoms/NotAtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,78 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAtomByIdAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotAtomByIdAction.hpp"
+
+// and construct the stuff
+#include "NotAtomByIdAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotAtomByIdAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  if (params.Walker != NULL) {
+    if (World::getInstance().isSelected(params.Walker)) {
+      DoLog(1) && (Log() << Verbose(1) << "Unselecting atom " << *params.Walker << endl);
+      World::getInstance().unselectAtom(params.Walker);
+      return Action::state_ptr(new SelectionNotAtomByIdState(params));
+    } else {
+      return Action::success;
+    }
+  } else {
+    return Action::failure;
+  }
+}
+
+Action::state_ptr SelectionNotAtomByIdAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAtomByIdState *state = assert_cast<SelectionNotAtomByIdState*>(_state.get());
+
+  World::getInstance().selectAtom(state->params.Walker);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAtomByIdAction::performRedo(Action::state_ptr _state){
+  SelectionNotAtomByIdState *state = assert_cast<SelectionNotAtomByIdState*>(_state.get());
+
+  World::getInstance().unselectAtom(state->params.Walker);
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAtomByIdAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAtomByIdAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotAtomByIdAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class atom;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const atom*)
+#define paramtokens ("unselect-atom-by-id")
+#define paramdescriptions ("atom index")
+#undef paramdefaults
+#define paramreferences (Walker)
+
+#undef statetypes
+#undef statereferences
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 16
+#define ACTIONNAME NotAtomById
+#define TOKEN "unselect-atom-by-id"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect an atom by index"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Atoms/NotAtomByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/Atoms/NotAtomByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Atoms/NotAtomByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotAtomByIdAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTATOMBYIDACTION_HPP_
+#define NOTATOMBYIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotAtomByIdAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTATOMBYIDACTION_HPP_ */
Index: c/Actions/SelectionAction/ClearAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/ClearAllAtomsAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ClearAllAtomsAction.cpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/ClearAllAtomsAction.hpp"
-
-// and construct the stuff
-#include "ClearAllAtomsAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionClearAllAtomsAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-  DoLog(1) && (Log() << Verbose(1) << "Clearing atoms selection." << endl);
-  World::getInstance().clearAtomSelection();
-  return Action::state_ptr(new SelectionClearAllAtomsState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionClearAllAtomsAction::performUndo(Action::state_ptr _state) {
-  SelectionClearAllAtomsState *state = assert_cast<SelectionClearAllAtomsState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionClearAllAtomsAction::performRedo(Action::state_ptr _state){
-  //SelectionClearAllAtomsState *state = assert_cast<SelectionClearAllAtomsState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionClearAllAtomsAction::canUndo() {
-  return true;
-}
-
-bool SelectionClearAllAtomsAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/ClearAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/ClearAllAtomsAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * ClearAllAtomsAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
-#undef paramdefaults
-#undef paramreferences
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 1
-#define ACTIONNAME ClearAllAtoms
-#define TOKEN "clear-atom-selection"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "clear the atom selection"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/ClearAllAtomsAction.hpp
===================================================================
--- src/Actions/SelectionAction/ClearAllAtomsAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * ClearAllAtomsAction.hpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-#ifndef CLEARALLATOMSACTION_HPP_
-#define CLEARALLATOMSACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "ClearAllAtomsAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* CLEARALLATOMSACTION_HPP_ */
Index: c/Actions/SelectionAction/ClearAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/ClearAllMoleculesAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ClearAllMoleculesAction.cpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/MoleculeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/ClearAllMoleculesAction.hpp"
-
-// and construct the stuff
-#include "ClearAllMoleculesAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionClearAllMoleculesAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
-  DoLog(1) && (Log() << Verbose(1) << "Clearing molecule selection." << endl);
-  World::getInstance().clearMoleculeSelection();
-  return Action::state_ptr(new SelectionClearAllMoleculesState(selectedMolecules,params));
-}
-
-Action::state_ptr SelectionClearAllMoleculesAction::performUndo(Action::state_ptr _state) {
-  SelectionClearAllMoleculesState *state = assert_cast<SelectionClearAllMoleculesState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionClearAllMoleculesAction::performRedo(Action::state_ptr _state){
-  //SelectionClearAllMoleculesState *state = assert_cast<SelectionClearAllMoleculesState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionClearAllMoleculesAction::canUndo() {
-  return true;
-}
-
-bool SelectionClearAllMoleculesAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/ClearAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/ClearAllMoleculesAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * ClearAllMoleculesAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
-#undef paramdefaults
-#undef paramreferences
-
-#define statetypes (std::vector<molecule*>)
-#define statereferences (selectedMolecules)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 2
-#define ACTIONNAME ClearAllMolecules
-#define TOKEN "clear-molecule-selection"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "clear the molecule selection"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/ClearAllMoleculesAction.hpp
===================================================================
--- src/Actions/SelectionAction/ClearAllMoleculesAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * ClearAllMoleculesAction.hpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-#ifndef CLEARALLMOLECULESSACTION_HPP_
-#define CLEARALLMOLECULESSACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "ClearAllMoleculesAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* CLEARALLMOLECULESSACTION_HPP_ */
Index: c/Actions/SelectionAction/MoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByFormulaAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,79 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MoleculeByFormulaAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/MoleculeFormulaDescriptor.hpp"
-#include "molecule.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/MoleculeByFormulaAction.hpp"
-
-// and construct the stuff
-#include "MoleculeByFormulaAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionMoleculeByFormulaAction::performCall() {
-  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Selecting molecules with chemical formula " << params.formula << ":" << endl);
-  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula));
-  for (std::vector<molecule *>::const_iterator iter = matchingMolecules.begin(); iter != matchingMolecules.end(); ++iter) {
-    DoLog(1) && (Log() << Verbose(1) << "\t" << (*iter)->getId() << ", " << (*iter)->getName() << "." << endl);
-  }
-  World::getInstance().selectAllMolecules(MoleculeByFormula(params.formula));
-  return Action::state_ptr(new SelectionMoleculeByFormulaState(selectedMolecules,params));
-}
-
-Action::state_ptr SelectionMoleculeByFormulaAction::performUndo(Action::state_ptr _state) {
-  SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionMoleculeByFormulaAction::performRedo(Action::state_ptr _state){
-  SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
-
-  World::getInstance().selectAllMolecules(MoleculeByFormula(state->params.formula));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionMoleculeByFormulaAction::canUndo() {
-  return true;
-}
-
-bool SelectionMoleculeByFormulaAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/MoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/MoleculeByFormulaAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * MoleculeByFormulaAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class molecule;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)
-#define paramtokens ("select-molecule-by-formula")
-#define paramdescriptions ("chemical formula")
-#undef paramdefaults
-#define paramreferences (formula)
-
-#define statetypes (std::vector<molecule*>)
-#define statereferences (selectedMolecules)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 10
-#define ACTIONNAME MoleculeByFormula
-#define TOKEN "select-molecule-by-formula"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select a molecule by chemical formula"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/MoleculeByFormulaAction.hpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByFormulaAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * MoleculeByFormulaAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef MOLECULEBYFORMULAACTION_HPP_
-#define MOLECULEBYFORMULAACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "MoleculeByFormulaAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* MOLECULEBYFORMULAACTION_HPP_ */
Index: c/Actions/SelectionAction/MoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByIdAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MoleculeByIdAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "molecule.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/MoleculeByIdAction.hpp"
-
-// and construct the stuff
-#include "MoleculeByIdAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionMoleculeByIdAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  if (!World::getInstance().isSelected(params.mol)) {
-    DoLog(1) && (Log() << Verbose(1) << "Selecting molecule " << params.mol->name << endl);
-    World::getInstance().selectMolecule(params.mol);
-    return Action::state_ptr(new SelectionMoleculeByIdState(params));
-  } else {
-    return Action::success;
-  }
-}
-
-Action::state_ptr SelectionMoleculeByIdAction::performUndo(Action::state_ptr _state) {
-  SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
-
-  if (state->params.mol != NULL)
-    World::getInstance().unselectMolecule(state->params.mol);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionMoleculeByIdAction::performRedo(Action::state_ptr _state){
-  SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
-
-  if (state->params.mol != NULL)
-    World::getInstance().selectMolecule(state->params.mol);
-
-  return Action::state_ptr(state);
-}
-
-bool SelectionMoleculeByIdAction::canUndo() {
-  return true;
-}
-
-bool SelectionMoleculeByIdAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/MoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/MoleculeByIdAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * MoleculeByIdAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class molecule;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const molecule*)
-#define paramtokens ("select-molecule-by-id")
-#define paramdescriptions ("molecule index")
-#undef paramdefaults
-#define paramreferences (mol)
-
-#undef statetypes
-#undef statereferences
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 9
-#define ACTIONNAME MoleculeById
-#define TOKEN "select-molecule-by-id"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select a molecule by index"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/MoleculeByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByIdAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * MoleculeByIdAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef MOLECULEBYIDACTION_HPP_
-#define MOLECULEBYIDACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "MoleculeByIdAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* MOLECULEBYIDACTION_HPP_ */
Index: c/Actions/SelectionAction/MoleculeByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByOrderAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,117 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MoleculeByOrderAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "molecule.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/MoleculeByOrderAction.hpp"
-
-// and construct the stuff
-#include "MoleculeByOrderAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-
-molecule * SearchMoleculeByOrder(int molindex)
-{
-  molecule *mol = NULL;
-  std::vector<molecule *> molecules = World::getInstance().getAllMolecules();
-  int i=0;
-  if (molindex > 0) {
-    std::vector<molecule *>::const_iterator iter = molecules.begin();
-    for (;iter != molecules.end();++iter) {
-      ++i;
-      if (molindex == i)
-        break;
-    }
-    mol = *iter;
-  } else {
-    std::vector<molecule *>::const_reverse_iterator iter = molecules.rbegin();
-    for (;iter != molecules.rend();--iter) {
-      --i;
-      if (molindex == i)
-        break;
-    }
-    mol = *iter;
-  }
-
-  return mol;
-}
-
-Action::state_ptr SelectionMoleculeByOrderAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  molecule *mol = SearchMoleculeByOrder(params.molindex);
-
-  if (mol != NULL) {
-    if (!World::getInstance().isSelected(mol)) {
-      DoLog(1) && (Log() << Verbose(1) << "Selecting molecule " << mol->name << endl);
-      World::getInstance().selectMolecule(mol);
-      return Action::state_ptr(new SelectionMoleculeByOrderState(params));
-    } else {
-      return Action::success;
-    }
-  } else {
-    return Action::failure;
-  }
-}
-
-Action::state_ptr SelectionMoleculeByOrderAction::performUndo(Action::state_ptr _state) {
-  SelectionMoleculeByOrderState *state = assert_cast<SelectionMoleculeByOrderState*>(_state.get());
-
-  molecule *mol = SearchMoleculeByOrder(state->params.molindex);
-
-  if (mol != NULL) {
-    World::getInstance().unselectMolecule(mol);
-    return Action::state_ptr(_state);
-  } else {
-    return Action::failure;
-  }
-}
-
-Action::state_ptr SelectionMoleculeByOrderAction::performRedo(Action::state_ptr _state){
-  SelectionMoleculeByOrderState *state = assert_cast<SelectionMoleculeByOrderState*>(_state.get());
-
-  molecule *mol = SearchMoleculeByOrder(state->params.molindex);
-
-  if (mol != NULL) {
-    World::getInstance().selectMolecule(mol);
-    return Action::state_ptr(state);
-  } else {
-    return Action::failure;
-  }
-}
-
-bool SelectionMoleculeByOrderAction::canUndo() {
-  return true;
-}
-
-bool SelectionMoleculeByOrderAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/MoleculeByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/MoleculeByOrderAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * MoleculeByIdAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class molecule;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (int)
-#define paramtokens ("select-molecule-by-order")
-#define paramdescriptions ("molecule order index, start at 1 or -1")
-#undef paramdefaults
-#define paramreferences (molindex)
-
-#undef statetypes
-#undef statereferences
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 9
-#define ACTIONNAME MoleculeByOrder
-#define TOKEN "select-molecule-by-order"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select a molecule by order of appearance"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/MoleculeByOrderAction.hpp
===================================================================
--- src/Actions/SelectionAction/MoleculeByOrderAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * MoleculeByOrderAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef MOLECULEBYORDERACTION_HPP_
-#define MOLECULEBYORDERACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "MoleculeByOrderAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* MOLECULEBYORDERACTION_HPP_ */
Index: c/Actions/SelectionAction/MoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/MoleculeOfAtomAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MoleculeOfAtomAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/MoleculeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/MoleculeOfAtomAction.hpp"
-
-// and construct the stuff
-#include "MoleculeOfAtomAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionMoleculeOfAtomAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
-  DoLog(1) && (Log() << Verbose(1) << "Selecting molecule to which " << params.Walker->getName() << " belongs." << endl);
-  World::getInstance().selectMoleculeOfAtom(params.Walker);
-  return Action::state_ptr(new SelectionMoleculeOfAtomState(selectedMolecules, params));
-}
-
-Action::state_ptr SelectionMoleculeOfAtomAction::performUndo(Action::state_ptr _state) {
-  SelectionMoleculeOfAtomState *state = assert_cast<SelectionMoleculeOfAtomState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionMoleculeOfAtomAction::performRedo(Action::state_ptr _state){
-  SelectionMoleculeOfAtomState *state = assert_cast<SelectionMoleculeOfAtomState*>(_state.get());
-
-  World::getInstance().selectMoleculeOfAtom(state->params.Walker);
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionMoleculeOfAtomAction::canUndo() {
-  return true;
-}
-
-bool SelectionMoleculeOfAtomAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/MoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/MoleculeOfAtomAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * MoleculeOfAtomAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const atom*)
-#define paramtokens ("select-molecule-of-atom")
-#define paramdescriptions ("one atom of desired molecule")
-#undef paramdefaults
-#define paramreferences (Walker)
-
-#define statetypes (std::vector<molecule*>)
-#define statereferences (selectedMolecules)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 11
-#define ACTIONNAME MoleculeOfAtom
-#define TOKEN "select-molecule-of-atom"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "select a molecule to which a given atom belongs"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/MoleculeOfAtomAction.hpp
===================================================================
--- src/Actions/SelectionAction/MoleculeOfAtomAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * MoleculeOfAtomAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef MOLECULEOFATOMSACTION_HPP_
-#define MOLECULEOFATOMSACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "MoleculeOfAtomAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* MOLECULEOFATOMSACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/AllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/AllMoleculesAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/AllMoleculesAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,76 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AllMoleculesAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeDescriptor.hpp"
+#include "Descriptors/MoleculeSelectionDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "AllMoleculesAction.hpp"
+
+// and construct the stuff
+#include "AllMoleculesAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionAllMoleculesAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all molecules." << endl);
+  World::getInstance().selectAllMolecules(AllMolecules());
+  return Action::state_ptr(new SelectionAllMoleculesState(selectedMolecules,params));
+}
+
+Action::state_ptr SelectionAllMoleculesAction::performUndo(Action::state_ptr _state) {
+  SelectionAllMoleculesState *state = assert_cast<SelectionAllMoleculesState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+  BOOST_FOREACH(molecule *_mol, state->selectedMolecules)
+    World::getInstance().selectMolecule(_mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionAllMoleculesAction::performRedo(Action::state_ptr _state){
+  //SelectionAllMoleculesState *state = assert_cast<SelectionAllMoleculesState*>(_state.get());
+
+  World::getInstance().selectAllMolecules(AllMolecules());
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionAllMoleculesAction::canUndo() {
+  return true;
+}
+
+bool SelectionAllMoleculesAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/AllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/AllMoleculesAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/AllMoleculesAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * AllMoleculesAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<molecule*>)
+#define statereferences (selectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 4
+#define ACTIONNAME AllMolecules
+#define TOKEN "select-all-molecules"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select all molecules"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/AllMoleculesAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/AllMoleculesAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/AllMoleculesAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,17 @@
+/*
+ * AllMoleculesAction.hpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+#ifndef ALLMOLECULESSACTION_HPP_
+#define ALLMOLECULESSACTION_HPP_
+
+
+#include "Actions/Action.hpp"
+
+#include "AllMoleculesAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* ALLMOLECULESSACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,75 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ClearAllMoleculesAction.cpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "ClearAllMoleculesAction.hpp"
+
+// and construct the stuff
+#include "ClearAllMoleculesAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionClearAllMoleculesAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
+  DoLog(1) && (Log() << Verbose(1) << "Clearing molecule selection." << endl);
+  World::getInstance().clearMoleculeSelection();
+  return Action::state_ptr(new SelectionClearAllMoleculesState(selectedMolecules,params));
+}
+
+Action::state_ptr SelectionClearAllMoleculesAction::performUndo(Action::state_ptr _state) {
+  SelectionClearAllMoleculesState *state = assert_cast<SelectionClearAllMoleculesState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+  BOOST_FOREACH(molecule *_mol, state->selectedMolecules)
+    World::getInstance().selectMolecule(_mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionClearAllMoleculesAction::performRedo(Action::state_ptr _state){
+  //SelectionClearAllMoleculesState *state = assert_cast<SelectionClearAllMoleculesState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionClearAllMoleculesAction::canUndo() {
+  return true;
+}
+
+bool SelectionClearAllMoleculesAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * ClearAllMoleculesAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<molecule*>)
+#define statereferences (selectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 2
+#define ACTIONNAME ClearAllMolecules
+#define TOKEN "clear-molecule-selection"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "clear the molecule selection"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/ClearAllMoleculesAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * ClearAllMoleculesAction.hpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+#ifndef CLEARALLMOLECULESSACTION_HPP_
+#define CLEARALLMOLECULESSACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "ClearAllMoleculesAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* CLEARALLMOLECULESSACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,80 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeByFormulaAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeFormulaDescriptor.hpp"
+#include "Descriptors/MoleculeSelectionDescriptor.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "MoleculeByFormulaAction.hpp"
+
+// and construct the stuff
+#include "MoleculeByFormulaAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionMoleculeByFormulaAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting molecules with chemical formula " << params.formula << ":" << endl);
+//  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula));
+  std::vector<molecule *> selectedMolecules =
+      World::getInstance().getAllMolecules(MoleculesBySelection() && MoleculeByFormula(params.formula));
+//  BOOST_FOREACH(molecule *mol, matchingMolecules)
+//    DoLog(1) && (Log() << Verbose(1) << "\t" << mol->getId() << ", " << mol->getName() << "." << endl);
+  World::getInstance().selectAllMolecules(MoleculeByFormula(params.formula));
+  return Action::state_ptr(new SelectionMoleculeByFormulaState(selectedMolecules,params));
+}
+
+Action::state_ptr SelectionMoleculeByFormulaAction::performUndo(Action::state_ptr _state) {
+  SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->params.formula));
+  BOOST_FOREACH( molecule *mol, state->selectedMolecules)
+    World::getInstance().selectMolecule(mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionMoleculeByFormulaAction::performRedo(Action::state_ptr _state){
+  SelectionMoleculeByFormulaState *state = assert_cast<SelectionMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().selectAllMolecules(MoleculeByFormula(state->params.formula));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionMoleculeByFormulaAction::canUndo() {
+  return true;
+}
+
+bool SelectionMoleculeByFormulaAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * MoleculeByFormulaAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (std::string)
+#define paramtokens ("select-molecule-by-formula")
+#define paramdescriptions ("chemical formula")
+#undef paramdefaults
+#define paramreferences (formula)
+
+#define statetypes (std::vector<molecule*>)
+#define statereferences (selectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 10
+#define ACTIONNAME MoleculeByFormula
+#define TOKEN "select-molecule-by-formula"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select a molecule by chemical formula"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByFormulaAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * MoleculeByFormulaAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEBYFORMULAACTION_HPP_
+#define MOLECULEBYFORMULAACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "MoleculeByFormulaAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* MOLECULEBYFORMULAACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,78 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeByIdAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "MoleculeByIdAction.hpp"
+
+// and construct the stuff
+#include "MoleculeByIdAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionMoleculeByIdAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  if (params.mol != NULL) {
+    if (!World::getInstance().isSelected(params.mol)) {
+      DoLog(1) && (Log() << Verbose(1) << "Selecting molecule " << params.mol->name << endl);
+      World::getInstance().selectMolecule(params.mol);
+      return Action::state_ptr(new SelectionMoleculeByIdState(params));
+    } else {
+      return Action::success;
+    }
+  } else {
+    return Action::failure;
+  }
+}
+
+Action::state_ptr SelectionMoleculeByIdAction::performUndo(Action::state_ptr _state) {
+  SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
+
+  World::getInstance().unselectMolecule(state->params.mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionMoleculeByIdAction::performRedo(Action::state_ptr _state){
+  SelectionMoleculeByIdState *state = assert_cast<SelectionMoleculeByIdState*>(_state.get());
+
+  World::getInstance().selectMolecule(state->params.mol);
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionMoleculeByIdAction::canUndo() {
+  return true;
+}
+
+bool SelectionMoleculeByIdAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * MoleculeByIdAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const molecule*)
+#define paramtokens ("select-molecule-by-id")
+#define paramdescriptions ("molecule index")
+#undef paramdefaults
+#define paramreferences (mol)
+
+#undef statetypes
+#undef statereferences
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 9
+#define ACTIONNAME MoleculeById
+#define TOKEN "select-molecule-by-id"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select a molecule by index"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/MoleculeByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * MoleculeByIdAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEBYIDACTION_HPP_
+#define MOLECULEBYIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "MoleculeByIdAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* MOLECULEBYIDACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/MoleculeByNameAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByNameAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByNameAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,78 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeByNameAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeNameDescriptor.hpp"
+#include "Descriptors/MoleculeSelectionDescriptor.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "MoleculeByNameAction.hpp"
+
+// and construct the stuff
+#include "MoleculeByNameAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionMoleculeByNameAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Selecting all molecules called " << params.molname << endl);
+  std::vector<molecule *> selectedMolecules =
+      World::getInstance().getAllMolecules(MoleculesBySelection() && MoleculeByName(params.molname));
+  World::getInstance().selectAllMolecules(MoleculeByName(params.molname));
+
+  return Action::state_ptr(new SelectionMoleculeByNameState(selectedMolecules,params));
+}
+
+Action::state_ptr SelectionMoleculeByNameAction::performUndo(Action::state_ptr _state) {
+  SelectionMoleculeByNameState *state = assert_cast<SelectionMoleculeByNameState*>(_state.get());
+
+  World::getInstance().unselectAllMolecules(MoleculeByName(state->params.molname));
+  BOOST_FOREACH( molecule *mol, state->selectedMolecules)
+    World::getInstance().selectMolecule(mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionMoleculeByNameAction::performRedo(Action::state_ptr _state){
+  SelectionMoleculeByNameState *state = assert_cast<SelectionMoleculeByNameState*>(_state.get());
+
+  World::getInstance().selectAllMolecules(MoleculeByName(state->params.molname));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionMoleculeByNameAction::canUndo() {
+  return true;
+}
+
+bool SelectionMoleculeByNameAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/MoleculeByNameAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByNameAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByNameAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,35 @@
+/*
+ * MoleculeByNameAction.def
+ *
+ *  Created on: Dec 7, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+#include <vector>
+
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (std::string)
+#define paramtokens ("select-molecule-by-name")
+#define paramdescriptions ("molecule name")
+#undef paramdefaults
+#define paramreferences (molname)
+
+#define statetypes (std::vector<molecule *>)
+#define statereferences (selectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 9
+#define ACTIONNAME MoleculeByName
+#define TOKEN "select-molecule-by-name"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select a molecule by name"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/MoleculeByNameAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByNameAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByNameAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * MoleculeByNameAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEBYNAMEACTION_HPP_
+#define MOLECULEBYNAMEACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "MoleculeByNameAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* MOLECULEBYNAMEACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,80 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeByOrderAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "Descriptors/MoleculeOrderDescriptor.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "MoleculeByOrderAction.hpp"
+
+// and construct the stuff
+#include "MoleculeByOrderAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+
+Action::state_ptr SelectionMoleculeByOrderAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  molecule *mol = World::getInstance().getMolecule(MoleculeByOrder(params.molindex));
+
+  if (mol != NULL) {
+    if (!World::getInstance().isSelected(mol)) {
+      DoLog(1) && (Log() << Verbose(1) << "Selecting molecule " << mol->name << endl);
+      World::getInstance().selectMolecule(mol);
+      return Action::state_ptr(new SelectionMoleculeByOrderState(mol, params));
+    } else {
+      return Action::success;
+    }
+  } else {
+    return Action::failure;
+  }
+}
+
+Action::state_ptr SelectionMoleculeByOrderAction::performUndo(Action::state_ptr _state) {
+  SelectionMoleculeByOrderState *state = assert_cast<SelectionMoleculeByOrderState*>(_state.get());
+
+  World::getInstance().unselectMolecule(state->mol);
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionMoleculeByOrderAction::performRedo(Action::state_ptr _state){
+  SelectionMoleculeByOrderState *state = assert_cast<SelectionMoleculeByOrderState*>(_state.get());
+
+  World::getInstance().selectMolecule(state->mol);
+  return Action::state_ptr(_state);
+}
+
+bool SelectionMoleculeByOrderAction::canUndo() {
+  return true;
+}
+
+bool SelectionMoleculeByOrderAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * MoleculeByIdAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (int)
+#define paramtokens ("select-molecule-by-order")
+#define paramdescriptions ("molecule order index, start at 1 or -1")
+#undef paramdefaults
+#define paramreferences (molindex)
+
+#define statetypes (const molecule *)
+#define statereferences (mol)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 9
+#define ACTIONNAME MoleculeByOrder
+#define TOKEN "select-molecule-by-order"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select a molecule by order of appearance"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeByOrderAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * MoleculeByOrderAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEBYORDERACTION_HPP_
+#define MOLECULEBYORDERACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "MoleculeByOrderAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* MOLECULEBYORDERACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,75 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeOfAtomAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeDescriptor.hpp"
+#include "Descriptors/MoleculeOfAtomSelectionDescriptor.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "MoleculeOfAtomAction.hpp"
+
+// and construct the stuff
+#include "MoleculeOfAtomAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionMoleculeOfAtomAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
+  DoLog(1) && (Log() << Verbose(1) << "Selecting molecule to currently selected atoms." << endl);
+  World::getInstance().selectAllMolecules(MoleculesByAtomSelection());
+  return Action::state_ptr(new SelectionMoleculeOfAtomState(selectedMolecules, params));
+}
+
+Action::state_ptr SelectionMoleculeOfAtomAction::performUndo(Action::state_ptr _state) {
+  SelectionMoleculeOfAtomState *state = assert_cast<SelectionMoleculeOfAtomState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+  BOOST_FOREACH(molecule *_mol, state->selectedMolecules)
+    World::getInstance().selectMolecule(_mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionMoleculeOfAtomAction::performRedo(Action::state_ptr _state){
+  //SelectionMoleculeOfAtomState *state = assert_cast<SelectionMoleculeOfAtomState*>(_state.get());
+
+  World::getInstance().selectAllMolecules(MoleculesByAtomSelection());
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionMoleculeOfAtomAction::canUndo() {
+  return true;
+}
+
+bool SelectionMoleculeOfAtomAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * MoleculeOfAtomAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<molecule*>)
+#define statereferences (selectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 11
+#define ACTIONNAME MoleculeOfAtom
+#define TOKEN "select-atoms-molecules"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "select all molecules of currently selected atoms"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/MoleculeOfAtomAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * MoleculeOfAtomAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEOFATOMSACTION_HPP_
+#define MOLECULEOFATOMSACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "MoleculeOfAtomAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* MOLECULEOFATOMSACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,75 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotAllMoleculesAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeDescriptor.hpp"
+#include "atom.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotAllMoleculesAction.hpp"
+
+// and construct the stuff
+#include "NotAllMoleculesAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotAllMoleculesAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all molecules." << endl);
+  World::getInstance().clearMoleculeSelection();
+  return Action::state_ptr(new SelectionNotAllMoleculesState(selectedMolecules,params));
+}
+
+Action::state_ptr SelectionNotAllMoleculesAction::performUndo(Action::state_ptr _state) {
+  SelectionNotAllMoleculesState *state = assert_cast<SelectionNotAllMoleculesState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+  BOOST_FOREACH(molecule *_mol, state->unselectedMolecules)
+    World::getInstance().selectMolecule(_mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotAllMoleculesAction::performRedo(Action::state_ptr _state){
+  //SelectionNotAllMoleculesState *state = assert_cast<SelectionNotAllMoleculesState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotAllMoleculesAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotAllMoleculesAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * NotAllMoleculesAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<molecule*>)
+#define statereferences (unselectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 14
+#define ACTIONNAME NotAllMolecules
+#define TOKEN "unselect-all-molecules"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect all molecules"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotAllMoleculesAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotAllMoleculesAction.hpp
+ *
+ *  Created on: Aug 09, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTALLMOLECULESSACTION_HPP_
+#define NOTALLMOLECULESSACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotAllMoleculesAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTALLMOLECULESSACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,77 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotMoleculeByFormulaAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeFormulaDescriptor.hpp"
+#include "Descriptors/MoleculeSelectionDescriptor.hpp"
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotMoleculeByFormulaAction.hpp"
+
+// and construct the stuff
+#include "NotMoleculeByFormulaAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotMoleculeByFormulaAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting molecules with chemical formula " << params.formula << ":" << endl);
+  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula));
+  std::vector<molecule *> unselectedMolecules = World::getInstance().getAllMolecules(!MoleculesBySelection());
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(params.formula));
+  return Action::state_ptr(new SelectionNotMoleculeByFormulaState(unselectedMolecules,params));
+}
+
+Action::state_ptr SelectionNotMoleculeByFormulaAction::performUndo(Action::state_ptr _state) {
+  SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().selectAllMolecules(MoleculeByFormula(state->params.formula));
+  BOOST_FOREACH( molecule *mol, state->unselectedMolecules)
+    World::getInstance().unselectMolecule(mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotMoleculeByFormulaAction::performRedo(Action::state_ptr _state){
+  SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
+
+  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->params.formula));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotMoleculeByFormulaAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotMoleculeByFormulaAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotMoleculeByFormulaAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (std::string)
+#define paramtokens ("unselect-molecule-by-formula")
+#define paramdescriptions ("chemical formula")
+#undef paramdefaults
+#define paramreferences (formula)
+
+#define statetypes (std::vector<molecule*>)
+#define statereferences (unselectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 19
+#define ACTIONNAME NotMoleculeByFormula
+#define TOKEN "unselect-molecule-by-formula"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect a molecule by chemical formula"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByFormulaAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotMoleculeByFormulaAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTMOLECULEBYFORMULAACTION_HPP_
+#define NOTMOLECULEBYFORMULAACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotMoleculeByFormulaAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTMOLECULEBYFORMULAACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,78 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotMoleculeByIdAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotMoleculeByIdAction.hpp"
+
+// and construct the stuff
+#include "NotMoleculeByIdAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotMoleculeByIdAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  if (params.mol != NULL) {
+    if (World::getInstance().isSelected(params.mol)) {
+      DoLog(1) && (Log() << Verbose(1) << "Unselecting molecule " << params.mol->name << endl);
+      World::getInstance().unselectMolecule(params.mol);
+      return Action::state_ptr(new SelectionNotMoleculeByIdState(params));
+    } else {
+      return Action::success;
+    }
+  } else {
+    return Action::failure;
+  }
+}
+
+Action::state_ptr SelectionNotMoleculeByIdAction::performUndo(Action::state_ptr _state) {
+  SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
+
+  World::getInstance().selectMolecule(state->params.mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotMoleculeByIdAction::performRedo(Action::state_ptr _state){
+  SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
+
+  World::getInstance().unselectMolecule(state->params.mol);
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotMoleculeByIdAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotMoleculeByIdAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotMoleculeByIdAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (const molecule*)
+#define paramtokens ("unselect-molecule-by-id")
+#define paramdescriptions ("molecule index")
+#undef paramdefaults
+#define paramreferences (mol)
+
+#undef statetypes
+#undef statereferences
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 20
+#define ACTIONNAME NotMoleculeById
+#define TOKEN "unselect-molecule-by-id"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect a molecule by index"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByIdAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotMoleculeByIdAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTMOLECULEBYIDACTION_HPP_
+#define NOTMOLECULEBYIDACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotMoleculeByIdAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTMOLECULEBYIDACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,78 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotMoleculeByNameAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "Descriptors/MoleculeNameDescriptor.hpp"
+#include "Descriptors/MoleculeSelectionDescriptor.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotMoleculeByNameAction.hpp"
+
+// and construct the stuff
+#include "NotMoleculeByNameAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotMoleculeByNameAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting all molecule called " << params.molname << endl);
+  std::vector<molecule *> unselectedMolecules =
+      World::getInstance().getAllMolecules((!MoleculesBySelection()) && MoleculeByName(params.molname));
+  World::getInstance().unselectAllMolecules(MoleculeByName(params.molname));
+
+  return Action::state_ptr(new SelectionNotMoleculeByNameState(unselectedMolecules,params));
+}
+
+Action::state_ptr SelectionNotMoleculeByNameAction::performUndo(Action::state_ptr _state) {
+  SelectionNotMoleculeByNameState *state = assert_cast<SelectionNotMoleculeByNameState*>(_state.get());
+
+  World::getInstance().selectAllMolecules(MoleculeByName(state->params.molname));
+  BOOST_FOREACH( molecule *mol, state->unselectedMolecules)
+    World::getInstance().unselectMolecule(mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotMoleculeByNameAction::performRedo(Action::state_ptr _state){
+  SelectionNotMoleculeByNameState *state = assert_cast<SelectionNotMoleculeByNameState*>(_state.get());
+
+  World::getInstance().unselectAllMolecules(MoleculeByName(state->params.molname));
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotMoleculeByNameAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotMoleculeByNameAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotMoleculeByNameAction.def
+ *
+ *  Created on: Dec 7, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (std::string)
+#define paramtokens ("unselect-molecule-by-name")
+#define paramdescriptions ("molecule name")
+#undef paramdefaults
+#define paramreferences (molname)
+
+#define statetypes (std::vector<molecule *>)
+#define statereferences (unselectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 9
+#define ACTIONNAME NotMoleculeByName
+#define TOKEN "unselect-molecule-by-name"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect a molecule by name"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByNameAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotMoleculeByNameAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTMOLECULEBYNAMEACTION_HPP_
+#define NOTMOLECULEBYNAMEACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotMoleculeByNameAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTMOLECULEBYNAMEACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,80 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotMoleculeByOrderAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "molecule.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "Descriptors/MoleculeOrderDescriptor.hpp"
+#include "World.hpp"
+
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotMoleculeByOrderAction.hpp"
+
+// and construct the stuff
+#include "NotMoleculeByOrderAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+
+Action::state_ptr SelectionNotMoleculeByOrderAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  molecule *mol = World::getInstance().getMolecule(MoleculeByOrder(params.molindex));
+
+  if (mol != NULL) {
+    if (World::getInstance().isSelected(mol)) {
+      DoLog(1) && (Log() << Verbose(1) << "Unselecting molecule " << mol->name << endl);
+      World::getInstance().unselectMolecule(mol);
+      return Action::state_ptr(new SelectionNotMoleculeByOrderState(mol, params));
+    } else {
+      return Action::success;
+    }
+  } else {
+    return Action::failure;
+  }
+}
+
+Action::state_ptr SelectionNotMoleculeByOrderAction::performUndo(Action::state_ptr _state) {
+  SelectionNotMoleculeByOrderState *state = assert_cast<SelectionNotMoleculeByOrderState*>(_state.get());
+
+  World::getInstance().selectMolecule(state->mol);
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotMoleculeByOrderAction::performRedo(Action::state_ptr _state){
+  SelectionNotMoleculeByOrderState *state = assert_cast<SelectionNotMoleculeByOrderState*>(_state.get());
+
+  World::getInstance().unselectMolecule(state->mol);
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotMoleculeByOrderAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotMoleculeByOrderAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,33 @@
+/*
+ * NotMoleculeByOrderAction.def
+ *
+ *  Created on: Dec 7, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class molecule;
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#define paramtypes (int)
+#define paramtokens ("unselect-molecule-by-order")
+#define paramdescriptions ("molecule order index, start at 1 or -1")
+#undef paramdefaults
+#define paramreferences (molindex)
+
+#define statetypes (const molecule *)
+#define statereferences (mol)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 10
+#define ACTIONNAME NotMoleculeByOrder
+#define TOKEN "unselect-molecule-by-order"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect a molecule by order of appearance"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeByOrderAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotMoleculeByOrderAction.hpp
+ *
+ *  Created on: Dec 7, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTMOLECULEBYORDERACTION_HPP_
+#define NOTMOLECULEBYORDERACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotMoleculeByOrderAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTMOLECULEBYORDERACTION_HPP_ */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,75 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * NotMoleculeOfAtomAction.cpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeDescriptor.hpp"
+#include "Descriptors/MoleculeOfAtomSelectionDescriptor.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include <boost/foreach.hpp>
+#include <iostream>
+#include <string>
+
+using namespace std;
+
+#include "NotMoleculeOfAtomAction.hpp"
+
+// and construct the stuff
+#include "NotMoleculeOfAtomAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== define the function ====================== */
+Action::state_ptr SelectionNotMoleculeOfAtomAction::performCall() {
+  // obtain information
+  getParametersfromValueStorage();
+
+  std::vector<molecule *> unselectedMolecules = World::getInstance().getSelectedMolecules();
+  DoLog(1) && (Log() << Verbose(1) << "Unselecting molecule to currently selected atoms." << endl);
+  World::getInstance().unselectAllMolecules(MoleculesByAtomSelection());
+  return Action::state_ptr(new SelectionNotMoleculeOfAtomState(unselectedMolecules, params));
+}
+
+Action::state_ptr SelectionNotMoleculeOfAtomAction::performUndo(Action::state_ptr _state) {
+  SelectionNotMoleculeOfAtomState *state = assert_cast<SelectionNotMoleculeOfAtomState*>(_state.get());
+
+  World::getInstance().clearMoleculeSelection();
+  BOOST_FOREACH(molecule *_mol, state->unselectedMolecules)
+    World::getInstance().selectMolecule(_mol);
+
+  return Action::state_ptr(_state);
+}
+
+Action::state_ptr SelectionNotMoleculeOfAtomAction::performRedo(Action::state_ptr _state){
+  //SelectionNotMoleculeOfAtomState *state = assert_cast<SelectionNotMoleculeOfAtomState*>(_state.get());
+
+  World::getInstance().unselectAllMolecules(MoleculesByAtomSelection());
+
+  return Action::state_ptr(_state);
+}
+
+bool SelectionNotMoleculeOfAtomAction::canUndo() {
+  return true;
+}
+
+bool SelectionNotMoleculeOfAtomAction::shouldUndo() {
+  return true;
+}
+/** =========== end of function ====================== */
Index: src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * NotMoleculeOfAtomAction.def
+ *
+ *  Created on: Aug 26, 2010
+ *      Author: heber
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+
+// i.e. there is an integer with variable name Z that can be found in
+// ValueStorage by the token "Z" -> first column: int, Z, "Z"
+// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
+#undef paramtypes
+#undef paramtokens
+#undef paramdescriptions
+#undef paramdefaults
+#undef paramreferences
+
+#define statetypes (std::vector<molecule*>)
+#define statereferences (unselectedMolecules)
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Selection
+#define MENUNAME "selection"
+#define MENUPOSITION 21
+#define ACTIONNAME NotMoleculeOfAtom
+#define TOKEN "unselect-atoms-molecules"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "unselect all molecules of currently selected atoms"
+#undef SHORTFORM
Index: src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.hpp
===================================================================
--- src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/SelectionAction/Molecules/NotMoleculeOfAtomAction.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * NotMoleculeOfAtomAction.hpp
+ *
+ *  Created on: May 12, 2010
+ *      Author: heber
+ */
+
+#ifndef NOTMOLECULEOFATOMSACTION_HPP_
+#define NOTMOLECULEOFATOMSACTION_HPP_
+
+#include "Actions/Action.hpp"
+
+#include "NotMoleculeOfAtomAction.def"
+#include "Action_impl_header.hpp"
+
+#endif /* NOTMOLECULEOFATOMSACTION_HPP_ */
Index: c/Actions/SelectionAction/NotAllAtomsAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotAllAtomsAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotAllAtomsAction.hpp"
-
-// and construct the stuff
-#include "NotAllAtomsAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotAllAtomsAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms." << endl);
-  World::getInstance().clearAtomSelection();
-  return Action::state_ptr(new SelectionNotAllAtomsState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionNotAllAtomsAction::performUndo(Action::state_ptr _state) {
-  SelectionNotAllAtomsState *state = assert_cast<SelectionNotAllAtomsState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotAllAtomsAction::performRedo(Action::state_ptr _state){
-  //SelectionNotAllAtomsState *state = assert_cast<SelectionNotAllAtomsState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotAllAtomsAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotAllAtomsAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotAllAtomsAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * NotAllAtomsAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
-#undef paramdefaults
-#undef paramreferences
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 13
-#define ACTIONNAME NotAllAtoms
-#define TOKEN "unselect-all-atoms"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect all atoms"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotAllAtomsAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotAllAtomsAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef NOTALLATOMSACTION_HPP_
-#define NOTALLATOMSACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotAllAtomsAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTALLATOMSACTION_HPP_ */
Index: c/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,88 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotAllAtomsInsideCuboidAction.cpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "Descriptors/AtomShapeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "LinearAlgebra/RealSpaceMatrix.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "Shapes/BaseShapes.hpp"
-#include "Shapes/Shape.hpp"
-#include "Shapes/ShapeOps.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp"
-
-// and construct the stuff
-#include "NotAllAtomsInsideCuboidAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-  RealSpaceMatrix RotationMatrix;
-
-  // obtain information
-  getParametersfromValueStorage();
-  RotationMatrix.setRotation(params.Xangle, params.Yangle, params.Zangle);
-
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms inside a rotated " << RotationMatrix << " cuboid at " << params.position << " and extension of " << params.extension << "." << endl);
-  Shape s = translate(transform(stretch(Cuboid(),params.extension),RotationMatrix),params.position);
-
-  World::getInstance().unselectAllAtoms(AtomByShape(s));
-  return Action::state_ptr(new SelectionNotAllAtomsInsideCuboidState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performUndo(Action::state_ptr _state) {
-  SelectionNotAllAtomsInsideCuboidState *state = assert_cast<SelectionNotAllAtomsInsideCuboidState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotAllAtomsInsideCuboidAction::performRedo(Action::state_ptr _state){
-  SelectionNotAllAtomsInsideCuboidState *state = assert_cast<SelectionNotAllAtomsInsideCuboidState*>(_state.get());
-  RealSpaceMatrix RotationMatrix;
-
-  RotationMatrix.setRotation(state->params.Xangle, state->params.Yangle, state->params.Zangle);
-  Shape s = translate(transform(stretch(Cuboid(),state->params.extension),RotationMatrix),state->params.position);
-  World::getInstance().unselectAllAtoms(AtomByShape(s));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotAllAtomsInsideCuboidAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotAllAtomsInsideCuboidAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,35 +1,0 @@
-/*
- * NotAllAtomsInsideCuboidAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-#include "Actions/Values.hpp"
-
-class Vector;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (Vector)(Vector)(double)(double)(double)
-#define paramtokens ("unselect-atoms-inside-cuboid")("position")("angle-x")("angle-y")("angle-z")
-#define paramdescriptions ("dimension of cuboid")("position in R^3 space")("angle of a rotation around x axis")("angle of a rotation around y axis")("angle of a rotation around z axis")
-#undef paramdefaults
-#define paramreferences (extension)(position)(Xangle)(Yangle)(Zangle)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 17
-#define ACTIONNAME NotAllAtomsInsideCuboid
-#define TOKEN "unselect-atoms-inside-cuboid"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect all atoms inside a cuboid"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideCuboidAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotAllAtomsInsideCuboidAction.hpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-#ifndef NOTALLATOMSINSIDECUBOIDACTION_HPP_
-#define NOTALLATOMSINSIDECUBOIDACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotAllAtomsInsideCuboidAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTALLATOMSINSIDECUBOIDACTION_HPP_ */
Index: c/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,82 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotAllAtomsInsideSphereAction.cpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "Descriptors/AtomShapeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "Shapes/BaseShapes.hpp"
-#include "Shapes/Shape.hpp"
-#include "Shapes/ShapeOps.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp"
-
-// and construct the stuff
-#include "NotAllAtomsInsideSphereAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms inside a sphere at " << params.position << " with radius " << params.radius << "." << endl);
-  Shape s = translate(resize(Sphere(),params.radius),params.position);
-  World::getInstance().unselectAllAtoms(AtomByShape(s));
-  return Action::state_ptr(new SelectionNotAllAtomsInsideSphereState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performUndo(Action::state_ptr _state) {
-  SelectionNotAllAtomsInsideSphereState *state = assert_cast<SelectionNotAllAtomsInsideSphereState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotAllAtomsInsideSphereAction::performRedo(Action::state_ptr _state){
-  SelectionNotAllAtomsInsideSphereState *state = assert_cast<SelectionNotAllAtomsInsideSphereState*>(_state.get());
-
-  Shape s = translate(resize(Sphere(),state->params.radius),state->params.position);
-  World::getInstance().unselectAllAtoms(AtomByShape(s));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotAllAtomsInsideSphereAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotAllAtomsInsideSphereAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotAllAtomsInsideSphereAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * NotAllAtomsInsideSphereAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class Vector;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (double)(Vector)
-#define paramtokens ("unselect-atoms-inside-sphere")("position")
-#define paramdescriptions ("radius of sphere")("position in R^3 space")
-#undef paramdefaults
-#define paramreferences (radius)(position)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 18
-#define ACTIONNAME NotAllAtomsInsideSphere
-#define TOKEN "unselect-atoms-inside-sphere"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect all atoms inside a sphere"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsInsideSphereAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotAllAtomsInsideSphereAction.hpp
- *
- *  Created on: Aug 9, 2010
- *      Author: heber
- */
-
-#ifndef NOTALLATOMSINSIDESPHEREACTION_HPP_
-#define NOTALLATOMSINSIDESPHEREACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotAllAtomsInsideSphereAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTALLATOMSINSIDESPHEREACTION_HPP_ */
Index: c/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotAllAtomsOfMoleculeAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "atom.hpp"
-#include "molecule.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotAllAtomsOfMoleculeAction.hpp"
-
-// and construct the stuff
-#include "NotAllAtomsOfMoleculeAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotAllAtomsOfMoleculeAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting all atoms of molecule " << params.mol->getName() << "." << endl);
-  World::getInstance().unselectAtomsOfMolecule(params.mol);
-  return Action::state_ptr(new SelectionNotAllAtomsOfMoleculeState(selectedAtoms, params));
-}
-
-Action::state_ptr SelectionNotAllAtomsOfMoleculeAction::performUndo(Action::state_ptr _state) {
-  SelectionNotAllAtomsOfMoleculeState *state = assert_cast<SelectionNotAllAtomsOfMoleculeState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotAllAtomsOfMoleculeAction::performRedo(Action::state_ptr _state){
-  SelectionNotAllAtomsOfMoleculeState *state = assert_cast<SelectionNotAllAtomsOfMoleculeState*>(_state.get());
-
-  World::getInstance().unselectAtomsOfMolecule(state->params.mol);
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotAllAtomsOfMoleculeAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotAllAtomsOfMoleculeAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * NotAllAtomsOfMoleculeAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const molecule*)
-#define paramtokens ("unselect-molecules-atoms")
-#define paramdescriptions ("molecule")
-#undef paramdefaults
-#define paramreferences (mol)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 22
-#define ACTIONNAME NotAllAtomsOfMolecule
-#define TOKEN "unselect-molecules-atoms"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect all atoms of a molecule"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAllAtomsOfMoleculeAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotAllAtomsOfMoleculeAction.hpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-#ifndef NOTALLATOMSOFMOLECULEACTION_HPP_
-#define NOTALLATOMSOFMOLECULEACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotAllAtomsOfMoleculeAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTALLATOMSOFMOLECULEACTION_HPP_ */
Index: c/Actions/SelectionAction/NotAllMoleculesAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAllMoleculesAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotAllMoleculesAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/MoleculeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotAllMoleculesAction.hpp"
-
-// and construct the stuff
-#include "NotAllMoleculesAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotAllMoleculesAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting all molecules." << endl);
-  World::getInstance().clearMoleculeSelection();
-  return Action::state_ptr(new SelectionNotAllMoleculesState(selectedMolecules,params));
-}
-
-Action::state_ptr SelectionNotAllMoleculesAction::performUndo(Action::state_ptr _state) {
-  SelectionNotAllMoleculesState *state = assert_cast<SelectionNotAllMoleculesState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotAllMoleculesAction::performRedo(Action::state_ptr _state){
-  //SelectionNotAllMoleculesState *state = assert_cast<SelectionNotAllMoleculesState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotAllMoleculesAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotAllMoleculesAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotAllMoleculesAction.def
===================================================================
--- src/Actions/SelectionAction/NotAllMoleculesAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * NotAllMoleculesAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
-#undef paramdefaults
-#undef paramreferences
-
-#define statetypes (std::vector<molecule*>)
-#define statereferences (selectedMolecules)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 14
-#define ACTIONNAME NotAllMolecules
-#define TOKEN "unselect-all-molecules"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect all molecules"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotAllMoleculesAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAllMoleculesAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotAllMoleculesAction.hpp
- *
- *  Created on: Aug 09, 2010
- *      Author: heber
- */
-
-#ifndef NOTALLMOLECULESSACTION_HPP_
-#define NOTALLMOLECULESSACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotAllMoleculesAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTALLMOLECULESSACTION_HPP_ */
Index: c/Actions/SelectionAction/NotAtomByElementAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByElementAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotAtomByElementAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/AtomTypeDescriptor.hpp"
-#include "atom.hpp"
-#include "element.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotAtomByElementAction.hpp"
-
-// and construct the stuff
-#include "NotAtomByElementAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotAtomByElementAction::performCall() {
-  std::vector<atom *> selectedAtoms = World::getInstance().getSelectedAtoms();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting atoms of type " << *params.elemental << endl);
-  World::getInstance().unselectAllAtoms(AtomByType(params.elemental));
-  return Action::state_ptr(new SelectionNotAtomByElementState(selectedAtoms,params));
-}
-
-Action::state_ptr SelectionNotAtomByElementAction::performUndo(Action::state_ptr _state) {
-  SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
-
-  World::getInstance().clearAtomSelection();
-  for(std::vector<atom *>::iterator iter = state->selectedAtoms.begin(); iter != state->selectedAtoms.end(); ++iter)
-    World::getInstance().selectAtom(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotAtomByElementAction::performRedo(Action::state_ptr _state){
-  SelectionNotAtomByElementState *state = assert_cast<SelectionNotAtomByElementState*>(_state.get());
-
-  World::getInstance().unselectAllAtoms(AtomByType(state->params.elemental));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotAtomByElementAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotAtomByElementAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotAtomByElementAction.def
===================================================================
--- src/Actions/SelectionAction/NotAtomByElementAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * NotAtomByElementAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class element;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const element*)
-#define paramtokens ("unselect-atom-by-element")
-#define paramdescriptions ("element")
-#undef paramdefaults
-#define paramreferences (elemental)
-
-#define statetypes (std::vector<atom*>)
-#define statereferences (selectedAtoms)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 15
-#define ACTIONNAME NotAtomByElement
-#define TOKEN "unselect-atom-by-element"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect an atom by element"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotAtomByElementAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByElementAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotAtomByElementAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef NOTATOMBYELEMENTACTION_HPP_
-#define NOTATOMBYELEMENTACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotAtomByElementAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTATOMBYELEMENTACTION_HPP_ */
Index: c/Actions/SelectionAction/NotAtomByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByIdAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotAtomByIdAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotAtomByIdAction.hpp"
-
-// and construct the stuff
-#include "NotAtomByIdAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotAtomByIdAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  if (World::getInstance().isSelected(params.Walker)) {
-    DoLog(1) && (Log() << Verbose(1) << "Unselecting atom " << *params.Walker << endl);
-    World::getInstance().unselectAtom(params.Walker);
-    return Action::state_ptr(new SelectionNotAtomByIdState(params));
-  } else {
-    return Action::success;
-  }
-}
-
-Action::state_ptr SelectionNotAtomByIdAction::performUndo(Action::state_ptr _state) {
-  SelectionNotAtomByIdState *state = assert_cast<SelectionNotAtomByIdState*>(_state.get());
-
-  if (state->params.Walker != NULL)
-    World::getInstance().selectAtom(state->params.Walker);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotAtomByIdAction::performRedo(Action::state_ptr _state){
-  SelectionNotAtomByIdState *state = assert_cast<SelectionNotAtomByIdState*>(_state.get());
-
-  if (state->params.Walker != NULL)
-    World::getInstance().unselectAtom(state->params.Walker);
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotAtomByIdAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotAtomByIdAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotAtomByIdAction.def
===================================================================
--- src/Actions/SelectionAction/NotAtomByIdAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * NotAtomByIdAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class atom;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const atom*)
-#define paramtokens ("unselect-atom-by-id")
-#define paramdescriptions ("atom index")
-#undef paramdefaults
-#define paramreferences (Walker)
-
-#undef statetypes
-#undef statereferences
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 16
-#define ACTIONNAME NotAtomById
-#define TOKEN "unselect-atom-by-id"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect an atom by index"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotAtomByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotAtomByIdAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotAtomByIdAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef NOTATOMBYIDACTION_HPP_
-#define NOTATOMBYIDACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotAtomByIdAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTATOMBYIDACTION_HPP_ */
Index: c/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByFormulaAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,79 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotMoleculeByFormulaAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/MoleculeFormulaDescriptor.hpp"
-#include "molecule.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotMoleculeByFormulaAction.hpp"
-
-// and construct the stuff
-#include "NotMoleculeByFormulaAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotMoleculeByFormulaAction::performCall() {
-  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
-
-  // obtain information
-  getParametersfromValueStorage();
-
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting molecules with chemical formula " << params.formula << ":" << endl);
-  std::vector<molecule *> matchingMolecules = World::getInstance().getAllMolecules(MoleculeByFormula(params.formula));
-  for (std::vector<molecule *>::const_iterator iter = matchingMolecules.begin(); iter != matchingMolecules.end(); ++iter) {
-    DoLog(1) && (Log() << Verbose(1) << "\t" << (*iter)->getId() << ", " << (*iter)->getName() << "." << endl);
-  }
-  World::getInstance().unselectAllMolecules(MoleculeByFormula(params.formula));
-  return Action::state_ptr(new SelectionNotMoleculeByFormulaState(selectedMolecules,params));
-}
-
-Action::state_ptr SelectionNotMoleculeByFormulaAction::performUndo(Action::state_ptr _state) {
-  SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotMoleculeByFormulaAction::performRedo(Action::state_ptr _state){
-  SelectionNotMoleculeByFormulaState *state = assert_cast<SelectionNotMoleculeByFormulaState*>(_state.get());
-
-  World::getInstance().unselectAllMolecules(MoleculeByFormula(state->params.formula));
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotMoleculeByFormulaAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotMoleculeByFormulaAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotMoleculeByFormulaAction.def
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByFormulaAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * NotMoleculeByFormulaAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class molecule;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (std::string)
-#define paramtokens ("unselect-molecule-by-formula")
-#define paramdescriptions ("chemical formula")
-#undef paramdefaults
-#define paramreferences (formula)
-
-#define statetypes (std::vector<molecule*>)
-#define statereferences (selectedMolecules)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 19
-#define ACTIONNAME NotMoleculeByFormula
-#define TOKEN "unselect-molecule-by-formula"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect a molecule by chemical formula"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotMoleculeByFormulaAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByFormulaAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotMoleculeByFormulaAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef NOTMOLECULEBYFORMULAACTION_HPP_
-#define NOTMOLECULEBYFORMULAACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotMoleculeByFormulaAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTMOLECULEBYFORMULAACTION_HPP_ */
Index: c/Actions/SelectionAction/NotMoleculeByIdAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByIdAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,76 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotMoleculeByIdAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "molecule.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotMoleculeByIdAction.hpp"
-
-// and construct the stuff
-#include "NotMoleculeByIdAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotMoleculeByIdAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  if (World::getInstance().isSelected(params.mol)) {
-    DoLog(1) && (Log() << Verbose(1) << "Unselecting molecule " << params.mol->name << endl);
-    World::getInstance().unselectMolecule(params.mol);
-    return Action::state_ptr(new SelectionNotMoleculeByIdState(params));
-  } else {
-    return Action::success;
-  }
-}
-
-Action::state_ptr SelectionNotMoleculeByIdAction::performUndo(Action::state_ptr _state) {
-  SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
-
-  if (state->params.mol != NULL)
-    World::getInstance().selectMolecule(state->params.mol);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotMoleculeByIdAction::performRedo(Action::state_ptr _state){
-  SelectionNotMoleculeByIdState *state = assert_cast<SelectionNotMoleculeByIdState*>(_state.get());
-
-  if (state->params.mol != NULL)
-    World::getInstance().unselectMolecule(state->params.mol);
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotMoleculeByIdAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotMoleculeByIdAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotMoleculeByIdAction.def
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByIdAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,33 +1,0 @@
-/*
- * NotMoleculeByIdAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-class molecule;
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const molecule*)
-#define paramtokens ("unselect-molecule-by-id")
-#define paramdescriptions ("molecule index")
-#undef paramdefaults
-#define paramreferences (mol)
-
-#undef statetypes
-#undef statereferences
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 20
-#define ACTIONNAME NotMoleculeById
-#define TOKEN "unselect-molecule-by-id"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect a molecule by index"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotMoleculeByIdAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeByIdAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotMoleculeByIdAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef NOTMOLECULEBYIDACTION_HPP_
-#define NOTMOLECULEBYIDACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotMoleculeByIdAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTMOLECULEBYIDACTION_HPP_ */
Index: c/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeOfAtomAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,74 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * NotMoleculeOfAtomAction.cpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Descriptors/MoleculeDescriptor.hpp"
-#include "atom.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include <iostream>
-#include <string>
-
-using namespace std;
-
-#include "Actions/SelectionAction/NotMoleculeOfAtomAction.hpp"
-
-// and construct the stuff
-#include "NotMoleculeOfAtomAction.def"
-#include "Action_impl_pre.hpp"
-/** =========== define the function ====================== */
-Action::state_ptr SelectionNotMoleculeOfAtomAction::performCall() {
-  // obtain information
-  getParametersfromValueStorage();
-
-  std::vector<molecule *> selectedMolecules = World::getInstance().getSelectedMolecules();
-  DoLog(1) && (Log() << Verbose(1) << "Unselecting molecule to which " << params.Walker->getName() << " belongs." << endl);
-  World::getInstance().unselectMoleculeOfAtom(params.Walker);
-  return Action::state_ptr(new SelectionNotMoleculeOfAtomState(selectedMolecules, params));
-}
-
-Action::state_ptr SelectionNotMoleculeOfAtomAction::performUndo(Action::state_ptr _state) {
-  SelectionNotMoleculeOfAtomState *state = assert_cast<SelectionNotMoleculeOfAtomState*>(_state.get());
-
-  World::getInstance().clearMoleculeSelection();
-  for(std::vector<molecule *>::iterator iter = state->selectedMolecules.begin(); iter != state->selectedMolecules.end(); ++iter)
-    World::getInstance().selectMolecule(*iter);
-
-  return Action::state_ptr(_state);
-}
-
-Action::state_ptr SelectionNotMoleculeOfAtomAction::performRedo(Action::state_ptr _state){
-  SelectionNotMoleculeOfAtomState *state = assert_cast<SelectionNotMoleculeOfAtomState*>(_state.get());
-
-  World::getInstance().unselectMoleculeOfAtom(state->params.Walker);
-
-  return Action::state_ptr(_state);
-}
-
-bool SelectionNotMoleculeOfAtomAction::canUndo() {
-  return true;
-}
-
-bool SelectionNotMoleculeOfAtomAction::shouldUndo() {
-  return true;
-}
-/** =========== end of function ====================== */
Index: c/Actions/SelectionAction/NotMoleculeOfAtomAction.def
===================================================================
--- src/Actions/SelectionAction/NotMoleculeOfAtomAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * NotMoleculeOfAtomAction.def
- *
- *  Created on: Aug 26, 2010
- *      Author: heber
- */
-
-// all includes and forward declarations necessary for non-integral types below
-
-// i.e. there is an integer with variable name Z that can be found in
-// ValueStorage by the token "Z" -> first column: int, Z, "Z"
-// "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (const atom*)
-#define paramtokens ("unselect-molecule-of-atom")
-#define paramdescriptions ("one atom of desired molecule")
-#undef paramdefaults
-#define paramreferences (Walker)
-
-#define statetypes (std::vector<molecule*>)
-#define statereferences (selectedMolecules)
-
-// some defines for all the names, you may use ACTION, STATE and PARAMS
-#define CATEGORY Selection
-#define MENUNAME "selection"
-#define MENUPOSITION 21
-#define ACTIONNAME NotMoleculeOfAtom
-#define TOKEN "unselect-molecule-of-atom"
-
-
-// finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "unselect a molecule to which a given atom belongs"
-#undef SHORTFORM
Index: c/Actions/SelectionAction/NotMoleculeOfAtomAction.hpp
===================================================================
--- src/Actions/SelectionAction/NotMoleculeOfAtomAction.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,16 +1,0 @@
-/*
- * NotMoleculeOfAtomAction.hpp
- *
- *  Created on: May 12, 2010
- *      Author: heber
- */
-
-#ifndef NOTMOLECULEOFATOMSACTION_HPP_
-#define NOTMOLECULEOFATOMSACTION_HPP_
-
-#include "Actions/Action.hpp"
-
-#include "NotMoleculeOfAtomAction.def"
-#include "Action_impl_header.hpp"
-
-#endif /* NOTMOLECULEOFATOMSACTION_HPP_ */
Index: src/Actions/WorldAction/InputAction.cpp
===================================================================
--- src/Actions/WorldAction/InputAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/WorldAction/InputAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -71,5 +71,5 @@
     // parse the file
     test.open(params.filename);
-    FormatParserStorage::getInstance().get(test, FilenameSuffix);
+    FormatParserStorage::getInstance().load(test, FilenameSuffix);
     test.close();
 
Index: src/Actions/WorldAction/OutputAction.cpp
===================================================================
--- src/Actions/WorldAction/OutputAction.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/WorldAction/OutputAction.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -20,5 +20,5 @@
 #include "Helpers/MemDebug.hpp"
 
-#include "Parser/ChangeTracker.hpp"
+#include "Parser/FormatParserStorage.hpp"
 #include "Helpers/Log.hpp"
 #include "Helpers/Verbose.hpp"
@@ -27,4 +27,6 @@
 #include <iostream>
 #include <string>
+
+#include <boost/filesystem/fstream.hpp>
 
 using namespace std;
@@ -40,6 +42,29 @@
   getParametersfromValueStorage();
 
-  DoLog(0) && (Log() << Verbose(0) << "Saving world to files." << endl);
-  ChangeTracker::getInstance().saveStatus();
+  DoLog(1) && (Log() << Verbose(1) << "Storing world to file " << params.filename << "." << endl);
+
+  // extract suffix
+  std::string FilenameSuffix;
+  std::string FilenamePrefix;
+  if (params.filename.has_filename()) {
+    // get suffix
+    FilenameSuffix = params.filename.extension().substr(1); // remove the prefixed "."
+    FilenamePrefix = params.filename.stem();
+  } else {
+    DoeLog(1) && (eLog() << Verbose(1) << "Output file does not have a suffix, cannot recognize format." << endl);
+    return Action::failure;
+  }
+
+  // store file
+  // parse the file
+  boost::filesystem::ofstream output;
+  output.open(params.filename);
+  if (!output.fail()) {
+    FormatParserStorage::getInstance().saveWorld(output, FilenameSuffix);
+  } else {
+    DoeLog(1) && (eLog() << Verbose(1) << "Could not open file " << params.filename << "." << endl);
+  }
+  output.close();
+
   return Action::success;
 }
Index: src/Actions/WorldAction/OutputAction.def
===================================================================
--- src/Actions/WorldAction/OutputAction.def	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Actions/WorldAction/OutputAction.def	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -7,14 +7,14 @@
 
 // all includes and forward declarations necessary for non-integral types below
-
+#
 
 // i.e. there is an integer with variable name Z that can be found in
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#undef paramtypes
-#undef paramtokens
-#undef paramdescriptions
+#define paramtypes (boost::filesystem::path)
+#define paramtokens ("output")
+#define paramdescriptions ("filename to write to")
 #undef paramdefaults
-#undef paramreferences
+#define paramreferences (filename)
 
 #undef statetypes
@@ -30,4 +30,4 @@
 
 // finally the information stored in the ActionTrait specialization
-#define DESCRIPTION "write output files"
+#define DESCRIPTION "write all atoms to given file"
 #undef SHORTFORM
Index: src/Actions/unittests/ActionRegistryUnitTest.cpp
===================================================================
--- src/Actions/unittests/ActionRegistryUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/ActionRegistryUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,63 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ActionRegistryUnitTest.cpp
+ *
+ *  Created on: Dec 15, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "ActionRegistryUnitTest.hpp"
+
+#include <typeinfo>
+
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionTraits.hpp"
+#include "Actions/OptionRegistry.hpp"
+#include "Actions/OptionTrait.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ActionRegistryTest );
+
+
+void ActionRegistryTest::setUp()
+{};
+
+
+void ActionRegistryTest::tearDown()
+{};
+
+void ActionRegistryTest::CheckDoublyUsedShortforms()
+{
+  std::map <std::string, std::string> result;
+
+  ActionRegistry &AR = ActionRegistry::getInstance();
+  for (ActionRegistry::const_iterator iter = AR.getBeginIter(); iter != AR.getEndIter(); ++iter)
+    if ((iter->second)->Traits.hasShortForm()) {
+      ASSERT(result.find((iter->second)->Traits.getShortForm()) == result.end(),
+          "Short form "+toString((iter->second)->Traits.getShortForm())+
+          " for action "+toString(iter->first)+" already present from "+
+          std::string(result[(iter->second)->Traits.getShortForm()])+"!");
+      result[(iter->second)->Traits.getShortForm()] = (iter->second)->getName();
+    }
+}
Index: src/Actions/unittests/ActionRegistryUnitTest.hpp
===================================================================
--- src/Actions/unittests/ActionRegistryUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/ActionRegistryUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,30 @@
+/*
+ * ActionRegistryUnitTest.hpp
+ *
+ *  Created on: Dec 15, 2010
+ *      Author: heber
+ */
+
+#ifndef ACTIONREGISTRYUNITTEST_HPP_
+#define ACTIONREGISTRYUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/********************************************** Test classes **************************************/
+
+class ActionRegistryTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( ActionRegistryTest) ;
+    CPPUNIT_TEST ( CheckDoublyUsedShortforms );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void CheckDoublyUsedShortforms();
+
+private:
+};
+
+#endif /* ACTIONREGISTRYUNITTEST_HPP_ */
Index: src/Actions/unittests/ActionSequenceUnitTest.cpp
===================================================================
--- src/Actions/unittests/ActionSequenceUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/ActionSequenceUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,285 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ActionSequenceUnitTest.cpp
+ *
+ *  Created on: Dec 17, 2009
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "ActionSequenceUnitTest.hpp"
+#include "Actions/Action.hpp"
+#include "Actions/ActionSequence.hpp"
+#include "Actions/MakroAction.hpp"
+#include "Actions/ActionHistory.hpp"
+#include "Actions/ActionRegistry.hpp"
+
+#include "unittests/DummyUI.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ActionSequenceTest );
+
+/* some neccessary stubs for tests */
+class canUndoActionStub : public Action
+{
+public:
+  canUndoActionStub(const ActionTraits &_trait):
+    Action(_trait,false){}
+  virtual ~canUndoActionStub(){}
+
+  virtual void getParametersfromValueStorage(){
+  }
+
+  virtual Dialog* fillDialog(Dialog *dialog){
+    ASSERT(dialog,"No Dialog given when filling action dialog");
+    return dialog;
+  }
+
+  virtual Action::state_ptr performCall(){
+    return Action::success;
+  }
+  virtual Action::state_ptr performUndo(Action::state_ptr){
+    return Action::success;
+  }
+  virtual Action::state_ptr performRedo(Action::state_ptr){
+    return Action::success;
+  }
+  virtual bool canUndo(){
+    return true;
+  }
+  virtual bool shouldUndo(){
+    return true;
+  }
+};
+
+class cannotUndoActionStub : public Action
+{
+public:
+  cannotUndoActionStub(const ActionTraits &_trait) :
+    Action(_trait,false){}
+  virtual ~cannotUndoActionStub(){}
+
+  virtual void getParametersfromValueStorage(){
+  }
+
+  virtual Dialog* fillDialog(Dialog *dialog){
+    ASSERT(dialog,"No Dialog given when filling action dialog");
+    return dialog;
+  }
+
+  virtual Action::state_ptr performCall(){
+    return Action::success;
+  }
+  virtual Action::state_ptr performUndo(Action::state_ptr){
+    return Action::success;
+  }
+  virtual Action::state_ptr performRedo(Action::state_ptr){
+    return Action::success;
+  }
+  virtual bool canUndo(){
+    return false;
+  }
+  virtual bool shouldUndo(){
+   return true;
+  }
+};
+
+class wasCalledActionStub : public Action
+{
+public:
+  wasCalledActionStub(const ActionTraits &_trait) :
+      Action(_trait,false),
+      called(false)
+  {}
+  virtual ~wasCalledActionStub(){}
+
+  virtual void getParametersfromValueStorage(){
+  }
+
+  virtual Dialog* fillDialog(Dialog *dialog){
+    return dialog;
+  }
+  virtual Action::state_ptr performCall(){
+    called = true;
+    return Action::success;
+  }
+  virtual Action::state_ptr performUndo(Action::state_ptr){
+    called = false;
+    return Action::success;
+  }
+  virtual Action::state_ptr performRedo(Action::state_ptr){
+    called = true;
+    return Action::success;
+  }
+  virtual bool canUndo(){
+    return true;
+  }
+  virtual bool shouldUndo(){
+    return true;
+  }
+  bool wasCalled(){
+    return called;
+  }
+private:
+  bool called;
+};
+
+void ActionSequenceTest::setUp(){
+  hasDescriptor = false;
+  ActionHistory::init();
+  // TODO: find a way to really reset the factory to a clean state in tear-down
+  if(!hasDescriptor){
+    UIFactory::registerFactory(new DummyUIFactory::description());
+    hasDescriptor = true;
+  }
+  UIFactory::makeUserInterface("Dummy");
+  // create some necessary stubs used in this test
+  ActionTraits canUndoTrait("canUndoActionStub");
+  ActionTraits cannotUndoTrait("cannotUndoActionStub");
+  positive1 = new canUndoActionStub(canUndoTrait);
+  positive2 = new canUndoActionStub(canUndoTrait);
+  negative1 = new cannotUndoActionStub(cannotUndoTrait);
+  negative2 = new cannotUndoActionStub(cannotUndoTrait);
+
+  ActionTraits wasCalledTrait("wasCalledActionStub");
+  shouldCall1 = new wasCalledActionStub(wasCalledTrait);
+  shouldCall2 = new wasCalledActionStub(wasCalledTrait);
+  shouldNotCall1 = new wasCalledActionStub(wasCalledTrait);
+  shouldNotCall2 = new wasCalledActionStub(wasCalledTrait);
+
+}
+
+void ActionSequenceTest::tearDown(){
+  delete positive1;
+  delete positive2;
+  delete negative1;
+  delete negative2;
+
+  delete shouldCall1;
+  delete shouldCall2;
+  delete shouldNotCall1;
+  delete shouldNotCall2;
+
+  ActionHistory::purgeInstance();
+  ActionRegistry::purgeInstance();
+  {
+    UIFactory::purgeInstance();
+    hasDescriptor = false;
+  }
+}
+
+void ActionSequenceTest::canUndoTest(){
+  // first section:
+  {
+    // test some combinations
+    {
+      ActionSequence *sequence = new ActionSequence();
+      sequence->addAction(positive1);
+      sequence->addAction(positive2);
+      CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
+      delete sequence;
+    }
+    {
+      ActionSequence *sequence = new ActionSequence();
+      sequence->addAction(positive1);
+      sequence->addAction(negative2);
+      CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
+      delete sequence;
+    }
+    {
+      ActionSequence *sequence = new ActionSequence();
+      sequence->addAction(negative1);
+      sequence->addAction(positive2);
+      CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
+      delete sequence;
+    }
+    {
+      ActionSequence *sequence = new ActionSequence();
+      sequence->addAction(negative1);
+      sequence->addAction(negative2);
+      CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
+      delete sequence;
+    }
+  }
+
+  // second section:
+  {
+    // empty sequence can be undone
+    ActionSequence *sequence = new ActionSequence();
+    CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
+    // if only a positive action is contained it can be undone
+    sequence->addAction(positive1);
+    CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
+    // the single negative action should block the process
+    sequence->addAction(negative1);
+    CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
+    // after removing the negative action all is well again
+    sequence->removeLastAction();
+    CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
+    delete sequence;
+  }
+}
+
+void ActionSequenceTest::doesCallTest(){
+  ActionSequence *sequence = new ActionSequence();
+  sequence->addAction(shouldCall1);
+  sequence->addAction(shouldCall2);
+  sequence->addAction(shouldNotCall1);
+  sequence->addAction(shouldNotCall2);
+  sequence->removeLastAction();
+  sequence->removeLastAction();
+
+  sequence->callAll();
+
+  CPPUNIT_ASSERT_EQUAL(true,shouldCall1->wasCalled());
+  CPPUNIT_ASSERT_EQUAL(true,shouldCall2->wasCalled());
+  CPPUNIT_ASSERT_EQUAL(false,shouldNotCall1->wasCalled());
+  CPPUNIT_ASSERT_EQUAL(false,shouldNotCall2->wasCalled());
+
+  delete sequence;
+}
+
+void ActionSequenceTest::doesUndoTest(){
+  ActionSequence *sequence = new ActionSequence();
+  ActionTraits wasCalledTrait("wasCalledActionStub");
+  wasCalledActionStub *wasCalled1 = new wasCalledActionStub(wasCalledTrait);
+  wasCalledActionStub *wasCalled2 = new wasCalledActionStub(wasCalledTrait);
+  sequence->addAction(wasCalled1);
+  sequence->addAction(wasCalled2);
+
+  ActionTraits MakroTrait("Test MakroAction");
+  MakroAction act(MakroTrait,sequence,false);
+
+  act.call();
+
+  CPPUNIT_ASSERT_EQUAL(true,wasCalled1->wasCalled());
+  CPPUNIT_ASSERT_EQUAL(true,wasCalled2->wasCalled());
+
+  ActionHistory::getInstance().undoLast();
+
+  CPPUNIT_ASSERT_EQUAL(false,wasCalled1->wasCalled());
+  CPPUNIT_ASSERT_EQUAL(false,wasCalled2->wasCalled());
+
+}
+
+
Index: src/Actions/unittests/ActionSequenceUnitTest.hpp
===================================================================
--- src/Actions/unittests/ActionSequenceUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/ActionSequenceUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,44 @@
+/*
+ * ActionSequenceUnitTest.hpp
+ *
+ *  Created on: Dec 17, 2009
+ *      Author: crueger
+ */
+
+#ifndef ACTIONSEQUENCEUNITTEST_HPP_
+#define ACTIONSEQUENCEUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class Action;
+class wasCalledActionStub;
+
+class ActionSequenceTest :  public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( ActionSequenceTest) ;
+  CPPUNIT_TEST ( canUndoTest );
+  CPPUNIT_TEST ( doesCallTest );
+  CPPUNIT_TEST ( doesUndoTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void canUndoTest();
+  void doesCallTest();
+  void doesUndoTest();
+
+private:
+  Action *positive1;
+  Action *positive2;
+  Action *negative1;
+  Action *negative2;
+  wasCalledActionStub* shouldCall1;
+  wasCalledActionStub* shouldCall2;
+  wasCalledActionStub* shouldNotCall1;
+  wasCalledActionStub* shouldNotCall2;
+  bool hasDescriptor;
+};
+
+#endif /* ACTIONSEQUENCEUNITTEST_HPP_ */
Index: src/Actions/unittests/AtomsCalculationUnitTest.cpp
===================================================================
--- src/Actions/unittests/AtomsCalculationUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/AtomsCalculationUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,108 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomsCalculationUnitTest.cpp
+ *
+ *  Created on: Feb 19, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "AtomsCalculationUnitTest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <iostream>
+#include <boost/bind.hpp>
+
+#include "Descriptors/AtomDescriptor.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
+#include "Actions/AtomsCalculation.hpp"
+#include "Actions/AtomsCalculation_impl.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionTraits.hpp"
+
+#include "World.hpp"
+#include "World_calculations.hpp"
+#include "atom.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( AtomsCalculationTest );
+
+// set up and tear down
+void AtomsCalculationTest::setUp(){
+  World::getInstance();
+  for(int i=0;i<ATOM_COUNT;++i){
+    atoms[i]= World::getInstance().createAtom();
+    atomIds[i]= atoms[i]->getId();
+  }
+}
+void AtomsCalculationTest::tearDown(){
+  World::purgeInstance();
+  ActionRegistry::purgeInstance();
+}
+
+// some helper functions
+static bool hasAllIds(std::vector<atomId_t> atoms,atomId_t ids[ATOM_COUNT], std::set<atomId_t> excluded = std::set<atomId_t>()){
+  for(int i=0;i<ATOM_COUNT;++i){
+    atomId_t id = ids[i];
+    if(!excluded.count(id)){
+      std::vector<atomId_t>::iterator iter;
+      bool res=false;
+      for(iter=atoms.begin();iter!=atoms.end();++iter){
+        res |= (*iter) == id;
+      }
+      if(!res) {
+        cout << "Atom " << id << " missing in returned list" << endl;
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+static bool hasNoDuplicates(std::vector<atomId_t> ids){
+  std::set<atomId_t> found;
+  std::vector<atomId_t>::iterator iter;
+  for(iter=ids.begin();iter!=ids.end();++iter){
+    int id = (*iter);
+    if(found.count(id))
+      return false;
+    found.insert(id);
+  }
+  return true;
+}
+
+void AtomsCalculationTest::testCalculateSimple(){
+  ActionTraits FooTrait("FOO");
+  AtomsCalculation<atomId_t> *calc = World::getInstance().calcOnAtoms<atomId_t>(boost::bind(&atom::getId,_1),FooTrait,AllAtoms());
+  std::vector<atomId_t> allIds = (*calc)();
+  CPPUNIT_ASSERT(hasAllIds(allIds,atomIds));
+  CPPUNIT_ASSERT(hasNoDuplicates(allIds));
+}
+
+void AtomsCalculationTest::testCalculateExcluded(){
+  ActionTraits FooTrait("FOO");
+  atomId_t excluded = atomIds[ATOM_COUNT/2];
+  AtomsCalculation<atomId_t> *calc = World::getInstance().calcOnAtoms<atomId_t>(boost::bind(&atom::getId,_1),FooTrait,AllAtoms() && !AtomById(excluded));
+  std::vector<atomId_t> allIds = (*calc)();
+  std::set<atomId_t> excluded_set;
+  excluded_set.insert(excluded);
+  CPPUNIT_ASSERT(hasAllIds(allIds,atomIds,excluded_set));
+  CPPUNIT_ASSERT(hasNoDuplicates(allIds));
+  CPPUNIT_ASSERT_EQUAL((size_t)(ATOM_COUNT-1),allIds.size());
+}
Index: src/Actions/unittests/AtomsCalculationUnitTest.hpp
===================================================================
--- src/Actions/unittests/AtomsCalculationUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/AtomsCalculationUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,39 @@
+/*
+ * AtomsCalculationUnitTest.hpp
+ *
+ *  Created on: Feb 19, 2010
+ *      Author: crueger
+ */
+
+#ifndef ATOMSCALCULATIONUNITTEST_HPP_
+#define ATOMSCALCULATIONUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+// we prefer enum over define
+enum { ATOM_COUNT = 10 };
+
+#include "types.hpp"
+
+class atom;
+
+class AtomsCalculationTest :  public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( AtomsCalculationTest );
+  CPPUNIT_TEST ( testCalculateSimple );
+  CPPUNIT_TEST ( testCalculateExcluded );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void testCalculateSimple();
+  void testCalculateExcluded();
+
+private:
+  atom *atoms [ATOM_COUNT];
+  atomId_t atomIds [ATOM_COUNT];
+};
+
+#endif /* ATOMSCALCULATIONUNITTEST_HPP_ */
Index: src/Actions/unittests/Makefile.am
===================================================================
--- src/Actions/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,58 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  ActionRegistryUnitTest \
+  ActionSequenceUnitTest \
+  AtomsCalculationUnitTest \
+  ManipulateAtomsUnitTest
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+GSLLIBS = \
+	../../LinearAlgebra/libMolecuilderLinearAlgebra-@MOLECUILDER_API_VERSION@.la \
+	../../Exceptions/libMolecuilderExceptions-@MOLECUILDER_API_VERSION@.la \
+	../../Helpers/libMolecuilderHelpers-@MOLECUILDER_API_VERSION@.la \
+	$(BOOST_LIB)
+ALLLIBS = \
+	../../UIElements/libMolecuilderUI-@MOLECUILDER_API_VERSION@.la \
+	../../Actions/libMolecuilderActions-@MOLECUILDER_API_VERSION@.la \
+	${PARSERLIBS} \
+	../../libMolecuilder-@MOLECUILDER_API_VERSION@.la \
+	${GSLLIBS}
+
+PARSERLIBS = ../../Parser/libMolecuilderParser-@MOLECUILDER_API_VERSION@.la
+UILIBS = ../../UIElements/libMolecuilderUI-@MOLECUILDER_API_VERSION@.la  
+
+
+ActionRegistryUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ActionRegistryUnitTest.cpp \
+	ActionRegistryUnitTest.hpp
+ActionRegistryUnitTest_LDADD = ${ALLLIBS}
+
+ActionSequenceUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ActionSequenceUnitTest.cpp \
+	ActionSequenceUnitTest.hpp
+ActionSequenceUnitTest_LDADD = ${ALLLIBS}
+
+AtomsCalculationUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	AtomsCalculationUnitTest.cpp \
+	AtomsCalculationUnitTest.hpp
+AtomsCalculationUnitTest_LDADD = ${ALLLIBS}
+
+ManipulateAtomsUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ManipulateAtomsUnitTest.cpp \
+	ManipulateAtomsUnitTest.hpp
+ManipulateAtomsUnitTest_LDADD = ${ALLLIBS}
+
+
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/Actions/unittests/ManipulateAtomsUnitTest.cpp
===================================================================
--- src/Actions/unittests/ManipulateAtomsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/ManipulateAtomsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,159 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * manipulateAtomsTest.cpp
+ *
+ *  Created on: Feb 18, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <iostream>
+#include <boost/bind.hpp>
+
+#include "Descriptors/AtomDescriptor.hpp"
+#include "Descriptors/AtomIdDescriptor.hpp"
+#include "Actions/ManipulateAtomsProcess.hpp"
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionHistory.hpp"
+
+#include "World.hpp"
+#include "atom.hpp"
+
+#include "unittests/DummyUI.hpp"
+
+#include "ManipulateAtomsUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( manipulateAtomsTest );
+
+// some stubs
+class AtomStub : public atom {
+public:
+  AtomStub(int _id) :
+  atom(),
+  manipulated(false),
+  id(_id)
+  {}
+
+  virtual atomId_t getId(){
+    return id;
+  }
+
+  virtual void doSomething(){
+    manipulated = true;
+  }
+
+  bool manipulated;
+private:
+  atomId_t id;
+};
+
+class countObserver : public Observer{
+public:
+  countObserver() :
+    Observer("countObserver"),
+    count(0)
+    {}
+  virtual ~countObserver(){}
+
+  void update(Observable *){
+    count++;
+  }
+
+  void subjectKilled(Observable *)
+  {}
+
+  int count;
+};
+
+// set up and tear down
+void manipulateAtomsTest::setUp(){
+  hasDescriptor = false;
+  ActionHistory::init();
+  World::getInstance();
+  // TODO: find a way to really reset the factory to a clean state in tear-down
+  if(!hasDescriptor){
+    UIFactory::registerFactory(new DummyUIFactory::description());
+    hasDescriptor = true;
+  }
+  UIFactory::makeUserInterface("Dummy");
+  for(int i=0;i<ATOM_COUNT;++i){
+    atoms[i]= new AtomStub(i);
+    World::getInstance().registerAtom(atoms[i]);
+  }
+}
+void manipulateAtomsTest::tearDown(){
+  World::purgeInstance();
+  ActionRegistry::purgeInstance();
+  ActionHistory::purgeInstance();
+  {
+    UIFactory::purgeInstance();
+    hasDescriptor = false;
+  }
+}
+
+static void operation(atom* _atom){
+  AtomStub *atom = dynamic_cast<AtomStub*>(_atom);
+  CPPUNIT_ASSERT(atom);
+  atom->doSomething();
+}
+
+
+void manipulateAtomsTest::testManipulateSimple(){
+  ManipulateAtomsProcess *proc = World::getInstance().manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms());
+  proc->call();
+  std::vector<atom*> allAtoms = World::getInstance().getAllAtoms(AllAtoms());
+  std::vector<atom*>::iterator iter;
+  for(iter=allAtoms.begin();iter!=allAtoms.end();++iter){
+    AtomStub *atom;
+    atom = dynamic_cast<AtomStub*>(*iter);
+    CPPUNIT_ASSERT(atom);
+    CPPUNIT_ASSERT(atom->manipulated);
+  }
+}
+
+void manipulateAtomsTest::testManipulateExcluded(){
+
+  ManipulateAtomsProcess *proc = World::getInstance().manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms() && !AtomById(ATOM_COUNT/2));
+  proc->call();
+  std::vector<atom*> allAtoms = World::getInstance().getAllAtoms(AllAtoms());
+  std::vector<atom*>::iterator iter;
+  for(iter=allAtoms.begin();iter!=allAtoms.end();++iter){
+    AtomStub *atom;
+    atom = dynamic_cast<AtomStub*>(*iter);
+    CPPUNIT_ASSERT(atom);
+    if(atom->getId()!=(int)ATOM_COUNT/2)
+      CPPUNIT_ASSERT(atom->manipulated);
+    else
+      CPPUNIT_ASSERT(!atom->manipulated);
+  }
+}
+
+void manipulateAtomsTest::testObserver(){
+  countObserver *obs = new countObserver();
+  World::getInstance().signOn(obs);
+  ManipulateAtomsProcess *proc = World::getInstance().manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms());
+  proc->call();
+
+  CPPUNIT_ASSERT_EQUAL(1,obs->count);
+  World::getInstance().signOff(obs);
+  delete obs;
+}
Index: src/Actions/unittests/ManipulateAtomsUnitTest.hpp
===================================================================
--- src/Actions/unittests/ManipulateAtomsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Actions/unittests/ManipulateAtomsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,39 @@
+/*
+ * manipulateAtomsTest.hpp
+ *
+ *  Created on: Feb 18, 2010
+ *      Author: crueger
+ */
+
+#ifndef MANIPULATEATOMSTEST_HPP_
+#define MANIPULATEATOMSTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+// we prefer enum over define
+enum { ATOM_COUNT = 10 };
+
+class atom;
+
+class manipulateAtomsTest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( manipulateAtomsTest );
+  CPPUNIT_TEST ( testManipulateSimple );
+  CPPUNIT_TEST ( testManipulateExcluded );
+  CPPUNIT_TEST ( testObserver );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void testManipulateSimple();
+  void testManipulateExcluded();
+  void testObserver();
+
+private:
+  atom *atoms [ATOM_COUNT];
+  bool hasDescriptor;
+};
+
+#endif /* MANIPULATEATOMSTEST_HPP_ */
Index: src/Descriptors/AtomOfMoleculeSelectionDescriptor.cpp
===================================================================
--- src/Descriptors/AtomOfMoleculeSelectionDescriptor.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/AtomOfMoleculeSelectionDescriptor.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,64 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomOfMoleculeSelectionDescriptor.cpp
+ *
+ *  Created on: Dec 11, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/AtomOfMoleculeSelectionDescriptor.hpp"
+#include "Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp"
+
+#include "molecule.hpp"
+
+#include "Helpers/helpers.hpp"
+
+AtomOfMoleculeSelectionDescriptor_impl::AtomOfMoleculeSelectionDescriptor_impl(){}
+
+AtomOfMoleculeSelectionDescriptor_impl::~AtomOfMoleculeSelectionDescriptor_impl(){}
+
+bool AtomOfMoleculeSelectionDescriptor_impl::predicate(std::pair<atomId_t,atom*> atom){
+  return World::getInstance().isSelected(atom.second->getMolecule());
+}
+
+atom* AtomOfMoleculeSelectionDescriptor_impl::find(){
+  World &instance = World::getInstance();
+  for (World::MoleculeSelectionIterator iter = instance.beginMoleculeSelection();
+      iter != instance.endMoleculeSelection();
+      ++iter) {
+    if (iter->second->begin() != iter->second->end())
+      return *(iter->second->begin());
+  }
+  return 0;
+}
+
+std::vector<atom*> AtomOfMoleculeSelectionDescriptor_impl::findAll(){
+  std::vector<atom*> res;
+  World &instance = World::getInstance();
+  for (World::MoleculeSelectionIterator iter = instance.beginMoleculeSelection();
+      iter != instance.endMoleculeSelection();
+      ++iter) {
+    transform(iter->second->begin(),
+              iter->second->end(),
+              back_inserter(res),
+              _take<atom*,molecule::atomSet::value_type>::get);
+  }
+  return res;
+}
+
+AtomDescriptor AtomsByMoleculeSelection(){
+  return AtomDescriptor(AtomDescriptor::impl_ptr(new AtomOfMoleculeSelectionDescriptor_impl()));
+}
Index: src/Descriptors/AtomOfMoleculeSelectionDescriptor.hpp
===================================================================
--- src/Descriptors/AtomOfMoleculeSelectionDescriptor.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/AtomOfMoleculeSelectionDescriptor.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,15 @@
+/*
+ * AtomOfMoleculeSelectionDescriptor.hpp
+ *
+ *  Created on: Dec 11, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMOFMOLECULESELECTIONDESCRIPTOR_HPP_
+#define ATOMOFMOLECULESELECTIONDESCRIPTOR_HPP_
+
+#include "Descriptors/AtomDescriptor.hpp"
+
+AtomDescriptor AtomsByMoleculeSelection();
+
+#endif /* ATOMOFMOLECULESELECTIONDESCRIPTOR_HPP_ */
Index: src/Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp
===================================================================
--- src/Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,24 @@
+/*
+ * AtomOfMoleculeSelectionDescriptor_impl.hpp
+ *
+ *  Created on: Dec 11, 2010
+ *      Author: heber
+ */
+
+#ifndef ATOMOFMOLECULESELECTIONDESCRIPTOR_IMPL_HPP_
+#define ATOMOFMOLECULESELECTIONDESCRIPTOR_IMPL_HPP_
+
+#include "Descriptors/AtomDescriptor_impl.hpp"
+
+class AtomOfMoleculeSelectionDescriptor_impl : public AtomDescriptor_impl{
+public:
+  AtomOfMoleculeSelectionDescriptor_impl();
+  virtual ~AtomOfMoleculeSelectionDescriptor_impl();
+  bool predicate(std::pair<atomId_t,atom*> atom);
+protected:
+  // need to overide more than the standard methods to make this fast
+  virtual atom* find();
+  virtual std::vector<atom*> findAll();
+};
+
+#endif /* ATOMOFMOLECULESELECTIONDESCRIPTOR_IMPL_HPP_ */
Index: src/Descriptors/MoleculeNameDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeNameDescriptor.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Descriptors/MoleculeNameDescriptor.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -53,5 +53,10 @@
 
 vector<molecule*> MoleculeNameDescriptor_impl::findAll(){
-  molecule *res = find();
-  return (res)?(vector<molecule*>(1,res)):(vector<molecule*>());
+  vector<molecule *> foundMolecules;
+  World::MoleculeSet &molecules = getMolecules();
+  World::MoleculeSet::iterator res = molecules.begin();
+  for (; res != molecules.end(); res++)
+    if (res->second->name == name)
+      foundMolecules.push_back(res->second);
+  return foundMolecules;
 }
Index: src/Descriptors/MoleculeOfAtomSelectionDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeOfAtomSelectionDescriptor.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/MoleculeOfAtomSelectionDescriptor.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,74 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeOfAtomSelectionDescriptor.cpp
+ *
+ *  Created on: Dec 11, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Descriptors/MoleculeOfAtomSelectionDescriptor.hpp"
+#include "Descriptors/MoleculeOfAtomSelectionDescriptor_impl.hpp"
+
+#include "Helpers/helpers.hpp"
+
+#include "molecule.hpp"
+#include "World.hpp"
+
+MoleculeOfAtomSelectionDescriptor_impl::MoleculeOfAtomSelectionDescriptor_impl(){}
+
+MoleculeOfAtomSelectionDescriptor_impl::~MoleculeOfAtomSelectionDescriptor_impl(){}
+
+bool MoleculeOfAtomSelectionDescriptor_impl::predicate(std::pair<moleculeId_t,molecule*> molecule){
+  for (molecule::const_iterator iter = molecule.second->begin();
+      iter != molecule.second->end();
+      ++iter) {
+    if (World::getInstance().isSelected(*iter))
+      return true;
+  }
+  return false;
+}
+
+molecule* MoleculeOfAtomSelectionDescriptor_impl::find(){
+  World &instance = World::getInstance();
+  for (World::AtomSelectionIterator iter = instance.beginAtomSelection();
+      iter != instance.endAtomSelection();
+      ++iter) {
+    if (iter->second->getMolecule() != NULL)
+      return iter->second->getMolecule();
+  }
+  return 0;
+}
+
+std::vector<molecule*> MoleculeOfAtomSelectionDescriptor_impl::findAll(){
+  std::vector<molecule*> res;
+  std::set<molecule*> temp;
+  std::pair< std::set<molecule*>::iterator, bool> inserter;
+  World &instance = World::getInstance();
+  for (World::AtomSelectionIterator iter = instance.beginAtomSelection();
+      iter != instance.endAtomSelection();
+      ++iter) {
+    if (iter->second->getMolecule() != NULL) {
+      inserter = temp.insert( iter->second->getMolecule() );
+      if (inserter.second)
+        res.push_back(iter->second->getMolecule());
+    }
+  }
+  return res;
+}
+
+MoleculeDescriptor MoleculesByAtomSelection(){
+  return MoleculeDescriptor(MoleculeDescriptor::impl_ptr(new MoleculeOfAtomSelectionDescriptor_impl()));
+}
Index: src/Descriptors/MoleculeOfAtomSelectionDescriptor.hpp
===================================================================
--- src/Descriptors/MoleculeOfAtomSelectionDescriptor.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/MoleculeOfAtomSelectionDescriptor.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,15 @@
+/*
+ * MoleculeOfAtomSelectionDescriptor.hpp
+ *
+ *  Created on: Dec 11, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEOFATOMSELECTIONDESCRIPTOR_HPP_
+#define MOLECULEOFATOMSELECTIONDESCRIPTOR_HPP_
+
+#include "Descriptors/MoleculeDescriptor.hpp"
+
+MoleculeDescriptor MoleculesByAtomSelection();
+
+#endif /* MOLECULEOFATOMSELECTIONDESCRIPTOR_HPP_ */
Index: src/Descriptors/MoleculeOfAtomSelectionDescriptor_impl.hpp
===================================================================
--- src/Descriptors/MoleculeOfAtomSelectionDescriptor_impl.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/MoleculeOfAtomSelectionDescriptor_impl.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,24 @@
+/*
+ * MoleculeOfAtomSelectionDescriptor_impl.hpp
+ *
+ *  Created on: Jul 16, 2010
+ *      Author: crueger
+ */
+
+#ifndef MOLECULEOFATOMSELECTIONDESCRIPTOR_IMPL_HPP_
+#define MOLECULEOFATOMSELECTIONDESCRIPTOR_IMPL_HPP_
+
+#include "Descriptors/MoleculeDescriptor_impl.hpp"
+
+class MoleculeOfAtomSelectionDescriptor_impl : public MoleculeDescriptor_impl{
+public:
+  MoleculeOfAtomSelectionDescriptor_impl();
+  virtual ~MoleculeOfAtomSelectionDescriptor_impl();
+  bool predicate(std::pair<moleculeId_t,molecule*> molecule);
+protected:
+  // need to overide more than the standard methods to make this fast
+  virtual molecule* find();
+  virtual std::vector<molecule*> findAll();
+};
+
+#endif /* MOLECULEOFATOMSELECTIONDESCRIPTOR_IMPL_HPP_ */
Index: src/Descriptors/MoleculeOrderDescriptor.cpp
===================================================================
--- src/Descriptors/MoleculeOrderDescriptor.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/MoleculeOrderDescriptor.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,76 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeOrderDescriptor.cpp
+ *
+ *  Created on: Dec 7, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "MoleculeOrderDescriptor.hpp"
+#include "MoleculeOrderDescriptor_impl.hpp"
+
+#include "molecule.hpp"
+
+using namespace std;
+
+
+MoleculeOrderDescriptor_impl::MoleculeOrderDescriptor_impl(int _id) :
+  id(_id)
+{}
+
+MoleculeOrderDescriptor_impl::~MoleculeOrderDescriptor_impl()
+{}
+
+bool MoleculeOrderDescriptor_impl::predicate(std::pair<moleculeId_t,molecule*> _molecule)
+{
+  molecule *mol = find();
+  return (mol == _molecule.second);
+}
+
+MoleculeDescriptor MoleculeByOrder(int id){
+  return MoleculeDescriptor(MoleculeDescriptor::impl_ptr(new MoleculeOrderDescriptor_impl(id)));
+}
+
+molecule *MoleculeOrderDescriptor_impl::find(){
+  World::MoleculeSet &molecules = getMolecules();
+
+  int i=0;
+  molecule *mol = NULL;
+  if (id > 0) {
+    World::MoleculeSet::const_iterator res = molecules.begin();
+    for (; res != molecules.end(); ++res) {
+      ++i;
+      if (id == i)
+        break;
+    }
+    mol = res->second;
+  } else {
+    World::MoleculeSet::const_reverse_iterator res = molecules.rbegin();
+    for (; res != molecules.rend(); --res) {
+      --i;
+      if (id == i)
+        break;
+    }
+    mol = res->second;
+  }
+
+  return mol;
+}
+
+vector<molecule*> MoleculeOrderDescriptor_impl::findAll(){
+  molecule *res = find();
+  return (res)?(vector<molecule*>(1,res)):(vector<molecule*>());
+}
Index: src/Descriptors/MoleculeOrderDescriptor.hpp
===================================================================
--- src/Descriptors/MoleculeOrderDescriptor.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/MoleculeOrderDescriptor.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+/*
+ * MoleculeOrderDescriptor.hpp
+ *
+ *  Created on: Dec 7, 2010
+ *      Author: heber
+ */
+
+#ifndef MOLECULEORDERDESCRIPTOR_HPP_
+#define MOLECULEORDERDESCRIPTOR_HPP_
+
+#include "Helpers/defs.hpp"
+#include "Descriptors/MoleculeDescriptor.hpp"
+
+MoleculeDescriptor MoleculeByOrder(int id);
+
+#endif /* MOLECULEORDERDESCRIPTOR_HPP_ */
Index: src/Descriptors/MoleculeOrderDescriptor_impl.hpp
===================================================================
--- src/Descriptors/MoleculeOrderDescriptor_impl.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/MoleculeOrderDescriptor_impl.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,21 @@
+#ifndef MOLECULEORDERDESCRIPTOR_IMPL_HPP
+#define MOLECULEORDERDESCRIPTOR_IMPL_HPP
+
+#include "Descriptors/MoleculeDescriptor_impl.hpp"
+
+class MoleculeOrderDescriptor_impl : public MoleculeDescriptor_impl
+{
+public:
+  MoleculeOrderDescriptor_impl(int _id);
+  virtual ~MoleculeOrderDescriptor_impl();
+
+  bool predicate(std::pair<moleculeId_t,molecule*> _molecule);
+
+protected:
+  virtual molecule *find();
+  virtual std::vector<molecule*> findAll();
+private:
+  int id;
+};
+
+#endif //MOLECULEORDERDESCRIPTOR_IMPL_HPP
Index: src/Descriptors/unittests/AtomDescriptorUnitTest.cpp
===================================================================
--- src/Descriptors/unittests/AtomDescriptorUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/unittests/AtomDescriptorUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,169 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AtomDescriptorUnitTest.cpp
+ *
+ *  Created on: Feb 9, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "AtomDescriptorUnitTest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <iostream>
+
+#include <Descriptors/AtomDescriptor.hpp>
+#include <Descriptors/AtomIdDescriptor.hpp>
+
+#include "World.hpp"
+#include "atom.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( AtomDescriptorTest );
+
+// set up and tear down
+void AtomDescriptorTest::setUp(){
+  World::getInstance();
+  for(int i=0;i<ATOM_COUNT;++i){
+    atoms[i]= World::getInstance().createAtom();
+    atomIds[i]= atoms[i]->getId();
+  }
+}
+
+void AtomDescriptorTest::tearDown(){
+  World::purgeInstance();
+}
+
+// some helper functions
+static bool hasAllAtoms(std::vector<atom*> atoms,atomId_t ids[ATOM_COUNT], std::set<atomId_t> excluded = std::set<atomId_t>()){
+  for(int i=0;i<ATOM_COUNT;++i){
+    atomId_t id = ids[i];
+    if(!excluded.count(id)){
+      std::vector<atom*>::iterator iter;
+      bool res=false;
+      for(iter=atoms.begin();iter!=atoms.end();++iter){
+        res |= (*iter)->getId() == id;
+      }
+      if(!res) {
+        cout << "Atom " << id << " missing in returned list" << endl;
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+static bool hasNoDuplicateAtoms(std::vector<atom*> atoms){
+  std::set<atomId_t> found;
+  std::vector<atom*>::iterator iter;
+  for(iter=atoms.begin();iter!=atoms.end();++iter){
+    int id = (*iter)->getId();
+    if(found.count(id))
+      return false;
+    found.insert(id);
+  }
+  return true;
+}
+
+
+void AtomDescriptorTest::AtomBaseSetsTest(){
+  std::vector<atom*> allAtoms = World::getInstance().getAllAtoms(AllAtoms());
+  CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(allAtoms,atomIds));
+  CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(allAtoms));
+
+  std::vector<atom*> noAtoms = World::getInstance().getAllAtoms(NoAtoms());
+  CPPUNIT_ASSERT_EQUAL( true , noAtoms.empty());
+}
+void AtomDescriptorTest::AtomIdTest(){
+  // test Atoms from boundaries and middle of the set
+  atom* testAtom;
+  testAtom = World::getInstance().getAtom(AtomById(atomIds[0]));
+  CPPUNIT_ASSERT(testAtom);
+  CPPUNIT_ASSERT_EQUAL( atomIds[0], testAtom->getId());
+  testAtom = World::getInstance().getAtom(AtomById(atomIds[ATOM_COUNT/2]));
+  CPPUNIT_ASSERT(testAtom);
+  CPPUNIT_ASSERT_EQUAL( atomIds[ATOM_COUNT/2], testAtom->getId());
+  testAtom = World::getInstance().getAtom(AtomById(atomIds[ATOM_COUNT-1]));
+  CPPUNIT_ASSERT(testAtom);
+  CPPUNIT_ASSERT_EQUAL( atomIds[ATOM_COUNT-1], testAtom->getId());
+
+  // find some ID that has not been created
+  atomId_t outsideId=0;
+  bool res = false;
+  for(outsideId=0;!res;++outsideId) {
+    res = true;
+    for(int i = 0; i < ATOM_COUNT; ++i){
+      res &= atomIds[i]!=outsideId;
+    }
+  }
+  // test from outside of set
+  testAtom = World::getInstance().getAtom(AtomById(outsideId));
+  CPPUNIT_ASSERT(!testAtom);
+}
+void AtomDescriptorTest::AtomCalcTest(){
+  // test some elementary set operations
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(AllAtoms()||NoAtoms());
+    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
+  }
+
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(NoAtoms()||AllAtoms());
+    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
+  }
+
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(NoAtoms()&&AllAtoms());
+    CPPUNIT_ASSERT_EQUAL( true , testAtoms.empty());
+  }
+
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(AllAtoms()&&NoAtoms());
+    CPPUNIT_ASSERT_EQUAL( true , testAtoms.empty());
+  }
+
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(!AllAtoms());
+    CPPUNIT_ASSERT_EQUAL( true , testAtoms.empty());
+  }
+
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(!NoAtoms());
+    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
+  }
+  // exclude and include some atoms
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(AllAtoms()&&(!AtomById(atomIds[ATOM_COUNT/2])));
+    std::set<atomId_t> excluded;
+    excluded.insert(atomIds[ATOM_COUNT/2]);
+    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds,excluded));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
+    CPPUNIT_ASSERT_EQUAL( (size_t)(ATOM_COUNT-1), testAtoms.size());
+  }
+
+  {
+    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(NoAtoms()||(AtomById(atomIds[ATOM_COUNT/2])));
+    CPPUNIT_ASSERT_EQUAL( (size_t)1, testAtoms.size());
+    CPPUNIT_ASSERT_EQUAL( atomIds[ATOM_COUNT/2], testAtoms[0]->getId());
+  }
+}
Index: src/Descriptors/unittests/AtomDescriptorUnitTest.hpp
===================================================================
--- src/Descriptors/unittests/AtomDescriptorUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/unittests/AtomDescriptorUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,41 @@
+/*
+ * AtomDescriptorUnitTest.hpp
+ *
+ *  Created on: Feb 9, 2010
+ *      Author: crueger
+ */
+
+#ifndef ATOMDESCRIPTORUNITTEST_HPP_
+#define ATOMDESCRIPTORUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "types.hpp"
+
+// we prefer enum over define
+enum { ATOM_COUNT = 10 };
+
+class atom;
+
+class AtomDescriptorTest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( AtomDescriptorTest );
+  CPPUNIT_TEST ( AtomBaseSetsTest );
+  CPPUNIT_TEST ( AtomIdTest );
+  CPPUNIT_TEST ( AtomCalcTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void AtomBaseSetsTest();
+  void AtomIdTest();
+  void AtomCalcTest();
+
+private:
+  atom *atoms [ATOM_COUNT];
+  atomId_t atomIds [ATOM_COUNT];
+};
+
+#endif /* ATOMDESCRIPTORUNITTEST_HPP_ */
Index: src/Descriptors/unittests/Makefile.am
===================================================================
--- src/Descriptors/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,46 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  AtomDescriptorUnitTest \
+  MoleculeDescriptorTest
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+GSLLIBS = \
+	../../LinearAlgebra/libMolecuilderLinearAlgebra-@MOLECUILDER_API_VERSION@.la \
+	../../Exceptions/libMolecuilderExceptions-@MOLECUILDER_API_VERSION@.la \
+	../../Helpers/libMolecuilderHelpers-@MOLECUILDER_API_VERSION@.la \
+	$(BOOST_LIB)
+ALLLIBS = \
+	../../UIElements/libMolecuilderUI-@MOLECUILDER_API_VERSION@.la \
+	../../Actions/libMolecuilderActions-@MOLECUILDER_API_VERSION@.la \
+	${PARSERLIBS} \
+	../../libMolecuilder-@MOLECUILDER_API_VERSION@.la \
+	${GSLLIBS}
+
+PARSERLIBS = ../../Parser/libMolecuilderParser-@MOLECUILDER_API_VERSION@.la
+UILIBS = ../../UIElements/libMolecuilderUI-@MOLECUILDER_API_VERSION@.la  
+
+
+AtomDescriptorUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	AtomDescriptorUnitTest.cpp \
+	AtomDescriptorUnitTest.hpp
+AtomDescriptorUnitTest_LDADD = ${ALLLIBS}
+
+MoleculeDescriptorTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	MoleculeDescriptorUnitTest.cpp \
+	MoleculeDescriptorUnitTest.hpp
+MoleculeDescriptorTest_LDADD = ${ALLLIBS}
+
+
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/Descriptors/unittests/MoleculeDescriptorUnitTest.cpp
===================================================================
--- src/Descriptors/unittests/MoleculeDescriptorUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/unittests/MoleculeDescriptorUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,170 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MoleculeDescriptorTest.cpp
+ *
+ *  Created on: Mar 4, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <iostream>
+
+#include <Descriptors/MoleculeDescriptor.hpp>
+#include <Descriptors/MoleculeIdDescriptor.hpp>
+
+#include "World.hpp"
+#include "molecule.hpp"
+
+#include "MoleculeDescriptorUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( MoleculeDescriptorTest );
+
+// set up and tear down
+void MoleculeDescriptorTest::setUp(){
+  World::getInstance();
+  for(int i=0;i<MOLECULE_COUNT;++i){
+    molecules[i]= World::getInstance().createMolecule();
+    moleculeIds[i]= molecules[i]->getId();
+  }
+}
+
+void MoleculeDescriptorTest::tearDown(){
+  World::purgeInstance();
+}
+
+// some helper functions
+static bool hasAllMolecules(std::vector<molecule*> molecules,moleculeId_t ids[MOLECULE_COUNT], std::set<moleculeId_t> excluded = std::set<moleculeId_t>()){
+  for(int i=0;i<MOLECULE_COUNT;++i){
+    moleculeId_t id = ids[i];
+    if(!excluded.count(id)){
+      std::vector<molecule*>::iterator iter;
+      bool res=false;
+      for(iter=molecules.begin();iter!=molecules.end();++iter){
+        res |= (*iter)->getId() == id;
+      }
+      if(!res) {
+        cout << "Molecule " << id << " missing in returned list" << endl;
+        return false;
+      }
+    }
+  }
+  return true;
+}
+
+static bool hasNoDuplicateMolecules(std::vector<molecule*> molecules){
+  std::set<moleculeId_t> found;
+  std::vector<molecule*>::iterator iter;
+  for(iter=molecules.begin();iter!=molecules.end();++iter){
+    int id = (*iter)->getId();
+    if(found.count(id))
+      return false;
+    found.insert(id);
+  }
+  return true;
+}
+
+
+void MoleculeDescriptorTest::MoleculeBaseSetsTest(){
+  std::vector<molecule*> allMolecules = World::getInstance().getAllMolecules(AllMolecules());
+  CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(allMolecules,moleculeIds));
+  CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(allMolecules));
+
+  std::vector<molecule*> noMolecules = World::getInstance().getAllMolecules(NoMolecules());
+  CPPUNIT_ASSERT_EQUAL( true , noMolecules.empty());
+}
+void MoleculeDescriptorTest::MoleculeIdTest(){
+  // test Molecules from boundaries and middle of the set
+  molecule* testMolecule;
+  testMolecule = World::getInstance().getMolecule(MoleculeById(moleculeIds[0]));
+  CPPUNIT_ASSERT(testMolecule);
+  CPPUNIT_ASSERT_EQUAL( moleculeIds[0], testMolecule->getId());
+  testMolecule = World::getInstance().getMolecule(MoleculeById(moleculeIds[MOLECULE_COUNT/2]));
+  CPPUNIT_ASSERT(testMolecule);
+  CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT/2], testMolecule->getId());
+  testMolecule = World::getInstance().getMolecule(MoleculeById(moleculeIds[MOLECULE_COUNT-1]));
+  CPPUNIT_ASSERT(testMolecule);
+  CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT-1], testMolecule->getId());
+
+  // find some ID that has not been created
+  moleculeId_t outsideId=0;
+  bool res = false;
+  for(outsideId=0;!res;++outsideId) {
+    res = true;
+    for(int i = 0; i < MOLECULE_COUNT; ++i){
+      res &= moleculeIds[i]!=outsideId;
+    }
+  }
+  // test from outside of set
+  testMolecule = World::getInstance().getMolecule(MoleculeById(outsideId));
+  CPPUNIT_ASSERT(!testMolecule);
+}
+void MoleculeDescriptorTest::MoleculeCalcTest(){
+  // test some elementary set operations
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(AllMolecules()||NoMolecules());
+    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
+  }
+
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(NoMolecules()||AllMolecules());
+    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
+  }
+
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(NoMolecules()&&AllMolecules());
+    CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty());
+  }
+
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(AllMolecules()&&NoMolecules());
+    CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty());
+  }
+
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(!AllMolecules());
+    CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty());
+  }
+
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(!NoMolecules());
+    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
+  }
+
+  // exclude and include some molecules
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(AllMolecules()&&(!MoleculeById(moleculeIds[MOLECULE_COUNT/2])));
+    std::set<moleculeId_t> excluded;
+    excluded.insert(moleculeIds[MOLECULE_COUNT/2]);
+    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds,excluded));
+    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
+    CPPUNIT_ASSERT_EQUAL( (size_t)(MOLECULE_COUNT-1), testMolecules.size());
+  }
+
+  {
+    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(NoMolecules()||(MoleculeById(moleculeIds[MOLECULE_COUNT/2])));
+    CPPUNIT_ASSERT_EQUAL( (size_t)1, testMolecules.size());
+    CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT/2], testMolecules[0]->getId());
+  }
+}
Index: src/Descriptors/unittests/MoleculeDescriptorUnitTest.hpp
===================================================================
--- src/Descriptors/unittests/MoleculeDescriptorUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Descriptors/unittests/MoleculeDescriptorUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,41 @@
+/*
+ * MoleculeDescriptorTest.hpp
+ *
+ *  Created on: Mar 4, 2010
+ *      Author: crueger
+ */
+
+#ifndef MOLECULEDESCRIPTORTEST_HPP_
+#define MOLECULEDESCRIPTORTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "types.hpp"
+
+// we prefer enum over define
+enum { MOLECULE_COUNT = 10 };
+
+class molecule;
+
+class MoleculeDescriptorTest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( MoleculeDescriptorTest );
+  CPPUNIT_TEST ( MoleculeBaseSetsTest );
+  CPPUNIT_TEST ( MoleculeIdTest );
+  CPPUNIT_TEST ( MoleculeCalcTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void MoleculeBaseSetsTest();
+  void MoleculeIdTest();
+  void MoleculeCalcTest();
+
+private:
+  molecule *molecules [MOLECULE_COUNT];
+  moleculeId_t moleculeIds [MOLECULE_COUNT];
+};
+
+#endif /* MOLECULEDESCRIPTORTEST_HPP_ */
Index: src/Helpers/MemDebug.cpp
===================================================================
--- src/Helpers/MemDebug.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Helpers/MemDebug.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -380,5 +380,7 @@
   // mark the block as not in the list (will be changed by addEntry)
   entry->isIgnored = true;
-  Memory::addEntry(entry);
+  if (line != 0)  { // indicator that we do not know the source
+    Memory::addEntry(entry);
+  }
 
   // get the checksum...
@@ -424,5 +426,7 @@
   // mark the block as not in the list (will be changed by addEntry)
   entry->isIgnored = true;
-  Memory::addEntry(entry);
+  if (line != 0)  { // indicator that we do not know the source
+    Memory::addEntry(entry);
+  }
 
   // get the checksum...
@@ -505,5 +509,5 @@
 void operator delete(void *ptr) throw() {
   if(!ptr){
-    cerr << "Warning: Deleting NULL pointer" << endl;
+    //cerr << "Warning: Deleting NULL pointer" << endl;
     return;
   }
Index: src/Helpers/MemDebug.hpp
===================================================================
--- src/Helpers/MemDebug.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Helpers/MemDebug.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -52,5 +52,4 @@
 #include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
-#include <boost/program_options.hpp>
 
 
Index: src/Helpers/unittests/InfoUnitTest.cpp
===================================================================
--- src/Helpers/unittests/InfoUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Helpers/unittests/InfoUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,63 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * InfoUnitTest.cpp
+ *
+ *  Created on: Nov 25, 2009
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <iostream>
+#include <stdio.h>
+
+#include "Helpers/Info.hpp"
+#include "Helpers/Log.hpp"
+
+#include "InfoUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( InfoTest );
+
+
+void InfoTest::setUp()
+{
+};
+
+
+void InfoTest::tearDown()
+{
+  logger::purgeInstance();
+};
+
+/** UnitTest for FunctionTest().
+ */
+void InfoTest::FunctionTest()
+{
+  const char *msg = __func__;
+  class Info test(msg);
+
+  CPPUNIT_ASSERT_EQUAL( msg , test.FunctionName );
+  CPPUNIT_ASSERT_EQUAL( 1, test.verbosity );
+};
Index: src/Helpers/unittests/InfoUnitTest.hpp
===================================================================
--- src/Helpers/unittests/InfoUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Helpers/unittests/InfoUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * InfoUnitTest.hpp
+ *
+ *  Created on: Nov 25, 2009
+ *      Author: heber
+ */
+
+#ifndef INFOUNITTEST_HPP_
+#define INFOUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class info;
+
+/********************************************** Test classes **************************************/
+
+class InfoTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( InfoTest) ;
+    CPPUNIT_TEST ( FunctionTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void FunctionTest();
+
+private:
+
+};
+
+#endif /* INFOUNITTEST_HPP_ */
Index: src/Helpers/unittests/LogUnitTest.cpp
===================================================================
--- src/Helpers/unittests/LogUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Helpers/unittests/LogUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,68 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * logunittest.cpp
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "Helpers/Log.hpp"
+#include "Helpers/defs.hpp"
+#include "Helpers/Verbose.hpp"
+
+#include "LogUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( LogTest );
+
+
+void LogTest::setUp()
+{
+};
+
+void LogTest::tearDown()
+{
+  logger::purgeInstance();
+  errorLogger::purgeInstance();
+};
+
+/**
+ * UnitTest for log()
+ */
+void LogTest::logTest()
+{
+  logger::getInstance().setVerbosity(2);
+  DoLog(0) && (Log() << Verbose(0) << "Verbosity level is set to 2." << endl);
+  DoLog(0) && (Log() << Verbose(0) << "Test level 0" << endl);
+  DoLog(1) && (Log() << Verbose(1) << "Test level 1" << endl);
+  DoLog(2) && (Log() << Verbose(2) << "Test level 2" << endl);
+  DoLog(3) && (Log() << Verbose(3) << "Test level 3" << endl);
+  DoLog(4) && (Log() << Verbose(4) << "Test level 4" << endl);
+
+  DoLog(0) && (Log() << Verbose(0) << "Output a log message." << endl);
+  DoeLog(0) && (eLog()<< Verbose(0) << "Output an error message." << endl);
+  setVerbosity(3);
+  DoLog(4) && (Log() << Verbose(4) << "This should not be printed." << endl);
+  DoeLog(4) && (eLog()<< Verbose(4) << "This should not be printed." << endl);
+};
Index: src/Helpers/unittests/LogUnitTest.hpp
===================================================================
--- src/Helpers/unittests/LogUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Helpers/unittests/LogUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,26 @@
+/*
+ * logunittest.hpp
+ */
+
+#ifndef LOGTEST_HPP_
+#define LOGTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/********************************************** Test classes **************************************/
+
+class LogTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( LogTest) ;
+    CPPUNIT_TEST ( logTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    void setUp();
+    void tearDown();
+
+    void logTest();
+};
+
+#endif /* LOGTEST_HPP_ */
Index: src/Helpers/unittests/Makefile.am
===================================================================
--- src/Helpers/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Helpers/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,34 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  InfoUnitTest \
+  LogUnitTest
+
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+HELPERSLIBS = \
+	../../Helpers/libMolecuilderHelpers-@MOLECUILDER_API_VERSION@.la \
+	$(BOOST_LIB)
+
+InfoUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	InfoUnitTest.cpp \
+	InfoUnitTest.hpp 
+InfoUnitTest_LDADD = ${HELPERSLIBS}
+
+LogUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	LogUnitTest.cpp \
+	LogUnitTest.hpp
+LogUnitTest_LDADD = ${HELPERSLIBS}
+
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/LinearAlgebra/LinearSystemOfEquations.cpp
===================================================================
--- src/LinearAlgebra/LinearSystemOfEquations.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/LinearSystemOfEquations.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,143 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * LinearSystemOfEquations.cpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "Helpers/defs.hpp"
+#include "LinearAlgebra/LinearSystemOfEquations.hpp"
+#include "LinearAlgebra/MatrixContent.hpp"
+#include "LinearAlgebra/VectorContent.hpp"
+#include "Helpers/Assert.hpp"
+#include "Helpers/logger.hpp"
+#include "LinearAlgebra/Vector.hpp"
+
+#include <gsl/gsl_permutation.h>
+
+/** Constructor for class LinearSystemOfEquations.
+ * Allocates Vector and Matrix classes.
+ * \param m column dimension
+ * \param n row dimension
+ */
+LinearSystemOfEquations::LinearSystemOfEquations(int m, int n) : rows(m), columns(n), IsSymmetric(false)
+{
+  A = new MatrixContent(m, n);
+  b = new VectorContent(m);
+  x = new VectorContent(n);
+};
+
+/** Destructor for class LinearSystemOfEquations.
+ * Destructs Vector and Matrix classes.
+ */
+LinearSystemOfEquations::~LinearSystemOfEquations()
+{
+  delete(A);
+  delete(b);
+  delete(x);
+};
+
+/** Sets whether matrix is to be regarded as symmetric.
+ * Note that we do not check whether it really is, just take upper diagonal.
+ * \param symmetric true or false
+ */
+bool LinearSystemOfEquations::SetSymmetric(bool symmetric)
+{
+  ASSERT (rows == columns, "Rows and columns don't have equal size! Setting symmetric not possible.");
+  return (IsSymmetric = symmetric);
+};
+
+/** Initializes vector b to the components of the given vector.
+ * \param *x Vector with equal dimension (no check!)
+ */
+void LinearSystemOfEquations::Setb(Vector *x)
+{
+  ASSERT  ( columns == NDIM, "Vector class is always three-dimensional, unlike this LEqS!");
+  b->setFromVector(*x);
+};
+
+/** Initializes vector b to the components of the given vector.
+ * \param *x array with equal dimension (no check!)
+ */
+void LinearSystemOfEquations::Setb(double *x)
+{
+  b->setFromDoubleArray(x);
+};
+
+/** Initializes matrix a to the components of the given array.
+ * note that sort order should be
+ * \param *x array with equal dimension (no check!)
+ */
+void LinearSystemOfEquations::SetA(double *x)
+{
+  A->setFromDoubleArray(x);
+};
+
+/** Returns the solution vector x \f$A \cdot x = b\f$ as an array of doubles.
+ * \param *array pointer allocated array for solution on return (no bounds check, dimension must match)
+ * \return true - solving possible, false - some error occured.
+ */
+bool LinearSystemOfEquations::GetSolutionAsArray(double *&array)
+{
+  bool status = Solve();
+
+  // copy solution
+  for (size_t i=0;i<x->dimension;i++) {
+    array[i] = x->at(i);
+  }
+  return status;
+};
+
+/** Returns the solution vector x \f$A \cdot x = b\f$ as an array of doubles.
+ * \param &x solution vector on return (must be 3-dimensional)
+ * \return true - solving possible, false - some error occured.
+ */
+bool LinearSystemOfEquations::GetSolutionAsVector(Vector &v)
+{
+  ASSERT (rows == NDIM, "Solution can only be returned as vector if number of columns is NDIM.");
+  bool status = Solve();
+
+  // copy solution
+  for (size_t i=0;i<x->dimension;i++)
+    v[i] = x->at(i);
+  return status;
+};
+
+/** Solves the given system of \f$A \cdot x = b\f$.
+ * Use either LU or Householder decomposition.
+ * Solution is stored in LinearSystemOfEquations::x
+ * \return true - solving possible, false - some error occured.
+ */
+bool LinearSystemOfEquations::Solve()
+{
+  // calculate solution
+  int s;
+  if (IsSymmetric) { // use LU
+    gsl_permutation * p = gsl_permutation_alloc (x->dimension);
+    gsl_linalg_LU_decomp (A->content, p, &s);
+    gsl_linalg_LU_solve (A->content, p, b->content, x->content);
+    gsl_permutation_free (p);
+  } else {  // use Householder
+    //MatrixContent *backup = new MatrixContent(rows,columns);
+    //*backup = *A;
+    gsl_linalg_HH_solve (A->content, b->content, x->content);
+    //*A = *backup;
+    //delete(backup);
+  }
+  return true;
+};
+
Index: src/LinearAlgebra/LinearSystemOfEquations.hpp
===================================================================
--- src/LinearAlgebra/LinearSystemOfEquations.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/LinearSystemOfEquations.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,59 @@
+/*
+ * LinearSystemOfEquations.hpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+#ifndef LINEARSYSTEMSOFEQUATIONS_HPP
+#define LINEARSYSTEMSOFEQUATIONS_HPP
+
+/*********************************************** includes ***********************************/
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gsl/gsl_linalg.h>
+
+/****************************************** forward declarations *****************************/
+
+class Vector;
+class MatrixContent;
+class VectorContent;
+
+/********************************************** declarations *******************************/
+
+/** Solver class for a linear system of equations in the form \f$A \cdot x = b\F$.
+ *
+ */
+class LinearSystemOfEquations {
+public:
+  LinearSystemOfEquations(int n, int m);
+  ~LinearSystemOfEquations();
+
+  // setting
+  void Setb(Vector *x);
+  void Setb(double *x);
+  void SetA(double *x);
+  bool SetSymmetric(bool symmetric);
+
+  // solving
+  bool GetSolutionAsArray(double *&array);
+  bool GetSolutionAsVector(Vector &v);
+
+  VectorContent *b;
+  VectorContent *x;
+  MatrixContent *A;
+
+private:
+  bool Solve();
+
+  int rows;
+  int columns;
+
+  bool IsSymmetric;
+};
+
+#endif /* LINEARSYSTEMSOFEQUATIONS_HPP */
Index: src/LinearAlgebra/Makefile.am
===================================================================
--- src/LinearAlgebra/Makefile.am	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/LinearAlgebra/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -17,5 +17,5 @@
   LineSegment.cpp \
   LineSegmentSet.cpp \
-  linearsystemofequations.cpp \
+  LinearSystemOfEquations.cpp \
   MatrixContent.cpp \
   MatrixVector_ops.cpp \
@@ -36,5 +36,5 @@
   LineSegment.hpp \
   LineSegmentSet.hpp \
-  linearsystemofequations.hpp \
+  LinearSystemOfEquations.hpp \
   MatrixContent.hpp \
   MatrixVector_ops.hpp \
Index: src/LinearAlgebra/Subspace.hpp
===================================================================
--- src/LinearAlgebra/Subspace.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/LinearAlgebra/Subspace.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -15,5 +15,5 @@
 #include "MatrixContent.hpp"
 #include "VectorContent.hpp"
-#include "unittests/SubspaceFactorizerUnittest.hpp"
+#include "unittests/SubspaceFactorizerUnitTest.hpp"
 
 /** A subset of eigenvectors from an Eigenspace.
Index: c/LinearAlgebra/linearsystemofequations.cpp
===================================================================
--- src/LinearAlgebra/linearsystemofequations.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,143 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * linearsystemofequations.cpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "Helpers/MemDebug.hpp"
-
-#include "Helpers/defs.hpp"
-#include "LinearAlgebra/MatrixContent.hpp"
-#include "LinearAlgebra/VectorContent.hpp"
-#include "LinearAlgebra/linearsystemofequations.hpp"
-#include "Helpers/Assert.hpp"
-#include "Helpers/logger.hpp"
-#include "LinearAlgebra/Vector.hpp"
-
-#include <gsl/gsl_permutation.h>
-
-/** Constructor for class LinearSystemOfEquations.
- * Allocates Vector and Matrix classes.
- * \param m column dimension
- * \param n row dimension
- */
-LinearSystemOfEquations::LinearSystemOfEquations(int m, int n) : rows(m), columns(n), IsSymmetric(false)
-{
-  A = new MatrixContent(m, n);
-  b = new VectorContent(m);
-  x = new VectorContent(n);
-};
-
-/** Destructor for class LinearSystemOfEquations.
- * Destructs Vector and Matrix classes.
- */
-LinearSystemOfEquations::~LinearSystemOfEquations()
-{
-  delete(A);
-  delete(b);
-  delete(x);
-};
-
-/** Sets whether matrix is to be regarded as symmetric.
- * Note that we do not check whether it really is, just take upper diagonal.
- * \param symmetric true or false
- */
-bool LinearSystemOfEquations::SetSymmetric(bool symmetric)
-{
-  ASSERT (rows == columns, "Rows and columns don't have equal size! Setting symmetric not possible.");
-  return (IsSymmetric = symmetric);
-};
-
-/** Initializes vector b to the components of the given vector.
- * \param *x Vector with equal dimension (no check!)
- */
-void LinearSystemOfEquations::Setb(Vector *x)
-{
-  ASSERT  ( columns == NDIM, "Vector class is always three-dimensional, unlike this LEqS!");
-  b->setFromVector(*x);
-};
-
-/** Initializes vector b to the components of the given vector.
- * \param *x array with equal dimension (no check!)
- */
-void LinearSystemOfEquations::Setb(double *x)
-{
-  b->setFromDoubleArray(x);
-};
-
-/** Initializes matrix a to the components of the given array.
- * note that sort order should be
- * \param *x array with equal dimension (no check!)
- */
-void LinearSystemOfEquations::SetA(double *x)
-{
-  A->setFromDoubleArray(x);
-};
-
-/** Returns the solution vector x \f$A \cdot x = b\f$ as an array of doubles.
- * \param *array pointer allocated array for solution on return (no bounds check, dimension must match)
- * \return true - solving possible, false - some error occured.
- */
-bool LinearSystemOfEquations::GetSolutionAsArray(double *&array)
-{
-  bool status = Solve();
-
-  // copy solution
-  for (size_t i=0;i<x->dimension;i++) {
-    array[i] = x->at(i);
-  }
-  return status;
-};
-
-/** Returns the solution vector x \f$A \cdot x = b\f$ as an array of doubles.
- * \param &x solution vector on return (must be 3-dimensional)
- * \return true - solving possible, false - some error occured.
- */
-bool LinearSystemOfEquations::GetSolutionAsVector(Vector &v)
-{
-  ASSERT (rows == NDIM, "Solution can only be returned as vector if number of columns is NDIM.");
-  bool status = Solve();
-
-  // copy solution
-  for (size_t i=0;i<x->dimension;i++)
-    v[i] = x->at(i);
-  return status;
-};
-
-/** Solves the given system of \f$A \cdot x = b\f$.
- * Use either LU or Householder decomposition.
- * Solution is stored in LinearSystemOfEquations::x
- * \return true - solving possible, false - some error occured.
- */
-bool LinearSystemOfEquations::Solve()
-{
-  // calculate solution
-  int s;
-  if (IsSymmetric) { // use LU
-    gsl_permutation * p = gsl_permutation_alloc (x->dimension);
-    gsl_linalg_LU_decomp (A->content, p, &s);
-    gsl_linalg_LU_solve (A->content, p, b->content, x->content);
-    gsl_permutation_free (p);
-  } else {  // use Householder
-    //MatrixContent *backup = new MatrixContent(rows,columns);
-    //*backup = *A;
-    gsl_linalg_HH_solve (A->content, b->content, x->content);
-    //*A = *backup;
-    //delete(backup);
-  }
-  return true;
-};
-
Index: c/LinearAlgebra/linearsystemofequations.hpp
===================================================================
--- src/LinearAlgebra/linearsystemofequations.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,59 +1,0 @@
-/*
- * linearsystemofequations.hpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-#ifndef LINEARSYSTEMSOFEQUATIONS_HPP
-#define LINEARSYSTEMSOFEQUATIONS_HPP
-
-/*********************************************** includes ***********************************/
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <gsl/gsl_linalg.h>
-
-/****************************************** forward declarations *****************************/
-
-class Vector;
-class MatrixContent;
-class VectorContent;
-
-/********************************************** declarations *******************************/
-
-/** Solver class for a linear system of equations in the form \f$A \cdot x = b\F$.
- *
- */
-class LinearSystemOfEquations {
-public:
-  LinearSystemOfEquations(int n, int m);
-  ~LinearSystemOfEquations();
-
-  // setting
-  void Setb(Vector *x);
-  void Setb(double *x);
-  void SetA(double *x);
-  bool SetSymmetric(bool symmetric);
-
-  // solving
-  bool GetSolutionAsArray(double *&array);
-  bool GetSolutionAsVector(Vector &v);
-
-  VectorContent *b;
-  VectorContent *x;
-  MatrixContent *A;
-
-private:
-  bool Solve();
-
-  int rows;
-  int columns;
-
-  bool IsSymmetric;
-};
-
-#endif /* LINEARSYSTEMSOFEQUATIONS_HPP */
Index: src/LinearAlgebra/unittests/LineUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/LineUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/LineUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,415 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * LineUnittest.cpp
+ *
+ *  Created on: May 27, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "LinearAlgebra/Vector.hpp"
+#include "Exceptions/LinearDependenceException.hpp"
+#include "Exceptions/SkewException.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <iostream>
+#include <cmath>
+
+#include "LineUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( LineUnittest );
+
+void LineUnittest::setUp(){
+  // three lines along the axes
+  la1 = new Line(zeroVec,unitVec[0]);
+  la2 = new Line(zeroVec,unitVec[1]);
+  la3 = new Line(zeroVec,unitVec[2]);
+
+  // the lines along the planes defined by two coordinate axes
+  lp1 = new Line(unitVec[0],unitVec[0]-unitVec[1]);
+  lp2 = new Line(unitVec[1],unitVec[1]-unitVec[2]);
+  lp3 = new Line(unitVec[2],unitVec[2]-unitVec[0]);
+}
+void LineUnittest::tearDown(){
+  delete la1;
+  delete la2;
+  delete la3;
+
+  delete lp1;
+  delete lp2;
+  delete lp3;
+}
+
+void LineUnittest::constructionErrorTest(){
+  // test some constructions
+
+  // direction+origin should never fail
+  CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[0]));
+  CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[1]));
+  CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[2]));
+
+  // two points fails if both points are the same
+  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[0],unitVec[1]));
+  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[1],unitVec[2]));
+  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[2],unitVec[0]));
+  // for zerovectors
+  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[0],zeroVec));
+  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[1],zeroVec));
+  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[2],zeroVec));
+  // now we pass two times the same point
+  CPPUNIT_ASSERT_THROW(makeLineThrough(zeroVec,zeroVec),LinearDependenceException);
+  CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[0],unitVec[0]),LinearDependenceException);
+  CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[1],unitVec[1]),LinearDependenceException);
+  CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[2],unitVec[2]),LinearDependenceException);
+
+}
+
+bool testDirection(const Vector &dir1,const Vector &dir2){
+  return (dir1==dir2) || (dir1==-1*dir2);
+}
+
+void LineUnittest::constructionResultTest(){
+  // test all directions
+  CPPUNIT_ASSERT(testDirection(la1->getDirection(),unitVec[0]));
+  CPPUNIT_ASSERT(testDirection(la2->getDirection(),unitVec[1]));
+  CPPUNIT_ASSERT(testDirection(la3->getDirection(),unitVec[2]));
+
+  // test origins
+  CPPUNIT_ASSERT_EQUAL(la1->getOrigin(),zeroVec);
+  CPPUNIT_ASSERT_EQUAL(la2->getOrigin(),zeroVec);
+  CPPUNIT_ASSERT_EQUAL(la2->getOrigin(),zeroVec);
+
+  // test if desired points are on the lines
+  CPPUNIT_ASSERT(la1->isContained(zeroVec));
+  CPPUNIT_ASSERT(la2->isContained(zeroVec));
+  CPPUNIT_ASSERT(la3->isContained(zeroVec));
+
+  CPPUNIT_ASSERT(la1->isContained(unitVec[0]));
+  CPPUNIT_ASSERT(la2->isContained(unitVec[1]));
+  CPPUNIT_ASSERT(la3->isContained(unitVec[2]));
+
+  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]));
+  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]));
+  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]));
+
+  CPPUNIT_ASSERT(lp1->isContained(unitVec[1]));
+  CPPUNIT_ASSERT(lp2->isContained(unitVec[2]));
+  CPPUNIT_ASSERT(lp3->isContained(unitVec[0]));
+}
+
+void LineUnittest::isContainedTest(){
+  // Zerovector on the axes lines
+  CPPUNIT_ASSERT(la1->isContained(zeroVec));
+  CPPUNIT_ASSERT(la2->isContained(zeroVec));
+  CPPUNIT_ASSERT(la3->isContained(zeroVec));
+
+  // multiples of the second support vector
+  CPPUNIT_ASSERT(la1->isContained(unitVec[0]));
+  CPPUNIT_ASSERT(la2->isContained(unitVec[1]));
+  CPPUNIT_ASSERT(la3->isContained(unitVec[2]));
+
+  CPPUNIT_ASSERT(la1->isContained(2*unitVec[0]));
+  CPPUNIT_ASSERT(la2->isContained(2*unitVec[1]));
+  CPPUNIT_ASSERT(la3->isContained(2*unitVec[2]));
+
+  CPPUNIT_ASSERT(la1->isContained(3*unitVec[0]));
+  CPPUNIT_ASSERT(la2->isContained(3*unitVec[1]));
+  CPPUNIT_ASSERT(la3->isContained(3*unitVec[2]));
+
+  // negative multiples
+  CPPUNIT_ASSERT(la1->isContained(-1*unitVec[0]));
+  CPPUNIT_ASSERT(la2->isContained(-1*unitVec[1]));
+  CPPUNIT_ASSERT(la3->isContained(-1*unitVec[2]));
+
+  CPPUNIT_ASSERT(la1->isContained(-2*unitVec[0]));
+  CPPUNIT_ASSERT(la2->isContained(-2*unitVec[1]));
+  CPPUNIT_ASSERT(la3->isContained(-2*unitVec[2]));
+
+  // points that should not be on the lines
+  CPPUNIT_ASSERT(!la1->isContained(unitVec[1]));
+  CPPUNIT_ASSERT(!la2->isContained(unitVec[2]));
+  CPPUNIT_ASSERT(!la3->isContained(unitVec[0]));
+
+  CPPUNIT_ASSERT(!la1->isContained(2*unitVec[1]));
+  CPPUNIT_ASSERT(!la2->isContained(2*unitVec[2]));
+  CPPUNIT_ASSERT(!la3->isContained(2*unitVec[0]));
+
+  CPPUNIT_ASSERT(!la1->isContained(-1*unitVec[1]));
+  CPPUNIT_ASSERT(!la2->isContained(-1*unitVec[2]));
+  CPPUNIT_ASSERT(!la3->isContained(-1*unitVec[0]));
+
+  // For the plane lines
+  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]));
+  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]));
+  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]));
+
+  CPPUNIT_ASSERT(lp1->isContained(unitVec[1]));
+  CPPUNIT_ASSERT(lp2->isContained(unitVec[2]));
+  CPPUNIT_ASSERT(lp3->isContained(unitVec[0]));
+
+  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]+2*(unitVec[0]-unitVec[1])));
+  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]+2*(unitVec[1]-unitVec[2])));
+  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]+2*(unitVec[2]-unitVec[0])));
+
+  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]-2*(unitVec[0]-unitVec[1])));
+  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]-2*(unitVec[1]-unitVec[2])));
+  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]-2*(unitVec[2]-unitVec[0])));
+}
+
+void LineUnittest::intersectionTest(){
+  Vector fixture;
+
+  // intersection of the axis lines
+  fixture = la1->getIntersection(*la2);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = la2->getIntersection(*la3);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = la3->getIntersection(*la1);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+
+  // axes and plane lines
+  fixture = la1->getIntersection(*lp1);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = la2->getIntersection(*lp2);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = la3->getIntersection(*lp3);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  fixture = la1->getIntersection(*lp3);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = la2->getIntersection(*lp1);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = la3->getIntersection(*lp2);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  // two plane lines
+  fixture = lp1->getIntersection(*lp2);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = lp2->getIntersection(*lp3);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+  fixture = lp3->getIntersection(*lp1);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+
+  // When we have two times the same line, we check if the point is on the line
+  fixture = la1->getIntersection(*la1);
+  CPPUNIT_ASSERT(la1->isContained(fixture));
+  fixture = la2->getIntersection(*la2);
+  CPPUNIT_ASSERT(la2->isContained(fixture));
+  fixture = la3->getIntersection(*la3);
+  CPPUNIT_ASSERT(la3->isContained(fixture));
+
+  fixture = lp1->getIntersection(*lp1);
+  CPPUNIT_ASSERT(lp1->isContained(fixture));
+  fixture = lp2->getIntersection(*lp2);
+  CPPUNIT_ASSERT(lp2->isContained(fixture));
+  fixture = lp3->getIntersection(*lp3);
+  CPPUNIT_ASSERT(lp3->isContained(fixture));
+
+  // lines that are askew should produce an Error
+  CPPUNIT_ASSERT_THROW(lp1->getIntersection(*la3),SkewException);
+  CPPUNIT_ASSERT_THROW(lp2->getIntersection(*la1),SkewException);
+  CPPUNIT_ASSERT_THROW(lp3->getIntersection(*la2),SkewException);
+
+  CPPUNIT_ASSERT_THROW(la1->getIntersection(*lp2),SkewException);
+  CPPUNIT_ASSERT_THROW(la2->getIntersection(*lp3),SkewException);
+  CPPUNIT_ASSERT_THROW(la3->getIntersection(*lp1),SkewException);
+}
+
+void LineUnittest::rotationTest(){
+  Vector fixture;
+
+  // rotate zero Vector along the axes lines by various degrees
+  fixture = la1->rotateVector(zeroVec,1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = la2->rotateVector(zeroVec,1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = la3->rotateVector(zeroVec,1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+
+  fixture = la1->rotateVector(zeroVec,2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = la2->rotateVector(zeroVec,2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = la3->rotateVector(zeroVec,2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+
+  // rotate vectors on the axis around their lines
+  fixture = la1->rotateVector(unitVec[0],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = la2->rotateVector(unitVec[1],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = la3->rotateVector(unitVec[2],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  fixture = la1->rotateVector(unitVec[0],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = la2->rotateVector(unitVec[1],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = la3->rotateVector(unitVec[2],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  // more vectors on the axis
+  fixture = la1->rotateVector(2*unitVec[0],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[0]);
+  fixture = la2->rotateVector(2*unitVec[1],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[1]);
+  fixture = la3->rotateVector(2*unitVec[2],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[2]);
+
+  fixture = la1->rotateVector(2*unitVec[0],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[0]);
+  fixture = la2->rotateVector(2*unitVec[1],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[1]);
+  fixture = la3->rotateVector(2*unitVec[2],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[2]);
+
+  // negative factors
+  fixture = la1->rotateVector(-1*unitVec[0],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
+  fixture = la2->rotateVector(-1*unitVec[1],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
+  fixture = la3->rotateVector(-1*unitVec[2],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
+
+  fixture = la1->rotateVector(-1*unitVec[0],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
+  fixture = la2->rotateVector(-1*unitVec[1],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
+  fixture = la3->rotateVector(-1*unitVec[2],2.);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
+
+
+
+  // now the real rotations
+  // unitVec[1] around unitVec[0]
+  fixture = la1->rotateVector(unitVec[1],0);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = la1->rotateVector(unitVec[1],1./2.*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
+  fixture = la1->rotateVector(unitVec[1],M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
+  fixture = la1->rotateVector(unitVec[1],2*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+
+  // unitVec[2] around unitVec[1]
+  fixture = la2->rotateVector(unitVec[2],0);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+  fixture = la2->rotateVector(unitVec[2],1./2.*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
+  fixture = la2->rotateVector(unitVec[2],M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
+  fixture = la2->rotateVector(unitVec[2],2*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  // unitVec[0] around unitVec[2]
+  fixture = la3->rotateVector(unitVec[0],0);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = la3->rotateVector(unitVec[0],1./2.*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
+  fixture = la3->rotateVector(unitVec[0],M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
+  fixture = la3->rotateVector(unitVec[0],2*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+
+
+  // and some rotation around the plane lines
+
+  // Vectors on the line
+  fixture = lp1->rotateVector(unitVec[0],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = lp1->rotateVector(unitVec[1],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+
+  fixture = lp2->rotateVector(unitVec[1],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = lp2->rotateVector(unitVec[2],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  fixture = lp3->rotateVector(unitVec[2],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+  fixture = lp3->rotateVector(unitVec[0],1.);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+
+  // the real stuff
+  fixture = lp1->rotateVector(zeroVec,M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,Vector(1,1,0));
+  fixture = lp2->rotateVector(zeroVec,M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,Vector(0,1,1));
+  fixture = lp3->rotateVector(zeroVec,M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,Vector(1,0,1));
+
+  fixture = lp1->rotateVector(zeroVec,2*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = lp2->rotateVector(zeroVec,2*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = lp3->rotateVector(zeroVec,2*M_PI);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+}
+
+void LineUnittest::sphereIntersectionTest(){
+  {
+    std::vector<Vector> res = la1->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT(testDirection(res[0],unitVec[0]));
+    CPPUNIT_ASSERT(testDirection(res[1],unitVec[0]));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = la2->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT(testDirection(res[0],unitVec[1]));
+    CPPUNIT_ASSERT(testDirection(res[1],unitVec[1]));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = la3->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT(testDirection(res[0],unitVec[2]));
+    CPPUNIT_ASSERT(testDirection(res[1],unitVec[2]));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = lp1->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT((res[0]==unitVec[0]) || (res[0]==unitVec[1]));
+    CPPUNIT_ASSERT((res[1]==unitVec[0]) || (res[1]==unitVec[1]));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = lp2->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT((res[0]==unitVec[1]) || (res[0]==unitVec[2]));
+    CPPUNIT_ASSERT((res[1]==unitVec[1]) || (res[1]==unitVec[2]));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+
+  {
+    std::vector<Vector> res = lp3->getSphereIntersections();
+    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
+    CPPUNIT_ASSERT((res[0]==unitVec[2]) || (res[0]==unitVec[0]));
+    CPPUNIT_ASSERT((res[1]==unitVec[2]) || (res[1]==unitVec[0]));
+    CPPUNIT_ASSERT(res[0]!=res[1]);
+  }
+}
Index: src/LinearAlgebra/unittests/LineUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/LineUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/LineUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,48 @@
+/*
+ * LineUnittest.hpp
+ *
+ *  Created on: May 27, 2010
+ *      Author: crueger
+ */
+
+#ifndef LINEUNITTEST_HPP_
+#define LINEUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "LinearAlgebra/Line.hpp"
+
+class LineUnittest : public CppUnit::TestFixture
+{
+
+  CPPUNIT_TEST_SUITE( LineUnittest) ;
+  CPPUNIT_TEST ( constructionErrorTest );
+  CPPUNIT_TEST ( constructionResultTest );
+  CPPUNIT_TEST ( isContainedTest );
+  CPPUNIT_TEST ( intersectionTest );
+  CPPUNIT_TEST ( rotationTest );
+  CPPUNIT_TEST ( sphereIntersectionTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void constructionErrorTest();
+  void constructionResultTest();
+  void isContainedTest();
+  void intersectionTest();
+  void rotationTest();
+  void sphereIntersectionTest();
+
+private:
+  Line *la1;
+  Line *la2;
+  Line *la3;
+  Line *lp1;
+  Line *lp2;
+  Line *lp3;
+
+};
+
+#endif /* LINEUNITTEST_HPP_ */
Index: src/LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,122 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * LinearSystemOfEquationsunittest.cpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <iomanip>
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <cmath>
+
+#include "LinearAlgebra/Vector.hpp"
+
+#include "LinearSystemOfEquationsUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( LinearSystemOfEquationsTest );
+
+
+void LinearSystemOfEquationsTest::setUp()
+{
+  s = new LinearSystemOfEquations(4,4);
+};
+
+void LinearSystemOfEquationsTest::tearDown()
+{
+  delete(s);
+};
+
+/** Unit test for initialization.
+ *
+ */
+void LinearSystemOfEquationsTest::InitializationTest()
+{
+  // Setting A
+  double array[] = { 1., 0., 0., 0.,
+                     0., 2., 0., 0.,
+                     0., 0., 3., 0.,
+                     0., 0., 0., 4. };
+  s->SetA(array);
+
+  // Setting b
+};
+
+/** Unit test for symmetry property.
+ *
+ */
+void LinearSystemOfEquationsTest::SymmetricTest()
+{
+  CPPUNIT_ASSERT_EQUAL( true, s->SetSymmetric(true) );
+  //LinearSystemOfEquations *t = new LinearSystemOfEquations(4,3);
+  //CPPUNIT_ASSERT_EQUAL( true, t->SetSymmetric(true) );
+  //delete(t);
+};
+
+/** Unit test for simple Solve.
+ *
+ */
+void LinearSystemOfEquationsTest::SolveSimpleTest()
+{
+  // set up A and b
+  double m_array[] = { 1., 0., 0., 0.,
+                       0., 2., 0., 0.,
+                       0., 0., 3., 0.,
+                       0., 0., 0., 4. };
+  double v_array[] = { 1., 2., 3., 4. };
+  s->SetA(m_array);
+  s->Setb(v_array);
+
+  // solve
+  double *array = new double[4];
+  s->GetSolutionAsArray(array);
+  for (int i=0;i<4;i++)
+    CPPUNIT_ASSERT_EQUAL( 1., array[i]);
+  delete[](array);
+};
+
+/** Unit test for advanced Solve.
+ *
+ */
+void LinearSystemOfEquationsTest::SolveAdvancedTest()
+{
+  // set up A and b
+  double m_array[] = { 0.18, 0.60, 0.57, 0.96,
+                       0.41, 0.24, 0.99, 0.58,
+                       0.14, 0.30, 0.97, 0.66,
+                       0.51, 0.13, 0.19, 0.85 };
+  double v_array[] = { 1.0, 2.0, 3.0, 4.0 };
+  double x_array[] = { -4.05205022957398, -12.60561139590692, 1.660911626708844, 8.693766928795233 };
+  s->SetA(m_array);
+  s->Setb(v_array);
+
+  // solve
+  double *array = new double[4];
+  s->GetSolutionAsArray(array);
+  for (int i=0;i<4;i++) {
+    CPPUNIT_ASSERT( fabs(x_array[i] - array[i]) < MYEPSILON );
+  }
+  delete[](array);
+};
Index: src/LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,40 @@
+/*
+ * LinearSystemOfEquationsunittest.hpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+#ifndef LINEARSYSTEMOFEQUATIONSUNITTEST_HPP_
+#define LINEARSYSTEMOFEQUATIONSUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "LinearAlgebra/LinearSystemOfEquations.hpp"
+
+/********************************************** Test classes **************************************/
+
+class LinearSystemOfEquationsTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( LinearSystemOfEquationsTest) ;
+    CPPUNIT_TEST ( InitializationTest );
+    CPPUNIT_TEST ( SymmetricTest );
+    CPPUNIT_TEST ( SolveSimpleTest );
+    CPPUNIT_TEST ( SolveAdvancedTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    void setUp();
+    void tearDown();
+
+    void InitializationTest();
+    void SymmetricTest();
+    void SolveSimpleTest();
+    void SolveAdvancedTest();
+
+private:
+    LinearSystemOfEquations *s;
+};
+
+
+#endif /* LINEARSYSTEMOFEQUATIONSUNITTEST_HPP_ */
Index: src/LinearAlgebra/unittests/Makefile.am
===================================================================
--- src/LinearAlgebra/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,72 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  LinearSystemOfEquationsUnitTest \
+  LineUnitTest \
+  MatrixContentSymmetricUnitTest \
+  MatrixContentUnitTest \
+  MatrixUnitTest \
+  PlaneUnitTest \
+  VectorContentUnitTest \
+  VectorUnitTest
+
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+GSLLIBS = \
+	../../LinearAlgebra/libMolecuilderLinearAlgebra-@MOLECUILDER_API_VERSION@.la \
+	../../Exceptions/libMolecuilderExceptions-@MOLECUILDER_API_VERSION@.la \
+	../../Helpers/libMolecuilderHelpers-@MOLECUILDER_API_VERSION@.la \
+	$(BOOST_LIB)
+
+LinearSystemOfEquationsUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	LinearSystemOfEquationsUnitTest.cpp \
+	LinearSystemOfEquationsUnitTest.hpp
+LinearSystemOfEquationsUnitTest_LDADD = ${GSLLIBS}
+
+LineUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	LineUnitTest.cpp \
+	LineUnitTest.hpp
+LineUnitTest_LDADD = ${GSLLIBS}
+
+MatrixContentSymmetricUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	MatrixContentSymmetricUnitTest.cpp \
+	MatrixContentSymmetricUnitTest.hpp
+MatrixContentSymmetricUnitTest_LDADD = ${GSLLIBS}
+
+MatrixContentUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	MatrixContentUnitTest.cpp \
+	MatrixContentUnitTest.hpp
+MatrixContentUnitTest_LDADD = ${GSLLIBS}
+
+MatrixUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	MatrixUnitTest.cpp \
+	MatrixUnitTest.hpp
+MatrixUnitTest_LDADD = ${GSLLIBS}
+
+PlaneUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	PlaneUnitTest.cpp \
+	PlaneUnitTest.hpp
+PlaneUnitTest_LDADD = ${GSLLIBS}
+
+VectorContentUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	VectorContentUnitTest.cpp \
+	VectorContentUnitTest.hpp
+VectorContentUnitTest_LDADD = ${GSLLIBS}
+
+VectorUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	VectorUnitTest.cpp \
+	VectorUnitTest.hpp 
+VectorUnitTest_LDADD = ${GSLLIBS}
+
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,285 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MatrixContentSymmetricUnitTest.cpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "MatrixContentSymmetricUnitTest.hpp"
+
+#include "LinearAlgebra/MatrixContent.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( MatrixContentSymmetricTest );
+
+
+void MatrixContentSymmetricTest::setUp()
+{
+  m = new MatrixContent(3,3);
+};
+
+void MatrixContentSymmetricTest::tearDown()
+{
+  delete(m);
+};
+
+/** Unit Test for accessing matrix elements.
+ *
+ */
+void MatrixContentSymmetricTest::AccessTest()
+{
+  // check whether all elements are initially zero
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
+
+  // set
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, i*3+j );
+
+  // and check
+  double *ptr = NULL;
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++) {
+      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), m->at(i,j) );
+      ptr = m->Pointer(i,j);
+      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), *ptr );
+    }
+
+  // assignment
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, i*3+j );
+  MatrixContent *dest = new MatrixContent(3,3);
+  *dest = *m;
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( dest->at(i,j), m->at(i,j) );
+  delete(dest);
+
+  // out of bounds
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(4,2) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(2,17) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(1024,140040) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,0) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(0,-1) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,-1) );
+};
+
+/** Unit Test for initializating matrices.
+ *
+ */
+void MatrixContentSymmetricTest::InitializationTest()
+{
+  // set zero
+  m->setZero();
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
+
+  // set all
+  m->setValue(1.5);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( 1.5, m->at(i,j) );
+
+  // set basis
+  m->setIdentity();
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
+
+  // set from array
+  double array[] = { 1., 0., 0.,
+                     0., 1., 0.,
+                     0., 0., 1. };
+  m->setFromDoubleArray(array);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
+
+};
+
+/** Unit Test for copying matrices.
+ *
+ */
+void MatrixContentSymmetricTest::CopyTest()
+{
+  // set basis
+  MatrixContent *dest = NULL;
+  for (int i=0;i<3;i++) {
+    m->setValue(i);
+    dest = new MatrixContent(m);
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( m->at(i,j) , dest->at(i,j) );
+
+    delete(dest);
+  }
+};
+
+/** Unit Test for exchanging rows and columns.
+ *
+ */
+void MatrixContentSymmetricTest::ExchangeTest()
+{
+  // set to 1,1,1,2, ...
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, i+1 );
+
+  // swap such that nothing happens
+  m->SwapColumns(1,2);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
+
+  // swap two rows
+  m->SwapRows(1,2);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      switch (j) {
+        case 0:
+          CPPUNIT_ASSERT_EQUAL( 1., m->at(j,i) );
+          break;
+        case 1:
+          CPPUNIT_ASSERT_EQUAL( 3., m->at(j,i) );
+          break;
+        case 2:
+          CPPUNIT_ASSERT_EQUAL( 2., m->at(j,i) );
+          break;
+        default:
+          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
+      }
+  // check that op is reversable
+  m->SwapRows(1,2);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
+
+  // set to 1,2,3,1, ...
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, j+1. );
+
+  // swap such that nothing happens
+  m->SwapRows(0,2);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
+
+  // swap two columns
+  m->SwapColumns(0,2);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      switch (j) {
+        case 0:
+          CPPUNIT_ASSERT_EQUAL( 3., m->at(i,j) );
+          break;
+        case 1:
+          CPPUNIT_ASSERT_EQUAL( 2., m->at(i,j) );
+          break;
+        case 2:
+          CPPUNIT_ASSERT_EQUAL( 1., m->at(i,j) );
+          break;
+        default:
+          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
+      }
+  // check that op is reversable
+  m->SwapColumns(0,2);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
+
+
+  // set to 1,2,3, ...
+  MatrixContent *n =  new MatrixContent(3,3);
+  for (int i=0;i<3;i++)
+    for (int j=0;j<3;j++) {
+      m->set(i,j, 3*i+j+1 );
+      n->set(i,j, 3*j+i+1 );
+    }
+  // transpose
+  MatrixContent res = ((const MatrixContent)*m).transpose();
+  CPPUNIT_ASSERT( *n == res );
+  // second transpose
+  res.transpose();
+  CPPUNIT_ASSERT( *m == res );
+  delete n;
+};
+
+/** Unit Test for matrix properties.
+ *
+ */
+void MatrixContentSymmetricTest::PropertiesTest()
+{
+  // is zero
+  m->setZero();
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNull() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
+
+  // is positive
+  m->setValue(0.5);
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsPositive() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
+
+  // is negative
+  m->setValue(-0.1);
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNegative() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNonNegative() );
+
+  // is positive definite
+  double array[] = { 1., 0., 0.,
+                     0., 1., 1.,
+                     0., 0., 1. };
+  m->setFromDoubleArray(array);
+  CPPUNIT_ASSERT_EQUAL( true, m->IsPositiveDefinite() );
+
+  //determinant
+  m->setIdentity();
+  CPPUNIT_ASSERT_EQUAL( 1., m->Determinant() );
+
+  m->setZero();
+  CPPUNIT_ASSERT_EQUAL( 0., m->Determinant() );
+
+  m->set( 0, 0, 1.);
+  m->set( 1, 1, 1.);
+  m->set( 2, 1, 1.);
+  CPPUNIT_ASSERT_EQUAL( 0., m->Determinant() );
+  
+  double array2[] = { 2., 0., 1.,
+                     -3., 1., 1.,
+                     1., 5.5, 1. };
+  m->setFromDoubleArray(array2);
+  CPPUNIT_ASSERT_EQUAL( -26.5, m->Determinant() );
+};
Index: src/LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,42 @@
+/*
+ * MatrixContentSymmetricUnitTest.hpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+#ifndef MATRIXCONTENTSYMMETRICUNITTEST_HPP_
+#define MATRIXCONTENTSYMMETRICUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class MatrixContent;
+
+/********************************************** Test classes **************************************/
+
+class MatrixContentSymmetricTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( MatrixContentSymmetricTest) ;
+    CPPUNIT_TEST (AccessTest );
+    CPPUNIT_TEST (InitializationTest );
+    CPPUNIT_TEST (CopyTest );
+    CPPUNIT_TEST (ExchangeTest );
+    CPPUNIT_TEST (PropertiesTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    void setUp();
+    void tearDown();
+
+    void AccessTest();
+    void InitializationTest();
+    void CopyTest();
+    void ExchangeTest();
+    void PropertiesTest();
+
+private:
+    MatrixContent *m;
+};
+
+
+#endif /* MATRIXCONTENTSYMMETRICUNITTEST_HPP_ */
Index: src/LinearAlgebra/unittests/MatrixContentUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/MatrixContentUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/MatrixContentUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,267 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MatrixContentUnitTest.cpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "MatrixContentUnitTest.hpp"
+
+#include "LinearAlgebra/MatrixContent.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( MatrixContentTest );
+
+
+void MatrixContentTest::setUp()
+{
+  m = new MatrixContent(4,3);
+};
+
+void MatrixContentTest::tearDown()
+{
+  delete(m);
+};
+
+/** Unit Test for accessing matrix elements.
+ *
+ */
+void MatrixContentTest::AccessTest()
+{
+  // check whether all elements are initially zero
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
+
+  // set
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, i*3+j );
+
+  // and check
+  double *ptr = NULL;
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++) {
+      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), m->at(i,j) );
+      ptr = m->Pointer(i,j);
+      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), *ptr );
+    }
+
+  // assignment
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, i*3+j );
+  MatrixContent *dest = new MatrixContent(4,3);
+  *dest = *m;
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( dest->at(i,j), m->at(i,j) );
+  delete(dest);
+
+  // out of bounds
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(5,2) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(2,17) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(1024,140040) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,0) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(0,-1) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,-1) );
+};
+
+/** Unit Test for initializating matrices.
+ *
+ */
+void MatrixContentTest::InitializationTest()
+{
+  // set zero
+  m->setZero();
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
+
+  // set all
+  m->setValue(1.5);
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( 1.5, m->at(i,j) );
+
+  // set basis
+  m->setIdentity();
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
+
+  // set from array
+  double array[] = { 1., 0., 0.,
+                     0., 1., 0.,
+                     0., 0., 1.,
+                     0., 0., 0. };
+  m->setFromDoubleArray(array);
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
+
+};
+
+/** Unit Test for copying matrices.
+ *
+ */
+void MatrixContentTest::CopyTest()
+{
+  // set basis
+  MatrixContent *dest = NULL;
+  for (int i=0;i<4;i++) {
+    m->setValue(i);
+    dest = new MatrixContent(m);
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( m->at(i,j) , dest->at(i,j) );
+
+    delete(dest);
+  }
+};
+
+/** Unit Test for exchanging rows and columns.
+ *
+ */
+void MatrixContentTest::ExchangeTest()
+{
+  // set to 1,1,1,2, ...
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, i+1 );
+
+  // swap such that nothing happens
+  CPPUNIT_ASSERT_EQUAL( true, m->SwapColumns(1,2) );
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
+
+  // swap two rows
+  CPPUNIT_ASSERT_EQUAL( true, m->SwapRows(1,2) );
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      switch (i) {
+        case 0:
+          CPPUNIT_ASSERT_EQUAL( 1., m->at(i,j) );
+          break;
+        case 1:
+          CPPUNIT_ASSERT_EQUAL( 3., m->at(i,j) );
+          break;
+        case 2:
+          CPPUNIT_ASSERT_EQUAL( 2., m->at(i,j) );
+          break;
+        case 3:
+          CPPUNIT_ASSERT_EQUAL( 4., m->at(i,j) );
+          break;
+        default:
+          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
+      }
+  // check that op is reversable
+  CPPUNIT_ASSERT_EQUAL( true, m->SwapRows(1,2) );
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
+
+  // set to 1,2,3,1, ...
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      m->set(i,j, j+1. );
+
+  // swap such that nothing happens
+  CPPUNIT_ASSERT_EQUAL( true, m->SwapRows(0,2) );
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
+
+  // swap two columns
+  CPPUNIT_ASSERT_EQUAL( true, m->SwapColumns(0,2) );
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      switch (j) {
+        case 0:
+          CPPUNIT_ASSERT_EQUAL( 3., m->at(i,j) );
+          break;
+        case 1:
+          CPPUNIT_ASSERT_EQUAL( 2., m->at(i,j) );
+          break;
+        case 2:
+          CPPUNIT_ASSERT_EQUAL( 1., m->at(i,j) );
+          break;
+        default:
+          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
+      }
+  // check that op is reversable
+  CPPUNIT_ASSERT_EQUAL( true, m->SwapColumns(0,2) );
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
+
+
+  // set to 1,2,3,4, ...
+  MatrixContent *n =  new MatrixContent(3,4);
+  for (int i=0;i<4;i++)
+    for (int j=0;j<3;j++) {
+      m->set(i,j, 3*i+j+1 );
+      n->set(j,i, 3*i+j+1 );
+    }
+  // transpose
+  MatrixContent res = ((const MatrixContent)(*m)).transpose();
+  CPPUNIT_ASSERT( *n == res );
+  // second transpose
+  MatrixContent res2 = ((const MatrixContent)res).transpose();
+  CPPUNIT_ASSERT( *m == res2 );
+  delete n;
+};
+
+/** Unit Test for matrix properties.
+ *
+ */
+void MatrixContentTest::PropertiesTest()
+{
+  // is zero
+  m->setZero();
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNull() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
+
+  // is positive
+  m->setValue(0.5);
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsPositive() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
+
+  // is negative
+  m->setValue(-0.1);
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
+  CPPUNIT_ASSERT_EQUAL( true, m->IsNegative() );
+  CPPUNIT_ASSERT_EQUAL( false, m->IsNonNegative() );
+
+  // is positive definite
+  CPPUNIT_ASSERT_EQUAL( false, m->IsPositiveDefinite() );
+};
Index: src/LinearAlgebra/unittests/MatrixContentUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/MatrixContentUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/MatrixContentUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,42 @@
+/*
+ * MatrixContentUnitTest.hpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+#ifndef MATRIXCONTENTUNITTEST_HPP_
+#define MATRIXCONTENTUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class MatrixContent;
+
+/********************************************** Test classes **************************************/
+
+class MatrixContentTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( MatrixContentTest) ;
+    CPPUNIT_TEST (AccessTest );
+    CPPUNIT_TEST (InitializationTest );
+    CPPUNIT_TEST (CopyTest );
+    CPPUNIT_TEST (ExchangeTest );
+    CPPUNIT_TEST (PropertiesTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    void setUp();
+    void tearDown();
+
+    void AccessTest();
+    void InitializationTest();
+    void CopyTest();
+    void ExchangeTest();
+    void PropertiesTest();
+
+private:
+    MatrixContent *m;
+};
+
+
+#endif /* MATRIXCONTENTUNITTEST_HPP_ */
Index: src/LinearAlgebra/unittests/MatrixUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/MatrixUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/MatrixUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,364 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MatrixUnitTest.cpp
+ *
+ *  Created on: Jul 7, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cmath>
+
+#include "MatrixUnitTest.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+#include "Exceptions/NotInvertibleException.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( MatrixUnittest );
+
+void MatrixUnittest::setUp(){
+  zero = new RealSpaceMatrix();
+  for(int i =NDIM;i--;) {
+    for(int j =NDIM;j--;) {
+      zero->at(i,j)=0.;
+    }
+  }
+  one = new RealSpaceMatrix();
+  for(int i =NDIM;i--;){
+    one->at(i,i)=1.;
+  }
+  full=new RealSpaceMatrix();
+  for(int i=NDIM;i--;){
+    for(int j=NDIM;j--;){
+      full->at(i,j)=1.;
+    }
+  }
+  diagonal = new RealSpaceMatrix();
+  for(int i=NDIM;i--;){
+    diagonal->at(i,i)=i+1.;
+  }
+  perm1 = new RealSpaceMatrix();
+  perm1->column(0) = unitVec[0];
+  perm1->column(1) = unitVec[2];
+  perm1->column(2) = unitVec[1];
+
+
+  perm2 = new RealSpaceMatrix();
+  perm2->column(0) = unitVec[1];
+  perm2->column(1) = unitVec[0];
+  perm2->column(2) = unitVec[2];
+
+  perm3 = new RealSpaceMatrix();
+  perm3->column(0) = unitVec[1];
+  perm3->column(1) = unitVec[2];
+  perm3->column(2) = unitVec[0];
+
+  perm4 = new RealSpaceMatrix();
+  perm4->column(0) = unitVec[2];
+  perm4->column(1) = unitVec[1];
+  perm4->column(2) = unitVec[0];
+
+  perm5 = new RealSpaceMatrix();
+  perm5->column(0) = unitVec[2];
+  perm5->column(1) = unitVec[0];
+  perm5->column(2) = unitVec[1];
+
+}
+void MatrixUnittest::tearDown(){
+  delete zero;
+  delete one;
+  delete full;
+  delete diagonal;
+  delete perm1;
+  delete perm2;
+  delete perm3;
+  delete perm4;
+  delete perm5;
+}
+
+void MatrixUnittest::AccessTest(){
+  RealSpaceMatrix mat;
+  for(int i=NDIM;i--;){
+    for(int j=NDIM;j--;){
+      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),0.);
+    }
+  }
+  int k=1;
+  for(int i=NDIM;i--;){
+    for(int j=NDIM;j--;){
+      mat.at(i,j)=k++;
+    }
+  }
+  k=1;
+  for(int i=NDIM;i--;){
+    for(int j=NDIM;j--;){
+      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),(double)k);
+      ++k;
+    }
+  }
+}
+
+void MatrixUnittest::VectorTest(){
+  RealSpaceMatrix mat;
+  for(int i=NDIM;i--;){
+    CPPUNIT_ASSERT_EQUAL(mat.row(i),zeroVec);
+    CPPUNIT_ASSERT_EQUAL(mat.column(i),zeroVec);
+  }
+  CPPUNIT_ASSERT_EQUAL(mat.diagonal(),zeroVec);
+
+  mat.setIdentity();
+  CPPUNIT_ASSERT_EQUAL(mat.row(0),unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(mat.row(1),unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(mat.row(2),unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(mat.column(0),unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(mat.column(1),unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(mat.column(2),unitVec[2]);
+
+  Vector t1=Vector(1.,1.,1.);
+  Vector t2=Vector(2.,2.,2.);
+  Vector t3=Vector(3.,3.,3.);
+  Vector t4=Vector(1.,2.,3.);
+
+  mat.row(0)=t1;
+  mat.row(1)=t2;
+  mat.row(2)=t3;
+  CPPUNIT_ASSERT_EQUAL(mat.row(0),t1);
+  CPPUNIT_ASSERT_EQUAL(mat.row(1),t2);
+  CPPUNIT_ASSERT_EQUAL(mat.row(2),t3);
+  CPPUNIT_ASSERT_EQUAL(mat.column(0),t4);
+  CPPUNIT_ASSERT_EQUAL(mat.column(1),t4);
+  CPPUNIT_ASSERT_EQUAL(mat.column(2),t4);
+  CPPUNIT_ASSERT_EQUAL(mat.diagonal(),t4);
+  for(int i=NDIM;i--;){
+    for(int j=NDIM;j--;){
+      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),i+1.);
+    }
+  }
+
+  mat.column(0)=t1;
+  mat.column(1)=t2;
+  mat.column(2)=t3;
+  CPPUNIT_ASSERT_EQUAL(mat.column(0),t1);
+  CPPUNIT_ASSERT_EQUAL(mat.column(1),t2);
+  CPPUNIT_ASSERT_EQUAL(mat.column(2),t3);
+  CPPUNIT_ASSERT_EQUAL(mat.row(0),t4);
+  CPPUNIT_ASSERT_EQUAL(mat.row(1),t4);
+  CPPUNIT_ASSERT_EQUAL(mat.row(2),t4);
+  CPPUNIT_ASSERT_EQUAL(mat.diagonal(),t4);
+  for(int i=NDIM;i--;){
+    for(int j=NDIM;j--;){
+      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),j+1.);
+    }
+  }
+}
+
+void MatrixUnittest::TransposeTest(){
+  RealSpaceMatrix res;
+
+  // transpose of unit is unit
+  res.setIdentity();
+  res.transpose();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+
+  // transpose of transpose is same matrix
+  res.setZero();
+  res.set(2,2, 1.);
+  CPPUNIT_ASSERT_EQUAL(res.transpose().transpose(),res);
+}
+
+void MatrixUnittest::OperationTest(){
+  RealSpaceMatrix res;
+
+  res =(*zero) *(*zero);
+  std::cout << *zero << " times " << *zero << " is " << res << std::endl;
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*one);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*full);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*diagonal);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*perm1);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*perm2);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*perm3);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*perm4);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+  res =(*zero) *(*perm5);
+  CPPUNIT_ASSERT_EQUAL(res,*zero);
+
+  res =(*one)*(*one);
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+  res =(*one)*(*full);
+  CPPUNIT_ASSERT_EQUAL(res,*full);
+  res =(*one)*(*diagonal);
+  CPPUNIT_ASSERT_EQUAL(res,*diagonal);
+  res =(*one)*(*perm1);
+  CPPUNIT_ASSERT_EQUAL(res,*perm1);
+  res =(*one)*(*perm2);
+  CPPUNIT_ASSERT_EQUAL(res,*perm2);
+  res =(*one)*(*perm3);
+  CPPUNIT_ASSERT_EQUAL(res,*perm3);
+  res =(*one)*(*perm4);
+  CPPUNIT_ASSERT_EQUAL(res,*perm4);
+  res =(*one)*(*perm5);
+  CPPUNIT_ASSERT_EQUAL(res,*perm5);
+
+  res = (*full)*(*perm1);
+  CPPUNIT_ASSERT_EQUAL(res,*full);
+  res = (*full)*(*perm2);
+  CPPUNIT_ASSERT_EQUAL(res,*full);
+  res = (*full)*(*perm3);
+  CPPUNIT_ASSERT_EQUAL(res,*full);
+  res = (*full)*(*perm4);
+  CPPUNIT_ASSERT_EQUAL(res,*full);
+  res = (*full)*(*perm5);
+  CPPUNIT_ASSERT_EQUAL(res,*full);
+
+  res = (*diagonal)*(*perm1);
+  CPPUNIT_ASSERT_EQUAL(res.column(0),unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(res.column(1),3*unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(res.column(2),2*unitVec[1]);
+  res = (*diagonal)*(*perm2);
+  CPPUNIT_ASSERT_EQUAL(res.column(0),2*unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(res.column(1),unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(res.column(2),3*unitVec[2]);
+  res = (*diagonal)*(*perm3);
+  CPPUNIT_ASSERT_EQUAL(res.column(0),2*unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(res.column(1),3*unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(res.column(2),unitVec[0]);
+  res = (*diagonal)*(*perm4);
+  CPPUNIT_ASSERT_EQUAL(res.column(0),3*unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(res.column(1),2*unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(res.column(2),unitVec[0]);
+  res = (*diagonal)*(*perm5);
+  CPPUNIT_ASSERT_EQUAL(res.column(0),3*unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(res.column(1),unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(res.column(2),2*unitVec[1]);
+}
+
+void MatrixUnittest::RotationTest(){
+  RealSpaceMatrix res;
+  RealSpaceMatrix inverse;
+
+  // zero rotation angles yields unity matrix
+  res.setRotation(0,0,0);
+  CPPUNIT_ASSERT_EQUAL(*one, res);
+
+  // arbitrary rotation matrix has det = 1
+  res.setRotation(M_PI/3.,1.,M_PI/7.);
+  CPPUNIT_ASSERT(fabs(fabs(res.determinant()) -1.) < MYEPSILON);
+
+  // inverse is rotation matrix with negative angles
+  res.setRotation(M_PI/3.,0.,0.);
+  inverse.setRotation(-M_PI/3.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL(*one, res * inverse);
+
+  // ... or transposed
+  res.setRotation(M_PI/3.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL(inverse, ((const RealSpaceMatrix) res).transpose());
+}
+
+void MatrixUnittest::InvertTest(){
+  CPPUNIT_ASSERT_THROW(zero->invert(),NotInvertibleException);
+  CPPUNIT_ASSERT_THROW(full->invert(),NotInvertibleException);
+
+  RealSpaceMatrix res;
+  res = (*one)*one->invert();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+  res = (*diagonal)*diagonal->invert();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+  res = (*perm1)*perm1->invert();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+  res = (*perm2)*perm2->invert();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+  res = (*perm3)*perm3->invert();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+  res = (*perm4)*perm4->invert();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+  res = (*perm5)*perm5->invert();
+  CPPUNIT_ASSERT_EQUAL(res,*one);
+}
+
+
+void MatrixUnittest::DeterminantTest(){
+  CPPUNIT_ASSERT_EQUAL(zero->determinant(),0.);
+  CPPUNIT_ASSERT_EQUAL(one->determinant(),1.);
+  CPPUNIT_ASSERT_EQUAL(diagonal->determinant(),6.);
+  CPPUNIT_ASSERT_EQUAL(full->determinant(),0.);
+  CPPUNIT_ASSERT_EQUAL(perm1->determinant(),-1.);
+  CPPUNIT_ASSERT_EQUAL(perm2->determinant(),-1.);
+  CPPUNIT_ASSERT_EQUAL(perm3->determinant(),1.);
+  CPPUNIT_ASSERT_EQUAL(perm4->determinant(),-1.);
+  CPPUNIT_ASSERT_EQUAL(perm5->determinant(),1.);
+}
+
+void MatrixUnittest::VecMultTest(){
+  CPPUNIT_ASSERT_EQUAL((*zero)*unitVec[0],zeroVec);
+  CPPUNIT_ASSERT_EQUAL((*zero)*unitVec[1],zeroVec);
+  CPPUNIT_ASSERT_EQUAL((*zero)*unitVec[2],zeroVec);
+  CPPUNIT_ASSERT_EQUAL((*zero)*zeroVec,zeroVec);
+
+  CPPUNIT_ASSERT_EQUAL((*one)*unitVec[0],unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL((*one)*unitVec[1],unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL((*one)*unitVec[2],unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL((*one)*zeroVec,zeroVec);
+
+  CPPUNIT_ASSERT_EQUAL((*diagonal)*unitVec[0],unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL((*diagonal)*unitVec[1],2*unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL((*diagonal)*unitVec[2],3*unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL((*diagonal)*zeroVec,zeroVec);
+
+  CPPUNIT_ASSERT_EQUAL((*perm1)*unitVec[0],unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL((*perm1)*unitVec[1],unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL((*perm1)*unitVec[2],unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL((*perm1)*zeroVec,zeroVec);
+
+  CPPUNIT_ASSERT_EQUAL((*perm2)*unitVec[0],unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL((*perm2)*unitVec[1],unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL((*perm2)*unitVec[2],unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL((*perm2)*zeroVec,zeroVec);
+
+  CPPUNIT_ASSERT_EQUAL((*perm3)*unitVec[0],unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL((*perm3)*unitVec[1],unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL((*perm3)*unitVec[2],unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL((*perm3)*zeroVec,zeroVec);
+
+  CPPUNIT_ASSERT_EQUAL((*perm4)*unitVec[0],unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL((*perm4)*unitVec[1],unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL((*perm4)*unitVec[2],unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL((*perm4)*zeroVec,zeroVec);
+
+  CPPUNIT_ASSERT_EQUAL((*perm5)*unitVec[0],unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL((*perm5)*unitVec[1],unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL((*perm5)*unitVec[2],unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL((*perm5)*zeroVec,zeroVec);
+
+  Vector t = Vector(1.,2.,3.);
+  CPPUNIT_ASSERT_EQUAL((*perm1)*t,Vector(1,3,2));
+  CPPUNIT_ASSERT_EQUAL((*perm2)*t,Vector(2,1,3));
+  CPPUNIT_ASSERT_EQUAL((*perm3)*t,Vector(3,1,2));
+  CPPUNIT_ASSERT_EQUAL((*perm4)*t,Vector(3,2,1));
+  CPPUNIT_ASSERT_EQUAL((*perm5)*t,Vector(2,3,1));
+}
Index: src/LinearAlgebra/unittests/MatrixUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/MatrixUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/MatrixUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,52 @@
+/*
+ * MatrixUnitTest.hpp
+ *
+ *  Created on: Jul 7, 2010
+ *      Author: crueger
+ */
+
+#ifndef MATRIXUNITTEST_HPP_
+#define MATRIXUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class RealSpaceMatrix;
+
+class MatrixUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( MatrixUnittest) ;
+  CPPUNIT_TEST ( AccessTest );
+  CPPUNIT_TEST ( VectorTest );
+  CPPUNIT_TEST ( OperationTest );
+  CPPUNIT_TEST ( TransposeTest );
+  CPPUNIT_TEST ( RotationTest );
+  CPPUNIT_TEST ( InvertTest );
+  CPPUNIT_TEST ( DeterminantTest );
+  CPPUNIT_TEST ( VecMultTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void AccessTest();
+  void VectorTest();
+  void OperationTest();
+  void TransposeTest();
+  void RotationTest();
+  void InvertTest();
+  void DeterminantTest();
+  void VecMultTest();
+
+  RealSpaceMatrix *zero;
+  RealSpaceMatrix *one;
+  RealSpaceMatrix *full;
+  RealSpaceMatrix *diagonal;
+  RealSpaceMatrix *perm1;
+  RealSpaceMatrix *perm2;
+  RealSpaceMatrix *perm3;
+  RealSpaceMatrix *perm4;
+  RealSpaceMatrix *perm5;
+};
+
+#endif /* MATRIXUNITTEST_HPP_ */
Index: src/LinearAlgebra/unittests/PlaneUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/PlaneUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/PlaneUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,230 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * PlaneUnittest.cpp
+ *
+ *  Created on: Apr 30, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cmath>
+
+#include "LinearAlgebra/Vector.hpp"
+#include "LinearAlgebra/Line.hpp"
+
+#include "PlaneUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( PlaneUnittest );
+
+void PlaneUnittest::setUp(){
+  p1 = new Plane(unitVec[0],unitVec[1],unitVec[2]);
+  p2 = new Plane(unitVec[0],unitVec[1],zeroVec);
+  p3 = new Plane(unitVec[0],zeroVec,unitVec[2]);
+  p4 = new Plane(zeroVec,unitVec[1],unitVec[2]);
+}
+
+void PlaneUnittest::tearDown(){
+  delete p1;
+  delete p2;
+  delete p3;
+  delete p4;
+}
+
+void PlaneUnittest::constructionErrorTest(){
+  // try several method of construction..
+  // see if error checking works
+
+  // three points
+  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],unitVec[1],unitVec[2]));
+  // when only two points are differnt this gives an error
+  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],unitVec[1],unitVec[1]),LinearDependenceException);
+  // same with only one point
+  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],unitVec[0],unitVec[0]),LinearDependenceException);
+
+  // use two vector giving two directions
+  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],unitVec[1],0));
+  // and again this is actually only one vector
+  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],unitVec[0],0),LinearDependenceException);
+  // Zero vector does not give a good direction
+  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],zeroVec,0),ZeroVectorException);
+
+  // use a normalvector and an scalar offset
+  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],0));
+  // The zero vector is no good as a normalvector
+  CPPUNIT_ASSERT_THROW(Plane(zeroVec,0),ZeroVectorException);
+
+  // use a normalvector and an offset vector
+  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],zeroVec));
+  // and the bad zeroVector again
+  CPPUNIT_ASSERT_THROW(Plane(zeroVec,zeroVec),ZeroVectorException);
+}
+
+
+// we need to test normals independent of the direction
+bool testNormal(const Vector &normal1, const Vector &normal2){
+  return (normal1==normal2) || (normal1==-1*normal2);
+}
+
+void PlaneUnittest::constructionResultTest(){
+  {
+    // construct with three points on plane
+    Plane p1(unitVec[0],unitVec[1],zeroVec);
+    CPPUNIT_ASSERT(testNormal(unitVec[2],p1.getNormal()));
+    CPPUNIT_ASSERT_EQUAL(0.,p1.getOffset());
+
+    Plane p2(unitVec[0],unitVec[2],zeroVec);
+    CPPUNIT_ASSERT(testNormal(unitVec[1],p2.getNormal()));
+    CPPUNIT_ASSERT_EQUAL(0.,p2.getOffset());
+
+    Plane p3(unitVec[1],unitVec[2],zeroVec);
+    CPPUNIT_ASSERT(testNormal(unitVec[0],p3.getNormal()));
+    CPPUNIT_ASSERT_EQUAL(0.,p3.getOffset());
+  }
+  {
+    // construct with two directions + offset
+    Plane p1(unitVec[0],unitVec[1],0);
+    CPPUNIT_ASSERT(testNormal(unitVec[2],p1.getNormal()));
+    CPPUNIT_ASSERT_EQUAL(0.,p1.getOffset());
+
+    Plane p2(unitVec[0],unitVec[2],0);
+    CPPUNIT_ASSERT(testNormal(unitVec[1],p2.getNormal()));
+    CPPUNIT_ASSERT_EQUAL(0.,p2.getOffset());
+
+    Plane p3(unitVec[1],unitVec[2],0);
+    CPPUNIT_ASSERT(testNormal(unitVec[0],p3.getNormal()));
+    CPPUNIT_ASSERT_EQUAL(0.,p3.getOffset());
+  }
+}
+
+void PlaneUnittest::pointsTest(){
+  std::vector<Vector> points1 = p1->getPointsOnPlane();
+  CPPUNIT_ASSERT(p1->isContained(points1[0]));
+  CPPUNIT_ASSERT(p1->isContained(points1[1]));
+  CPPUNIT_ASSERT(p1->isContained(points1[2]));
+  // check that the three points differ
+  CPPUNIT_ASSERT(points1[0]!=points1[1]);
+  CPPUNIT_ASSERT(points1[0]!=points1[2]);
+  CPPUNIT_ASSERT(points1[1]!=points1[2]);
+
+
+  std::vector<Vector> points2 = p2->getPointsOnPlane();
+  CPPUNIT_ASSERT(p2->isContained(points2[0]));
+  CPPUNIT_ASSERT(p2->isContained(points2[1]));
+  CPPUNIT_ASSERT(p2->isContained(points2[2]));
+  // check that the three points differ
+  CPPUNIT_ASSERT(points2[0]!=points2[1]);
+  CPPUNIT_ASSERT(points2[0]!=points2[2]);
+  CPPUNIT_ASSERT(points2[1]!=points2[2]);
+
+  std::vector<Vector> points3 = p3->getPointsOnPlane();
+  CPPUNIT_ASSERT(p3->isContained(points3[0]));
+  CPPUNIT_ASSERT(p3->isContained(points3[1]));
+  CPPUNIT_ASSERT(p3->isContained(points3[2]));
+  // check that the three points differ
+  CPPUNIT_ASSERT(points3[0]!=points3[1]);
+  CPPUNIT_ASSERT(points3[0]!=points3[2]);
+  CPPUNIT_ASSERT(points3[1]!=points3[2]);
+
+  std::vector<Vector> points4 = p4->getPointsOnPlane();
+  CPPUNIT_ASSERT(p4->isContained(points4[0]));
+  CPPUNIT_ASSERT(p4->isContained(points4[1]));
+  CPPUNIT_ASSERT(p4->isContained(points4[2]));
+  // check that the three points differ
+  CPPUNIT_ASSERT(points4[0]!=points4[1]);
+  CPPUNIT_ASSERT(points4[0]!=points4[2]);
+  CPPUNIT_ASSERT(points4[1]!=points4[2]);
+}
+
+
+void PlaneUnittest::operationsTest(){
+  {
+    Vector t = (1./3.)*(unitVec[0]+unitVec[1]+unitVec[2]);
+    CPPUNIT_ASSERT(fabs(p1->distance(zeroVec)-t.Norm()) < MYEPSILON);
+    CPPUNIT_ASSERT_EQUAL(t,p1->getClosestPoint(zeroVec));
+  }
+
+  CPPUNIT_ASSERT(fabs(p2->distance(unitVec[2])-1) < MYEPSILON);
+  CPPUNIT_ASSERT_EQUAL(zeroVec,p2->getClosestPoint(unitVec[2]));
+  CPPUNIT_ASSERT(fabs(p3->distance(unitVec[1])-1) < MYEPSILON);
+  CPPUNIT_ASSERT_EQUAL(zeroVec,p3->getClosestPoint(unitVec[1]));
+  CPPUNIT_ASSERT(fabs(p4->distance(unitVec[0])-1) < MYEPSILON);
+  CPPUNIT_ASSERT_EQUAL(zeroVec,p4->getClosestPoint(unitVec[0]));
+}
+
+void PlaneUnittest::mirrorTest(){
+  Vector fixture;
+
+  // some Vectors that lie on the planes
+  fixture = p1->mirrorVector(unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = p1->mirrorVector(unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = p1->mirrorVector(unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  fixture = p2->mirrorVector(zeroVec);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = p2->mirrorVector(unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = p2->mirrorVector(unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+
+  fixture = p3->mirrorVector(zeroVec);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = p3->mirrorVector(unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
+  fixture = p3->mirrorVector(unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  fixture = p4->mirrorVector(zeroVec);
+  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
+  fixture = p4->mirrorVector(unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
+  fixture = p4->mirrorVector(unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
+
+  // some Vectors outside of the planes
+  {
+    Vector t = (2./3.)*(unitVec[0]+unitVec[1]+unitVec[2]);
+    fixture = p1->mirrorVector(zeroVec);
+    CPPUNIT_ASSERT_EQUAL(fixture,t);
+  }
+
+  fixture = p2->mirrorVector(unitVec[2]);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
+  fixture = p3->mirrorVector(unitVec[1]);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
+  fixture = p4->mirrorVector(unitVec[0]);
+  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
+}
+
+void PlaneUnittest::LineIntersectionTest(){
+  Vector fixture;
+  // plane at (0,0,0) normal to (1,0,0) cuts line from (0,0,0) to (2,1,0) at ???
+  Line l1 = makeLineThrough(zeroVec,Vector(2,1,0));
+  CPPUNIT_ASSERT_NO_THROW(fixture = Plane(unitVec[0], zeroVec).GetIntersection(l1) );
+  CPPUNIT_ASSERT_EQUAL( zeroVec, fixture );
+
+  // plane at (2,1,0) normal to (0,1,0) cuts line from (1,0,0) to (0,1,1) at ???
+  Line l2 = makeLineThrough(unitVec[0],Vector(0,1,1));
+  CPPUNIT_ASSERT_NO_THROW(fixture = Plane(unitVec[1], Vector(2,1,0)).GetIntersection(l2) );
+  CPPUNIT_ASSERT_EQUAL( Vector(0., 1., 1.), fixture );
+}
Index: src/LinearAlgebra/unittests/PlaneUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/PlaneUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/PlaneUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,44 @@
+/*
+ * PlaneUnittest.hpp
+ *
+ *  Created on: Apr 30, 2010
+ *      Author: crueger
+ */
+
+#ifndef PLANEUNITTEST_HPP_
+#define PLANEUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "LinearAlgebra/Plane.hpp"
+
+class PlaneUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( PlaneUnittest) ;
+  CPPUNIT_TEST ( constructionErrorTest );
+  CPPUNIT_TEST ( constructionResultTest );
+  CPPUNIT_TEST ( pointsTest );
+  CPPUNIT_TEST ( operationsTest );
+  CPPUNIT_TEST ( mirrorTest );
+  CPPUNIT_TEST ( LineIntersectionTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void constructionErrorTest();
+  void constructionResultTest();
+  void pointsTest();
+  void operationsTest();
+  void mirrorTest();
+  void LineIntersectionTest();
+
+private:
+  Plane *p1;
+  Plane *p2;
+  Plane *p3;
+  Plane *p4;
+};
+
+#endif /* PLANEUNITTEST_HPP_ */
Index: src/LinearAlgebra/unittests/VectorContentUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/VectorContentUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/VectorContentUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,176 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * VectorContentUnittest.cpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "VectorContentUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( VectorContentTest );
+
+
+void VectorContentTest::setUp()
+{
+  v = new VectorContent(3);
+};
+
+void VectorContentTest::tearDown()
+{
+  delete(v);
+};
+
+/** Unit test for accessing elements in the vector.
+ *
+ */
+void VectorContentTest::AccessTest()
+{
+  // set
+  for (int i=0;i<3;i++)
+    v->at(i) = (double)i;
+
+  // and check
+  double *ptr = NULL;
+  for (int i=0;i<3;i++) {
+    CPPUNIT_ASSERT_EQUAL( (double)i, v->at(i) );
+    ptr = v->Pointer(i);
+    CPPUNIT_ASSERT_EQUAL( (double)i, *ptr );
+  }
+
+  // out of bounds
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(3) );
+  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1) );
+};
+
+
+/** Unit test for initializing the vector.
+ *
+ */
+void VectorContentTest::InitializaionTest()
+{
+  // set zero
+  v->setZero();
+  for (int i=0;i<3;i++)
+    CPPUNIT_ASSERT_EQUAL( 0., v->at(i) );
+
+  // set basis
+  for (int i=0;i<3;i++) {
+    v->setBasis(i);
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , v->at(j) );
+  }
+
+  // set all
+  v->setValue(1.5);
+  for (int i=0;i<3;i++)
+    CPPUNIT_ASSERT_EQUAL( 1.5, v->at(i) );
+};
+
+/** Unit test for copying vectors.
+ *
+ */
+void VectorContentTest::CopyTest()
+{
+  // set basis
+  VectorContent *dest = NULL;
+  for (int i=0;i<3;i++) {
+    v->setBasis(i);
+    dest = new VectorContent(v);
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( v->at(j) , dest->at(j) );
+
+    delete(dest);
+  }
+};
+
+/** Unit test for exchanging elements of a vector.
+ *
+ */
+void VectorContentTest::ExchangeTest()
+{
+  // set basis
+  for (int i=0;i<3;i++) {
+    v->setBasis(i);
+    v->SwapElements((i)%3,(i+1)%3);
+    for (int j=0;j<3;j++)
+      CPPUNIT_ASSERT_EQUAL( (i+1)%3 == j ? 1. : 0. , v->at(j) );
+  }
+
+  // set to 1,2,3 and reverse
+  for (int i=0;i<3;i++)
+    v->at(i) = (double)(i+1);
+  v->Reverse();
+  for (int j=0;j<3;j++)
+    CPPUNIT_ASSERT_EQUAL( (double)(3-j), v->at(j) );
+};
+
+/** UnitTest for operators.
+ */
+void VectorContentTest::OperatorIsTest()
+{
+  VectorContent zero(3);
+  VectorContent unit(3);
+  zero.setZero();
+  unit.setZero();
+  unit[1] = 1.;
+  // summation and scaling
+  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, zero.IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, unit.IsZero() );
+  CPPUNIT_ASSERT_EQUAL( true, zero.IsZero() );
+};
+
+/** UnitTest for operators.
+ */
+void VectorContentTest::OperatorAlgebraTest()
+{
+  VectorContent zero(3);
+  VectorContent unit(3);
+  zero.setZero();
+  unit.setZero();
+  unit[1] = 1.;
+  // summation and scaling
+  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, (zero-unit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, (zero-unit).IsZero() );
+  CPPUNIT_ASSERT_EQUAL( true, (zero+zero).IsZero() );
+  CPPUNIT_ASSERT_EQUAL( false, (unit*0.98).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, (0.98*unit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, (unit*1.).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, (1.*unit).IsOne() );
+
+  CPPUNIT_ASSERT_EQUAL( unit, (zero+unit) );
+  CPPUNIT_ASSERT_EQUAL( zero, (zero+zero) );
+  CPPUNIT_ASSERT_EQUAL( unit, (unit+zero) );
+
+  unit += zero;
+  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
+  unit *= 1.;
+  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
+};
Index: src/LinearAlgebra/unittests/VectorContentUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/VectorContentUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/VectorContentUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,45 @@
+/*
+ * VectorContentUnittest.hpp
+ *
+ *  Created on: Jan 8, 2010
+ *      Author: heber
+ */
+
+#ifndef VECTORCONTENTUNITTEST_HPP_
+#define VECTORCONTENTUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "LinearAlgebra/VectorContent.hpp"
+
+/********************************************** Test classes **************************************/
+
+class VectorContentTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( VectorContentTest) ;
+    CPPUNIT_TEST (AccessTest );
+    CPPUNIT_TEST (InitializaionTest );
+    CPPUNIT_TEST (CopyTest );
+    CPPUNIT_TEST (ExchangeTest );
+    CPPUNIT_TEST (OperatorAlgebraTest );
+    CPPUNIT_TEST (OperatorIsTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    void setUp();
+    void tearDown();
+
+    void AccessTest();
+    void InitializaionTest();
+    void CopyTest();
+    void ExchangeTest();
+    void OperatorIsTest();
+    void OperatorAlgebraTest();
+
+private:
+
+    VectorContent *v;
+};
+
+
+#endif /* VECTORCONTENTUNITTEST_HPP_ */
Index: src/LinearAlgebra/unittests/VectorUnitTest.cpp
===================================================================
--- src/LinearAlgebra/unittests/VectorUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/VectorUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,274 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * unittest.cpp
+ *
+ *  Created on: Aug 17, 2009
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "Helpers/defs.hpp"
+#include "Helpers/Log.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "LinearAlgebra/vector_ops.hpp"
+#include "LinearAlgebra/Plane.hpp"
+#include "Exceptions/LinearDependenceException.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+
+#include "VectorUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+#include <iostream>
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( VectorTest );
+
+
+void VectorTest::setUp()
+{
+  zero  = Vector(0.,0.,0.);
+  unit = Vector(1.,0.,0.);
+  otherunit = Vector(0.,1.,0.);
+  notunit = Vector(0.,1.,1.);
+  two = Vector(2.,1.,0.);
+  three = Vector(1,2,3);
+};
+
+
+void VectorTest::tearDown()
+{
+  logger::purgeInstance();
+  errorLogger::purgeInstance();
+};
+
+/** UnitTest for Constructors and Vector::IsZero() and Vector::IsOne().
+ */
+void VectorTest::AssignmentTest()
+{
+  // test with zero
+  zero.at(0) = 0;
+  zero.at(1) = 0;
+  zero.at(2) = 0;
+  double zero_array[3] = {0., 0., 0.};
+
+  CPPUNIT_ASSERT_EQUAL( zero, Vector(0,0,0));
+  CPPUNIT_ASSERT_EQUAL( zero, Vector(0.,0.,0.));
+  CPPUNIT_ASSERT_EQUAL( zero, Vector(zero_array[0], zero_array[1], zero_array[2]));
+  CPPUNIT_ASSERT_EQUAL( zero, Vector(zero_array));
+
+  // test with unit
+  unit.at(0) = 1;
+  unit.at(1) = 0;
+  unit.at(2) = 0;
+  double unit_array[3] = {1., 0., 0.};
+
+  CPPUNIT_ASSERT_EQUAL( unit, Vector(1,0,0));
+  CPPUNIT_ASSERT_EQUAL( unit, Vector(1.,0.,0.));
+  CPPUNIT_ASSERT_EQUAL( unit, Vector(unit_array[0], unit_array[1], unit_array[2]));
+  CPPUNIT_ASSERT_EQUAL( unit, Vector(unit_array));
+
+  // test with two
+  two.at(0) = 2;
+  two.at(1) = 1;
+  two.at(2) = 0;
+  double two_array[3] = {2., 1., 0.};
+
+  CPPUNIT_ASSERT_EQUAL( two, Vector(2,1,0));
+  CPPUNIT_ASSERT_EQUAL( two, Vector(2.,1.,0.));
+  CPPUNIT_ASSERT_EQUAL( two, Vector(two_array[0], two_array[1], two_array[2]));
+  CPPUNIT_ASSERT_EQUAL( two, Vector(two_array));
+
+  // test with three
+  three.at(0) = 1;
+  three.at(1) = 2;
+  three.at(2) = 3;
+  double three_array[3] = {1., 2., 3.};
+
+  CPPUNIT_ASSERT_EQUAL( three, Vector(1,2,3));
+  CPPUNIT_ASSERT_EQUAL( three, Vector(1.,2.,3.));
+  CPPUNIT_ASSERT_EQUAL( three, Vector(three_array[0], three_array[1], three_array[2]));
+  CPPUNIT_ASSERT_EQUAL( three, Vector(three_array));
+}
+
+/** UnitTest for Constructors and Vector::IsZero() and Vector::IsOne().
+ */
+void VectorTest::UnityTest()
+{
+  // unity and zero tests
+  CPPUNIT_ASSERT_EQUAL( true, zero.IsZero() );
+  CPPUNIT_ASSERT_EQUAL( false, zero.IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, unit.IsZero() );
+  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, notunit.IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, otherunit.IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, otherunit.IsZero() );
+};
+
+/** UnitTest for Vector::CopyVector(), Vector::AddVector, Vector::SubtractVector() and Vector::Scale()/
+ */
+void VectorTest::SimpleAlgebraTest()
+{
+  double factor;
+  // copy vector
+  fixture = Vector(2.,3.,4.);
+  CPPUNIT_ASSERT_EQUAL( Vector(2.,3.,4.), fixture );
+  // summation and scaling
+  fixture = zero + unit;
+  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
+  fixture = zero - unit;
+  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, fixture.IsZero() );
+  fixture = zero + zero;
+  CPPUNIT_ASSERT_EQUAL( true, fixture.IsZero() );
+  fixture = notunit - otherunit;
+  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
+  fixture = unit - otherunit;
+  CPPUNIT_ASSERT_EQUAL( false, fixture.IsOne() );
+  fixture = notunit - unit - otherunit;
+  CPPUNIT_ASSERT_EQUAL( false, fixture.IsZero() );
+  fixture = 0.98 * unit;
+  CPPUNIT_ASSERT_EQUAL( false, fixture.IsOne() );
+  fixture = 1. * unit;
+  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
+  factor = 0.98;
+  fixture = factor * unit;
+  CPPUNIT_ASSERT_EQUAL( false, fixture.IsOne() );
+  factor = 1.;
+  fixture = factor * unit;
+  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
+};
+
+
+/** UnitTest for operator versions of Vector::CopyVector(), Vector::AddVector, Vector::SubtractVector() and Vector::Scale().
+ */
+void VectorTest::OperatorAlgebraTest()
+{
+  // summation and scaling
+  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, (zero-unit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, (zero-unit).IsZero() );
+  CPPUNIT_ASSERT_EQUAL( true, (zero+zero).IsZero() );
+  CPPUNIT_ASSERT_EQUAL( true, (notunit-otherunit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, (unit+otherunit).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( false, (notunit-unit-otherunit).IsZero() );
+  CPPUNIT_ASSERT_EQUAL( false, (unit*0.98).IsOne() );
+  CPPUNIT_ASSERT_EQUAL( true, (unit*1.).IsOne() );
+
+  CPPUNIT_ASSERT_EQUAL( unit, (zero+unit) );
+  CPPUNIT_ASSERT_EQUAL( Vector(0.,0.,1.), (notunit-otherunit) );
+  CPPUNIT_ASSERT_EQUAL( Vector(-1, 0., 1.), (notunit-unit-otherunit) );
+};
+
+/** UnitTest for scalar products.
+ */
+void VectorTest::EuclidianScalarProductTest()
+{
+  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(zero) );
+  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(unit) );
+  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(otherunit) );
+  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(notunit) );
+  CPPUNIT_ASSERT_EQUAL( 1., unit.ScalarProduct(unit) );
+  CPPUNIT_ASSERT_EQUAL( 0., otherunit.ScalarProduct(unit) );
+  CPPUNIT_ASSERT_EQUAL( 0., otherunit.ScalarProduct(unit) );
+  CPPUNIT_ASSERT_EQUAL( 1., otherunit.ScalarProduct(notunit) );
+  CPPUNIT_ASSERT_EQUAL( 2., two.ScalarProduct(unit) );
+  CPPUNIT_ASSERT_EQUAL( 1., two.ScalarProduct(otherunit) );
+  CPPUNIT_ASSERT_EQUAL( 1., two.ScalarProduct(notunit) );
+}
+
+/** UnitTest for norms.
+ */
+void VectorTest::EuclidianNormTest()
+{
+  CPPUNIT_ASSERT_EQUAL( 0., zero.Norm() );
+  CPPUNIT_ASSERT_EQUAL( 0., zero.NormSquared() );
+  CPPUNIT_ASSERT_EQUAL( 1., unit.Norm() );
+  CPPUNIT_ASSERT_EQUAL( 1., unit.NormSquared() );
+  CPPUNIT_ASSERT_EQUAL( 1., otherunit.Norm() );
+  CPPUNIT_ASSERT_EQUAL( 1., otherunit.NormSquared() );
+  CPPUNIT_ASSERT_EQUAL( 2., notunit.NormSquared() );
+  CPPUNIT_ASSERT_EQUAL( sqrt(2.), notunit.Norm() );
+}
+
+/** UnitTest for distances.
+ */
+void VectorTest::EuclidianDistancesTest()
+{
+  CPPUNIT_ASSERT_EQUAL( 1., zero.distance(unit) );
+  CPPUNIT_ASSERT_EQUAL( sqrt(2.), otherunit.distance(unit) );
+  CPPUNIT_ASSERT_EQUAL( sqrt(2.), zero.distance(notunit) );
+  CPPUNIT_ASSERT_EQUAL( 1., otherunit.distance(notunit) );
+  CPPUNIT_ASSERT_EQUAL( sqrt(5.), two.distance(notunit) );
+}
+
+/** UnitTest for angles.
+ */
+void VectorTest::EuclidianAnglesTest()
+{
+  CPPUNIT_ASSERT_EQUAL( M_PI, zero.Angle(unit) );
+  CPPUNIT_ASSERT_EQUAL( 0., unit.Angle(unit) );
+  CPPUNIT_ASSERT_EQUAL( true, fabs(M_PI/2. - otherunit.Angle(unit)) < MYEPSILON );
+  CPPUNIT_ASSERT_EQUAL( true, fabs(M_PI/2. - unit.Angle(notunit)) < MYEPSILON );
+  CPPUNIT_ASSERT_EQUAL( true, fabs(M_PI/4. - otherunit.Angle(notunit)) < MYEPSILON );
+};
+
+/** UnitTest for projections.
+ */
+void VectorTest::ProjectionTest()
+{
+  CPPUNIT_ASSERT_EQUAL( zero, zero.Projection(unit) );
+  CPPUNIT_ASSERT_EQUAL( zero, otherunit.Projection(unit) );
+  CPPUNIT_ASSERT_EQUAL( Vector(0.4,0.2,0.),  otherunit.Projection(two) );
+  CPPUNIT_ASSERT_EQUAL( Vector(0.,1.,0.),  two.Projection(otherunit) );
+};
+
+/**
+ * Unittest for operation with normals
+ */
+void VectorTest::NormalsTest(){
+  Vector testVector;
+  // the zero Vector should produce an error
+  CPPUNIT_ASSERT(!testVector.GetOneNormalVector(zero));
+
+  // first one-component system
+  CPPUNIT_ASSERT(testVector.GetOneNormalVector(unit));
+  CPPUNIT_ASSERT(testVector.ScalarProduct(unit) < MYEPSILON);
+
+  // second one-component system
+  CPPUNIT_ASSERT(testVector.GetOneNormalVector(otherunit));
+  CPPUNIT_ASSERT(testVector.ScalarProduct(otherunit) < MYEPSILON);
+
+  // first two-component system
+  CPPUNIT_ASSERT(testVector.GetOneNormalVector(notunit));
+  CPPUNIT_ASSERT(testVector.ScalarProduct(notunit) < MYEPSILON);
+
+  // second two-component system
+  CPPUNIT_ASSERT(testVector.GetOneNormalVector(two));
+  CPPUNIT_ASSERT(testVector.ScalarProduct(two) < MYEPSILON);
+
+  // three component system
+  CPPUNIT_ASSERT(testVector.GetOneNormalVector(three));
+  CPPUNIT_ASSERT(testVector.ScalarProduct(three) < MYEPSILON);
+}
Index: src/LinearAlgebra/unittests/VectorUnitTest.hpp
===================================================================
--- src/LinearAlgebra/unittests/VectorUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/LinearAlgebra/unittests/VectorUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,62 @@
+/*
+ * cppunuit.hpp
+ *
+ *  Created on: Aug 17, 2009
+ *      Author: heber
+ */
+
+#ifndef VECTORUNITTEST_HPP_
+#define VECTORUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "LinearAlgebra/Vector.hpp"
+
+/********************************************** Test classes **************************************/
+
+class VectorTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( VectorTest) ;
+    CPPUNIT_TEST ( AssignmentTest );
+    CPPUNIT_TEST ( UnityTest );
+    CPPUNIT_TEST ( SimpleAlgebraTest );
+    CPPUNIT_TEST ( OperatorAlgebraTest );
+    CPPUNIT_TEST ( EuclidianScalarProductTest );
+    CPPUNIT_TEST ( EuclidianNormTest );
+    CPPUNIT_TEST ( EuclidianDistancesTest );
+    CPPUNIT_TEST ( EuclidianAnglesTest );
+    CPPUNIT_TEST ( ProjectionTest );
+    CPPUNIT_TEST ( NormalsTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    void setUp();
+    void tearDown();
+
+    void AssignmentTest();
+    void UnityTest();
+    void OperatorAlgebraTest();
+    void SimpleAlgebraTest();
+    void EuclidianScalarProductTest();
+    void EuclidianNormTest();
+    void EuclidianDistancesTest();
+    void EuclidianAnglesTest();
+    void ProjectionTest();
+    void NormalsTest();
+    void LineIntersectionTest();
+    void VectorRotationTest();
+
+private:
+    // vector to execute tests on, may be modified during run
+    Vector fixture;
+    // never modify these during run, other tests might rely on them
+    Vector zero;
+    Vector unit;
+    Vector otherunit;
+    Vector notunit;
+    Vector two;
+    Vector three;
+};
+
+
+#endif /* VECTORUNITTEST_HPP_ */
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -84,6 +84,8 @@
 
   
-DESCRIPTORSOURCE = Descriptors/AtomDescriptor.cpp \
+DESCRIPTORSOURCE = \
+	Descriptors/AtomDescriptor.cpp \
   Descriptors/AtomIdDescriptor.cpp \
+  Descriptors/AtomOfMoleculeSelectionDescriptor.cpp \
   Descriptors/AtomSelectionDescriptor.cpp \
   Descriptors/AtomShapeDescriptor.cpp \
@@ -93,10 +95,14 @@
   Descriptors/MoleculeIdDescriptor.cpp \
   Descriptors/MoleculeNameDescriptor.cpp \
+  Descriptors/MoleculeOfAtomSelectionDescriptor.cpp \
+  Descriptors/MoleculeOrderDescriptor.cpp \
   Descriptors/MoleculePtrDescriptor.cpp \
   Descriptors/MoleculeSelectionDescriptor.cpp
 				   
 
-DESCRIPTORHEADER = Descriptors/AtomDescriptor.hpp \
+DESCRIPTORHEADER = \
+	Descriptors/AtomDescriptor.hpp \
   Descriptors/AtomIdDescriptor.hpp \
+  Descriptors/AtomOfMoleculeSelectionDescriptor.hpp \
   Descriptors/AtomSelectionDescriptor.hpp \
   Descriptors/AtomShapeDescriptor.hpp \
@@ -106,6 +112,24 @@
   Descriptors/MoleculeIdDescriptor.hpp \
   Descriptors/MoleculeNameDescriptor.hpp \
+  Descriptors/MoleculeOfAtomSelectionDescriptor.hpp \
+  Descriptors/MoleculeOrderDescriptor.hpp \
   Descriptors/MoleculePtrDescriptor.hpp \
-  Descriptors/MoleculeSelectionDescriptor.cpp
+  Descriptors/MoleculeSelectionDescriptor.hpp
+  
+DESCRIPTORIMPLHEADER = \
+	Descriptors/AtomDescriptor_impl.hpp \
+  Descriptors/AtomIdDescriptor_impl.hpp \
+  Descriptors/AtomOfMoleculeSelectionDescriptor_impl.hpp \
+  Descriptors/AtomSelectionDescriptor_impl.hpp \
+  Descriptors/AtomShapeDescriptor_impl.hpp \
+  Descriptors/AtomTypeDescriptor_impl.hpp \
+  Descriptors/MoleculeDescriptor_impl.hpp \
+  Descriptors/MoleculeFormulaDescriptor_impl.hpp \
+  Descriptors/MoleculeIdDescriptor_impl.hpp \
+  Descriptors/MoleculeNameDescriptor_impl.hpp \
+  Descriptors/MoleculeOfAtomSelectionDescriptor_impl.hpp \
+  Descriptors/MoleculeOrderDescriptor_impl.hpp \
+  Descriptors/MoleculePtrDescriptor_impl.hpp \
+  Descriptors/MoleculeSelectionDescriptor_impl.hpp
   
 THERMOSTATSOURCE = \
@@ -191,4 +215,5 @@
   ${SHAPEHEADER} \
   ${DESCRIPTORHEADER} \
+  ${DESCRIPTORIMPLHEADER} \
   ${THERMOSTATHEADER} \
   ${TESSELATIONHEADER} \
@@ -292,5 +317,5 @@
 #molecuilder_CXXFLAGS += -DNO_CACHING
 molecuilder_LDFLAGS = $(BOOST_LIB)
-molecuilder_SOURCES = builder.cpp
+molecuilder_SOURCES = builder.cpp builder_init.cpp builder_init.hpp
 molecuilder_LDADD = \
 	UIElements/libMolecuilderUI-@MOLECUILDER_API_VERSION@.la \
@@ -304,5 +329,5 @@
 
 #Stuff for building the GUI using Qt
-molecuildergui_SOURCES = builder.cpp
+molecuildergui_SOURCES = builder.cpp builder_init.cpp builder_init.hpp
 molecuildergui_CXXFLAGS = $(BOOST_CPPFLAGS) -DUSE_GUI_QT
 molecuildergui_LDFLAGS = $(BOOST_LIB)
Index: src/Parser/FormatParser.cpp
===================================================================
--- src/Parser/FormatParser.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/FormatParser.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -52,5 +52,6 @@
   }
 
-  save(saveStream);
+  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+  save(saveStream, atoms);
 }
 
Index: src/Parser/FormatParser.hpp
===================================================================
--- src/Parser/FormatParser.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/FormatParser.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -13,4 +13,6 @@
 #include "parser.hpp"
 
+class atom;
+
 /**
  * General parser which observes the change tracker.
@@ -20,5 +22,5 @@
   FormatParser();
   virtual ~FormatParser();
-  virtual void save(std::ostream* file)=0;
+  virtual void save(std::ostream* file, const std::vector<atom *> &atoms)=0;
   virtual void load(std::istream* file)=0;
   void setOstream(std::ostream* file);
Index: src/Parser/FormatParserStorage.cpp
===================================================================
--- src/Parser/FormatParserStorage.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/FormatParserStorage.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -36,4 +36,6 @@
 
 #include "Helpers/Assert.hpp"
+
+#include "molecule.hpp"
 
 #include "Patterns/Singleton_impl.hpp"
@@ -224,5 +226,5 @@
  * \return true - parsing ok, false - suffix unknown
  */
-bool FormatParserStorage::get(std::istream &input, std::string suffix)
+bool FormatParserStorage::load(std::istream &input, std::string suffix)
 {
   if (suffix == ParserSuffixes[mpqc]) {
@@ -243,4 +245,44 @@
 }
 
+/** Stores all selected atoms in an ostream depending on its suffix
+ * \param &output output stream
+ * \param suffix
+ * \return true - storing ok, false - suffix unknown
+ */
+bool FormatParserStorage::saveSelectedAtoms(std::ostream &output, std::string suffix)
+{
+  std::vector<atom *> atoms = World::getInstance().getSelectedAtoms();
+  return save(output, suffix, atoms);
+}
+
+/** Stores all selected atoms in an ostream depending on its suffix
+ * We store in the order of the atomic ids, not in the order they appear in the molecules.
+ * Hence, we first create a vector from all selected molecules' atoms.
+ * \param &output output stream
+ * \param suffix
+ * \return true - storing ok, false - suffix unknown
+ */
+bool FormatParserStorage::saveSelectedMolecules(std::ostream &output, std::string suffix)
+{
+  std::vector<molecule *> molecules = World::getInstance().getSelectedMolecules();
+  std::map<size_t, atom *> IdAtoms;
+  for (std::vector<molecule *>::const_iterator MolIter = molecules.begin();
+      MolIter != molecules.end();
+      ++MolIter) {
+    for(molecule::atomSet::const_iterator AtomIter = (*MolIter)->begin();
+        AtomIter != (*MolIter)->end();
+        ++AtomIter) {
+      IdAtoms.insert( make_pair((*AtomIter)->getId(), (*AtomIter)) );
+    }
+  }
+  std::vector<atom *> atoms;
+  atoms.reserve(IdAtoms.size());
+  for (std::map<size_t, atom *>::const_iterator iter = IdAtoms.begin();
+      iter != IdAtoms.end();
+      ++iter) {
+    atoms.push_back(iter->second);
+  }
+  return save(output, suffix, atoms);
+}
 
 /** Stores world in an ostream depending on its suffix
@@ -249,16 +291,27 @@
  * \return true - storing ok, false - suffix unknown
  */
-bool FormatParserStorage::put(std::ostream &output, std::string suffix)
+bool FormatParserStorage::saveWorld(std::ostream &output, std::string suffix)
+{
+  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+  return save(output, suffix, atoms);
+}
+
+/** Stores a given vector of \a atoms in an ostream depending on its suffix
+ * \param &output output stream
+ * \param suffix
+ * \return true - storing ok, false - suffix unknown
+ */
+bool FormatParserStorage::save(std::ostream &output, std::string suffix, const std::vector<atom *> &atoms)
 {
   if (suffix == ParserSuffixes[mpqc]) {
-    getMpqc().save(&output);
+    getMpqc().save(&output, atoms);
   } else if (suffix == ParserSuffixes[pcp]) {
-    getPcp().save(&output);
+    getPcp().save(&output, atoms);
   } else if (suffix == ParserSuffixes[pdb]) {
-    getPdb().save(&output);
+    getPdb().save(&output, atoms);
   } else if (suffix == ParserSuffixes[tremolo]) {
-    getTremolo().save(&output);
+    getTremolo().save(&output, atoms);
   } else if (suffix == ParserSuffixes[xyz]) {
-    getXyz().save(&output);
+    getXyz().save(&output, atoms);
   } else {
     DoeLog(1) && (eLog() << Verbose(1) << "Unknown suffix " << suffix << " to for FormatParserStorage::put()." << endl);
Index: src/Parser/FormatParserStorage.hpp
===================================================================
--- src/Parser/FormatParserStorage.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/FormatParserStorage.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -20,4 +20,5 @@
 #include <vector>
 
+class atom;
 class FormatParser;
 class MpqcParser;
@@ -45,6 +46,9 @@
   bool add(ParserTypes type);
 
-  bool get(std::istream &input, std::string suffix);
-  bool put(std::ostream &output, std::string suffix);
+  bool load(std::istream &input, std::string suffix);
+  bool save(std::ostream &output, std::string suffix, const std::vector<atom *> &atoms);
+  bool saveSelectedAtoms(std::ostream &output, std::string suffix);
+  bool saveSelectedMolecules(std::ostream &output, std::string suffix);
+  bool saveWorld(std::ostream &output, std::string suffix);
   MpqcParser &getMpqc();
   PcpParser &getPcp();
Index: src/Parser/MpqcParser.cpp
===================================================================
--- src/Parser/MpqcParser.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/MpqcParser.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -53,18 +53,25 @@
 }
 
-void MpqcParser::save(ostream *file)
+/**
+ * Saves the \a atoms into as a MPQC file.
+ *
+ * \param file where to save the state
+ * \param atoms atoms to store
+ */
+void MpqcParser::save(ostream *file, const std::vector<atom *> &atoms)
 {
   DoLog(0) && (Log() << Verbose(0) << "Saving changes to MPQC ." << std::endl);
 
   if (HessianPresent)
-    saveHessian(file);
+    saveHessian(file, atoms);
   else
-    saveSimple(file);
+    saveSimple(file, atoms);
 }
 
 /** Saves all atoms and data into a MPQC config file without hessian.
  * \param *file output stream
+ * \param atoms atoms to store
  */
-void MpqcParser::saveSimple(ostream *file)
+void MpqcParser::saveSimple(ostream *file, const std::vector<atom *> &atoms)
 {
   Vector center;
@@ -112,6 +119,7 @@
 /** Saves all atoms and data into a MPQC config file with hessian.
  * \param *file output stream
+ * \param atoms atoms to store
  */
-void MpqcParser::saveHessian(ostream *file)
+void MpqcParser::saveHessian(ostream *file, const std::vector<atom *> &atoms)
 {
   Vector center;
Index: src/Parser/MpqcParser.hpp
===================================================================
--- src/Parser/MpqcParser.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/MpqcParser.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -22,5 +22,5 @@
   ~MpqcParser();
   void load(std::istream* file);
-  void save(std::ostream* file);
+  void save(std::ostream* file, const std::vector<atom *> &atoms);
 
   void setHessian(bool hessian);
@@ -30,6 +30,6 @@
   bool HessianPresent;
 
-  void saveSimple(std::ostream *file);
-  void saveHessian(std::ostream *file);
+  void saveSimple(std::ostream *file, const std::vector<atom *> &atoms);
+  void saveHessian(std::ostream *file, const std::vector<atom *> &atoms);
 };
 
Index: src/Parser/PcpParser.cpp
===================================================================
--- src/Parser/PcpParser.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/PcpParser.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -368,8 +368,11 @@
 }
 
-/** Saves the World into a PCP config file.
- * \param *file output stream to save to
- */
-void PcpParser::save(std::ostream* file)
+/**
+ * Saves the \a atoms into as a PCP file.
+ *
+ * \param file where to save the state
+ * \param atoms atoms to store
+ */
+void PcpParser::save(std::ostream* file, const std::vector<atom *> &atoms)
 {
   DoLog(0) && (Log() << Verbose(0) << "Saving changes to pcp." << std::endl);
@@ -379,6 +382,5 @@
   if (!file->fail()) {
     // calculate number of Psis
-    vector<atom *> allatoms = World::getInstance().getAllAtoms();
-    CalculateOrbitals(allatoms);
+    CalculateOrbitals(atoms);
     *file << "# ParallelCarParinello - main configuration file - created with molecuilder" << endl;
     *file << endl;
@@ -468,6 +470,6 @@
     *file << "RelativeCoord\t" << RelativeCoord << "\t# whether ion coordinates are relative (1) or absolute (0)" << endl;
     map<int, int> ZtoIndexMap;
-    OutputElements(file, allatoms, ZtoIndexMap);
-    OutputAtoms(file, allatoms, ZtoIndexMap);
+    OutputElements(file, atoms, ZtoIndexMap);
+    OutputAtoms(file, atoms, ZtoIndexMap);
   } else {
     DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open output file." << endl);
@@ -479,8 +481,8 @@
  * \param &allatoms all atoms to store away
  */
-void PcpParser::CalculateOrbitals(vector<atom *> &allatoms)
+void PcpParser::CalculateOrbitals(const std::vector<atom *> &allatoms)
 {
   PlaneWaveSpecifics.MaxPsiDouble = PlaneWaveSpecifics.PsiMaxNoDown = PlaneWaveSpecifics.PsiMaxNoUp = PlaneWaveSpecifics.PsiType = 0;
-  for (vector<atom *>::iterator runner = allatoms.begin(); runner != allatoms.end(); ++runner) {
+  for (vector<atom *>::const_iterator runner = allatoms.begin(); runner != allatoms.end(); ++runner) {
     PlaneWaveSpecifics.MaxPsiDouble += (*runner)->getType()->getNoValenceOrbitals();
   }
@@ -512,10 +514,10 @@
  * \param &ZtoIndexMap map of which atoms belong to which ion number
  */
-void PcpParser::OutputElements(ostream *file, vector<atom *> &allatoms, map<int, int> &ZtoIndexMap)
+void PcpParser::OutputElements(ostream *file, const std::vector<atom *> &allatoms, map<int, int> &ZtoIndexMap)
 {
   map<int, int> PresentElements;
   pair <   map<int, int>::iterator, bool > Inserter;
   // insert all found elements into the map
-  for (vector<atom *>::iterator AtomRunner = allatoms.begin();AtomRunner != allatoms.end();++AtomRunner) {
+  for (vector<atom *>::const_iterator AtomRunner = allatoms.begin();AtomRunner != allatoms.end();++AtomRunner) {
     Inserter = PresentElements.insert(pair<int, int>((*AtomRunner)->getType()->getAtomicNumber(), 1));
     if (!Inserter.second) // increase if present
@@ -542,5 +544,5 @@
  * \param &ZtoIndexMap map of which atoms belong to which ion number
  */
-void PcpParser::OutputAtoms(ostream *file, vector<atom *> &allatoms, map<int, int> &ZtoIndexMap)
+void PcpParser::OutputAtoms(ostream *file, const std::vector<atom *> &allatoms, map<int, int> &ZtoIndexMap)
 {
   *file << "#Ion_TypeNr._Nr.R[0]    R[1]    R[2]    MoveType (0 MoveIon, 1 FixedIon)" << endl;
@@ -548,5 +550,5 @@
   pair <   map<int, int>::iterator, bool > Inserter;
   int nr = 0;
-  for (vector<atom *>::iterator AtomRunner = allatoms.begin();AtomRunner != allatoms.end();++AtomRunner) {
+  for (vector<atom *>::const_iterator AtomRunner = allatoms.begin();AtomRunner != allatoms.end();++AtomRunner) {
     Inserter = ZtoCountMap.insert( pair<int, int>((*AtomRunner)->getType()->getAtomicNumber(), 1) );
     if (!Inserter.second)
Index: src/Parser/PcpParser.hpp
===================================================================
--- src/Parser/PcpParser.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/PcpParser.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -20,5 +20,5 @@
   ~PcpParser();
   void load(std::istream* file);
-  void save(std::ostream* file);
+  void save(std::ostream* file, const std::vector<atom *> &atoms);
 
   bool operator==(const PcpParser& b) const;
@@ -27,7 +27,7 @@
 
   void ParseThermostats(class ConfigFileBuffer * const fb);
-  void OutputAtoms(ostream *file, vector<atom *> &allatoms, map<int, int> &ZtoIndexMap);
-  void OutputElements(ostream *file, vector<atom *> &allatoms, map<int, int> &ZtoIndexMap);
-  void CalculateOrbitals(vector<atom *> &allatoms);
+  void OutputAtoms(ostream *file, const std::vector<atom *> &allatoms, map<int, int> &ZtoIndexMap);
+  void OutputElements(ostream *file, const std::vector<atom *> &allatoms, map<int, int> &ZtoIndexMap);
+  void CalculateOrbitals(const std::vector<atom *> &allatoms);
 
   class StructParallelization {
Index: src/Parser/PdbAtomInfoContainer.cpp
===================================================================
--- src/Parser/PdbAtomInfoContainer.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/PdbAtomInfoContainer.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -24,11 +24,13 @@
 #include "Helpers/toString.hpp"
 //#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Vector.hpp"
 #include "PdbAtomInfoContainer.hpp"
 
 
 PdbAtomInfoContainer::PdbAtomInfoContainer() :
+  token("ATOM"),
   serial(0),
   name("-"),
-  altloc('0'),
+  altLoc('0'),
   resName("-"),
   chainID('0'),
@@ -37,4 +39,5 @@
   occupancy(0.),
   tempFactor(0.),
+  element(""),
   charge(0)
 {}
@@ -46,4 +49,7 @@
 {
   switch (key) {
+    case PdbKey::token :
+      ScanKey(token, value);
+      break;
     case PdbKey::serial :
       ScanKey(serial, value);
@@ -52,6 +58,6 @@
       ScanKey(name, value);
       break;
-    case PdbKey::altloc :
-      ScanKey(altloc, value);
+    case PdbKey::altLoc :
+      ScanKey(altLoc, value);
       break;
     case PdbKey::resName :
@@ -67,4 +73,13 @@
       ScanKey(iCode, value);
       break;
+    case PdbKey::X :
+      ScanKey(XYZ[0], value);
+      break;
+    case PdbKey::Y :
+      ScanKey(XYZ[1], value);
+      break;
+    case PdbKey::Z :
+      ScanKey(XYZ[2], value);
+      break;
     case PdbKey::occupancy :
       ScanKey(occupancy, value);
@@ -72,4 +87,7 @@
     case PdbKey::tempFactor :
       ScanKey(tempFactor, value);
+      break;
+    case PdbKey::element :
+      ScanKey(element, value);
       break;
     case PdbKey::charge :
@@ -82,13 +100,16 @@
 }
 
-std::string PdbAtomInfoContainer::get(const PdbKey::PdbDataKey key) const
+template <>
+std::string PdbAtomInfoContainer::get<std::string>(const PdbKey::PdbDataKey key) const
 {
   switch (key) {
+    case PdbKey::token :
+      return toString(token);
     case PdbKey::serial :
       return toString(serial);
     case PdbKey::name :
       return toString(name);
-    case PdbKey::altloc :
-      return toString(altloc);
+    case PdbKey::altLoc :
+      return toString(altLoc);
     case PdbKey::resName :
       return toString(resName);
@@ -99,8 +120,16 @@
     case PdbKey::iCode :
       return toString(iCode);
+    case PdbKey::X :
+      return toString(XYZ[0]);
+    case PdbKey::Y :
+      return toString(XYZ[1]);
+    case PdbKey::Z :
+      return toString(XYZ[2]);
     case PdbKey::occupancy :
       return toString(occupancy);
     case PdbKey::tempFactor :
       return toString(tempFactor);
+    case PdbKey::element :
+      return toString(element);
     case PdbKey::charge :
       return toString(charge);
@@ -111,2 +140,37 @@
 }
 
+template <>
+int PdbAtomInfoContainer::get<int>(const PdbKey::PdbDataKey key) const
+{
+  switch (key) {
+    case PdbKey::serial :
+      return serial;
+    case PdbKey::resSeq :
+      return resSeq;
+    case PdbKey::charge :
+      return charge;
+    default :
+      std::cout << "Unknown key or not presentable as int: " << key << std::endl;
+      return 0;
+  }
+}
+
+template <>
+double PdbAtomInfoContainer::get<double>(const PdbKey::PdbDataKey key) const
+{
+  switch (key) {
+    case PdbKey::X :
+      return XYZ[0];
+    case PdbKey::Y :
+      return XYZ[1];
+    case PdbKey::Z :
+      return XYZ[2];
+    case PdbKey::occupancy :
+      return occupancy;
+    case PdbKey::tempFactor :
+      return tempFactor;
+    default :
+      std::cout << "Unknown key or not presentable as double: " << key << std::endl;
+      return 0.;
+  }
+}
Index: src/Parser/PdbAtomInfoContainer.hpp
===================================================================
--- src/Parser/PdbAtomInfoContainer.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/PdbAtomInfoContainer.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -11,5 +11,8 @@
 #include "PdbKey.hpp"
 
+class Vector;
+
 #include <string>
+#include <typeinfo>
 
 /**
@@ -22,5 +25,12 @@
 
   // getter and setter
-  std::string get(const PdbKey::PdbDataKey key) const;
+  template <class T> T get(const PdbKey::PdbDataKey key) const  {
+    switch (key) {
+      default :
+        std::cout << "Unknown key or not representable as " << typeid(T).name() << ": " << key << std::endl;
+        break;
+    }
+    return (T)NULL;
+  }
   void set(const PdbKey::PdbDataKey key, std::string value);
 
@@ -46,15 +56,25 @@
 
 private:
+  std::string token;
   int serial;
   std::string name;
-  char altloc;
+  char altLoc;
   std::string resName;
   char chainID;
   int resSeq;
   char iCode;
+  Vector XYZ;
   float occupancy;
   float tempFactor;
+  std::string element;
   int charge;
 };
 
+template <>
+std::string PdbAtomInfoContainer::get<std::string>(const PdbKey::PdbDataKey key) const;
+template <>
+int PdbAtomInfoContainer::get<int>(const PdbKey::PdbDataKey key) const;
+template <>
+double PdbAtomInfoContainer::get<double>(const PdbKey::PdbDataKey key) const;
+
 #endif /* PDBATOMINFOCONTAINER_HPP_ */
Index: src/Parser/PdbKey.hpp
===================================================================
--- src/Parser/PdbKey.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/PdbKey.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -18,13 +18,18 @@
   enum PdbDataKey {
     noKey,
+    token,
     serial,
     name,
-    altloc,
+    altLoc,
     resName,
     chainID,
     resSeq,
     iCode,
+    X,
+    Y,
+    Z,
     occupancy,
     tempFactor,
+    element,
     charge
   };
Index: src/Parser/PdbParser.cpp
===================================================================
--- src/Parser/PdbParser.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/PdbParser.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -46,4 +46,5 @@
 PdbParser::PdbParser() {
   knownTokens["ATOM"] = PdbKey::Atom;
+  knownTokens["HETATM"] = PdbKey::Atom;
   knownTokens["TER"] = PdbKey::Filler;
   knownTokens["END"] = PdbKey::EndOfFile;
@@ -51,4 +52,9 @@
   knownTokens["REMARK"] = PdbKey::Remark;
   knownTokens[""] = PdbKey::EndOfFile;
+
+  // argh, why can't just PdbKey::X+(size_t)i
+  PositionEnumMap[0] = PdbKey::X;
+  PositionEnumMap[1] = PdbKey::Y;
+  PositionEnumMap[2] = PdbKey::Z;
 }
 
@@ -99,4 +105,7 @@
   size_t linecount  = 0;
   enum PdbKey::KnownTokens token;
+
+  // reset atomIdMap for this file (to correctly parse CONECT entries)
+  atomIdMap.clear();
 
   molecule *newmol = World::getInstance().createMolecule();
@@ -136,11 +145,12 @@
 
 /**
- * Saves the World's current state into as a PDB file.
+ * Saves the \a atoms into as a PDB file.
  *
  * \param file where to save the state
- */
-void PdbParser::save(ostream* file) {
+ * \param atoms atoms to store
+ */
+void PdbParser::save(ostream* file, const std::vector<atom *> &AtomList)
+{
   DoLog(0) && (Log() << Verbose(0) << "Saving changes to pdb." << std::endl);
-
   {
     // add initial remark
@@ -157,32 +167,70 @@
   }
 
-  // we distribute new atom numbers, hence clear map beforehand
+  // we distribute serials, hence clear map beforehand
   atomIdMap.clear();
   {
-    vector<atom *> AtomList = World::getInstance().getAllAtoms();
-
-    std::vector<int> elementNo(MAX_ELEMENTS,1);
+    std::map<size_t,size_t> MolIdMap;
+    size_t MolNo = 1;  // residue number starts at 1 in pdb
+    for (vector<atom *>::const_iterator atomIt = AtomList.begin(); atomIt != AtomList.end(); atomIt++) {
+      const molecule *mol = (*atomIt)->getMolecule();
+      if ((mol != NULL) && (MolIdMap.find(mol->getId()) == MolIdMap.end())) {
+        MolIdMap[mol->getId()] = MolNo++;
+      }
+    }
+    const size_t MaxMol = MolNo;
+
+    // have a count per element and per molecule (0 is for all homeless atoms)
+    std::vector<int> **elementNo = new std::vector<int>*[MaxMol];
+    for (size_t i = 0; i < MaxMol; ++i)
+      elementNo[i] = new std::vector<int>(MAX_ELEMENTS,1);
     char name[MAXSTRINGSIZE];
+    std::string ResidueName;
 
     // write ATOMs
     int AtomNo = 1; // serial number starts at 1 in pdb
-    int MolNo = 1;  // residue number starts at 1 in pdb
-    for (vector<atom *>::iterator atomIt = AtomList.begin(); atomIt != AtomList.end(); atomIt++) {
+    for (vector<atom *>::const_iterator atomIt = AtomList.begin(); atomIt != AtomList.end(); atomIt++) {
+      PdbAtomInfoContainer &atomInfo = getadditionalAtomData(*atomIt);
+      // gather info about residue
+      const molecule *mol = (*atomIt)->getMolecule();
+      if (mol == NULL) {
+        MolNo = 0;
+        atomInfo.set(PdbKey::resSeq, "0");
+      } else {
+        ASSERT(MolIdMap.find(mol->getId()) != MolIdMap.end(),
+            "PdbParser::save() - Mol id "+toString(mol->getId())+" not present despite we set it?!");
+        MolNo = MolIdMap[mol->getId()];
+        atomInfo.set(PdbKey::resSeq, toString(MolIdMap[mol->getId()]));
+        if (atomInfo.get<std::string>(PdbKey::resName) == "-")
+          atomInfo.set(PdbKey::resName, mol->getName().substr(0,3));
+      }
+      // get info about atom
       const size_t  Z = (*atomIt)->getType()->getAtomicNumber();
-      sprintf(name, "%2s%02d",(*atomIt)->getType()->getSymbol().c_str(), elementNo[Z]);
-      elementNo[Z] = (elementNo[Z]+1) % 100;   // confine to two digits
-      const molecule *mol = (*atomIt)->getMolecule();
-      if (mol == NULL) {  // for homeless atoms, MolNo = -1 is reserved
-        MolNo = -1;
-      } else {
-        MolNo = mol->getId();
+      if (atomInfo.get<std::string>(PdbKey::name) == "-") {  // if no name set, give it a new name
+        sprintf(name, "%2s%02d",(*atomIt)->getType()->getSymbol().c_str(), (*elementNo[MolNo])[Z]);
+        (*elementNo[MolNo])[Z] = ((*elementNo[MolNo])[Z]+1) % 100;   // confine to two digits
+        atomInfo.set(PdbKey::name, name);
       }
-      saveLine(file, *atomIt, name, AtomNo, MolNo);
-      setAtomId((*atomIt)->getId(), AtomNo);
+      // set position
+      for (size_t i=0; i<NDIM;++i) {
+        stringstream position;
+        position << setw(8) << fixed << setprecision(3) << (*atomIt)->getPosition().at(i);
+        atomInfo.set(PositionEnumMap[i], position.str());
+      }
+      // change element and charge if changed
+      if (atomInfo.get<std::string>(PdbKey::element) != (*atomIt)->getType()->getSymbol())
+        atomInfo.set(PdbKey::element, (*atomIt)->getType()->getSymbol());
+      setSerial((*atomIt)->getId(), AtomNo);
+      atomInfo.set(PdbKey::serial, toString(AtomNo));
+
+      // finally save the line
+      saveLine(file, atomInfo);
       AtomNo++;
     }
+    for (size_t i = 0; i < MaxMol; ++i)
+      delete elementNo[i];
+    delete elementNo;
 
     // write CONECTs
-    for (vector<atom *>::iterator atomIt = AtomList.begin(); atomIt != AtomList.end(); atomIt++) {
+    for (vector<atom *>::const_iterator atomIt = AtomList.begin(); atomIt != AtomList.end(); atomIt++) {
       writeNeighbors(file, 4, *atomIt);
     }
@@ -193,4 +241,25 @@
 }
 
+/** Either returns reference to present entry or creates new with default values.
+ *
+ * @param _atom atom whose entry we desire
+ * @return
+ */
+PdbAtomInfoContainer& PdbParser::getadditionalAtomData(atom *_atom)
+{
+  if (additionalAtomData.find(_atom->getId()) != additionalAtomData.end()) {
+  } else if (additionalAtomData.find(_atom->father->getId()) != additionalAtomData.end()) {
+    // use info from direct father
+    additionalAtomData[_atom->getId()] = additionalAtomData[_atom->father->getId()];
+  } else if (additionalAtomData.find(_atom->GetTrueFather()->getId()) != additionalAtomData.end()) {
+    // use info from topmost father
+    additionalAtomData[_atom->getId()] = additionalAtomData[_atom->GetTrueFather()->getId()];
+  } else {
+    // create new entry use default values if nothing else is known
+    additionalAtomData[_atom->getId()] = defaultAdditionalData;
+  }
+  return additionalAtomData[_atom->getId()];
+}
+
 /**
  * Writes one line of PDB-formatted data to the provided stream.
@@ -198,29 +267,55 @@
  * \param stream where to write the line to
  * \param *currentAtom the atom of which information should be written
+ * \param AtomNo serial number of atom
  * \param *name name of atom, i.e. H01
- * \param AtomNo serial number of atom
+ * \param ResidueName Name of molecule
  * \param ResidueNo number of residue
  */
-void PdbParser::saveLine(ostream* file, const atom* currentAtom, const char *name, const int AtomNo, const int ResidueNo) {
-  *file << "ATOM ";
-  *file << setw(6) << AtomNo; /* atom serial number */
-  *file << setw(1) << " ";
-  *file << setfill(' ') << left << setw(4) << name << right;  /* atom name */
-  *file << setw(1) << " ";
-  *file << setfill(' ') << setw(3) << ((currentAtom->getMolecule() != NULL) ? currentAtom->getMolecule()->getName().substr(0,3) : "-");  /* residue name */
-  *file << setw(1) << " ";
-  *file << setfill(' ') << setw(1) << (char)('a'+(unsigned char)(AtomNo % 26)); /* letter for chain */
-  *file << setw(4) << ResidueNo; /* residue sequence number */
-  *file << setw(4) << "    ";
-  for (int i=0;i<NDIM;i++) {
-    *file << setw(8) << setprecision(3) << showpoint << currentAtom->at(i); /* positional coordinate in Angstroem */
-  }
-  *file << setw(6) << setprecision(2) << showpoint << (double)currentAtom->getType()->getValence(); /* occupancy */
-  *file << setw(6) << setprecision(2) << showpoint << (double)currentAtom->getType()->getNoValenceOrbitals(); /* temperature factor */
-  *file << noshowpoint;
-  *file << setw(6) << "      ";
-  *file << setw(4) << "0";
-  *file << setfill(' ') << setw(2) << currentAtom->getType()->getSymbol();
-  *file << setw(2) << "0";
+void PdbParser::saveLine(
+    ostream* file,
+    const PdbAtomInfoContainer &atomInfo)
+{
+  *file << setfill(' ') << left << setw(6)
+      << atomInfo.get<std::string>(PdbKey::token);
+  *file << setfill(' ') << right << setw(5)
+      << atomInfo.get<int>(PdbKey::serial); /* atom serial number */
+  *file << " "; /* char 12 is empty */
+  *file << setfill(' ') << left << setw(4)
+      << atomInfo.get<std::string>(PdbKey::name);  /* atom name */
+  *file << setfill(' ') << left << setw(1)
+      << atomInfo.get<std::string>(PdbKey::altLoc); /* alternate location/conformation */
+  *file << setfill(' ') << left << setw(3)
+      << atomInfo.get<std::string>(PdbKey::resName);  /* residue name */
+  *file << " "; /* char 21 is empty */
+  *file << setfill(' ') << left << setw(1)
+      << atomInfo.get<std::string>(PdbKey::chainID); /* chain identifier */
+  *file << setfill(' ') << left << setw(4)
+      << atomInfo.get<int>(PdbKey::resSeq); /* residue sequence number */
+  *file << setfill(' ') << left << setw(1)
+      << atomInfo.get<std::string>(PdbKey::iCode); /* iCode */
+  *file << "   "; /* char 28-30 are empty */
+  // have the following operate on stringstreams such that format specifiers
+  // only act on these
+  for (size_t i=0;i<NDIM;++i) {
+    stringstream position;
+    position << fixed << setprecision(3) << showpoint
+        << atomInfo.get<double>(PositionEnumMap[i]);
+    *file << setfill(' ') << right << setw(8) << position.str();
+  }
+  {
+    stringstream occupancy;
+    occupancy << fixed << setprecision(2) << showpoint
+        << atomInfo.get<double>(PdbKey::occupancy); /* occupancy */
+    *file << setfill(' ') << right << setw(6) << occupancy.str();
+  }
+  {
+    stringstream tempFactor;
+    tempFactor << fixed << setprecision(2) << showpoint
+        << atomInfo.get<double>(PdbKey::tempFactor); /* temperature factor */
+    *file << setfill(' ') << right << setw(6) << tempFactor.str();
+  }
+  *file << "          "; /* char 68-76 are empty */
+  *file << setfill(' ') << right << setw(2) << atomInfo.get<std::string>(PdbKey::element); /* element */
+  *file << setfill(' ') << right << setw(2) << atomInfo.get<int>(PdbKey::charge); /* charge */
 
   *file << endl;
@@ -240,8 +335,8 @@
       if (MaxNo >= MaxnumberOfNeighbors) {
         *file << "CONECT";
-        *file << setw(5) << getAtomId(currentAtom->getId());
+        *file << setw(5) << getSerial(currentAtom->getId());
         MaxNo = 0;
       }
-      *file << setw(5) << getAtomId((*currentBond)->GetOtherAtom(currentAtom)->getId());
+      *file << setw(5) << getSerial((*currentBond)->GetOtherAtom(currentAtom)->getId());
       MaxNo++;
       if (MaxNo == MaxnumberOfNeighbors)
@@ -253,5 +348,4 @@
 }
 
-
 /** Retrieves a value from PdbParser::atomIdMap.
  * \param atomid key
@@ -259,18 +353,4 @@
  */
 size_t PdbParser::getSerial(const size_t atomid) const
-{
-  ConvertTo<size_t> toSize_t;
-  ASSERT(additionalAtomData.find(atomid) != additionalAtomData.end(),
-      "PdbParser::getSerial: atomid "+toString(atomid)+" not present in Map.");
-  const PdbAtomInfoContainer &atomInfo = additionalAtomData.at(atomid);
-
-  return toSize_t(atomInfo.get(PdbKey::serial));
-}
-
-/** Retrieves a value from PdbParser::atomIdMap.
- * \param atomid key
- * \return value
- */
-size_t PdbParser::getAtomId(const size_t atomid) const
 {
   ASSERT(atomIdMap.find(atomid) != atomIdMap.end(), "PdbParser::getAtomId: atomid not present in Map.");
@@ -283,9 +363,9 @@
  * \return true - key not present, false - value present
  */
-void PdbParser::setAtomId(const size_t localatomid, const size_t atomid)
+void PdbParser::setSerial(const size_t localatomid, const size_t atomid)
 {
   pair<std::map<size_t,size_t>::iterator, bool > inserter;
-  DoLog(1) && (Log() << Verbose(1) << "PdbParser::setAtomId() - Inserting ("
-      << localatomid << " -> " << atomid << ")." << std::endl);
+//  DoLog(1) && (Log() << Verbose(1) << "PdbParser::setAtomId() - Inserting ("
+//      << localatomid << " -> " << atomid << ")." << std::endl);
   inserter = atomIdMap.insert( make_pair(localatomid, atomid) );
   ASSERT(inserter.second, "PdbParser::setAtomId: atomId already present in Map.");
@@ -307,6 +387,5 @@
   stringstream lineStream;
   atom* newAtom = World::getInstance().createAtom();
-  additionalAtomData[newAtom->getId()] = *(new PdbAtomInfoContainer);
-  PdbAtomInfoContainer &atomInfo = additionalAtomData[newAtom->getId()];
+  PdbAtomInfoContainer &atomInfo = getadditionalAtomData(newAtom);
   string word;
   ConvertTo<size_t> toSize_t;
@@ -314,10 +393,11 @@
 
   lineStream << line;
+  atomInfo.set(PdbKey::token, line.substr(0,6));
   atomInfo.set(PdbKey::serial, line.substr(6,5));
   std::pair< std::set<size_t>::const_iterator, bool> Inserter =
-    SerialSet.insert(toSize_t(atomInfo.get(PdbKey::serial)));
+    SerialSet.insert(toSize_t(atomInfo.get<std::string>(PdbKey::serial)));
   ASSERT(Inserter.second,
       "PdbParser::readAtomDataLine() - ATOM contains entry with serial "
-      +atomInfo.get(PdbKey::serial)+" already present!");
+      +atomInfo.get<std::string>(PdbKey::serial)+" already present!");
   // assign hightest+1 instead, but then beware of CONECT entries! Another map needed!
 //  if (!Inserter.second) {
@@ -326,5 +406,5 @@
 //    atomInfo.set(PdbKey::serial, toString(id));
 //    DoeLog(2) && (eLog() << Verbose(2)
-//        << "Serial " << atomInfo.get(PdbKey::serial) << " already present, "
+//        << "Serial " << atomInfo.get<std::string>(PdbKey::serial) << " already present, "
 //        << "assigning " << toString(id) << " instead." << std::endl);
 //  }
@@ -348,7 +428,7 @@
 //      << line.substr(78,2) << std::endl);
 
-  setAtomId(toSize_t(atomInfo.get(PdbKey::serial)), newAtom->getId());
+  setSerial(toSize_t(atomInfo.get<std::string>(PdbKey::serial)), newAtom->getId());
   atomInfo.set(PdbKey::name, line.substr(12,4));
-  atomInfo.set(PdbKey::altloc, line.substr(16,1));
+  atomInfo.set(PdbKey::altLoc, line.substr(16,1));
   atomInfo.set(PdbKey::resName, line.substr(17,3));
   atomInfo.set(PdbKey::chainID, line.substr(21,1));
@@ -364,6 +444,10 @@
   atomInfo.set(PdbKey::tempFactor, line.substr(60,6));
   atomInfo.set(PdbKey::charge, line.substr(78,2));
-  PdbAtomInfoContainer::ScanKey(word, line.substr(76,2));
-  newAtom->setType(World::getInstance().getPeriode()->FindElement(word));
+  atomInfo.set(PdbKey::element, line.substr(76,2));
+  const element *elem = World::getInstance().getPeriode()
+      ->FindElement(atomInfo.get<std::string>(PdbKey::element));
+  ASSERT(elem != NULL,
+      "PdbParser::readAtomDataLine() - element "+atomInfo.get<std::string>(PdbKey::element)+" is unknown!");
+  newAtom->setType(elem);
 
   if (newmol != NULL)
@@ -381,16 +465,19 @@
 
   DoLog(1) && (Log() << Verbose(1) << "We know about atom " << newAtom->getId() << ":" << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tserial is " << atomInfo.get(PdbKey::serial) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tname is " << atomInfo.get(PdbKey::name) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\taltloc is " << atomInfo.get(PdbKey::altloc) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tresName is " << atomInfo.get(PdbKey::resName) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tchainID is " << atomInfo.get(PdbKey::chainID) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tresSeq is " << atomInfo.get(PdbKey::resSeq) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tiCode is " << atomInfo.get(PdbKey::iCode) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tx is " << newAtom->getPosition() << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\toccupancy is " << atomInfo.get(PdbKey::occupancy) << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\ttempFactor is " << atomInfo.get(PdbKey::tempFactor) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\ttoken is " << atomInfo.get<std::string>(PdbKey::token) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tserial is " << atomInfo.get<int>(PdbKey::serial) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tname is " << atomInfo.get<std::string>(PdbKey::name) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\taltLoc is " << atomInfo.get<std::string>(PdbKey::altLoc) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tresName is " << atomInfo.get<std::string>(PdbKey::resName) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tchainID is " << atomInfo.get<std::string>(PdbKey::chainID) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tresSeq is " << atomInfo.get<int>(PdbKey::resSeq) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tiCode is " << atomInfo.get<std::string>(PdbKey::iCode) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tX is " << atomInfo.get<double>(PdbKey::X) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tY is " << atomInfo.get<double>(PdbKey::Y) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tZ is " << atomInfo.get<double>(PdbKey::Z) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\toccupancy is " << atomInfo.get<double>(PdbKey::occupancy) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\ttempFactor is " << atomInfo.get<double>(PdbKey::tempFactor) << std::endl);
   DoLog(1) && (Log() << Verbose(1) << "\telement is '" << *(newAtom->getType()) << "'" << std::endl);
-  DoLog(1) && (Log() << Verbose(1) << "\tcharge is " << atomInfo.get(PdbKey::charge) << std::endl);
+  DoLog(1) && (Log() << Verbose(1) << "\tcharge is " << atomInfo.get<int>(PdbKey::charge) << std::endl);
 }
 
@@ -426,10 +513,10 @@
 
   // add neighbours
-  atom *_atom = World::getInstance().getAtom(AtomById(getAtomId(id)));
+  atom *_atom = World::getInstance().getAtom(AtomById(getSerial(id)));
   for (std::list<size_t>::const_iterator iter = ListOfNeighbors.begin();
       iter != ListOfNeighbors.end();
       ++iter) {
 //    DoLog(1) && (Log() << Verbose(1) << "Adding Bond (" << getAtomId(id) << "," << getAtomId(*iter) << ")" << std::endl);
-    atom * const _Otheratom = World::getInstance().getAtom(AtomById(getAtomId(*iter)));
+    atom * const _Otheratom = World::getInstance().getAtom(AtomById(getSerial(*iter)));
     _atom->addBond(_Otheratom);
   }
@@ -478,23 +565,23 @@
       const PdbAtomInfoContainer &OtheratomInfo = b.additionalAtomData.at((*iter)->getId());
 
-      status = status && (atomInfo.get(PdbKey::serial) == OtheratomInfo.get(PdbKey::serial));
+      status = status && (atomInfo.get<std::string>(PdbKey::serial) == OtheratomInfo.get<std::string>(PdbKey::serial));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in serials!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::name) == OtheratomInfo.get(PdbKey::name));
+      status = status && (atomInfo.get<std::string>(PdbKey::name) == OtheratomInfo.get<std::string>(PdbKey::name));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in names!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::altloc) == OtheratomInfo.get(PdbKey::altloc));
-      if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in altlocs!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::resName) == OtheratomInfo.get(PdbKey::resName));
+      status = status && (atomInfo.get<std::string>(PdbKey::altLoc) == OtheratomInfo.get<std::string>(PdbKey::altLoc));
+      if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in altLocs!" << std::endl);
+      status = status && (atomInfo.get<std::string>(PdbKey::resName) == OtheratomInfo.get<std::string>(PdbKey::resName));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in resNames!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::chainID) == OtheratomInfo.get(PdbKey::chainID));
+      status = status && (atomInfo.get<std::string>(PdbKey::chainID) == OtheratomInfo.get<std::string>(PdbKey::chainID));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in chainIDs!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::resSeq) == OtheratomInfo.get(PdbKey::resSeq));
+      status = status && (atomInfo.get<std::string>(PdbKey::resSeq) == OtheratomInfo.get<std::string>(PdbKey::resSeq));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in resSeqs!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::iCode) == OtheratomInfo.get(PdbKey::iCode));
+      status = status && (atomInfo.get<std::string>(PdbKey::iCode) == OtheratomInfo.get<std::string>(PdbKey::iCode));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in iCodes!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::occupancy) == OtheratomInfo.get(PdbKey::occupancy));
+      status = status && (atomInfo.get<std::string>(PdbKey::occupancy) == OtheratomInfo.get<std::string>(PdbKey::occupancy));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in occupancies!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::tempFactor) == OtheratomInfo.get(PdbKey::tempFactor));
+      status = status && (atomInfo.get<std::string>(PdbKey::tempFactor) == OtheratomInfo.get<std::string>(PdbKey::tempFactor));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in tempFactors!" << std::endl);
-      status = status && (atomInfo.get(PdbKey::charge) == OtheratomInfo.get(PdbKey::charge));
+      status = status && (atomInfo.get<std::string>(PdbKey::charge) == OtheratomInfo.get<std::string>(PdbKey::charge));
       if (!status) DoeLog(1) && (eLog() << Verbose(1) << "Mismatch in charges!" << std::endl);
     }
Index: src/Parser/PdbParser.hpp
===================================================================
--- src/Parser/PdbParser.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/PdbParser.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -23,5 +23,5 @@
   ~PdbParser();
   void load(std::istream* file);
-  void save(std::ostream* file);
+  void save(std::ostream* file, const std::vector<atom *> &atoms);
 
   bool operator==(const PdbParser& b) const;
@@ -38,10 +38,15 @@
   bool isUsedField(std::string fieldName);
   void writeNeighbors(std::ostream* file, int numberOfNeighbors, atom* currentAtom);
-  void saveLine(ostream* file, const atom* currentAtom, const char *name, const int AtomNo, const int ResdueNo);
+  void saveLine(ostream* file, const PdbAtomInfoContainer &atomInfo);
 
   // internal getter and setter
+  PdbAtomInfoContainer& getadditionalAtomData(atom *_atom);
   size_t getSerial(const size_t atomid) const;
-  size_t getAtomId(const size_t atomid) const;
-  void setAtomId(const size_t localatomid, const size_t atomid);
+  void setSerial(const size_t localatomid, const size_t atomid);
+
+  /**
+   * argh, why can't just PdbKey::X+(size_t)i
+   */
+  std::map<size_t, PdbKey::PdbDataKey> PositionEnumMap;
 
   /**
Index: src/Parser/TremoloAtomInfoContainer.cpp
===================================================================
--- src/Parser/TremoloAtomInfoContainer.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/TremoloAtomInfoContainer.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -42,5 +42,6 @@
   GrpTypeNo("0"),
   torsion("-"),
-  neighbors(std::vector<int>(0, 5))
+  neighbors(std::vector<int>(0, 5)),
+  neighbors_processed(false)
 {}
 
Index: src/Parser/TremoloAtomInfoContainer.hpp
===================================================================
--- src/Parser/TremoloAtomInfoContainer.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/TremoloAtomInfoContainer.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -39,4 +39,5 @@
   std::string torsion;
   std::vector<int> neighbors;
+  bool neighbors_processed;
 };
 
Index: src/Parser/TremoloParser.cpp
===================================================================
--- src/Parser/TremoloParser.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/TremoloParser.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -90,5 +90,8 @@
   string::size_type location;
 
+  // reset atomIdMap, for we now get new serials
+  atomIdMap.clear();
   usedFields.clear();
+
   molecule *newmol = World::getInstance().createMolecule();
   newmol->ActiveFlag = true;
@@ -114,12 +117,13 @@
 
 /**
- * Saves the World's current state into as a tremolo file.
+ * Saves the \a atoms into as a tremolo file.
  *
  * \param file where to save the state
- */
-void TremoloParser::save(ostream* file) {
+ * \param atoms atoms to store
+ */
+void TremoloParser::save(ostream* file, const std::vector<atom *> &AtomList) {
   DoLog(0) && (Log() << Verbose(0) << "Saving changes to tremolo." << std::endl);
 
-  vector<atom*>::iterator atomIt;
+  vector<atom*>::const_iterator atomIt;
   vector<string>::iterator it;
 
@@ -129,5 +133,4 @@
   }
   *file << endl;
-  vector<atom *> AtomList = World::getInstance().getAllAtoms();
   for (atomIt = AtomList.begin(); atomIt != AtomList.end(); atomIt++) {
     saveLine(file, *atomIt);
@@ -220,5 +223,5 @@
         ? (*currentBond)->GetOtherAtom(currentAtom)->getId()+1 : 0) << "\t";
     if (currentBond != currentAtom->ListOfBonds.end())
-      currentBond++;
+      ++currentBond;
   }
 }
@@ -259,5 +262,5 @@
   atom* newAtom = World::getInstance().createAtom();
   TremoloAtomInfoContainer *atomInfo = NULL;
-  additionalAtomData[newAtom->getId()] = *(new TremoloAtomInfoContainer);
+  additionalAtomData[newAtom->getId()] = TremoloAtomInfoContainer(); // fill with default values
   atomInfo = &additionalAtomData[newAtom->getId()];
   TremoloKey::atomDataKey currentField;
@@ -310,7 +313,7 @@
  * Reads neighbor information for one atom from the input.
  *
- * \param stream where to read the information from
- * \param number of neighbors to read
- * \param world id of the atom the information belongs to
+ * \param line stream where to read the information from
+ * \param numberOfNeighbors number of neighbors to read
+ * \param atomid world id of the atom the information belongs to
  */
 void TremoloParser::readNeighbors(stringstream* line, int numberOfNeighbors, int atomId) {
@@ -320,4 +323,5 @@
     // 0 is used to fill empty neighbor positions in the tremolo file.
     if (neighborId > 0) {
+//      std::cout << "Atom with global id " << atomId << " has neighbour with serial " << neighborId << std::endl;
       additionalAtomData[atomId].neighbors.push_back(neighborId);
     }
@@ -356,9 +360,16 @@
     currentInfo != additionalAtomData.end(); currentInfo++
   ) {
-    for(vector<int>::iterator neighbor = currentInfo->second.neighbors.begin();
-      neighbor != currentInfo->second.neighbors.end(); neighbor++
-    ) {
-      World::getInstance().getAtom(AtomById(currentInfo->first))
-          ->addBond(World::getInstance().getAtom(AtomById(atomIdMap[*neighbor])));
+    if (!currentInfo->second.neighbors_processed) {
+      for(vector<int>::iterator neighbor = currentInfo->second.neighbors.begin();
+        neighbor != currentInfo->second.neighbors.end(); neighbor++
+      ) {
+//        std::cout << "Creating bond between ("
+//            << currentInfo->first
+//            << ") and ("
+//            << atomIdMap[*neighbor] << "|" << *neighbor << ")" << std::endl;
+        World::getInstance().getAtom(AtomById(currentInfo->first))
+            ->addBond(World::getInstance().getAtom(AtomById(atomIdMap[*neighbor])));
+      }
+      currentInfo->second.neighbors_processed = true;
     }
   }
Index: src/Parser/TremoloParser.hpp
===================================================================
--- src/Parser/TremoloParser.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/TremoloParser.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -26,5 +26,5 @@
   ~TremoloParser();
   void load(std::istream* file);
-  void save(std::ostream* file);
+  void save(std::ostream* file, const std::vector<atom *> &atoms);
   void setFieldsForSave(std::string atomDataLine);
 
Index: src/Parser/XyzParser.cpp
===================================================================
--- src/Parser/XyzParser.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/XyzParser.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -78,9 +78,10 @@
 
 /**
- * Saves the current state of the World into the given XYZ file.
+ * Saves the \a atoms into as a XYZ file.
  *
- * \param XYZ file
+ * \param file where to save the state
+ * \param atoms atoms to store
  */
-void XyzParser::save(ostream* file) {
+void XyzParser::save(ostream* file, const std::vector<atom *> &atoms) {
   DoLog(0) && (Log() << Verbose(0) << "Saving changes to xyz." << std::endl);
   //if (comment == "") {
@@ -95,8 +96,7 @@
       comment += time;
   //}
-  *file << World::getInstance().numAtoms() << endl << "\t" << comment << endl;
+  *file << atoms.size() << endl << "\t" << comment << endl;
 
-  vector<atom*> atoms = World::getInstance().getAllAtoms();
-  for(vector<atom*>::iterator it = atoms.begin(); it != atoms.end(); it++) {
+  for(vector<atom*>::const_iterator it = atoms.begin(); it != atoms.end(); it++) {
     *file << noshowpoint << (*it)->getType()->getSymbol() << "\t" << (*it)->at(0) << "\t" << (*it)->at(1) << "\t" << (*it)->at(2) << endl;
   }
Index: src/Parser/XyzParser.hpp
===================================================================
--- src/Parser/XyzParser.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Parser/XyzParser.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -20,5 +20,5 @@
   ~XyzParser();
   void load(std::istream* file);
-  void save(std::ostream* file);
+  void save(std::ostream* file, const std::vector<atom *> &atoms);
 
 private:
Index: src/Parser/unittests/Makefile.am
===================================================================
--- src/Parser/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Parser/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,46 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  ParserCommonUnitTest \
+  ParserTremoloUnitTest
+
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+GSLLIBS = \
+	../../LinearAlgebra/libMolecuilderLinearAlgebra-@MOLECUILDER_API_VERSION@.la \
+	../../Exceptions/libMolecuilderExceptions-@MOLECUILDER_API_VERSION@.la \
+	../../Helpers/libMolecuilderHelpers-@MOLECUILDER_API_VERSION@.la \
+	$(BOOST_LIB)
+
+ALLLIBS = \
+	../../UIElements/libMolecuilderUI-@MOLECUILDER_API_VERSION@.la \
+	../../Actions/libMolecuilderActions-@MOLECUILDER_API_VERSION@.la \
+	${PARSERLIBS} \
+	../../libMolecuilder-@MOLECUILDER_API_VERSION@.la \
+	${GSLLIBS}
+
+PARSERLIBS = ../../Parser/libMolecuilderParser-@MOLECUILDER_API_VERSION@.la
+UILIBS = ../../UIElements/libMolecuilderUI-@MOLECUILDER_API_VERSION@.la  
+
+ParserCommonUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ParserCommonUnitTest.cpp \
+	ParserCommonUnitTest.hpp
+ParserCommonUnitTest_LDADD = ${ALLLIBS}
+
+ParserTremoloUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ParserTremoloUnitTest.cpp \
+	ParserTremoloUnitTest.hpp
+ParserTremoloUnitTest_LDADD = ${ALLLIBS}
+
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/Parser/unittests/ParserCommonUnitTest.cpp
===================================================================
--- src/Parser/unittests/ParserCommonUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Parser/unittests/ParserCommonUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,292 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ParserCommonUnitTest.cpp
+ *
+ *  Created on: Mar 3, 2010
+ *      Author: metzler
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ParserCommonUnitTest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "Parser/MpqcParser.hpp"
+#include "Parser/PdbParser.hpp"
+#include "Parser/PcpParser.hpp"
+#include "Parser/TremoloParser.hpp"
+#include "Parser/XyzParser.hpp"
+#include "World.hpp"
+#include "atom.hpp"
+#include "element.hpp"
+#include "periodentafel.hpp"
+#include "Descriptors/AtomTypeDescriptor.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+using namespace std;
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ParserCommonUnitTest );
+
+static string waterPcp = "# ParallelCarParinello - main configuration file - created with molecuilder\n\
+\n\
+mainname\tpcp\t# programm name (for runtime files)\n\
+defaultpath\not specified\t# where to put files during runtime\n\
+pseudopotpath\not specified\t# where to find pseudopotentials\n\
+\n\
+ProcPEGamma\t8\t# for parallel computing: share constants\n\
+ProcPEPsi\t1\t# for parallel computing: share wave functions\n\
+DoOutVis\t0\t# Output data for OpenDX\n\
+DoOutMes\t1\t# Output data for measurements\n\
+DoOutOrbitals\t0\t# Output all Orbitals\n\
+DoOutCurr\t0\t# Ouput current density for OpenDx\n\
+DoOutNICS\t0\t# Output Nucleus independent current shieldings\n\
+DoPerturbation\t0\t# Do perturbation calculate and determine susceptibility and shielding\n\
+DoFullCurrent\t0\t# Do full perturbation\n\
+DoConstrainedMD\t0\t# Do perform a constrained (>0, relating to current MD step) instead of unconstrained (0) MD\n\
+Thermostat\tBerendsen\t2.5\t# Which Thermostat and its parameters to use in MD case.\n\
+CommonWannier\t0\t# Put virtual centers at indivual orbits, all common, merged by variance, to grid point, to cell center\n\
+SawtoothStart\t0.01\t# Absolute value for smooth transition at cell border \n\
+VectorPlane\t0\t# Cut plane axis (x, y or z: 0,1,2) for two-dim current vector plot\n\
+VectorCut\t0\t# Cut plane axis value\n\
+AddGramSch\t1\t# Additional GramSchmidtOrtogonalization to be safe\n\
+Seed\t1\t# initial value for random seed for Psi coefficients\n\
+\n\
+MaxOuterStep\t0\t# number of MolecularDynamics/Structure optimization steps\n\
+Deltat\t0.01\t# time per MD step\n\
+OutVisStep\t10\t# Output visual data every ...th step\n\
+OutSrcStep\t5\t# Output \"restart\" data every ..th step\n\
+TargetTemp\t0.000950045\t# Target temperature\n\
+MaxPsiStep\t3\t# number of Minimisation steps per state (0 - default)\n\
+EpsWannier\t1e-07\t# tolerance value for spread minimisation of orbitals\n\
+# Values specifying when to stop\n\
+MaxMinStep\t100\t# Maximum number of steps\n\
+RelEpsTotalE\t1e-07\t# relative change in total energy\n\
+RelEpsKineticE\t1e-05\t# relative change in kinetic energy\n\
+MaxMinStopStep\t2\t# check every ..th steps\n\
+MaxMinGapStopStep\t1\t# check every ..th steps\n\
+\n\
+# Values specifying when to stop for INIT, otherwise same as above\n\
+MaxInitMinStep\t100\t# Maximum number of steps\n\
+InitRelEpsTotalE\t1e-05\t# relative change in total energy\n\
+InitRelEpsKineticE\t0.0001\t# relative change in kinetic energy\n\
+InitMaxMinStopStep\t2\t# check every ..th steps\n\
+InitMaxMinGapStopStep\t1\t# check every ..th steps\n\
+\n\
+BoxLength\t# (Length of a unit cell)\n\
+20\n\
+0\t20\n\
+0\t0\t20\n\
+\n\
+ECut\t128\t# energy cutoff for discretization in Hartrees\n\
+MaxLevel\t5\t# number of different levels in the code, >=2\n\
+Level0Factor\t2\t# factor by which node number increases from S to 0 level\n\
+RiemannTensor\t0\t# (Use metric)\n\
+PsiType\t0\t# 0 - doubly occupied, 1 - SpinUp,SpinDown\n\
+MaxPsiDouble\t2\t# here: specifying both maximum number of SpinUp- and -Down-states\n\
+PsiMaxNoUp\t2\t# here: specifying maximum number of SpinUp-states\n\
+PsiMaxNoDown\t2\t# here: specifying maximum number of SpinDown-states\n\
+AddPsis\t0\t# Additional unoccupied Psis for bandgap determination\n\
+\n\
+RCut\t20\t# R-cut for the ewald summation\n\
+StructOpt\t0\t# Do structure optimization beforehand\n\
+IsAngstroem\t1\t# 0 - Bohr, 1 - Angstroem\n\
+RelativeCoord\t0\t# whether ion coordinates are relative (1) or absolute (0)\n\
+MaxTypes\t2\t# maximum number of different ion types\n\
+\n\
+# Ion type data (PP = PseudoPotential, Z = atomic number)\n\
+#Ion_TypeNr.\tAmount\tZ\tRGauss\tL_Max(PP)L_Loc(PP)IonMass\t# chemical name, symbol\n\
+Ion_Type1\t2\t1\t1.0\t3\t3\t1.008\tHydrogen\tH\n\
+Ion_Type2\t1\t8\t1.0\t3\t3\t15.999\tOxygen\tO\n\
+#Ion_TypeNr._Nr.R[0]\tR[1]\tR[2]\tMoveType (0 MoveIon, 1 FixedIon)\n\
+Ion_Type2_1\t0.000000000\t0.000000000\t0.000000000\t0 # molecule nr 0\n\
+Ion_Type1_1\t0.758602\t0.000000000\t0.504284\t0 # molecule nr 1\n\
+Ion_Type1_2\t0.758602\t0.000000000\t-0.504284\t0 # molecule nr 2\n";
+//----|----*|---||--*||---|***|-------|-------|-------|-----|---------------|-|-
+//000000011111111112222222222333333333344444444445555555555666666666677777777778
+//345678901234567890123456789012345678901234567890123456789012345678901234567890
+static string waterPdb = "\
+REMARK  This is a test water molecule as written by TREMOLO.\n\
+ATOM      1  OT  GMT-    0       1.583   1.785   1.480  1.00178.02           O-2\n\
+ATOM      2  HT  GMT-    0       1.186   1.643   2.213  1.00103.58           H+1\n\
+ATOM      3  HT  GMT-    0       2.642   1.896   1.730  1.00126.00           H+1\n\
+ATOM      4  OT  GMT-    1       3.583   1.785   1.480  1.00178.02           O-2\n\
+ATOM      5  HT  GMT-    1       3.186   1.643   2.213  1.00103.58           H+1\n\
+ATOM      6  HT  GMT-    1       4.642   1.896   1.730  1.00126.00           H+1\n\
+CONECT    1    2    3\n\
+CONECT    2    1\n\
+CONECT    3    1\n\
+CONECT    4    5    6\n\
+CONECT    5    4\n\
+CONECT    6    4\n\
+END";
+static string waterMpqc ="% Created by MoleCuilder\n\
+mpqc: (\n\
+\tsavestate = no\n\
+\tdo_gradient = yes\n\
+\tmole<MBPT2>: (\n\
+\t\tmaxiter = 200\n\
+\t\tbasis = $:basis\n\
+\t\tmolecule = $:molecule\n\
+\t\treference<CLHF>: (\n\
+\t\t\tbasis = $:basis\n\
+\t\t\tmolecule = $:molecule\n\
+\t\t)\n\
+\t)\n\
+)\n\
+molecule<Molecule>: (\n\
+\tunit = angstrom\n\
+\t{ atoms geometry } = {\n\
+\t\tO [ -0.505735\t0\t0 ]\n\
+\t\tH [ 0.252867\t0\t0.504284 ]\n\
+\t\tH [ 0.252867\t0\t-0.504284 ]\n\
+\t}\n\
+)\n\
+basis<GaussianBasisSet>: (\n\
+\tname = \"3-21G\"\n\
+\tmolecule = $:molecule\n\
+)\n";
+static string waterXyz = "3\n\tH2O: water molecule\nO\t0\t0\t0\nH\t0.758602\t0\t0.504284\nH\t0.758602\t0\t-0.504284\n";
+
+void ParserCommonUnitTest::setUp() {
+  World::getInstance();
+
+  setVerbosity(2);
+
+  // we need hydrogens and oxygens in the following tests
+  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(1) != NULL);
+  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(8) != NULL);
+}
+
+void ParserCommonUnitTest::tearDown() {
+  ChangeTracker::purgeInstance();
+  World::purgeInstance();
+}
+
+/************************************ tests ***********************************/
+
+void ParserCommonUnitTest::rewriteAnXyzTest() {
+  cout << "Testing the XYZ parser." << endl;
+  XyzParser* testParser = new XyzParser();
+  stringstream input;
+  input << waterXyz;
+  testParser->load(&input);
+  input.clear();
+
+  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
+
+  // store and parse in again
+  {
+    stringstream output;
+    std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+    testParser->save(&output, atoms);
+    input << output.str();
+    testParser->load(&input);
+  }
+
+  // now twice as many
+  CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
+
+  // check every atom
+  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+  std::vector<atom *>::const_iterator firstiter = atoms.begin();
+  std::vector<atom *>::const_iterator seconditer = atoms.begin();
+  for (size_t i=0;i<3;i++)
+    ++seconditer;
+  for (;
+      seconditer != atoms.end();
+      ++firstiter,++seconditer) {
+    // check position and type (only stuff xyz stores)
+    CPPUNIT_ASSERT_EQUAL((*firstiter)->getPosition(),(*seconditer)->getPosition());
+    CPPUNIT_ASSERT_EQUAL((*firstiter)->getType(),(*seconditer)->getType());
+  }
+}
+
+void ParserCommonUnitTest::readwritePcpTest() {
+  stringstream input(waterPcp);
+  PcpParser* testParser = new PcpParser();
+  testParser->load(&input);
+  input.clear();
+
+  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
+
+  // check that equality function is ok
+  CPPUNIT_ASSERT(*testParser == *testParser);
+
+  stringstream output;
+  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+  testParser->save(&output, atoms);
+
+  input << output.str();
+  PcpParser* testParser2 = new PcpParser();
+  testParser2->load(&input);
+
+  CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
+
+  CPPUNIT_ASSERT(*testParser == *testParser2);
+}
+
+void ParserCommonUnitTest::readwritePdbTest() {
+  stringstream input;
+  input << waterPdb;
+  PdbParser* testParser = new PdbParser();
+  testParser->load(&input);
+  input.clear();
+
+  CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
+
+  stringstream output;
+  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+  testParser->save(&output, atoms);
+
+//  std::cout << "Save PDB is:" << std::endl;
+//  std::cout << output.str() << std::endl;
+
+  input << output.str();
+  PdbParser* testParser2 = new PdbParser();
+  testParser2->load(&input);
+
+  CPPUNIT_ASSERT_EQUAL(12, World::getInstance().numAtoms());
+}
+
+void ParserCommonUnitTest::writeMpqcTest() {
+  // build up water molecule
+  atom *Walker = NULL;
+  Walker = World::getInstance().createAtom();
+  Walker->setType(8);
+  Walker->setPosition(Vector(0,0,0));
+  Walker = World::getInstance().createAtom();
+  Walker->setType(1);
+  Walker->setPosition(Vector(0.758602,0,0.504284));
+  Walker = World::getInstance().createAtom();
+  Walker->setType(1);
+  Walker->setPosition(Vector(0.758602,0,-0.504284));
+  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
+
+  // create two stringstreams, one stored, one created
+  stringstream input(waterMpqc);
+  MpqcParser* testParser = new MpqcParser();
+  stringstream output;
+  std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+  testParser->save(&output, atoms);
+
+  // compare both configs
+  string first = input.str();
+  string second = output.str();
+  CPPUNIT_ASSERT(first == second);
+}
Index: src/Parser/unittests/ParserCommonUnitTest.hpp
===================================================================
--- src/Parser/unittests/ParserCommonUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Parser/unittests/ParserCommonUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * ParserCommonUnitTest.hpp
+ *
+ *  Created on: Mar 3, 2010
+ *      Author: metzler
+ */
+#ifndef PARSERCOMMONUNITTEST_HPP_
+#define PARSERCOMMONUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <string>
+
+class ParserCommonUnitTest :  public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( ParserCommonUnitTest ) ;
+  CPPUNIT_TEST ( rewriteAnXyzTest );
+  CPPUNIT_TEST ( readwritePdbTest );
+  CPPUNIT_TEST ( readwritePcpTest );
+  CPPUNIT_TEST ( writeMpqcTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void rewriteAnXyzTest();
+  void readwritePdbTest();
+  void readwritePcpTest();
+  void writeMpqcTest();
+};
+
+#endif /* PARSERCOMMONUNITTEST_HPP_ */
Index: src/Parser/unittests/ParserTremoloUnitTest.cpp
===================================================================
--- src/Parser/unittests/ParserTremoloUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Parser/unittests/ParserTremoloUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,189 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ParserTremoloUnitTest.cpp
+ *
+ *  Created on: Mar 3, 2010
+ *      Author: metzler
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "ParserTremoloUnitTest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "Parser/MpqcParser.hpp"
+#include "Parser/PdbParser.hpp"
+#include "Parser/PcpParser.hpp"
+#include "Parser/TremoloParser.hpp"
+#include "Parser/XyzParser.hpp"
+#include "World.hpp"
+#include "atom.hpp"
+#include "element.hpp"
+#include "periodentafel.hpp"
+#include "Descriptors/AtomTypeDescriptor.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+using namespace std;
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ParserTremoloUnitTest );
+
+static string Tremolo_Atomdata1 = "# ATOMDATA\tId\tname\tType\tx=3\n";
+static string Tremolo_Atomdata2 = "#\n#ATOMDATA Id name Type x=3\n1 hydrogen H 3.0 4.5 0.1\n\n";
+static string Tremolo_invalidkey = "#\n#ATOMDATA Id name foo Type x=3\n\n\n";
+static string Tremolo_velocity = "#\n#ATOMDATA Id name Type u=3\n1 hydrogen H 3.0 4.5 0.1\n\n";
+static string Tremolo_neighbours = "#\n#ATOMDATA Id Type neighbors=2\n1 H 3 0\n2 H 3 0\n3 O 1 2\n";
+static string Tremolo_improper = "#\n#ATOMDATA Id Type imprData\n8 H 9-10\n9 H 10-8,8-10\n10 O -\n";
+static string Tremolo_torsion = "#\n#ATOMDATA Id Type torsion\n8 H 9-10\n9 H 10-8,8-10\n10 O -\n";
+static string Tremolo_full = "# ATOMDATA\tx=3\tu=3\tF\tstress\tId\tneighbors=5\timprData\tGroupMeasureTypeNo\tType\textType\tname\tresName\tchainID\tresSeq\toccupancy\ttempFactor\tsegID\tCharge\tcharge\tGrpTypeNo\ttorsion\n0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t-\t0\tH\t-\t-\t-\t0\t0\t0\t0\t0\t0\t0\t0\t-\t\n";
+
+void ParserTremoloUnitTest::setUp() {
+  World::getInstance();
+
+  // we need hydrogens and oxygens in the following tests
+  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(1) != NULL);
+  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(8) != NULL);
+}
+
+void ParserTremoloUnitTest::tearDown() {
+  ChangeTracker::purgeInstance();
+  World::purgeInstance();
+}
+
+/************************************ tests ***********************************/
+
+void ParserTremoloUnitTest::readTremoloPreliminaryCommentsTest() {
+  cout << "Testing the tremolo parser." << endl;
+  TremoloParser* testParser = new TremoloParser();
+  stringstream input, output;
+
+  // Atomdata beginning with "# ATOMDATA"
+  {
+    input << Tremolo_Atomdata1;
+    testParser->load(&input);
+    std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+    testParser->save(&output, atoms);
+    CPPUNIT_ASSERT(Tremolo_Atomdata1 == output.str());
+    input.clear();
+    output.clear();
+  }
+
+  // Atomdata beginning with "#ATOMDATA"
+  {
+    input << Tremolo_Atomdata2;
+    testParser->load(&input);
+    std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+    testParser->save(&output, atoms);
+    CPPUNIT_ASSERT(output.str().find("hydrogen") != string::npos);
+    input.clear();
+    output.clear();
+  }
+
+  // Invalid key in Atomdata line
+  input << Tremolo_invalidkey;
+  testParser->load(&input);
+  //TODO: prove invalidity
+  input.clear();
+}
+
+void ParserTremoloUnitTest::readTremoloCoordinatesTest() {
+  TremoloParser* testParser = new TremoloParser();
+  stringstream input;
+
+  // One simple data line
+  input << Tremolo_Atomdata2;
+  testParser->load(&input);
+  CPPUNIT_ASSERT(World::getInstance().getAtom(AtomByType(1))->at(0) == 3.0);
+  input.clear();
+}
+
+void ParserTremoloUnitTest::readTremoloVelocityTest() {
+  TremoloParser* testParser = new TremoloParser();
+  stringstream input;
+
+  // One simple data line
+  input << Tremolo_velocity;
+  testParser->load(&input);
+  CPPUNIT_ASSERT(World::getInstance().getAtom(AtomByType(1))->AtomicVelocity[0] == 3.0);
+  input.clear();
+}
+
+void ParserTremoloUnitTest::readTremoloNeighborInformationTest() {
+  TremoloParser* testParser = new TremoloParser();
+  stringstream input;
+
+  // Neighbor data
+  input << Tremolo_neighbours;
+  testParser->load(&input);
+
+  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
+  CPPUNIT_ASSERT(World::getInstance().getAtom(AtomByType(8))->
+      IsBondedTo(World::getInstance().getAtom(AtomByType(1))));
+  input.clear();
+}
+
+void ParserTremoloUnitTest::readAndWriteTremoloImprDataInformationTest() {
+  TremoloParser* testParser = new TremoloParser();
+  stringstream input, output;
+
+  // Neighbor data
+  {
+    input << Tremolo_improper;
+    testParser->load(&input);
+    std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+    testParser->save(&output, atoms);
+    CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
+    CPPUNIT_ASSERT(output.str().find("2-0,0-2") != string::npos);
+    input.clear();
+    output.clear();
+  }
+}
+
+void ParserTremoloUnitTest::readAndWriteTremoloTorsionInformationTest() {
+  TremoloParser* testParser = new TremoloParser();
+  stringstream input, output;
+
+  // Neighbor data
+  {
+    input << Tremolo_torsion;
+    testParser->load(&input);
+    std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+    testParser->save(&output, atoms);
+    CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
+    CPPUNIT_ASSERT(output.str().find("2-0,0-2") != string::npos);
+    input.clear();
+    output.clear();
+  }
+}
+
+void ParserTremoloUnitTest::writeTremoloTest() {
+  TremoloParser* testParser = new TremoloParser();
+  stringstream output;
+
+  // with the maximum number of fields and minimal information, default values are printed
+  {
+    atom* newAtom = World::getInstance().createAtom();
+    newAtom->setType(1);
+    testParser->setFieldsForSave("x=3 u=3 F stress Id neighbors=5 imprData GroupMeasureTypeNo Type extType name resName chainID resSeq occupancy tempFactor segID Charge charge GrpTypeNo torsion");
+    std::vector<atom *> atoms = World::getInstance().getAllAtoms();
+    testParser->save(&output, atoms);
+    CPPUNIT_ASSERT(output.str() == Tremolo_full);
+  }
+
+  cout << "testing the tremolo parser is done" << endl;
+}
Index: src/Parser/unittests/ParserTremoloUnitTest.hpp
===================================================================
--- src/Parser/unittests/ParserTremoloUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Parser/unittests/ParserTremoloUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,38 @@
+/*
+ * ParserTremoloUnitTest.hpp
+ *
+ *  Created on: Mar 3, 2010
+ *      Author: metzler
+ */
+#ifndef PARSERTREMOLOUNITTEST_HPP_
+#define PARSERTREMOLOUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <string>
+
+class ParserTremoloUnitTest :  public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( ParserTremoloUnitTest ) ;
+  CPPUNIT_TEST ( readTremoloPreliminaryCommentsTest );
+  CPPUNIT_TEST ( readTremoloCoordinatesTest );
+  CPPUNIT_TEST ( readTremoloVelocityTest );
+  CPPUNIT_TEST ( readTremoloNeighborInformationTest );
+  CPPUNIT_TEST ( readAndWriteTremoloImprDataInformationTest );
+  CPPUNIT_TEST ( readAndWriteTremoloTorsionInformationTest );
+  CPPUNIT_TEST ( writeTremoloTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void readTremoloPreliminaryCommentsTest();
+  void readTremoloCoordinatesTest();
+  void readTremoloVelocityTest();
+  void readTremoloNeighborInformationTest();
+  void readAndWriteTremoloImprDataInformationTest();
+  void readAndWriteTremoloTorsionInformationTest();
+  void writeTremoloTest();
+};
+
+#endif /* PARSERTREMOLOUNITTEST_HPP_ */
Index: src/Patterns/Singleton_impl.hpp
===================================================================
--- src/Patterns/Singleton_impl.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/Patterns/Singleton_impl.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -9,4 +9,5 @@
 #define SINGLETON_IMPL_HPP_
 
+#include "Helpers/Assert.hpp"
 #include "Patterns/Singleton.hpp"
 
Index: src/Patterns/unittests/CacheableUnitTest.cpp
===================================================================
--- src/Patterns/unittests/CacheableUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/CacheableUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,103 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * CacheableUnitTest.cpp
+ *
+ *  Created on: Feb 2, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CacheableUnitTest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <boost/bind.hpp>
+
+#include "Patterns/Cacheable.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( CacheableTest );
+
+class threeNumbers : public Observable {
+public:
+  int x;
+  int y;
+  int z;
+  Cacheable<int> sum;
+  bool hasRecalced;
+
+  void setX(int _x){
+    OBSERVE;
+    x = _x;
+  }
+
+  void setY
+  (int _y){
+    OBSERVE;
+    y = _y;
+  }
+
+  void setZ(int _z){
+    OBSERVE;
+    z = _z;
+  }
+
+  int calcSum(){
+    hasRecalced = true;
+    return x+y+z;
+  }
+
+  threeNumbers(int _x,int _y, int _z) :
+    Observable("threeNumbers"),
+    x(_x),y(_y),z(_z),
+    sum(this,boost::bind(&threeNumbers::calcSum,this),"sum"),
+    hasRecalced(false)
+  {}
+};
+
+
+
+
+void CacheableTest::setUp(){
+  numbers = new threeNumbers(1,2,3);
+}
+
+void CacheableTest::tearDown(){
+  delete numbers;
+}
+
+void CacheableTest::doesRecalcTest()
+{
+  CPPUNIT_ASSERT_EQUAL( 6, *(numbers->sum));
+  CPPUNIT_ASSERT_EQUAL( true, numbers->hasRecalced);
+  numbers->hasRecalced=false;
+  numbers->setX(4);
+  CPPUNIT_ASSERT_EQUAL( false, numbers->hasRecalced);
+  CPPUNIT_ASSERT_EQUAL( 9, *(numbers->sum));
+  CPPUNIT_ASSERT_EQUAL( true, numbers->hasRecalced);
+  numbers->hasRecalced=false;
+  CPPUNIT_ASSERT_EQUAL( 9, *(numbers->sum));
+#ifndef NO_CACHING
+  CPPUNIT_ASSERT_EQUAL( false, numbers->hasRecalced);
+#else
+  CPPUNIT_ASSERT_EQUAL( true, numbers->hasRecalced);
+#endif
+}
Index: src/Patterns/unittests/CacheableUnitTest.hpp
===================================================================
--- src/Patterns/unittests/CacheableUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/CacheableUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,31 @@
+/*
+ * CacheableUnitTest.hpp
+ *
+ *  Created on: Feb 2, 2010
+ *      Author: crueger
+ */
+
+#ifndef CACHEABLEUNITTEST_HPP_
+#define CACHEABLEUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+// stub classes
+class threeNumbers;
+
+class CacheableTest :  public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( CacheableTest );
+  CPPUNIT_TEST ( doesRecalcTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void doesRecalcTest();
+  threeNumbers *numbers;
+};
+
+#endif /* CACHEABLEUNITTEST_HPP_ */
Index: src/Patterns/unittests/Makefile.am
===================================================================
--- src/Patterns/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,49 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  CacheableUnitTest \
+  ObserverUnitTest \
+  RegistryUnitTest \
+  SingletonUnitTest
+
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+
+CacheableUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	CacheableUnitTest.cpp \
+	CacheableUnitTest.hpp \
+	../Cachable.hpp \
+	../Observer.cpp \
+	../Observer.hpp \
+	../ObserverIterator.hpp
+CacheableUnitTest_LDADD = $(BOOST_LIB)
+
+ObserverUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ObserverUnitTest.cpp \
+	ObserverUnitTest.hpp \
+	../Observer.cpp \
+	../Observer.hpp \
+	../ObserverIterator.hpp
+ObserverUnitTest_LDADD = $(BOOST_LIB)
+
+RegistryUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	RegistryUnitTest.cpp \
+	RegistryUnitTest.hpp
+#RegistryUnitTest_LDADD = $(PATTERNLIBS)
+
+SingletonUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	SingletonUnitTest.cpp \
+	SingletonUnitTest.hpp
+SingletonUnitTest_LDADD = $(BOOST_LIB)
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/Patterns/unittests/ObserverUnitTest.cpp
===================================================================
--- src/Patterns/unittests/ObserverUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/ObserverUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,492 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ObserverTest.cpp
+ *
+ *  Created on: Jan 19, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <set>
+
+#include "Patterns/Observer.hpp"
+#include "Patterns/ObservedIterator.hpp"
+#include "Helpers/Assert.hpp"
+
+#include <iostream>
+
+#include "ObserverUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ObserverTest );
+
+/******************* Test stubs ************************/
+
+class UpdateCountObserver : public Observer {
+public:
+  UpdateCountObserver() :
+    Observer("UpdateCountObserver"),
+    updates(0)
+  {};
+  void update(Observable *publisher){
+    updates++;
+  }
+  void subjectKilled(Observable *publisher) {
+  }
+  int updates;
+};
+
+class SimpleObservable : public Observable {
+public:
+  SimpleObservable() :
+    Observable("SimpleObservable")
+  {}
+
+  void changeMethod() {
+    OBSERVE;
+    int i = 0;
+    i++;
+  }
+};
+
+class CallObservable : public Observable {
+public:
+  CallObservable() :
+    Observable("CallObservable")
+  {}
+
+  void changeMethod1() {
+    OBSERVE;
+    int i = 0;
+    i++;
+  }
+
+  void changeMethod2() {
+    OBSERVE;
+    int i = 0;
+    i++;
+    changeMethod1();
+  }
+};
+
+class BlockObservable : public Observable {
+public:
+  BlockObservable() :
+    Observable("BlockObservable")
+  {}
+
+  void changeMethod1(){
+    OBSERVE;
+    // test if we report correctly as blocked
+    CPPUNIT_ASSERT(isBlocked());
+  }
+
+  void changeMethod2(){
+    OBSERVE;
+    internalMethod1();
+    internalMethod2();
+  }
+
+  void internalMethod1(){
+    // we did not block, but our caller did...
+    // see if this is found
+    CPPUNIT_ASSERT(isBlocked());
+  }
+
+  void internalMethod2(){
+    OBSERVE;
+    // Both this method and the caller do block
+    // Does the reporting still work as expected?
+    CPPUNIT_ASSERT(isBlocked());
+  }
+
+  void noChangeMethod(){
+    // No Block introduced here
+    // reported correctely?
+    CPPUNIT_ASSERT(!isBlocked());
+  }
+};
+
+class SuperObservable : public Observable {
+public:
+  SuperObservable():
+    Observable("SuperObservable")
+  {
+    subObservable = new SimpleObservable();
+    subObservable->signOn(this);
+  }
+  ~SuperObservable(){
+    delete subObservable;
+  }
+  void changeMethod() {
+    OBSERVE;
+    int i = 0;
+    i++;
+    subObservable->changeMethod();
+  }
+  SimpleObservable *subObservable;
+};
+
+class NotificationObservable : public Observable {
+public:
+  NotificationObservable() :
+    Observable("NotificationObservable"),
+    notification1(new Notification(this)),
+    notification2(new Notification(this))
+  {}
+
+  ~NotificationObservable(){
+    delete notification1;
+    delete notification2;
+  }
+
+  void operation1(){
+    OBSERVE;
+    NOTIFY(notification1);
+  }
+
+  void operation2(){
+    OBSERVE;
+    NOTIFY(notification2);
+  }
+
+  Notification_ptr notification1;
+  Notification_ptr notification2;
+};
+
+class NotificationObserver : public Observer {
+public:
+  NotificationObserver(Notification_ptr notification) :
+    Observer("NotificationObserver"),
+    requestedNotification(notification),
+    wasNotified(false)
+  {}
+
+  void update(Observable*){}
+  void subjectKilled(Observable*){}
+  void recieveNotification(Observable *publisher, Notification_ptr notification){
+    ASSERT(requestedNotification==notification,"Notification received that was not requested");
+    wasNotified = true;
+  }
+
+  Notification_ptr requestedNotification;
+
+  bool wasNotified;
+};
+
+class ObservableSet : public Observable {
+public:
+  typedef std::set<SimpleObservable*> set;
+  typedef ObservedIterator<set> iterator;
+  typedef set::const_iterator const_iterator;
+
+  ObservableSet(int _num) :
+    Observable("ObservableCollection"),
+    num(_num)
+  {
+    for(int i=0; i<num; ++i){
+      SimpleObservable *content = new SimpleObservable();
+      content->signOn(this);
+      theSet.insert(content);
+    }
+  }
+
+  ~ObservableSet(){
+    set::iterator iter;
+    for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
+      delete (*iter);
+    }
+  }
+
+  iterator begin(){
+    return iterator(theSet.begin(),this);
+  }
+
+  iterator end(){
+    return iterator(theSet.end(),this);
+  }
+
+  const int num;
+
+private:
+  set theSet;
+};
+
+class ObservableMap : public Observable {
+public:
+  typedef std::map<int,SimpleObservable*> set;
+  typedef ObservedIterator<set> iterator;
+  typedef set::const_iterator const_iterator;
+
+  ObservableMap(int _num) :
+    Observable("ObservableCollection"),
+    num(_num)
+  {
+    for(int i=0; i<num; ++i){
+      SimpleObservable *content = new SimpleObservable();
+      content->signOn(this);
+      theSet.insert(std::make_pair(i,content));
+    }
+  }
+
+  ~ObservableMap(){
+    set::iterator iter;
+    for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
+      delete iter->second;
+    }
+  }
+
+  iterator begin(){
+    return iterator(theSet.begin(),this);
+  }
+
+  iterator end(){
+    return iterator(theSet.end(),this);
+  }
+
+  const int num;
+
+private:
+  set theSet;
+};
+
+
+/******************* actuall tests ***************/
+
+void ObserverTest::setUp() {
+  ASSERT_DO(Assert::Throw);
+  simpleObservable1 = new SimpleObservable();
+  simpleObservable2 = new SimpleObservable();
+  callObservable = new CallObservable();
+  superObservable = new SuperObservable();
+  blockObservable = new BlockObservable();
+  notificationObservable = new NotificationObservable();
+  obsset = new ObservableSet(5);
+  obsmap = new ObservableMap(5);
+
+  observer1 = new UpdateCountObserver();
+  observer2 = new UpdateCountObserver();
+  observer3 = new UpdateCountObserver();
+  observer4 = new UpdateCountObserver();
+
+  notificationObserver1 = new NotificationObserver(notificationObservable->notification1);
+  notificationObserver2 = new NotificationObserver(notificationObservable->notification2);
+}
+
+void ObserverTest::tearDown() {
+  delete simpleObservable1;
+  delete simpleObservable2;
+  delete callObservable;
+  delete superObservable;
+  delete blockObservable;
+  delete notificationObservable;
+  delete obsset;
+  delete obsmap;
+
+  delete observer1;
+  delete observer2;
+  delete observer3;
+  delete observer4;
+  delete notificationObserver1;
+  delete notificationObserver2;
+}
+
+void ObserverTest::doesUpdateTest()
+{
+  simpleObservable1->signOn(observer1);
+  simpleObservable1->signOn(observer2);
+  simpleObservable1->signOn(observer3);
+
+  simpleObservable2->signOn(observer2);
+  simpleObservable2->signOn(observer4);
+
+  CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
+  CPPUNIT_ASSERT_EQUAL( 0, observer2->updates );
+  CPPUNIT_ASSERT_EQUAL( 0, observer3->updates );
+  CPPUNIT_ASSERT_EQUAL( 0, observer4->updates );
+
+
+  simpleObservable1->changeMethod();
+  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
+  CPPUNIT_ASSERT_EQUAL( 1, observer2->updates );
+  CPPUNIT_ASSERT_EQUAL( 1, observer3->updates );
+  CPPUNIT_ASSERT_EQUAL( 0, observer4->updates );
+
+  simpleObservable1->signOff(observer3);
+
+  simpleObservable1->changeMethod();
+  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
+  CPPUNIT_ASSERT_EQUAL( 2, observer2->updates );
+  CPPUNIT_ASSERT_EQUAL( 1, observer3->updates );
+  CPPUNIT_ASSERT_EQUAL( 0, observer4->updates );
+
+  simpleObservable2->changeMethod();
+  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
+  CPPUNIT_ASSERT_EQUAL( 3, observer2->updates );
+  CPPUNIT_ASSERT_EQUAL( 1, observer3->updates );
+  CPPUNIT_ASSERT_EQUAL( 1, observer4->updates );
+}
+
+
+void ObserverTest::doesBlockUpdateTest() {
+  callObservable->signOn(observer1);
+  CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
+
+  callObservable->changeMethod1();
+  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
+
+  callObservable->changeMethod2();
+  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
+}
+
+void ObserverTest::doesSubObservableTest() {
+  superObservable->signOn(observer1);
+  superObservable->subObservable->signOn(observer2);
+
+  superObservable->subObservable->changeMethod();
+  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
+  CPPUNIT_ASSERT_EQUAL( 1, observer2->updates );
+
+  superObservable->changeMethod();
+  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
+  CPPUNIT_ASSERT_EQUAL( 2, observer2->updates );
+}
+
+void ObserverTest::outsideLockTest(){
+  callObservable->signOn(observer1);
+  CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
+
+  {
+    LOCK_OBSERVABLE(*callObservable);
+    CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
+  }
+  // lock is gone now, observer should have notified
+  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
+}
+
+void ObserverTest::doesNotifyTest(){
+  notificationObservable->signOn(notificationObserver1,
+                                 notificationObservable->notification1);
+  notificationObservable->signOn(notificationObserver2,
+                                 notificationObservable->notification2);
+
+  notificationObservable->operation1();
+  CPPUNIT_ASSERT(notificationObserver1->wasNotified);
+  CPPUNIT_ASSERT(!notificationObserver2->wasNotified);
+
+  notificationObserver1->wasNotified=false;
+
+  notificationObservable->operation2();
+  CPPUNIT_ASSERT(!notificationObserver1->wasNotified);
+  CPPUNIT_ASSERT(notificationObserver2->wasNotified);
+
+}
+
+void ObserverTest::doesReportTest(){
+  // Actual checks are in the Stub-methods for this
+  blockObservable->changeMethod1();
+  blockObservable->changeMethod2();
+  blockObservable->noChangeMethod();
+}
+
+void ObserverTest::iteratorTest(){
+  int i = 0;
+  // test the general iterator methods
+  for(ObservableSet::iterator iter=obsset->begin(); iter!=obsset->end();++iter){
+    CPPUNIT_ASSERT(i< obsset->num);
+    i++;
+  }
+
+  i=0;
+  for(ObservableSet::const_iterator iter=obsset->begin(); iter!=obsset->end();++iter){
+    CPPUNIT_ASSERT(i<obsset->num);
+    i++;
+  }
+
+  obsset->signOn(observer1);
+  {
+    // we construct this out of the loop, so the iterator dies at the end of
+    // the scope and not the end of the loop (allows more testing)
+    ObservableSet::iterator iter;
+    for(iter=obsset->begin(); iter!=obsset->end(); ++iter){
+      (*iter)->changeMethod();
+    }
+    // At this point no change should have been propagated
+    CPPUNIT_ASSERT_EQUAL( 0, observer1->updates);
+  }
+  // After the Iterator has died the propagation should take place
+  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates);
+
+  // when using a const_iterator no changes should be propagated
+  for(ObservableSet::const_iterator iter = obsset->begin(); iter!=obsset->end();++iter);
+  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates);
+
+  // we need to test the operator-> as well
+  obsmap->signOn(observer2);
+  {
+    // we construct this out of the loop, so the iterator dies at the end of
+    // the scope and not the end of the loop (allows more testing)
+    ObservableMap::iterator iter;
+    for(iter=obsmap->begin(); iter!=obsmap->end(); ++iter){
+      iter->second->changeMethod();
+    }
+    // At this point no change should have been propagated
+    CPPUNIT_ASSERT_EQUAL( 0, observer2->updates);
+  }
+  // After the Iterator has died the propagation should take place
+  CPPUNIT_ASSERT_EQUAL( 1, observer2->updates);
+
+
+  obsset->signOff(observer1);
+  obsmap->signOff(observer2);
+}
+
+void ObserverTest::CircleDetectionTest() {
+  std::cout << std::endl << "Warning: the next test involved methods that can produce infinite loops." << std::endl;
+  std::cout << "Errors in this methods can not be checked using the CPPUNIT_ASSERT Macros." << std::endl;
+  std::cout << "Instead tests are run on these methods to see if termination is assured" << std::endl << std::endl;
+  std::cout << "If this test does not complete in a few seconds, kill the test-suite and fix the Error in the circle detection mechanism" << std::endl;
+
+  std::cout << std::endl << std::endl << "The following errors displayed by the observer framework can be ignored" << std::endl;
+
+  // make this Observable its own subject. NEVER DO THIS IN ACTUAL CODE
+  simpleObservable1->signOn(simpleObservable1);
+#ifndef NDEBUG
+  CPPUNIT_ASSERT_THROW(simpleObservable1->changeMethod(),Assert::AssertionFailure);
+#else
+  simpleObservable1->changeMethod();
+#endif
+
+  // more complex test
+  simpleObservable1->signOff(simpleObservable1);
+  simpleObservable1->signOn(simpleObservable2);
+  simpleObservable2->signOn(simpleObservable1);
+#ifndef NDEBUG
+  CPPUNIT_ASSERT_THROW(simpleObservable1->changeMethod(),Assert::AssertionFailure);
+#else
+  simpleObservable1->changeMethod();
+#endif
+
+
+  simpleObservable1->signOff(simpleObservable2);
+  simpleObservable2->signOff(simpleObservable1);
+  // when we reach this line, although we broke the DAG assumption the circle check works fine
+  CPPUNIT_ASSERT(true);
+}
Index: src/Patterns/unittests/ObserverUnitTest.hpp
===================================================================
--- src/Patterns/unittests/ObserverUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/ObserverUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,70 @@
+/*
+ * ObserverTest.hpp
+ *
+ *  Created on: Jan 19, 2010
+ *      Author: crueger
+ */
+
+#ifndef OBSERVERTEST_HPP_
+#define OBSERVERTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+// forward declaration for test stubs
+class UpdateCountObserver;
+class NotificationObserver;
+class SimpleObservable;
+class CallObservable;
+class SuperObservable;
+class ObservableSet;
+class ObservableMap;
+class BlockObservable;
+class NotificationObservable;
+
+class ObserverTest :  public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( ObserverTest ) ;
+  CPPUNIT_TEST ( doesUpdateTest );
+  CPPUNIT_TEST ( doesBlockUpdateTest );
+  CPPUNIT_TEST ( doesSubObservableTest );
+  CPPUNIT_TEST ( outsideLockTest );
+  CPPUNIT_TEST ( doesNotifyTest );
+  CPPUNIT_TEST ( doesReportTest );
+  CPPUNIT_TEST ( iteratorTest );
+  CPPUNIT_TEST ( CircleDetectionTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void doesUpdateTest();
+  void doesBlockUpdateTest();
+  void doesSubObservableTest();
+  void outsideLockTest();
+  void doesNotifyTest();
+  void doesReportTest();
+  void iteratorTest();
+  void CircleDetectionTest();
+
+private:
+  UpdateCountObserver *observer1;
+  UpdateCountObserver *observer2;
+  UpdateCountObserver *observer3;
+  UpdateCountObserver *observer4;
+
+  NotificationObserver *notificationObserver1;
+  NotificationObserver *notificationObserver2;
+
+  SimpleObservable *simpleObservable1;
+  SimpleObservable *simpleObservable2;
+  CallObservable *callObservable;
+  BlockObservable *blockObservable;
+  SuperObservable *superObservable;
+  NotificationObservable *notificationObservable;
+  ObservableSet *obsset;
+  ObservableMap *obsmap;
+
+};
+
+#endif /* OBSERVERTEST_HPP_ */
Index: src/Patterns/unittests/RegistryUnitTest.cpp
===================================================================
--- src/Patterns/unittests/RegistryUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/RegistryUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,48 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * RegistryUnitTest.cpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <typeinfo>
+
+#include "RegistryUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( RegistryTest );
+
+
+void RegistryTest::setUp()
+{};
+
+
+void RegistryTest::tearDown()
+{};
+
+void RegistryTest::InOutCheck()
+{
+  CPPUNIT_ASSERT(true);
+}
Index: src/Patterns/unittests/RegistryUnitTest.hpp
===================================================================
--- src/Patterns/unittests/RegistryUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/RegistryUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,30 @@
+/*
+ * RegistryUnitTest.hpp
+ *
+ *  Created on: Oct 27, 2010
+ *      Author: heber
+ */
+
+#ifndef REGISTRYUNITTEST_HPP_
+#define REGISTRYUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+/********************************************** Test classes **************************************/
+
+class RegistryTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( RegistryTest) ;
+    CPPUNIT_TEST ( InOutCheck );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void InOutCheck();
+
+private:
+};
+
+#endif /* REGISTRYUNITTEST_HPP_ */
Index: src/Patterns/unittests/SingletonUnitTest.cpp
===================================================================
--- src/Patterns/unittests/SingletonUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/SingletonUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,155 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * SingletonUnitTest.cpp
+ *
+ *  Created on: Mar 11, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "SingletonUnitTest.hpp"
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+#include <iostream>
+
+#include "Patterns/Singleton.hpp"
+#include "Patterns/Singleton_impl.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( SingletonTest );
+
+// some necessary stubs
+class SingletonStub1 : public Singleton <SingletonStub1>{
+  friend class Singleton<SingletonStub1>;
+private:
+  SingletonStub1(){
+    count1++;
+  }
+  // explicit copy constructor to catch if this is ever called
+  SingletonStub1(const SingletonStub1&){
+    CPPUNIT_FAIL    ( "Copy constructor of Singleton called" );
+  }
+  virtual ~SingletonStub1(){
+    count2++;
+  }
+public:
+  static int count1;
+  static int count2;
+};
+
+int SingletonStub1::count1 = 0;
+int SingletonStub1::count2 = 0;
+
+CONSTRUCT_SINGLETON(SingletonStub1);
+
+class SingletonStub2 : public Singleton<SingletonStub2>{
+  friend class Singleton<SingletonStub2>;
+private:
+  SingletonStub2(){
+    count1++;
+  }
+  // explicit copy constructor to catch if this is ever called
+  SingletonStub2(const SingletonStub2&){
+    CPPUNIT_FAIL    ( "Copy constructor of Singleton called" );
+  }
+  virtual ~SingletonStub2(){
+    count2++;
+  }
+public:
+  static int count1;
+  static int count2;
+};
+
+int SingletonStub2::count1 = 0;
+int SingletonStub2::count2 = 0;
+
+CONSTRUCT_SINGLETON(SingletonStub2);
+
+void SingletonTest::setUp(){}
+void SingletonTest::tearDown(){}
+
+void SingletonTest::ConstructionTest(){
+  void *ptr_1_1 = reinterpret_cast<void*>(SingletonStub1::getPointer());
+  void *ptr_1_2 = reinterpret_cast<void*>(SingletonStub1::getPointer());
+  void *ptr_1_3 = reinterpret_cast<void*>(&(SingletonStub1::getInstance()));
+
+  // test if we always get the same instance of our singleton
+  CPPUNIT_ASSERT_EQUAL(ptr_1_1,ptr_1_2);
+  CPPUNIT_ASSERT_EQUAL(ptr_1_1,ptr_1_3);
+
+  void *ptr_2_1 = reinterpret_cast<void*>(SingletonStub2::getPointer());
+  void *ptr_2_2 = reinterpret_cast<void*>(SingletonStub2::getPointer());
+  void *ptr_2_3 = reinterpret_cast<void*>(&(SingletonStub2::getInstance()));
+
+  // same as above but for a different singleton
+  CPPUNIT_ASSERT_EQUAL(ptr_2_1,ptr_2_2);
+  CPPUNIT_ASSERT_EQUAL(ptr_2_1,ptr_2_3);
+
+  // see if the two singletons actually differ
+  CPPUNIT_ASSERT(ptr_1_1!=ptr_2_1);
+
+  // see if each constructor was called exactly once
+  CPPUNIT_ASSERT_EQUAL(1,SingletonStub1::count1);
+  CPPUNIT_ASSERT_EQUAL(1,SingletonStub2::count1);
+  // no calls to the destructor should have occured so far
+  CPPUNIT_ASSERT_EQUAL(0,SingletonStub1::count2);
+  CPPUNIT_ASSERT_EQUAL(0,SingletonStub2::count2);
+
+  SingletonStub1::purgeInstance();
+
+  void *ptr_3_1 = reinterpret_cast<void*>(SingletonStub1::getPointer());
+  void *ptr_3_2 = reinterpret_cast<void*>(SingletonStub1::getPointer());
+
+  // now the constructor should have been called twice
+  CPPUNIT_ASSERT_EQUAL(2,SingletonStub1::count1);
+  // the destructor should have been called once
+  CPPUNIT_ASSERT_EQUAL(1,SingletonStub1::count2);
+  // see if the singleton Assumption holds
+  CPPUNIT_ASSERT_EQUAL(ptr_3_1,ptr_3_2);
+  // Some esoteric thing might cause our pointer to lay at the position of Singleton2 now
+  // See that those two objects still differ
+  CPPUNIT_ASSERT(ptr_3_1!=ptr_2_1);
+  // don't test for pointer difference between first and second singleton here,
+  // because they might be constructed in the same place
+
+
+  SingletonStub2::resetInstance();
+  // now the constructor should have been called twice
+  CPPUNIT_ASSERT_EQUAL(2,SingletonStub2::count1);
+  // the destructor should have been called once
+  CPPUNIT_ASSERT_EQUAL(1,SingletonStub2::count2);
+
+  void *ptr_4_1 = reinterpret_cast<void*>(SingletonStub2::getPointer());
+  void *ptr_4_2 = reinterpret_cast<void*>(SingletonStub2::getPointer());
+
+  // Still only two calls to the constructor, one call to destructor
+  CPPUNIT_ASSERT_EQUAL(2,SingletonStub2::count1);
+  CPPUNIT_ASSERT_EQUAL(1,SingletonStub2::count2);
+
+  // test if Singleton assumption can be broken by reset
+  CPPUNIT_ASSERT_EQUAL(ptr_4_1,ptr_4_2);
+
+  // and again test if we actually have a object seperate from anything else
+  CPPUNIT_ASSERT(ptr_4_1!=ptr_3_1);
+
+
+  // we don't purge our singletons here. Purging should be done automatically by the Singleton
+  // mechanism. Check with Valgrind to see if memory-leak occurs
+  std::cout << "Not purging Singleton!\n Check with Valgrind to see if automatic purgins is working!" << std::endl;
+
+}
Index: src/Patterns/unittests/SingletonUnitTest.hpp
===================================================================
--- src/Patterns/unittests/SingletonUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Patterns/unittests/SingletonUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,26 @@
+/*
+ * SingletonUnitTest.hpp
+ *
+ *  Created on: Mar 11, 2010
+ *      Author: crueger
+ */
+
+#ifndef SINGLETONUNITTEST_HPP_
+#define SINGLETONUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class SingletonTest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( SingletonTest );
+  CPPUNIT_TEST ( ConstructionTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void ConstructionTest();
+};
+
+#endif /* SINGLETONUNITTEST_HPP_ */
Index: src/Shapes/unittests/Makefile.am
===================================================================
--- src/Shapes/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Shapes/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,30 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  ShapeUnittest
+  
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+SHAPELIBS = \
+	../../LinearAlgebra/libMolecuilderLinearAlgebra-@MOLECUILDER_API_VERSION@.la \
+	../../Exceptions/libMolecuilderExceptions-@MOLECUILDER_API_VERSION@.la \
+	../../Helpers/libMolecuilderHelpers-@MOLECUILDER_API_VERSION@.la \
+	$(BOOST_LIB)
+
+ShapeUnittest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ShapeUnitTest.cpp \
+	ShapeUnitTest.hpp
+ShapeUnittest_LDADD = $(SHAPELIBS)
+
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/Shapes/unittests/ShapeUnitTest.cpp
===================================================================
--- src/Shapes/unittests/ShapeUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Shapes/unittests/ShapeUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,654 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ShapeUnittest.cpp
+ *
+ *  Created on: Jun 18, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cmath>
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+#include "LinearAlgebra/Vector.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+
+#include "ShapeUnitTest.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ShapeUnittest );
+
+void ShapeUnittest::setUp()
+{
+  v000 =  0*unitVec[0]+0*unitVec[1]+0*unitVec[2];
+  v100 =  1*unitVec[0]+0*unitVec[1]+0*unitVec[2];
+  v200 = -1*unitVec[0]+0*unitVec[1]+0*unitVec[2];
+  v010 =  0*unitVec[0]+1*unitVec[1]+0*unitVec[2];
+  v110 =  1*unitVec[0]+1*unitVec[1]+0*unitVec[2];
+  v210 = -1*unitVec[0]+1*unitVec[1]+0*unitVec[2];
+  v020 =  0*unitVec[0]-1*unitVec[1]+0*unitVec[2];
+  v120 =  1*unitVec[0]-1*unitVec[1]+0*unitVec[2];
+  v220 = -1*unitVec[0]-1*unitVec[1]+0*unitVec[2];
+  v001 =  0*unitVec[0]+0*unitVec[1]+1*unitVec[2];
+  v101 =  1*unitVec[0]+0*unitVec[1]+1*unitVec[2];
+  v201 = -1*unitVec[0]+0*unitVec[1]+1*unitVec[2];
+  v011 =  0*unitVec[0]+1*unitVec[1]+1*unitVec[2];
+  v111 =  1*unitVec[0]+1*unitVec[1]+1*unitVec[2];
+  v211 = -1*unitVec[0]+1*unitVec[1]+1*unitVec[2];
+  v021 =  0*unitVec[0]-1*unitVec[1]+1*unitVec[2];
+  v121 =  1*unitVec[0]-1*unitVec[1]+1*unitVec[2];
+  v221 = -1*unitVec[0]-1*unitVec[1]+1*unitVec[2];
+  v002 =  0*unitVec[0]+0*unitVec[1]-1*unitVec[2];
+  v102 =  1*unitVec[0]+0*unitVec[1]-1*unitVec[2];
+  v202 = -1*unitVec[0]+0*unitVec[1]-1*unitVec[2];
+  v012 =  0*unitVec[0]+1*unitVec[1]-1*unitVec[2];
+  v112 =  1*unitVec[0]+1*unitVec[1]-1*unitVec[2];
+  v212 = -1*unitVec[0]+1*unitVec[1]-1*unitVec[2];
+  v022 =  0*unitVec[0]-1*unitVec[1]-1*unitVec[2];
+  v122 =  1*unitVec[0]-1*unitVec[1]-1*unitVec[2];
+  v222 = -1*unitVec[0]-1*unitVec[1]-1*unitVec[2];
+}
+
+void ShapeUnittest::tearDown()
+{}
+
+
+void ShapeUnittest::baseShapesTest(){
+  CPPUNIT_ASSERT(!Nowhere().isInside(v000));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v100));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v200));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v010));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v110));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v210));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v020));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v120));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v220));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v001));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v101));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v201));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v011));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v111));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v211));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v021));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v121));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v221));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v002));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v102));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v202));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v012));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v112));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v212));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v022));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v122));
+  CPPUNIT_ASSERT(!Nowhere().isInside(v222));
+
+  CPPUNIT_ASSERT(Everywhere().isInside(v000));
+  CPPUNIT_ASSERT(Everywhere().isInside(v100));
+  CPPUNIT_ASSERT(Everywhere().isInside(v200));
+  CPPUNIT_ASSERT(Everywhere().isInside(v010));
+  CPPUNIT_ASSERT(Everywhere().isInside(v110));
+  CPPUNIT_ASSERT(Everywhere().isInside(v210));
+  CPPUNIT_ASSERT(Everywhere().isInside(v020));
+  CPPUNIT_ASSERT(Everywhere().isInside(v120));
+  CPPUNIT_ASSERT(Everywhere().isInside(v220));
+  CPPUNIT_ASSERT(Everywhere().isInside(v001));
+  CPPUNIT_ASSERT(Everywhere().isInside(v101));
+  CPPUNIT_ASSERT(Everywhere().isInside(v201));
+  CPPUNIT_ASSERT(Everywhere().isInside(v011));
+  CPPUNIT_ASSERT(Everywhere().isInside(v111));
+  CPPUNIT_ASSERT(Everywhere().isInside(v211));
+  CPPUNIT_ASSERT(Everywhere().isInside(v021));
+  CPPUNIT_ASSERT(Everywhere().isInside(v121));
+  CPPUNIT_ASSERT(Everywhere().isInside(v221));
+  CPPUNIT_ASSERT(Everywhere().isInside(v002));
+  CPPUNIT_ASSERT(Everywhere().isInside(v102));
+  CPPUNIT_ASSERT(Everywhere().isInside(v202));
+  CPPUNIT_ASSERT(Everywhere().isInside(v012));
+  CPPUNIT_ASSERT(Everywhere().isInside(v112));
+  CPPUNIT_ASSERT(Everywhere().isInside(v212));
+  CPPUNIT_ASSERT(Everywhere().isInside(v022));
+  CPPUNIT_ASSERT(Everywhere().isInside(v122));
+  CPPUNIT_ASSERT(Everywhere().isInside(v222));
+
+  Shape s1 = Sphere();
+
+  CPPUNIT_ASSERT(s1.isInside(v000));
+  CPPUNIT_ASSERT(s1.isInside(v100));
+  CPPUNIT_ASSERT(s1.isInside(v200));
+  CPPUNIT_ASSERT(s1.isInside(v010));
+  CPPUNIT_ASSERT(!s1.isInside(v110));
+  CPPUNIT_ASSERT(!s1.isInside(v210));
+  CPPUNIT_ASSERT(s1.isInside(v020));
+  CPPUNIT_ASSERT(!s1.isInside(v120));
+  CPPUNIT_ASSERT(!s1.isInside(v220));
+  CPPUNIT_ASSERT(s1.isInside(v001));
+  CPPUNIT_ASSERT(!s1.isInside(v101));
+  CPPUNIT_ASSERT(!s1.isInside(v201));
+  CPPUNIT_ASSERT(!s1.isInside(v011));
+  CPPUNIT_ASSERT(!s1.isInside(v111));
+  CPPUNIT_ASSERT(!s1.isInside(v211));
+  CPPUNIT_ASSERT(!s1.isInside(v021));
+  CPPUNIT_ASSERT(!s1.isInside(v121));
+  CPPUNIT_ASSERT(!s1.isInside(v221));
+  CPPUNIT_ASSERT(s1.isInside(v002));
+  CPPUNIT_ASSERT(!s1.isInside(v102));
+  CPPUNIT_ASSERT(!s1.isInside(v202));
+  CPPUNIT_ASSERT(!s1.isInside(v012));
+  CPPUNIT_ASSERT(!s1.isInside(v112));
+  CPPUNIT_ASSERT(!s1.isInside(v212));
+  CPPUNIT_ASSERT(!s1.isInside(v022));
+  CPPUNIT_ASSERT(!s1.isInside(v122));
+  CPPUNIT_ASSERT(!s1.isInside(v222));
+
+  Shape s2 = Cuboid();
+
+  CPPUNIT_ASSERT(s2.isInside(v000));
+  CPPUNIT_ASSERT(s2.isInside(v100));
+  CPPUNIT_ASSERT(!s2.isInside(v200));
+  CPPUNIT_ASSERT(s2.isInside(v010));
+  CPPUNIT_ASSERT(s2.isInside(v110));
+  CPPUNIT_ASSERT(!s2.isInside(v210));
+  CPPUNIT_ASSERT(!s2.isInside(v020));
+  CPPUNIT_ASSERT(!s2.isInside(v120));
+  CPPUNIT_ASSERT(!s2.isInside(v220));
+  CPPUNIT_ASSERT(s2.isInside(v001));
+  CPPUNIT_ASSERT(s2.isInside(v101));
+  CPPUNIT_ASSERT(!s2.isInside(v201));
+  CPPUNIT_ASSERT(s2.isInside(v011));
+  CPPUNIT_ASSERT(s2.isInside(v111));
+  CPPUNIT_ASSERT(!s2.isInside(v211));
+  CPPUNIT_ASSERT(!s2.isInside(v021));
+  CPPUNIT_ASSERT(!s2.isInside(v121));
+  CPPUNIT_ASSERT(!s2.isInside(v221));
+  CPPUNIT_ASSERT(!s2.isInside(v002));
+  CPPUNIT_ASSERT(!s2.isInside(v102));
+  CPPUNIT_ASSERT(!s2.isInside(v202));
+  CPPUNIT_ASSERT(!s2.isInside(v012));
+  CPPUNIT_ASSERT(!s2.isInside(v112));
+  CPPUNIT_ASSERT(!s2.isInside(v212));
+  CPPUNIT_ASSERT(!s2.isInside(v022));
+  CPPUNIT_ASSERT(!s2.isInside(v122));
+  CPPUNIT_ASSERT(!s2.isInside(v222));
+}
+
+void ShapeUnittest::surfaceTest(){
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v000));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v100));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v200));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v010));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v110));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v210));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v020));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v120));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v220));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v001));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v101));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v201));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v011));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v111));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v211));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v021));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v121));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v221));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v002));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v102));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v202));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v012));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v112));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v212));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v022));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v122));
+  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v222));
+
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v000));
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v100));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v200));
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v010));
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v110));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v210));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v020));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v120));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v220));
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v001));
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v101));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v201));
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v011));
+  CPPUNIT_ASSERT(Cuboid().isOnSurface(v111));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v211));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v021));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v121));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v221));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v002));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v102));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v202));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v012));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v112));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v212));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v022));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v122));
+  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v222));
+
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v000));
+  CPPUNIT_ASSERT(Sphere().isOnSurface(v100));
+  CPPUNIT_ASSERT(Sphere().isOnSurface(v200));
+  CPPUNIT_ASSERT(Sphere().isOnSurface(v010));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v110));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v210));
+  CPPUNIT_ASSERT(Sphere().isOnSurface(v020));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v120));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v220));
+  CPPUNIT_ASSERT(Sphere().isOnSurface(v001));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v101));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v201));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v011));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v111));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v211));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v021));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v121));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v221));
+  CPPUNIT_ASSERT(Sphere().isOnSurface(v002));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v102));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v202));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v012));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v112));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v212));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v022));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v122));
+  CPPUNIT_ASSERT(!Sphere().isOnSurface(v222));
+}
+
+void ShapeUnittest::assignmentTest(){
+  Shape s1 = Nowhere();
+  s1 = Everywhere();
+
+  CPPUNIT_ASSERT(s1.isInside(v000));
+  CPPUNIT_ASSERT(s1.isInside(v100));
+  CPPUNIT_ASSERT(s1.isInside(v200));
+  CPPUNIT_ASSERT(s1.isInside(v010));
+  CPPUNIT_ASSERT(s1.isInside(v110));
+  CPPUNIT_ASSERT(s1.isInside(v210));
+  CPPUNIT_ASSERT(s1.isInside(v020));
+  CPPUNIT_ASSERT(s1.isInside(v120));
+  CPPUNIT_ASSERT(s1.isInside(v220));
+  CPPUNIT_ASSERT(s1.isInside(v001));
+  CPPUNIT_ASSERT(s1.isInside(v101));
+  CPPUNIT_ASSERT(s1.isInside(v201));
+  CPPUNIT_ASSERT(s1.isInside(v011));
+  CPPUNIT_ASSERT(s1.isInside(v111));
+  CPPUNIT_ASSERT(s1.isInside(v211));
+  CPPUNIT_ASSERT(s1.isInside(v021));
+  CPPUNIT_ASSERT(s1.isInside(v121));
+  CPPUNIT_ASSERT(s1.isInside(v221));
+  CPPUNIT_ASSERT(s1.isInside(v002));
+  CPPUNIT_ASSERT(s1.isInside(v102));
+  CPPUNIT_ASSERT(s1.isInside(v202));
+  CPPUNIT_ASSERT(s1.isInside(v012));
+  CPPUNIT_ASSERT(s1.isInside(v112));
+  CPPUNIT_ASSERT(s1.isInside(v212));
+  CPPUNIT_ASSERT(s1.isInside(v022));
+  CPPUNIT_ASSERT(s1.isInside(v122));
+  CPPUNIT_ASSERT(s1.isInside(v222));
+
+  Shape s2 = Everywhere();
+  s2 = Nowhere();
+
+  CPPUNIT_ASSERT(!s2.isInside(v000));
+  CPPUNIT_ASSERT(!s2.isInside(v100));
+  CPPUNIT_ASSERT(!s2.isInside(v200));
+  CPPUNIT_ASSERT(!s2.isInside(v010));
+  CPPUNIT_ASSERT(!s2.isInside(v110));
+  CPPUNIT_ASSERT(!s2.isInside(v210));
+  CPPUNIT_ASSERT(!s2.isInside(v020));
+  CPPUNIT_ASSERT(!s2.isInside(v120));
+  CPPUNIT_ASSERT(!s2.isInside(v220));
+  CPPUNIT_ASSERT(!s2.isInside(v001));
+  CPPUNIT_ASSERT(!s2.isInside(v101));
+  CPPUNIT_ASSERT(!s2.isInside(v201));
+  CPPUNIT_ASSERT(!s2.isInside(v011));
+  CPPUNIT_ASSERT(!s2.isInside(v111));
+  CPPUNIT_ASSERT(!s2.isInside(v211));
+  CPPUNIT_ASSERT(!s2.isInside(v021));
+  CPPUNIT_ASSERT(!s2.isInside(v121));
+  CPPUNIT_ASSERT(!s2.isInside(v221));
+  CPPUNIT_ASSERT(!s2.isInside(v002));
+  CPPUNIT_ASSERT(!s2.isInside(v102));
+  CPPUNIT_ASSERT(!s2.isInside(v202));
+  CPPUNIT_ASSERT(!s2.isInside(v012));
+  CPPUNIT_ASSERT(!s2.isInside(v112));
+  CPPUNIT_ASSERT(!s2.isInside(v212));
+  CPPUNIT_ASSERT(!s2.isInside(v022));
+  CPPUNIT_ASSERT(!s2.isInside(v122));
+  CPPUNIT_ASSERT(!s2.isInside(v222));
+
+}
+
+void ShapeUnittest::operatorTest(){
+  {
+    Shape s1 = !Nowhere();
+    CPPUNIT_ASSERT(s1.isInside(v000));
+    CPPUNIT_ASSERT(s1.isInside(v100));
+    CPPUNIT_ASSERT(s1.isInside(v200));
+    CPPUNIT_ASSERT(s1.isInside(v010));
+    CPPUNIT_ASSERT(s1.isInside(v110));
+    CPPUNIT_ASSERT(s1.isInside(v210));
+    CPPUNIT_ASSERT(s1.isInside(v020));
+    CPPUNIT_ASSERT(s1.isInside(v120));
+    CPPUNIT_ASSERT(s1.isInside(v220));
+    CPPUNIT_ASSERT(s1.isInside(v001));
+    CPPUNIT_ASSERT(s1.isInside(v101));
+    CPPUNIT_ASSERT(s1.isInside(v201));
+    CPPUNIT_ASSERT(s1.isInside(v011));
+    CPPUNIT_ASSERT(s1.isInside(v111));
+    CPPUNIT_ASSERT(s1.isInside(v211));
+    CPPUNIT_ASSERT(s1.isInside(v021));
+    CPPUNIT_ASSERT(s1.isInside(v121));
+    CPPUNIT_ASSERT(s1.isInside(v221));
+    CPPUNIT_ASSERT(s1.isInside(v002));
+    CPPUNIT_ASSERT(s1.isInside(v102));
+    CPPUNIT_ASSERT(s1.isInside(v202));
+    CPPUNIT_ASSERT(s1.isInside(v012));
+    CPPUNIT_ASSERT(s1.isInside(v112));
+    CPPUNIT_ASSERT(s1.isInside(v212));
+    CPPUNIT_ASSERT(s1.isInside(v022));
+    CPPUNIT_ASSERT(s1.isInside(v122));
+    CPPUNIT_ASSERT(s1.isInside(v222));
+
+    Shape s2 = !Everywhere();
+    CPPUNIT_ASSERT(!s2.isInside(v000));
+    CPPUNIT_ASSERT(!s2.isInside(v100));
+    CPPUNIT_ASSERT(!s2.isInside(v200));
+    CPPUNIT_ASSERT(!s2.isInside(v010));
+    CPPUNIT_ASSERT(!s2.isInside(v110));
+    CPPUNIT_ASSERT(!s2.isInside(v210));
+    CPPUNIT_ASSERT(!s2.isInside(v020));
+    CPPUNIT_ASSERT(!s2.isInside(v120));
+    CPPUNIT_ASSERT(!s2.isInside(v220));
+    CPPUNIT_ASSERT(!s2.isInside(v001));
+    CPPUNIT_ASSERT(!s2.isInside(v101));
+    CPPUNIT_ASSERT(!s2.isInside(v201));
+    CPPUNIT_ASSERT(!s2.isInside(v011));
+    CPPUNIT_ASSERT(!s2.isInside(v111));
+    CPPUNIT_ASSERT(!s2.isInside(v211));
+    CPPUNIT_ASSERT(!s2.isInside(v021));
+    CPPUNIT_ASSERT(!s2.isInside(v121));
+    CPPUNIT_ASSERT(!s2.isInside(v221));
+    CPPUNIT_ASSERT(!s2.isInside(v002));
+    CPPUNIT_ASSERT(!s2.isInside(v102));
+    CPPUNIT_ASSERT(!s2.isInside(v202));
+    CPPUNIT_ASSERT(!s2.isInside(v012));
+    CPPUNIT_ASSERT(!s2.isInside(v112));
+    CPPUNIT_ASSERT(!s2.isInside(v212));
+    CPPUNIT_ASSERT(!s2.isInside(v022));
+    CPPUNIT_ASSERT(!s2.isInside(v122));
+    CPPUNIT_ASSERT(!s2.isInside(v222));
+  }
+
+  {
+    Shape s1 = Nowhere() || Everywhere();
+    CPPUNIT_ASSERT(s1.isInside(v000));
+    CPPUNIT_ASSERT(s1.isInside(v100));
+    CPPUNIT_ASSERT(s1.isInside(v200));
+    CPPUNIT_ASSERT(s1.isInside(v010));
+    CPPUNIT_ASSERT(s1.isInside(v110));
+    CPPUNIT_ASSERT(s1.isInside(v210));
+    CPPUNIT_ASSERT(s1.isInside(v020));
+    CPPUNIT_ASSERT(s1.isInside(v120));
+    CPPUNIT_ASSERT(s1.isInside(v220));
+    CPPUNIT_ASSERT(s1.isInside(v001));
+    CPPUNIT_ASSERT(s1.isInside(v101));
+    CPPUNIT_ASSERT(s1.isInside(v201));
+    CPPUNIT_ASSERT(s1.isInside(v011));
+    CPPUNIT_ASSERT(s1.isInside(v111));
+    CPPUNIT_ASSERT(s1.isInside(v211));
+    CPPUNIT_ASSERT(s1.isInside(v021));
+    CPPUNIT_ASSERT(s1.isInside(v121));
+    CPPUNIT_ASSERT(s1.isInside(v221));
+    CPPUNIT_ASSERT(s1.isInside(v002));
+    CPPUNIT_ASSERT(s1.isInside(v102));
+    CPPUNIT_ASSERT(s1.isInside(v202));
+    CPPUNIT_ASSERT(s1.isInside(v012));
+    CPPUNIT_ASSERT(s1.isInside(v112));
+    CPPUNIT_ASSERT(s1.isInside(v212));
+    CPPUNIT_ASSERT(s1.isInside(v022));
+    CPPUNIT_ASSERT(s1.isInside(v122));
+    CPPUNIT_ASSERT(s1.isInside(v222));
+
+    Shape s2 = Nowhere() && Everywhere();
+    CPPUNIT_ASSERT(!s2.isInside(v000));
+    CPPUNIT_ASSERT(!s2.isInside(v100));
+    CPPUNIT_ASSERT(!s2.isInside(v200));
+    CPPUNIT_ASSERT(!s2.isInside(v010));
+    CPPUNIT_ASSERT(!s2.isInside(v110));
+    CPPUNIT_ASSERT(!s2.isInside(v210));
+    CPPUNIT_ASSERT(!s2.isInside(v020));
+    CPPUNIT_ASSERT(!s2.isInside(v120));
+    CPPUNIT_ASSERT(!s2.isInside(v220));
+    CPPUNIT_ASSERT(!s2.isInside(v001));
+    CPPUNIT_ASSERT(!s2.isInside(v101));
+    CPPUNIT_ASSERT(!s2.isInside(v201));
+    CPPUNIT_ASSERT(!s2.isInside(v011));
+    CPPUNIT_ASSERT(!s2.isInside(v111));
+    CPPUNIT_ASSERT(!s2.isInside(v211));
+    CPPUNIT_ASSERT(!s2.isInside(v021));
+    CPPUNIT_ASSERT(!s2.isInside(v121));
+    CPPUNIT_ASSERT(!s2.isInside(v221));
+    CPPUNIT_ASSERT(!s2.isInside(v002));
+    CPPUNIT_ASSERT(!s2.isInside(v102));
+    CPPUNIT_ASSERT(!s2.isInside(v202));
+    CPPUNIT_ASSERT(!s2.isInside(v012));
+    CPPUNIT_ASSERT(!s2.isInside(v112));
+    CPPUNIT_ASSERT(!s2.isInside(v212));
+    CPPUNIT_ASSERT(!s2.isInside(v022));
+    CPPUNIT_ASSERT(!s2.isInside(v122));
+    CPPUNIT_ASSERT(!s2.isInside(v222));
+  }
+
+  {
+    Shape s1 = Everywhere() || Nowhere();
+    CPPUNIT_ASSERT(s1.isInside(v000));
+    CPPUNIT_ASSERT(s1.isInside(v100));
+    CPPUNIT_ASSERT(s1.isInside(v200));
+    CPPUNIT_ASSERT(s1.isInside(v010));
+    CPPUNIT_ASSERT(s1.isInside(v110));
+    CPPUNIT_ASSERT(s1.isInside(v210));
+    CPPUNIT_ASSERT(s1.isInside(v020));
+    CPPUNIT_ASSERT(s1.isInside(v120));
+    CPPUNIT_ASSERT(s1.isInside(v220));
+    CPPUNIT_ASSERT(s1.isInside(v001));
+    CPPUNIT_ASSERT(s1.isInside(v101));
+    CPPUNIT_ASSERT(s1.isInside(v201));
+    CPPUNIT_ASSERT(s1.isInside(v011));
+    CPPUNIT_ASSERT(s1.isInside(v111));
+    CPPUNIT_ASSERT(s1.isInside(v211));
+    CPPUNIT_ASSERT(s1.isInside(v021));
+    CPPUNIT_ASSERT(s1.isInside(v121));
+    CPPUNIT_ASSERT(s1.isInside(v221));
+    CPPUNIT_ASSERT(s1.isInside(v002));
+    CPPUNIT_ASSERT(s1.isInside(v102));
+    CPPUNIT_ASSERT(s1.isInside(v202));
+    CPPUNIT_ASSERT(s1.isInside(v012));
+    CPPUNIT_ASSERT(s1.isInside(v112));
+    CPPUNIT_ASSERT(s1.isInside(v212));
+    CPPUNIT_ASSERT(s1.isInside(v022));
+    CPPUNIT_ASSERT(s1.isInside(v122));
+    CPPUNIT_ASSERT(s1.isInside(v222));
+
+    Shape s2 = Everywhere() && Nowhere();
+    CPPUNIT_ASSERT(!s2.isInside(v000));
+    CPPUNIT_ASSERT(!s2.isInside(v100));
+    CPPUNIT_ASSERT(!s2.isInside(v200));
+    CPPUNIT_ASSERT(!s2.isInside(v010));
+    CPPUNIT_ASSERT(!s2.isInside(v110));
+    CPPUNIT_ASSERT(!s2.isInside(v210));
+    CPPUNIT_ASSERT(!s2.isInside(v020));
+    CPPUNIT_ASSERT(!s2.isInside(v120));
+    CPPUNIT_ASSERT(!s2.isInside(v220));
+    CPPUNIT_ASSERT(!s2.isInside(v001));
+    CPPUNIT_ASSERT(!s2.isInside(v101));
+    CPPUNIT_ASSERT(!s2.isInside(v201));
+    CPPUNIT_ASSERT(!s2.isInside(v011));
+    CPPUNIT_ASSERT(!s2.isInside(v111));
+    CPPUNIT_ASSERT(!s2.isInside(v211));
+    CPPUNIT_ASSERT(!s2.isInside(v021));
+    CPPUNIT_ASSERT(!s2.isInside(v121));
+    CPPUNIT_ASSERT(!s2.isInside(v221));
+    CPPUNIT_ASSERT(!s2.isInside(v002));
+    CPPUNIT_ASSERT(!s2.isInside(v102));
+    CPPUNIT_ASSERT(!s2.isInside(v202));
+    CPPUNIT_ASSERT(!s2.isInside(v012));
+    CPPUNIT_ASSERT(!s2.isInside(v112));
+    CPPUNIT_ASSERT(!s2.isInside(v212));
+    CPPUNIT_ASSERT(!s2.isInside(v022));
+    CPPUNIT_ASSERT(!s2.isInside(v122));
+    CPPUNIT_ASSERT(!s2.isInside(v222));
+  }
+
+  {
+    Shape s1 = Sphere() && Cuboid(); // Sphere in upper place
+
+    CPPUNIT_ASSERT(s1.isInside(v000));
+    CPPUNIT_ASSERT(s1.isInside(v100));
+    CPPUNIT_ASSERT(!s1.isInside(v200));
+    CPPUNIT_ASSERT(s1.isInside(v010));
+    CPPUNIT_ASSERT(!s1.isInside(v110));
+    CPPUNIT_ASSERT(!s1.isInside(v210));
+    CPPUNIT_ASSERT(!s1.isInside(v020));
+    CPPUNIT_ASSERT(!s1.isInside(v120));
+    CPPUNIT_ASSERT(!s1.isInside(v220));
+    CPPUNIT_ASSERT(s1.isInside(v001));
+    CPPUNIT_ASSERT(!s1.isInside(v101));
+    CPPUNIT_ASSERT(!s1.isInside(v201));
+    CPPUNIT_ASSERT(!s1.isInside(v011));
+    CPPUNIT_ASSERT(!s1.isInside(v111));
+    CPPUNIT_ASSERT(!s1.isInside(v211));
+    CPPUNIT_ASSERT(!s1.isInside(v021));
+    CPPUNIT_ASSERT(!s1.isInside(v121));
+    CPPUNIT_ASSERT(!s1.isInside(v221));
+    CPPUNIT_ASSERT(!s1.isInside(v002));
+    CPPUNIT_ASSERT(!s1.isInside(v102));
+    CPPUNIT_ASSERT(!s1.isInside(v202));
+    CPPUNIT_ASSERT(!s1.isInside(v012));
+    CPPUNIT_ASSERT(!s1.isInside(v112));
+    CPPUNIT_ASSERT(!s1.isInside(v212));
+    CPPUNIT_ASSERT(!s1.isInside(v022));
+    CPPUNIT_ASSERT(!s1.isInside(v122));
+    CPPUNIT_ASSERT(!s1.isInside(v222));
+
+    CPPUNIT_ASSERT(s1.isOnSurface(v000));
+    CPPUNIT_ASSERT(s1.isOnSurface(v100));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v200));
+    CPPUNIT_ASSERT(s1.isOnSurface(v010));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v110));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v210));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v020));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v120));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v220));
+    CPPUNIT_ASSERT(s1.isOnSurface(v001));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v101));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v201));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v011));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v111));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v211));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v021));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v121));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v221));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v002));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v102));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v202));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v012));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v112));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v212));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v022));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v122));
+    CPPUNIT_ASSERT(!s1.isOnSurface(v222));
+
+
+    Shape s2 = Sphere() || Cuboid(); // Should be same as Cuboid
+
+    CPPUNIT_ASSERT(s2.isInside(v000));
+    CPPUNIT_ASSERT(s2.isInside(v100));
+    CPPUNIT_ASSERT(s2.isInside(v200));
+    CPPUNIT_ASSERT(s2.isInside(v010));
+    CPPUNIT_ASSERT(s2.isInside(v110));
+    CPPUNIT_ASSERT(!s2.isInside(v210));
+    CPPUNIT_ASSERT(s2.isInside(v020));
+    CPPUNIT_ASSERT(!s2.isInside(v120));
+    CPPUNIT_ASSERT(!s2.isInside(v220));
+    CPPUNIT_ASSERT(s2.isInside(v001));
+    CPPUNIT_ASSERT(s2.isInside(v101));
+    CPPUNIT_ASSERT(!s2.isInside(v201));
+    CPPUNIT_ASSERT(s2.isInside(v011));
+    CPPUNIT_ASSERT(s2.isInside(v111));
+    CPPUNIT_ASSERT(!s2.isInside(v211));
+    CPPUNIT_ASSERT(!s2.isInside(v021));
+    CPPUNIT_ASSERT(!s2.isInside(v121));
+    CPPUNIT_ASSERT(!s2.isInside(v221));
+    CPPUNIT_ASSERT(s2.isInside(v002));
+    CPPUNIT_ASSERT(!s2.isInside(v102));
+    CPPUNIT_ASSERT(!s2.isInside(v202));
+    CPPUNIT_ASSERT(!s2.isInside(v012));
+    CPPUNIT_ASSERT(!s2.isInside(v112));
+    CPPUNIT_ASSERT(!s2.isInside(v212));
+    CPPUNIT_ASSERT(!s2.isInside(v022));
+    CPPUNIT_ASSERT(!s2.isInside(v122));
+    CPPUNIT_ASSERT(!s2.isInside(v222));
+
+    CPPUNIT_ASSERT(!s2.isOnSurface(v000));
+    CPPUNIT_ASSERT(s2.isOnSurface(v100));
+    CPPUNIT_ASSERT(s2.isOnSurface(v200));
+    CPPUNIT_ASSERT(s2.isOnSurface(v010));
+    CPPUNIT_ASSERT(s2.isOnSurface(v110));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v210));
+    CPPUNIT_ASSERT(s2.isOnSurface(v020));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v120));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v220));
+    CPPUNIT_ASSERT(s2.isOnSurface(v001));
+    CPPUNIT_ASSERT(s2.isOnSurface(v101));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v201));
+    CPPUNIT_ASSERT(s2.isOnSurface(v011));
+    CPPUNIT_ASSERT(s2.isOnSurface(v111));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v211));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v021));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v121));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v221));
+    CPPUNIT_ASSERT(s2.isOnSurface(v002));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v102));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v202));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v012));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v112));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v212));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v022));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v122));
+    CPPUNIT_ASSERT(!s2.isOnSurface(v222));
+  }
+
+}
+
+void ShapeUnittest::PointsOnSurfaceTest(){
+  Shape s = Sphere();
+  const size_t N = 200;
+  std::vector<Vector> PointsOnSurface = s.getHomogeneousPointsOnSurface(N);
+  for (std::vector<Vector>::const_iterator iter = PointsOnSurface.begin(); iter != PointsOnSurface.end(); ++iter) {
+    CPPUNIT_ASSERT(fabs(1. - (*iter).NormSquared()) < MYEPSILON);
+  }
+  CPPUNIT_ASSERT_EQUAL(N, PointsOnSurface.size());
+}
+
Index: src/Shapes/unittests/ShapeUnitTest.hpp
===================================================================
--- src/Shapes/unittests/ShapeUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/Shapes/unittests/ShapeUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,70 @@
+/*
+ * ShapeUnittest.hpp
+ *
+ *  Created on: Jun 18, 2010
+ *      Author: crueger
+ */
+
+#ifndef SHAPEUNITTEST_HPP_
+#define SHAPEUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class Shape;
+class Vector;
+
+#include "LinearAlgebra/Vector.hpp"
+
+class ShapeUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( ShapeUnittest) ;
+  CPPUNIT_TEST ( baseShapesTest );
+  CPPUNIT_TEST ( surfaceTest );
+  CPPUNIT_TEST ( assignmentTest );
+  CPPUNIT_TEST ( operatorTest );
+  CPPUNIT_TEST ( PointsOnSurfaceTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void baseShapesTest();
+  void surfaceTest();
+  void assignmentTest();
+  void operatorTest();
+  void PointsOnSurfaceTest();
+
+  // a lot of vectors.
+  // these define all the edges of a box around -1 +1 on each axis
+  // 0 is 0, 1 is 1 and 2 is -1
+  Vector v000;
+  Vector v100;
+  Vector v200;
+  Vector v010;
+  Vector v110;
+  Vector v210;
+  Vector v020;
+  Vector v120;
+  Vector v220;
+  Vector v001;
+  Vector v101;
+  Vector v201;
+  Vector v011;
+  Vector v111;
+  Vector v211;
+  Vector v021;
+  Vector v121;
+  Vector v221;
+  Vector v002;
+  Vector v102;
+  Vector v202;
+  Vector v012;
+  Vector v112;
+  Vector v212;
+  Vector v022;
+  Vector v122;
+  Vector v222;
+};
+
+#endif /* SHAPEUNITTEST_HPP_ */
Index: src/ThermoStatContainer.cpp
===================================================================
--- src/ThermoStatContainer.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/ThermoStatContainer.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -54,7 +54,12 @@
   ThermostatTraits<Thermostat> *WoodcockTrait = new ThermostatTraits<Woodcock>();
   availThermostats[WoodcockTrait->getName()] = WoodcockTrait;
-  for(traitsMap::iterator iter = availThermostats.begin();iter!=availThermostats.end();++iter){
-    cout << iter->first << endl;
-  }
+
+  // for debugging: list all thermostats
+//  cout << "List of known thermostats: ";
+//  for(traitsMap::iterator iter = availThermostats.begin();iter!=availThermostats.end();++iter){
+//    cout << iter->first << " ";
+//  }
+//  cout << endl;
+
   ASSERT(availThermostats.size()==6,"Not all implemented thermostats referenced!\nDid you check the names in the traits?");
   activeThermostat=new Berendsen();
Index: src/UIElements/CommandLineUI/CommandLineParser.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineParser.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/UIElements/CommandLineUI/CommandLineParser.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -97,17 +97,17 @@
       const OptionTrait* const currentOption = OptionRegistry::getInstance().getOptionByName(optioniter->first);
       // add the option
-      std::cout << "Registering Option "
-          << currentOption->getName()
-          << " with type '" << currentOption->getTypeName() << "' "
-          << " with description '" << currentOption->getDescription() << "' ";
-      if (currentOption->hasShortForm())
-        std::cout << ", with short form " << currentOption->getShortForm();
-      else
-        std::cout << ", with no short form ";
-      if (currentOption->hasDefaultValue())
-        std::cout << ", with default value " << currentOption->getDefaultValue();
-      else
-        std::cout << ", with no default value ";
-      std::cout << std::endl;
+//      std::cout << "Registering Option "
+//          << currentOption->getName()
+//          << " with type '" << currentOption->getTypeName() << "' "
+//          << " with description '" << currentOption->getDescription() << "' ";
+//      if (currentOption->hasShortForm())
+//        std::cout << ", with short form " << currentOption->getShortForm();
+//      else
+//        std::cout << ", with no short form ";
+//      if (currentOption->hasDefaultValue())
+//        std::cout << ", with default value " << currentOption->getDefaultValue();
+//      else
+//        std::cout << ", with no default value ";
+//      std::cout << std::endl;
 
       AddOptionToParser(currentOption, (CmdParserLookup["options"]));
@@ -116,18 +116,18 @@
     if (!ActionAlreadyAdded_flag) {
       // add the action
-      std::cout << "Registering Action "
-          << currentAction->Traits.getName()
-          << " in menu " << currentAction->Traits.getMenuName()
-          << " with type '" << currentAction->Traits.getTypeName() << "' "
-          << " with description '" << currentAction->Traits.getDescription() << "' ";
-      if (currentAction->Traits.hasShortForm())
-        std::cout << ", with short form " << currentAction->Traits.getShortForm();
-      else
-        std::cout << ", with no short form ";
-      if (currentAction->Traits.hasDefaultValue())
-        std::cout << ", with default value " << currentAction->Traits.getDefaultValue();
-      else
-        std::cout << ", with no default value ";
-      std::cout  << std::endl;
+//      std::cout << "Registering Action "
+//          << currentAction->Traits.getName()
+//          << " in menu " << currentAction->Traits.getMenuName()
+//          << " with type '" << currentAction->Traits.getTypeName() << "' "
+//          << " with description '" << currentAction->Traits.getDescription() << "' ";
+//      if (currentAction->Traits.hasShortForm())
+//        std::cout << ", with short form " << currentAction->Traits.getShortForm();
+//      else
+//        std::cout << ", with no short form ";
+//      if (currentAction->Traits.hasDefaultValue())
+//        std::cout << ", with default value " << currentAction->Traits.getDefaultValue();
+//      else
+//        std::cout << ", with no default value ";
+//      std::cout  << std::endl;
 
       ASSERT(CmdParserLookup.find(currentAction->Traits.getMenuName()) != CmdParserLookup.end(),
@@ -156,5 +156,5 @@
   ASSERT(currentOption != NULL, "CommandLineParser::AddOptionToParser() - currentOption is NULL!");
   // add other options
-  std::cout << "Adding Action " << currentOption->getName() << " with type " << currentOption->getType()->name() << " and KeyandShortform " << currentOption->getKeyAndShortForm() << " to CommandLineParser." << std::endl;
+  //std::cout << "Adding Action " << currentOption->getName() << " with type " << currentOption->getType()->name() << " and KeyandShortform " << currentOption->getKeyAndShortForm() << " to CommandLineParser." << std::endl;
   switch(TypeToEnums.getEnumforType(currentOption->getType())) {
     default:
@@ -369,12 +369,13 @@
 {
   std::map <std::string, std::string> ShortFormToActionMap = getShortFormToActionMap();
+  DoLog(0) && (Log() << Verbose(0) << "Scanning command line arguments and recognizing Actions." << std::endl);
   // go through all arguments
   for (int i=1;i<argc;i++) {
-    (std::cout << Verbose(1) << "Checking on " << argv[i] << std::endl);
+    DoLog(2) && (Log() << Verbose(2) << "Checking on " << argv[i] << std::endl);
     // check whether they
     if (argv[i][0] == '-') { // .. begin with -
-      (cout << Verbose(1) << "Possible argument: " << argv[i] << endl);
+      DoLog(2) && (Log() << Verbose(2) << "Possible argument: " << argv[i] << endl);
       if (argv[i][1] == '-') { // .. or --
-        (cout << Verbose(1) << "Putting " << argv[i] << " into the sequence." << endl);
+        DoLog(1) && (Log() << Verbose(1) << "Putting " << argv[i] << " into the sequence." << endl);
         SequenceOfActions.push_back(&(argv[i][2]));
         //  .. and check that next letter is not numeric, if so insert
@@ -382,5 +383,5 @@
         std::map <std::string, std::string>::iterator iter = ShortFormToActionMap.find(&(argv[i][1]));
         if (iter != ShortFormToActionMap.end()) {
-          (cout << Verbose(1) << "Putting " << iter->second << " for " << iter->first << " into the sequence." << endl);
+          DoLog(1) && (Log() << Verbose(1) << "Putting " << iter->second << " for " << iter->first << " into the sequence." << endl);
           SequenceOfActions.push_back(iter->second);
         }
@@ -404,5 +405,5 @@
  * \return map from Action's ShortForm to token.
  */
-std::map <std::string, std::string> CommandLineParser::getShortFormToActionMap()
+std::map <std::string, std::string> CommandLineParser::getShortFormToActionMap() const
 {
   std::map <std::string, std::string> result;
Index: src/UIElements/CommandLineUI/CommandLineParser.hpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineParser.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/UIElements/CommandLineUI/CommandLineParser.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -143,5 +143,5 @@
 
   // creates a map from short forms to action tokens needed to parse command line
-  std::map <std::string, std::string> getShortFormToActionMap();
+  std::map <std::string, std::string> getShortFormToActionMap() const;
 
   // lookup list from "configmenus" to the ones of CommandLineParser
Index: src/UIElements/CommandLineUI/CommandLineWindow.cpp
===================================================================
--- src/UIElements/CommandLineUI/CommandLineWindow.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/UIElements/CommandLineUI/CommandLineWindow.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -25,4 +25,7 @@
 #include "CommandLineUI/CommandLineStatusIndicator.hpp"
 
+#include "Helpers/Log.hpp"
+#include "Helpers/Verbose.hpp"
+
 #include "Actions/Action.hpp"
 #include "Actions/ActionRegistry.hpp"
@@ -50,11 +53,15 @@
 
   // go through all possible actions
+  DoLog(0) && (Log() << Verbose(0) << "Calling Actions ... " << std::endl);
   for (std::list<std::string>::iterator CommandRunner = CommandLineParser::getInstance().SequenceOfActions.begin(); CommandRunner != CommandLineParser::getInstance().SequenceOfActions.end(); ++CommandRunner) {
-    cout << "Checking presence of " << *CommandRunner << ": ";
     if (ActionRegistry::getInstance().isActionPresentByName(*CommandRunner)) {
-      cout << "calling " << *CommandRunner << endl;
+      DoLog(1) && (Log() << Verbose(1)
+          << "Checking presence of " << *CommandRunner << ": "
+          << "calling " << *CommandRunner << endl);
       ActionRegistry::getInstance().getActionByName(*CommandRunner)->call();
     } else {
-      cout << "absent." << endl;
+      DoLog(1) && (Log() << Verbose(1)
+          << "Checking presence of " << *CommandRunner << ": "
+          << "absent." << endl);
     }
   }
Index: src/UIElements/CommandLineUI/TypeEnumContainer.cpp
===================================================================
--- src/UIElements/CommandLineUI/TypeEnumContainer.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/UIElements/CommandLineUI/TypeEnumContainer.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -64,5 +64,6 @@
   TypeEnumMap[&typeid(std::vector<const element *>)] = ListOfElementsType;
 
-  ListAllKnownTypes();
+  // for debugging: list all stored types
+  //ListAllKnownTypes();
 };
 
@@ -83,7 +84,4 @@
     std::cout << " Known type is " << (iter->first)->name() << " or enum " << iter->second << std::endl;
   }
-  std::cout << "BoxVector type is " << typeid(BoxVector).name() << std::endl;
-  std::cout << "Vector type is " << typeid(Vector).name() << std::endl;
-  std::cout << "VectorValue type is " << typeid(VectorValue).name() << std::endl;
 }
 
@@ -94,5 +92,5 @@
 enum TypeEnumContainer::EnumOfTypes TypeEnumContainer::getEnumforType(const std::type_info *_type)
 {
-  std::cout << "Looking for type " << _type->name() << std::endl;
+  //std::cout << "Looking for type " << _type->name() << std::endl;
   ASSERT(TypeEnumMap.find(_type) != TypeEnumMap.end(),
       "CommandLineParser::getEnumforType() - cannot find the type as enum!.");
Index: src/UIElements/Menu/Menu.cpp
===================================================================
--- src/UIElements/Menu/Menu.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/UIElements/Menu/Menu.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -76,8 +76,8 @@
         const std::string &TopName = iter->second.first;
         const int &MenuPosition = iter->second.second;
-        std::cout << "MenuName is " << MenuName
-            << ", TopName is " << TopName
-            << " and Position is " << MenuPosition
-            << std::endl;
+//        std::cout << "MenuName is " << MenuName
+//            << ", TopName is " << TopName
+//            << " and Position is " << MenuPosition
+//            << std::endl;
 
         // does it belong to us?
@@ -125,5 +125,5 @@
 void Menu::addSeparator()
 {
-  std::cout << "Creating separator at position " << TopPosition << std::endl;
+//  std::cout << "Creating separator at position " << TopPosition << std::endl;
   ASSERT( LastItem != SeparatorItem,
       "Menu::populate() - adding another separator after a separator!");
@@ -135,6 +135,6 @@
 void Menu::addSubmenu(const std::string &MenuName, const int MenuPosition)
 {
-  std::cout << "Creating top-level menu " << MenuName
-      << " at position " << TopPosition << std::endl;
+//  std::cout << "Creating top-level menu " << MenuName
+//      << " at position " << TopPosition << std::endl;
   ASSERT (!isPresent(MenuName),
       "Menu::addSubmenu() - trying to add menu "+MenuName+" with already present token!");
Index: src/UIElements/Menu/MenuDescription.cpp
===================================================================
--- src/UIElements/Menu/MenuDescription.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/UIElements/Menu/MenuDescription.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -89,5 +89,5 @@
 MenuDescription::~MenuDescription()
 {
-  std::cout << "MenuDescription: clearing maps ... " << std::endl;
+  //std::cout << "MenuDescription: clearing maps ... " << std::endl;
   for (IterableMap::iterator iter = MenuPositionMap->begin(); !MenuPositionMap->empty(); iter = MenuPositionMap->begin())
     MenuPositionMap->erase(iter);
Index: src/UIElements/Menu/Qt4/QtMenu.hpp
===================================================================
--- src/UIElements/Menu/Qt4/QtMenu.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/UIElements/Menu/Qt4/QtMenu.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -72,5 +72,5 @@
         CharRunner != ActionName.end();
         ++CharRunner) {
-      std::cout << "Current char is " << *CharRunner << std::endl;
+//      std::cout << "Current char is " << *CharRunner << std::endl;
       if (!Inserted) {
         Inserter = ShortcutMap.insert(
@@ -78,5 +78,5 @@
             );
         if (Inserter.second) {
-          std::cout << "Accelerator is " << *CharRunner << std::endl;
+//          std::cout << "Accelerator is " << *CharRunner << std::endl;
           newname += '&';
           Inserted = true;
Index: src/UIElements/Menu/unittests/Makefile.am
===================================================================
--- src/UIElements/Menu/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/UIElements/Menu/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,29 @@
+# PLEASE adhere to the alphabetical ordering in this Makefile!
+# Also indentation by a single tab
+
+INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/UIElements
+
+AM_LDFLAGS = $(CPPUNIT_LIBS) -ldl
+AM_CXXFLAGS = $(CPPUNIT_CFLAGS)
+AM_CPPFLAGS = ${BOOST_CPPFLAGS}
+
+TESTS = \
+  MenuDescriptionUnitTest
+
+
+check_PROGRAMS = $(TESTS) 
+noinst_PROGRAMS = $(TESTS)
+
+BOOST_LIB = $(BOOST_LDFLAGS) $(BOOST_MPL_LIB) $(BOOST_PROGRAM_OPTIONS_LIB) $(BOOST_FILESYSTEM_LIB) $(BOOST_SYSTEM_LIB) $(BOOST_THREAD_LIB)
+MENULIBS = \
+	../../../Helpers/libMolecuilderHelpers-@MOLECUILDER_API_VERSION@.la \
+	$(BOOST_LIB)
+
+
+MenuDescriptionUnitTest_SOURCES =  $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	MenuDescriptionUnitTest.cpp \
+	MenuDescriptionUnitTest.hpp \
+	../MenuDescription.cpp
+MenuDescriptionUnitTest_LDADD = $(MENULIBS)
+
+#AUTOMAKE_OPTIONS = parallel-tests
Index: src/UIElements/Menu/unittests/MenuDescriptionUnitTest.cpp
===================================================================
--- src/UIElements/Menu/unittests/MenuDescriptionUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/UIElements/Menu/unittests/MenuDescriptionUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,71 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * MenuDescriptionUnitTest.cpp
+ *
+ *  Created on: Nov 25, 2009
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "MenuDescriptionUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( MenuDescriptionTest );
+
+
+void MenuDescriptionTest::setUp()
+{
+};
+
+
+void MenuDescriptionTest::tearDown()
+{
+};
+
+/** UnitTest for consistency.
+ * we check that we have the same keys in each of MenuSet, MenuDescription and MenuNameMap.
+ */
+void MenuDescriptionTest::ConsistencyCheck()
+{
+  // from MenuSet
+  for(MenuDescription::const_iterator iter = md.MenuPositionMap->begin(); iter != md.MenuPositionMap->end(); ++iter) {
+    const std::string &MenuName = iter->first;
+    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDewscriptionsMap", md.MenuDescriptionsMap->find(MenuName) != md.MenuDescriptionsMap->end());
+    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap->find(MenuName) != md.MenuNameMap->end());
+  }
+
+  // from MenuDescriptionsMap
+  for(std::map<std::string const, std::string const>::const_iterator iter = md.MenuDescriptionsMap->begin(); iter != md.MenuDescriptionsMap->end(); ++iter) {
+    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap->find(iter->first) != md.MenuPositionMap->end());
+    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap->find(iter->first) != md.MenuNameMap->end());
+  }
+
+  // from MenuNameMap
+  for(std::map<std::string const, std::string const>::const_iterator iter = md.MenuNameMap->begin(); iter != md.MenuNameMap->end(); ++iter) {
+    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDescriptionsMap", md.MenuDescriptionsMap->find(iter->first) != md.MenuDescriptionsMap->end());
+    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap->find(iter->first) != md.MenuPositionMap->end());
+  }
+
+};
Index: src/UIElements/Menu/unittests/MenuDescriptionUnitTest.hpp
===================================================================
--- src/UIElements/Menu/unittests/MenuDescriptionUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/UIElements/Menu/unittests/MenuDescriptionUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+/*
+ * MenuDescriptionUnitTest.cpp.hpp
+ *
+ *  Created on: Nov 25, 2009
+ *      Author: heber
+ */
+
+#ifndef MENUDESCRIPTORUNITTEST_HPP_
+#define MENUDESCRIPTORUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "UIElements/Menu/MenuDescription.hpp"
+
+/********************************************** Test classes **************************************/
+
+class MenuDescriptionTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( MenuDescriptionTest) ;
+    CPPUNIT_TEST ( ConsistencyCheck );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void ConsistencyCheck();
+
+private:
+      MenuDescription md;
+};
+
+#endif /* MENUDESCRIPTORUNITTEST_HPP_ */
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/builder.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -73,173 +73,17 @@
 #endif
 
-#include "Helpers/MemDebug.hpp"
-
-#include "bondgraph.hpp"
-#include "config.hpp"
-#include "Helpers/Log.hpp"
-#include "molecule.hpp"
-#include "periodentafel.hpp"
-#include "tesselationhelpers.hpp"
-#include "UIElements/UIFactory.hpp"
-#include "UIElements/Menu/MenuDescription.hpp"
-#include "UIElements/TextUI/TextUIFactory.hpp"
-#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
-#include "UIElements/CommandLineUI/CommandLineParser.hpp"
-#ifdef USE_GUI_QT
-#include "UIElements/Qt4/QtUIFactory.hpp"
-#endif
-#include "UIElements/MainWindow.hpp"
-#include "UIElements/Dialog.hpp"
-//#include "Menu/ActionMenuItem.hpp"
-#include "Helpers/Verbose.hpp"
-#include "World.hpp"
-
-#include "Actions/ActionRegistry.hpp"
-#include "Actions/ActionHistory.hpp"
-
-#include "Parser/ChangeTracker.hpp"
-#include "Parser/FormatParserStorage.hpp"
-
-#include "UIElements/UIFactory.hpp"
-#include "UIElements/TextUI/TextUIFactory.hpp"
-#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
-#include "UIElements/MainWindow.hpp"
-#include "UIElements/Dialog.hpp"
-
-#include "version.h"
-
+#include "builder_init.hpp"
 
 /********************************************** Main routine **************************************/
 
-/** In this function all dynamicly allocated member variables to static/global
- * variables are added to the ignore list of Memory/MemDebug.
- *
- * Use this to prevent their listing in the Memory::getState() at the end of the
- * program. Check with valgrind that truely no memory leak occurs!
- */
-void AddStaticEntitiestoIgnoreList()
-{
-  // zeroVec and unitVec are global variables (on the stack) but vectorContent
-  // within is situated on the heap and has to be ignored
-  Memory::ignore(zeroVec.get());
-  Memory::ignore(unitVec[0].get());
-  Memory::ignore(unitVec[1].get());
-  Memory::ignore(unitVec[2].get());
-}
-
-/** Cleans all singleton instances in an orderly fashion.
- * C++ does not guarantee any specific sequence of removal of single instances
- * which have static/global variables. Some singletons depend on others hence we
- * acertain a specific ordering here, which is is used via the atexit() hook.
- */
-void cleanUp(){
-  FormatParserStorage::purgeInstance();
-  ChangeTracker::purgeInstance();
-  World::purgeInstance();
-  MenuDescription::purgeInstance();
-  UIFactory::purgeInstance();
-  ValueStorage::purgeInstance();
-  CommandLineParser::purgeInstance();
-  ActionRegistry::purgeInstance();
-  OptionRegistry::purgeInstance();
-  ActionHistory::purgeInstance();
-  // we have to remove these two static as otherwise their boost::shared_ptrs are still present
-  Action::removeStaticStateEntities();
-  // put some static variables' dynamic contents on the Memory::ignore map to avoid their
-  // admonishing lateron
-  AddStaticEntitiestoIgnoreList();
-  logger::purgeInstance();
-  errorLogger::purgeInstance();
-#ifdef LOG_OBSERVER
-  cout << observerLog().getLog();
-#endif
-  Memory::getState();
-}
-
-void dumpMemory(){
-  ofstream ost("molecuilder.memdump");
-  Memory::dumpMemory(ost);
-}
-
 int main(int argc, char **argv)
 {
-  // while we are non interactive, we want to abort from asserts
-  ASSERT_DO(Assert::Abort);
-  ASSERT_HOOK(dumpMemory);
-  string line;
-  char **Arguments = NULL;
-  int ArgcSize = 0;
-  int ExitFlag = 0;
-  bool ArgumentsCopied = false;
-  std::string BondGraphFileName("\n");
+  initGeneral();
 
-  // print version check and copyright notice
-  cout << MOLECUILDERVERSION << endl;
-  cout << "MoleCuilder comes with ABSOLUTELY NO WARRANTY; for details type" << endl;
-  cout << "`molecuilder --warranty'." << endl;
-  cout << "`MoleCuilder - to create and alter molecular systems." << endl;
-  cout << "Copyright (C) 2010  University Bonn. All rights reserved." << endl;
+  initUI(argc,argv);
 
-  setVerbosity(0);
-  // need to init the history before any action is created
-  ActionHistory::init();
+  doUI();
 
-  // from this moment on, we need to be sure to deeinitialize in the correct order
-  // this is handled by the cleanup function
-  atexit(cleanUp);
-
-  // Parse command line options and if present create respective UI
-  {
-    // construct bond graph
-    if (World::getInstance().getConfig()->BG == NULL) {
-      World::getInstance().getConfig()->BG = new BondGraph(World::getInstance().getConfig()->GetIsAngstroem());
-      if (World::getInstance().getConfig()->BG->LoadBondLengthTable(BondGraphFileName)) {
-        DoLog(0) && (Log() << Verbose(0) << "Bond length table loaded successfully." << endl);
-      } else {
-        DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl);
-      }
-    }
-    // handle remaining arguments by CommandLineParser
-    if (argc>1) {
-      CommandLineParser::getInstance().InitializeCommandArguments();
-      CommandLineParser::getInstance().Run(argc,argv);
-      DoLog(0) && (Log() << Verbose(0) << "Setting UI to CommandLine." << endl);
-      UIFactory::registerFactory(new CommandLineUIFactory::description());
-      UIFactory::makeUserInterface("CommandLine");
-    } else {
-      // In the interactive mode, we can leave the user the choice in case of error
-      ASSERT_DO(Assert::Ask);
-      #ifdef USE_GUI_QT
-        DoLog(0) && (Log() << Verbose(0) << "Setting UI to Qt4." << endl);
-        UIFactory::registerFactory(new QtUIFactory::description());
-        UIFactory::makeUserInterface("Qt4");
-      #else
-        DoLog(0) && (Log() << Verbose(0) << "Setting UI to Text." << endl);
-        cout << MOLECUILDERVERSION << endl;
-        UIFactory::registerFactory(new TextUIFactory::description());
-        UIFactory::makeUserInterface("Text");
-      #endif
-    }
-  }
-
-  {
-    MainWindow *mainWindow = UIFactory::getInstance().makeMainWindow();
-    mainWindow->display();
-    delete mainWindow;
-  }
-
-  FormatParserStorage::getInstance().SaveAll();
-  ChangeTracker::getInstance().saveStatus();
-
-  // free the new argv
-  if (ArgumentsCopied) {
-    for (int i=0; i<ArgcSize;i++)
-      delete[](Arguments[i]);
-    delete[](Arguments);
-  }
-  //delete[](ConfigFileName);
-
-  ExitFlag = World::getInstance().getExitFlag();
-  return (ExitFlag == 1 ? 0 : ExitFlag);
+  return saveAll();
 }
 
Index: src/builder_init.cpp
===================================================================
--- src/builder_init.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/builder_init.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,216 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * builder_init.cpp
+ *
+ *  Created on: Dec 15, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "Helpers/MemDebug.hpp"
+
+#include "bondgraph.hpp"
+#include "config.hpp"
+#include "Helpers/Log.hpp"
+#include "molecule.hpp"
+#include "periodentafel.hpp"
+#include "tesselationhelpers.hpp"
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/Menu/MenuDescription.hpp"
+#include "UIElements/TextUI/TextUIFactory.hpp"
+#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
+#include "UIElements/CommandLineUI/CommandLineParser.hpp"
+#ifdef USE_GUI_QT
+#include "UIElements/Qt4/QtUIFactory.hpp"
+#endif
+#include "UIElements/MainWindow.hpp"
+#include "UIElements/Dialog.hpp"
+//#include "Menu/ActionMenuItem.hpp"
+#include "Helpers/Verbose.hpp"
+#include "World.hpp"
+
+#include "Actions/ActionRegistry.hpp"
+#include "Actions/ActionHistory.hpp"
+
+#include "Parser/ChangeTracker.hpp"
+#include "Parser/FormatParserStorage.hpp"
+
+#include "UIElements/UIFactory.hpp"
+#include "UIElements/TextUI/TextUIFactory.hpp"
+#include "UIElements/CommandLineUI/CommandLineUIFactory.hpp"
+#include "UIElements/MainWindow.hpp"
+#include "UIElements/Dialog.hpp"
+
+#include "version.h"
+
+#include "builder_init.hpp"
+
+/** Print some initial information output the program.
+ *
+ */
+void ProgramHeader()
+{
+  // print version check and copyright notice
+  cout << MOLECUILDERVERSION << endl;
+  cout << "MoleCuilder comes with ABSOLUTELY NO WARRANTY; for details type" << endl;
+  cout << "`molecuilder --warranty'." << endl;
+  cout << "`MoleCuilder - to create and alter molecular systems." << endl;
+  cout << "Copyright (C) 2010  University Bonn. All rights reserved." << endl;
+  cout << endl;
+}
+
+/** General stuff to intialize before UI.
+ *
+ */
+void initGeneral()
+{
+  // while we are non interactive, we want to abort from asserts
+  ASSERT_DO(Assert::Abort);
+  ASSERT_HOOK(dumpMemory);
+
+  ProgramHeader();
+
+  setVerbosity(1);
+  // need to init the history before any action is created
+  ActionHistory::init();
+
+  // from this moment on, we need to be sure to deeinitialize in the correct order
+  // this is handled by the cleanup function
+  atexit(cleanUp);
+}
+
+/** Initialize specific UIFactory.
+ *
+ * @param argc argument count
+ * @param argv argument array
+ */
+void initUI(int argc, char **argv)
+{
+  std::string BondGraphFileName("\n");
+  // Parse command line options and if present create respective UI
+  // construct bond graph
+  if (World::getInstance().getConfig()->BG == NULL) {
+    World::getInstance().getConfig()->BG = new BondGraph(World::getInstance().getConfig()->GetIsAngstroem());
+    if (boost::filesystem::exists(BondGraphFileName)) {
+      if (World::getInstance().getConfig()->BG->LoadBondLengthTable(BondGraphFileName)) {
+        DoLog(0) && (Log() << Verbose(0) << "Bond length table loaded successfully." << endl);
+      } else {
+        DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl);
+      }
+    }
+  }
+  // handle remaining arguments by CommandLineParser
+  if (argc>1) {
+    DoLog(0) && (Log() << Verbose(0) << "Setting UI to CommandLine." << endl);
+    CommandLineParser::getInstance().InitializeCommandArguments();
+    CommandLineParser::getInstance().Run(argc,argv);
+    UIFactory::registerFactory(new CommandLineUIFactory::description());
+    UIFactory::makeUserInterface("CommandLine");
+  } else {
+    // In the interactive mode, we can leave the user the choice in case of error
+    ASSERT_DO(Assert::Ask);
+    #ifdef USE_GUI_QT
+      DoLog(0) && (Log() << Verbose(0) << "Setting UI to Qt4." << endl);
+      UIFactory::registerFactory(new QtUIFactory::description());
+      UIFactory::makeUserInterface("Qt4");
+    #else
+      DoLog(0) && (Log() << Verbose(0) << "Setting UI to Text." << endl);
+      cout << MOLECUILDERVERSION << endl;
+      UIFactory::registerFactory(new TextUIFactory::description());
+      UIFactory::makeUserInterface("Text");
+    #endif
+  }
+}
+
+/** Create MainWindow and displays.
+ * I.e. here all the Actions are parsed and done.
+ */
+void doUI()
+{
+  MainWindow *mainWindow = UIFactory::getInstance().makeMainWindow();
+  mainWindow->display();
+  delete mainWindow;
+}
+
+
+/** In this function all dynamicly allocated member variables to static/global
+ * variables are added to the ignore list of Memory/MemDebug.
+ *
+ * Use this to prevent their listing in the Memory::getState() at the end of the
+ * program. Check with valgrind that truely no memory leak occurs!
+ */
+void AddStaticEntitiestoIgnoreList()
+{
+  // zeroVec and unitVec are global variables (on the stack) but vectorContent
+  // within is situated on the heap and has to be ignored
+  Memory::ignore(zeroVec.get());
+  Memory::ignore(unitVec[0].get());
+  Memory::ignore(unitVec[1].get());
+  Memory::ignore(unitVec[2].get());
+}
+
+/** Cleans all singleton instances in an orderly fashion.
+ * C++ does not guarantee any specific sequence of removal of single instances
+ * which have static/global variables. Some singletons depend on others hence we
+ * acertain a specific ordering here, which is is used via the atexit() hook.
+ */
+void cleanUp()
+{
+  FormatParserStorage::purgeInstance();
+  ChangeTracker::purgeInstance();
+  World::purgeInstance();
+  MenuDescription::purgeInstance();
+  UIFactory::purgeInstance();
+  ValueStorage::purgeInstance();
+  CommandLineParser::purgeInstance();
+  ActionRegistry::purgeInstance();
+  OptionRegistry::purgeInstance();
+  ActionHistory::purgeInstance();
+  // we have to remove these two static as otherwise their boost::shared_ptrs are still present
+  Action::removeStaticStateEntities();
+  // put some static variables' dynamic contents on the Memory::ignore map to avoid their
+  // admonishing lateron
+  AddStaticEntitiestoIgnoreList();
+  logger::purgeInstance();
+  errorLogger::purgeInstance();
+#ifdef LOG_OBSERVER
+  cout << observerLog().getLog();
+#endif
+  Memory::getState();
+}
+
+/** Dump current memory chunks.
+ *
+ */
+void dumpMemory()
+{
+  ofstream ost("molecuilder.memdump");
+  Memory::dumpMemory(ost);
+}
+
+/** Save the current World to output files and exit.
+ *
+ * @return retrieved from World::getExitFlag()
+ */
+int saveAll()
+{
+  int test[500000];
+  for (size_t i=0;i<500000;++i) {
+    test[i] = (int)i;
+  }
+  FormatParserStorage::getInstance().SaveAll();
+  ChangeTracker::getInstance().saveStatus();
+
+  int ExitFlag = World::getInstance().getExitFlag();
+  return (ExitFlag == 1 ? 0 : ExitFlag);
+}
Index: src/builder_init.hpp
===================================================================
--- src/builder_init.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/builder_init.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,22 @@
+/*
+ * builder_init.hpp
+ *
+ *  Created on: Dec 15, 2010
+ *      Author: heber
+ */
+
+#ifndef BUILDER_INIT_HPP_
+#define BUILDER_INIT_HPP_
+
+void ProgramHeader();
+void initGeneral();
+void initUI(int argc, char **argv);
+void doUI();
+
+void AddStaticEntitiestoIgnoreList();
+void cleanUp();
+void dumpMemory();
+
+int saveAll();
+
+#endif /* BUILDER_INIT_HPP_ */
Index: src/molecule_dynamics.cpp
===================================================================
--- src/molecule_dynamics.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/molecule_dynamics.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -484,5 +484,4 @@
            atoms.end(),
            boost::bind(&atom::EvaluateConstrainedForce,_1,startstep,endstep,PermutationMap,Force));
-  //ActOnAllAtoms( &atom::EvaluateConstrainedForce, startstep, endstep, PermutationMap, Force );
   DoLog(1) && (Log() << Verbose(1) << "done." << endl);
 };
@@ -617,5 +616,4 @@
     // and perform Verlet integration for each atom with position, velocity and force vector
     // check size of vectors
-    //ActOnAllAtoms( &atom::ResizeTrajectory, MDSteps+10 );
     for_each(atoms.begin(),
              atoms.end(),
Index: src/periodentafel.cpp
===================================================================
--- src/periodentafel.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/periodentafel.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -307,5 +307,5 @@
     //cout << "First header: " << header1tmp << endl;
     //cout << "Second header: " << header2tmp << endl;
-    DoLog(0) && (Log() << Verbose(0) <<  "Parsed elements:");
+//    DoLog(0) && (Log() << Verbose(0) <<  "Parsed elements:");
     while (!input.eof()) {
       element *neues = new element;
@@ -332,5 +332,5 @@
       if ((neues->getNumber() > 0) && (neues->getNumber() < MAX_ELEMENTS)) {
         parsedElements[neues->Z] = neues;
-        DoLog(0) && (Log() << Verbose(0) << " " << *neues);
+//        DoLog(0) && (Log() << Verbose(0) << " " << *neues);
       } else {
         DoeLog(2) && (eLog() << Verbose(2) << "Detected empty line or invalid element in elements db, discarding." << endl);
@@ -345,5 +345,5 @@
       }
     }
-    DoLog(0) && (Log() << Verbose(0) << endl);
+//    DoLog(0) && (Log() << Verbose(0) << endl);
   } else {
     DoeLog(1) && (eLog() << Verbose(1) << "Could not open the database." << endl);
Index: src/periodentafel.hpp
===================================================================
--- src/periodentafel.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/periodentafel.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -13,5 +13,5 @@
 #include <string>
 
-#include "unittests/periodentafelTest.hpp"
+#include "unittests/PeriodentafelUnitTest.hpp"
 #include "Helpers/defs.hpp"
 #include "types.hpp"
Index: src/tesselationhelpers.cpp
===================================================================
--- src/tesselationhelpers.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/tesselationhelpers.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -29,5 +29,5 @@
 #include "Helpers/Info.hpp"
 #include "linkedcell.hpp"
-#include "LinearAlgebra/linearsystemofequations.hpp"
+#include "LinearAlgebra/LinearSystemOfEquations.hpp"
 #include "Helpers/Log.hpp"
 #include "tesselation.hpp"
Index: c/test/ActOnAlltest.hpp
===================================================================
--- src/test/ActOnAlltest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,110 +1,0 @@
-/*
- * ActOnAlltest.hpp
- *
- *  Created on: 04.10.2009
- *      Author: FrederikHeber
- */
-
-#ifndef ACTONALLTEST_HPP_
-#define ACTONALLTEST_HPP_
-
-using namespace std;
-
-#include <list>
-#include "../LinearAlgebra/Vector.hpp"
-
-#define ListOfVectors list<Vector *>
-
-class VectorList
-{
-public:
-  VectorList();
-  VectorList(VectorList &ref);
-  ~VectorList();
-
-  void AddVector(Vector *v);
-  void EmptyList();
-
-  template <typename klasse, typename res, typename T> void ActOnAll( res (klasse::*f)(T), T t );
-  template <typename klasse, typename res, typename T> void ActOnAll( res (klasse::*f)(T&), T &t );
-  template <typename klasse, typename res, typename T, typename U> void ActOnAll( res (klasse::*f)(T, U), T t, U u );
-  template <typename klasse, typename res, typename T, typename U, typename V> void ActOnAll( res (klasse::*f)(T, U, V), T t, U u, V v);
-
-  bool operator == (VectorList &rhs);
-  VectorList& operator = (VectorList &ref);
-
-//private:
-  ListOfVectors Vectors;
-};
-
-
-VectorList::VectorList() { };
-VectorList::VectorList(VectorList &ref)
-{
-  ref.EmptyList();
-  for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) {
-    ref.Vectors.push_back(new Vector (**Runner));
-  }
-};
-
-VectorList & VectorList::operator = (VectorList &ref)
-{
-  EmptyList();
-  for (ListOfVectors::iterator Runner = ref.Vectors.begin(); Runner != ref.Vectors.end(); Runner++) {
-    Vectors.push_back(new Vector (**Runner));
-  }
-  return *this;
-};
-
-bool VectorList::operator == (VectorList &rhs)
-{
-  bool status = true;
-  ListOfVectors::iterator lRunner = Vectors.begin();
-  ListOfVectors::iterator rRunner = rhs.Vectors.begin();
-  for (;(lRunner != Vectors.end()) && (rRunner != rhs.Vectors.end()); lRunner++, rRunner++) {
-    //Log() << Verbose(0) << **lRunner << " == " << **rRunner << endl;
-    status = status && (**lRunner == **rRunner);
-  }
-  return status;
-};
-
-VectorList::~VectorList() { };
-
-template <typename klasse, typename res, typename T> void VectorList::ActOnAll( res (klasse::*f)(T), T t )
-{
-  for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++)
-    ((*Runner)->*f)(t);
-};
-
-template <typename klasse, typename res, typename T> void VectorList::ActOnAll( res (klasse::*f)(T&), T &t )
-{
-  for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++)
-    ((*Runner)->*f)(t);
-};
-
-template <typename klasse, typename res, typename T, typename U> void VectorList::ActOnAll( res (klasse::*f)(T, U), T t, U u )
-{
-  for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++)
-    ((*Runner)->*f)(t, u);
-};
-
-template <typename klasse, typename res, typename T, typename U, typename V> void VectorList::ActOnAll( res (klasse::*f)(T, U, V), T t, U u, V v)
-{
-  for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++)
-    ((*Runner)->*f)(t, u, v);
-};
-
-void VectorList::AddVector(Vector *v)
-{
-  Vectors.push_back(v);
-};
-
-void VectorList::EmptyList()
-{
-  for (ListOfVectors::iterator Runner = Vectors.begin(); Runner != Vectors.end(); Runner++) {
-    delete(*Runner);
-  }
-  Vectors.clear();
-}
-
-#endif /* ACTONALLTEST_HPP_ */
Index: c/unittests/ActOnAllUnitTest.cpp
===================================================================
--- src/unittests/ActOnAllUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,134 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ActOnAllUnitTest.cpp
- *
- *  Created on: 04.10.2009
- *      Author: FrederikHeber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "../test/ActOnAlltest.hpp"
-#include "ActOnAllUnitTest.hpp"
-#include "LinearAlgebra/Vector.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ActOnAllTest );
-
-
-void ActOnAllTest::setUp()
-{
-  Vector *temp = NULL;
-  // fill list with vectors
-  temp = new Vector(1,0,0);
-  VL.AddVector(temp);
-  temp = new Vector(0,1,0);
-  VL.AddVector(temp);
-  temp = new Vector(0,0,1);
-  VL.AddVector(temp);
-  Ref = VL;
-};
-
-
-void ActOnAllTest::tearDown()
-{
-  VL.EmptyList();
-  // Ref was copy constructed, hence has to be cleaned, too!
-  Ref.EmptyList();
-};
-
-/** UnitTest for VectorList::ActOnAll() and Vector::AddVector(), Vector::SubtractVector(),
- */
-void ActOnAllTest::AddSubtractTest()
-{
-  const Vector test(1.,0.,0.);
-
-  // adding, subtracting
-  VL.ActOnAll( &Vector::AddVector, test );
-  CPPUNIT_ASSERT_EQUAL( VL == Ref , false );
-  VL.ActOnAll( &Vector::SubtractVector, test );
-  CPPUNIT_ASSERT_EQUAL( VL == Ref , true );
-};
-
-/** UnitTest for VectorList::ActOnAll()
- */
-void ActOnAllTest::ScaleTest()
-{
-  double factor=2.;
-  double inverse=1./2.;
-
-  // scaling by value
-  VL.ActOnAll( (void (Vector::*)(const double)) &Vector::Scale, factor );
-  CPPUNIT_ASSERT_EQUAL( VL == Ref , false );
-
-  VL.ActOnAll( (void (Vector::*)(const double)) &Vector::Scale, inverse );
-  CPPUNIT_ASSERT_EQUAL( VL == Ref , true );
-
-  // scaling by three values
-  double *factors = new double[NDIM];
-  double *inverses = new double[NDIM];
-  for (int i=0;i<NDIM;++i) {
-    factors[i] = 2.;
-    inverses[i] = 1./factors[i];
-  }
-  VL.ActOnAll<Vector,void,const double*>(&Vector::ScaleAll, factors );
-  CPPUNIT_ASSERT_EQUAL( VL == Ref , false );
-
-  VL.ActOnAll<Vector,void,const double*>(&Vector::ScaleAll, inverses );
-  CPPUNIT_ASSERT_EQUAL( VL == Ref , true );
-  delete[](factors);
-  delete[](inverses);
-};
-
-#if 0
-
-// Unitttest deactivated for now...
-// Reasons:
-//    Vector::MakeNormalVector has been removed and is now part of Plane class
-//    VectorList::ActOnAll is in the test directory and seems to be used only for unittests
-//    MakeNormal never depended on the input Vector except in the case of linear dependence (i.e. failure)
-//
-// TODO: Rethink what exactely is being tested at this point and introduce a new unittest for the
-//       tested behaviour. Most likely this should result in a thourough unittest of the plane class
-
-/** UnitTest for VectorList::ActOnAll() and Vector::MakeNormalVector()
- */
-void ActOnAllTest::NormalizeTest()
-{
-  const Vector xaxis(1.,0.,0.);
-  const Vector yaxis(0.,1.,0.);
-
-  // normalize with respect to x and y axis
-  bool (Vector::*f)(const Vector *, const Vector *) = &Vector::MakeNormalVector;
-  VL.ActOnAll( f, &xaxis, &yaxis );
-  CPPUNIT_ASSERT_EQUAL( VL == Ref , false );
-
-  // check that x and y components are zero
-  for (ListOfVectors::iterator Runner = VL.Vectors.begin(); Runner != VL.Vectors.end(); Runner++) {
-    CPPUNIT_ASSERT_EQUAL( (*Runner)->at(0) , 0. );
-    CPPUNIT_ASSERT_EQUAL( (*Runner)->at(1) , 0. );
-  }
-};
-
-#endif
Index: c/unittests/ActOnAllUnitTest.hpp
===================================================================
--- src/unittests/ActOnAllUnitTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * ActOnAllUnitTest.hpp
- *
- *  Created on: 04.10.2009
- *      Author: FrederikHeber
- */
-
-#ifndef ACTONALLUNITTEST_HPP_
-#define ACTONALLUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "../test/ActOnAlltest.hpp"
-
-/********************************************** Test classes **************************************/
-
-class ActOnAllTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( ActOnAllTest) ;
-    CPPUNIT_TEST ( AddSubtractTest );
-    CPPUNIT_TEST ( ScaleTest );
-#if 0
-    // test deactivated. See .cpp for reasons and workarounds
-    CPPUNIT_TEST ( NormalizeTest );
-#endif
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void AddSubtractTest();
-      void ScaleTest();
-      void NormalizeTest();
-
-private:
-      class VectorList VL;
-      class VectorList Ref;
-};
-
-
-#endif /* ACTONALLUNITTEST_HPP_ */
Index: c/unittests/ActionSequenceTest.cpp
===================================================================
--- src/unittests/ActionSequenceTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,285 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ActionSequenzTest.cpp
- *
- *  Created on: Dec 17, 2009
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "unittests/ActionSequenceTest.hpp"
-#include "Actions/Action.hpp"
-#include "Actions/ActionSequence.hpp"
-#include "Actions/MakroAction.hpp"
-#include "Actions/ActionHistory.hpp"
-#include "Actions/ActionRegistry.hpp"
-
-#include "DummyUI.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ActionSequenceTest );
-
-/* some neccessary stubs for tests */
-class canUndoActionStub : public Action
-{
-public:
-  canUndoActionStub(const ActionTraits &_trait):
-    Action(_trait,false){}
-  virtual ~canUndoActionStub(){}
-
-  virtual void getParametersfromValueStorage(){
-  }
-
-  virtual Dialog* fillDialog(Dialog *dialog){
-    ASSERT(dialog,"No Dialog given when filling action dialog");
-    return dialog;
-  }
-
-  virtual Action::state_ptr performCall(){
-    return Action::success;
-  }
-  virtual Action::state_ptr performUndo(Action::state_ptr){
-    return Action::success;
-  }
-  virtual Action::state_ptr performRedo(Action::state_ptr){
-    return Action::success;
-  }
-  virtual bool canUndo(){
-    return true;
-  }
-  virtual bool shouldUndo(){
-    return true;
-  }
-};
-
-class cannotUndoActionStub : public Action
-{
-public:
-  cannotUndoActionStub(const ActionTraits &_trait) :
-    Action(_trait,false){}
-  virtual ~cannotUndoActionStub(){}
-
-  virtual void getParametersfromValueStorage(){
-  }
-
-  virtual Dialog* fillDialog(Dialog *dialog){
-    ASSERT(dialog,"No Dialog given when filling action dialog");
-    return dialog;
-  }
-
-  virtual Action::state_ptr performCall(){
-    return Action::success;
-  }
-  virtual Action::state_ptr performUndo(Action::state_ptr){
-    return Action::success;
-  }
-  virtual Action::state_ptr performRedo(Action::state_ptr){
-    return Action::success;
-  }
-  virtual bool canUndo(){
-    return false;
-  }
-  virtual bool shouldUndo(){
-   return true;
-  }
-};
-
-class wasCalledActionStub : public Action
-{
-public:
-  wasCalledActionStub(const ActionTraits &_trait) :
-      Action(_trait,false),
-      called(false)
-  {}
-  virtual ~wasCalledActionStub(){}
-
-  virtual void getParametersfromValueStorage(){
-  }
-
-  virtual Dialog* fillDialog(Dialog *dialog){
-    return dialog;
-  }
-  virtual Action::state_ptr performCall(){
-    called = true;
-    return Action::success;
-  }
-  virtual Action::state_ptr performUndo(Action::state_ptr){
-    called = false;
-    return Action::success;
-  }
-  virtual Action::state_ptr performRedo(Action::state_ptr){
-    called = true;
-    return Action::success;
-  }
-  virtual bool canUndo(){
-    return true;
-  }
-  virtual bool shouldUndo(){
-    return true;
-  }
-  bool wasCalled(){
-    return called;
-  }
-private:
-  bool called;
-};
-
-void ActionSequenceTest::setUp(){
-  hasDescriptor = false;
-  ActionHistory::init();
-  // TODO: find a way to really reset the factory to a clean state in tear-down
-  if(!hasDescriptor){
-    UIFactory::registerFactory(new DummyUIFactory::description());
-    hasDescriptor = true;
-  }
-  UIFactory::makeUserInterface("Dummy");
-  // create some necessary stubs used in this test
-  ActionTraits canUndoTrait("canUndoActionStub");
-  ActionTraits cannotUndoTrait("cannotUndoActionStub");
-  positive1 = new canUndoActionStub(canUndoTrait);
-  positive2 = new canUndoActionStub(canUndoTrait);
-  negative1 = new cannotUndoActionStub(cannotUndoTrait);
-  negative2 = new cannotUndoActionStub(cannotUndoTrait);
-
-  ActionTraits wasCalledTrait("wasCalledActionStub");
-  shouldCall1 = new wasCalledActionStub(wasCalledTrait);
-  shouldCall2 = new wasCalledActionStub(wasCalledTrait);
-  shouldNotCall1 = new wasCalledActionStub(wasCalledTrait);
-  shouldNotCall2 = new wasCalledActionStub(wasCalledTrait);
-
-}
-
-void ActionSequenceTest::tearDown(){
-  delete positive1;
-  delete positive2;
-  delete negative1;
-  delete negative2;
-
-  delete shouldCall1;
-  delete shouldCall2;
-  delete shouldNotCall1;
-  delete shouldNotCall2;
-
-  ActionHistory::purgeInstance();
-  ActionRegistry::purgeInstance();
-  {
-    UIFactory::purgeInstance();
-    hasDescriptor = false;
-  }
-}
-
-void ActionSequenceTest::canUndoTest(){
-  // first section:
-  {
-    // test some combinations
-    {
-      ActionSequence *sequence = new ActionSequence();
-      sequence->addAction(positive1);
-      sequence->addAction(positive2);
-      CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
-      delete sequence;
-    }
-    {
-      ActionSequence *sequence = new ActionSequence();
-      sequence->addAction(positive1);
-      sequence->addAction(negative2);
-      CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
-      delete sequence;
-    }
-    {
-      ActionSequence *sequence = new ActionSequence();
-      sequence->addAction(negative1);
-      sequence->addAction(positive2);
-      CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
-      delete sequence;
-    }
-    {
-      ActionSequence *sequence = new ActionSequence();
-      sequence->addAction(negative1);
-      sequence->addAction(negative2);
-      CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
-      delete sequence;
-    }
-  }
-
-  // second section:
-  {
-    // empty sequence can be undone
-    ActionSequence *sequence = new ActionSequence();
-    CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
-    // if only a positive action is contained it can be undone
-    sequence->addAction(positive1);
-    CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
-    // the single negative action should block the process
-    sequence->addAction(negative1);
-    CPPUNIT_ASSERT_EQUAL( false, sequence->canUndo() );
-    // after removing the negative action all is well again
-    sequence->removeLastAction();
-    CPPUNIT_ASSERT_EQUAL( true, sequence->canUndo() );
-    delete sequence;
-  }
-}
-
-void ActionSequenceTest::doesCallTest(){
-  ActionSequence *sequence = new ActionSequence();
-  sequence->addAction(shouldCall1);
-  sequence->addAction(shouldCall2);
-  sequence->addAction(shouldNotCall1);
-  sequence->addAction(shouldNotCall2);
-  sequence->removeLastAction();
-  sequence->removeLastAction();
-
-  sequence->callAll();
-
-  CPPUNIT_ASSERT_EQUAL(true,shouldCall1->wasCalled());
-  CPPUNIT_ASSERT_EQUAL(true,shouldCall2->wasCalled());
-  CPPUNIT_ASSERT_EQUAL(false,shouldNotCall1->wasCalled());
-  CPPUNIT_ASSERT_EQUAL(false,shouldNotCall2->wasCalled());
-
-  delete sequence;
-}
-
-void ActionSequenceTest::doesUndoTest(){
-  ActionSequence *sequence = new ActionSequence();
-  ActionTraits wasCalledTrait("wasCalledActionStub");
-  wasCalledActionStub *wasCalled1 = new wasCalledActionStub(wasCalledTrait);
-  wasCalledActionStub *wasCalled2 = new wasCalledActionStub(wasCalledTrait);
-  sequence->addAction(wasCalled1);
-  sequence->addAction(wasCalled2);
-
-  ActionTraits MakroTrait("Test MakroAction");
-  MakroAction act(MakroTrait,sequence,false);
-
-  act.call();
-
-  CPPUNIT_ASSERT_EQUAL(true,wasCalled1->wasCalled());
-  CPPUNIT_ASSERT_EQUAL(true,wasCalled2->wasCalled());
-
-  ActionHistory::getInstance().undoLast();
-
-  CPPUNIT_ASSERT_EQUAL(false,wasCalled1->wasCalled());
-  CPPUNIT_ASSERT_EQUAL(false,wasCalled2->wasCalled());
-
-}
-
-
Index: c/unittests/ActionSequenceTest.hpp
===================================================================
--- src/unittests/ActionSequenceTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * ActionSequenzTest.hpp
- *
- *  Created on: Dec 17, 2009
- *      Author: crueger
- */
-
-#ifndef ACTIONSEQUENZTEST_HPP_
-#define ACTIONSEQUENZTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class Action;
-class wasCalledActionStub;
-
-class ActionSequenceTest :  public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( ActionSequenceTest) ;
-  CPPUNIT_TEST ( canUndoTest );
-  CPPUNIT_TEST ( doesCallTest );
-  CPPUNIT_TEST ( doesUndoTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void canUndoTest();
-  void doesCallTest();
-  void doesUndoTest();
-
-private:
-  Action *positive1;
-  Action *positive2;
-  Action *negative1;
-  Action *negative2;
-  wasCalledActionStub* shouldCall1;
-  wasCalledActionStub* shouldCall2;
-  wasCalledActionStub* shouldNotCall1;
-  wasCalledActionStub* shouldNotCall2;
-  bool hasDescriptor;
-};
-
-#endif /* ACTIONSEQUENZTEST_HPP_ */
Index: src/unittests/AnalysisBondsUnitTest.cpp
===================================================================
--- src/unittests/AnalysisBondsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/AnalysisBondsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,175 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * AnalysisBondsUnitTest.cpp
+ *
+ *  Created on: Nov 7, 2009
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <iostream>
+#include <stdio.h>
+#include <cstring>
+
+#include "analysis_bonds.hpp"
+#include "atom.hpp"
+#include "bond.hpp"
+#include "bondgraph.hpp"
+#include "element.hpp"
+#include "molecule.hpp"
+#include "periodentafel.hpp"
+#include "LinearAlgebra/Vector.hpp"
+#include "World.hpp"
+
+#include "AnalysisBondsUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( AnalysisBondsTest );
+
+
+void AnalysisBondsTest::setUp()
+{
+  atom *Walker = NULL;
+
+  // get elements
+  hydrogen = World::getInstance().getPeriode()->FindElement(1);
+  carbon = World::getInstance().getPeriode()->FindElement(6);
+  CPPUNIT_ASSERT(hydrogen != NULL && "could not find element hydrogen");
+  CPPUNIT_ASSERT(carbon != NULL && "could not find element carbon");
+
+  // construct molecule (tetraeder of hydrogens)
+  TestMolecule = World::getInstance().createMolecule();
+  CPPUNIT_ASSERT(TestMolecule != NULL && "could not create molecule");
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(1.5, 0., 1.5 ));
+  TestMolecule->AddAtom(Walker);
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(0., 1.5, 1.5 ));
+  TestMolecule->AddAtom(Walker);
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(1.5, 1.5, 0. ));
+  TestMolecule->AddAtom(Walker);
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(0., 0., 0. ));
+  TestMolecule->AddAtom(Walker);
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(carbon);
+  Walker->setPosition(Vector(0.5, 0.5, 0.5 ));
+  TestMolecule->AddAtom(Walker);
+
+  // check that TestMolecule was correctly constructed
+  CPPUNIT_ASSERT_EQUAL( TestMolecule->getAtomCount(), 5 );
+
+  // create a small file with table
+  filename = new string("test.dat");
+  CPPUNIT_ASSERT(filename != NULL && "could not create string");
+  ofstream test(filename->c_str());
+  test << ".\tH\tHe\tLi\tBe\tB\tC\n";
+  test << "H\t1.\t1.\t1.\t1.\t1.\t1.2\n";
+  test << "He\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "Li\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "Be\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "B\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "C\t1.2\t1.\t1.\t1.\t1.\t1.5\n";
+  test.close();
+  BG = new BondGraph(true);
+  CPPUNIT_ASSERT(BG != NULL && "could not create BondGraph");
+
+  CPPUNIT_ASSERT_EQUAL( true , BG->LoadBondLengthTable(*filename) );
+  CPPUNIT_ASSERT_EQUAL( 1., BG->GetBondLength(0,0) );
+  CPPUNIT_ASSERT_EQUAL( 1.2, BG->GetBondLength(0,5) );
+  CPPUNIT_ASSERT_EQUAL( 1.5, BG->GetBondLength(5,5) );
+
+  BG->ConstructBondGraph(TestMolecule);
+};
+
+
+void AnalysisBondsTest::tearDown()
+{
+  // remove the file
+  remove(filename->c_str());
+  delete(filename);
+  delete(BG);
+
+  // remove molecule
+  World::getInstance().destroyMolecule(TestMolecule);
+  // note that all the atoms are cleaned by TestMolecule
+  World::purgeInstance();
+};
+
+/** UnitTest for GetMaxMinMeanBondCount().
+ */
+void AnalysisBondsTest::GetMaxMinMeanBondCountTest()
+{
+  double Min = 20.; // check that initialization resets these arbitrary values
+  double Mean = 200.;
+  double Max = 1e-6;
+  GetMaxMinMeanBondCount(TestMolecule, Min, Mean, Max);
+  CPPUNIT_ASSERT_EQUAL( 1., Min );
+  CPPUNIT_ASSERT_EQUAL( 1.6, Mean );
+  CPPUNIT_ASSERT_EQUAL( 4., Max );
+
+};
+
+/** UnitTest for MinMaxBondDistanceBetweenElements().
+ */
+void AnalysisBondsTest::MinMeanMaxBondDistanceBetweenElementsTest()
+{
+  double Min = 20.; // check that initialization resets these arbitrary values
+  double Mean = 2e+6;
+  double Max = 1e-6;
+  double Min2 = 20.;
+  double Mean2 = 2e+6;
+  double Max2 = 1e-6;
+  const double maxbondlength = sqrt(1.*1. + 1.*1. + .5*.5);
+  const double minbondlength = sqrt(.5*.5 + .5*.5 + .5*.5);
+  const double meanbondlength = (minbondlength+3.*maxbondlength)/4.;
+  // check bond lengths C-H
+  MinMeanMaxBondDistanceBetweenElements(TestMolecule, hydrogen, carbon, Min, Mean, Max);
+  CPPUNIT_ASSERT_EQUAL( minbondlength , Min );
+  CPPUNIT_ASSERT_EQUAL( meanbondlength , Mean );
+  CPPUNIT_ASSERT_EQUAL( maxbondlength , Max );
+
+  // check that elements are symmetric, i.e. C-H == H-C
+  MinMeanMaxBondDistanceBetweenElements(TestMolecule, carbon, hydrogen, Min2, Mean2, Max2);
+  CPPUNIT_ASSERT_EQUAL( Min , Min2 );
+  CPPUNIT_ASSERT_EQUAL( Mean , Mean2 );
+  CPPUNIT_ASSERT_EQUAL( Max , Max2 );
+
+  // check no bond case (no bonds H-H in system!)
+  MinMeanMaxBondDistanceBetweenElements(TestMolecule, hydrogen, hydrogen, Min, Mean, Max);
+  CPPUNIT_ASSERT_EQUAL( 0. , Min );
+  CPPUNIT_ASSERT_EQUAL( 0. , Mean );
+  CPPUNIT_ASSERT_EQUAL( 0. , Max );
+};
Index: src/unittests/AnalysisBondsUnitTest.hpp
===================================================================
--- src/unittests/AnalysisBondsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/AnalysisBondsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,43 @@
+/*
+ * AnalysisBondsUnitTest.hpp
+ *
+ *  Created on: Nov 7, 2009
+ *      Author: heber
+ */
+
+#ifndef ANALYSISBONDSUNITTEST_HPP_
+#define ANALYSISBONDSUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class BondGraph;
+class element;
+class molecule;
+class periodentafel;
+
+/********************************************** Test classes **************************************/
+
+class AnalysisBondsTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( AnalysisBondsTest) ;
+    CPPUNIT_TEST ( GetMaxMinMeanBondCountTest );
+    CPPUNIT_TEST ( MinMeanMaxBondDistanceBetweenElementsTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void GetMaxMinMeanBondCountTest();
+      void MinMeanMaxBondDistanceBetweenElementsTest();
+
+private:
+
+      molecule *TestMolecule;
+      const element *hydrogen;
+      const element *carbon;
+
+      BondGraph *BG;
+      string *filename;
+};
+
+#endif /* ANALYSISBONDSUNITTEST_HPP_ */
Index: src/unittests/AnalysisCorrelationToPointUnitTest.cpp
===================================================================
--- src/unittests/AnalysisCorrelationToPointUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/unittests/AnalysisCorrelationToPointUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -27,5 +27,4 @@
 
 #include "analysis_correlation.hpp"
-#include "AnalysisCorrelationToPointUnitTest.hpp"
 
 #include "Descriptors/MoleculeDescriptor.hpp"
@@ -37,4 +36,6 @@
 #include "periodentafel.hpp"
 #include "World.hpp"
+
+#include "AnalysisCorrelationToPointUnitTest.hpp"
 
 #ifdef HAVE_TESTRUNNER
Index: src/unittests/AnalysisCorrelationToSurfaceUnitTest.cpp
===================================================================
--- src/unittests/AnalysisCorrelationToSurfaceUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/unittests/AnalysisCorrelationToSurfaceUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -27,6 +27,4 @@
 
 #include "analysis_correlation.hpp"
-#include "AnalysisCorrelationToSurfaceUnitTest.hpp"
-
 #include "Descriptors/MoleculeDescriptor.hpp"
 
@@ -41,5 +39,5 @@
 #include "Helpers/Assert.hpp"
 
-#include "Helpers/Assert.hpp"
+#include "AnalysisCorrelationToSurfaceUnitTest.hpp"
 
 #ifdef HAVE_TESTRUNNER
Index: src/unittests/AnalysisPairCorrelationUnitTest.cpp
===================================================================
--- src/unittests/AnalysisPairCorrelationUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/unittests/AnalysisPairCorrelationUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -27,6 +27,4 @@
 
 #include "analysis_correlation.hpp"
-#include "AnalysisPairCorrelationUnitTest.hpp"
-
 #include "Descriptors/MoleculeDescriptor.hpp"
 
@@ -40,4 +38,6 @@
 #include "tesselation.hpp"
 #include "World.hpp"
+
+#include "AnalysisPairCorrelationUnitTest.hpp"
 
 #ifdef HAVE_TESTRUNNER
Index: c/unittests/AtomDescriptorTest.cpp
===================================================================
--- src/unittests/AtomDescriptorTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,169 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * DescriptorUnittest.cpp
- *
- *  Created on: Feb 9, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "AtomDescriptorTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <iostream>
-
-#include <Descriptors/AtomDescriptor.hpp>
-#include <Descriptors/AtomIdDescriptor.hpp>
-
-#include "World.hpp"
-#include "atom.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( AtomDescriptorTest );
-
-// set up and tear down
-void AtomDescriptorTest::setUp(){
-  World::getInstance();
-  for(int i=0;i<ATOM_COUNT;++i){
-    atoms[i]= World::getInstance().createAtom();
-    atomIds[i]= atoms[i]->getId();
-  }
-}
-
-void AtomDescriptorTest::tearDown(){
-  World::purgeInstance();
-}
-
-// some helper functions
-static bool hasAllAtoms(std::vector<atom*> atoms,atomId_t ids[ATOM_COUNT], std::set<atomId_t> excluded = std::set<atomId_t>()){
-  for(int i=0;i<ATOM_COUNT;++i){
-    atomId_t id = ids[i];
-    if(!excluded.count(id)){
-      std::vector<atom*>::iterator iter;
-      bool res=false;
-      for(iter=atoms.begin();iter!=atoms.end();++iter){
-        res |= (*iter)->getId() == id;
-      }
-      if(!res) {
-        cout << "Atom " << id << " missing in returned list" << endl;
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
-static bool hasNoDuplicateAtoms(std::vector<atom*> atoms){
-  std::set<atomId_t> found;
-  std::vector<atom*>::iterator iter;
-  for(iter=atoms.begin();iter!=atoms.end();++iter){
-    int id = (*iter)->getId();
-    if(found.count(id))
-      return false;
-    found.insert(id);
-  }
-  return true;
-}
-
-
-void AtomDescriptorTest::AtomBaseSetsTest(){
-  std::vector<atom*> allAtoms = World::getInstance().getAllAtoms(AllAtoms());
-  CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(allAtoms,atomIds));
-  CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(allAtoms));
-
-  std::vector<atom*> noAtoms = World::getInstance().getAllAtoms(NoAtoms());
-  CPPUNIT_ASSERT_EQUAL( true , noAtoms.empty());
-}
-void AtomDescriptorTest::AtomIdTest(){
-  // test Atoms from boundaries and middle of the set
-  atom* testAtom;
-  testAtom = World::getInstance().getAtom(AtomById(atomIds[0]));
-  CPPUNIT_ASSERT(testAtom);
-  CPPUNIT_ASSERT_EQUAL( atomIds[0], testAtom->getId());
-  testAtom = World::getInstance().getAtom(AtomById(atomIds[ATOM_COUNT/2]));
-  CPPUNIT_ASSERT(testAtom);
-  CPPUNIT_ASSERT_EQUAL( atomIds[ATOM_COUNT/2], testAtom->getId());
-  testAtom = World::getInstance().getAtom(AtomById(atomIds[ATOM_COUNT-1]));
-  CPPUNIT_ASSERT(testAtom);
-  CPPUNIT_ASSERT_EQUAL( atomIds[ATOM_COUNT-1], testAtom->getId());
-
-  // find some ID that has not been created
-  atomId_t outsideId=0;
-  bool res = false;
-  for(outsideId=0;!res;++outsideId) {
-    res = true;
-    for(int i = 0; i < ATOM_COUNT; ++i){
-      res &= atomIds[i]!=outsideId;
-    }
-  }
-  // test from outside of set
-  testAtom = World::getInstance().getAtom(AtomById(outsideId));
-  CPPUNIT_ASSERT(!testAtom);
-}
-void AtomDescriptorTest::AtomCalcTest(){
-  // test some elementary set operations
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(AllAtoms()||NoAtoms());
-    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
-  }
-
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(NoAtoms()||AllAtoms());
-    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
-  }
-
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(NoAtoms()&&AllAtoms());
-    CPPUNIT_ASSERT_EQUAL( true , testAtoms.empty());
-  }
-
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(AllAtoms()&&NoAtoms());
-    CPPUNIT_ASSERT_EQUAL( true , testAtoms.empty());
-  }
-
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(!AllAtoms());
-    CPPUNIT_ASSERT_EQUAL( true , testAtoms.empty());
-  }
-
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(!NoAtoms());
-    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
-  }
-  // exclude and include some atoms
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(AllAtoms()&&(!AtomById(atomIds[ATOM_COUNT/2])));
-    std::set<atomId_t> excluded;
-    excluded.insert(atomIds[ATOM_COUNT/2]);
-    CPPUNIT_ASSERT_EQUAL( true , hasAllAtoms(testAtoms,atomIds,excluded));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateAtoms(testAtoms));
-    CPPUNIT_ASSERT_EQUAL( (size_t)(ATOM_COUNT-1), testAtoms.size());
-  }
-
-  {
-    std::vector<atom*> testAtoms = World::getInstance().getAllAtoms(NoAtoms()||(AtomById(atomIds[ATOM_COUNT/2])));
-    CPPUNIT_ASSERT_EQUAL( (size_t)1, testAtoms.size());
-    CPPUNIT_ASSERT_EQUAL( atomIds[ATOM_COUNT/2], testAtoms[0]->getId());
-  }
-}
Index: c/unittests/AtomDescriptorTest.hpp
===================================================================
--- src/unittests/AtomDescriptorTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * AtomDescriptorTest.hpp
- *
- *  Created on: Feb 9, 2010
- *      Author: crueger
- */
-
-#ifndef ATOMDESCRIPTORTEST_HPP_
-#define ATOMDESCRIPTORTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "types.hpp"
-
-// we prefer enum over define
-enum { ATOM_COUNT = 10 };
-
-class atom;
-
-class AtomDescriptorTest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( AtomDescriptorTest );
-  CPPUNIT_TEST ( AtomBaseSetsTest );
-  CPPUNIT_TEST ( AtomIdTest );
-  CPPUNIT_TEST ( AtomCalcTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void AtomBaseSetsTest();
-  void AtomIdTest();
-  void AtomCalcTest();
-
-private:
-  atom *atoms [ATOM_COUNT];
-  atomId_t atomIds [ATOM_COUNT];
-};
-
-#endif /* ATOMDESCRIPTORTEST_HPP_ */
Index: src/unittests/BondGraphUnitTest.cpp
===================================================================
--- src/unittests/BondGraphUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/BondGraphUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,173 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * BondGraphUnitTest.cpp
+ *
+ *  Created on: Oct 29, 2009
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <iostream>
+#include <stdio.h>
+#include <cstring>
+
+#include "Helpers/Assert.hpp"
+
+#include "World.hpp"
+#include "atom.hpp"
+#include "bond.hpp"
+#include "bondgraph.hpp"
+#include "element.hpp"
+#include "Helpers/Log.hpp"
+#include "molecule.hpp"
+#include "periodentafel.hpp"
+#include "World.hpp"
+
+#include "BondGraphUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( BondGraphTest );
+
+
+void BondGraphTest::setUp()
+{
+  atom *Walker = NULL;
+
+  // construct element
+  hydrogen = World::getInstance().getPeriode()->FindElement(1);
+  carbon = World::getInstance().getPeriode()->FindElement(6);
+  CPPUNIT_ASSERT(hydrogen != NULL && "could not find element hydrogen");
+  CPPUNIT_ASSERT(carbon != NULL && "could not find element carbon");
+
+  // construct molecule (tetraeder of hydrogens)
+  TestMolecule = World::getInstance().createMolecule();
+  CPPUNIT_ASSERT(TestMolecule != NULL && "could not create molecule");
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(carbon);
+  Walker->setPosition(Vector(1., 0., 1. ));
+  TestMolecule->AddAtom(Walker);
+
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(carbon);
+  Walker->setPosition(Vector(0., 1., 1. ));
+  TestMolecule->AddAtom(Walker);
+
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(carbon);
+  Walker->setPosition(Vector(1., 1., 0. ));
+  TestMolecule->AddAtom(Walker);
+
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(carbon);
+  Walker->setPosition(Vector(0., 0., 0. ));
+  TestMolecule->AddAtom(Walker);
+
+  // check that TestMolecule was correctly constructed
+  CPPUNIT_ASSERT_EQUAL( TestMolecule->getAtomCount(), 4 );
+
+  // create a small file with table
+  dummyname = new string("dummy.dat");
+  CPPUNIT_ASSERT(dummyname != NULL && "could not create string");
+  filename = new string("test.dat");
+  CPPUNIT_ASSERT(filename != NULL && "could not create string");
+  ofstream test(filename->c_str());
+  test << ".\tH\tHe\tLi\tBe\tB\tC\n";
+  test << "H\t1.\t1.\t1.\t1.\t1.\t1.2\n";
+  test << "He\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "Li\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "Be\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "B\t1.\t1.\t1.\t1.\t1.\t1.\n";
+  test << "C\t1.2\t1.\t1.\t1.\t1.\t1.5\n";
+  test.close();
+  BG = new BondGraph(true);
+  CPPUNIT_ASSERT(BG != NULL && "could not create BondGraph");
+};
+
+
+void BondGraphTest::tearDown()
+{
+  // remove the file
+  remove(filename->c_str());
+  delete(filename);
+  delete(dummyname);
+  delete(BG);
+
+  // remove molecule
+  World::getInstance().destroyMolecule(TestMolecule);
+  // note that all the atoms, molecules, the tafel and the elements
+  // are all cleaned when the world is destroyed
+  World::purgeInstance();
+  logger::purgeInstance();
+};
+
+/** Tests whether setup worked.
+ */
+void BondGraphTest::SetupTest()
+{
+  CPPUNIT_ASSERT_EQUAL (false, TestMolecule->empty());
+  CPPUNIT_ASSERT_EQUAL ((size_t)4, TestMolecule->size());
+};
+
+/** UnitTest for BondGraphTest::LoadBondLengthTable().
+ */
+void BondGraphTest::LoadTableTest()
+{
+  CPPUNIT_ASSERT_EQUAL( true , BG->LoadBondLengthTable(*filename) );
+  CPPUNIT_ASSERT_EQUAL( 1., BG->GetBondLength(0,0) );
+  CPPUNIT_ASSERT_EQUAL( 1.2, BG->GetBondLength(0,5) );
+  CPPUNIT_ASSERT_EQUAL( 1.5, BG->GetBondLength(5,5) );
+};
+
+/** UnitTest for BondGraphTest::ConstructBondGraph().
+ */
+void BondGraphTest::ConstructGraphFromTableTest()
+{
+  molecule::iterator Walker = TestMolecule->begin();
+  molecule::iterator Runner = TestMolecule->begin();
+  Runner++;
+  CPPUNIT_ASSERT_EQUAL( true , BG->LoadBondLengthTable(*filename) );
+  CPPUNIT_ASSERT_EQUAL( true , BG->ConstructBondGraph(TestMolecule) );
+  CPPUNIT_ASSERT_EQUAL( true , (*Walker)->IsBondedTo((*Runner)) );
+};
+
+/** UnitTest for BondGraphTest::ConstructBondGraph().
+ */
+void BondGraphTest::ConstructGraphFromCovalentRadiiTest()
+{
+
+  //atom *Walker = TestMolecule->start->next;
+  //atom *Runner = TestMolecule->end->previous;
+  //CPPUNIT_ASSERT( TestMolecule->end != Walker );
+  CPPUNIT_ASSERT_EQUAL( false , BG->LoadBondLengthTable(*dummyname) );
+  CPPUNIT_ASSERT_EQUAL( true , BG->ConstructBondGraph(TestMolecule) );
+
+  // this cannot be assured using dynamic IDs
+  //CPPUNIT_ASSERT_EQUAL( true , Walker->IsBondedTo(Runner) );
+};
+
Index: src/unittests/BondGraphUnitTest.hpp
===================================================================
--- src/unittests/BondGraphUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/BondGraphUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,49 @@
+/*
+ * BondGraphUnitTest.hpp
+ *
+ *  Created on: Oct 29, 2009
+ *      Author: heber
+ */
+
+#ifndef BONDGRAPHUNITTEST_HPP_
+#define BONDGRAPHUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+class BondGraph;
+class element;
+class molecule;
+class periodentafel;
+
+/********************************************** Test classes **************************************/
+
+class BondGraphTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( BondGraphTest) ;
+    CPPUNIT_TEST ( SetupTest );
+    CPPUNIT_TEST ( LoadTableTest );
+    CPPUNIT_TEST ( ConstructGraphFromTableTest );
+    CPPUNIT_TEST ( ConstructGraphFromCovalentRadiiTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void SetupTest();
+      void LoadTableTest();
+      void ConstructGraphFromTableTest();
+      void ConstructGraphFromCovalentRadiiTest();
+
+private:
+
+      molecule *TestMolecule;
+      const element *hydrogen;
+      const element *carbon;
+
+      BondGraph *BG;
+      string *filename;
+      string *dummyname;
+};
+
+#endif /* BONDGRAPHUNITTEST_HPP_ */
Index: src/unittests/BoxUnitTest.cpp
===================================================================
--- src/unittests/BoxUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/BoxUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1616 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * BoxUnitTest.cpp
+ *
+ *  Created on: Jul 30, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include "LinearAlgebra/Vector.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+#include "Box.hpp"
+#include "Helpers/Assert.hpp"
+
+#include "BoxUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( BoxUnittest );
+
+void BoxUnittest::setUp(){
+  ASSERT_DO(Assert::Throw);
+  unit = new RealSpaceMatrix;
+  unit->setIdentity();
+  zero = new RealSpaceMatrix;
+  invertible = new RealSpaceMatrix;
+  invertible->diagonal() = Vector(1,2,3);
+  uninvertible = new RealSpaceMatrix;
+  uninvertible->column(0) = Vector(1,0,1);
+  uninvertible->column(2) = Vector(1,0,1);
+
+  RealSpaceMatrix boxMat;
+  unitBox = new Box;
+  stretchedBox1 = new Box;
+  boxMat.setIdentity();
+  boxMat.diagonal() = Vector(1,2,3);
+  stretchedBox1->setM(boxMat);
+
+  stretchedBox2 = new Box;
+  boxMat.setIdentity();
+  boxMat.diagonal() = Vector(2,3,1);
+  stretchedBox2->setM(boxMat);
+
+  stretchedBox3 = new Box;
+  boxMat.setIdentity();
+  boxMat.diagonal() = Vector(3,1,2);
+  stretchedBox3->setM(boxMat);
+
+  stretchedBox4 = new Box;
+  boxMat.setIdentity();
+  boxMat.diagonal() = Vector(2,2,2);
+  stretchedBox4->setM(boxMat);
+
+  tiltedBox1 = new Box;
+  boxMat.setIdentity();
+  boxMat.column(0) = Vector(1,0,1);
+  tiltedBox1->setM(boxMat);
+
+  tiltedBox2 = new Box;
+  boxMat.setIdentity();
+  boxMat.column(0) = Vector(1,1,1);
+  tiltedBox2->setM(boxMat);
+
+  tiltedBox3 = new Box;
+  boxMat.setIdentity();
+  boxMat.column(1) = Vector(0,1,1);
+  tiltedBox3->setM(boxMat);
+
+  tiltedBox4 = new Box;
+  boxMat.setIdentity();
+  boxMat.column(0) = Vector(1,1,1);
+  boxMat.column(1) = Vector(0,1,1);
+  tiltedBox4->setM(boxMat);
+
+}
+
+void BoxUnittest::tearDown(){
+  delete unit;
+  delete zero;
+  delete invertible;
+  delete uninvertible;
+
+  delete unitBox;
+  delete stretchedBox1;
+  delete stretchedBox2;
+  delete stretchedBox3;
+  delete stretchedBox4;
+  delete tiltedBox1;
+  delete tiltedBox2;
+  delete tiltedBox3;
+  delete tiltedBox4;
+
+}
+
+void BoxUnittest::setBoxTest(){
+  Box testBox;
+  CPPUNIT_ASSERT_NO_THROW(testBox.setM(*unit));
+  CPPUNIT_ASSERT_NO_THROW(testBox = *unit);
+  CPPUNIT_ASSERT_NO_THROW(testBox.setM(*invertible));
+  CPPUNIT_ASSERT_NO_THROW(testBox = *invertible);
+#ifndef NDEBUG
+  CPPUNIT_ASSERT_THROW(testBox.setM(*zero),Assert::AssertionFailure);
+  CPPUNIT_ASSERT_THROW(testBox = *zero,Assert::AssertionFailure);
+  CPPUNIT_ASSERT_THROW(testBox.setM(*uninvertible),Assert::AssertionFailure);
+  CPPUNIT_ASSERT_THROW(testBox = *uninvertible,Assert::AssertionFailure);
+#endif
+}
+
+void BoxUnittest::translateInOutTest(){
+  Vector testVector;
+  {
+    testVector=Vector(0,0,0);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(0.5,0.5,0.5);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(1,1,1);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(2,1,1);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(1,2,1);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(1,1,2);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(3,1,1);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(1,3,1);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(1,1,3);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+  {
+    testVector=Vector(2,2,2);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
+    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
+  }
+
+}
+
+void BoxUnittest::isInsideTest(){
+  Vector testVector(0,0,0);
+  CPPUNIT_ASSERT( unitBox->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
+
+
+  testVector = Vector(0.5,0.5,0.5);
+  CPPUNIT_ASSERT( unitBox->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
+
+  testVector = Vector(1,1,1);
+  CPPUNIT_ASSERT( unitBox->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
+
+  testVector = Vector(2,1,1);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
+
+  testVector = Vector(1,2,1);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
+
+  testVector = Vector(1,1,2);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
+
+  testVector = Vector(3,1,1);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
+
+  testVector = Vector(1,3,1);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
+
+  testVector = Vector(1,1,3);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
+
+  testVector = Vector(2,2,2);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
+
+  testVector = Vector(3,3,3);
+  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
+  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
+}
+
+bool testWrapExplode(VECTORSET(std::list) &set,Vector &point, Box* box){
+  bool res = true;
+  Vector wrappedPoint = box->WrapPeriodically(point);
+  for(std::list<Vector>::iterator iter = set.begin(); iter!=set.end();++iter){
+    Vector wrapped = box->WrapPeriodically(*iter);
+    bool equals = (wrapped == wrappedPoint);
+    res = res && equals;
+    if(!equals){
+      cout << "Wrapped vector " << wrapped << " produced from vector " << (*iter) << " does not match target " << wrappedPoint << endl;
+    }
+  }
+  return res;
+}
+
+void BoxUnittest::WrapExplodeTest(){
+  Vector testVector(0,0,0);
+  VECTORSET(std::list) res;
+
+  // we only can explode those vectors that are actually inside the box
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(1,1,1);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(2,1,1);
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+  }
+
+  {
+    testVector = Vector(1,2,1);
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+  }
+
+  {
+    testVector = Vector(1,1,2);
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(3,1,1);
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+  }
+
+  {
+    testVector = Vector(1,3,1);
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+  }
+
+  {
+    testVector = Vector(1,1,3);
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+  }
+
+  {
+    testVector = Vector(2,2,2);
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+  }
+
+  // Higher level explosions
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(1,1,1);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(2,1,1);
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+  }
+
+  {
+    testVector = Vector(1,2,1);
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+  }
+
+  {
+    testVector = Vector(1,1,2);
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(3,1,1);
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+  }
+
+  {
+    testVector = Vector(1,3,1);
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+  }
+
+  {
+    testVector = Vector(1,1,3);
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+  }
+
+  {
+    testVector = Vector(2,2,2);
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+  }
+
+  // one more set of higher level explosions
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(1,1,1);
+    res = unitBox->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(2,1,1);
+    res = stretchedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+  }
+
+  {
+    testVector = Vector(1,2,1);
+    res = stretchedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+  }
+
+  {
+    testVector = Vector(1,1,2);
+    res = stretchedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(3,1,1);
+    res = stretchedBox3->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+  }
+
+  {
+    testVector = Vector(1,3,1);
+    res = stretchedBox2->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+  }
+
+  {
+    testVector = Vector(1,1,3);
+    res = stretchedBox1->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+  }
+
+  {
+    testVector = Vector(2,2,2);
+    res = stretchedBox4->explode(testVector,3);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+  }
+}
+
+void BoxUnittest::BoundaryBounceTest(){
+  Vector testVector(0,0,0);
+  VECTORSET(std::list) res;
+
+  unitBox->setCondition(0,Box::Bounce);
+  stretchedBox1->setCondition(0,Box::Bounce);
+  stretchedBox2->setCondition(0,Box::Bounce);
+  stretchedBox3->setCondition(0,Box::Bounce);
+  stretchedBox4->setCondition(0,Box::Bounce);
+  tiltedBox1->setCondition(0,Box::Bounce);
+  tiltedBox2->setCondition(0,Box::Bounce);
+  tiltedBox3->setCondition(0,Box::Bounce);
+  tiltedBox4->setCondition(0,Box::Bounce);
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  unitBox->setCondition(1,Box::Bounce);
+  stretchedBox1->setCondition(1,Box::Bounce);
+  stretchedBox2->setCondition(1,Box::Bounce);
+  stretchedBox3->setCondition(1,Box::Bounce);
+  stretchedBox4->setCondition(1,Box::Bounce);
+  tiltedBox1->setCondition(1,Box::Bounce);
+  tiltedBox2->setCondition(1,Box::Bounce);
+  tiltedBox3->setCondition(1,Box::Bounce);
+  tiltedBox4->setCondition(1,Box::Bounce);
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  unitBox->setCondition(2,Box::Bounce);
+  stretchedBox1->setCondition(2,Box::Bounce);
+  stretchedBox2->setCondition(2,Box::Bounce);
+  stretchedBox3->setCondition(2,Box::Bounce);
+  stretchedBox4->setCondition(2,Box::Bounce);
+  tiltedBox1->setCondition(2,Box::Bounce);
+  tiltedBox2->setCondition(2,Box::Bounce);
+  tiltedBox3->setCondition(2,Box::Bounce);
+  tiltedBox4->setCondition(2,Box::Bounce);
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+}
+
+void BoxUnittest::BoundaryIgnoreTest(){
+  Vector testVector(0,0,0);
+  VECTORSET(std::list) res;
+
+  unitBox->setCondition(0,Box::Ignore);
+  stretchedBox1->setCondition(0,Box::Ignore);
+  stretchedBox2->setCondition(0,Box::Ignore);
+  stretchedBox3->setCondition(0,Box::Ignore);
+  stretchedBox4->setCondition(0,Box::Ignore);
+  tiltedBox1->setCondition(0,Box::Ignore);
+  tiltedBox2->setCondition(0,Box::Ignore);
+  tiltedBox3->setCondition(0,Box::Ignore);
+  tiltedBox4->setCondition(0,Box::Ignore);
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  unitBox->setCondition(1,Box::Ignore);
+  stretchedBox1->setCondition(1,Box::Ignore);
+  stretchedBox2->setCondition(1,Box::Ignore);
+  stretchedBox3->setCondition(1,Box::Ignore);
+  stretchedBox4->setCondition(1,Box::Ignore);
+  tiltedBox1->setCondition(1,Box::Ignore);
+  tiltedBox2->setCondition(1,Box::Ignore);
+  tiltedBox3->setCondition(1,Box::Ignore);
+  tiltedBox4->setCondition(1,Box::Ignore);
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  unitBox->setCondition(2,Box::Ignore);
+  stretchedBox1->setCondition(2,Box::Ignore);
+  stretchedBox2->setCondition(2,Box::Ignore);
+  stretchedBox3->setCondition(2,Box::Ignore);
+  stretchedBox4->setCondition(2,Box::Ignore);
+  tiltedBox1->setCondition(2,Box::Ignore);
+  tiltedBox2->setCondition(2,Box::Ignore);
+  tiltedBox3->setCondition(2,Box::Ignore);
+  tiltedBox4->setCondition(2,Box::Ignore);
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+}
+
+void BoxUnittest::BoundaryMixedTest(){
+  Vector testVector(0,0,0);
+  VECTORSET(std::list) res;
+
+  unitBox->setCondition(0,Box::Bounce);
+  unitBox->setCondition(1,Box::Ignore);
+  unitBox->setCondition(2,Box::Wrap);
+
+  stretchedBox1->setCondition(0,Box::Bounce);
+  stretchedBox1->setCondition(1,Box::Ignore);
+  stretchedBox1->setCondition(2,Box::Wrap);
+
+  stretchedBox2->setCondition(0,Box::Bounce);
+  stretchedBox2->setCondition(1,Box::Ignore);
+  stretchedBox2->setCondition(2,Box::Wrap);
+
+  stretchedBox3->setCondition(0,Box::Bounce);
+  stretchedBox3->setCondition(1,Box::Ignore);
+  stretchedBox3->setCondition(2,Box::Wrap);
+
+  stretchedBox4->setCondition(0,Box::Bounce);
+  stretchedBox4->setCondition(1,Box::Ignore);
+  stretchedBox4->setCondition(2,Box::Wrap);
+
+  tiltedBox1->setCondition(0,Box::Bounce);
+  tiltedBox1->setCondition(1,Box::Ignore);
+  tiltedBox1->setCondition(2,Box::Wrap);
+
+  tiltedBox2->setCondition(0,Box::Bounce);
+  tiltedBox2->setCondition(1,Box::Ignore);
+  tiltedBox2->setCondition(2,Box::Wrap);
+
+  tiltedBox3->setCondition(0,Box::Bounce);
+  tiltedBox3->setCondition(1,Box::Ignore);
+  tiltedBox3->setCondition(2,Box::Wrap);
+
+  tiltedBox4->setCondition(0,Box::Bounce);
+  tiltedBox4->setCondition(1,Box::Ignore);
+  tiltedBox4->setCondition(2,Box::Wrap);
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,1);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0,0,0);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+  {
+    testVector = Vector(0.5,0.5,0.5);
+    res = unitBox->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
+    res = stretchedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
+    res = stretchedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
+    res = stretchedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
+    res = stretchedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
+    res = tiltedBox1->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
+    res = tiltedBox2->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
+    res = tiltedBox3->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
+    res = tiltedBox4->explode(testVector,2);
+    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
+  }
+
+}
Index: src/unittests/BoxUnitTest.hpp
===================================================================
--- src/unittests/BoxUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/BoxUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,56 @@
+/*
+ * BoxUnitTest.hpp
+ *
+ *  Created on: Jul 30, 2010
+ *      Author: crueger
+ */
+
+#ifndef BOXUNITTEST_HPP_
+#define BOXUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class RealSpaceMatrix;
+class Box;
+
+class BoxUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( BoxUnittest );
+  CPPUNIT_TEST ( setBoxTest );
+  CPPUNIT_TEST ( translateInOutTest );
+  CPPUNIT_TEST ( isInsideTest );
+  CPPUNIT_TEST ( WrapExplodeTest );
+  CPPUNIT_TEST ( BoundaryBounceTest );
+  CPPUNIT_TEST ( BoundaryIgnoreTest );
+  CPPUNIT_TEST ( BoundaryMixedTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void setBoxTest();
+  void translateInOutTest();
+  void isInsideTest();
+  void WrapExplodeTest();
+  void BoundaryBounceTest();
+  void BoundaryIgnoreTest();
+  void BoundaryMixedTest();
+
+  RealSpaceMatrix *unit;
+  RealSpaceMatrix *zero;
+  RealSpaceMatrix *invertible;
+  RealSpaceMatrix *uninvertible;
+
+  Box *unitBox;
+  Box *stretchedBox1;
+  Box *stretchedBox2;
+  Box *stretchedBox3;
+  Box *stretchedBox4;
+  Box *tiltedBox1;
+  Box *tiltedBox2;
+  Box *tiltedBox3;
+  Box *tiltedBox4;
+};
+
+#endif /* BOXUNITTEST_HPP_ */
Index: c/unittests/BoxUnittest.cpp
===================================================================
--- src/unittests/BoxUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,1616 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * BoxUnittest.cpp
- *
- *  Created on: Jul 30, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "BoxUnittest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-#include "LinearAlgebra/Vector.hpp"
-#include "LinearAlgebra/RealSpaceMatrix.hpp"
-#include "Box.hpp"
-#include "Helpers/Assert.hpp"
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( BoxUnittest );
-
-void BoxUnittest::setUp(){
-  ASSERT_DO(Assert::Throw);
-  unit = new RealSpaceMatrix;
-  unit->setIdentity();
-  zero = new RealSpaceMatrix;
-  invertible = new RealSpaceMatrix;
-  invertible->diagonal() = Vector(1,2,3);
-  uninvertible = new RealSpaceMatrix;
-  uninvertible->column(0) = Vector(1,0,1);
-  uninvertible->column(2) = Vector(1,0,1);
-
-  RealSpaceMatrix boxMat;
-  unitBox = new Box;
-  stretchedBox1 = new Box;
-  boxMat.setIdentity();
-  boxMat.diagonal() = Vector(1,2,3);
-  stretchedBox1->setM(boxMat);
-
-  stretchedBox2 = new Box;
-  boxMat.setIdentity();
-  boxMat.diagonal() = Vector(2,3,1);
-  stretchedBox2->setM(boxMat);
-
-  stretchedBox3 = new Box;
-  boxMat.setIdentity();
-  boxMat.diagonal() = Vector(3,1,2);
-  stretchedBox3->setM(boxMat);
-
-  stretchedBox4 = new Box;
-  boxMat.setIdentity();
-  boxMat.diagonal() = Vector(2,2,2);
-  stretchedBox4->setM(boxMat);
-
-  tiltedBox1 = new Box;
-  boxMat.setIdentity();
-  boxMat.column(0) = Vector(1,0,1);
-  tiltedBox1->setM(boxMat);
-
-  tiltedBox2 = new Box;
-  boxMat.setIdentity();
-  boxMat.column(0) = Vector(1,1,1);
-  tiltedBox2->setM(boxMat);
-
-  tiltedBox3 = new Box;
-  boxMat.setIdentity();
-  boxMat.column(1) = Vector(0,1,1);
-  tiltedBox3->setM(boxMat);
-
-  tiltedBox4 = new Box;
-  boxMat.setIdentity();
-  boxMat.column(0) = Vector(1,1,1);
-  boxMat.column(1) = Vector(0,1,1);
-  tiltedBox4->setM(boxMat);
-
-}
-
-void BoxUnittest::tearDown(){
-  delete unit;
-  delete zero;
-  delete invertible;
-  delete uninvertible;
-
-  delete unitBox;
-  delete stretchedBox1;
-  delete stretchedBox2;
-  delete stretchedBox3;
-  delete stretchedBox4;
-  delete tiltedBox1;
-  delete tiltedBox2;
-  delete tiltedBox3;
-  delete tiltedBox4;
-
-}
-
-void BoxUnittest::setBoxTest(){
-  Box testBox;
-  CPPUNIT_ASSERT_NO_THROW(testBox.setM(*unit));
-  CPPUNIT_ASSERT_NO_THROW(testBox = *unit);
-  CPPUNIT_ASSERT_NO_THROW(testBox.setM(*invertible));
-  CPPUNIT_ASSERT_NO_THROW(testBox = *invertible);
-#ifndef NDEBUG
-  CPPUNIT_ASSERT_THROW(testBox.setM(*zero),Assert::AssertionFailure);
-  CPPUNIT_ASSERT_THROW(testBox = *zero,Assert::AssertionFailure);
-  CPPUNIT_ASSERT_THROW(testBox.setM(*uninvertible),Assert::AssertionFailure);
-  CPPUNIT_ASSERT_THROW(testBox = *uninvertible,Assert::AssertionFailure);
-#endif
-}
-
-void BoxUnittest::translateInOutTest(){
-  Vector testVector;
-  {
-    testVector=Vector(0,0,0);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(0.5,0.5,0.5);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(1,1,1);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(2,1,1);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(1,2,1);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(1,1,2);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(3,1,1);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(1,3,1);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(1,1,3);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-  {
-    testVector=Vector(2,2,2);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateOut(unitBox->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(unitBox->translateIn(unitBox->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateOut(stretchedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox1->translateIn(stretchedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateOut(stretchedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox2->translateIn(stretchedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateOut(stretchedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox3->translateIn(stretchedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateOut(stretchedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(stretchedBox4->translateIn(stretchedBox4->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateOut(tiltedBox1->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox1->translateIn(tiltedBox1->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateOut(tiltedBox2->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox2->translateIn(tiltedBox2->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateOut(tiltedBox3->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox3->translateIn(tiltedBox3->translateOut(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateOut(tiltedBox4->translateIn(testVector)),testVector);
-    CPPUNIT_ASSERT_EQUAL(tiltedBox4->translateIn(tiltedBox4->translateOut(testVector)),testVector);
-  }
-
-}
-
-void BoxUnittest::isInsideTest(){
-  Vector testVector(0,0,0);
-  CPPUNIT_ASSERT( unitBox->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
-
-
-  testVector = Vector(0.5,0.5,0.5);
-  CPPUNIT_ASSERT( unitBox->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
-
-  testVector = Vector(1,1,1);
-  CPPUNIT_ASSERT( unitBox->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
-
-  testVector = Vector(2,1,1);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
-
-  testVector = Vector(1,2,1);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
-
-  testVector = Vector(1,1,2);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( tiltedBox4->isInside(testVector));
-
-  testVector = Vector(3,1,1);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
-
-  testVector = Vector(1,3,1);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
-
-  testVector = Vector(1,1,3);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
-
-  testVector = Vector(2,2,2);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT( stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
-
-  testVector = Vector(3,3,3);
-  CPPUNIT_ASSERT(!unitBox->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!stretchedBox4->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox1->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox2->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox3->isInside(testVector));
-  CPPUNIT_ASSERT(!tiltedBox4->isInside(testVector));
-}
-
-bool testWrapExplode(VECTORSET(std::list) &set,Vector &point, Box* box){
-  bool res = true;
-  Vector wrappedPoint = box->WrapPeriodically(point);
-  for(std::list<Vector>::iterator iter = set.begin(); iter!=set.end();++iter){
-    Vector wrapped = box->WrapPeriodically(*iter);
-    bool equals = (wrapped == wrappedPoint);
-    res = res && equals;
-    if(!equals){
-      cout << "Wrapped vector " << wrapped << " produced from vector " << (*iter) << " does not match target " << wrappedPoint << endl;
-    }
-  }
-  return res;
-}
-
-void BoxUnittest::WrapExplodeTest(){
-  Vector testVector(0,0,0);
-  VECTORSET(std::list) res;
-
-  // we only can explode those vectors that are actually inside the box
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(1,1,1);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(2,1,1);
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-  }
-
-  {
-    testVector = Vector(1,2,1);
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-  }
-
-  {
-    testVector = Vector(1,1,2);
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(3,1,1);
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-  }
-
-  {
-    testVector = Vector(1,3,1);
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-  }
-
-  {
-    testVector = Vector(1,1,3);
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-  }
-
-  {
-    testVector = Vector(2,2,2);
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-  }
-
-  // Higher level explosions
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(1,1,1);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(2,1,1);
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-  }
-
-  {
-    testVector = Vector(1,2,1);
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-  }
-
-  {
-    testVector = Vector(1,1,2);
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(3,1,1);
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-  }
-
-  {
-    testVector = Vector(1,3,1);
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-  }
-
-  {
-    testVector = Vector(1,1,3);
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-  }
-
-  {
-    testVector = Vector(2,2,2);
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-  }
-
-  // one more set of higher level explosions
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(1,1,1);
-    res = unitBox->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(2,1,1);
-    res = stretchedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-  }
-
-  {
-    testVector = Vector(1,2,1);
-    res = stretchedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-  }
-
-  {
-    testVector = Vector(1,1,2);
-    res = stretchedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(3,1,1);
-    res = stretchedBox3->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-  }
-
-  {
-    testVector = Vector(1,3,1);
-    res = stretchedBox2->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-  }
-
-  {
-    testVector = Vector(1,1,3);
-    res = stretchedBox1->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-  }
-
-  {
-    testVector = Vector(2,2,2);
-    res = stretchedBox4->explode(testVector,3);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-  }
-}
-
-void BoxUnittest::BoundaryBounceTest(){
-  Vector testVector(0,0,0);
-  VECTORSET(std::list) res;
-
-  unitBox->setCondition(0,Box::Bounce);
-  stretchedBox1->setCondition(0,Box::Bounce);
-  stretchedBox2->setCondition(0,Box::Bounce);
-  stretchedBox3->setCondition(0,Box::Bounce);
-  stretchedBox4->setCondition(0,Box::Bounce);
-  tiltedBox1->setCondition(0,Box::Bounce);
-  tiltedBox2->setCondition(0,Box::Bounce);
-  tiltedBox3->setCondition(0,Box::Bounce);
-  tiltedBox4->setCondition(0,Box::Bounce);
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  unitBox->setCondition(1,Box::Bounce);
-  stretchedBox1->setCondition(1,Box::Bounce);
-  stretchedBox2->setCondition(1,Box::Bounce);
-  stretchedBox3->setCondition(1,Box::Bounce);
-  stretchedBox4->setCondition(1,Box::Bounce);
-  tiltedBox1->setCondition(1,Box::Bounce);
-  tiltedBox2->setCondition(1,Box::Bounce);
-  tiltedBox3->setCondition(1,Box::Bounce);
-  tiltedBox4->setCondition(1,Box::Bounce);
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  unitBox->setCondition(2,Box::Bounce);
-  stretchedBox1->setCondition(2,Box::Bounce);
-  stretchedBox2->setCondition(2,Box::Bounce);
-  stretchedBox3->setCondition(2,Box::Bounce);
-  stretchedBox4->setCondition(2,Box::Bounce);
-  tiltedBox1->setCondition(2,Box::Bounce);
-  tiltedBox2->setCondition(2,Box::Bounce);
-  tiltedBox3->setCondition(2,Box::Bounce);
-  tiltedBox4->setCondition(2,Box::Bounce);
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-}
-
-void BoxUnittest::BoundaryIgnoreTest(){
-  Vector testVector(0,0,0);
-  VECTORSET(std::list) res;
-
-  unitBox->setCondition(0,Box::Ignore);
-  stretchedBox1->setCondition(0,Box::Ignore);
-  stretchedBox2->setCondition(0,Box::Ignore);
-  stretchedBox3->setCondition(0,Box::Ignore);
-  stretchedBox4->setCondition(0,Box::Ignore);
-  tiltedBox1->setCondition(0,Box::Ignore);
-  tiltedBox2->setCondition(0,Box::Ignore);
-  tiltedBox3->setCondition(0,Box::Ignore);
-  tiltedBox4->setCondition(0,Box::Ignore);
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  unitBox->setCondition(1,Box::Ignore);
-  stretchedBox1->setCondition(1,Box::Ignore);
-  stretchedBox2->setCondition(1,Box::Ignore);
-  stretchedBox3->setCondition(1,Box::Ignore);
-  stretchedBox4->setCondition(1,Box::Ignore);
-  tiltedBox1->setCondition(1,Box::Ignore);
-  tiltedBox2->setCondition(1,Box::Ignore);
-  tiltedBox3->setCondition(1,Box::Ignore);
-  tiltedBox4->setCondition(1,Box::Ignore);
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  unitBox->setCondition(2,Box::Ignore);
-  stretchedBox1->setCondition(2,Box::Ignore);
-  stretchedBox2->setCondition(2,Box::Ignore);
-  stretchedBox3->setCondition(2,Box::Ignore);
-  stretchedBox4->setCondition(2,Box::Ignore);
-  tiltedBox1->setCondition(2,Box::Ignore);
-  tiltedBox2->setCondition(2,Box::Ignore);
-  tiltedBox3->setCondition(2,Box::Ignore);
-  tiltedBox4->setCondition(2,Box::Ignore);
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-}
-
-void BoxUnittest::BoundaryMixedTest(){
-  Vector testVector(0,0,0);
-  VECTORSET(std::list) res;
-
-  unitBox->setCondition(0,Box::Bounce);
-  unitBox->setCondition(1,Box::Ignore);
-  unitBox->setCondition(2,Box::Wrap);
-
-  stretchedBox1->setCondition(0,Box::Bounce);
-  stretchedBox1->setCondition(1,Box::Ignore);
-  stretchedBox1->setCondition(2,Box::Wrap);
-
-  stretchedBox2->setCondition(0,Box::Bounce);
-  stretchedBox2->setCondition(1,Box::Ignore);
-  stretchedBox2->setCondition(2,Box::Wrap);
-
-  stretchedBox3->setCondition(0,Box::Bounce);
-  stretchedBox3->setCondition(1,Box::Ignore);
-  stretchedBox3->setCondition(2,Box::Wrap);
-
-  stretchedBox4->setCondition(0,Box::Bounce);
-  stretchedBox4->setCondition(1,Box::Ignore);
-  stretchedBox4->setCondition(2,Box::Wrap);
-
-  tiltedBox1->setCondition(0,Box::Bounce);
-  tiltedBox1->setCondition(1,Box::Ignore);
-  tiltedBox1->setCondition(2,Box::Wrap);
-
-  tiltedBox2->setCondition(0,Box::Bounce);
-  tiltedBox2->setCondition(1,Box::Ignore);
-  tiltedBox2->setCondition(2,Box::Wrap);
-
-  tiltedBox3->setCondition(0,Box::Bounce);
-  tiltedBox3->setCondition(1,Box::Ignore);
-  tiltedBox3->setCondition(2,Box::Wrap);
-
-  tiltedBox4->setCondition(0,Box::Bounce);
-  tiltedBox4->setCondition(1,Box::Ignore);
-  tiltedBox4->setCondition(2,Box::Wrap);
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,1);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0,0,0);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-  {
-    testVector = Vector(0.5,0.5,0.5);
-    res = unitBox->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,unitBox));
-    res = stretchedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox1));
-    res = stretchedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox2));
-    res = stretchedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox3));
-    res = stretchedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,stretchedBox4));
-    res = tiltedBox1->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox1));
-    res = tiltedBox2->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox2));
-    res = tiltedBox3->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox3));
-    res = tiltedBox4->explode(testVector,2);
-    CPPUNIT_ASSERT(testWrapExplode(res,testVector,tiltedBox4));
-  }
-
-}
Index: c/unittests/BoxUnittest.hpp
===================================================================
--- src/unittests/BoxUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,56 +1,0 @@
-/*
- * BoxUnittest.hpp
- *
- *  Created on: Jul 30, 2010
- *      Author: crueger
- */
-
-#ifndef BOXUNITTEST_HPP_
-#define BOXUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class RealSpaceMatrix;
-class Box;
-
-class BoxUnittest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( BoxUnittest );
-  CPPUNIT_TEST ( setBoxTest );
-  CPPUNIT_TEST ( translateInOutTest );
-  CPPUNIT_TEST ( isInsideTest );
-  CPPUNIT_TEST ( WrapExplodeTest );
-  CPPUNIT_TEST ( BoundaryBounceTest );
-  CPPUNIT_TEST ( BoundaryIgnoreTest );
-  CPPUNIT_TEST ( BoundaryMixedTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void setBoxTest();
-  void translateInOutTest();
-  void isInsideTest();
-  void WrapExplodeTest();
-  void BoundaryBounceTest();
-  void BoundaryIgnoreTest();
-  void BoundaryMixedTest();
-
-  RealSpaceMatrix *unit;
-  RealSpaceMatrix *zero;
-  RealSpaceMatrix *invertible;
-  RealSpaceMatrix *uninvertible;
-
-  Box *unitBox;
-  Box *stretchedBox1;
-  Box *stretchedBox2;
-  Box *stretchedBox3;
-  Box *stretchedBox4;
-  Box *tiltedBox1;
-  Box *tiltedBox2;
-  Box *tiltedBox3;
-  Box *tiltedBox4;
-};
-
-#endif /* BOXUNITTEST_HPP_ */
Index: c/unittests/CacheableTest.cpp
===================================================================
--- src/unittests/CacheableTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,103 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * CacheableTest.cpp
- *
- *  Created on: Feb 2, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "CacheableTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <boost/bind.hpp>
-
-#include "Patterns/Cacheable.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( CacheableTest );
-
-class threeNumbers : public Observable {
-public:
-  int x;
-  int y;
-  int z;
-  Cacheable<int> sum;
-  bool hasRecalced;
-
-  void setX(int _x){
-    OBSERVE;
-    x = _x;
-  }
-
-  void setY
-  (int _y){
-    OBSERVE;
-    y = _y;
-  }
-
-  void setZ(int _z){
-    OBSERVE;
-    z = _z;
-  }
-
-  int calcSum(){
-    hasRecalced = true;
-    return x+y+z;
-  }
-
-  threeNumbers(int _x,int _y, int _z) :
-    Observable("threeNumbers"),
-    x(_x),y(_y),z(_z),
-    sum(this,boost::bind(&threeNumbers::calcSum,this),"sum"),
-    hasRecalced(false)
-  {}
-};
-
-
-
-
-void CacheableTest::setUp(){
-  numbers = new threeNumbers(1,2,3);
-}
-
-void CacheableTest::tearDown(){
-  delete numbers;
-}
-
-void CacheableTest::doesRecalcTest()
-{
-  CPPUNIT_ASSERT_EQUAL( 6, *(numbers->sum));
-  CPPUNIT_ASSERT_EQUAL( true, numbers->hasRecalced);
-  numbers->hasRecalced=false;
-  numbers->setX(4);
-  CPPUNIT_ASSERT_EQUAL( false, numbers->hasRecalced);
-  CPPUNIT_ASSERT_EQUAL( 9, *(numbers->sum));
-  CPPUNIT_ASSERT_EQUAL( true, numbers->hasRecalced);
-  numbers->hasRecalced=false;
-  CPPUNIT_ASSERT_EQUAL( 9, *(numbers->sum));
-#ifndef NO_CACHING
-  CPPUNIT_ASSERT_EQUAL( false, numbers->hasRecalced);
-#else
-  CPPUNIT_ASSERT_EQUAL( true, numbers->hasRecalced);
-#endif
-}
Index: c/unittests/CacheableTest.hpp
===================================================================
--- src/unittests/CacheableTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,31 +1,0 @@
-/*
- * CacheableTest.hpp
- *
- *  Created on: Feb 2, 2010
- *      Author: crueger
- */
-
-#ifndef CACHEABLETEST_HPP_
-#define CACHEABLETEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-
-// stub classes
-class threeNumbers;
-
-class CacheableTest :  public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( CacheableTest );
-  CPPUNIT_TEST ( doesRecalcTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void doesRecalcTest();
-  threeNumbers *numbers;
-};
-
-#endif /* CACHEABLETEST_HPP_ */
Index: src/unittests/CountBondsUnitTest.cpp
===================================================================
--- src/unittests/CountBondsUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/unittests/CountBondsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -38,4 +38,5 @@
 #include "periodentafel.hpp"
 #include "World.hpp"
+
 #include "CountBondsUnitTest.hpp"
 
Index: src/unittests/FormulaUnitTest.cpp
===================================================================
--- src/unittests/FormulaUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/FormulaUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,268 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * FormulaUnitTest.cpp
+ *
+ *  Created on: Jul 21, 2010
+ *      Author: crueger
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <iostream>
+
+#include "Formula.hpp"
+#include "World.hpp"
+
+#include "FormulaUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+CPPUNIT_TEST_SUITE_REGISTRATION( FormulaUnittest );
+
+void FormulaUnittest::setUp(){}
+void FormulaUnittest::tearDown(){
+  World::purgeInstance();
+}
+
+void FormulaUnittest::baseTest(){
+  Formula formula;
+  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)0);
+  CPPUNIT_ASSERT(formula.begin()==formula.end());
+
+  // test some one letter element names
+  formula += "H";
+  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
+  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)1);
+  CPPUNIT_ASSERT(formula.begin()!=formula.end());
+  formula += "H";
+  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
+  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)1);
+  CPPUNIT_ASSERT(formula.begin()!=formula.end());
+  formula += "O";
+  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
+  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)1);
+  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)2);
+  CPPUNIT_ASSERT(formula.begin()!=formula.end());
+
+  // test copy constructor
+  Formula formula2=formula;
+  CPPUNIT_ASSERT_EQUAL(formula2["H"],(unsigned int)2);
+  CPPUNIT_ASSERT_EQUAL(formula2["O"],(unsigned int)1);
+  CPPUNIT_ASSERT_EQUAL(formula2["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula2.getElementCount(),(unsigned int)2);
+  CPPUNIT_ASSERT(formula2.begin()!=formula2.end());
+
+  // test Assignment operator
+  formula2=Formula();
+  CPPUNIT_ASSERT_EQUAL(formula2["H"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula2["O"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula2["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula2.getElementCount(),(unsigned int)0);
+  CPPUNIT_ASSERT(formula2.begin()==formula2.end());
+
+  // test comparison
+  CPPUNIT_ASSERT(formula!=formula2);
+  Formula formula3;
+  formula3 += "H";
+  formula3 += "H";
+  formula3 += "O";
+  CPPUNIT_ASSERT(formula==formula3);
+
+  // inequality
+  formula3 += "O";
+  CPPUNIT_ASSERT(formula!=formula3);
+
+  // after removing it should be fine again
+  formula3 -= "O";
+  CPPUNIT_ASSERT(formula==formula3);
+
+  // add something from the far end, to test resizing
+  formula3 += "Rh";
+  CPPUNIT_ASSERT(formula!=formula3);
+  formula3 -= "Rh";
+  CPPUNIT_ASSERT(formula==formula3);
+
+  // removal of elements
+  formula -= "H";
+  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
+  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)1);
+  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)2);
+  CPPUNIT_ASSERT(formula.begin()!=formula.end());
+
+  formula -= "O";
+  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
+  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)1);
+  CPPUNIT_ASSERT(formula.begin()!=formula.end());
+
+  formula -= "H";
+  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)0);
+  CPPUNIT_ASSERT(formula.begin()==formula.end());
+}
+
+void FormulaUnittest::parseTest(){
+  {
+    Formula formula("");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("H");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("H2");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("H2O");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("CH3COOH");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)4);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("CH3COONa");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)3);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("NaCH3COO");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)3);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("Na2CO3");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)3);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("CH2(COOH)2");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)4);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)4);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)3);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+  }
+  {
+    Formula formula("K4[Fe(CN)6]");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)6);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["K"],(unsigned int)4);
+    CPPUNIT_ASSERT_EQUAL(formula["Fe"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["N"],(unsigned int)6);
+  }
+  {
+    Formula formula("[CrCl3(H2O)3]");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)6);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)3);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["Cr"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["Cl"],(unsigned int)3);
+  }
+  {
+    Formula formula("Mg3[Fe(CN)6]2");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)12);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["Mg"],(unsigned int)3);
+    CPPUNIT_ASSERT_EQUAL(formula["Fe"],(unsigned int)2);
+    CPPUNIT_ASSERT_EQUAL(formula["N"],(unsigned int)12);
+  }
+  {
+    Formula formula("Na[Fe((HO2CCH2)2NCH2CH2N(CH2CO2H)2)]");
+    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)16);
+    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)8);
+    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)10);
+    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["Mg"],(unsigned int)0);
+    CPPUNIT_ASSERT_EQUAL(formula["Fe"],(unsigned int)1);
+    CPPUNIT_ASSERT_EQUAL(formula["N"],(unsigned int)2);
+  }
+  {
+    CPPUNIT_ASSERT_THROW(Formula formula("74107"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("  "),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("nAcL"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("NAcL"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("Na Cl"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("1NaCl"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("Mag"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("AgCl)"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("(Na"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("(Mag)"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("MgCl2)"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("((MgCl2)"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("(MgCl2))"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("(MgCl2]"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("[MgCl2)"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("N(aCl"),ParseError);
+    CPPUNIT_ASSERT_THROW(Formula formula("Na()Cl"),ParseError);
+  }
+
+
+}
Index: src/unittests/FormulaUnitTest.hpp
===================================================================
--- src/unittests/FormulaUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/FormulaUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,28 @@
+/*
+ * FormulaUnitTest.hpp
+ *
+ *  Created on: Jul 21, 2010
+ *      Author: crueger
+ */
+
+#ifndef FORMULAUNITTEST_HPP_
+#define FORMULAUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class FormulaUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( FormulaUnittest );
+  CPPUNIT_TEST ( baseTest );
+  CPPUNIT_TEST ( parseTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void baseTest();
+  void parseTest();
+};
+
+#endif /* FORMULAUNITTEST_HPP_ */
Index: c/unittests/FormulaUnittest.cpp
===================================================================
--- src/unittests/FormulaUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,270 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * FormulaUnittest.cpp
- *
- *  Created on: Jul 21, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "FormulaUnittest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <iostream>
-
-#include "Formula.hpp"
-#include "World.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-using namespace std;
-
-CPPUNIT_TEST_SUITE_REGISTRATION( FormulaUnittest );
-
-void FormulaUnittest::setUp(){}
-void FormulaUnittest::tearDown(){
-  World::purgeInstance();
-}
-
-void FormulaUnittest::baseTest(){
-  Formula formula;
-  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)0);
-  CPPUNIT_ASSERT(formula.begin()==formula.end());
-
-  // test some one letter element names
-  formula += "H";
-  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
-  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)1);
-  CPPUNIT_ASSERT(formula.begin()!=formula.end());
-  formula += "H";
-  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
-  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)1);
-  CPPUNIT_ASSERT(formula.begin()!=formula.end());
-  formula += "O";
-  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
-  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)1);
-  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)2);
-  CPPUNIT_ASSERT(formula.begin()!=formula.end());
-
-  // test copy constructor
-  Formula formula2=formula;
-  CPPUNIT_ASSERT_EQUAL(formula2["H"],(unsigned int)2);
-  CPPUNIT_ASSERT_EQUAL(formula2["O"],(unsigned int)1);
-  CPPUNIT_ASSERT_EQUAL(formula2["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula2.getElementCount(),(unsigned int)2);
-  CPPUNIT_ASSERT(formula2.begin()!=formula2.end());
-
-  // test Assignment operator
-  formula2=Formula();
-  CPPUNIT_ASSERT_EQUAL(formula2["H"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula2["O"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula2["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula2.getElementCount(),(unsigned int)0);
-  CPPUNIT_ASSERT(formula2.begin()==formula2.end());
-
-  // test comparison
-  CPPUNIT_ASSERT(formula!=formula2);
-  Formula formula3;
-  formula3 += "H";
-  formula3 += "H";
-  formula3 += "O";
-  CPPUNIT_ASSERT(formula==formula3);
-
-  // inequality
-  formula3 += "O";
-  CPPUNIT_ASSERT(formula!=formula3);
-
-  // after removing it should be fine again
-  formula3 -= "O";
-  CPPUNIT_ASSERT(formula==formula3);
-
-  // add something from the far end, to test resizing
-  formula3 += "Rh";
-  CPPUNIT_ASSERT(formula!=formula3);
-  formula3 -= "Rh";
-  CPPUNIT_ASSERT(formula==formula3);
-
-  // removal of elements
-  formula -= "H";
-  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
-  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)1);
-  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)2);
-  CPPUNIT_ASSERT(formula.begin()!=formula.end());
-
-  formula -= "O";
-  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
-  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)1);
-  CPPUNIT_ASSERT(formula.begin()!=formula.end());
-
-  formula -= "H";
-  CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  CPPUNIT_ASSERT_EQUAL(formula.getElementCount(),(unsigned int)0);
-  CPPUNIT_ASSERT(formula.begin()==formula.end());
-}
-
-void FormulaUnittest::parseTest(){
-  {
-    Formula formula("");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("H");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("H2");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("H2O");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("CH3COOH");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)4);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("CH3COONa");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)3);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("NaCH3COO");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)3);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("Na2CO3");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)3);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("CH2(COOH)2");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)4);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)4);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)3);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-  }
-  {
-    Formula formula("K4[Fe(CN)6]");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)6);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["K"],(unsigned int)4);
-    CPPUNIT_ASSERT_EQUAL(formula["Fe"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["N"],(unsigned int)6);
-  }
-  {
-    Formula formula("[CrCl3(H2O)3]");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)6);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)3);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["Cr"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["Cl"],(unsigned int)3);
-  }
-  {
-    Formula formula("Mg3[Fe(CN)6]2");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)12);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["Mg"],(unsigned int)3);
-    CPPUNIT_ASSERT_EQUAL(formula["Fe"],(unsigned int)2);
-    CPPUNIT_ASSERT_EQUAL(formula["N"],(unsigned int)12);
-  }
-  {
-    Formula formula("Na[Fe((HO2CCH2)2NCH2CH2N(CH2CO2H)2)]");
-    CPPUNIT_ASSERT_EQUAL(formula["H"],(unsigned int)16);
-    CPPUNIT_ASSERT_EQUAL(formula["O"],(unsigned int)8);
-    CPPUNIT_ASSERT_EQUAL(formula["C"],(unsigned int)10);
-    CPPUNIT_ASSERT_EQUAL(formula["Na"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["He"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["Mg"],(unsigned int)0);
-    CPPUNIT_ASSERT_EQUAL(formula["Fe"],(unsigned int)1);
-    CPPUNIT_ASSERT_EQUAL(formula["N"],(unsigned int)2);
-  }
-  {
-    CPPUNIT_ASSERT_THROW(Formula formula("74107"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("  "),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("nAcL"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("NAcL"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("Na Cl"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("1NaCl"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("Mag"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("AgCl)"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("(Na"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("(Mag)"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("MgCl2)"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("((MgCl2)"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("(MgCl2))"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("(MgCl2]"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("[MgCl2)"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("N(aCl"),ParseError);
-    CPPUNIT_ASSERT_THROW(Formula formula("Na()Cl"),ParseError);
-  }
-
-
-}
Index: c/unittests/FormulaUnittest.hpp
===================================================================
--- src/unittests/FormulaUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,28 +1,0 @@
-/*
- * FormulaUnittest.hpp
- *
- *  Created on: Jul 21, 2010
- *      Author: crueger
- */
-
-#ifndef FORMULAUNITTEST_HPP_
-#define FORMULAUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class FormulaUnittest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( FormulaUnittest );
-  CPPUNIT_TEST ( baseTest );
-  CPPUNIT_TEST ( parseTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void baseTest();
-  void parseTest();
-};
-
-#endif /* FORMULAUNITTEST_HPP_ */
Index: c/unittests/LineUnittest.cpp
===================================================================
--- src/unittests/LineUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,416 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * LineUnittest.cpp
- *
- *  Created on: May 27, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "LineUnittest.hpp"
-
-#include "LinearAlgebra/Vector.hpp"
-#include "Exceptions/LinearDependenceException.hpp"
-#include "Exceptions/SkewException.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <iostream>
-#include <cmath>
-
-using namespace std;
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-CPPUNIT_TEST_SUITE_REGISTRATION( LineUnittest );
-
-void LineUnittest::setUp(){
-  // three lines along the axes
-  la1 = new Line(zeroVec,unitVec[0]);
-  la2 = new Line(zeroVec,unitVec[1]);
-  la3 = new Line(zeroVec,unitVec[2]);
-
-  // the lines along the planes defined by two coordinate axes
-  lp1 = new Line(unitVec[0],unitVec[0]-unitVec[1]);
-  lp2 = new Line(unitVec[1],unitVec[1]-unitVec[2]);
-  lp3 = new Line(unitVec[2],unitVec[2]-unitVec[0]);
-}
-void LineUnittest::tearDown(){
-  delete la1;
-  delete la2;
-  delete la3;
-
-  delete lp1;
-  delete lp2;
-  delete lp3;
-}
-
-void LineUnittest::constructionErrorTest(){
-  // test some constructions
-
-  // direction+origin should never fail
-  CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[0]));
-  CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[1]));
-  CPPUNIT_ASSERT_NO_THROW(Line(zeroVec,unitVec[2]));
-
-  // two points fails if both points are the same
-  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[0],unitVec[1]));
-  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[1],unitVec[2]));
-  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[2],unitVec[0]));
-  // for zerovectors
-  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[0],zeroVec));
-  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[1],zeroVec));
-  CPPUNIT_ASSERT_NO_THROW(makeLineThrough(unitVec[2],zeroVec));
-  // now we pass two times the same point
-  CPPUNIT_ASSERT_THROW(makeLineThrough(zeroVec,zeroVec),LinearDependenceException);
-  CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[0],unitVec[0]),LinearDependenceException);
-  CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[1],unitVec[1]),LinearDependenceException);
-  CPPUNIT_ASSERT_THROW(makeLineThrough(unitVec[2],unitVec[2]),LinearDependenceException);
-
-}
-
-bool testDirection(const Vector &dir1,const Vector &dir2){
-  return (dir1==dir2) || (dir1==-1*dir2);
-}
-
-void LineUnittest::constructionResultTest(){
-  // test all directions
-  CPPUNIT_ASSERT(testDirection(la1->getDirection(),unitVec[0]));
-  CPPUNIT_ASSERT(testDirection(la2->getDirection(),unitVec[1]));
-  CPPUNIT_ASSERT(testDirection(la3->getDirection(),unitVec[2]));
-
-  // test origins
-  CPPUNIT_ASSERT_EQUAL(la1->getOrigin(),zeroVec);
-  CPPUNIT_ASSERT_EQUAL(la2->getOrigin(),zeroVec);
-  CPPUNIT_ASSERT_EQUAL(la2->getOrigin(),zeroVec);
-
-  // test if desired points are on the lines
-  CPPUNIT_ASSERT(la1->isContained(zeroVec));
-  CPPUNIT_ASSERT(la2->isContained(zeroVec));
-  CPPUNIT_ASSERT(la3->isContained(zeroVec));
-
-  CPPUNIT_ASSERT(la1->isContained(unitVec[0]));
-  CPPUNIT_ASSERT(la2->isContained(unitVec[1]));
-  CPPUNIT_ASSERT(la3->isContained(unitVec[2]));
-
-  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]));
-  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]));
-  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]));
-
-  CPPUNIT_ASSERT(lp1->isContained(unitVec[1]));
-  CPPUNIT_ASSERT(lp2->isContained(unitVec[2]));
-  CPPUNIT_ASSERT(lp3->isContained(unitVec[0]));
-}
-
-void LineUnittest::isContainedTest(){
-  // Zerovector on the axes lines
-  CPPUNIT_ASSERT(la1->isContained(zeroVec));
-  CPPUNIT_ASSERT(la2->isContained(zeroVec));
-  CPPUNIT_ASSERT(la3->isContained(zeroVec));
-
-  // multiples of the second support vector
-  CPPUNIT_ASSERT(la1->isContained(unitVec[0]));
-  CPPUNIT_ASSERT(la2->isContained(unitVec[1]));
-  CPPUNIT_ASSERT(la3->isContained(unitVec[2]));
-
-  CPPUNIT_ASSERT(la1->isContained(2*unitVec[0]));
-  CPPUNIT_ASSERT(la2->isContained(2*unitVec[1]));
-  CPPUNIT_ASSERT(la3->isContained(2*unitVec[2]));
-
-  CPPUNIT_ASSERT(la1->isContained(3*unitVec[0]));
-  CPPUNIT_ASSERT(la2->isContained(3*unitVec[1]));
-  CPPUNIT_ASSERT(la3->isContained(3*unitVec[2]));
-
-  // negative multiples
-  CPPUNIT_ASSERT(la1->isContained(-1*unitVec[0]));
-  CPPUNIT_ASSERT(la2->isContained(-1*unitVec[1]));
-  CPPUNIT_ASSERT(la3->isContained(-1*unitVec[2]));
-
-  CPPUNIT_ASSERT(la1->isContained(-2*unitVec[0]));
-  CPPUNIT_ASSERT(la2->isContained(-2*unitVec[1]));
-  CPPUNIT_ASSERT(la3->isContained(-2*unitVec[2]));
-
-  // points that should not be on the lines
-  CPPUNIT_ASSERT(!la1->isContained(unitVec[1]));
-  CPPUNIT_ASSERT(!la2->isContained(unitVec[2]));
-  CPPUNIT_ASSERT(!la3->isContained(unitVec[0]));
-
-  CPPUNIT_ASSERT(!la1->isContained(2*unitVec[1]));
-  CPPUNIT_ASSERT(!la2->isContained(2*unitVec[2]));
-  CPPUNIT_ASSERT(!la3->isContained(2*unitVec[0]));
-
-  CPPUNIT_ASSERT(!la1->isContained(-1*unitVec[1]));
-  CPPUNIT_ASSERT(!la2->isContained(-1*unitVec[2]));
-  CPPUNIT_ASSERT(!la3->isContained(-1*unitVec[0]));
-
-  // For the plane lines
-  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]));
-  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]));
-  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]));
-
-  CPPUNIT_ASSERT(lp1->isContained(unitVec[1]));
-  CPPUNIT_ASSERT(lp2->isContained(unitVec[2]));
-  CPPUNIT_ASSERT(lp3->isContained(unitVec[0]));
-
-  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]+2*(unitVec[0]-unitVec[1])));
-  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]+2*(unitVec[1]-unitVec[2])));
-  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]+2*(unitVec[2]-unitVec[0])));
-
-  CPPUNIT_ASSERT(lp1->isContained(unitVec[0]-2*(unitVec[0]-unitVec[1])));
-  CPPUNIT_ASSERT(lp2->isContained(unitVec[1]-2*(unitVec[1]-unitVec[2])));
-  CPPUNIT_ASSERT(lp3->isContained(unitVec[2]-2*(unitVec[2]-unitVec[0])));
-}
-
-void LineUnittest::intersectionTest(){
-  Vector fixture;
-
-  // intersection of the axis lines
-  fixture = la1->getIntersection(*la2);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = la2->getIntersection(*la3);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = la3->getIntersection(*la1);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-
-  // axes and plane lines
-  fixture = la1->getIntersection(*lp1);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = la2->getIntersection(*lp2);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = la3->getIntersection(*lp3);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  fixture = la1->getIntersection(*lp3);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = la2->getIntersection(*lp1);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = la3->getIntersection(*lp2);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  // two plane lines
-  fixture = lp1->getIntersection(*lp2);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = lp2->getIntersection(*lp3);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-  fixture = lp3->getIntersection(*lp1);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-
-  // When we have two times the same line, we check if the point is on the line
-  fixture = la1->getIntersection(*la1);
-  CPPUNIT_ASSERT(la1->isContained(fixture));
-  fixture = la2->getIntersection(*la2);
-  CPPUNIT_ASSERT(la2->isContained(fixture));
-  fixture = la3->getIntersection(*la3);
-  CPPUNIT_ASSERT(la3->isContained(fixture));
-
-  fixture = lp1->getIntersection(*lp1);
-  CPPUNIT_ASSERT(lp1->isContained(fixture));
-  fixture = lp2->getIntersection(*lp2);
-  CPPUNIT_ASSERT(lp2->isContained(fixture));
-  fixture = lp3->getIntersection(*lp3);
-  CPPUNIT_ASSERT(lp3->isContained(fixture));
-
-  // lines that are askew should produce an Error
-  CPPUNIT_ASSERT_THROW(lp1->getIntersection(*la3),SkewException);
-  CPPUNIT_ASSERT_THROW(lp2->getIntersection(*la1),SkewException);
-  CPPUNIT_ASSERT_THROW(lp3->getIntersection(*la2),SkewException);
-
-  CPPUNIT_ASSERT_THROW(la1->getIntersection(*lp2),SkewException);
-  CPPUNIT_ASSERT_THROW(la2->getIntersection(*lp3),SkewException);
-  CPPUNIT_ASSERT_THROW(la3->getIntersection(*lp1),SkewException);
-}
-
-void LineUnittest::rotationTest(){
-  Vector fixture;
-
-  // rotate zero Vector along the axes lines by various degrees
-  fixture = la1->rotateVector(zeroVec,1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = la2->rotateVector(zeroVec,1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = la3->rotateVector(zeroVec,1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-
-  fixture = la1->rotateVector(zeroVec,2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = la2->rotateVector(zeroVec,2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = la3->rotateVector(zeroVec,2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-
-  // rotate vectors on the axis around their lines
-  fixture = la1->rotateVector(unitVec[0],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = la2->rotateVector(unitVec[1],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = la3->rotateVector(unitVec[2],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  fixture = la1->rotateVector(unitVec[0],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = la2->rotateVector(unitVec[1],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = la3->rotateVector(unitVec[2],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  // more vectors on the axis
-  fixture = la1->rotateVector(2*unitVec[0],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[0]);
-  fixture = la2->rotateVector(2*unitVec[1],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[1]);
-  fixture = la3->rotateVector(2*unitVec[2],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[2]);
-
-  fixture = la1->rotateVector(2*unitVec[0],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[0]);
-  fixture = la2->rotateVector(2*unitVec[1],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[1]);
-  fixture = la3->rotateVector(2*unitVec[2],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,2*unitVec[2]);
-
-  // negative factors
-  fixture = la1->rotateVector(-1*unitVec[0],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
-  fixture = la2->rotateVector(-1*unitVec[1],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
-  fixture = la3->rotateVector(-1*unitVec[2],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
-
-  fixture = la1->rotateVector(-1*unitVec[0],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
-  fixture = la2->rotateVector(-1*unitVec[1],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
-  fixture = la3->rotateVector(-1*unitVec[2],2.);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
-
-
-
-  // now the real rotations
-  // unitVec[1] around unitVec[0]
-  fixture = la1->rotateVector(unitVec[1],0);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = la1->rotateVector(unitVec[1],1./2.*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
-  fixture = la1->rotateVector(unitVec[1],M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
-  fixture = la1->rotateVector(unitVec[1],2*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-
-  // unitVec[2] around unitVec[1]
-  fixture = la2->rotateVector(unitVec[2],0);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-  fixture = la2->rotateVector(unitVec[2],1./2.*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
-  fixture = la2->rotateVector(unitVec[2],M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
-  fixture = la2->rotateVector(unitVec[2],2*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  // unitVec[0] around unitVec[2]
-  fixture = la3->rotateVector(unitVec[0],0);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = la3->rotateVector(unitVec[0],1./2.*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
-  fixture = la3->rotateVector(unitVec[0],M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
-  fixture = la3->rotateVector(unitVec[0],2*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-
-
-  // and some rotation around the plane lines
-
-  // Vectors on the line
-  fixture = lp1->rotateVector(unitVec[0],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = lp1->rotateVector(unitVec[1],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-
-  fixture = lp2->rotateVector(unitVec[1],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = lp2->rotateVector(unitVec[2],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  fixture = lp3->rotateVector(unitVec[2],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-  fixture = lp3->rotateVector(unitVec[0],1.);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-
-  // the real stuff
-  fixture = lp1->rotateVector(zeroVec,M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,Vector(1,1,0));
-  fixture = lp2->rotateVector(zeroVec,M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,Vector(0,1,1));
-  fixture = lp3->rotateVector(zeroVec,M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,Vector(1,0,1));
-
-  fixture = lp1->rotateVector(zeroVec,2*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = lp2->rotateVector(zeroVec,2*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = lp3->rotateVector(zeroVec,2*M_PI);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-}
-
-void LineUnittest::sphereIntersectionTest(){
-  {
-    std::vector<Vector> res = la1->getSphereIntersections();
-    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
-    CPPUNIT_ASSERT(testDirection(res[0],unitVec[0]));
-    CPPUNIT_ASSERT(testDirection(res[1],unitVec[0]));
-    CPPUNIT_ASSERT(res[0]!=res[1]);
-  }
-
-  {
-    std::vector<Vector> res = la2->getSphereIntersections();
-    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
-    CPPUNIT_ASSERT(testDirection(res[0],unitVec[1]));
-    CPPUNIT_ASSERT(testDirection(res[1],unitVec[1]));
-    CPPUNIT_ASSERT(res[0]!=res[1]);
-  }
-
-  {
-    std::vector<Vector> res = la3->getSphereIntersections();
-    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
-    CPPUNIT_ASSERT(testDirection(res[0],unitVec[2]));
-    CPPUNIT_ASSERT(testDirection(res[1],unitVec[2]));
-    CPPUNIT_ASSERT(res[0]!=res[1]);
-  }
-
-  {
-    std::vector<Vector> res = lp1->getSphereIntersections();
-    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
-    CPPUNIT_ASSERT((res[0]==unitVec[0]) || (res[0]==unitVec[1]));
-    CPPUNIT_ASSERT((res[1]==unitVec[0]) || (res[1]==unitVec[1]));
-    CPPUNIT_ASSERT(res[0]!=res[1]);
-  }
-
-  {
-    std::vector<Vector> res = lp2->getSphereIntersections();
-    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
-    CPPUNIT_ASSERT((res[0]==unitVec[1]) || (res[0]==unitVec[2]));
-    CPPUNIT_ASSERT((res[1]==unitVec[1]) || (res[1]==unitVec[2]));
-    CPPUNIT_ASSERT(res[0]!=res[1]);
-  }
-
-  {
-    std::vector<Vector> res = lp3->getSphereIntersections();
-    CPPUNIT_ASSERT_EQUAL(res.size(),(size_t)2);
-    CPPUNIT_ASSERT((res[0]==unitVec[2]) || (res[0]==unitVec[0]));
-    CPPUNIT_ASSERT((res[1]==unitVec[2]) || (res[1]==unitVec[0]));
-    CPPUNIT_ASSERT(res[0]!=res[1]);
-  }
-}
Index: c/unittests/LineUnittest.hpp
===================================================================
--- src/unittests/LineUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,48 +1,0 @@
-/*
- * LineUnittest.hpp
- *
- *  Created on: May 27, 2010
- *      Author: crueger
- */
-
-#ifndef LINEUNITTEST_HPP_
-#define LINEUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "LinearAlgebra/Line.hpp"
-
-class LineUnittest : public CppUnit::TestFixture
-{
-
-  CPPUNIT_TEST_SUITE( LineUnittest) ;
-  CPPUNIT_TEST ( constructionErrorTest );
-  CPPUNIT_TEST ( constructionResultTest );
-  CPPUNIT_TEST ( isContainedTest );
-  CPPUNIT_TEST ( intersectionTest );
-  CPPUNIT_TEST ( rotationTest );
-  CPPUNIT_TEST ( sphereIntersectionTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void constructionErrorTest();
-  void constructionResultTest();
-  void isContainedTest();
-  void intersectionTest();
-  void rotationTest();
-  void sphereIntersectionTest();
-
-private:
-  Line *la1;
-  Line *la2;
-  Line *la3;
-  Line *lp1;
-  Line *lp2;
-  Line *lp3;
-
-};
-
-#endif /* LINEUNITTEST_HPP_ */
Index: src/unittests/LinkedCellUnitTest.cpp
===================================================================
--- src/unittests/LinkedCellUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/unittests/LinkedCellUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -33,6 +33,7 @@
 #include "molecule.hpp"
 #include "periodentafel.hpp"
+#include "World.hpp"
+
 #include "LinkedCellUnitTest.hpp"
-#include "World.hpp"
 
 #ifdef HAVE_TESTRUNNER
Index: src/unittests/ListOfBondsUnitTest.cpp
===================================================================
--- src/unittests/ListOfBondsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/ListOfBondsUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,293 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * ListOfBondsUnitTest.cpp
+ *
+ *  Created on: 18 Oct 2009
+ *      Author: user
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cstring>
+
+
+#include "World.hpp"
+#include "atom.hpp"
+#include "bond.hpp"
+#include "element.hpp"
+#include "molecule.hpp"
+#include "periodentafel.hpp"
+#include "World.hpp"
+
+#include "ListOfBondsUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ListOfBondsTest );
+
+
+void ListOfBondsTest::setUp()
+{
+  atom *Walker = NULL;
+
+  // construct element
+  hydrogen = World::getInstance().getPeriode()->FindElement(1);
+  CPPUNIT_ASSERT(hydrogen != NULL && "could not find element hydrogen");
+
+  // construct molecule (tetraeder of hydrogens)
+  TestMolecule = World::getInstance().createMolecule();
+  CPPUNIT_ASSERT(TestMolecule != NULL && "could not create molecule");
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(1., 0., 1. ));
+  TestMolecule->AddAtom(Walker);
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(0., 1., 1. ));
+  TestMolecule->AddAtom(Walker);
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(1., 1., 0. ));
+  TestMolecule->AddAtom(Walker);
+  Walker = World::getInstance().createAtom();
+  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
+  Walker->setType(hydrogen);
+  Walker->setPosition(Vector(0., 0., 0. ));
+  TestMolecule->AddAtom(Walker);
+
+  // check that TestMolecule was correctly constructed
+  CPPUNIT_ASSERT_EQUAL( TestMolecule->getAtomCount(), 4 );
+};
+
+
+void ListOfBondsTest::tearDown()
+{
+  // remove
+  World::getInstance().destroyMolecule(TestMolecule);
+  // note that all the atoms, molecules, the tafel and the elements
+  // are all cleaned when the world is destroyed
+  World::purgeInstance();
+  logger::purgeInstance();
+};
+
+/** Tests whether setup worked correctly.
+ *
+ */
+void ListOfBondsTest::SetupTest()
+{
+  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->empty() );
+  CPPUNIT_ASSERT_EQUAL( (size_t)4, TestMolecule->size() );
+};
+
+/** Unit Test of molecule::AddBond()
+ *
+ */
+void ListOfBondsTest::AddingBondTest()
+{
+  bond *Binder = NULL;
+  molecule::iterator iter = TestMolecule->begin();
+  atom *atom1 = *iter;
+  iter++;
+  atom *atom2 = *iter;
+  CPPUNIT_ASSERT( atom1 != NULL );
+  CPPUNIT_ASSERT( atom2 != NULL );
+
+  // add bond
+  Binder = TestMolecule->AddBond(atom1, atom2, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+  CPPUNIT_ASSERT_EQUAL ( true, TestMolecule->hasBondStructure() );
+
+  // check that bond contains the two atoms
+  CPPUNIT_ASSERT_EQUAL( true, Binder->Contains(atom1) );
+  CPPUNIT_ASSERT_EQUAL( true, Binder->Contains(atom2) );
+
+  // check that bond is present in both atoms
+  bond *TestBond1 = *(atom1->ListOfBonds.begin());
+  CPPUNIT_ASSERT_EQUAL( TestBond1, Binder );
+  bond *TestBond2 = *(atom2->ListOfBonds.begin());
+  CPPUNIT_ASSERT_EQUAL( TestBond2, Binder );
+};
+
+/** Unit Test of molecule::RemoveBond()
+ *
+ */
+void ListOfBondsTest::RemovingBondTest()
+{
+  bond *Binder = NULL;
+  molecule::iterator iter = TestMolecule->begin();
+  atom *atom1 = *iter;
+  iter++;
+  atom *atom2 = *iter;
+  CPPUNIT_ASSERT( atom1 != NULL );
+  CPPUNIT_ASSERT( atom2 != NULL );
+
+  // add bond
+  Binder = TestMolecule->AddBond(atom1, atom2, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+
+  // remove bond
+  TestMolecule->RemoveBond(Binder);
+
+  // check if removed from atoms
+  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
+  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom2->ListOfBonds.size() );
+
+  // check if removed from molecule
+  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
+};
+
+/** Unit Test of molecule::RemoveBonds()
+ *
+ */
+void ListOfBondsTest::RemovingBondsTest()
+{
+  bond *Binder = NULL;
+  molecule::iterator iter = TestMolecule->begin();
+  atom *atom1 = *iter;
+  iter++;
+  atom *atom2 = *iter;
+  iter++;
+  atom *atom3 = *iter;
+  CPPUNIT_ASSERT( atom1 != NULL );
+  CPPUNIT_ASSERT( atom2 != NULL );
+  CPPUNIT_ASSERT( atom3 != NULL );
+
+  // add bond
+  Binder = TestMolecule->AddBond(atom1, atom2, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+  Binder = TestMolecule->AddBond(atom1, atom3, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+  Binder = TestMolecule->AddBond(atom2, atom3, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+
+  // check that all are present
+  CPPUNIT_ASSERT_EQUAL( (size_t) 2, atom1->ListOfBonds.size() );
+  CPPUNIT_ASSERT_EQUAL( (size_t) 2, atom2->ListOfBonds.size() );
+  CPPUNIT_ASSERT_EQUAL( (size_t) 2, atom3->ListOfBonds.size() );
+
+  // remove bond
+  TestMolecule->RemoveBonds(atom1);
+
+  // check if removed from atoms
+  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
+  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom2->ListOfBonds.size() );
+  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom3->ListOfBonds.size() );
+
+  // check if removed from molecule
+  CPPUNIT_ASSERT_EQUAL( true, TestMolecule->hasBondStructure() );
+  CPPUNIT_ASSERT_EQUAL( (unsigned int)1, TestMolecule->CountBonds() );
+};
+
+/** Unit Test of delete(bond *)
+ *
+ */
+void ListOfBondsTest::DeleteBondTest()
+{
+  bond *Binder = NULL;
+  molecule::iterator iter = TestMolecule->begin();
+  atom *atom1 = *iter;
+  iter++;
+  atom *atom2 = *iter;
+  CPPUNIT_ASSERT( atom1 != NULL );
+  CPPUNIT_ASSERT( atom2 != NULL );
+
+  // add bond
+  Binder = TestMolecule->AddBond(atom1, atom2, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+
+  // remove bond
+  delete(Binder);
+
+  // check if removed from atoms
+  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
+  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom2->ListOfBonds.size() );
+
+  // check if removed from molecule
+  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
+};
+
+/** Unit Test of molecule::RemoveAtom()
+ *
+ */
+void ListOfBondsTest::RemoveAtomTest()
+{
+  bond *Binder = NULL;
+  molecule::iterator iter = TestMolecule->begin();
+  atom *atom1 = *iter;
+  iter++;
+  atom *atom2 = *iter;
+  CPPUNIT_ASSERT( atom1 != NULL );
+  CPPUNIT_ASSERT( atom2 != NULL );
+
+  // add bond
+  Binder = TestMolecule->AddBond(atom1, atom2, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+
+  // remove atom2
+  TestMolecule->RemoveAtom(atom2);
+
+  // check bond if removed from other atom
+  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
+
+  // check if removed from molecule
+  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
+};
+
+/** Unit Test of delete(atom *)
+ *
+ */
+void ListOfBondsTest::DeleteAtomTest()
+{
+  atom *atom1 = NULL;
+  atom *atom2 = NULL;
+  bond *Binder = NULL;
+  {
+    molecule::iterator iter = TestMolecule->begin();
+    atom1 = *iter;
+    iter++;
+    atom2 = *iter;
+  }
+  CPPUNIT_ASSERT( atom1 != NULL );
+  CPPUNIT_ASSERT( atom2 != NULL );
+
+  // add bond
+  Binder = TestMolecule->AddBond(atom1, atom2, 1);
+  CPPUNIT_ASSERT( Binder != NULL );
+
+  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom1->ListOfBonds.size() );
+  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom2->ListOfBonds.size() );
+
+  CPPUNIT_ASSERT_EQUAL( true, TestMolecule->hasBondStructure() );
+
+  // remove atom2
+  World::getInstance().destroyAtom(atom2);
+
+  // check bond if removed from other atom
+  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
+
+  // check if removed from molecule
+  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
+};
Index: src/unittests/ListOfBondsUnitTest.hpp
===================================================================
--- src/unittests/ListOfBondsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/ListOfBondsUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,49 @@
+/*
+ * ListOfBondsUnitTest.hpp
+ *
+ *  Created on: 18 Oct 2009
+ *      Author: user
+ */
+
+#ifndef LISTOFBONDSUNITTEST_HPP_
+#define LISTOFBONDSUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class element;
+class molecule;
+class periodentafel;
+
+/********************************************** Test classes **************************************/
+
+class ListOfBondsTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( ListOfBondsTest) ;
+    CPPUNIT_TEST ( SetupTest );
+    CPPUNIT_TEST ( AddingBondTest );
+    CPPUNIT_TEST ( RemovingBondTest );
+    CPPUNIT_TEST ( RemovingBondsTest );
+    CPPUNIT_TEST ( RemoveAtomTest );
+    CPPUNIT_TEST ( DeleteBondTest );
+    CPPUNIT_TEST ( DeleteAtomTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void SetupTest();
+      void AddingBondTest();
+      void RemovingBondTest();
+      void RemovingBondsTest();
+      void RemoveAtomTest();
+      void DeleteBondTest();
+      void DeleteAtomTest();
+
+private:
+
+      molecule *TestMolecule;
+      const element *hydrogen;
+};
+
+
+#endif /* LISTOFBONDSUNITTEST_HPP_ */
Index: src/unittests/Makefile.am
===================================================================
--- src/unittests/Makefile.am	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ src/unittests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -1,4 +1,13 @@
 # PLEASE adhere to the alphabetical ordering in this Makefile!
 # Also indentation by a single tab
+
+SUBDIRS = \
+	../Actions/unittests \
+	../Descriptors/unittests \
+	../Helpers/unittests \
+	../LinearAlgebra/unittests \
+	../Parser/unittests \
+	../Patterns/unittests \
+	../UIElements/Menu/unittests
 
 INCLUDES = -I$(top_srcdir)/src
@@ -9,43 +18,19 @@
 
 TESTS = \
-  ActionSequenceTest \
-  ActOnAllUnitTest \
-  AnalysisBondsUnitTests \
+  AnalysisBondsUnitTest \
   AnalysisCorrelationToPointUnitTest \
   AnalysisCorrelationToSurfaceUnitTest \
   AnalysisPairCorrelationUnitTest \
-  atomsCalculationTest \
-  AtomDescriptorTest \
   BondGraphUnitTest \
-  BoxUnittest \
-  CacheableTest \
+  BoxUnitTest \
   CountBondsUnitTest \
   FormulaUnittest \
-  InfoUnitTest \
-  LinearSystemOfEquationsUnitTest \
-  LineUnittest \
   LinkedCellUnitTest \
   ListOfBondsUnitTest \
-  LogUnitTest \
-  manipulateAtomsTest \
-  MatrixContentSymmetricUnitTest \
-  MatrixContentUnitTest \
-  MatrixUnittest \
-  MenuDescriptionUnitTest \
-  MoleculeDescriptorTest \
-  ObserverTest \
-  ParserCommonUnitTest \
-  ParserTremoloUnitTest \
-  periodentafelTest \
-  PlaneUnittest \
-  Registry \
-  ShapeUnittest \
-  SingletonTest \
+  PeriodentafelUnitTest \
   SubspaceFactorizerUnitTest \
   TesselationUnitTest \
   Tesselation_BoundaryTriangleUnitTest \
-  Tesselation_InOutsideUnitTest \
-  VectorContentUnitTest \
-  VectorUnitTest
+  Tesselation_InOutsideUnitTest
 
 
@@ -70,192 +55,160 @@
 
 TESTSOURCES = \
-  ActOnAllUnitTest.cpp \
-  ActionSequenceTest.cpp \
-  analysisbondsunittest.cpp \
+  ../Actions/unittests/ActionRegistryUnitTest.cpp \
+  ../Actions/unittests/ActionSequenceUnitTest.cpp \
+  AnalysisBondsUnitTest.cpp \
   AnalysisCorrelationToPointUnitTest.cpp \
   AnalysisCorrelationToSurfaceUnitTest.cpp  \
   AnalysisPairCorrelationUnitTest.cpp \
-  AtomDescriptorTest.cpp \
-  atomsCalculationTest.cpp \
-  bondgraphunittest.cpp \
-  BoxUnittest.cpp \
-  CacheableTest.cpp \
+  ../Descriptors/unittests/AtomDescriptorUnitTest.cpp \
+  ../Actions/unittests/AtomsCalculationUnitTest.cpp \
+  BondGraphUnitTest.cpp \
+  BoxUnitTest.cpp \
+  ../Patterns/unittests/CacheableUnitTest.cpp \
   CountBondsUnitTest.cpp \
-  FormulaUnittest.cpp \
-  infounittest.cpp \
-  linearsystemofequationsunittest.cpp \
-  LineUnittest.cpp \
+  FormulaUnitTest.cpp \
+  ../Helpers/unittests/InfoUnitTest.cpp \
+  ../LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.cpp \
+  ../LinearAlgebra/unittests/LineUnitTest.cpp \
   LinkedCellUnitTest.cpp \
-  listofbondsunittest.cpp \
-  logunittest.cpp \
-  MatrixContentSymmetricUnittest.cpp \
-  MatrixContentUnittest.cpp \
-  MatrixUnittest.cpp \
-  manipulateAtomsTest.cpp \
-  MenuDescriptionUnitTest.cpp \
-  MoleculeDescriptorTest.cpp \
-  ObserverTest.cpp \
-  ParserCommonUnitTest.cpp \
-  ParserTremoloUnitTest.cpp \
-  periodentafelTest.cpp \
-  PlaneUnittest.cpp \
-  RegistryUnitTest.cpp \
-  ShapeUnittest.cpp \
-  SingletonTest.cpp \
-  tesselationunittest.cpp \
-  tesselation_boundarytriangleunittest.cpp \
-  tesselation_insideoutsideunittest.cpp \
-  VectorContentUnittest.cpp \
-  vectorunittest.cpp
+  ListOfBondsUnitTest.cpp \
+  ../Helpers/unittests/LogUnitTest.cpp \
+  ../Actions/unittests/ManipulateAtomsUnitTest.cpp \
+  ../LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.cpp \
+  ../LinearAlgebra/unittests/MatrixContentUnitTest.cpp \
+  ../LinearAlgebra/unittests/MatrixUnitTest.cpp \
+  ../UIElements/Menu/unittests/MenuDescriptionUnitTest.cpp \
+  ../Descriptors/unittests/MoleculeDescriptorUnitTest.cpp \
+  ../Patterns/unittests/ObserverUnitTest.cpp \
+  ../Parser/unittests/ParserCommonUnitTest.cpp \
+  ../Parser/unittests/ParserTremoloUnitTest.cpp \
+  PeriodentafelUnitTest.cpp \
+  ../LinearAlgebra/unittests/PlaneUnitTest.cpp \
+  ../Patterns/unittests/RegistryUnitTest.cpp \
+  ../Shapes/unittests/ShapeUnitTest.cpp \
+  ../Patterns/unittests/SingletonUnitTest.cpp \
+  TesselationUnitTest.cpp \
+  Tesselation_BoundaryTriangleUnitTest.cpp \
+  Tesselation_InsideOutsideUnitTest.cpp \
+  ../LinearAlgebra/unittests/VectorContentUnitTest.cpp \
+  ../LinearAlgebra/unittests/VectorUnitTest.cpp
 
 TESTHEADERS = \
-  ActOnAllUnitTest.hpp \
-  ActionSequenceTest.hpp \
-  analysisbondsunittest.hpp \
+  ../Actions/unittests/ActionRegistryUnitTest.hpp \
+  ../Actions/unittests/ActionSequenceUnitTest.hpp \
+  AnalysisBondsUnitTest.hpp \
   AnalysisCorrelationToPointUnitTest.hpp \
   AnalysisCorrelationToSurfaceUnitTest.hpp  \
   AnalysisPairCorrelationUnitTest.hpp \
-  AtomDescriptorTest.hpp \
-  atomsCalculationTest.hpp \
-  bondgraphunittest.hpp \
-  BoxUnittest.hpp \
-  CacheableTest.hpp \
+  ../Descriptors/unittests/AtomDescriptorUnitTest.hpp \
+  ../Actions/unittests/AtomsCalculationUnitTest.hpp \
+  BondGraphUnitTest.hpp \
+  BoxUnitTest.hpp \
+  ../Patterns/unittests/CacheableUnitTest.hpp \
   CountBondsUnitTest.hpp \
-  FormulaUnittest.hpp \
-  infounittest.hpp \
-  linearsystemofequationsunittest.hpp \
-  LineUnittest.hpp \
+  FormulaUnitTest.hpp \
+  ../Helpers/unittests/InfoUnitTest.hpp \
+  ../LinearAlgebra/unittests/LinearSystemOfEquationsUnitTest.hpp \
+  ../LinearAlgebra/unittests/LineUnitTest.hpp \
   LinkedCellUnitTest.hpp \
-  listofbondsunittest.hpp \
-  logunittest.hpp \
-  manipulateAtomsTest.hpp \
-  MatrixContentSymmetricUnittest.hpp \
-  MatrixContentUnittest.hpp \
-  MatrixUnittest.hpp \
-  MenuDescriptionUnitTest.hpp \
-  MoleculeDescriptorTest.hpp \
-  ObserverTest.hpp \
-  periodentafelTest.hpp \
-  ParserCommonUnitTest.hpp \
-  ParserTremoloUnitTest.hpp \
-  PlaneUnittest.hpp \
-  RegistryUnitTest.hpp \
-  SingletonTest.hpp \
-  tesselationunittest.hpp \
-  tesselation_boundarytriangleunittest.hpp \
-  tesselation_insideoutsideunittest.hpp \
-  VectorContentUnittest.hpp \
-  vectorunittest.hpp
+  ListOfBondsUnitTest.hpp \
+  ../Helpers/unittests/LogUnitTest.hpp \
+  ../Actions/unittests/ManipulateAtomsUnitTest.hpp \
+  ../LinearAlgebra/unittests/MatrixContentSymmetricUnitTest.hpp \
+  ../LinearAlgebra/unittests/MatrixContentUnitTest.hpp \
+  ../LinearAlgebra/unittests/MatrixUnitTest.hpp \
+  ../UIElements/Menu/unittests/MenuDescriptionUnitTest.hpp \
+  ../Descriptors/unittests/MoleculeDescriptorUnitTest.hpp \
+  ../Patterns/unittests/ObserverUnitTest.hpp \
+  ../Parser/unittests/ParserCommonUnitTest.hpp \
+  ../Parser/unittests/ParserTremoloUnitTest.hpp \
+  PeriodentafelUnitTest.hpp \
+  ../LinearAlgebra/unittests/PlaneUnitTest.hpp \
+  ../Patterns/unittests/RegistryUnitTest.hpp \
+  ../Shapes/unittests/ShapeUnitTest.hpp \
+  ../Patterns/unittests/SingletonUnitTest.hpp \
+  TesselationUnitTest.hpp \
+  Tesselation_BoundaryTriangleUnitTest.hpp \
+  Tesselation_InsideOutsideUnitTest.hpp \
+  ../LinearAlgebra/unittests/VectorContentUnitTest.hpp \
+  ../LinearAlgebra/unittests/VectorUnitTest.hpp
   
 
-ActionSequenceTest_SOURCES = UnitTestMain.cpp ActionSequenceTest.cpp ActionSequenceTest.hpp
-ActionSequenceTest_LDADD = ${UILIBS} ${ALLLIBS}
-
-ActOnAllUnitTest_SOURCES = UnitTestMain.cpp ../test/ActOnAllTest.hpp ActOnAllUnitTest.cpp ActOnAllUnitTest.hpp
-ActOnAllUnitTest_LDADD = ${ALLLIBS}
-
-AnalysisBondsUnitTests_SOURCES = UnitTestMain.cpp analysisbondsunittest.cpp analysisbondsunittest.hpp
-AnalysisBondsUnitTests_LDADD = ${ALLLIBS}
-
-AnalysisCorrelationToPointUnitTest_SOURCES = UnitTestMain.cpp analysis_correlation.hpp AnalysisCorrelationToPointUnitTest.cpp AnalysisCorrelationToPointUnitTest.hpp
+AnalysisBondsUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	AnalysisBondsUnitTest.cpp \
+	AnalysisBondsUnitTest.hpp
+AnalysisBondsUnitTest_LDADD = ${ALLLIBS}
+
+AnalysisCorrelationToPointUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	analysis_correlation.hpp \
+	AnalysisCorrelationToPointUnitTest.cpp \
+	AnalysisCorrelationToPointUnitTest.hpp
 AnalysisCorrelationToPointUnitTest_LDADD = ${ALLLIBS}
 
-AnalysisCorrelationToSurfaceUnitTest_SOURCES = UnitTestMain.cpp analysis_correlation.hpp AnalysisCorrelationToSurfaceUnitTest.cpp AnalysisCorrelationToSurfaceUnitTest.hpp
+AnalysisCorrelationToSurfaceUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	analysis_correlation.hpp \
+	AnalysisCorrelationToSurfaceUnitTest.cpp \
+	AnalysisCorrelationToSurfaceUnitTest.hpp
 AnalysisCorrelationToSurfaceUnitTest_LDADD = ${ALLLIBS}
 
-AnalysisPairCorrelationUnitTest_SOURCES = UnitTestMain.cpp analysis_correlation.hpp AnalysisPairCorrelationUnitTest.cpp AnalysisPairCorrelationUnitTest.hpp
+AnalysisPairCorrelationUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	analysis_correlation.hpp \
+	AnalysisPairCorrelationUnitTest.cpp \
+	AnalysisPairCorrelationUnitTest.hpp
 AnalysisPairCorrelationUnitTest_LDADD = ${ALLLIBS}
 
-atomsCalculationTest_SOURCES = UnitTestMain.cpp atomsCalculationTest.cpp atomsCalculationTest.hpp
-atomsCalculationTest_LDADD = ${ALLLIBS}
-
-AtomDescriptorTest_SOURCES = UnitTestMain.cpp AtomDescriptorTest.cpp AtomDescriptorTest.hpp
-AtomDescriptorTest_LDADD = ${ALLLIBS}
-
-BondGraphUnitTest_SOURCES = UnitTestMain.cpp bondgraphunittest.cpp bondgraphunittest.hpp
+BondGraphUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	BondGraphUnitTest.cpp \
+	BondGraphUnitTest.hpp
 BondGraphUnitTest_LDADD = ${ALLLIBS}
 
-BoxUnittest_SOURCES = UnitTestMain.cpp BoxUnittest.cpp BoxUnittest.hpp
-BoxUnittest_LDADD = ${ALLLIBS}
-
-CacheableTest_SOURCES = UnitTestMain.cpp CacheableTest.cpp CacheableTest.hpp
-CacheableTest_LDADD = ${ALLLIBS}
-
-CountBondsUnitTest_SOURCES = UnitTestMain.cpp CountBondsUnitTest.cpp CountBondsUnitTest.hpp
+BoxUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	BoxUnitTest.cpp \
+	BoxUnitTest.hpp
+BoxUnitTest_LDADD = ${ALLLIBS}
+
+CountBondsUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	CountBondsUnitTest.cpp \
+	CountBondsUnitTest.hpp
 CountBondsUnitTest_LDADD = ${ALLLIBS}
 
-FormulaUnittest_SOURCES = UnitTestMain.cpp FormulaUnittest.cpp FormulaUnittest.hpp
+FormulaUnittest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	FormulaUnitTest.cpp \
+	FormulaUnitTest.hpp
 FormulaUnittest_LDADD = ${ALLLIBS}
 
-MatrixContentSymmetricUnitTest_SOURCES = UnitTestMain.cpp MatrixContentSymmetricUnittest.cpp MatrixContentSymmetricUnittest
-MatrixContentSymmetricUnitTest_LDADD = ${ALLLIBS}
-
-MatrixContentUnitTest_SOURCES = UnitTestMain.cpp MatrixContentUnittest.cpp MatrixContentUnittest.hpp
-MatrixContentUnitTest_LDADD = ${ALLLIBS}
-
-InfoUnitTest_SOURCES = UnitTestMain.cpp infounittest.cpp infounittest.hpp
-InfoUnitTest_LDADD = ${ALLLIBS}
-
-LinearSystemOfEquationsUnitTest_SOURCES = UnitTestMain.cpp linearsystemofequationsunittest.cpp linearsystemofequationsunittest.hpp
-LinearSystemOfEquationsUnitTest_LDADD = ${ALLLIBS}
-
-LineUnittest_SOURCES = UnitTestMain.cpp LineUnittest.cpp LineUnittest.hpp
-LineUnittest_LDADD = ${ALLLIBS}
-
-LinkedCellUnitTest_SOURCES = UnitTestMain.cpp LinkedCellUnitTest.cpp LinkedCellUnitTest.hpp
+LinkedCellUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	LinkedCellUnitTest.cpp \
+	LinkedCellUnitTest.hpp
 LinkedCellUnitTest_LDADD = ${ALLLIBS}
 
-ListOfBondsUnitTest_SOURCES = UnitTestMain.cpp listofbondsunittest.cpp listofbondsunittest.hpp
+ListOfBondsUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	ListOfBondsUnitTest.cpp \
+	ListOfBondsUnitTest.hpp 
 ListOfBondsUnitTest_LDADD = ${ALLLIBS}
 
-LogUnitTest_SOURCES = UnitTestMain.cpp logunittest.cpp logunittest.hpp
-LogUnitTest_LDADD = ${ALLLIBS}
-
-manipulateAtomsTest_SOURCES = UnitTestMain.cpp manipulateAtomsTest.cpp manipulateAtomsTest.hpp
-manipulateAtomsTest_LDADD = ${UILIBS} ${ALLLIBS}
-
-MatrixUnittest_SOURCES = UnitTestMain.cpp MatrixUnittest.cpp MatrixUnittest.hpp
-MatrixUnittest_LDADD = ${ALLLIBS}
-
-MenuDescriptionUnitTest_SOURCES = UnitTestMain.cpp MenuDescriptionUnitTest.cpp   MenuDescriptionUnitTest.hpp
-MenuDescriptionUnitTest_LDADD = ${ALLLIBS}
-
-MoleculeDescriptorTest_SOURCES = UnitTestMain.cpp MoleculeDescriptorTest.cpp MoleculeDescriptorTest.hpp
-MoleculeDescriptorTest_LDADD = ${ALLLIBS}
-
-ObserverTest_SOURCES = UnitTestMain.cpp ObserverTest.cpp ObserverTest.hpp
-ObserverTest_LDADD = ${ALLLIBS}
-
-ParserCommonUnitTest_SOURCES = UnitTestMain.cpp ParserCommonUnitTest.cpp ParserCommonUnitTest.hpp
-ParserCommonUnitTest_LDADD = ${ALLLIBS}
-
-ParserTremoloUnitTest_SOURCES = UnitTestMain.cpp ParserTremoloUnitTest.cpp ParserTremoloUnitTest.hpp
-ParserTremoloUnitTest_LDADD = ${ALLLIBS}
-
-periodentafelTest_SOURCES = UnitTestMain.cpp periodentafelTest.cpp periodentafelTest.hpp
-periodentafelTest_LDADD = ${ALLLIBS}
-
-PlaneUnittest_SOURCES = UnitTestMain.cpp PlaneUnittest.cpp PlaneUnittest.hpp
-PlaneUnittest_LDADD = ${ALLLIBS}
-
-Registry_SOURCES = UnitTestMain.cpp RegistryUnitTest.cpp RegistryUnitTest.hpp
-Registry_LDADD = ${ALLLIBS}
-
-ShapeUnittest_SOURCES = UnitTestMain.cpp ShapeUnittest.cpp ShapeUnittest.hpp
-ShapeUnittest_LDADD = ${ALLLIBS}
-
-SingletonTest_SOURCES = UnitTestMain.cpp SingletonTest.cpp SingletonTest.hpp
-SingletonTest_LDADD = ${ALLLIBS} $(BOOST_LIB) ${BOOST_THREAD_LIB}
-
-SubspaceFactorizerUnitTest_SOURCES = UnitTestMain.cpp SubspaceFactorizerUnittest.cpp SubspaceFactorizerUnittest.hpp
+PeriodentafelUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	PeriodentafelUnitTest.cpp \
+	PeriodentafelUnitTest.hpp
+PeriodentafelUnitTest_LDADD = ${ALLLIBS}
+
+SubspaceFactorizerUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	SubspaceFactorizerUnitTest.cpp \
+	SubspaceFactorizerUnitTest.hpp
 SubspaceFactorizerUnitTest_LDADD = ${GSLLIBS}
 
-TesselationUnitTest_SOURCES = UnitTestMain.cpp tesselationunittest.cpp tesselationunittest.hpp
+TesselationUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	TesselationUnitTest.cpp \
+	TesselationUnitTest.hpp
 TesselationUnitTest_LDADD = ${ALLLIBS}
 
-Tesselation_BoundaryTriangleUnitTest_SOURCES = UnitTestMain.cpp tesselation_boundarytriangleunittest.cpp tesselation_boundarytriangleunittest.hpp
+Tesselation_BoundaryTriangleUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	Tesselation_BoundaryTriangleUnitTest.cpp \
+	Tesselation_BoundaryTriangleUnitTest.hpp 
 Tesselation_BoundaryTriangleUnitTest_LDADD = ${ALLLIBS}
 
-Tesselation_InOutsideUnitTest_SOURCES = UnitTestMain.cpp tesselation_insideoutsideunittest.cpp tesselation_insideoutsideunittest.hpp
+Tesselation_InOutsideUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	Tesselation_InsideOutsideUnitTest.cpp \
+	Tesselation_InsideOutsideUnitTest.hpp
 Tesselation_InOutsideUnitTest_LDADD = ${ALLLIBS}
 
@@ -263,9 +216,3 @@
 TestRunner_LDADD = ${UILIBS} ${ALLLIBS}
 
-VectorContentUnitTest_SOURCES = UnitTestMain.cpp VectorContentUnittest.cpp VectorContentUnittest.hpp
-VectorContentUnitTest_LDADD = ${ALLLIBS}
-
-VectorUnitTest_SOURCES = UnitTestMain.cpp vectorunittest.cpp vectorunittest.hpp 
-VectorUnitTest_LDADD = ${ALLLIBS}
-
 #AUTOMAKE_OPTIONS = parallel-tests
Index: c/unittests/MapofActionsTest.cpp
===================================================================
--- src/unittests/MapofActionsTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,77 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * analysisbondsunittest.cpp
- *
- *  Created on: Nov 7, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <iostream>
-#include <stdio.h>
-#include <cstring>
-
-#include "MapOfActionsTest.hpp"
-#include "Actions/MapOfActions.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MapOfActionsTest );
-
-
-void MapOfActionsTest::setUp()
-{
-  MapOfActions *ActionData = MapOfActions::getInstance();
-};
-
-
-void MapOfActionsTest::tearDown()
-{
-  // note that all the atoms are cleaned by TestMolecule
-  MapOfActions::purgeInstance();
-};
-
-/** UnitTest: check whether each short form action also has a description (the other way round is not always true)
- */
-void MapOfActionsTest::ShortFormConsistencyTest()
-{
-  for (map<string, string>::iterator ShortFormRunner = ActionData->ShortFormMap.begin(); ShortFormRunner = ActionData->ShortFormMap.begin(); ++ShortFormRunner) {
-    CPPUNIT_ASSERT( ActionData->DescriptionMap.find(ShortFormRunner->first) != ActionData->DescriptionMap.end() && "There is a short form without description.");
-  }
-};
-
-/** UnitTest: check whether each action appears in a list one of the option lists
- */
-void MapOfActionsTest::OptionsListsConsistencyTest()
-{
-  bool haveFound = false;
-  for (map<string, string>::iterator ActionRunner = ActionData->DescriptionMap.begin(); ShortFormRunner = ActionData->DescriptionMap.begin(); ++ShortFormRunner) {
-    haveFound = haveFound || (ActionData->generic.find(ActionRunner->first) != ActionData->generic.end());
-    haveFound = haveFound || (ActionData->config.find(ActionRunner->first) != ActionData->config.end());
-    haveFound = haveFound || (ActionData->hidden.find(ActionRunner->first) != ActionData->hidden.end());
-    haveFound = haveFound || (ActionData->visible.find(ActionRunner->first) != ActionData->visible.end());
-    CPPUNIT_ASSERT_EQUAL( true , haveFound);
-  }
-};
-
Index: c/unittests/MapofActionsTest.hpp
===================================================================
--- src/unittests/MapofActionsTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,37 +1,0 @@
-/*
- * analysisbondsunittest.hpp
- *
- *  Created on: Nov 7, 2009
- *      Author: heber
- */
-
-#ifndef MAPOFACTIONS_HPP_
-#define MAPOFACTIONS_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class BondGraph;
-class element;
-class molecule;
-class periodentafel;
-
-/********************************************** Test classes **************************************/
-
-class MapOfActionsTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MapOfActionsTest) ;
-    CPPUNIT_TEST ( ShortFormConsistencyTest );
-    CPPUNIT_TEST ( OptionsListsConsistencyTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void ShortFormConsistencyTest();
-      void OptionsListsConsistencyTest();
-
-private:
-
-      MapOfActions *ActionData;
-
-#endif /* MAPOFACTIONS_HPP_ */
Index: c/unittests/MatrixContentSymmetricUnittest.cpp
===================================================================
--- src/unittests/MatrixContentSymmetricUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,285 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MatrixContentSymmetricUnittest.cpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "MatrixContentSymmetricUnittest.hpp"
-
-#include "LinearAlgebra/MatrixContent.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MatrixContentSymmetricTest );
-
-
-void MatrixContentSymmetricTest::setUp()
-{
-  m = new MatrixContent(3,3);
-};
-
-void MatrixContentSymmetricTest::tearDown()
-{
-  delete(m);
-};
-
-/** Unit Test for accessing matrix elements.
- *
- */
-void MatrixContentSymmetricTest::AccessTest()
-{
-  // check whether all elements are initially zero
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
-
-  // set
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, i*3+j );
-
-  // and check
-  double *ptr = NULL;
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++) {
-      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), m->at(i,j) );
-      ptr = m->Pointer(i,j);
-      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), *ptr );
-    }
-
-  // assignment
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, i*3+j );
-  MatrixContent *dest = new MatrixContent(3,3);
-  *dest = *m;
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( dest->at(i,j), m->at(i,j) );
-  delete(dest);
-
-  // out of bounds
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(4,2) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(2,17) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(1024,140040) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,0) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(0,-1) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,-1) );
-};
-
-/** Unit Test for initializating matrices.
- *
- */
-void MatrixContentSymmetricTest::InitializationTest()
-{
-  // set zero
-  m->setZero();
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
-
-  // set all
-  m->setValue(1.5);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( 1.5, m->at(i,j) );
-
-  // set basis
-  m->setIdentity();
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
-
-  // set from array
-  double array[] = { 1., 0., 0.,
-                     0., 1., 0.,
-                     0., 0., 1. };
-  m->setFromDoubleArray(array);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
-
-};
-
-/** Unit Test for copying matrices.
- *
- */
-void MatrixContentSymmetricTest::CopyTest()
-{
-  // set basis
-  MatrixContent *dest = NULL;
-  for (int i=0;i<3;i++) {
-    m->setValue(i);
-    dest = new MatrixContent(m);
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( m->at(i,j) , dest->at(i,j) );
-
-    delete(dest);
-  }
-};
-
-/** Unit Test for exchanging rows and columns.
- *
- */
-void MatrixContentSymmetricTest::ExchangeTest()
-{
-  // set to 1,1,1,2, ...
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, i+1 );
-
-  // swap such that nothing happens
-  m->SwapColumns(1,2);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
-
-  // swap two rows
-  m->SwapRows(1,2);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      switch (j) {
-        case 0:
-          CPPUNIT_ASSERT_EQUAL( 1., m->at(j,i) );
-          break;
-        case 1:
-          CPPUNIT_ASSERT_EQUAL( 3., m->at(j,i) );
-          break;
-        case 2:
-          CPPUNIT_ASSERT_EQUAL( 2., m->at(j,i) );
-          break;
-        default:
-          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
-      }
-  // check that op is reversable
-  m->SwapRows(1,2);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
-
-  // set to 1,2,3,1, ...
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, j+1. );
-
-  // swap such that nothing happens
-  m->SwapRows(0,2);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
-
-  // swap two columns
-  m->SwapColumns(0,2);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      switch (j) {
-        case 0:
-          CPPUNIT_ASSERT_EQUAL( 3., m->at(i,j) );
-          break;
-        case 1:
-          CPPUNIT_ASSERT_EQUAL( 2., m->at(i,j) );
-          break;
-        case 2:
-          CPPUNIT_ASSERT_EQUAL( 1., m->at(i,j) );
-          break;
-        default:
-          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
-      }
-  // check that op is reversable
-  m->SwapColumns(0,2);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
-
-
-  // set to 1,2,3, ...
-  MatrixContent *n =  new MatrixContent(3,3);
-  for (int i=0;i<3;i++)
-    for (int j=0;j<3;j++) {
-      m->set(i,j, 3*i+j+1 );
-      n->set(i,j, 3*j+i+1 );
-    }
-  // transpose
-  MatrixContent res = ((const MatrixContent)*m).transpose();
-  CPPUNIT_ASSERT( *n == res );
-  // second transpose
-  res.transpose();
-  CPPUNIT_ASSERT( *m == res );
-  delete n;
-};
-
-/** Unit Test for matrix properties.
- *
- */
-void MatrixContentSymmetricTest::PropertiesTest()
-{
-  // is zero
-  m->setZero();
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNull() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
-
-  // is positive
-  m->setValue(0.5);
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsPositive() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
-
-  // is negative
-  m->setValue(-0.1);
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNegative() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNonNegative() );
-
-  // is positive definite
-  double array[] = { 1., 0., 0.,
-                     0., 1., 1.,
-                     0., 0., 1. };
-  m->setFromDoubleArray(array);
-  CPPUNIT_ASSERT_EQUAL( true, m->IsPositiveDefinite() );
-
-  //determinant
-  m->setIdentity();
-  CPPUNIT_ASSERT_EQUAL( 1., m->Determinant() );
-
-  m->setZero();
-  CPPUNIT_ASSERT_EQUAL( 0., m->Determinant() );
-
-  m->set( 0, 0, 1.);
-  m->set( 1, 1, 1.);
-  m->set( 2, 1, 1.);
-  CPPUNIT_ASSERT_EQUAL( 0., m->Determinant() );
-  
-  double array2[] = { 2., 0., 1.,
-                     -3., 1., 1.,
-                     1., 5.5, 1. };
-  m->setFromDoubleArray(array2);
-  CPPUNIT_ASSERT_EQUAL( -26.5, m->Determinant() );
-};
Index: c/unittests/MatrixContentSymmetricUnittest.hpp
===================================================================
--- src/unittests/MatrixContentSymmetricUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,42 +1,0 @@
-/*
- * MatrixContentSymmetricUnittest.hpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-#ifndef MATRIXCONTENTSYMMETRICUNITTEST_HPP_
-#define MATRIXCONTENTSYMMETRICUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class MatrixContent;
-
-/********************************************** Test classes **************************************/
-
-class MatrixContentSymmetricTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MatrixContentSymmetricTest) ;
-    CPPUNIT_TEST (AccessTest );
-    CPPUNIT_TEST (InitializationTest );
-    CPPUNIT_TEST (CopyTest );
-    CPPUNIT_TEST (ExchangeTest );
-    CPPUNIT_TEST (PropertiesTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void AccessTest();
-    void InitializationTest();
-    void CopyTest();
-    void ExchangeTest();
-    void PropertiesTest();
-
-private:
-    MatrixContent *m;
-};
-
-
-#endif /* MATRIXCONTENTSYMMETRICUNITTEST_HPP_ */
Index: c/unittests/MatrixContentUnittest.cpp
===================================================================
--- src/unittests/MatrixContentUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,267 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MatrixContentUnittest.cpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "MatrixContentUnittest.hpp"
-
-#include "LinearAlgebra/MatrixContent.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MatrixContentTest );
-
-
-void MatrixContentTest::setUp()
-{
-  m = new MatrixContent(4,3);
-};
-
-void MatrixContentTest::tearDown()
-{
-  delete(m);
-};
-
-/** Unit Test for accessing matrix elements.
- *
- */
-void MatrixContentTest::AccessTest()
-{
-  // check whether all elements are initially zero
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
-
-  // set
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, i*3+j );
-
-  // and check
-  double *ptr = NULL;
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++) {
-      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), m->at(i,j) );
-      ptr = m->Pointer(i,j);
-      CPPUNIT_ASSERT_EQUAL( (double)(i*3+j), *ptr );
-    }
-
-  // assignment
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, i*3+j );
-  MatrixContent *dest = new MatrixContent(4,3);
-  *dest = *m;
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( dest->at(i,j), m->at(i,j) );
-  delete(dest);
-
-  // out of bounds
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(5,2) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(2,17) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(1024,140040) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,0) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(0,-1) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1,-1) );
-};
-
-/** Unit Test for initializating matrices.
- *
- */
-void MatrixContentTest::InitializationTest()
-{
-  // set zero
-  m->setZero();
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( 0., m->at(i,j) );
-
-  // set all
-  m->setValue(1.5);
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( 1.5, m->at(i,j) );
-
-  // set basis
-  m->setIdentity();
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
-
-  // set from array
-  double array[] = { 1., 0., 0.,
-                     0., 1., 0.,
-                     0., 0., 1.,
-                     0., 0., 0. };
-  m->setFromDoubleArray(array);
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , m->at(i,j) );
-
-};
-
-/** Unit Test for copying matrices.
- *
- */
-void MatrixContentTest::CopyTest()
-{
-  // set basis
-  MatrixContent *dest = NULL;
-  for (int i=0;i<4;i++) {
-    m->setValue(i);
-    dest = new MatrixContent(m);
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( m->at(i,j) , dest->at(i,j) );
-
-    delete(dest);
-  }
-};
-
-/** Unit Test for exchanging rows and columns.
- *
- */
-void MatrixContentTest::ExchangeTest()
-{
-  // set to 1,1,1,2, ...
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, i+1 );
-
-  // swap such that nothing happens
-  CPPUNIT_ASSERT_EQUAL( true, m->SwapColumns(1,2) );
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
-
-  // swap two rows
-  CPPUNIT_ASSERT_EQUAL( true, m->SwapRows(1,2) );
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      switch (i) {
-        case 0:
-          CPPUNIT_ASSERT_EQUAL( 1., m->at(i,j) );
-          break;
-        case 1:
-          CPPUNIT_ASSERT_EQUAL( 3., m->at(i,j) );
-          break;
-        case 2:
-          CPPUNIT_ASSERT_EQUAL( 2., m->at(i,j) );
-          break;
-        case 3:
-          CPPUNIT_ASSERT_EQUAL( 4., m->at(i,j) );
-          break;
-        default:
-          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
-      }
-  // check that op is reversable
-  CPPUNIT_ASSERT_EQUAL( true, m->SwapRows(1,2) );
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)i+1., m->at(i,j) );
-
-  // set to 1,2,3,1, ...
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      m->set(i,j, j+1. );
-
-  // swap such that nothing happens
-  CPPUNIT_ASSERT_EQUAL( true, m->SwapRows(0,2) );
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
-
-  // swap two columns
-  CPPUNIT_ASSERT_EQUAL( true, m->SwapColumns(0,2) );
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      switch (j) {
-        case 0:
-          CPPUNIT_ASSERT_EQUAL( 3., m->at(i,j) );
-          break;
-        case 1:
-          CPPUNIT_ASSERT_EQUAL( 2., m->at(i,j) );
-          break;
-        case 2:
-          CPPUNIT_ASSERT_EQUAL( 1., m->at(i,j) );
-          break;
-        default:
-          CPPUNIT_ASSERT_EQUAL( -1., m->at(i,j) );
-      }
-  // check that op is reversable
-  CPPUNIT_ASSERT_EQUAL( true, m->SwapColumns(0,2) );
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (double)j+1., m->at(i,j) );
-
-
-  // set to 1,2,3,4, ...
-  MatrixContent *n =  new MatrixContent(3,4);
-  for (int i=0;i<4;i++)
-    for (int j=0;j<3;j++) {
-      m->set(i,j, 3*i+j+1 );
-      n->set(j,i, 3*i+j+1 );
-    }
-  // transpose
-  MatrixContent res = ((const MatrixContent)(*m)).transpose();
-  CPPUNIT_ASSERT( *n == res );
-  // second transpose
-  MatrixContent res2 = ((const MatrixContent)res).transpose();
-  CPPUNIT_ASSERT( *m == res2 );
-  delete n;
-};
-
-/** Unit Test for matrix properties.
- *
- */
-void MatrixContentTest::PropertiesTest()
-{
-  // is zero
-  m->setZero();
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNull() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
-
-  // is positive
-  m->setValue(0.5);
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsPositive() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNegative() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNonNegative() );
-
-  // is negative
-  m->setValue(-0.1);
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNull() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsPositive() );
-  CPPUNIT_ASSERT_EQUAL( true, m->IsNegative() );
-  CPPUNIT_ASSERT_EQUAL( false, m->IsNonNegative() );
-
-  // is positive definite
-  CPPUNIT_ASSERT_EQUAL( false, m->IsPositiveDefinite() );
-};
Index: c/unittests/MatrixContentUnittest.hpp
===================================================================
--- src/unittests/MatrixContentUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,42 +1,0 @@
-/*
- * MatrixContentUnittest.hpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-#ifndef MATRIXCONTENTUNITTEST_HPP_
-#define MATRIXCONTENTUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class MatrixContent;
-
-/********************************************** Test classes **************************************/
-
-class MatrixContentTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MatrixContentTest) ;
-    CPPUNIT_TEST (AccessTest );
-    CPPUNIT_TEST (InitializationTest );
-    CPPUNIT_TEST (CopyTest );
-    CPPUNIT_TEST (ExchangeTest );
-    CPPUNIT_TEST (PropertiesTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void AccessTest();
-    void InitializationTest();
-    void CopyTest();
-    void ExchangeTest();
-    void PropertiesTest();
-
-private:
-    MatrixContent *m;
-};
-
-
-#endif /* MATRIXCONTENTUNITTEST_HPP_ */
Index: c/unittests/MatrixUnittest.cpp
===================================================================
--- src/unittests/MatrixUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,364 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MatrixUnittest.cpp
- *
- *  Created on: Jul 7, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cmath>
-
-#include "MatrixUnittest.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "LinearAlgebra/RealSpaceMatrix.hpp"
-#include "Exceptions/NotInvertibleException.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MatrixUnittest );
-
-void MatrixUnittest::setUp(){
-  zero = new RealSpaceMatrix();
-  for(int i =NDIM;i--;) {
-    for(int j =NDIM;j--;) {
-      zero->at(i,j)=0.;
-    }
-  }
-  one = new RealSpaceMatrix();
-  for(int i =NDIM;i--;){
-    one->at(i,i)=1.;
-  }
-  full=new RealSpaceMatrix();
-  for(int i=NDIM;i--;){
-    for(int j=NDIM;j--;){
-      full->at(i,j)=1.;
-    }
-  }
-  diagonal = new RealSpaceMatrix();
-  for(int i=NDIM;i--;){
-    diagonal->at(i,i)=i+1.;
-  }
-  perm1 = new RealSpaceMatrix();
-  perm1->column(0) = unitVec[0];
-  perm1->column(1) = unitVec[2];
-  perm1->column(2) = unitVec[1];
-
-
-  perm2 = new RealSpaceMatrix();
-  perm2->column(0) = unitVec[1];
-  perm2->column(1) = unitVec[0];
-  perm2->column(2) = unitVec[2];
-
-  perm3 = new RealSpaceMatrix();
-  perm3->column(0) = unitVec[1];
-  perm3->column(1) = unitVec[2];
-  perm3->column(2) = unitVec[0];
-
-  perm4 = new RealSpaceMatrix();
-  perm4->column(0) = unitVec[2];
-  perm4->column(1) = unitVec[1];
-  perm4->column(2) = unitVec[0];
-
-  perm5 = new RealSpaceMatrix();
-  perm5->column(0) = unitVec[2];
-  perm5->column(1) = unitVec[0];
-  perm5->column(2) = unitVec[1];
-
-}
-void MatrixUnittest::tearDown(){
-  delete zero;
-  delete one;
-  delete full;
-  delete diagonal;
-  delete perm1;
-  delete perm2;
-  delete perm3;
-  delete perm4;
-  delete perm5;
-}
-
-void MatrixUnittest::AccessTest(){
-  RealSpaceMatrix mat;
-  for(int i=NDIM;i--;){
-    for(int j=NDIM;j--;){
-      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),0.);
-    }
-  }
-  int k=1;
-  for(int i=NDIM;i--;){
-    for(int j=NDIM;j--;){
-      mat.at(i,j)=k++;
-    }
-  }
-  k=1;
-  for(int i=NDIM;i--;){
-    for(int j=NDIM;j--;){
-      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),(double)k);
-      ++k;
-    }
-  }
-}
-
-void MatrixUnittest::VectorTest(){
-  RealSpaceMatrix mat;
-  for(int i=NDIM;i--;){
-    CPPUNIT_ASSERT_EQUAL(mat.row(i),zeroVec);
-    CPPUNIT_ASSERT_EQUAL(mat.column(i),zeroVec);
-  }
-  CPPUNIT_ASSERT_EQUAL(mat.diagonal(),zeroVec);
-
-  mat.setIdentity();
-  CPPUNIT_ASSERT_EQUAL(mat.row(0),unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(mat.row(1),unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(mat.row(2),unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(mat.column(0),unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(mat.column(1),unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(mat.column(2),unitVec[2]);
-
-  Vector t1=Vector(1.,1.,1.);
-  Vector t2=Vector(2.,2.,2.);
-  Vector t3=Vector(3.,3.,3.);
-  Vector t4=Vector(1.,2.,3.);
-
-  mat.row(0)=t1;
-  mat.row(1)=t2;
-  mat.row(2)=t3;
-  CPPUNIT_ASSERT_EQUAL(mat.row(0),t1);
-  CPPUNIT_ASSERT_EQUAL(mat.row(1),t2);
-  CPPUNIT_ASSERT_EQUAL(mat.row(2),t3);
-  CPPUNIT_ASSERT_EQUAL(mat.column(0),t4);
-  CPPUNIT_ASSERT_EQUAL(mat.column(1),t4);
-  CPPUNIT_ASSERT_EQUAL(mat.column(2),t4);
-  CPPUNIT_ASSERT_EQUAL(mat.diagonal(),t4);
-  for(int i=NDIM;i--;){
-    for(int j=NDIM;j--;){
-      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),i+1.);
-    }
-  }
-
-  mat.column(0)=t1;
-  mat.column(1)=t2;
-  mat.column(2)=t3;
-  CPPUNIT_ASSERT_EQUAL(mat.column(0),t1);
-  CPPUNIT_ASSERT_EQUAL(mat.column(1),t2);
-  CPPUNIT_ASSERT_EQUAL(mat.column(2),t3);
-  CPPUNIT_ASSERT_EQUAL(mat.row(0),t4);
-  CPPUNIT_ASSERT_EQUAL(mat.row(1),t4);
-  CPPUNIT_ASSERT_EQUAL(mat.row(2),t4);
-  CPPUNIT_ASSERT_EQUAL(mat.diagonal(),t4);
-  for(int i=NDIM;i--;){
-    for(int j=NDIM;j--;){
-      CPPUNIT_ASSERT_EQUAL(mat.at(i,j),j+1.);
-    }
-  }
-}
-
-void MatrixUnittest::TransposeTest(){
-  RealSpaceMatrix res;
-
-  // transpose of unit is unit
-  res.setIdentity();
-  res.transpose();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-
-  // transpose of transpose is same matrix
-  res.setZero();
-  res.set(2,2, 1.);
-  CPPUNIT_ASSERT_EQUAL(res.transpose().transpose(),res);
-}
-
-void MatrixUnittest::OperationTest(){
-  RealSpaceMatrix res;
-
-  res =(*zero) *(*zero);
-  std::cout << *zero << " times " << *zero << " is " << res << std::endl;
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*one);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*full);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*diagonal);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*perm1);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*perm2);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*perm3);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*perm4);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-  res =(*zero) *(*perm5);
-  CPPUNIT_ASSERT_EQUAL(res,*zero);
-
-  res =(*one)*(*one);
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-  res =(*one)*(*full);
-  CPPUNIT_ASSERT_EQUAL(res,*full);
-  res =(*one)*(*diagonal);
-  CPPUNIT_ASSERT_EQUAL(res,*diagonal);
-  res =(*one)*(*perm1);
-  CPPUNIT_ASSERT_EQUAL(res,*perm1);
-  res =(*one)*(*perm2);
-  CPPUNIT_ASSERT_EQUAL(res,*perm2);
-  res =(*one)*(*perm3);
-  CPPUNIT_ASSERT_EQUAL(res,*perm3);
-  res =(*one)*(*perm4);
-  CPPUNIT_ASSERT_EQUAL(res,*perm4);
-  res =(*one)*(*perm5);
-  CPPUNIT_ASSERT_EQUAL(res,*perm5);
-
-  res = (*full)*(*perm1);
-  CPPUNIT_ASSERT_EQUAL(res,*full);
-  res = (*full)*(*perm2);
-  CPPUNIT_ASSERT_EQUAL(res,*full);
-  res = (*full)*(*perm3);
-  CPPUNIT_ASSERT_EQUAL(res,*full);
-  res = (*full)*(*perm4);
-  CPPUNIT_ASSERT_EQUAL(res,*full);
-  res = (*full)*(*perm5);
-  CPPUNIT_ASSERT_EQUAL(res,*full);
-
-  res = (*diagonal)*(*perm1);
-  CPPUNIT_ASSERT_EQUAL(res.column(0),unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(res.column(1),3*unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(res.column(2),2*unitVec[1]);
-  res = (*diagonal)*(*perm2);
-  CPPUNIT_ASSERT_EQUAL(res.column(0),2*unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(res.column(1),unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(res.column(2),3*unitVec[2]);
-  res = (*diagonal)*(*perm3);
-  CPPUNIT_ASSERT_EQUAL(res.column(0),2*unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(res.column(1),3*unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(res.column(2),unitVec[0]);
-  res = (*diagonal)*(*perm4);
-  CPPUNIT_ASSERT_EQUAL(res.column(0),3*unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(res.column(1),2*unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(res.column(2),unitVec[0]);
-  res = (*diagonal)*(*perm5);
-  CPPUNIT_ASSERT_EQUAL(res.column(0),3*unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(res.column(1),unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(res.column(2),2*unitVec[1]);
-}
-
-void MatrixUnittest::RotationTest(){
-  RealSpaceMatrix res;
-  RealSpaceMatrix inverse;
-
-  // zero rotation angles yields unity matrix
-  res.setRotation(0,0,0);
-  CPPUNIT_ASSERT_EQUAL(*one, res);
-
-  // arbitrary rotation matrix has det = 1
-  res.setRotation(M_PI/3.,1.,M_PI/7.);
-  CPPUNIT_ASSERT(fabs(fabs(res.determinant()) -1.) < MYEPSILON);
-
-  // inverse is rotation matrix with negative angles
-  res.setRotation(M_PI/3.,0.,0.);
-  inverse.setRotation(-M_PI/3.,0.,0.);
-  CPPUNIT_ASSERT_EQUAL(*one, res * inverse);
-
-  // ... or transposed
-  res.setRotation(M_PI/3.,0.,0.);
-  CPPUNIT_ASSERT_EQUAL(inverse, ((const RealSpaceMatrix) res).transpose());
-}
-
-void MatrixUnittest::InvertTest(){
-  CPPUNIT_ASSERT_THROW(zero->invert(),NotInvertibleException);
-  CPPUNIT_ASSERT_THROW(full->invert(),NotInvertibleException);
-
-  RealSpaceMatrix res;
-  res = (*one)*one->invert();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-  res = (*diagonal)*diagonal->invert();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-  res = (*perm1)*perm1->invert();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-  res = (*perm2)*perm2->invert();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-  res = (*perm3)*perm3->invert();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-  res = (*perm4)*perm4->invert();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-  res = (*perm5)*perm5->invert();
-  CPPUNIT_ASSERT_EQUAL(res,*one);
-}
-
-
-void MatrixUnittest::DeterminantTest(){
-  CPPUNIT_ASSERT_EQUAL(zero->determinant(),0.);
-  CPPUNIT_ASSERT_EQUAL(one->determinant(),1.);
-  CPPUNIT_ASSERT_EQUAL(diagonal->determinant(),6.);
-  CPPUNIT_ASSERT_EQUAL(full->determinant(),0.);
-  CPPUNIT_ASSERT_EQUAL(perm1->determinant(),-1.);
-  CPPUNIT_ASSERT_EQUAL(perm2->determinant(),-1.);
-  CPPUNIT_ASSERT_EQUAL(perm3->determinant(),1.);
-  CPPUNIT_ASSERT_EQUAL(perm4->determinant(),-1.);
-  CPPUNIT_ASSERT_EQUAL(perm5->determinant(),1.);
-}
-
-void MatrixUnittest::VecMultTest(){
-  CPPUNIT_ASSERT_EQUAL((*zero)*unitVec[0],zeroVec);
-  CPPUNIT_ASSERT_EQUAL((*zero)*unitVec[1],zeroVec);
-  CPPUNIT_ASSERT_EQUAL((*zero)*unitVec[2],zeroVec);
-  CPPUNIT_ASSERT_EQUAL((*zero)*zeroVec,zeroVec);
-
-  CPPUNIT_ASSERT_EQUAL((*one)*unitVec[0],unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL((*one)*unitVec[1],unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL((*one)*unitVec[2],unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL((*one)*zeroVec,zeroVec);
-
-  CPPUNIT_ASSERT_EQUAL((*diagonal)*unitVec[0],unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL((*diagonal)*unitVec[1],2*unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL((*diagonal)*unitVec[2],3*unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL((*diagonal)*zeroVec,zeroVec);
-
-  CPPUNIT_ASSERT_EQUAL((*perm1)*unitVec[0],unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL((*perm1)*unitVec[1],unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL((*perm1)*unitVec[2],unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL((*perm1)*zeroVec,zeroVec);
-
-  CPPUNIT_ASSERT_EQUAL((*perm2)*unitVec[0],unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL((*perm2)*unitVec[1],unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL((*perm2)*unitVec[2],unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL((*perm2)*zeroVec,zeroVec);
-
-  CPPUNIT_ASSERT_EQUAL((*perm3)*unitVec[0],unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL((*perm3)*unitVec[1],unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL((*perm3)*unitVec[2],unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL((*perm3)*zeroVec,zeroVec);
-
-  CPPUNIT_ASSERT_EQUAL((*perm4)*unitVec[0],unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL((*perm4)*unitVec[1],unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL((*perm4)*unitVec[2],unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL((*perm4)*zeroVec,zeroVec);
-
-  CPPUNIT_ASSERT_EQUAL((*perm5)*unitVec[0],unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL((*perm5)*unitVec[1],unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL((*perm5)*unitVec[2],unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL((*perm5)*zeroVec,zeroVec);
-
-  Vector t = Vector(1.,2.,3.);
-  CPPUNIT_ASSERT_EQUAL((*perm1)*t,Vector(1,3,2));
-  CPPUNIT_ASSERT_EQUAL((*perm2)*t,Vector(2,1,3));
-  CPPUNIT_ASSERT_EQUAL((*perm3)*t,Vector(3,1,2));
-  CPPUNIT_ASSERT_EQUAL((*perm4)*t,Vector(3,2,1));
-  CPPUNIT_ASSERT_EQUAL((*perm5)*t,Vector(2,3,1));
-}
Index: c/unittests/MatrixUnittest.hpp
===================================================================
--- src/unittests/MatrixUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/*
- * MatrixUnittest.hpp
- *
- *  Created on: Jul 7, 2010
- *      Author: crueger
- */
-
-#ifndef MATRIXUNITTEST_HPP_
-#define MATRIXUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class RealSpaceMatrix;
-
-class MatrixUnittest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( MatrixUnittest) ;
-  CPPUNIT_TEST ( AccessTest );
-  CPPUNIT_TEST ( VectorTest );
-  CPPUNIT_TEST ( OperationTest );
-  CPPUNIT_TEST ( TransposeTest );
-  CPPUNIT_TEST ( RotationTest );
-  CPPUNIT_TEST ( InvertTest );
-  CPPUNIT_TEST ( DeterminantTest );
-  CPPUNIT_TEST ( VecMultTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void AccessTest();
-  void VectorTest();
-  void OperationTest();
-  void TransposeTest();
-  void RotationTest();
-  void InvertTest();
-  void DeterminantTest();
-  void VecMultTest();
-
-  RealSpaceMatrix *zero;
-  RealSpaceMatrix *one;
-  RealSpaceMatrix *full;
-  RealSpaceMatrix *diagonal;
-  RealSpaceMatrix *perm1;
-  RealSpaceMatrix *perm2;
-  RealSpaceMatrix *perm3;
-  RealSpaceMatrix *perm4;
-  RealSpaceMatrix *perm5;
-};
-
-#endif /* MATRIXUNITTEST_HPP_ */
Index: c/unittests/MenuDescriptionUnitTest.cpp
===================================================================
--- src/unittests/MenuDescriptionUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,71 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MenuDescriptionUnitTest.cpp
- *
- *  Created on: Nov 25, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "MenuDescriptionUnitTest.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MenuDescriptionTest );
-
-
-void MenuDescriptionTest::setUp()
-{
-};
-
-
-void MenuDescriptionTest::tearDown()
-{
-};
-
-/** UnitTest for consistency.
- * we check that we have the same keys in each of MenuSet, MenuDescription and MenuNameMap.
- */
-void MenuDescriptionTest::ConsistencyCheck()
-{
-  // from MenuSet
-  for(MenuDescription::const_iterator iter = md.MenuPositionMap->begin(); iter != md.MenuPositionMap->end(); ++iter) {
-    const std::string &MenuName = iter->first;
-    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDewscriptionsMap", md.MenuDescriptionsMap->find(MenuName) != md.MenuDescriptionsMap->end());
-    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap->find(MenuName) != md.MenuNameMap->end());
-  }
-
-  // from MenuDescriptionsMap
-  for(std::map<std::string const, std::string const>::const_iterator iter = md.MenuDescriptionsMap->begin(); iter != md.MenuDescriptionsMap->end(); ++iter) {
-    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap->find(iter->first) != md.MenuPositionMap->end());
-    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuNameMap", md.MenuNameMap->find(iter->first) != md.MenuNameMap->end());
-  }
-
-  // from MenuNameMap
-  for(std::map<std::string const, std::string const>::const_iterator iter = md.MenuNameMap->begin(); iter != md.MenuNameMap->end(); ++iter) {
-    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuDescriptionsMap", md.MenuDescriptionsMap->find(iter->first) != md.MenuDescriptionsMap->end());
-    CPPUNIT_ASSERT_MESSAGE( "menu token not contained in MenuDescription::MenuSet", md.MenuPositionMap->find(iter->first) != md.MenuPositionMap->end());
-  }
-
-};
Index: c/unittests/MenuDescriptionUnitTest.hpp
===================================================================
--- src/unittests/MenuDescriptionUnitTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * MenuDescriptionUnitTest.cpp.hpp
- *
- *  Created on: Nov 25, 2009
- *      Author: heber
- */
-
-#ifndef MENUDESCRIPTORUNITTEST_HPP_
-#define MENUDESCRIPTORUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "UIElements/Menu/MenuDescription.hpp"
-
-/********************************************** Test classes **************************************/
-
-class MenuDescriptionTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MenuDescriptionTest) ;
-    CPPUNIT_TEST ( ConsistencyCheck );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void ConsistencyCheck();
-
-private:
-      MenuDescription md;
-};
-
-#endif /* MENUDESCRIPTORUNITTEST_HPP_ */
Index: c/unittests/MoleculeDescriptorTest.cpp
===================================================================
--- src/unittests/MoleculeDescriptorTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,170 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * MoleculeDescriptorTest.cpp
- *
- *  Created on: Mar 4, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "MoleculeDescriptorTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <iostream>
-
-#include <Descriptors/MoleculeDescriptor.hpp>
-#include <Descriptors/MoleculeIdDescriptor.hpp>
-
-#include "World.hpp"
-#include "molecule.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MoleculeDescriptorTest );
-
-// set up and tear down
-void MoleculeDescriptorTest::setUp(){
-  World::getInstance();
-  for(int i=0;i<MOLECULE_COUNT;++i){
-    molecules[i]= World::getInstance().createMolecule();
-    moleculeIds[i]= molecules[i]->getId();
-  }
-}
-
-void MoleculeDescriptorTest::tearDown(){
-  World::purgeInstance();
-}
-
-// some helper functions
-static bool hasAllMolecules(std::vector<molecule*> molecules,moleculeId_t ids[MOLECULE_COUNT], std::set<moleculeId_t> excluded = std::set<moleculeId_t>()){
-  for(int i=0;i<MOLECULE_COUNT;++i){
-    moleculeId_t id = ids[i];
-    if(!excluded.count(id)){
-      std::vector<molecule*>::iterator iter;
-      bool res=false;
-      for(iter=molecules.begin();iter!=molecules.end();++iter){
-        res |= (*iter)->getId() == id;
-      }
-      if(!res) {
-        cout << "Molecule " << id << " missing in returned list" << endl;
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
-static bool hasNoDuplicateMolecules(std::vector<molecule*> molecules){
-  std::set<moleculeId_t> found;
-  std::vector<molecule*>::iterator iter;
-  for(iter=molecules.begin();iter!=molecules.end();++iter){
-    int id = (*iter)->getId();
-    if(found.count(id))
-      return false;
-    found.insert(id);
-  }
-  return true;
-}
-
-
-void MoleculeDescriptorTest::MoleculeBaseSetsTest(){
-  std::vector<molecule*> allMolecules = World::getInstance().getAllMolecules(AllMolecules());
-  CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(allMolecules,moleculeIds));
-  CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(allMolecules));
-
-  std::vector<molecule*> noMolecules = World::getInstance().getAllMolecules(NoMolecules());
-  CPPUNIT_ASSERT_EQUAL( true , noMolecules.empty());
-}
-void MoleculeDescriptorTest::MoleculeIdTest(){
-  // test Molecules from boundaries and middle of the set
-  molecule* testMolecule;
-  testMolecule = World::getInstance().getMolecule(MoleculeById(moleculeIds[0]));
-  CPPUNIT_ASSERT(testMolecule);
-  CPPUNIT_ASSERT_EQUAL( moleculeIds[0], testMolecule->getId());
-  testMolecule = World::getInstance().getMolecule(MoleculeById(moleculeIds[MOLECULE_COUNT/2]));
-  CPPUNIT_ASSERT(testMolecule);
-  CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT/2], testMolecule->getId());
-  testMolecule = World::getInstance().getMolecule(MoleculeById(moleculeIds[MOLECULE_COUNT-1]));
-  CPPUNIT_ASSERT(testMolecule);
-  CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT-1], testMolecule->getId());
-
-  // find some ID that has not been created
-  moleculeId_t outsideId=0;
-  bool res = false;
-  for(outsideId=0;!res;++outsideId) {
-    res = true;
-    for(int i = 0; i < MOLECULE_COUNT; ++i){
-      res &= moleculeIds[i]!=outsideId;
-    }
-  }
-  // test from outside of set
-  testMolecule = World::getInstance().getMolecule(MoleculeById(outsideId));
-  CPPUNIT_ASSERT(!testMolecule);
-}
-void MoleculeDescriptorTest::MoleculeCalcTest(){
-  // test some elementary set operations
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(AllMolecules()||NoMolecules());
-    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
-  }
-
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(NoMolecules()||AllMolecules());
-    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
-  }
-
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(NoMolecules()&&AllMolecules());
-    CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty());
-  }
-
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(AllMolecules()&&NoMolecules());
-    CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty());
-  }
-
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(!AllMolecules());
-    CPPUNIT_ASSERT_EQUAL( true , testMolecules.empty());
-  }
-
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(!NoMolecules());
-    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
-  }
-
-  // exclude and include some molecules
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(AllMolecules()&&(!MoleculeById(moleculeIds[MOLECULE_COUNT/2])));
-    std::set<moleculeId_t> excluded;
-    excluded.insert(moleculeIds[MOLECULE_COUNT/2]);
-    CPPUNIT_ASSERT_EQUAL( true , hasAllMolecules(testMolecules,moleculeIds,excluded));
-    CPPUNIT_ASSERT_EQUAL( true , hasNoDuplicateMolecules(testMolecules));
-    CPPUNIT_ASSERT_EQUAL( (size_t)(MOLECULE_COUNT-1), testMolecules.size());
-  }
-
-  {
-    std::vector<molecule*> testMolecules = World::getInstance().getAllMolecules(NoMolecules()||(MoleculeById(moleculeIds[MOLECULE_COUNT/2])));
-    CPPUNIT_ASSERT_EQUAL( (size_t)1, testMolecules.size());
-    CPPUNIT_ASSERT_EQUAL( moleculeIds[MOLECULE_COUNT/2], testMolecules[0]->getId());
-  }
-}
Index: c/unittests/MoleculeDescriptorTest.hpp
===================================================================
--- src/unittests/MoleculeDescriptorTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,41 +1,0 @@
-/*
- * MoleculeDescriptorTest.hpp
- *
- *  Created on: Mar 4, 2010
- *      Author: crueger
- */
-
-#ifndef MOLECULEDESCRIPTORTEST_HPP_
-#define MOLECULEDESCRIPTORTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "types.hpp"
-
-// we prefer enum over define
-enum { MOLECULE_COUNT = 10 };
-
-class molecule;
-
-class MoleculeDescriptorTest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( MoleculeDescriptorTest );
-  CPPUNIT_TEST ( MoleculeBaseSetsTest );
-  CPPUNIT_TEST ( MoleculeIdTest );
-  CPPUNIT_TEST ( MoleculeCalcTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void MoleculeBaseSetsTest();
-  void MoleculeIdTest();
-  void MoleculeCalcTest();
-
-private:
-  molecule *molecules [MOLECULE_COUNT];
-  moleculeId_t moleculeIds [MOLECULE_COUNT];
-};
-
-#endif /* MOLECULEDESCRIPTORTEST_HPP_ */
Index: c/unittests/ObserverTest.cpp
===================================================================
--- src/unittests/ObserverTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,494 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ObserverTest.cpp
- *
- *  Created on: Jan 19, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "ObserverTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <set>
-
-#include "Patterns/Observer.hpp"
-#include "Patterns/ObservedIterator.hpp"
-#include "Helpers/Assert.hpp"
-
-#include <iostream>
-
-using namespace std;
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ObserverTest );
-
-/******************* Test stubs ************************/
-
-class UpdateCountObserver : public Observer {
-public:
-  UpdateCountObserver() :
-    Observer("UpdateCountObserver"),
-    updates(0)
-  {};
-  void update(Observable *publisher){
-    updates++;
-  }
-  void subjectKilled(Observable *publisher) {
-  }
-  int updates;
-};
-
-class SimpleObservable : public Observable {
-public:
-  SimpleObservable() :
-    Observable("SimpleObservable")
-  {}
-
-  void changeMethod() {
-    OBSERVE;
-    int i = 0;
-    i++;
-  }
-};
-
-class CallObservable : public Observable {
-public:
-  CallObservable() :
-    Observable("CallObservable")
-  {}
-
-  void changeMethod1() {
-    OBSERVE;
-    int i = 0;
-    i++;
-  }
-
-  void changeMethod2() {
-    OBSERVE;
-    int i = 0;
-    i++;
-    changeMethod1();
-  }
-};
-
-class BlockObservable : public Observable {
-public:
-  BlockObservable() :
-    Observable("BlockObservable")
-  {}
-
-  void changeMethod1(){
-    OBSERVE;
-    // test if we report correctly as blocked
-    CPPUNIT_ASSERT(isBlocked());
-  }
-
-  void changeMethod2(){
-    OBSERVE;
-    internalMethod1();
-    internalMethod2();
-  }
-
-  void internalMethod1(){
-    // we did not block, but our caller did...
-    // see if this is found
-    CPPUNIT_ASSERT(isBlocked());
-  }
-
-  void internalMethod2(){
-    OBSERVE;
-    // Both this method and the caller do block
-    // Does the reporting still work as expected?
-    CPPUNIT_ASSERT(isBlocked());
-  }
-
-  void noChangeMethod(){
-    // No Block introduced here
-    // reported correctely?
-    CPPUNIT_ASSERT(!isBlocked());
-  }
-};
-
-class SuperObservable : public Observable {
-public:
-  SuperObservable():
-    Observable("SuperObservable")
-  {
-    subObservable = new SimpleObservable();
-    subObservable->signOn(this);
-  }
-  ~SuperObservable(){
-    delete subObservable;
-  }
-  void changeMethod() {
-    OBSERVE;
-    int i = 0;
-    i++;
-    subObservable->changeMethod();
-  }
-  SimpleObservable *subObservable;
-};
-
-class NotificationObservable : public Observable {
-public:
-  NotificationObservable() :
-    Observable("NotificationObservable"),
-    notification1(new Notification(this)),
-    notification2(new Notification(this))
-  {}
-
-  ~NotificationObservable(){
-    delete notification1;
-    delete notification2;
-  }
-
-  void operation1(){
-    OBSERVE;
-    NOTIFY(notification1);
-  }
-
-  void operation2(){
-    OBSERVE;
-    NOTIFY(notification2);
-  }
-
-  Notification_ptr notification1;
-  Notification_ptr notification2;
-};
-
-class NotificationObserver : public Observer {
-public:
-  NotificationObserver(Notification_ptr notification) :
-    Observer("NotificationObserver"),
-    requestedNotification(notification),
-    wasNotified(false)
-  {}
-
-  void update(Observable*){}
-  void subjectKilled(Observable*){}
-  void recieveNotification(Observable *publisher, Notification_ptr notification){
-    ASSERT(requestedNotification==notification,"Notification received that was not requested");
-    wasNotified = true;
-  }
-
-  Notification_ptr requestedNotification;
-
-  bool wasNotified;
-};
-
-class ObservableSet : public Observable {
-public:
-  typedef std::set<SimpleObservable*> set;
-  typedef ObservedIterator<set> iterator;
-  typedef set::const_iterator const_iterator;
-
-  ObservableSet(int _num) :
-    Observable("ObservableCollection"),
-    num(_num)
-  {
-    for(int i=0; i<num; ++i){
-      SimpleObservable *content = new SimpleObservable();
-      content->signOn(this);
-      theSet.insert(content);
-    }
-  }
-
-  ~ObservableSet(){
-    set::iterator iter;
-    for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
-      delete (*iter);
-    }
-  }
-
-  iterator begin(){
-    return iterator(theSet.begin(),this);
-  }
-
-  iterator end(){
-    return iterator(theSet.end(),this);
-  }
-
-  const int num;
-
-private:
-  set theSet;
-};
-
-class ObservableMap : public Observable {
-public:
-  typedef std::map<int,SimpleObservable*> set;
-  typedef ObservedIterator<set> iterator;
-  typedef set::const_iterator const_iterator;
-
-  ObservableMap(int _num) :
-    Observable("ObservableCollection"),
-    num(_num)
-  {
-    for(int i=0; i<num; ++i){
-      SimpleObservable *content = new SimpleObservable();
-      content->signOn(this);
-      theSet.insert(make_pair(i,content));
-    }
-  }
-
-  ~ObservableMap(){
-    set::iterator iter;
-    for(iter=theSet.begin(); iter!=theSet.end(); ++iter ){
-      delete iter->second;
-    }
-  }
-
-  iterator begin(){
-    return iterator(theSet.begin(),this);
-  }
-
-  iterator end(){
-    return iterator(theSet.end(),this);
-  }
-
-  const int num;
-
-private:
-  set theSet;
-};
-
-
-/******************* actuall tests ***************/
-
-void ObserverTest::setUp() {
-  ASSERT_DO(Assert::Throw);
-  simpleObservable1 = new SimpleObservable();
-  simpleObservable2 = new SimpleObservable();
-  callObservable = new CallObservable();
-  superObservable = new SuperObservable();
-  blockObservable = new BlockObservable();
-  notificationObservable = new NotificationObservable();
-  obsset = new ObservableSet(5);
-  obsmap = new ObservableMap(5);
-
-  observer1 = new UpdateCountObserver();
-  observer2 = new UpdateCountObserver();
-  observer3 = new UpdateCountObserver();
-  observer4 = new UpdateCountObserver();
-
-  notificationObserver1 = new NotificationObserver(notificationObservable->notification1);
-  notificationObserver2 = new NotificationObserver(notificationObservable->notification2);
-}
-
-void ObserverTest::tearDown() {
-  delete simpleObservable1;
-  delete simpleObservable2;
-  delete callObservable;
-  delete superObservable;
-  delete blockObservable;
-  delete notificationObservable;
-  delete obsset;
-  delete obsmap;
-
-  delete observer1;
-  delete observer2;
-  delete observer3;
-  delete observer4;
-  delete notificationObserver1;
-  delete notificationObserver2;
-}
-
-void ObserverTest::doesUpdateTest()
-{
-  simpleObservable1->signOn(observer1);
-  simpleObservable1->signOn(observer2);
-  simpleObservable1->signOn(observer3);
-
-  simpleObservable2->signOn(observer2);
-  simpleObservable2->signOn(observer4);
-
-  CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
-  CPPUNIT_ASSERT_EQUAL( 0, observer2->updates );
-  CPPUNIT_ASSERT_EQUAL( 0, observer3->updates );
-  CPPUNIT_ASSERT_EQUAL( 0, observer4->updates );
-
-
-  simpleObservable1->changeMethod();
-  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
-  CPPUNIT_ASSERT_EQUAL( 1, observer2->updates );
-  CPPUNIT_ASSERT_EQUAL( 1, observer3->updates );
-  CPPUNIT_ASSERT_EQUAL( 0, observer4->updates );
-
-  simpleObservable1->signOff(observer3);
-
-  simpleObservable1->changeMethod();
-  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
-  CPPUNIT_ASSERT_EQUAL( 2, observer2->updates );
-  CPPUNIT_ASSERT_EQUAL( 1, observer3->updates );
-  CPPUNIT_ASSERT_EQUAL( 0, observer4->updates );
-
-  simpleObservable2->changeMethod();
-  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
-  CPPUNIT_ASSERT_EQUAL( 3, observer2->updates );
-  CPPUNIT_ASSERT_EQUAL( 1, observer3->updates );
-  CPPUNIT_ASSERT_EQUAL( 1, observer4->updates );
-}
-
-
-void ObserverTest::doesBlockUpdateTest() {
-  callObservable->signOn(observer1);
-  CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
-
-  callObservable->changeMethod1();
-  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
-
-  callObservable->changeMethod2();
-  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
-}
-
-void ObserverTest::doesSubObservableTest() {
-  superObservable->signOn(observer1);
-  superObservable->subObservable->signOn(observer2);
-
-  superObservable->subObservable->changeMethod();
-  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
-  CPPUNIT_ASSERT_EQUAL( 1, observer2->updates );
-
-  superObservable->changeMethod();
-  CPPUNIT_ASSERT_EQUAL( 2, observer1->updates );
-  CPPUNIT_ASSERT_EQUAL( 2, observer2->updates );
-}
-
-void ObserverTest::outsideLockTest(){
-  callObservable->signOn(observer1);
-  CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
-
-  {
-    LOCK_OBSERVABLE(*callObservable);
-    CPPUNIT_ASSERT_EQUAL( 0, observer1->updates );
-  }
-  // lock is gone now, observer should have notified
-  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates );
-}
-
-void ObserverTest::doesNotifyTest(){
-  notificationObservable->signOn(notificationObserver1,
-                                 notificationObservable->notification1);
-  notificationObservable->signOn(notificationObserver2,
-                                 notificationObservable->notification2);
-
-  notificationObservable->operation1();
-  CPPUNIT_ASSERT(notificationObserver1->wasNotified);
-  CPPUNIT_ASSERT(!notificationObserver2->wasNotified);
-
-  notificationObserver1->wasNotified=false;
-
-  notificationObservable->operation2();
-  CPPUNIT_ASSERT(!notificationObserver1->wasNotified);
-  CPPUNIT_ASSERT(notificationObserver2->wasNotified);
-
-}
-
-void ObserverTest::doesReportTest(){
-  // Actual checks are in the Stub-methods for this
-  blockObservable->changeMethod1();
-  blockObservable->changeMethod2();
-  blockObservable->noChangeMethod();
-}
-
-void ObserverTest::iteratorTest(){
-  int i = 0;
-  // test the general iterator methods
-  for(ObservableSet::iterator iter=obsset->begin(); iter!=obsset->end();++iter){
-    CPPUNIT_ASSERT(i< obsset->num);
-    i++;
-  }
-
-  i=0;
-  for(ObservableSet::const_iterator iter=obsset->begin(); iter!=obsset->end();++iter){
-    CPPUNIT_ASSERT(i<obsset->num);
-    i++;
-  }
-
-  obsset->signOn(observer1);
-  {
-    // we construct this out of the loop, so the iterator dies at the end of
-    // the scope and not the end of the loop (allows more testing)
-    ObservableSet::iterator iter;
-    for(iter=obsset->begin(); iter!=obsset->end(); ++iter){
-      (*iter)->changeMethod();
-    }
-    // At this point no change should have been propagated
-    CPPUNIT_ASSERT_EQUAL( 0, observer1->updates);
-  }
-  // After the Iterator has died the propagation should take place
-  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates);
-
-  // when using a const_iterator no changes should be propagated
-  for(ObservableSet::const_iterator iter = obsset->begin(); iter!=obsset->end();++iter);
-  CPPUNIT_ASSERT_EQUAL( 1, observer1->updates);
-
-  // we need to test the operator-> as well
-  obsmap->signOn(observer2);
-  {
-    // we construct this out of the loop, so the iterator dies at the end of
-    // the scope and not the end of the loop (allows more testing)
-    ObservableMap::iterator iter;
-    for(iter=obsmap->begin(); iter!=obsmap->end(); ++iter){
-      iter->second->changeMethod();
-    }
-    // At this point no change should have been propagated
-    CPPUNIT_ASSERT_EQUAL( 0, observer2->updates);
-  }
-  // After the Iterator has died the propagation should take place
-  CPPUNIT_ASSERT_EQUAL( 1, observer2->updates);
-
-
-  obsset->signOff(observer1);
-  obsmap->signOff(observer2);
-}
-
-void ObserverTest::CircleDetectionTest() {
-  cout << endl << "Warning: the next test involved methods that can produce infinite loops." << endl;
-  cout << "Errors in this methods can not be checked using the CPPUNIT_ASSERT Macros." << endl;
-  cout << "Instead tests are run on these methods to see if termination is assured" << endl << endl;
-  cout << "If this test does not complete in a few seconds, kill the test-suite and fix the Error in the circle detection mechanism" << endl;
-
-  cout << endl << endl << "The following errors displayed by the observer framework can be ignored" << endl;
-
-  // make this Observable its own subject. NEVER DO THIS IN ACTUAL CODE
-  simpleObservable1->signOn(simpleObservable1);
-#ifndef NDEBUG
-  CPPUNIT_ASSERT_THROW(simpleObservable1->changeMethod(),Assert::AssertionFailure);
-#else
-  simpleObservable1->changeMethod();
-#endif
-
-  // more complex test
-  simpleObservable1->signOff(simpleObservable1);
-  simpleObservable1->signOn(simpleObservable2);
-  simpleObservable2->signOn(simpleObservable1);
-#ifndef NDEBUG
-  CPPUNIT_ASSERT_THROW(simpleObservable1->changeMethod(),Assert::AssertionFailure);
-#else
-  simpleObservable1->changeMethod();
-#endif
-
-
-  simpleObservable1->signOff(simpleObservable2);
-  simpleObservable2->signOff(simpleObservable1);
-  // when we reach this line, although we broke the DAG assumption the circle check works fine
-  CPPUNIT_ASSERT(true);
-}
Index: c/unittests/ObserverTest.hpp
===================================================================
--- src/unittests/ObserverTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/*
- * ObserverTest.hpp
- *
- *  Created on: Jan 19, 2010
- *      Author: crueger
- */
-
-#ifndef OBSERVERTEST_HPP_
-#define OBSERVERTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-// forward declaration for test stubs
-class UpdateCountObserver;
-class NotificationObserver;
-class SimpleObservable;
-class CallObservable;
-class SuperObservable;
-class ObservableSet;
-class ObservableMap;
-class BlockObservable;
-class NotificationObservable;
-
-class ObserverTest :  public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( ObserverTest ) ;
-  CPPUNIT_TEST ( doesUpdateTest );
-  CPPUNIT_TEST ( doesBlockUpdateTest );
-  CPPUNIT_TEST ( doesSubObservableTest );
-  CPPUNIT_TEST ( outsideLockTest );
-  CPPUNIT_TEST ( doesNotifyTest );
-  CPPUNIT_TEST ( doesReportTest );
-  CPPUNIT_TEST ( iteratorTest );
-  CPPUNIT_TEST ( CircleDetectionTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void doesUpdateTest();
-  void doesBlockUpdateTest();
-  void doesSubObservableTest();
-  void outsideLockTest();
-  void doesNotifyTest();
-  void doesReportTest();
-  void iteratorTest();
-  void CircleDetectionTest();
-
-private:
-  UpdateCountObserver *observer1;
-  UpdateCountObserver *observer2;
-  UpdateCountObserver *observer3;
-  UpdateCountObserver *observer4;
-
-  NotificationObserver *notificationObserver1;
-  NotificationObserver *notificationObserver2;
-
-  SimpleObservable *simpleObservable1;
-  SimpleObservable *simpleObservable2;
-  CallObservable *callObservable;
-  BlockObservable *blockObservable;
-  SuperObservable *superObservable;
-  NotificationObservable *notificationObservable;
-  ObservableSet *obsset;
-  ObservableMap *obsmap;
-
-};
-
-#endif /* OBSERVERTEST_HPP_ */
Index: c/unittests/ParserCommonUnitTest.cpp
===================================================================
--- src/unittests/ParserCommonUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,286 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ParserCommonUnitTest.cpp
- *
- *  Created on: Mar 3, 2010
- *      Author: metzler
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "ParserCommonUnitTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "Parser/MpqcParser.hpp"
-#include "Parser/PdbParser.hpp"
-#include "Parser/PcpParser.hpp"
-#include "Parser/TremoloParser.hpp"
-#include "Parser/XyzParser.hpp"
-#include "World.hpp"
-#include "atom.hpp"
-#include "element.hpp"
-#include "periodentafel.hpp"
-#include "Descriptors/AtomTypeDescriptor.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-using namespace std;
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ParserCommonUnitTest );
-
-static string waterPcp = "# ParallelCarParinello - main configuration file - created with molecuilder\n\
-\n\
-mainname\tpcp\t# programm name (for runtime files)\n\
-defaultpath\not specified\t# where to put files during runtime\n\
-pseudopotpath\not specified\t# where to find pseudopotentials\n\
-\n\
-ProcPEGamma\t8\t# for parallel computing: share constants\n\
-ProcPEPsi\t1\t# for parallel computing: share wave functions\n\
-DoOutVis\t0\t# Output data for OpenDX\n\
-DoOutMes\t1\t# Output data for measurements\n\
-DoOutOrbitals\t0\t# Output all Orbitals\n\
-DoOutCurr\t0\t# Ouput current density for OpenDx\n\
-DoOutNICS\t0\t# Output Nucleus independent current shieldings\n\
-DoPerturbation\t0\t# Do perturbation calculate and determine susceptibility and shielding\n\
-DoFullCurrent\t0\t# Do full perturbation\n\
-DoConstrainedMD\t0\t# Do perform a constrained (>0, relating to current MD step) instead of unconstrained (0) MD\n\
-Thermostat\tBerendsen\t2.5\t# Which Thermostat and its parameters to use in MD case.\n\
-CommonWannier\t0\t# Put virtual centers at indivual orbits, all common, merged by variance, to grid point, to cell center\n\
-SawtoothStart\t0.01\t# Absolute value for smooth transition at cell border \n\
-VectorPlane\t0\t# Cut plane axis (x, y or z: 0,1,2) for two-dim current vector plot\n\
-VectorCut\t0\t# Cut plane axis value\n\
-AddGramSch\t1\t# Additional GramSchmidtOrtogonalization to be safe\n\
-Seed\t1\t# initial value for random seed for Psi coefficients\n\
-\n\
-MaxOuterStep\t0\t# number of MolecularDynamics/Structure optimization steps\n\
-Deltat\t0.01\t# time per MD step\n\
-OutVisStep\t10\t# Output visual data every ...th step\n\
-OutSrcStep\t5\t# Output \"restart\" data every ..th step\n\
-TargetTemp\t0.000950045\t# Target temperature\n\
-MaxPsiStep\t3\t# number of Minimisation steps per state (0 - default)\n\
-EpsWannier\t1e-07\t# tolerance value for spread minimisation of orbitals\n\
-# Values specifying when to stop\n\
-MaxMinStep\t100\t# Maximum number of steps\n\
-RelEpsTotalE\t1e-07\t# relative change in total energy\n\
-RelEpsKineticE\t1e-05\t# relative change in kinetic energy\n\
-MaxMinStopStep\t2\t# check every ..th steps\n\
-MaxMinGapStopStep\t1\t# check every ..th steps\n\
-\n\
-# Values specifying when to stop for INIT, otherwise same as above\n\
-MaxInitMinStep\t100\t# Maximum number of steps\n\
-InitRelEpsTotalE\t1e-05\t# relative change in total energy\n\
-InitRelEpsKineticE\t0.0001\t# relative change in kinetic energy\n\
-InitMaxMinStopStep\t2\t# check every ..th steps\n\
-InitMaxMinGapStopStep\t1\t# check every ..th steps\n\
-\n\
-BoxLength\t# (Length of a unit cell)\n\
-20\n\
-0\t20\n\
-0\t0\t20\n\
-\n\
-ECut\t128\t# energy cutoff for discretization in Hartrees\n\
-MaxLevel\t5\t# number of different levels in the code, >=2\n\
-Level0Factor\t2\t# factor by which node number increases from S to 0 level\n\
-RiemannTensor\t0\t# (Use metric)\n\
-PsiType\t0\t# 0 - doubly occupied, 1 - SpinUp,SpinDown\n\
-MaxPsiDouble\t2\t# here: specifying both maximum number of SpinUp- and -Down-states\n\
-PsiMaxNoUp\t2\t# here: specifying maximum number of SpinUp-states\n\
-PsiMaxNoDown\t2\t# here: specifying maximum number of SpinDown-states\n\
-AddPsis\t0\t# Additional unoccupied Psis for bandgap determination\n\
-\n\
-RCut\t20\t# R-cut for the ewald summation\n\
-StructOpt\t0\t# Do structure optimization beforehand\n\
-IsAngstroem\t1\t# 0 - Bohr, 1 - Angstroem\n\
-RelativeCoord\t0\t# whether ion coordinates are relative (1) or absolute (0)\n\
-MaxTypes\t2\t# maximum number of different ion types\n\
-\n\
-# Ion type data (PP = PseudoPotential, Z = atomic number)\n\
-#Ion_TypeNr.\tAmount\tZ\tRGauss\tL_Max(PP)L_Loc(PP)IonMass\t# chemical name, symbol\n\
-Ion_Type1\t2\t1\t1.0\t3\t3\t1.008\tHydrogen\tH\n\
-Ion_Type2\t1\t8\t1.0\t3\t3\t15.999\tOxygen\tO\n\
-#Ion_TypeNr._Nr.R[0]\tR[1]\tR[2]\tMoveType (0 MoveIon, 1 FixedIon)\n\
-Ion_Type2_1\t0.000000000\t0.000000000\t0.000000000\t0 # molecule nr 0\n\
-Ion_Type1_1\t0.758602\t0.000000000\t0.504284\t0 # molecule nr 1\n\
-Ion_Type1_2\t0.758602\t0.000000000\t-0.504284\t0 # molecule nr 2\n";
-//----|----*|---||--*||---|***|-------|-------|-------|-----|---------------|-|-
-//000000011111111112222222222333333333344444444445555555555666666666677777777778
-//345678901234567890123456789012345678901234567890123456789012345678901234567890
-static string waterPdb = "\
-REMARK  This is a test water molecule as written by TREMOLO.\n\
-ATOM      1  OT  GMT-    0       1.583   1.785   1.480  1.00178.02           O-2\n\
-ATOM      2  HT  GMT-    0       1.186   1.643   2.213  1.00103.58           H+1\n\
-ATOM      3  HT  GMT-    0       2.642   1.896   1.730  1.00126.00           H+1\n\
-ATOM      4  OT  GMT-    1       3.583   1.785   1.480  1.00178.02           O-2\n\
-ATOM      5  HT  GMT-    1       3.186   1.643   2.213  1.00103.58           H+1\n\
-ATOM      6  HT  GMT-    1       4.642   1.896   1.730  1.00126.00           H+1\n\
-CONECT    1    2    3\n\
-CONECT    2    1\n\
-CONECT    3    1\n\
-CONECT    4    5    6\n\
-CONECT    5    4\n\
-CONECT    6    4\n\
-END";
-static string waterMpqc ="% Created by MoleCuilder\n\
-mpqc: (\n\
-\tsavestate = no\n\
-\tdo_gradient = yes\n\
-\tmole<MBPT2>: (\n\
-\t\tmaxiter = 200\n\
-\t\tbasis = $:basis\n\
-\t\tmolecule = $:molecule\n\
-\t\treference<CLHF>: (\n\
-\t\t\tbasis = $:basis\n\
-\t\t\tmolecule = $:molecule\n\
-\t\t)\n\
-\t)\n\
-)\n\
-molecule<Molecule>: (\n\
-\tunit = angstrom\n\
-\t{ atoms geometry } = {\n\
-\t\tO [ -0.505735\t0\t0 ]\n\
-\t\tH [ 0.252867\t0\t0.504284 ]\n\
-\t\tH [ 0.252867\t0\t-0.504284 ]\n\
-\t}\n\
-)\n\
-basis<GaussianBasisSet>: (\n\
-\tname = \"3-21G\"\n\
-\tmolecule = $:molecule\n\
-)\n";
-static string waterXyz = "3\n\tH2O: water molecule\nO\t0\t0\t0\nH\t0.758602\t0\t0.504284\nH\t0.758602\t0\t-0.504284\n";
-
-void ParserCommonUnitTest::setUp() {
-  World::getInstance();
-
-  setVerbosity(2);
-
-  // we need hydrogens and oxygens in the following tests
-  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(1) != NULL);
-  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(8) != NULL);
-}
-
-void ParserCommonUnitTest::tearDown() {
-  ChangeTracker::purgeInstance();
-  World::purgeInstance();
-}
-
-/************************************ tests ***********************************/
-
-void ParserCommonUnitTest::rewriteAnXyzTest() {
-  cout << "Testing the XYZ parser." << endl;
-  XyzParser* testParser = new XyzParser();
-  stringstream input;
-  input << waterXyz;
-  testParser->load(&input);
-  input.clear();
-
-  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
-
-  // store and parse in again
-  stringstream output;
-  testParser->save(&output);
-  input << output.str();
-  testParser->load(&input);
-
-  // now twice as many
-  CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
-
-  // check every atom
-  World::AtomComposite atoms = World::getInstance().getAllAtoms();
-  World::AtomComposite::const_iterator firstiter = atoms.begin();
-  World::AtomComposite::const_iterator seconditer = atoms.begin();
-  for (size_t i=0;i<3;i++)
-    ++seconditer;
-  for (;
-      seconditer != atoms.end();
-      ++firstiter,++seconditer) {
-    // check position and type (only stuff xyz stores)
-    CPPUNIT_ASSERT_EQUAL((*firstiter)->getPosition(),(*seconditer)->getPosition());
-    CPPUNIT_ASSERT_EQUAL((*firstiter)->getType(),(*seconditer)->getType());
-  }
-}
-
-void ParserCommonUnitTest::readwritePcpTest() {
-  stringstream input(waterPcp);
-  PcpParser* testParser = new PcpParser();
-  testParser->load(&input);
-  input.clear();
-
-  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
-
-  // check that equality function is ok
-  CPPUNIT_ASSERT(*testParser == *testParser);
-
-  stringstream output;
-  testParser->save(&output);
-
-  input << output.str();
-  PcpParser* testParser2 = new PcpParser();
-  testParser2->load(&input);
-
-  CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
-
-  CPPUNIT_ASSERT(*testParser == *testParser2);
-}
-
-void ParserCommonUnitTest::readwritePdbTest() {
-  stringstream input;
-  input << waterPdb;
-  PdbParser* testParser = new PdbParser();
-  testParser->load(&input);
-  input.clear();
-
-  CPPUNIT_ASSERT_EQUAL(6, World::getInstance().numAtoms());
-
-  stringstream output;
-  testParser->save(&output);
-
-//  std::cout << "Save PDB is:" << std::endl;
-//  std::cout << output.str() << std::endl;
-
-  input << output.str();
-  PdbParser* testParser2 = new PdbParser();
-  testParser2->load(&input);
-
-  CPPUNIT_ASSERT_EQUAL(12, World::getInstance().numAtoms());
-}
-
-void ParserCommonUnitTest::writeMpqcTest() {
-  // build up water molecule
-  atom *Walker = NULL;
-  Walker = World::getInstance().createAtom();
-  Walker->setType(8);
-  Walker->setPosition(Vector(0,0,0));
-  Walker = World::getInstance().createAtom();
-  Walker->setType(1);
-  Walker->setPosition(Vector(0.758602,0,0.504284));
-  Walker = World::getInstance().createAtom();
-  Walker->setType(1);
-  Walker->setPosition(Vector(0.758602,0,-0.504284));
-  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
-
-  // create two stringstreams, one stored, one created
-  stringstream input(waterMpqc);
-  MpqcParser* testParser = new MpqcParser();
-  stringstream output;
-  testParser->save(&output);
-
-  // compare both configs
-  string first = input.str();
-  string second = output.str();
-  CPPUNIT_ASSERT(first == second);
-}
Index: c/unittests/ParserCommonUnitTest.hpp
===================================================================
--- src/unittests/ParserCommonUnitTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * ParserCommonUnitTest.hpp
- *
- *  Created on: Mar 3, 2010
- *      Author: metzler
- */
-#ifndef PARSERCOMMONUNITTEST_HPP_
-#define PARSERCOMMONUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <string>
-
-class ParserCommonUnitTest :  public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( ParserCommonUnitTest ) ;
-  CPPUNIT_TEST ( rewriteAnXyzTest );
-  CPPUNIT_TEST ( readwritePdbTest );
-  CPPUNIT_TEST ( readwritePcpTest );
-  CPPUNIT_TEST ( writeMpqcTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void rewriteAnXyzTest();
-  void readwritePdbTest();
-  void readwritePcpTest();
-  void writeMpqcTest();
-};
-
-#endif /* PARSERCOMMONUNITTEST_HPP_ */
Index: c/unittests/ParserTremoloUnitTest.cpp
===================================================================
--- src/unittests/ParserTremoloUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,174 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ParserTremoloUnitTest.cpp
- *
- *  Created on: Mar 3, 2010
- *      Author: metzler
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "ParserTremoloUnitTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "Parser/MpqcParser.hpp"
-#include "Parser/PdbParser.hpp"
-#include "Parser/PcpParser.hpp"
-#include "Parser/TremoloParser.hpp"
-#include "Parser/XyzParser.hpp"
-#include "World.hpp"
-#include "atom.hpp"
-#include "element.hpp"
-#include "periodentafel.hpp"
-#include "Descriptors/AtomTypeDescriptor.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-using namespace std;
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ParserTremoloUnitTest );
-
-static string Tremolo_Atomdata1 = "# ATOMDATA\tId\tname\tType\tx=3\n";
-static string Tremolo_Atomdata2 = "#\n#ATOMDATA Id name Type x=3\n1 hydrogen H 3.0 4.5 0.1\n\n";
-static string Tremolo_invalidkey = "#\n#ATOMDATA Id name foo Type x=3\n\n\n";
-static string Tremolo_velocity = "#\n#ATOMDATA Id name Type u=3\n1 hydrogen H 3.0 4.5 0.1\n\n";
-static string Tremolo_neighbours = "#\n#ATOMDATA Id Type neighbors=2\n1 H 3 0\n2 H 3 0\n3 O 1 2\n";
-static string Tremolo_improper = "#\n#ATOMDATA Id Type imprData\n8 H 9-10\n9 H 10-8,8-10\n10 O -\n";
-static string Tremolo_torsion = "#\n#ATOMDATA Id Type torsion\n8 H 9-10\n9 H 10-8,8-10\n10 O -\n";
-static string Tremolo_full = "# ATOMDATA\tx=3\tu=3\tF\tstress\tId\tneighbors=5\timprData\tGroupMeasureTypeNo\tType\textType\tname\tresName\tchainID\tresSeq\toccupancy\ttempFactor\tsegID\tCharge\tcharge\tGrpTypeNo\ttorsion\n0\t0\t0\t0\t0\t0\t0\t0\t1\t0\t0\t0\t0\t0\t-\t0\tH\t-\t-\t-\t0\t0\t0\t0\t0\t0\t0\t0\t-\t\n";
-
-void ParserTremoloUnitTest::setUp() {
-  World::getInstance();
-
-  // we need hydrogens and oxygens in the following tests
-  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(1) != NULL);
-  CPPUNIT_ASSERT(World::getInstance().getPeriode()->FindElement(8) != NULL);
-}
-
-void ParserTremoloUnitTest::tearDown() {
-  ChangeTracker::purgeInstance();
-  World::purgeInstance();
-}
-
-/************************************ tests ***********************************/
-
-void ParserTremoloUnitTest::readTremoloPreliminaryCommentsTest() {
-  cout << "Testing the tremolo parser." << endl;
-  TremoloParser* testParser = new TremoloParser();
-  stringstream input, output;
-
-  // Atomdata beginning with "# ATOMDATA"
-  input << Tremolo_Atomdata1;
-  testParser->load(&input);
-  testParser->save(&output);
-  CPPUNIT_ASSERT(Tremolo_Atomdata1 == output.str());
-  input.clear();
-  output.clear();
-
-  // Atomdata beginning with "#ATOMDATA"
-  input << Tremolo_Atomdata2;
-  testParser->load(&input);
-  testParser->save(&output);
-  CPPUNIT_ASSERT(output.str().find("hydrogen") != string::npos);
-  input.clear();
-  output.clear();
-
-  // Invalid key in Atomdata line
-  input << Tremolo_invalidkey;
-  testParser->load(&input);
-  //TODO: proove invalidity
-  input.clear();
-}
-
-void ParserTremoloUnitTest::readTremoloCoordinatesTest() {
-  TremoloParser* testParser = new TremoloParser();
-  stringstream input;
-
-  // One simple data line
-  input << Tremolo_Atomdata2;
-  testParser->load(&input);
-  CPPUNIT_ASSERT(World::getInstance().getAtom(AtomByType(1))->at(0) == 3.0);
-  input.clear();
-}
-
-void ParserTremoloUnitTest::readTremoloVelocityTest() {
-  TremoloParser* testParser = new TremoloParser();
-  stringstream input;
-
-  // One simple data line
-  input << Tremolo_velocity;
-  testParser->load(&input);
-  CPPUNIT_ASSERT(World::getInstance().getAtom(AtomByType(1))->AtomicVelocity[0] == 3.0);
-  input.clear();
-}
-
-void ParserTremoloUnitTest::readTremoloNeighborInformationTest() {
-  TremoloParser* testParser = new TremoloParser();
-  stringstream input;
-
-  // Neighbor data
-  input << Tremolo_neighbours;
-  testParser->load(&input);
-
-  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
-  CPPUNIT_ASSERT(World::getInstance().getAtom(AtomByType(8))->
-      IsBondedTo(World::getInstance().getAtom(AtomByType(1))));
-  input.clear();
-}
-
-void ParserTremoloUnitTest::readAndWriteTremoloImprDataInformationTest() {
-  TremoloParser* testParser = new TremoloParser();
-  stringstream input, output;
-
-  // Neighbor data
-  input << Tremolo_improper;
-  testParser->load(&input);
-  testParser->save(&output);
-  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
-  CPPUNIT_ASSERT(output.str().find("2-0,0-2") != string::npos);
-  input.clear();
-  output.clear();
-}
-
-void ParserTremoloUnitTest::readAndWriteTremoloTorsionInformationTest() {
-  TremoloParser* testParser = new TremoloParser();
-  stringstream input, output;
-
-  // Neighbor data
-  input << Tremolo_torsion;
-  testParser->load(&input);
-  testParser->save(&output);
-  CPPUNIT_ASSERT_EQUAL(3, World::getInstance().numAtoms());
-  CPPUNIT_ASSERT(output.str().find("2-0,0-2") != string::npos);
-  input.clear();
-  output.clear();
-}
-
-void ParserTremoloUnitTest::writeTremoloTest() {
-  TremoloParser* testParser = new TremoloParser();
-  stringstream output;
-
-  // with the maximum number of fields and minimal information, default values are printed
-  atom* newAtom = World::getInstance().createAtom();
-  newAtom->setType(1);
-  testParser->setFieldsForSave("x=3 u=3 F stress Id neighbors=5 imprData GroupMeasureTypeNo Type extType name resName chainID resSeq occupancy tempFactor segID Charge charge GrpTypeNo torsion");
-  testParser->save(&output);
-  CPPUNIT_ASSERT(output.str() == Tremolo_full);
-
-  cout << "testing the tremolo parser is done" << endl;
-}
Index: c/unittests/ParserTremoloUnitTest.hpp
===================================================================
--- src/unittests/ParserTremoloUnitTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,38 +1,0 @@
-/*
- * ParserTremoloUnitTest.hpp
- *
- *  Created on: Mar 3, 2010
- *      Author: metzler
- */
-#ifndef PARSERTREMOLOUNITTEST_HPP_
-#define PARSERTREMOLOUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-#include <string>
-
-class ParserTremoloUnitTest :  public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( ParserTremoloUnitTest ) ;
-  CPPUNIT_TEST ( readTremoloPreliminaryCommentsTest );
-  CPPUNIT_TEST ( readTremoloCoordinatesTest );
-  CPPUNIT_TEST ( readTremoloVelocityTest );
-  CPPUNIT_TEST ( readTremoloNeighborInformationTest );
-  CPPUNIT_TEST ( readAndWriteTremoloImprDataInformationTest );
-  CPPUNIT_TEST ( readAndWriteTremoloTorsionInformationTest );
-  CPPUNIT_TEST ( writeTremoloTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void readTremoloPreliminaryCommentsTest();
-  void readTremoloCoordinatesTest();
-  void readTremoloVelocityTest();
-  void readTremoloNeighborInformationTest();
-  void readAndWriteTremoloImprDataInformationTest();
-  void readAndWriteTremoloTorsionInformationTest();
-  void writeTremoloTest();
-};
-
-#endif /* PARSERTREMOLOUNITTEST_HPP_ */
Index: src/unittests/PeriodentafelUnitTest.cpp
===================================================================
--- src/unittests/PeriodentafelUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/PeriodentafelUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,95 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * PeriodentafelUnitTest.cpp
+ *
+ *  Created on: May 18, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <sstream>
+#include <iostream>
+
+#include "Helpers/Assert.hpp"
+
+#include "World.hpp"
+#include "element.hpp"
+#include "elements_db.hpp"
+#include "periodentafel.hpp"
+
+#include "PeriodentafelUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( periodentafelTest );
+
+
+void periodentafelTest::setUp()
+{
+  // make sure world is present
+  tafel = World::getInstance().getPeriode();
+  CPPUNIT_ASSERT(tafel != NULL && "could not obtain periodentafel");
+};
+
+
+void periodentafelTest::tearDown()
+{
+  World::purgeInstance();
+};
+
+/** UnitTest for AddRemoveTest().
+ */
+void periodentafelTest::AddRemoveTest()
+{
+  // copy the element
+  const element * ElementPtr = tafel->FindElement(3);
+  CPPUNIT_ASSERT( ElementPtr != NULL && "could not find element lithium");
+  element *Elemental = new element(*ElementPtr);
+  // remove element
+  tafel->RemoveElement((element * const)ElementPtr);
+  ElementPtr = tafel->FindElement(3);
+  CPPUNIT_ASSERT_EQUAL( (const element *)NULL, ElementPtr );
+  // add element again
+  tafel->AddElement((element * const)Elemental);
+  ElementPtr = tafel->FindElement(3);
+  CPPUNIT_ASSERT( ElementPtr != NULL && "could not find re-added element lithium");
+};
+
+/** UnitTest for LoadStoreTest().
+ * TODO: periodentafelTest::LoadStoreTest() not implemented yet
+ */
+void periodentafelTest::LoadStoreTest()
+{
+  // reload all databases
+  stringstream elementsDBstream(elementsDB,ios_base::in);
+  CPPUNIT_ASSERT(tafel->LoadElementsDatabase(elementsDBstream) && "General element initialization failed");
+  CPPUNIT_ASSERT(tafel->LoadValenceDatabase(new stringstream(valenceDB,ios_base::in)) && "Valence entry of element initialization failed");
+  CPPUNIT_ASSERT(tafel->LoadOrbitalsDatabase(new stringstream(orbitalsDB,ios_base::in)) && "Orbitals entry of element initialization failed");
+  CPPUNIT_ASSERT(tafel->LoadHBondAngleDatabase(new stringstream(HbondangleDB,ios_base::in)) && "HBond angle entry of element initialization failed");
+  CPPUNIT_ASSERT(tafel->LoadHBondLengthsDatabase(new stringstream(HbonddistanceDB,ios_base::in)) && "HBond distance entry of element initialization failed");
+  // check presence of elements
+  atomicNumber_t Z = 1;
+  for(periodentafel::const_iterator ElementRunner = tafel->begin(); ElementRunner != tafel->end(); ++ElementRunner)
+    CPPUNIT_ASSERT( (ElementRunner->second->getNumber() == Z++) && "element is missing in sequence");
+};
Index: src/unittests/PeriodentafelUnitTest.hpp
===================================================================
--- src/unittests/PeriodentafelUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/PeriodentafelUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,39 @@
+/*
+ * PeriodentafelUnitTest.hpp
+ *
+ *  Created on: May 18, 2010
+ *      Author: heber
+ */
+
+#ifndef PERIODENTAFELUNITTEST_HPP_
+#define PERIODENTAFELUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class element;
+class periodentafel;
+
+/********************************************** Test classes **************************************/
+
+class periodentafelTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( periodentafelTest) ;
+    CPPUNIT_TEST ( AddRemoveTest );
+    CPPUNIT_TEST ( LoadStoreTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void AddRemoveTest();
+      void LoadStoreTest();
+
+private:
+
+      const element *hydrogen;
+      const element *carbon;
+      periodentafel *tafel;
+
+};
+
+#endif /* PERIODENTAFELUNITTEST_HPP_ */
Index: c/unittests/PlaneUnittest.cpp
===================================================================
--- src/unittests/PlaneUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,230 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * PlaneUnittest.cpp
- *
- *  Created on: Apr 30, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "PlaneUnittest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cmath>
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-#include "LinearAlgebra/Vector.hpp"
-#include "LinearAlgebra/Line.hpp"
-
-CPPUNIT_TEST_SUITE_REGISTRATION( PlaneUnittest );
-
-void PlaneUnittest::setUp(){
-  p1 = new Plane(unitVec[0],unitVec[1],unitVec[2]);
-  p2 = new Plane(unitVec[0],unitVec[1],zeroVec);
-  p3 = new Plane(unitVec[0],zeroVec,unitVec[2]);
-  p4 = new Plane(zeroVec,unitVec[1],unitVec[2]);
-}
-
-void PlaneUnittest::tearDown(){
-  delete p1;
-  delete p2;
-  delete p3;
-  delete p4;
-}
-
-void PlaneUnittest::constructionErrorTest(){
-  // try several method of construction..
-  // see if error checking works
-
-  // three points
-  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],unitVec[1],unitVec[2]));
-  // when only two points are differnt this gives an error
-  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],unitVec[1],unitVec[1]),LinearDependenceException);
-  // same with only one point
-  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],unitVec[0],unitVec[0]),LinearDependenceException);
-
-  // use two vector giving two directions
-  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],unitVec[1],0));
-  // and again this is actually only one vector
-  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],unitVec[0],0),LinearDependenceException);
-  // Zero vector does not give a good direction
-  CPPUNIT_ASSERT_THROW(Plane(unitVec[0],zeroVec,0),ZeroVectorException);
-
-  // use a normalvector and an scalar offset
-  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],0));
-  // The zero vector is no good as a normalvector
-  CPPUNIT_ASSERT_THROW(Plane(zeroVec,0),ZeroVectorException);
-
-  // use a normalvector and an offset vector
-  CPPUNIT_ASSERT_NO_THROW(Plane(unitVec[0],zeroVec));
-  // and the bad zeroVector again
-  CPPUNIT_ASSERT_THROW(Plane(zeroVec,zeroVec),ZeroVectorException);
-}
-
-
-// we need to test normals independent of the direction
-bool testNormal(const Vector &normal1, const Vector &normal2){
-  return (normal1==normal2) || (normal1==-1*normal2);
-}
-
-void PlaneUnittest::constructionResultTest(){
-  {
-    // construct with three points on plane
-    Plane p1(unitVec[0],unitVec[1],zeroVec);
-    CPPUNIT_ASSERT(testNormal(unitVec[2],p1.getNormal()));
-    CPPUNIT_ASSERT_EQUAL(0.,p1.getOffset());
-
-    Plane p2(unitVec[0],unitVec[2],zeroVec);
-    CPPUNIT_ASSERT(testNormal(unitVec[1],p2.getNormal()));
-    CPPUNIT_ASSERT_EQUAL(0.,p2.getOffset());
-
-    Plane p3(unitVec[1],unitVec[2],zeroVec);
-    CPPUNIT_ASSERT(testNormal(unitVec[0],p3.getNormal()));
-    CPPUNIT_ASSERT_EQUAL(0.,p3.getOffset());
-  }
-  {
-    // construct with two directions + offset
-    Plane p1(unitVec[0],unitVec[1],0);
-    CPPUNIT_ASSERT(testNormal(unitVec[2],p1.getNormal()));
-    CPPUNIT_ASSERT_EQUAL(0.,p1.getOffset());
-
-    Plane p2(unitVec[0],unitVec[2],0);
-    CPPUNIT_ASSERT(testNormal(unitVec[1],p2.getNormal()));
-    CPPUNIT_ASSERT_EQUAL(0.,p2.getOffset());
-
-    Plane p3(unitVec[1],unitVec[2],0);
-    CPPUNIT_ASSERT(testNormal(unitVec[0],p3.getNormal()));
-    CPPUNIT_ASSERT_EQUAL(0.,p3.getOffset());
-  }
-}
-
-void PlaneUnittest::pointsTest(){
-  std::vector<Vector> points1 = p1->getPointsOnPlane();
-  CPPUNIT_ASSERT(p1->isContained(points1[0]));
-  CPPUNIT_ASSERT(p1->isContained(points1[1]));
-  CPPUNIT_ASSERT(p1->isContained(points1[2]));
-  // check that the three points differ
-  CPPUNIT_ASSERT(points1[0]!=points1[1]);
-  CPPUNIT_ASSERT(points1[0]!=points1[2]);
-  CPPUNIT_ASSERT(points1[1]!=points1[2]);
-
-
-  std::vector<Vector> points2 = p2->getPointsOnPlane();
-  CPPUNIT_ASSERT(p2->isContained(points2[0]));
-  CPPUNIT_ASSERT(p2->isContained(points2[1]));
-  CPPUNIT_ASSERT(p2->isContained(points2[2]));
-  // check that the three points differ
-  CPPUNIT_ASSERT(points2[0]!=points2[1]);
-  CPPUNIT_ASSERT(points2[0]!=points2[2]);
-  CPPUNIT_ASSERT(points2[1]!=points2[2]);
-
-  std::vector<Vector> points3 = p3->getPointsOnPlane();
-  CPPUNIT_ASSERT(p3->isContained(points3[0]));
-  CPPUNIT_ASSERT(p3->isContained(points3[1]));
-  CPPUNIT_ASSERT(p3->isContained(points3[2]));
-  // check that the three points differ
-  CPPUNIT_ASSERT(points3[0]!=points3[1]);
-  CPPUNIT_ASSERT(points3[0]!=points3[2]);
-  CPPUNIT_ASSERT(points3[1]!=points3[2]);
-
-  std::vector<Vector> points4 = p4->getPointsOnPlane();
-  CPPUNIT_ASSERT(p4->isContained(points4[0]));
-  CPPUNIT_ASSERT(p4->isContained(points4[1]));
-  CPPUNIT_ASSERT(p4->isContained(points4[2]));
-  // check that the three points differ
-  CPPUNIT_ASSERT(points4[0]!=points4[1]);
-  CPPUNIT_ASSERT(points4[0]!=points4[2]);
-  CPPUNIT_ASSERT(points4[1]!=points4[2]);
-}
-
-
-void PlaneUnittest::operationsTest(){
-  {
-    Vector t = (1./3.)*(unitVec[0]+unitVec[1]+unitVec[2]);
-    CPPUNIT_ASSERT(fabs(p1->distance(zeroVec)-t.Norm()) < MYEPSILON);
-    CPPUNIT_ASSERT_EQUAL(t,p1->getClosestPoint(zeroVec));
-  }
-
-  CPPUNIT_ASSERT(fabs(p2->distance(unitVec[2])-1) < MYEPSILON);
-  CPPUNIT_ASSERT_EQUAL(zeroVec,p2->getClosestPoint(unitVec[2]));
-  CPPUNIT_ASSERT(fabs(p3->distance(unitVec[1])-1) < MYEPSILON);
-  CPPUNIT_ASSERT_EQUAL(zeroVec,p3->getClosestPoint(unitVec[1]));
-  CPPUNIT_ASSERT(fabs(p4->distance(unitVec[0])-1) < MYEPSILON);
-  CPPUNIT_ASSERT_EQUAL(zeroVec,p4->getClosestPoint(unitVec[0]));
-}
-
-void PlaneUnittest::mirrorTest(){
-  Vector fixture;
-
-  // some Vectors that lie on the planes
-  fixture = p1->mirrorVector(unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = p1->mirrorVector(unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = p1->mirrorVector(unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  fixture = p2->mirrorVector(zeroVec);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = p2->mirrorVector(unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = p2->mirrorVector(unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-
-  fixture = p3->mirrorVector(zeroVec);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = p3->mirrorVector(unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[0]);
-  fixture = p3->mirrorVector(unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  fixture = p4->mirrorVector(zeroVec);
-  CPPUNIT_ASSERT_EQUAL(fixture,zeroVec);
-  fixture = p4->mirrorVector(unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[1]);
-  fixture = p4->mirrorVector(unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(fixture,unitVec[2]);
-
-  // some Vectors outside of the planes
-  {
-    Vector t = (2./3.)*(unitVec[0]+unitVec[1]+unitVec[2]);
-    fixture = p1->mirrorVector(zeroVec);
-    CPPUNIT_ASSERT_EQUAL(fixture,t);
-  }
-
-  fixture = p2->mirrorVector(unitVec[2]);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[2]);
-  fixture = p3->mirrorVector(unitVec[1]);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[1]);
-  fixture = p4->mirrorVector(unitVec[0]);
-  CPPUNIT_ASSERT_EQUAL(fixture,-1*unitVec[0]);
-}
-
-void PlaneUnittest::LineIntersectionTest(){
-  Vector fixture;
-  // plane at (0,0,0) normal to (1,0,0) cuts line from (0,0,0) to (2,1,0) at ???
-  Line l1 = makeLineThrough(zeroVec,Vector(2,1,0));
-  CPPUNIT_ASSERT_NO_THROW(fixture = Plane(unitVec[0], zeroVec).GetIntersection(l1) );
-  CPPUNIT_ASSERT_EQUAL( zeroVec, fixture );
-
-  // plane at (2,1,0) normal to (0,1,0) cuts line from (1,0,0) to (0,1,1) at ???
-  Line l2 = makeLineThrough(unitVec[0],Vector(0,1,1));
-  CPPUNIT_ASSERT_NO_THROW(fixture = Plane(unitVec[1], Vector(2,1,0)).GetIntersection(l2) );
-  CPPUNIT_ASSERT_EQUAL( Vector(0., 1., 1.), fixture );
-}
Index: c/unittests/PlaneUnittest.hpp
===================================================================
--- src/unittests/PlaneUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * PlaneUnittest.hpp
- *
- *  Created on: Apr 30, 2010
- *      Author: crueger
- */
-
-#ifndef PLANEUNITTEST_HPP_
-#define PLANEUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "LinearAlgebra/Plane.hpp"
-
-class PlaneUnittest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( PlaneUnittest) ;
-  CPPUNIT_TEST ( constructionErrorTest );
-  CPPUNIT_TEST ( constructionResultTest );
-  CPPUNIT_TEST ( pointsTest );
-  CPPUNIT_TEST ( operationsTest );
-  CPPUNIT_TEST ( mirrorTest );
-  CPPUNIT_TEST ( LineIntersectionTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void constructionErrorTest();
-  void constructionResultTest();
-  void pointsTest();
-  void operationsTest();
-  void mirrorTest();
-  void LineIntersectionTest();
-
-private:
-  Plane *p1;
-  Plane *p2;
-  Plane *p3;
-  Plane *p4;
-};
-
-#endif /* PLANEUNITTEST_HPP_ */
Index: c/unittests/RegistryUnitTest.cpp
===================================================================
--- src/unittests/RegistryUnitTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,52 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * RegistryUnitTest.cpp
- *
- *  Created on: Oct 27, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "RegistryUnitTest.hpp"
-
-#include <typeinfo>
-
-#include "Actions/ActionRegistry.hpp"
-#include "Actions/ActionTraits.hpp"
-#include "Actions/OptionRegistry.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( RegistryTest );
-
-
-void RegistryTest::setUp()
-{};
-
-
-void RegistryTest::tearDown()
-{};
-
-void RegistryTest::InOutCheck()
-{
-  CPPUNIT_ASSERT(true);
-}
Index: c/unittests/RegistryUnitTest.hpp
===================================================================
--- src/unittests/RegistryUnitTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,30 +1,0 @@
-/*
- * RegistryUnitTest.hpp
- *
- *  Created on: Oct 27, 2010
- *      Author: heber
- */
-
-#ifndef REGISTRYUNITTEST_HPP_
-#define REGISTRYUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-
-/********************************************** Test classes **************************************/
-
-class RegistryTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( RegistryTest) ;
-    CPPUNIT_TEST ( InOutCheck );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void InOutCheck();
-
-private:
-};
-
-#endif /* REGISTRYUNITTEST_HPP_ */
Index: c/unittests/ShapeUnittest.cpp
===================================================================
--- src/unittests/ShapeUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,655 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * ShapeUnittest.cpp
- *
- *  Created on: Jun 18, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "ShapeUnittest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cmath>
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-#include "LinearAlgebra/Vector.hpp"
-#include "Shapes/Shape.hpp"
-
-#include "Shapes/BaseShapes.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ShapeUnittest );
-
-void ShapeUnittest::setUp()
-{
-  v000 =  0*unitVec[0]+0*unitVec[1]+0*unitVec[2];
-  v100 =  1*unitVec[0]+0*unitVec[1]+0*unitVec[2];
-  v200 = -1*unitVec[0]+0*unitVec[1]+0*unitVec[2];
-  v010 =  0*unitVec[0]+1*unitVec[1]+0*unitVec[2];
-  v110 =  1*unitVec[0]+1*unitVec[1]+0*unitVec[2];
-  v210 = -1*unitVec[0]+1*unitVec[1]+0*unitVec[2];
-  v020 =  0*unitVec[0]-1*unitVec[1]+0*unitVec[2];
-  v120 =  1*unitVec[0]-1*unitVec[1]+0*unitVec[2];
-  v220 = -1*unitVec[0]-1*unitVec[1]+0*unitVec[2];
-  v001 =  0*unitVec[0]+0*unitVec[1]+1*unitVec[2];
-  v101 =  1*unitVec[0]+0*unitVec[1]+1*unitVec[2];
-  v201 = -1*unitVec[0]+0*unitVec[1]+1*unitVec[2];
-  v011 =  0*unitVec[0]+1*unitVec[1]+1*unitVec[2];
-  v111 =  1*unitVec[0]+1*unitVec[1]+1*unitVec[2];
-  v211 = -1*unitVec[0]+1*unitVec[1]+1*unitVec[2];
-  v021 =  0*unitVec[0]-1*unitVec[1]+1*unitVec[2];
-  v121 =  1*unitVec[0]-1*unitVec[1]+1*unitVec[2];
-  v221 = -1*unitVec[0]-1*unitVec[1]+1*unitVec[2];
-  v002 =  0*unitVec[0]+0*unitVec[1]-1*unitVec[2];
-  v102 =  1*unitVec[0]+0*unitVec[1]-1*unitVec[2];
-  v202 = -1*unitVec[0]+0*unitVec[1]-1*unitVec[2];
-  v012 =  0*unitVec[0]+1*unitVec[1]-1*unitVec[2];
-  v112 =  1*unitVec[0]+1*unitVec[1]-1*unitVec[2];
-  v212 = -1*unitVec[0]+1*unitVec[1]-1*unitVec[2];
-  v022 =  0*unitVec[0]-1*unitVec[1]-1*unitVec[2];
-  v122 =  1*unitVec[0]-1*unitVec[1]-1*unitVec[2];
-  v222 = -1*unitVec[0]-1*unitVec[1]-1*unitVec[2];
-}
-
-void ShapeUnittest::tearDown()
-{}
-
-
-void ShapeUnittest::baseShapesTest(){
-  CPPUNIT_ASSERT(!Nowhere().isInside(v000));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v100));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v200));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v010));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v110));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v210));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v020));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v120));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v220));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v001));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v101));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v201));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v011));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v111));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v211));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v021));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v121));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v221));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v002));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v102));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v202));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v012));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v112));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v212));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v022));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v122));
-  CPPUNIT_ASSERT(!Nowhere().isInside(v222));
-
-  CPPUNIT_ASSERT(Everywhere().isInside(v000));
-  CPPUNIT_ASSERT(Everywhere().isInside(v100));
-  CPPUNIT_ASSERT(Everywhere().isInside(v200));
-  CPPUNIT_ASSERT(Everywhere().isInside(v010));
-  CPPUNIT_ASSERT(Everywhere().isInside(v110));
-  CPPUNIT_ASSERT(Everywhere().isInside(v210));
-  CPPUNIT_ASSERT(Everywhere().isInside(v020));
-  CPPUNIT_ASSERT(Everywhere().isInside(v120));
-  CPPUNIT_ASSERT(Everywhere().isInside(v220));
-  CPPUNIT_ASSERT(Everywhere().isInside(v001));
-  CPPUNIT_ASSERT(Everywhere().isInside(v101));
-  CPPUNIT_ASSERT(Everywhere().isInside(v201));
-  CPPUNIT_ASSERT(Everywhere().isInside(v011));
-  CPPUNIT_ASSERT(Everywhere().isInside(v111));
-  CPPUNIT_ASSERT(Everywhere().isInside(v211));
-  CPPUNIT_ASSERT(Everywhere().isInside(v021));
-  CPPUNIT_ASSERT(Everywhere().isInside(v121));
-  CPPUNIT_ASSERT(Everywhere().isInside(v221));
-  CPPUNIT_ASSERT(Everywhere().isInside(v002));
-  CPPUNIT_ASSERT(Everywhere().isInside(v102));
-  CPPUNIT_ASSERT(Everywhere().isInside(v202));
-  CPPUNIT_ASSERT(Everywhere().isInside(v012));
-  CPPUNIT_ASSERT(Everywhere().isInside(v112));
-  CPPUNIT_ASSERT(Everywhere().isInside(v212));
-  CPPUNIT_ASSERT(Everywhere().isInside(v022));
-  CPPUNIT_ASSERT(Everywhere().isInside(v122));
-  CPPUNIT_ASSERT(Everywhere().isInside(v222));
-
-  Shape s1 = Sphere();
-
-  CPPUNIT_ASSERT(s1.isInside(v000));
-  CPPUNIT_ASSERT(s1.isInside(v100));
-  CPPUNIT_ASSERT(s1.isInside(v200));
-  CPPUNIT_ASSERT(s1.isInside(v010));
-  CPPUNIT_ASSERT(!s1.isInside(v110));
-  CPPUNIT_ASSERT(!s1.isInside(v210));
-  CPPUNIT_ASSERT(s1.isInside(v020));
-  CPPUNIT_ASSERT(!s1.isInside(v120));
-  CPPUNIT_ASSERT(!s1.isInside(v220));
-  CPPUNIT_ASSERT(s1.isInside(v001));
-  CPPUNIT_ASSERT(!s1.isInside(v101));
-  CPPUNIT_ASSERT(!s1.isInside(v201));
-  CPPUNIT_ASSERT(!s1.isInside(v011));
-  CPPUNIT_ASSERT(!s1.isInside(v111));
-  CPPUNIT_ASSERT(!s1.isInside(v211));
-  CPPUNIT_ASSERT(!s1.isInside(v021));
-  CPPUNIT_ASSERT(!s1.isInside(v121));
-  CPPUNIT_ASSERT(!s1.isInside(v221));
-  CPPUNIT_ASSERT(s1.isInside(v002));
-  CPPUNIT_ASSERT(!s1.isInside(v102));
-  CPPUNIT_ASSERT(!s1.isInside(v202));
-  CPPUNIT_ASSERT(!s1.isInside(v012));
-  CPPUNIT_ASSERT(!s1.isInside(v112));
-  CPPUNIT_ASSERT(!s1.isInside(v212));
-  CPPUNIT_ASSERT(!s1.isInside(v022));
-  CPPUNIT_ASSERT(!s1.isInside(v122));
-  CPPUNIT_ASSERT(!s1.isInside(v222));
-
-  Shape s2 = Cuboid();
-
-  CPPUNIT_ASSERT(s2.isInside(v000));
-  CPPUNIT_ASSERT(s2.isInside(v100));
-  CPPUNIT_ASSERT(!s2.isInside(v200));
-  CPPUNIT_ASSERT(s2.isInside(v010));
-  CPPUNIT_ASSERT(s2.isInside(v110));
-  CPPUNIT_ASSERT(!s2.isInside(v210));
-  CPPUNIT_ASSERT(!s2.isInside(v020));
-  CPPUNIT_ASSERT(!s2.isInside(v120));
-  CPPUNIT_ASSERT(!s2.isInside(v220));
-  CPPUNIT_ASSERT(s2.isInside(v001));
-  CPPUNIT_ASSERT(s2.isInside(v101));
-  CPPUNIT_ASSERT(!s2.isInside(v201));
-  CPPUNIT_ASSERT(s2.isInside(v011));
-  CPPUNIT_ASSERT(s2.isInside(v111));
-  CPPUNIT_ASSERT(!s2.isInside(v211));
-  CPPUNIT_ASSERT(!s2.isInside(v021));
-  CPPUNIT_ASSERT(!s2.isInside(v121));
-  CPPUNIT_ASSERT(!s2.isInside(v221));
-  CPPUNIT_ASSERT(!s2.isInside(v002));
-  CPPUNIT_ASSERT(!s2.isInside(v102));
-  CPPUNIT_ASSERT(!s2.isInside(v202));
-  CPPUNIT_ASSERT(!s2.isInside(v012));
-  CPPUNIT_ASSERT(!s2.isInside(v112));
-  CPPUNIT_ASSERT(!s2.isInside(v212));
-  CPPUNIT_ASSERT(!s2.isInside(v022));
-  CPPUNIT_ASSERT(!s2.isInside(v122));
-  CPPUNIT_ASSERT(!s2.isInside(v222));
-}
-
-void ShapeUnittest::surfaceTest(){
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v000));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v100));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v200));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v010));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v110));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v210));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v020));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v120));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v220));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v001));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v101));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v201));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v011));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v111));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v211));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v021));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v121));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v221));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v002));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v102));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v202));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v012));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v112));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v212));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v022));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v122));
-  CPPUNIT_ASSERT(!Nowhere().isOnSurface(v222));
-
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v000));
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v100));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v200));
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v010));
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v110));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v210));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v020));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v120));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v220));
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v001));
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v101));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v201));
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v011));
-  CPPUNIT_ASSERT(Cuboid().isOnSurface(v111));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v211));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v021));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v121));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v221));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v002));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v102));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v202));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v012));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v112));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v212));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v022));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v122));
-  CPPUNIT_ASSERT(!Cuboid().isOnSurface(v222));
-
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v000));
-  CPPUNIT_ASSERT(Sphere().isOnSurface(v100));
-  CPPUNIT_ASSERT(Sphere().isOnSurface(v200));
-  CPPUNIT_ASSERT(Sphere().isOnSurface(v010));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v110));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v210));
-  CPPUNIT_ASSERT(Sphere().isOnSurface(v020));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v120));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v220));
-  CPPUNIT_ASSERT(Sphere().isOnSurface(v001));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v101));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v201));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v011));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v111));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v211));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v021));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v121));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v221));
-  CPPUNIT_ASSERT(Sphere().isOnSurface(v002));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v102));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v202));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v012));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v112));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v212));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v022));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v122));
-  CPPUNIT_ASSERT(!Sphere().isOnSurface(v222));
-}
-
-void ShapeUnittest::assignmentTest(){
-  Shape s1 = Nowhere();
-  s1 = Everywhere();
-
-  CPPUNIT_ASSERT(s1.isInside(v000));
-  CPPUNIT_ASSERT(s1.isInside(v100));
-  CPPUNIT_ASSERT(s1.isInside(v200));
-  CPPUNIT_ASSERT(s1.isInside(v010));
-  CPPUNIT_ASSERT(s1.isInside(v110));
-  CPPUNIT_ASSERT(s1.isInside(v210));
-  CPPUNIT_ASSERT(s1.isInside(v020));
-  CPPUNIT_ASSERT(s1.isInside(v120));
-  CPPUNIT_ASSERT(s1.isInside(v220));
-  CPPUNIT_ASSERT(s1.isInside(v001));
-  CPPUNIT_ASSERT(s1.isInside(v101));
-  CPPUNIT_ASSERT(s1.isInside(v201));
-  CPPUNIT_ASSERT(s1.isInside(v011));
-  CPPUNIT_ASSERT(s1.isInside(v111));
-  CPPUNIT_ASSERT(s1.isInside(v211));
-  CPPUNIT_ASSERT(s1.isInside(v021));
-  CPPUNIT_ASSERT(s1.isInside(v121));
-  CPPUNIT_ASSERT(s1.isInside(v221));
-  CPPUNIT_ASSERT(s1.isInside(v002));
-  CPPUNIT_ASSERT(s1.isInside(v102));
-  CPPUNIT_ASSERT(s1.isInside(v202));
-  CPPUNIT_ASSERT(s1.isInside(v012));
-  CPPUNIT_ASSERT(s1.isInside(v112));
-  CPPUNIT_ASSERT(s1.isInside(v212));
-  CPPUNIT_ASSERT(s1.isInside(v022));
-  CPPUNIT_ASSERT(s1.isInside(v122));
-  CPPUNIT_ASSERT(s1.isInside(v222));
-
-  Shape s2 = Everywhere();
-  s2 = Nowhere();
-
-  CPPUNIT_ASSERT(!s2.isInside(v000));
-  CPPUNIT_ASSERT(!s2.isInside(v100));
-  CPPUNIT_ASSERT(!s2.isInside(v200));
-  CPPUNIT_ASSERT(!s2.isInside(v010));
-  CPPUNIT_ASSERT(!s2.isInside(v110));
-  CPPUNIT_ASSERT(!s2.isInside(v210));
-  CPPUNIT_ASSERT(!s2.isInside(v020));
-  CPPUNIT_ASSERT(!s2.isInside(v120));
-  CPPUNIT_ASSERT(!s2.isInside(v220));
-  CPPUNIT_ASSERT(!s2.isInside(v001));
-  CPPUNIT_ASSERT(!s2.isInside(v101));
-  CPPUNIT_ASSERT(!s2.isInside(v201));
-  CPPUNIT_ASSERT(!s2.isInside(v011));
-  CPPUNIT_ASSERT(!s2.isInside(v111));
-  CPPUNIT_ASSERT(!s2.isInside(v211));
-  CPPUNIT_ASSERT(!s2.isInside(v021));
-  CPPUNIT_ASSERT(!s2.isInside(v121));
-  CPPUNIT_ASSERT(!s2.isInside(v221));
-  CPPUNIT_ASSERT(!s2.isInside(v002));
-  CPPUNIT_ASSERT(!s2.isInside(v102));
-  CPPUNIT_ASSERT(!s2.isInside(v202));
-  CPPUNIT_ASSERT(!s2.isInside(v012));
-  CPPUNIT_ASSERT(!s2.isInside(v112));
-  CPPUNIT_ASSERT(!s2.isInside(v212));
-  CPPUNIT_ASSERT(!s2.isInside(v022));
-  CPPUNIT_ASSERT(!s2.isInside(v122));
-  CPPUNIT_ASSERT(!s2.isInside(v222));
-
-}
-
-void ShapeUnittest::operatorTest(){
-  {
-    Shape s1 = !Nowhere();
-    CPPUNIT_ASSERT(s1.isInside(v000));
-    CPPUNIT_ASSERT(s1.isInside(v100));
-    CPPUNIT_ASSERT(s1.isInside(v200));
-    CPPUNIT_ASSERT(s1.isInside(v010));
-    CPPUNIT_ASSERT(s1.isInside(v110));
-    CPPUNIT_ASSERT(s1.isInside(v210));
-    CPPUNIT_ASSERT(s1.isInside(v020));
-    CPPUNIT_ASSERT(s1.isInside(v120));
-    CPPUNIT_ASSERT(s1.isInside(v220));
-    CPPUNIT_ASSERT(s1.isInside(v001));
-    CPPUNIT_ASSERT(s1.isInside(v101));
-    CPPUNIT_ASSERT(s1.isInside(v201));
-    CPPUNIT_ASSERT(s1.isInside(v011));
-    CPPUNIT_ASSERT(s1.isInside(v111));
-    CPPUNIT_ASSERT(s1.isInside(v211));
-    CPPUNIT_ASSERT(s1.isInside(v021));
-    CPPUNIT_ASSERT(s1.isInside(v121));
-    CPPUNIT_ASSERT(s1.isInside(v221));
-    CPPUNIT_ASSERT(s1.isInside(v002));
-    CPPUNIT_ASSERT(s1.isInside(v102));
-    CPPUNIT_ASSERT(s1.isInside(v202));
-    CPPUNIT_ASSERT(s1.isInside(v012));
-    CPPUNIT_ASSERT(s1.isInside(v112));
-    CPPUNIT_ASSERT(s1.isInside(v212));
-    CPPUNIT_ASSERT(s1.isInside(v022));
-    CPPUNIT_ASSERT(s1.isInside(v122));
-    CPPUNIT_ASSERT(s1.isInside(v222));
-
-    Shape s2 = !Everywhere();
-    CPPUNIT_ASSERT(!s2.isInside(v000));
-    CPPUNIT_ASSERT(!s2.isInside(v100));
-    CPPUNIT_ASSERT(!s2.isInside(v200));
-    CPPUNIT_ASSERT(!s2.isInside(v010));
-    CPPUNIT_ASSERT(!s2.isInside(v110));
-    CPPUNIT_ASSERT(!s2.isInside(v210));
-    CPPUNIT_ASSERT(!s2.isInside(v020));
-    CPPUNIT_ASSERT(!s2.isInside(v120));
-    CPPUNIT_ASSERT(!s2.isInside(v220));
-    CPPUNIT_ASSERT(!s2.isInside(v001));
-    CPPUNIT_ASSERT(!s2.isInside(v101));
-    CPPUNIT_ASSERT(!s2.isInside(v201));
-    CPPUNIT_ASSERT(!s2.isInside(v011));
-    CPPUNIT_ASSERT(!s2.isInside(v111));
-    CPPUNIT_ASSERT(!s2.isInside(v211));
-    CPPUNIT_ASSERT(!s2.isInside(v021));
-    CPPUNIT_ASSERT(!s2.isInside(v121));
-    CPPUNIT_ASSERT(!s2.isInside(v221));
-    CPPUNIT_ASSERT(!s2.isInside(v002));
-    CPPUNIT_ASSERT(!s2.isInside(v102));
-    CPPUNIT_ASSERT(!s2.isInside(v202));
-    CPPUNIT_ASSERT(!s2.isInside(v012));
-    CPPUNIT_ASSERT(!s2.isInside(v112));
-    CPPUNIT_ASSERT(!s2.isInside(v212));
-    CPPUNIT_ASSERT(!s2.isInside(v022));
-    CPPUNIT_ASSERT(!s2.isInside(v122));
-    CPPUNIT_ASSERT(!s2.isInside(v222));
-  }
-
-  {
-    Shape s1 = Nowhere() || Everywhere();
-    CPPUNIT_ASSERT(s1.isInside(v000));
-    CPPUNIT_ASSERT(s1.isInside(v100));
-    CPPUNIT_ASSERT(s1.isInside(v200));
-    CPPUNIT_ASSERT(s1.isInside(v010));
-    CPPUNIT_ASSERT(s1.isInside(v110));
-    CPPUNIT_ASSERT(s1.isInside(v210));
-    CPPUNIT_ASSERT(s1.isInside(v020));
-    CPPUNIT_ASSERT(s1.isInside(v120));
-    CPPUNIT_ASSERT(s1.isInside(v220));
-    CPPUNIT_ASSERT(s1.isInside(v001));
-    CPPUNIT_ASSERT(s1.isInside(v101));
-    CPPUNIT_ASSERT(s1.isInside(v201));
-    CPPUNIT_ASSERT(s1.isInside(v011));
-    CPPUNIT_ASSERT(s1.isInside(v111));
-    CPPUNIT_ASSERT(s1.isInside(v211));
-    CPPUNIT_ASSERT(s1.isInside(v021));
-    CPPUNIT_ASSERT(s1.isInside(v121));
-    CPPUNIT_ASSERT(s1.isInside(v221));
-    CPPUNIT_ASSERT(s1.isInside(v002));
-    CPPUNIT_ASSERT(s1.isInside(v102));
-    CPPUNIT_ASSERT(s1.isInside(v202));
-    CPPUNIT_ASSERT(s1.isInside(v012));
-    CPPUNIT_ASSERT(s1.isInside(v112));
-    CPPUNIT_ASSERT(s1.isInside(v212));
-    CPPUNIT_ASSERT(s1.isInside(v022));
-    CPPUNIT_ASSERT(s1.isInside(v122));
-    CPPUNIT_ASSERT(s1.isInside(v222));
-
-    Shape s2 = Nowhere() && Everywhere();
-    CPPUNIT_ASSERT(!s2.isInside(v000));
-    CPPUNIT_ASSERT(!s2.isInside(v100));
-    CPPUNIT_ASSERT(!s2.isInside(v200));
-    CPPUNIT_ASSERT(!s2.isInside(v010));
-    CPPUNIT_ASSERT(!s2.isInside(v110));
-    CPPUNIT_ASSERT(!s2.isInside(v210));
-    CPPUNIT_ASSERT(!s2.isInside(v020));
-    CPPUNIT_ASSERT(!s2.isInside(v120));
-    CPPUNIT_ASSERT(!s2.isInside(v220));
-    CPPUNIT_ASSERT(!s2.isInside(v001));
-    CPPUNIT_ASSERT(!s2.isInside(v101));
-    CPPUNIT_ASSERT(!s2.isInside(v201));
-    CPPUNIT_ASSERT(!s2.isInside(v011));
-    CPPUNIT_ASSERT(!s2.isInside(v111));
-    CPPUNIT_ASSERT(!s2.isInside(v211));
-    CPPUNIT_ASSERT(!s2.isInside(v021));
-    CPPUNIT_ASSERT(!s2.isInside(v121));
-    CPPUNIT_ASSERT(!s2.isInside(v221));
-    CPPUNIT_ASSERT(!s2.isInside(v002));
-    CPPUNIT_ASSERT(!s2.isInside(v102));
-    CPPUNIT_ASSERT(!s2.isInside(v202));
-    CPPUNIT_ASSERT(!s2.isInside(v012));
-    CPPUNIT_ASSERT(!s2.isInside(v112));
-    CPPUNIT_ASSERT(!s2.isInside(v212));
-    CPPUNIT_ASSERT(!s2.isInside(v022));
-    CPPUNIT_ASSERT(!s2.isInside(v122));
-    CPPUNIT_ASSERT(!s2.isInside(v222));
-  }
-
-  {
-    Shape s1 = Everywhere() || Nowhere();
-    CPPUNIT_ASSERT(s1.isInside(v000));
-    CPPUNIT_ASSERT(s1.isInside(v100));
-    CPPUNIT_ASSERT(s1.isInside(v200));
-    CPPUNIT_ASSERT(s1.isInside(v010));
-    CPPUNIT_ASSERT(s1.isInside(v110));
-    CPPUNIT_ASSERT(s1.isInside(v210));
-    CPPUNIT_ASSERT(s1.isInside(v020));
-    CPPUNIT_ASSERT(s1.isInside(v120));
-    CPPUNIT_ASSERT(s1.isInside(v220));
-    CPPUNIT_ASSERT(s1.isInside(v001));
-    CPPUNIT_ASSERT(s1.isInside(v101));
-    CPPUNIT_ASSERT(s1.isInside(v201));
-    CPPUNIT_ASSERT(s1.isInside(v011));
-    CPPUNIT_ASSERT(s1.isInside(v111));
-    CPPUNIT_ASSERT(s1.isInside(v211));
-    CPPUNIT_ASSERT(s1.isInside(v021));
-    CPPUNIT_ASSERT(s1.isInside(v121));
-    CPPUNIT_ASSERT(s1.isInside(v221));
-    CPPUNIT_ASSERT(s1.isInside(v002));
-    CPPUNIT_ASSERT(s1.isInside(v102));
-    CPPUNIT_ASSERT(s1.isInside(v202));
-    CPPUNIT_ASSERT(s1.isInside(v012));
-    CPPUNIT_ASSERT(s1.isInside(v112));
-    CPPUNIT_ASSERT(s1.isInside(v212));
-    CPPUNIT_ASSERT(s1.isInside(v022));
-    CPPUNIT_ASSERT(s1.isInside(v122));
-    CPPUNIT_ASSERT(s1.isInside(v222));
-
-    Shape s2 = Everywhere() && Nowhere();
-    CPPUNIT_ASSERT(!s2.isInside(v000));
-    CPPUNIT_ASSERT(!s2.isInside(v100));
-    CPPUNIT_ASSERT(!s2.isInside(v200));
-    CPPUNIT_ASSERT(!s2.isInside(v010));
-    CPPUNIT_ASSERT(!s2.isInside(v110));
-    CPPUNIT_ASSERT(!s2.isInside(v210));
-    CPPUNIT_ASSERT(!s2.isInside(v020));
-    CPPUNIT_ASSERT(!s2.isInside(v120));
-    CPPUNIT_ASSERT(!s2.isInside(v220));
-    CPPUNIT_ASSERT(!s2.isInside(v001));
-    CPPUNIT_ASSERT(!s2.isInside(v101));
-    CPPUNIT_ASSERT(!s2.isInside(v201));
-    CPPUNIT_ASSERT(!s2.isInside(v011));
-    CPPUNIT_ASSERT(!s2.isInside(v111));
-    CPPUNIT_ASSERT(!s2.isInside(v211));
-    CPPUNIT_ASSERT(!s2.isInside(v021));
-    CPPUNIT_ASSERT(!s2.isInside(v121));
-    CPPUNIT_ASSERT(!s2.isInside(v221));
-    CPPUNIT_ASSERT(!s2.isInside(v002));
-    CPPUNIT_ASSERT(!s2.isInside(v102));
-    CPPUNIT_ASSERT(!s2.isInside(v202));
-    CPPUNIT_ASSERT(!s2.isInside(v012));
-    CPPUNIT_ASSERT(!s2.isInside(v112));
-    CPPUNIT_ASSERT(!s2.isInside(v212));
-    CPPUNIT_ASSERT(!s2.isInside(v022));
-    CPPUNIT_ASSERT(!s2.isInside(v122));
-    CPPUNIT_ASSERT(!s2.isInside(v222));
-  }
-
-  {
-    Shape s1 = Sphere() && Cuboid(); // Sphere in upper place
-
-    CPPUNIT_ASSERT(s1.isInside(v000));
-    CPPUNIT_ASSERT(s1.isInside(v100));
-    CPPUNIT_ASSERT(!s1.isInside(v200));
-    CPPUNIT_ASSERT(s1.isInside(v010));
-    CPPUNIT_ASSERT(!s1.isInside(v110));
-    CPPUNIT_ASSERT(!s1.isInside(v210));
-    CPPUNIT_ASSERT(!s1.isInside(v020));
-    CPPUNIT_ASSERT(!s1.isInside(v120));
-    CPPUNIT_ASSERT(!s1.isInside(v220));
-    CPPUNIT_ASSERT(s1.isInside(v001));
-    CPPUNIT_ASSERT(!s1.isInside(v101));
-    CPPUNIT_ASSERT(!s1.isInside(v201));
-    CPPUNIT_ASSERT(!s1.isInside(v011));
-    CPPUNIT_ASSERT(!s1.isInside(v111));
-    CPPUNIT_ASSERT(!s1.isInside(v211));
-    CPPUNIT_ASSERT(!s1.isInside(v021));
-    CPPUNIT_ASSERT(!s1.isInside(v121));
-    CPPUNIT_ASSERT(!s1.isInside(v221));
-    CPPUNIT_ASSERT(!s1.isInside(v002));
-    CPPUNIT_ASSERT(!s1.isInside(v102));
-    CPPUNIT_ASSERT(!s1.isInside(v202));
-    CPPUNIT_ASSERT(!s1.isInside(v012));
-    CPPUNIT_ASSERT(!s1.isInside(v112));
-    CPPUNIT_ASSERT(!s1.isInside(v212));
-    CPPUNIT_ASSERT(!s1.isInside(v022));
-    CPPUNIT_ASSERT(!s1.isInside(v122));
-    CPPUNIT_ASSERT(!s1.isInside(v222));
-
-    CPPUNIT_ASSERT(s1.isOnSurface(v000));
-    CPPUNIT_ASSERT(s1.isOnSurface(v100));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v200));
-    CPPUNIT_ASSERT(s1.isOnSurface(v010));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v110));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v210));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v020));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v120));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v220));
-    CPPUNIT_ASSERT(s1.isOnSurface(v001));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v101));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v201));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v011));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v111));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v211));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v021));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v121));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v221));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v002));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v102));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v202));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v012));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v112));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v212));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v022));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v122));
-    CPPUNIT_ASSERT(!s1.isOnSurface(v222));
-
-
-    Shape s2 = Sphere() || Cuboid(); // Should be same as Cuboid
-
-    CPPUNIT_ASSERT(s2.isInside(v000));
-    CPPUNIT_ASSERT(s2.isInside(v100));
-    CPPUNIT_ASSERT(s2.isInside(v200));
-    CPPUNIT_ASSERT(s2.isInside(v010));
-    CPPUNIT_ASSERT(s2.isInside(v110));
-    CPPUNIT_ASSERT(!s2.isInside(v210));
-    CPPUNIT_ASSERT(s2.isInside(v020));
-    CPPUNIT_ASSERT(!s2.isInside(v120));
-    CPPUNIT_ASSERT(!s2.isInside(v220));
-    CPPUNIT_ASSERT(s2.isInside(v001));
-    CPPUNIT_ASSERT(s2.isInside(v101));
-    CPPUNIT_ASSERT(!s2.isInside(v201));
-    CPPUNIT_ASSERT(s2.isInside(v011));
-    CPPUNIT_ASSERT(s2.isInside(v111));
-    CPPUNIT_ASSERT(!s2.isInside(v211));
-    CPPUNIT_ASSERT(!s2.isInside(v021));
-    CPPUNIT_ASSERT(!s2.isInside(v121));
-    CPPUNIT_ASSERT(!s2.isInside(v221));
-    CPPUNIT_ASSERT(s2.isInside(v002));
-    CPPUNIT_ASSERT(!s2.isInside(v102));
-    CPPUNIT_ASSERT(!s2.isInside(v202));
-    CPPUNIT_ASSERT(!s2.isInside(v012));
-    CPPUNIT_ASSERT(!s2.isInside(v112));
-    CPPUNIT_ASSERT(!s2.isInside(v212));
-    CPPUNIT_ASSERT(!s2.isInside(v022));
-    CPPUNIT_ASSERT(!s2.isInside(v122));
-    CPPUNIT_ASSERT(!s2.isInside(v222));
-
-    CPPUNIT_ASSERT(!s2.isOnSurface(v000));
-    CPPUNIT_ASSERT(s2.isOnSurface(v100));
-    CPPUNIT_ASSERT(s2.isOnSurface(v200));
-    CPPUNIT_ASSERT(s2.isOnSurface(v010));
-    CPPUNIT_ASSERT(s2.isOnSurface(v110));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v210));
-    CPPUNIT_ASSERT(s2.isOnSurface(v020));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v120));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v220));
-    CPPUNIT_ASSERT(s2.isOnSurface(v001));
-    CPPUNIT_ASSERT(s2.isOnSurface(v101));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v201));
-    CPPUNIT_ASSERT(s2.isOnSurface(v011));
-    CPPUNIT_ASSERT(s2.isOnSurface(v111));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v211));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v021));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v121));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v221));
-    CPPUNIT_ASSERT(s2.isOnSurface(v002));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v102));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v202));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v012));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v112));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v212));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v022));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v122));
-    CPPUNIT_ASSERT(!s2.isOnSurface(v222));
-  }
-
-}
-
-void ShapeUnittest::PointsOnSurfaceTest(){
-  Shape s = Sphere();
-  const size_t N = 200;
-  std::vector<Vector> PointsOnSurface = s.getHomogeneousPointsOnSurface(N);
-  for (std::vector<Vector>::const_iterator iter = PointsOnSurface.begin(); iter != PointsOnSurface.end(); ++iter) {
-    CPPUNIT_ASSERT(fabs(1. - (*iter).NormSquared()) < MYEPSILON);
-  }
-  CPPUNIT_ASSERT_EQUAL(N, PointsOnSurface.size());
-}
-
Index: c/unittests/ShapeUnittest.hpp
===================================================================
--- src/unittests/ShapeUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,70 +1,0 @@
-/*
- * ShapeUnittest.hpp
- *
- *  Created on: Jun 18, 2010
- *      Author: crueger
- */
-
-#ifndef SHAPEUNITTEST_HPP_
-#define SHAPEUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class Shape;
-class Vector;
-
-#include "LinearAlgebra/Vector.hpp"
-
-class ShapeUnittest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( ShapeUnittest) ;
-  CPPUNIT_TEST ( baseShapesTest );
-  CPPUNIT_TEST ( surfaceTest );
-  CPPUNIT_TEST ( assignmentTest );
-  CPPUNIT_TEST ( operatorTest );
-  CPPUNIT_TEST ( PointsOnSurfaceTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void baseShapesTest();
-  void surfaceTest();
-  void assignmentTest();
-  void operatorTest();
-  void PointsOnSurfaceTest();
-
-  // a lot of vectors.
-  // these define all the edges of a box around -1 +1 on each axis
-  // 0 is 0, 1 is 1 and 2 is -1
-  Vector v000;
-  Vector v100;
-  Vector v200;
-  Vector v010;
-  Vector v110;
-  Vector v210;
-  Vector v020;
-  Vector v120;
-  Vector v220;
-  Vector v001;
-  Vector v101;
-  Vector v201;
-  Vector v011;
-  Vector v111;
-  Vector v211;
-  Vector v021;
-  Vector v121;
-  Vector v221;
-  Vector v002;
-  Vector v102;
-  Vector v202;
-  Vector v012;
-  Vector v112;
-  Vector v212;
-  Vector v022;
-  Vector v122;
-  Vector v222;
-};
-
-#endif /* SHAPEUNITTEST_HPP_ */
Index: c/unittests/SingletonTest.cpp
===================================================================
--- src/unittests/SingletonTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,155 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * SingletonTest.cpp
- *
- *  Created on: Mar 11, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "SingletonTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <iostream>
-
-#include "Patterns/Singleton.hpp"
-#include "Patterns/Singleton_impl.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-CPPUNIT_TEST_SUITE_REGISTRATION( SingletonTest );
-
-// some necessary stubs
-class SingletonStub1 : public Singleton <SingletonStub1>{
-  friend class Singleton<SingletonStub1>;
-private:
-  SingletonStub1(){
-    count1++;
-  }
-  // explicit copy constructor to catch if this is ever called
-  SingletonStub1(const SingletonStub1&){
-    CPPUNIT_FAIL    ( "Copy constructor of Singleton called" );
-  }
-  virtual ~SingletonStub1(){
-    count2++;
-  }
-public:
-  static int count1;
-  static int count2;
-};
-
-int SingletonStub1::count1 = 0;
-int SingletonStub1::count2 = 0;
-
-CONSTRUCT_SINGLETON(SingletonStub1);
-
-class SingletonStub2 : public Singleton<SingletonStub2>{
-  friend class Singleton<SingletonStub2>;
-private:
-  SingletonStub2(){
-    count1++;
-  }
-  // explicit copy constructor to catch if this is ever called
-  SingletonStub2(const SingletonStub2&){
-    CPPUNIT_FAIL    ( "Copy constructor of Singleton called" );
-  }
-  virtual ~SingletonStub2(){
-    count2++;
-  }
-public:
-  static int count1;
-  static int count2;
-};
-
-int SingletonStub2::count1 = 0;
-int SingletonStub2::count2 = 0;
-
-CONSTRUCT_SINGLETON(SingletonStub2);
-
-void SingletonTest::setUp(){}
-void SingletonTest::tearDown(){}
-
-void SingletonTest::ConstructionTest(){
-  void *ptr_1_1 = reinterpret_cast<void*>(SingletonStub1::getPointer());
-  void *ptr_1_2 = reinterpret_cast<void*>(SingletonStub1::getPointer());
-  void *ptr_1_3 = reinterpret_cast<void*>(&(SingletonStub1::getInstance()));
-
-  // test if we always get the same instance of our singleton
-  CPPUNIT_ASSERT_EQUAL(ptr_1_1,ptr_1_2);
-  CPPUNIT_ASSERT_EQUAL(ptr_1_1,ptr_1_3);
-
-  void *ptr_2_1 = reinterpret_cast<void*>(SingletonStub2::getPointer());
-  void *ptr_2_2 = reinterpret_cast<void*>(SingletonStub2::getPointer());
-  void *ptr_2_3 = reinterpret_cast<void*>(&(SingletonStub2::getInstance()));
-
-  // same as above but for a different singleton
-  CPPUNIT_ASSERT_EQUAL(ptr_2_1,ptr_2_2);
-  CPPUNIT_ASSERT_EQUAL(ptr_2_1,ptr_2_3);
-
-  // see if the two singletons actually differ
-  CPPUNIT_ASSERT(ptr_1_1!=ptr_2_1);
-
-  // see if each constructor was called exactly once
-  CPPUNIT_ASSERT_EQUAL(1,SingletonStub1::count1);
-  CPPUNIT_ASSERT_EQUAL(1,SingletonStub2::count1);
-  // no calls to the destructor should have occured so far
-  CPPUNIT_ASSERT_EQUAL(0,SingletonStub1::count2);
-  CPPUNIT_ASSERT_EQUAL(0,SingletonStub2::count2);
-
-  SingletonStub1::purgeInstance();
-
-  void *ptr_3_1 = reinterpret_cast<void*>(SingletonStub1::getPointer());
-  void *ptr_3_2 = reinterpret_cast<void*>(SingletonStub1::getPointer());
-
-  // now the constructor should have been called twice
-  CPPUNIT_ASSERT_EQUAL(2,SingletonStub1::count1);
-  // the destructor should have been called once
-  CPPUNIT_ASSERT_EQUAL(1,SingletonStub1::count2);
-  // see if the singleton Assumption holds
-  CPPUNIT_ASSERT_EQUAL(ptr_3_1,ptr_3_2);
-  // Some esoteric thing might cause our pointer to lay at the position of Singleton2 now
-  // See that those two objects still differ
-  CPPUNIT_ASSERT(ptr_3_1!=ptr_2_1);
-  // don't test for pointer difference between first and second singleton here,
-  // because they might be constructed in the same place
-
-
-  SingletonStub2::resetInstance();
-  // now the constructor should have been called twice
-  CPPUNIT_ASSERT_EQUAL(2,SingletonStub2::count1);
-  // the destructor should have been called once
-  CPPUNIT_ASSERT_EQUAL(1,SingletonStub2::count2);
-
-  void *ptr_4_1 = reinterpret_cast<void*>(SingletonStub2::getPointer());
-  void *ptr_4_2 = reinterpret_cast<void*>(SingletonStub2::getPointer());
-
-  // Still only two calls to the constructor, one call to destructor
-  CPPUNIT_ASSERT_EQUAL(2,SingletonStub2::count1);
-  CPPUNIT_ASSERT_EQUAL(1,SingletonStub2::count2);
-
-  // test if Singleton assumption can be broken by reset
-  CPPUNIT_ASSERT_EQUAL(ptr_4_1,ptr_4_2);
-
-  // and again test if we actually have a object seperate from anything else
-  CPPUNIT_ASSERT(ptr_4_1!=ptr_3_1);
-
-
-  // we don't purge our singletons here. Purging should be done automatically by the Singleton
-  // mechanism. Check with Valgrind to see if memory-leak occurs
-  std::cout << "Not purging Singleton!\n Check with Valgrind to see if automatic purgins is working!" << std::endl;
-
-}
Index: c/unittests/SingletonTest.hpp
===================================================================
--- src/unittests/SingletonTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,26 +1,0 @@
-/*
- * SingletonTest.hpp
- *
- *  Created on: Mar 11, 2010
- *      Author: crueger
- */
-
-#ifndef SINGLETONTEST_HPP_
-#define SINGLETONTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class SingletonTest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( SingletonTest );
-  CPPUNIT_TEST ( ConstructionTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void ConstructionTest();
-};
-
-#endif /* SINGLETONTEST_HPP_ */
Index: src/unittests/SubspaceFactorizerUnitTest.cpp
===================================================================
--- src/unittests/SubspaceFactorizerUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/SubspaceFactorizerUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,795 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * SubspaceFactorizerUnitTest.cpp
+ *
+ *  Created on: Nov 13, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cmath>
+
+#include <gsl/gsl_vector.h>
+#include <boost/foreach.hpp>
+#include <boost/shared_ptr.hpp>
+#include <boost/timer.hpp>
+
+#include "Helpers/Assert.hpp"
+#include "Helpers/Log.hpp"
+#include "Helpers/toString.hpp"
+#include "Helpers/Verbose.hpp"
+#include "LinearAlgebra/Eigenspace.hpp"
+#include "LinearAlgebra/MatrixContent.hpp"
+#include "LinearAlgebra/Subspace.hpp"
+#include "LinearAlgebra/VectorContent.hpp"
+
+#include "SubspaceFactorizerUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( SubspaceFactorizerUnittest );
+
+void SubspaceFactorizerUnittest::setUp(){
+  matrix = new MatrixContent(matrixdimension,matrixdimension);
+  matrix->setZero();
+  for (size_t i=0; i<matrixdimension ; i++) {
+    for (size_t j=0; j<= i; ++j) {
+      //const double value = 10. * rand() / (double)RAND_MAX;
+      //const double value = i==j ? 2. : 1.;
+      if (i==j)
+        matrix->set(i,i, 2.);
+      else if (j+1 == i) {
+        matrix->set(i,j, 1.);
+        matrix->set(j,i, 1.);
+      } else {
+        matrix->set(i,j, 0.);
+        matrix->set(j,i, 0.);
+      }
+    }
+  }
+}
+
+void SubspaceFactorizerUnittest::tearDown(){
+  // delete test matrix
+  delete matrix;
+}
+
+void SubspaceFactorizerUnittest::BlockTest()
+{
+  MatrixContent *transformation = new MatrixContent(matrixdimension,matrixdimension);
+  transformation->setZero();
+  for (size_t j=0; j<1; ++j)
+    transformation->set(j,j, 1.);
+
+  MatrixContent temp((*matrix)&(*transformation));
+  std::cout << "Our matrix is " << *matrix << "." << std::endl;
+
+  std::cout << "Hadamard product of " << *matrix << " with " << *transformation << " is: " << std::endl;
+  std::cout << temp << std::endl;
+
+  gsl_vector *eigenvalues = temp.transformToEigenbasis();
+  VectorContent *eigenvaluesView = new VectorViewContent(gsl_vector_subvector(eigenvalues, 0, eigenvalues->size));
+  std::cout << "The resulting eigenbasis is " << temp
+      << "\n\t with eigenvalues " << *eigenvaluesView << std::endl;
+  delete eigenvaluesView;
+  gsl_vector_free(eigenvalues);
+  delete (transformation);
+
+
+  CPPUNIT_ASSERT_EQUAL(0,0);
+}
+
+/** For given set of row and column indices, we extract the small block matrix.
+ * @param bigmatrix big matrix to extract from
+ * @param Eigenvectors eigenvectors of the subspaces to obtain matrix in
+ * @param columnindexset index set to pick out of all indices
+ * @return small matrix with dimension equal to the number of indices for row and column.
+ */
+MatrixContent * getSubspaceMatrix(
+    MatrixContent &bigmatrix,
+    VectorArray &Eigenvectors,
+    const IndexSet &indexset)
+{
+  // check whether subsystem is big enough for both index sets
+  ASSERT(indexset.size() <= bigmatrix.getRows(),
+      "embedSubspaceMatrix() - bigmatrix has less rows "+toString(bigmatrix.getRows())
+      +" than needed by index set "
+      +toString(indexset.size())+"!");
+  ASSERT(indexset.size() <= bigmatrix.getColumns(),
+      "embedSubspaceMatrix() - bigmatrix has less columns "+toString(bigmatrix.getColumns())
+      +" than needed by index set "
+      +toString(indexset.size())+"!");
+
+  // construct small matrix
+  MatrixContent *subsystem =  new MatrixContent(indexset.size(), indexset.size());
+  size_t localrow = 0; // local row indices for the subsystem
+  size_t localcolumn = 0;
+  BOOST_FOREACH( size_t rowindex, indexset) {
+    localcolumn = 0;
+    BOOST_FOREACH( size_t columnindex, indexset) {
+      ASSERT((rowindex < bigmatrix.getRows()) && (columnindex < bigmatrix.getColumns()),
+          "current index pair ("
+          +toString(rowindex)+","+toString(columnindex)
+          +") is out of bounds of bigmatrix ("
+          +toString(bigmatrix.getRows())+","+toString(bigmatrix.getColumns())
+          +")");
+      subsystem->at(localrow,localcolumn) = (*Eigenvectors[rowindex]) * (bigmatrix * (*Eigenvectors[columnindex]));
+      localcolumn++;
+    }
+    localrow++;
+  }
+  return subsystem;
+}
+
+/** For a given set of row and columns indices, we embed a small block matrix into a bigger space.
+ *
+ * @param eigenvectors current eigenvectors
+ * @param rowindexset row index set
+ * @param columnindexset column index set
+ * @return bigmatrix with eigenvectors contained
+ */
+MatrixContent * embedSubspaceMatrix(
+    VectorArray &Eigenvectors,
+    MatrixContent &subsystem,
+    const IndexSet &columnindexset)
+{
+  // check whether bigmatrix is at least as big as subsystem
+  ASSERT(Eigenvectors.size() > 0,
+      "embedSubspaceMatrix() - no Eigenvectors given!");
+  ASSERT(subsystem.getRows() <= Eigenvectors[0]->getDimension(),
+      "embedSubspaceMatrix() - subsystem has more rows "
+      +toString(subsystem.getRows())+" than eigenvectors "
+      +toString(Eigenvectors[0]->getDimension())+"!");
+  ASSERT(subsystem.getColumns() <= Eigenvectors.size(),
+      "embedSubspaceMatrix() - subsystem has more columns "
+      +toString(subsystem.getColumns())+" than eigenvectors "
+      +toString(Eigenvectors.size())+"!");
+  // check whether subsystem is big enough for both index sets
+  ASSERT(subsystem.getColumns() == subsystem.getRows(),
+      "embedSubspaceMatrix() - subsystem is not square "
+      +toString(subsystem.getRows())+" than needed by index set "
+      +toString(subsystem.getColumns())+"!");
+  ASSERT(columnindexset.size() == subsystem.getColumns(),
+      "embedSubspaceMatrix() - subsystem has not the same number of columns "
+      +toString(subsystem.getColumns())+" compared to the index set "
+      +toString(columnindexset.size())+"!");
+
+  // construct intermediate matrix
+  MatrixContent *intermediatematrix = new MatrixContent(Eigenvectors[0]->getDimension(), columnindexset.size());
+  size_t localcolumn = 0;
+  BOOST_FOREACH(size_t columnindex, columnindexset) {
+    // create two vectors from each row and copy assign them
+    boost::shared_ptr<VectorContent> srceigenvector(Eigenvectors[columnindex]);
+    boost::shared_ptr<VectorContent> desteigenvector(intermediatematrix->getColumnVector(localcolumn));
+    *desteigenvector = *srceigenvector;
+    localcolumn++;
+  }
+  // matrix product with eigenbasis subsystem matrix
+  *intermediatematrix *= subsystem;
+
+  // and place at right columns into bigmatrix
+  MatrixContent *bigmatrix = new MatrixContent(Eigenvectors[0]->getDimension(), Eigenvectors.size());
+  bigmatrix->setZero();
+  localcolumn = 0;
+  BOOST_FOREACH(size_t columnindex, columnindexset) {
+    // create two vectors from each row and copy assign them
+    boost::shared_ptr<VectorContent> srceigenvector(intermediatematrix->getColumnVector(localcolumn));
+    boost::shared_ptr<VectorContent> desteigenvector(bigmatrix->getColumnVector(columnindex));
+    *desteigenvector = *srceigenvector;
+    localcolumn++;
+  }
+
+  return bigmatrix;
+}
+
+/** Prints the scalar product of each possible pair that is not orthonormal.
+ * We use class logger for printing.
+ * @param AllIndices set of all possible indices of the eigenvectors
+ * @param CurrentEigenvectors array of eigenvectors
+ * @return true - all are orthonormal to each other,
+ *        false - some are not orthogonal or not normalized.
+ */
+bool checkOrthogonality(const IndexSet &AllIndices, const VectorArray &CurrentEigenvectors)
+{
+  size_t nonnormalized = 0;
+  size_t nonorthogonal = 0;
+  // check orthogonality
+  BOOST_FOREACH( size_t firstindex, AllIndices) {
+    BOOST_FOREACH( size_t secondindex, AllIndices) {
+      const double scp = (*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex]);
+      if (firstindex == secondindex) {
+        if (fabs(scp - 1.) > MYEPSILON) {
+          nonnormalized++;
+          Log() << Verbose(2) << "Vector " << firstindex << " is not normalized, off by "
+              << fabs(1.-(*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex])) << std::endl;
+        }
+      } else {
+        if (fabs(scp) > MYEPSILON) {
+          nonorthogonal++;
+          Log() << Verbose(2) << "Scalar product between " << firstindex << " and " << secondindex
+              << " is " << (*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex]) << std::endl;
+        }
+      }
+    }
+  }
+
+  if ((nonnormalized == 0) && (nonorthogonal == 0)) {
+    DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "All vectors are orthonormal to each other." << std::endl));
+    return true;
+  }
+  if ((nonnormalized == 0) && (nonorthogonal != 0))
+    DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "All vectors are normalized." << std::endl));
+  if ((nonnormalized != 0) && (nonorthogonal == 0))
+    DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "All vectors are orthogonal to each other." << std::endl));
+  return false;
+}
+
+/** Calculate the sum of the scalar product of each possible pair.
+ * @param AllIndices set of all possible indices of the eigenvectors
+ * @param CurrentEigenvectors array of eigenvectors
+ * @return sum of scalar products between all possible pairs
+ */
+double calculateOrthogonalityThreshold(const IndexSet &AllIndices, const VectorArray &CurrentEigenvectors)
+{
+  double threshold = 0.;
+  // check orthogonality
+  BOOST_FOREACH( size_t firstindex, AllIndices) {
+    BOOST_FOREACH( size_t secondindex, AllIndices) {
+      const double scp = (*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex]);
+      if (firstindex == secondindex) {
+        threshold += fabs(scp - 1.);
+      } else {
+        threshold += fabs(scp);
+      }
+    }
+  }
+  return threshold;
+}
+
+/** Operator for output to std::ostream operator of an IndexSet.
+ * @param ost output stream
+ * @param indexset index set to output
+ * @return ost output stream
+ */
+std::ostream & operator<<(std::ostream &ost, const IndexSet &indexset)
+{
+  ost << "{ ";
+  for (IndexSet::const_iterator iter = indexset.begin();
+      iter != indexset.end();
+      ++iter)
+    ost << *iter << " ";
+  ost << "}";
+  return ost;
+}
+
+/** Assign eigenvectors of subspace to full eigenvectors.
+ * We use parallelity as relation measure.
+ * @param eigenvalue eigenvalue to assign along with
+ * @param CurrentEigenvector eigenvector to assign, is taken over within
+ *        boost::shared_ptr
+ * @param CurrentEigenvectors full eigenvectors
+ * @param CorrespondenceList list to make sure that each subspace eigenvector
+ *        is assigned to a unique full eigenvector
+ * @param ParallelEigenvectorList list of "similar" subspace eigenvectors per
+ *        full eigenvector, allocated
+ */
+void AssignSubspaceEigenvectors(
+    double eigenvalue,
+    VectorContent *CurrentEigenvector,
+    VectorArray &CurrentEigenvectors,
+    IndexSet &CorrespondenceList,
+    VectorValueList *&ParallelEigenvectorList)
+{
+  DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "Current Eigenvector is " << *CurrentEigenvector << std::endl));
+
+  // (for now settle with the one we are most parallel to)
+  size_t mostparallel_index = SubspaceFactorizerUnittest::matrixdimension;
+  double mostparallel_scalarproduct = 0.;
+  BOOST_FOREACH( size_t indexiter, CorrespondenceList) {
+    DoLog(2) && (DoLog(2) && (Log() << Verbose(2) << "Comparing to old " << indexiter << "th eigenvector " << *(CurrentEigenvectors[indexiter]) << std::endl));
+    const double scalarproduct = (*(CurrentEigenvectors[indexiter])) * (*CurrentEigenvector);
+    DoLog(2) && (DoLog(2) && (Log() << Verbose(2) << "SKP is " << scalarproduct << std::endl));
+    if (fabs(scalarproduct) > mostparallel_scalarproduct) {
+      mostparallel_scalarproduct = fabs(scalarproduct);
+      mostparallel_index = indexiter;
+    }
+  }
+  if (mostparallel_index != SubspaceFactorizerUnittest::matrixdimension) {
+    // put into std::list for later use
+    // invert if pointing in negative direction
+    if ((*(CurrentEigenvectors[mostparallel_index])) * (*CurrentEigenvector) < 0) {
+      *CurrentEigenvector *= -1.;
+      DoLog(1) && (Log() << Verbose(1) << "Pushing (inverted) " << *CurrentEigenvector << " into parallel list [" << mostparallel_index << "]" << std::endl);
+    } else {
+      DoLog(1) && (Log() << Verbose(1) << "Pushing " << *CurrentEigenvector << " into parallel list [" << mostparallel_index << "]" << std::endl);
+    }
+    ParallelEigenvectorList[mostparallel_index].push_back(make_pair(boost::shared_ptr<VectorContent>(CurrentEigenvector), eigenvalue));
+    CorrespondenceList.erase(mostparallel_index);
+  }
+}
+
+void SubspaceFactorizerUnittest::EigenvectorTest()
+{
+  VectorArray CurrentEigenvectors;
+  ValueArray CurrentEigenvalues;
+  VectorValueList *ParallelEigenvectorList = new VectorValueList[matrixdimension];
+  IndexSet AllIndices;
+
+  // create the total index set
+  for (size_t i=0;i<matrixdimension;++i)
+    AllIndices.insert(i);
+
+  // create all consecutive index subsets for dim 1 to 3
+  IndexMap Dimension_to_Indexset;
+  for (size_t dim = 0; dim<3;++dim) {
+    for (size_t i=0;i<matrixdimension;++i) {
+      IndexSet *indexset = new IndexSet;
+      for (size_t j=0;j<dim+1;++j) {
+        const int value = (i+j) % matrixdimension;
+        //std::cout << "Putting " << value << " into " << i << "th map " << dim << std::endl;
+        CPPUNIT_ASSERT_MESSAGE("index "+toString(value)+" already present in "+toString(dim)+"-dim "+toString(i)+"th indexset.", indexset->count(value) == 0);
+        indexset->insert(value);
+      }
+      Dimension_to_Indexset.insert( make_pair(dim, boost::shared_ptr<IndexSet>(indexset)) );
+      // no need to free indexset, is stored in shared_ptr and
+      // will get released when Dimension_to_Indexset is destroyed
+    }
+  }
+
+  // set to first guess, i.e. the unit vectors of R^matrixdimension
+  BOOST_FOREACH( size_t index, AllIndices) {
+    boost::shared_ptr<VectorContent> EV(new VectorContent(matrixdimension));
+    EV->setZero();
+    EV->at(index) = 1.;
+    CurrentEigenvectors.push_back(EV);
+    CurrentEigenvalues.push_back(0.);
+  }
+
+  size_t run=1; // counting iterations
+  double threshold = 1.;  // containing threshold value
+  while ((threshold > 1e-10) && (run < 10)) {
+    // for every dimension
+    for (size_t dim = 0; dim<subspacelimit;++dim) {
+      // for every index set of this dimension
+      DoLog(0) && (Log() << Verbose(0) << std::endl << std::endl);
+      DoLog(0) && (Log() << Verbose(0) << "Current dimension is " << dim << std::endl);
+      std::pair<IndexMap::const_iterator,IndexMap::const_iterator> Bounds = Dimension_to_Indexset.equal_range(dim);
+      for (IndexMap::const_iterator IndexsetIter = Bounds.first;
+          IndexsetIter != Bounds.second;
+          ++IndexsetIter) {
+        // show the index set
+        DoLog(0) && (Log() << Verbose(0) << std::endl);
+        DoLog(1) && (Log() << Verbose(1) << "Current index set is " << *(IndexsetIter->second) << std::endl);
+
+        // create transformation matrices from these
+        MatrixContent *subsystem = getSubspaceMatrix(*matrix, CurrentEigenvectors, *(IndexsetIter->second));
+        DoLog(2) && (Log() << Verbose(2) << "Subsystem matrix is " << *subsystem << std::endl);
+
+        // solve _small_ systems for eigenvalues
+        VectorContent *Eigenvalues = new VectorContent(subsystem->transformToEigenbasis());
+        DoLog(2) && (Log() << Verbose(2) << "Eigenvector matrix is " << *subsystem << std::endl);
+        DoLog(2) && (Log() << Verbose(2) << "Eigenvalues are " << *Eigenvalues << std::endl);
+
+        // blow up eigenvectors to matrixdimensiondim column vector again
+        MatrixContent *Eigenvectors = embedSubspaceMatrix(CurrentEigenvectors, *subsystem, *(IndexsetIter->second));
+        DoLog(1) && (Log() << Verbose(1) << matrixdimension << "x" << matrixdimension << " Eigenvector matrix is " << *Eigenvectors << std::endl);
+
+        // we don't need the subsystem anymore
+        delete subsystem;
+
+        // go through all eigenvectors in this subspace
+        IndexSet CorrespondenceList((*IndexsetIter->second)); // assure one-to-one and onto assignment
+        size_t localindex = 0;
+        BOOST_FOREACH( size_t iter, (*IndexsetIter->second)) {
+          // recognize eigenvectors parallel to existing ones
+          AssignSubspaceEigenvectors(
+              Eigenvalues->at(localindex),
+              new VectorContent(Eigenvectors->getColumnVector(iter)),
+              CurrentEigenvectors,
+              CorrespondenceList,
+              ParallelEigenvectorList);
+          localindex++;
+        }
+
+        // free eigenvectors
+        delete Eigenvectors;
+        delete Eigenvalues;
+      }
+    }
+
+    // print list of similar eigenvectors
+    BOOST_FOREACH( size_t index, AllIndices) {
+      DoLog(2) && (Log() << Verbose(2) << "Similar to " << index << "th current eigenvector " << *(CurrentEigenvectors[index]) << " are:" << std::endl);
+      BOOST_FOREACH( VectorValueList::value_type &iter, ParallelEigenvectorList[index] ) {
+        DoLog(2) && (Log() << Verbose(2) << *(iter.first) << std::endl);
+      }
+      DoLog(2) && (Log() << Verbose(2) << std::endl);
+    }
+
+    // create new CurrentEigenvectors from averaging parallel ones.
+    BOOST_FOREACH(size_t index, AllIndices) {
+      CurrentEigenvectors[index]->setZero();
+      CurrentEigenvalues[index] = 0.;
+      BOOST_FOREACH( VectorValueList::value_type &iter, ParallelEigenvectorList[index] ) {
+        *CurrentEigenvectors[index] += (*iter.first) * (iter.second);
+        CurrentEigenvalues[index] += (iter.second);
+      }
+      *CurrentEigenvectors[index] *= 1./CurrentEigenvalues[index];
+      CurrentEigenvalues[index] /= (double)ParallelEigenvectorList[index].size();
+      ParallelEigenvectorList[index].clear();
+    }
+
+    // check orthonormality
+    threshold = calculateOrthogonalityThreshold(AllIndices, CurrentEigenvectors);
+    bool dontOrthonormalization = checkOrthogonality(AllIndices, CurrentEigenvectors);
+
+    // orthonormalize
+    if (!dontOrthonormalization) {
+      DoLog(0) && (Log() << Verbose(0) << "Orthonormalizing ... " << std::endl);
+      for (IndexSet::const_iterator firstindex = AllIndices.begin();
+          firstindex != AllIndices.end();
+          ++firstindex) {
+        for (IndexSet::const_iterator secondindex = firstindex;
+            secondindex != AllIndices.end();
+            ++secondindex) {
+          if (*firstindex == *secondindex) {
+            (*CurrentEigenvectors[*secondindex]) *= 1./(*CurrentEigenvectors[*secondindex]).Norm();
+          } else {
+            (*CurrentEigenvectors[*secondindex]) -=
+                ((*CurrentEigenvectors[*firstindex])*(*CurrentEigenvectors[*secondindex]))
+                *(*CurrentEigenvectors[*firstindex]);
+          }
+        }
+      }
+    }
+
+//    // check orthonormality again
+//    checkOrthogonality(AllIndices, CurrentEigenvectors);
+
+    // show new ones
+    DoLog(0) && (Log() << Verbose(0) << "Resulting new eigenvectors and -values, run " << run << " are:" << std::endl);
+    BOOST_FOREACH( size_t index, AllIndices) {
+      DoLog(0) && (Log() << Verbose(0) << *CurrentEigenvectors[index] << " with " << CurrentEigenvalues[index] << std::endl);
+    }
+    run++;
+  }
+
+  delete[] ParallelEigenvectorList;
+
+  CPPUNIT_ASSERT_EQUAL(0,0);
+}
+
+
+/** Iterative function to generate all power sets of indices of size \a maxelements.
+ *
+ * @param SetofSets Container for all sets
+ * @param CurrentSet pointer to current set in this container
+ * @param Indices Source set of indices
+ * @param maxelements number of elements of each set in final SetofSets
+ * @return true - generation continued, false - current set already had
+ *         \a maxelements elements
+ */
+bool generatePowerSet(
+    SetofIndexSets &SetofSets,
+    SetofIndexSets::iterator &CurrentSet,
+    IndexSet &Indices,
+    const size_t maxelements)
+{
+  if (CurrentSet->size() < maxelements) {
+    // allocate the needed sets
+    const size_t size = Indices.size() - CurrentSet->size();
+    std::vector<std::set<size_t> > SetExpanded;
+    SetExpanded.reserve(size);
+
+    // copy the current set into each
+    for (size_t i=0;i<size;++i)
+      SetExpanded.push_back(*CurrentSet);
+
+    // expand each set by one index
+    size_t localindex=0;
+    BOOST_FOREACH(size_t iter, Indices) {
+      if (CurrentSet->count(iter) == 0) {
+        SetExpanded[localindex].insert(iter);
+        ++localindex;
+      }
+    }
+
+    // insert set at position of CurrentSet
+    for (size_t i=0;i<size;++i) {
+      //DoLog(1) && (Log() << Verbose(1) << "Inserting set #" << i << ": " << SetExpanded[i] << std::endl);
+      SetofSets.insert(CurrentSet, SetExpanded[i]);
+    }
+    SetExpanded.clear();
+
+    // and remove the current set
+    //SetofSets.erase(CurrentSet);
+    //CurrentSet = SetofSets.begin();
+
+    // set iterator to a valid position again
+    ++CurrentSet;
+    return true;
+  } else {
+    return false;
+  }
+}
+
+void SubspaceFactorizerUnittest::generatePowerSetTest()
+{
+  IndexSet AllIndices;
+  for (size_t i=0;i<4;++i)
+    AllIndices.insert(i);
+
+  SetofIndexSets SetofSets;
+  // note that starting off empty set is unstable
+  IndexSet singleset;
+  BOOST_FOREACH(size_t iter, AllIndices) {
+    singleset.insert(iter);
+    SetofSets.insert(singleset);
+    singleset.clear();
+  }
+  SetofIndexSets::iterator CurrentSet = SetofSets.begin();
+  while (CurrentSet != SetofSets.end()) {
+    //DoLog(0) && (Log() << Verbose(0) << "Current set is " << *CurrentSet << std::endl);
+    if (!generatePowerSet(SetofSets, CurrentSet, AllIndices, 2)) {
+      // go to next set
+      ++CurrentSet;
+    }
+  }
+
+  SetofIndexSets ComparisonSet;
+  // now follows a very stupid construction
+  // because we can't use const arrays of some type meaningfully ...
+  { IndexSet tempSet; tempSet.insert(0); ComparisonSet.insert(tempSet); }
+  { IndexSet tempSet; tempSet.insert(1); ComparisonSet.insert(tempSet); }
+  { IndexSet tempSet; tempSet.insert(2); ComparisonSet.insert(tempSet); }
+  { IndexSet tempSet; tempSet.insert(3); ComparisonSet.insert(tempSet); }
+
+  { IndexSet tempSet; tempSet.insert(0); tempSet.insert(1); ComparisonSet.insert(tempSet); }
+  { IndexSet tempSet; tempSet.insert(0); tempSet.insert(2); ComparisonSet.insert(tempSet); }
+  { IndexSet tempSet; tempSet.insert(0); tempSet.insert(3); ComparisonSet.insert(tempSet); }
+
+  { IndexSet tempSet; tempSet.insert(1); tempSet.insert(2); ComparisonSet.insert(tempSet); }
+  { IndexSet tempSet; tempSet.insert(1); tempSet.insert(3); ComparisonSet.insert(tempSet); }
+
+  { IndexSet tempSet; tempSet.insert(2); tempSet.insert(3); ComparisonSet.insert(tempSet); }
+
+  CPPUNIT_ASSERT_EQUAL(SetofSets, ComparisonSet);
+}
+
+bool cmd(double a, double b)
+{
+  return a > b;
+}
+
+void SubspaceFactorizerUnittest::SubspaceTest()
+{
+  Eigenspace::eigenvectorset CurrentEigenvectors;
+  Eigenspace::eigenvalueset CurrentEigenvalues;
+
+  setVerbosity(0);
+
+  boost::timer Time_generatingfullspace;
+  DoLog(0) && (Log() << Verbose(0) << std::endl << std::endl);
+  // create the total index set
+  IndexSet AllIndices;
+  for (size_t i=0;i<matrixdimension;++i)
+    AllIndices.insert(i);
+  Eigenspace FullSpace(AllIndices, *matrix);
+  DoLog(1) && (Log() << Verbose(1) << "Generated full space: " << FullSpace << std::endl);
+  DoLog(0) && (Log() << Verbose(0) << "Full space generation took " << Time_generatingfullspace.elapsed() << " seconds." << std::endl);
+
+  // generate first set of eigenvectors
+  // set to first guess, i.e. the unit vectors of R^matrixdimension
+  BOOST_FOREACH( size_t index, AllIndices) {
+    boost::shared_ptr<VectorContent> EV(new VectorContent(matrixdimension));
+    EV->setZero();
+    EV->at(index) = 1.;
+    CurrentEigenvectors.push_back(EV);
+    CurrentEigenvalues.push_back(0.);
+  }
+
+  boost::timer Time_generatingsubsets;
+  DoLog(0) && (Log() << Verbose(0) << "Generating sub sets ..." << std::endl);
+  SetofIndexSets SetofSets;
+  // note that starting off empty set is unstable
+  IndexSet singleset;
+  BOOST_FOREACH(size_t iter, AllIndices) {
+    singleset.insert(iter);
+    SetofSets.insert(singleset);
+    singleset.clear();
+  }
+  SetofIndexSets::iterator CurrentSet = SetofSets.begin();
+  while (CurrentSet != SetofSets.end()) {
+    //DoLog(2) && (Log() << Verbose(2) << "Current set is " << *CurrentSet << std::endl);
+    if (!generatePowerSet(SetofSets, CurrentSet, AllIndices, subspacelimit)) {
+      // go to next set
+      ++CurrentSet;
+    }
+  }
+  DoLog(0) && (Log() << Verbose(0) << "Sub set generation took " << Time_generatingsubsets.elapsed() << " seconds." << std::endl);
+
+  // create a subspace to each set and and to respective level
+  boost::timer Time_generatingsubspaces;
+  DoLog(0) && (Log() << Verbose(0) << "Generating sub spaces ..." << std::endl);
+  SubspaceMap Dimension_to_Indexset;
+  BOOST_FOREACH(std::set<size_t> iter, SetofSets) {
+    boost::shared_ptr<Subspace> subspace(new Subspace(iter, FullSpace));
+    DoLog(1) && (Log() << Verbose(1) << "Current subspace is " << *subspace << std::endl);
+    Dimension_to_Indexset.insert( make_pair(iter.size(), boost::shared_ptr<Subspace>(subspace)) );
+  }
+
+  for (size_t dim = 1; dim<=subspacelimit;++dim) {
+    BOOST_FOREACH( SubspaceMap::value_type subspace, Dimension_to_Indexset.equal_range(dim)) {
+      if (dim != 0) { // from level 1 and onward
+        BOOST_FOREACH( SubspaceMap::value_type entry, Dimension_to_Indexset.equal_range(dim-1)) {
+          if (subspace.second->contains(*entry.second)) {
+            // if contained then add ...
+            subspace.second->addSubset(entry.second);
+            // ... and also its containees as they are all automatically contained as well
+            BOOST_FOREACH(boost::shared_ptr<Subspace> iter, entry.second->SubIndices) {
+              subspace.second->addSubset(iter);
+            }
+          }
+        }
+      }
+    }
+  }
+  DoLog(0) && (Log() << Verbose(0) << "Sub space generation took " << Time_generatingsubspaces.elapsed() << " seconds." << std::endl);
+
+  // create a file handle for the eigenvalues
+  std::ofstream outputvalues("eigenvalues.dat", std::ios_base::trunc);
+  ASSERT(outputvalues.good(),
+      "SubspaceFactorizerUnittest::EigenvectorTest() - failed to open eigenvalue file!");
+  outputvalues << "# iteration ";
+  BOOST_FOREACH(size_t iter, AllIndices) {
+    outputvalues << "\teigenvalue" << iter;
+  }
+  outputvalues << std::endl;
+
+  DoLog(0) && (Log() << Verbose(0) << "Solving ..." << std::endl);
+  boost::timer Time_solving;
+  size_t run=1; // counting iterations
+  double threshold = 1.;  // containing threshold value
+  while ((threshold > MYEPSILON) && (run < 20)) {
+    // for every dimension
+    for (size_t dim = 1; dim <= subspacelimit;++dim) {
+      // for every index set of this dimension
+      DoLog(1) && (Log() << Verbose(1) << std::endl << std::endl);
+      DoLog(1) && (Log() << Verbose(1) << "Current dimension is " << dim << std::endl);
+      std::pair<SubspaceMap::const_iterator,SubspaceMap::const_iterator> Bounds = Dimension_to_Indexset.equal_range(dim);
+      for (SubspaceMap::const_iterator IndexsetIter = Bounds.first;
+          IndexsetIter != Bounds.second;
+          ++IndexsetIter) {
+        Subspace& subspace = *(IndexsetIter->second);
+        // show the index set
+        DoLog(2) && (Log() << Verbose(2) << std::endl);
+        DoLog(2) && (Log() << Verbose(2) << "Current subspace is " << subspace << std::endl);
+
+        // solve
+        subspace.calculateEigenSubspace();
+
+        // note that assignment to global eigenvectors all remains within subspace
+      }
+    }
+
+    // print list of similar eigenvectors
+    DoLog(2) && (Log() << Verbose(2) << std::endl);
+    BOOST_FOREACH( size_t index, AllIndices) {
+      DoLog(2) && (Log() << Verbose(2) << "Similar to " << index << "th current eigenvector " << *(CurrentEigenvectors[index]) << " are:" << std::endl);
+      BOOST_FOREACH( SubspaceMap::value_type iter, Dimension_to_Indexset) {
+        const VectorContent & CurrentEV = (iter.second)->getEigenvectorParallelToFullOne(index);
+        if (!CurrentEV.IsZero())
+          Log() << Verbose(2)
+          << "dim" << iter.first
+          << ", subspace{" << (iter.second)->getIndices()
+          << "}: "<<CurrentEV << std::endl;
+      }
+      DoLog(2) && (Log() << Verbose(2) << std::endl);
+    }
+
+    // create new CurrentEigenvectors from averaging parallel ones.
+    BOOST_FOREACH(size_t index, AllIndices) {
+      CurrentEigenvectors[index]->setZero();
+      CurrentEigenvalues[index] = 0.;
+      size_t count = 0;
+      BOOST_FOREACH( SubspaceMap::value_type iter, Dimension_to_Indexset) {
+        const VectorContent CurrentEV = (iter.second)->getEigenvectorParallelToFullOne(index);
+        *CurrentEigenvectors[index] += CurrentEV; // * (iter.second)->getEigenvalueOfEigenvectorParallelToFullOne(index);
+        CurrentEigenvalues[index] += (iter.second)->getEigenvalueOfEigenvectorParallelToFullOne(index);
+        if (!CurrentEV.IsZero())
+          count++;
+      }
+      *CurrentEigenvectors[index] *= 1./CurrentEigenvalues[index];
+      //CurrentEigenvalues[index] /= (double)count;
+    }
+
+    // check orthonormality
+    threshold = calculateOrthogonalityThreshold(AllIndices, CurrentEigenvectors);
+    bool dontOrthonormalization = checkOrthogonality(AllIndices, CurrentEigenvectors);
+
+    // orthonormalize
+    if (!dontOrthonormalization) {
+      DoLog(1) && (Log() << Verbose(1) << "Orthonormalizing ... " << std::endl);
+      for (IndexSet::const_iterator firstindex = AllIndices.begin();
+          firstindex != AllIndices.end();
+          ++firstindex) {
+        for (IndexSet::const_iterator secondindex = firstindex;
+            secondindex != AllIndices.end();
+            ++secondindex) {
+          if (*firstindex == *secondindex) {
+            (*CurrentEigenvectors[*secondindex]) *= 1./(*CurrentEigenvectors[*secondindex]).Norm();
+          } else {
+            (*CurrentEigenvectors[*secondindex]) -=
+                ((*CurrentEigenvectors[*firstindex])*(*CurrentEigenvectors[*secondindex]))
+                *(*CurrentEigenvectors[*firstindex]);
+          }
+        }
+      }
+    }
+
+//    // check orthonormality again
+//    checkOrthogonality(AllIndices, CurrentEigenvectors);
+
+    // put obtained eigenvectors into full space
+    FullSpace.setEigenpairs(CurrentEigenvectors, CurrentEigenvalues);
+
+    // show new ones
+    DoLog(1) && (Log() << Verbose(1) << "Resulting new eigenvectors and -values, run " << run << " are:" << std::endl);
+    outputvalues << run;
+    BOOST_FOREACH( size_t index, AllIndices) {
+      DoLog(1) && (Log() << Verbose(1) << *CurrentEigenvectors[index] << " with " << CurrentEigenvalues[index] << std::endl);
+      outputvalues << "\t" << CurrentEigenvalues[index];
+    }
+    outputvalues << std::endl;
+
+    // and next iteration
+    DoLog(0) && (Log() << Verbose(0) << "\titeration #" << run << std::endl);
+    run++;
+  }
+  DoLog(0) && (Log() << Verbose(0) << "Solving took " << Time_solving.elapsed() << " seconds." << std::endl);
+  // show final ones
+  DoLog(0) && (Log() << Verbose(0) << "Resulting new eigenvectors and -values, run " << run << " are:" << std::endl);
+  outputvalues << run;
+  BOOST_FOREACH( size_t index, AllIndices) {
+    DoLog(0) && (Log() << Verbose(0) << *CurrentEigenvectors[index] << " with " << CurrentEigenvalues[index] << std::endl);
+    outputvalues << "\t" << CurrentEigenvalues[index];
+  }
+  outputvalues << std::endl;
+  outputvalues.close();
+
+  setVerbosity(2);
+
+  DoLog(0) && (Log() << Verbose(0) << "Solving full space ..." << std::endl);
+  boost::timer Time_comparison;
+  MatrixContent tempFullspaceMatrix = FullSpace.getEigenspaceMatrix();
+  gsl_vector *eigenvalues = tempFullspaceMatrix.transformToEigenbasis();
+  tempFullspaceMatrix.sortEigenbasis(eigenvalues);
+  DoLog(0) && (Log() << Verbose(0) << "full space solution took " << Time_comparison.elapsed() << " seconds." << std::endl);
+
+  // compare all
+  sort(CurrentEigenvalues.begin(),CurrentEigenvalues.end()); //, cmd);
+  for (size_t i=0;i<eigenvalues->size; ++i) {
+    CPPUNIT_ASSERT_MESSAGE(toString(i)+"ths eigenvalue differs:"
+        +toString(CurrentEigenvalues[i])+" != "+toString(gsl_vector_get(eigenvalues,i)),
+        fabs((CurrentEigenvalues[i] - gsl_vector_get(eigenvalues,i))/CurrentEigenvalues[i]) < 1e-3);
+  }
+
+  CPPUNIT_ASSERT_EQUAL(0,0);
+}
Index: src/unittests/SubspaceFactorizerUnitTest.hpp
===================================================================
--- src/unittests/SubspaceFactorizerUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/SubspaceFactorizerUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,57 @@
+/*
+ * SubspaceFactorizerUnitTest.hpp
+ *
+ *  Created on: Nov 13, 2010
+ *      Author: heber
+ */
+
+#ifndef SUBSPACEFACTORIZERUNITTEST_HPP_
+#define SUBSPACEFACTORIZERUNITTEST_HPP_
+
+#include <cppunit/extensions/HelperMacros.h>
+
+class MatrixContent;
+class VectorContent;
+class Subspace;
+
+typedef std::set<std::set<size_t> > SetofIndexSets;
+typedef std::set<size_t> IndexSet;
+typedef std::multimap< size_t, boost::shared_ptr<Subspace> > SubspaceMap;
+typedef std::multimap< size_t, boost::shared_ptr<IndexSet> > IndexMap;
+typedef std::list< boost::shared_ptr<VectorContent> > VectorList;
+typedef std::list< std::pair<boost::shared_ptr<VectorContent>, double> > VectorValueList;
+typedef std::vector< boost::shared_ptr<VectorContent> > VectorArray;
+typedef std::vector< double > ValueArray;
+
+class SubspaceFactorizerUnittest : public CppUnit::TestFixture
+{
+  CPPUNIT_TEST_SUITE( SubspaceFactorizerUnittest) ;
+  CPPUNIT_TEST ( BlockTest );
+  //CPPUNIT_TEST ( EigenvectorTest );
+  CPPUNIT_TEST ( generatePowerSetTest );
+  CPPUNIT_TEST ( SubspaceTest );
+  CPPUNIT_TEST_SUITE_END();
+
+public:
+  void setUp();
+  void tearDown();
+
+  void BlockTest();
+  void EigenvectorTest();
+  void generatePowerSetTest();
+  void SubspaceTest();
+
+  enum { matrixdimension = 4 };
+  enum { subspacelimit = 3 };
+private:
+
+  MatrixContent *matrix;
+
+  MatrixContent ***transformation;
+};
+
+MatrixContent * getSubspaceMatrix(MatrixContent &bigmatrix, const IndexSet &rowindexset, const IndexSet &columnindexset);
+void embedSubspaceMatrix(MatrixContent &bigmatrix, MatrixContent &subsystem, const IndexSet &rowindexset, const IndexSet &columnindexset);
+std::ostream & operator<<(std::ostream &ost, const IndexSet &indexset);
+
+#endif /* SUBSPACEFACTORIZERUNITTEST_HPP_ */
Index: c/unittests/SubspaceFactorizerUnittest.cpp
===================================================================
--- src/unittests/SubspaceFactorizerUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,795 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * SubspaceFactorizerUnittest.cpp
- *
- *  Created on: Nov 13, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cmath>
-
-#include <gsl/gsl_vector.h>
-#include <boost/foreach.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/timer.hpp>
-
-#include "Helpers/Assert.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/toString.hpp"
-#include "Helpers/Verbose.hpp"
-#include "LinearAlgebra/Eigenspace.hpp"
-#include "LinearAlgebra/MatrixContent.hpp"
-#include "LinearAlgebra/Subspace.hpp"
-#include "LinearAlgebra/VectorContent.hpp"
-
-#include "SubspaceFactorizerUnittest.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( SubspaceFactorizerUnittest );
-
-void SubspaceFactorizerUnittest::setUp(){
-  matrix = new MatrixContent(matrixdimension,matrixdimension);
-  matrix->setZero();
-  for (size_t i=0; i<matrixdimension ; i++) {
-    for (size_t j=0; j<= i; ++j) {
-      //const double value = 10. * rand() / (double)RAND_MAX;
-      //const double value = i==j ? 2. : 1.;
-      if (i==j)
-        matrix->set(i,i, 2.);
-      else if (j+1 == i) {
-        matrix->set(i,j, 1.);
-        matrix->set(j,i, 1.);
-      } else {
-        matrix->set(i,j, 0.);
-        matrix->set(j,i, 0.);
-      }
-    }
-  }
-}
-
-void SubspaceFactorizerUnittest::tearDown(){
-  // delete test matrix
-  delete matrix;
-}
-
-void SubspaceFactorizerUnittest::BlockTest()
-{
-  MatrixContent *transformation = new MatrixContent(matrixdimension,matrixdimension);
-  transformation->setZero();
-  for (size_t j=0; j<1; ++j)
-    transformation->set(j,j, 1.);
-
-  MatrixContent temp((*matrix)&(*transformation));
-  std::cout << "Our matrix is " << *matrix << "." << std::endl;
-
-  std::cout << "Hadamard product of " << *matrix << " with " << *transformation << " is: " << std::endl;
-  std::cout << temp << std::endl;
-
-  gsl_vector *eigenvalues = temp.transformToEigenbasis();
-  VectorContent *eigenvaluesView = new VectorViewContent(gsl_vector_subvector(eigenvalues, 0, eigenvalues->size));
-  std::cout << "The resulting eigenbasis is " << temp
-      << "\n\t with eigenvalues " << *eigenvaluesView << std::endl;
-  delete eigenvaluesView;
-  gsl_vector_free(eigenvalues);
-  delete (transformation);
-
-
-  CPPUNIT_ASSERT_EQUAL(0,0);
-}
-
-/** For given set of row and column indices, we extract the small block matrix.
- * @param bigmatrix big matrix to extract from
- * @param Eigenvectors eigenvectors of the subspaces to obtain matrix in
- * @param columnindexset index set to pick out of all indices
- * @return small matrix with dimension equal to the number of indices for row and column.
- */
-MatrixContent * getSubspaceMatrix(
-    MatrixContent &bigmatrix,
-    VectorArray &Eigenvectors,
-    const IndexSet &indexset)
-{
-  // check whether subsystem is big enough for both index sets
-  ASSERT(indexset.size() <= bigmatrix.getRows(),
-      "embedSubspaceMatrix() - bigmatrix has less rows "+toString(bigmatrix.getRows())
-      +" than needed by index set "
-      +toString(indexset.size())+"!");
-  ASSERT(indexset.size() <= bigmatrix.getColumns(),
-      "embedSubspaceMatrix() - bigmatrix has less columns "+toString(bigmatrix.getColumns())
-      +" than needed by index set "
-      +toString(indexset.size())+"!");
-
-  // construct small matrix
-  MatrixContent *subsystem =  new MatrixContent(indexset.size(), indexset.size());
-  size_t localrow = 0; // local row indices for the subsystem
-  size_t localcolumn = 0;
-  BOOST_FOREACH( size_t rowindex, indexset) {
-    localcolumn = 0;
-    BOOST_FOREACH( size_t columnindex, indexset) {
-      ASSERT((rowindex < bigmatrix.getRows()) && (columnindex < bigmatrix.getColumns()),
-          "current index pair ("
-          +toString(rowindex)+","+toString(columnindex)
-          +") is out of bounds of bigmatrix ("
-          +toString(bigmatrix.getRows())+","+toString(bigmatrix.getColumns())
-          +")");
-      subsystem->at(localrow,localcolumn) = (*Eigenvectors[rowindex]) * (bigmatrix * (*Eigenvectors[columnindex]));
-      localcolumn++;
-    }
-    localrow++;
-  }
-  return subsystem;
-}
-
-/** For a given set of row and columns indices, we embed a small block matrix into a bigger space.
- *
- * @param eigenvectors current eigenvectors
- * @param rowindexset row index set
- * @param columnindexset column index set
- * @return bigmatrix with eigenvectors contained
- */
-MatrixContent * embedSubspaceMatrix(
-    VectorArray &Eigenvectors,
-    MatrixContent &subsystem,
-    const IndexSet &columnindexset)
-{
-  // check whether bigmatrix is at least as big as subsystem
-  ASSERT(Eigenvectors.size() > 0,
-      "embedSubspaceMatrix() - no Eigenvectors given!");
-  ASSERT(subsystem.getRows() <= Eigenvectors[0]->getDimension(),
-      "embedSubspaceMatrix() - subsystem has more rows "
-      +toString(subsystem.getRows())+" than eigenvectors "
-      +toString(Eigenvectors[0]->getDimension())+"!");
-  ASSERT(subsystem.getColumns() <= Eigenvectors.size(),
-      "embedSubspaceMatrix() - subsystem has more columns "
-      +toString(subsystem.getColumns())+" than eigenvectors "
-      +toString(Eigenvectors.size())+"!");
-  // check whether subsystem is big enough for both index sets
-  ASSERT(subsystem.getColumns() == subsystem.getRows(),
-      "embedSubspaceMatrix() - subsystem is not square "
-      +toString(subsystem.getRows())+" than needed by index set "
-      +toString(subsystem.getColumns())+"!");
-  ASSERT(columnindexset.size() == subsystem.getColumns(),
-      "embedSubspaceMatrix() - subsystem has not the same number of columns "
-      +toString(subsystem.getColumns())+" compared to the index set "
-      +toString(columnindexset.size())+"!");
-
-  // construct intermediate matrix
-  MatrixContent *intermediatematrix = new MatrixContent(Eigenvectors[0]->getDimension(), columnindexset.size());
-  size_t localcolumn = 0;
-  BOOST_FOREACH(size_t columnindex, columnindexset) {
-    // create two vectors from each row and copy assign them
-    boost::shared_ptr<VectorContent> srceigenvector(Eigenvectors[columnindex]);
-    boost::shared_ptr<VectorContent> desteigenvector(intermediatematrix->getColumnVector(localcolumn));
-    *desteigenvector = *srceigenvector;
-    localcolumn++;
-  }
-  // matrix product with eigenbasis subsystem matrix
-  *intermediatematrix *= subsystem;
-
-  // and place at right columns into bigmatrix
-  MatrixContent *bigmatrix = new MatrixContent(Eigenvectors[0]->getDimension(), Eigenvectors.size());
-  bigmatrix->setZero();
-  localcolumn = 0;
-  BOOST_FOREACH(size_t columnindex, columnindexset) {
-    // create two vectors from each row and copy assign them
-    boost::shared_ptr<VectorContent> srceigenvector(intermediatematrix->getColumnVector(localcolumn));
-    boost::shared_ptr<VectorContent> desteigenvector(bigmatrix->getColumnVector(columnindex));
-    *desteigenvector = *srceigenvector;
-    localcolumn++;
-  }
-
-  return bigmatrix;
-}
-
-/** Prints the scalar product of each possible pair that is not orthonormal.
- * We use class logger for printing.
- * @param AllIndices set of all possible indices of the eigenvectors
- * @param CurrentEigenvectors array of eigenvectors
- * @return true - all are orthonormal to each other,
- *        false - some are not orthogonal or not normalized.
- */
-bool checkOrthogonality(const IndexSet &AllIndices, const VectorArray &CurrentEigenvectors)
-{
-  size_t nonnormalized = 0;
-  size_t nonorthogonal = 0;
-  // check orthogonality
-  BOOST_FOREACH( size_t firstindex, AllIndices) {
-    BOOST_FOREACH( size_t secondindex, AllIndices) {
-      const double scp = (*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex]);
-      if (firstindex == secondindex) {
-        if (fabs(scp - 1.) > MYEPSILON) {
-          nonnormalized++;
-          Log() << Verbose(2) << "Vector " << firstindex << " is not normalized, off by "
-              << fabs(1.-(*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex])) << std::endl;
-        }
-      } else {
-        if (fabs(scp) > MYEPSILON) {
-          nonorthogonal++;
-          Log() << Verbose(2) << "Scalar product between " << firstindex << " and " << secondindex
-              << " is " << (*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex]) << std::endl;
-        }
-      }
-    }
-  }
-
-  if ((nonnormalized == 0) && (nonorthogonal == 0)) {
-    DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "All vectors are orthonormal to each other." << std::endl));
-    return true;
-  }
-  if ((nonnormalized == 0) && (nonorthogonal != 0))
-    DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "All vectors are normalized." << std::endl));
-  if ((nonnormalized != 0) && (nonorthogonal == 0))
-    DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "All vectors are orthogonal to each other." << std::endl));
-  return false;
-}
-
-/** Calculate the sum of the scalar product of each possible pair.
- * @param AllIndices set of all possible indices of the eigenvectors
- * @param CurrentEigenvectors array of eigenvectors
- * @return sum of scalar products between all possible pairs
- */
-double calculateOrthogonalityThreshold(const IndexSet &AllIndices, const VectorArray &CurrentEigenvectors)
-{
-  double threshold = 0.;
-  // check orthogonality
-  BOOST_FOREACH( size_t firstindex, AllIndices) {
-    BOOST_FOREACH( size_t secondindex, AllIndices) {
-      const double scp = (*CurrentEigenvectors[firstindex])*(*CurrentEigenvectors[secondindex]);
-      if (firstindex == secondindex) {
-        threshold += fabs(scp - 1.);
-      } else {
-        threshold += fabs(scp);
-      }
-    }
-  }
-  return threshold;
-}
-
-/** Operator for output to std::ostream operator of an IndexSet.
- * @param ost output stream
- * @param indexset index set to output
- * @return ost output stream
- */
-std::ostream & operator<<(std::ostream &ost, const IndexSet &indexset)
-{
-  ost << "{ ";
-  for (IndexSet::const_iterator iter = indexset.begin();
-      iter != indexset.end();
-      ++iter)
-    ost << *iter << " ";
-  ost << "}";
-  return ost;
-}
-
-/** Assign eigenvectors of subspace to full eigenvectors.
- * We use parallelity as relation measure.
- * @param eigenvalue eigenvalue to assign along with
- * @param CurrentEigenvector eigenvector to assign, is taken over within
- *        boost::shared_ptr
- * @param CurrentEigenvectors full eigenvectors
- * @param CorrespondenceList list to make sure that each subspace eigenvector
- *        is assigned to a unique full eigenvector
- * @param ParallelEigenvectorList list of "similar" subspace eigenvectors per
- *        full eigenvector, allocated
- */
-void AssignSubspaceEigenvectors(
-    double eigenvalue,
-    VectorContent *CurrentEigenvector,
-    VectorArray &CurrentEigenvectors,
-    IndexSet &CorrespondenceList,
-    VectorValueList *&ParallelEigenvectorList)
-{
-  DoLog(1) && (DoLog(1) && (Log() << Verbose(1) << "Current Eigenvector is " << *CurrentEigenvector << std::endl));
-
-  // (for now settle with the one we are most parallel to)
-  size_t mostparallel_index = SubspaceFactorizerUnittest::matrixdimension;
-  double mostparallel_scalarproduct = 0.;
-  BOOST_FOREACH( size_t indexiter, CorrespondenceList) {
-    DoLog(2) && (DoLog(2) && (Log() << Verbose(2) << "Comparing to old " << indexiter << "th eigenvector " << *(CurrentEigenvectors[indexiter]) << std::endl));
-    const double scalarproduct = (*(CurrentEigenvectors[indexiter])) * (*CurrentEigenvector);
-    DoLog(2) && (DoLog(2) && (Log() << Verbose(2) << "SKP is " << scalarproduct << std::endl));
-    if (fabs(scalarproduct) > mostparallel_scalarproduct) {
-      mostparallel_scalarproduct = fabs(scalarproduct);
-      mostparallel_index = indexiter;
-    }
-  }
-  if (mostparallel_index != SubspaceFactorizerUnittest::matrixdimension) {
-    // put into std::list for later use
-    // invert if pointing in negative direction
-    if ((*(CurrentEigenvectors[mostparallel_index])) * (*CurrentEigenvector) < 0) {
-      *CurrentEigenvector *= -1.;
-      DoLog(1) && (Log() << Verbose(1) << "Pushing (inverted) " << *CurrentEigenvector << " into parallel list [" << mostparallel_index << "]" << std::endl);
-    } else {
-      DoLog(1) && (Log() << Verbose(1) << "Pushing " << *CurrentEigenvector << " into parallel list [" << mostparallel_index << "]" << std::endl);
-    }
-    ParallelEigenvectorList[mostparallel_index].push_back(make_pair(boost::shared_ptr<VectorContent>(CurrentEigenvector), eigenvalue));
-    CorrespondenceList.erase(mostparallel_index);
-  }
-}
-
-void SubspaceFactorizerUnittest::EigenvectorTest()
-{
-  VectorArray CurrentEigenvectors;
-  ValueArray CurrentEigenvalues;
-  VectorValueList *ParallelEigenvectorList = new VectorValueList[matrixdimension];
-  IndexSet AllIndices;
-
-  // create the total index set
-  for (size_t i=0;i<matrixdimension;++i)
-    AllIndices.insert(i);
-
-  // create all consecutive index subsets for dim 1 to 3
-  IndexMap Dimension_to_Indexset;
-  for (size_t dim = 0; dim<3;++dim) {
-    for (size_t i=0;i<matrixdimension;++i) {
-      IndexSet *indexset = new IndexSet;
-      for (size_t j=0;j<dim+1;++j) {
-        const int value = (i+j) % matrixdimension;
-        //std::cout << "Putting " << value << " into " << i << "th map " << dim << std::endl;
-        CPPUNIT_ASSERT_MESSAGE("index "+toString(value)+" already present in "+toString(dim)+"-dim "+toString(i)+"th indexset.", indexset->count(value) == 0);
-        indexset->insert(value);
-      }
-      Dimension_to_Indexset.insert( make_pair(dim, boost::shared_ptr<IndexSet>(indexset)) );
-      // no need to free indexset, is stored in shared_ptr and
-      // will get released when Dimension_to_Indexset is destroyed
-    }
-  }
-
-  // set to first guess, i.e. the unit vectors of R^matrixdimension
-  BOOST_FOREACH( size_t index, AllIndices) {
-    boost::shared_ptr<VectorContent> EV(new VectorContent(matrixdimension));
-    EV->setZero();
-    EV->at(index) = 1.;
-    CurrentEigenvectors.push_back(EV);
-    CurrentEigenvalues.push_back(0.);
-  }
-
-  size_t run=1; // counting iterations
-  double threshold = 1.;  // containing threshold value
-  while ((threshold > 1e-10) && (run < 10)) {
-    // for every dimension
-    for (size_t dim = 0; dim<subspacelimit;++dim) {
-      // for every index set of this dimension
-      DoLog(0) && (Log() << Verbose(0) << std::endl << std::endl);
-      DoLog(0) && (Log() << Verbose(0) << "Current dimension is " << dim << std::endl);
-      std::pair<IndexMap::const_iterator,IndexMap::const_iterator> Bounds = Dimension_to_Indexset.equal_range(dim);
-      for (IndexMap::const_iterator IndexsetIter = Bounds.first;
-          IndexsetIter != Bounds.second;
-          ++IndexsetIter) {
-        // show the index set
-        DoLog(0) && (Log() << Verbose(0) << std::endl);
-        DoLog(1) && (Log() << Verbose(1) << "Current index set is " << *(IndexsetIter->second) << std::endl);
-
-        // create transformation matrices from these
-        MatrixContent *subsystem = getSubspaceMatrix(*matrix, CurrentEigenvectors, *(IndexsetIter->second));
-        DoLog(2) && (Log() << Verbose(2) << "Subsystem matrix is " << *subsystem << std::endl);
-
-        // solve _small_ systems for eigenvalues
-        VectorContent *Eigenvalues = new VectorContent(subsystem->transformToEigenbasis());
-        DoLog(2) && (Log() << Verbose(2) << "Eigenvector matrix is " << *subsystem << std::endl);
-        DoLog(2) && (Log() << Verbose(2) << "Eigenvalues are " << *Eigenvalues << std::endl);
-
-        // blow up eigenvectors to matrixdimensiondim column vector again
-        MatrixContent *Eigenvectors = embedSubspaceMatrix(CurrentEigenvectors, *subsystem, *(IndexsetIter->second));
-        DoLog(1) && (Log() << Verbose(1) << matrixdimension << "x" << matrixdimension << " Eigenvector matrix is " << *Eigenvectors << std::endl);
-
-        // we don't need the subsystem anymore
-        delete subsystem;
-
-        // go through all eigenvectors in this subspace
-        IndexSet CorrespondenceList((*IndexsetIter->second)); // assure one-to-one and onto assignment
-        size_t localindex = 0;
-        BOOST_FOREACH( size_t iter, (*IndexsetIter->second)) {
-          // recognize eigenvectors parallel to existing ones
-          AssignSubspaceEigenvectors(
-              Eigenvalues->at(localindex),
-              new VectorContent(Eigenvectors->getColumnVector(iter)),
-              CurrentEigenvectors,
-              CorrespondenceList,
-              ParallelEigenvectorList);
-          localindex++;
-        }
-
-        // free eigenvectors
-        delete Eigenvectors;
-        delete Eigenvalues;
-      }
-    }
-
-    // print list of similar eigenvectors
-    BOOST_FOREACH( size_t index, AllIndices) {
-      DoLog(2) && (Log() << Verbose(2) << "Similar to " << index << "th current eigenvector " << *(CurrentEigenvectors[index]) << " are:" << std::endl);
-      BOOST_FOREACH( VectorValueList::value_type &iter, ParallelEigenvectorList[index] ) {
-        DoLog(2) && (Log() << Verbose(2) << *(iter.first) << std::endl);
-      }
-      DoLog(2) && (Log() << Verbose(2) << std::endl);
-    }
-
-    // create new CurrentEigenvectors from averaging parallel ones.
-    BOOST_FOREACH(size_t index, AllIndices) {
-      CurrentEigenvectors[index]->setZero();
-      CurrentEigenvalues[index] = 0.;
-      BOOST_FOREACH( VectorValueList::value_type &iter, ParallelEigenvectorList[index] ) {
-        *CurrentEigenvectors[index] += (*iter.first) * (iter.second);
-        CurrentEigenvalues[index] += (iter.second);
-      }
-      *CurrentEigenvectors[index] *= 1./CurrentEigenvalues[index];
-      CurrentEigenvalues[index] /= (double)ParallelEigenvectorList[index].size();
-      ParallelEigenvectorList[index].clear();
-    }
-
-    // check orthonormality
-    threshold = calculateOrthogonalityThreshold(AllIndices, CurrentEigenvectors);
-    bool dontOrthonormalization = checkOrthogonality(AllIndices, CurrentEigenvectors);
-
-    // orthonormalize
-    if (!dontOrthonormalization) {
-      DoLog(0) && (Log() << Verbose(0) << "Orthonormalizing ... " << std::endl);
-      for (IndexSet::const_iterator firstindex = AllIndices.begin();
-          firstindex != AllIndices.end();
-          ++firstindex) {
-        for (IndexSet::const_iterator secondindex = firstindex;
-            secondindex != AllIndices.end();
-            ++secondindex) {
-          if (*firstindex == *secondindex) {
-            (*CurrentEigenvectors[*secondindex]) *= 1./(*CurrentEigenvectors[*secondindex]).Norm();
-          } else {
-            (*CurrentEigenvectors[*secondindex]) -=
-                ((*CurrentEigenvectors[*firstindex])*(*CurrentEigenvectors[*secondindex]))
-                *(*CurrentEigenvectors[*firstindex]);
-          }
-        }
-      }
-    }
-
-//    // check orthonormality again
-//    checkOrthogonality(AllIndices, CurrentEigenvectors);
-
-    // show new ones
-    DoLog(0) && (Log() << Verbose(0) << "Resulting new eigenvectors and -values, run " << run << " are:" << std::endl);
-    BOOST_FOREACH( size_t index, AllIndices) {
-      DoLog(0) && (Log() << Verbose(0) << *CurrentEigenvectors[index] << " with " << CurrentEigenvalues[index] << std::endl);
-    }
-    run++;
-  }
-
-  delete[] ParallelEigenvectorList;
-
-  CPPUNIT_ASSERT_EQUAL(0,0);
-}
-
-
-/** Iterative function to generate all power sets of indices of size \a maxelements.
- *
- * @param SetofSets Container for all sets
- * @param CurrentSet pointer to current set in this container
- * @param Indices Source set of indices
- * @param maxelements number of elements of each set in final SetofSets
- * @return true - generation continued, false - current set already had
- *         \a maxelements elements
- */
-bool generatePowerSet(
-    SetofIndexSets &SetofSets,
-    SetofIndexSets::iterator &CurrentSet,
-    IndexSet &Indices,
-    const size_t maxelements)
-{
-  if (CurrentSet->size() < maxelements) {
-    // allocate the needed sets
-    const size_t size = Indices.size() - CurrentSet->size();
-    std::vector<std::set<size_t> > SetExpanded;
-    SetExpanded.reserve(size);
-
-    // copy the current set into each
-    for (size_t i=0;i<size;++i)
-      SetExpanded.push_back(*CurrentSet);
-
-    // expand each set by one index
-    size_t localindex=0;
-    BOOST_FOREACH(size_t iter, Indices) {
-      if (CurrentSet->count(iter) == 0) {
-        SetExpanded[localindex].insert(iter);
-        ++localindex;
-      }
-    }
-
-    // insert set at position of CurrentSet
-    for (size_t i=0;i<size;++i) {
-      //DoLog(1) && (Log() << Verbose(1) << "Inserting set #" << i << ": " << SetExpanded[i] << std::endl);
-      SetofSets.insert(CurrentSet, SetExpanded[i]);
-    }
-    SetExpanded.clear();
-
-    // and remove the current set
-    //SetofSets.erase(CurrentSet);
-    //CurrentSet = SetofSets.begin();
-
-    // set iterator to a valid position again
-    ++CurrentSet;
-    return true;
-  } else {
-    return false;
-  }
-}
-
-void SubspaceFactorizerUnittest::generatePowerSetTest()
-{
-  IndexSet AllIndices;
-  for (size_t i=0;i<4;++i)
-    AllIndices.insert(i);
-
-  SetofIndexSets SetofSets;
-  // note that starting off empty set is unstable
-  IndexSet singleset;
-  BOOST_FOREACH(size_t iter, AllIndices) {
-    singleset.insert(iter);
-    SetofSets.insert(singleset);
-    singleset.clear();
-  }
-  SetofIndexSets::iterator CurrentSet = SetofSets.begin();
-  while (CurrentSet != SetofSets.end()) {
-    //DoLog(0) && (Log() << Verbose(0) << "Current set is " << *CurrentSet << std::endl);
-    if (!generatePowerSet(SetofSets, CurrentSet, AllIndices, 2)) {
-      // go to next set
-      ++CurrentSet;
-    }
-  }
-
-  SetofIndexSets ComparisonSet;
-  // now follows a very stupid construction
-  // because we can't use const arrays of some type meaningfully ...
-  { IndexSet tempSet; tempSet.insert(0); ComparisonSet.insert(tempSet); }
-  { IndexSet tempSet; tempSet.insert(1); ComparisonSet.insert(tempSet); }
-  { IndexSet tempSet; tempSet.insert(2); ComparisonSet.insert(tempSet); }
-  { IndexSet tempSet; tempSet.insert(3); ComparisonSet.insert(tempSet); }
-
-  { IndexSet tempSet; tempSet.insert(0); tempSet.insert(1); ComparisonSet.insert(tempSet); }
-  { IndexSet tempSet; tempSet.insert(0); tempSet.insert(2); ComparisonSet.insert(tempSet); }
-  { IndexSet tempSet; tempSet.insert(0); tempSet.insert(3); ComparisonSet.insert(tempSet); }
-
-  { IndexSet tempSet; tempSet.insert(1); tempSet.insert(2); ComparisonSet.insert(tempSet); }
-  { IndexSet tempSet; tempSet.insert(1); tempSet.insert(3); ComparisonSet.insert(tempSet); }
-
-  { IndexSet tempSet; tempSet.insert(2); tempSet.insert(3); ComparisonSet.insert(tempSet); }
-
-  CPPUNIT_ASSERT_EQUAL(SetofSets, ComparisonSet);
-}
-
-bool cmd(double a, double b)
-{
-  return a > b;
-}
-
-void SubspaceFactorizerUnittest::SubspaceTest()
-{
-  Eigenspace::eigenvectorset CurrentEigenvectors;
-  Eigenspace::eigenvalueset CurrentEigenvalues;
-
-  setVerbosity(0);
-
-  boost::timer Time_generatingfullspace;
-  DoLog(0) && (Log() << Verbose(0) << std::endl << std::endl);
-  // create the total index set
-  IndexSet AllIndices;
-  for (size_t i=0;i<matrixdimension;++i)
-    AllIndices.insert(i);
-  Eigenspace FullSpace(AllIndices, *matrix);
-  DoLog(1) && (Log() << Verbose(1) << "Generated full space: " << FullSpace << std::endl);
-  DoLog(0) && (Log() << Verbose(0) << "Full space generation took " << Time_generatingfullspace.elapsed() << " seconds." << std::endl);
-
-  // generate first set of eigenvectors
-  // set to first guess, i.e. the unit vectors of R^matrixdimension
-  BOOST_FOREACH( size_t index, AllIndices) {
-    boost::shared_ptr<VectorContent> EV(new VectorContent(matrixdimension));
-    EV->setZero();
-    EV->at(index) = 1.;
-    CurrentEigenvectors.push_back(EV);
-    CurrentEigenvalues.push_back(0.);
-  }
-
-  boost::timer Time_generatingsubsets;
-  DoLog(0) && (Log() << Verbose(0) << "Generating sub sets ..." << std::endl);
-  SetofIndexSets SetofSets;
-  // note that starting off empty set is unstable
-  IndexSet singleset;
-  BOOST_FOREACH(size_t iter, AllIndices) {
-    singleset.insert(iter);
-    SetofSets.insert(singleset);
-    singleset.clear();
-  }
-  SetofIndexSets::iterator CurrentSet = SetofSets.begin();
-  while (CurrentSet != SetofSets.end()) {
-    //DoLog(2) && (Log() << Verbose(2) << "Current set is " << *CurrentSet << std::endl);
-    if (!generatePowerSet(SetofSets, CurrentSet, AllIndices, subspacelimit)) {
-      // go to next set
-      ++CurrentSet;
-    }
-  }
-  DoLog(0) && (Log() << Verbose(0) << "Sub set generation took " << Time_generatingsubsets.elapsed() << " seconds." << std::endl);
-
-  // create a subspace to each set and and to respective level
-  boost::timer Time_generatingsubspaces;
-  DoLog(0) && (Log() << Verbose(0) << "Generating sub spaces ..." << std::endl);
-  SubspaceMap Dimension_to_Indexset;
-  BOOST_FOREACH(std::set<size_t> iter, SetofSets) {
-    boost::shared_ptr<Subspace> subspace(new Subspace(iter, FullSpace));
-    DoLog(1) && (Log() << Verbose(1) << "Current subspace is " << *subspace << std::endl);
-    Dimension_to_Indexset.insert( make_pair(iter.size(), boost::shared_ptr<Subspace>(subspace)) );
-  }
-
-  for (size_t dim = 1; dim<=subspacelimit;++dim) {
-    BOOST_FOREACH( SubspaceMap::value_type subspace, Dimension_to_Indexset.equal_range(dim)) {
-      if (dim != 0) { // from level 1 and onward
-        BOOST_FOREACH( SubspaceMap::value_type entry, Dimension_to_Indexset.equal_range(dim-1)) {
-          if (subspace.second->contains(*entry.second)) {
-            // if contained then add ...
-            subspace.second->addSubset(entry.second);
-            // ... and also its containees as they are all automatically contained as well
-            BOOST_FOREACH(boost::shared_ptr<Subspace> iter, entry.second->SubIndices) {
-              subspace.second->addSubset(iter);
-            }
-          }
-        }
-      }
-    }
-  }
-  DoLog(0) && (Log() << Verbose(0) << "Sub space generation took " << Time_generatingsubspaces.elapsed() << " seconds." << std::endl);
-
-  // create a file handle for the eigenvalues
-  std::ofstream outputvalues("eigenvalues.dat", std::ios_base::trunc);
-  ASSERT(outputvalues.good(),
-      "SubspaceFactorizerUnittest::EigenvectorTest() - failed to open eigenvalue file!");
-  outputvalues << "# iteration ";
-  BOOST_FOREACH(size_t iter, AllIndices) {
-    outputvalues << "\teigenvalue" << iter;
-  }
-  outputvalues << std::endl;
-
-  DoLog(0) && (Log() << Verbose(0) << "Solving ..." << std::endl);
-  boost::timer Time_solving;
-  size_t run=1; // counting iterations
-  double threshold = 1.;  // containing threshold value
-  while ((threshold > MYEPSILON) && (run < 20)) {
-    // for every dimension
-    for (size_t dim = 1; dim <= subspacelimit;++dim) {
-      // for every index set of this dimension
-      DoLog(1) && (Log() << Verbose(1) << std::endl << std::endl);
-      DoLog(1) && (Log() << Verbose(1) << "Current dimension is " << dim << std::endl);
-      std::pair<SubspaceMap::const_iterator,SubspaceMap::const_iterator> Bounds = Dimension_to_Indexset.equal_range(dim);
-      for (SubspaceMap::const_iterator IndexsetIter = Bounds.first;
-          IndexsetIter != Bounds.second;
-          ++IndexsetIter) {
-        Subspace& subspace = *(IndexsetIter->second);
-        // show the index set
-        DoLog(2) && (Log() << Verbose(2) << std::endl);
-        DoLog(2) && (Log() << Verbose(2) << "Current subspace is " << subspace << std::endl);
-
-        // solve
-        subspace.calculateEigenSubspace();
-
-        // note that assignment to global eigenvectors all remains within subspace
-      }
-    }
-
-    // print list of similar eigenvectors
-    DoLog(2) && (Log() << Verbose(2) << std::endl);
-    BOOST_FOREACH( size_t index, AllIndices) {
-      DoLog(2) && (Log() << Verbose(2) << "Similar to " << index << "th current eigenvector " << *(CurrentEigenvectors[index]) << " are:" << std::endl);
-      BOOST_FOREACH( SubspaceMap::value_type iter, Dimension_to_Indexset) {
-        const VectorContent & CurrentEV = (iter.second)->getEigenvectorParallelToFullOne(index);
-        if (!CurrentEV.IsZero())
-          Log() << Verbose(2)
-          << "dim" << iter.first
-          << ", subspace{" << (iter.second)->getIndices()
-          << "}: "<<CurrentEV << std::endl;
-      }
-      DoLog(2) && (Log() << Verbose(2) << std::endl);
-    }
-
-    // create new CurrentEigenvectors from averaging parallel ones.
-    BOOST_FOREACH(size_t index, AllIndices) {
-      CurrentEigenvectors[index]->setZero();
-      CurrentEigenvalues[index] = 0.;
-      size_t count = 0;
-      BOOST_FOREACH( SubspaceMap::value_type iter, Dimension_to_Indexset) {
-        const VectorContent CurrentEV = (iter.second)->getEigenvectorParallelToFullOne(index);
-        *CurrentEigenvectors[index] += CurrentEV; // * (iter.second)->getEigenvalueOfEigenvectorParallelToFullOne(index);
-        CurrentEigenvalues[index] += (iter.second)->getEigenvalueOfEigenvectorParallelToFullOne(index);
-        if (!CurrentEV.IsZero())
-          count++;
-      }
-      *CurrentEigenvectors[index] *= 1./CurrentEigenvalues[index];
-      //CurrentEigenvalues[index] /= (double)count;
-    }
-
-    // check orthonormality
-    threshold = calculateOrthogonalityThreshold(AllIndices, CurrentEigenvectors);
-    bool dontOrthonormalization = checkOrthogonality(AllIndices, CurrentEigenvectors);
-
-    // orthonormalize
-    if (!dontOrthonormalization) {
-      DoLog(1) && (Log() << Verbose(1) << "Orthonormalizing ... " << std::endl);
-      for (IndexSet::const_iterator firstindex = AllIndices.begin();
-          firstindex != AllIndices.end();
-          ++firstindex) {
-        for (IndexSet::const_iterator secondindex = firstindex;
-            secondindex != AllIndices.end();
-            ++secondindex) {
-          if (*firstindex == *secondindex) {
-            (*CurrentEigenvectors[*secondindex]) *= 1./(*CurrentEigenvectors[*secondindex]).Norm();
-          } else {
-            (*CurrentEigenvectors[*secondindex]) -=
-                ((*CurrentEigenvectors[*firstindex])*(*CurrentEigenvectors[*secondindex]))
-                *(*CurrentEigenvectors[*firstindex]);
-          }
-        }
-      }
-    }
-
-//    // check orthonormality again
-//    checkOrthogonality(AllIndices, CurrentEigenvectors);
-
-    // put obtained eigenvectors into full space
-    FullSpace.setEigenpairs(CurrentEigenvectors, CurrentEigenvalues);
-
-    // show new ones
-    DoLog(1) && (Log() << Verbose(1) << "Resulting new eigenvectors and -values, run " << run << " are:" << std::endl);
-    outputvalues << run;
-    BOOST_FOREACH( size_t index, AllIndices) {
-      DoLog(1) && (Log() << Verbose(1) << *CurrentEigenvectors[index] << " with " << CurrentEigenvalues[index] << std::endl);
-      outputvalues << "\t" << CurrentEigenvalues[index];
-    }
-    outputvalues << std::endl;
-
-    // and next iteration
-    DoLog(0) && (Log() << Verbose(0) << "\titeration #" << run << std::endl);
-    run++;
-  }
-  DoLog(0) && (Log() << Verbose(0) << "Solving took " << Time_solving.elapsed() << " seconds." << std::endl);
-  // show final ones
-  DoLog(0) && (Log() << Verbose(0) << "Resulting new eigenvectors and -values, run " << run << " are:" << std::endl);
-  outputvalues << run;
-  BOOST_FOREACH( size_t index, AllIndices) {
-    DoLog(0) && (Log() << Verbose(0) << *CurrentEigenvectors[index] << " with " << CurrentEigenvalues[index] << std::endl);
-    outputvalues << "\t" << CurrentEigenvalues[index];
-  }
-  outputvalues << std::endl;
-  outputvalues.close();
-
-  setVerbosity(2);
-
-  DoLog(0) && (Log() << Verbose(0) << "Solving full space ..." << std::endl);
-  boost::timer Time_comparison;
-  MatrixContent tempFullspaceMatrix = FullSpace.getEigenspaceMatrix();
-  gsl_vector *eigenvalues = tempFullspaceMatrix.transformToEigenbasis();
-  tempFullspaceMatrix.sortEigenbasis(eigenvalues);
-  DoLog(0) && (Log() << Verbose(0) << "full space solution took " << Time_comparison.elapsed() << " seconds." << std::endl);
-
-  // compare all
-  sort(CurrentEigenvalues.begin(),CurrentEigenvalues.end()); //, cmd);
-  for (size_t i=0;i<eigenvalues->size; ++i) {
-    CPPUNIT_ASSERT_MESSAGE(toString(i)+"ths eigenvalue differs:"
-        +toString(CurrentEigenvalues[i])+" != "+toString(gsl_vector_get(eigenvalues,i)),
-        fabs((CurrentEigenvalues[i] - gsl_vector_get(eigenvalues,i))/CurrentEigenvalues[i]) < 1e-3);
-  }
-
-  CPPUNIT_ASSERT_EQUAL(0,0);
-}
Index: c/unittests/SubspaceFactorizerUnittest.hpp
===================================================================
--- src/unittests/SubspaceFactorizerUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,57 +1,0 @@
-/*
- * SubspaceFactorizerUnittest.hpp
- *
- *  Created on: Nov 13, 2010
- *      Author: heber
- */
-
-#ifndef SUBSPACEFACTORIZERUNITTEST_HPP_
-#define SUBSPACEFACTORIZERUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class MatrixContent;
-class VectorContent;
-class Subspace;
-
-typedef std::set<std::set<size_t> > SetofIndexSets;
-typedef std::set<size_t> IndexSet;
-typedef std::multimap< size_t, boost::shared_ptr<Subspace> > SubspaceMap;
-typedef std::multimap< size_t, boost::shared_ptr<IndexSet> > IndexMap;
-typedef std::list< boost::shared_ptr<VectorContent> > VectorList;
-typedef std::list< std::pair<boost::shared_ptr<VectorContent>, double> > VectorValueList;
-typedef std::vector< boost::shared_ptr<VectorContent> > VectorArray;
-typedef std::vector< double > ValueArray;
-
-class SubspaceFactorizerUnittest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( SubspaceFactorizerUnittest) ;
-  CPPUNIT_TEST ( BlockTest );
-  //CPPUNIT_TEST ( EigenvectorTest );
-  CPPUNIT_TEST ( generatePowerSetTest );
-  CPPUNIT_TEST ( SubspaceTest );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void BlockTest();
-  void EigenvectorTest();
-  void generatePowerSetTest();
-  void SubspaceTest();
-
-  enum { matrixdimension = 4 };
-  enum { subspacelimit = 3 };
-private:
-
-  MatrixContent *matrix;
-
-  MatrixContent ***transformation;
-};
-
-MatrixContent * getSubspaceMatrix(MatrixContent &bigmatrix, const IndexSet &rowindexset, const IndexSet &columnindexset);
-void embedSubspaceMatrix(MatrixContent &bigmatrix, MatrixContent &subsystem, const IndexSet &rowindexset, const IndexSet &columnindexset);
-std::ostream & operator<<(std::ostream &ost, const IndexSet &indexset);
-
-#endif /* SUBSPACEFACTORIZERUNITTEST_HPP_ */
Index: src/unittests/TesselationUnitTest.cpp
===================================================================
--- src/unittests/TesselationUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/TesselationUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,190 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * TesselationUnitTest.cpp
+ *
+ *  Created on: Aug 26, 2009
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cstring>
+
+#include "Helpers/defs.hpp"
+#include "TesselPoint.hpp"
+#include "BoundaryLineSet.hpp"
+#include "BoundaryTriangleSet.hpp"
+#include "CandidateForTesselation.hpp"
+
+#include "TesselationUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+const double TesselationTest::SPHERERADIUS=2.;
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( TesselationTest );
+
+
+void TesselationTest::setUp()
+{
+  // create corners
+  class TesselPoint *Walker;
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(1., 0., -1.));
+  Walker->setName("1");
+  Walker->nr = 1;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(-1., 1., -1.));
+  Walker->setName("2");
+  Walker->nr = 2;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(-1., -1., -1.));
+  Walker->setName("3");
+  Walker->nr = 3;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(-1., 0., 1.));
+  Walker->setName("4");
+  Walker->nr = 4;
+  Corners.push_back(Walker);
+
+  // create linkedcell
+  LinkedList = new LinkedCell(Corners, 2.*SPHERERADIUS);
+
+  // create tesselation
+  TesselStruct = new Tesselation;
+  CPPUNIT_ASSERT_EQUAL( true, TesselStruct->PointsOnBoundary.empty() );
+  CPPUNIT_ASSERT_EQUAL( true, TesselStruct->LinesOnBoundary.empty() );
+  CPPUNIT_ASSERT_EQUAL( true, TesselStruct->TrianglesOnBoundary.empty() );
+  TesselStruct->FindStartingTriangle(SPHERERADIUS, LinkedList);
+
+  CandidateForTesselation *baseline = NULL;
+  BoundaryTriangleSet *T = NULL;
+  bool OneLoopWithoutSuccessFlag = true;
+  bool TesselationFailFlag = false;
+  while ((!TesselStruct->OpenLines.empty()) && (OneLoopWithoutSuccessFlag)) {
+    // 2a. fill all new OpenLines
+    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
+      baseline = Runner->second;
+      if (baseline->pointlist.empty()) {
+        T = (((baseline->BaseLine->triangles.begin()))->second);
+        TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*baseline, *T, SPHERERADIUS, LinkedList); //the line is there, so there is a triangle, but only one.
+      }
+    }
+
+    // 2b. search for smallest ShortestAngle among all candidates
+    double ShortestAngle = 4.*M_PI;
+    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
+      if (Runner->second->ShortestAngle < ShortestAngle) {
+        baseline = Runner->second;
+        ShortestAngle = baseline->ShortestAngle;
+      }
+    }
+    if ((ShortestAngle == 4.*M_PI) || (baseline->pointlist.empty()))
+      OneLoopWithoutSuccessFlag = false;
+    else {
+      TesselStruct->AddCandidatePolygon(*baseline, SPHERERADIUS, LinkedList);
+    }
+  }
+};
+
+
+void TesselationTest::tearDown()
+{
+  delete(LinkedList);
+  delete(TesselStruct);
+  for (LinkedCell::LinkedNodes::iterator Runner = Corners.begin(); Runner != Corners.end(); Runner++)
+    delete(*Runner);
+  Corners.clear();
+  logger::purgeInstance();
+  errorLogger::purgeInstance();
+};
+
+/** UnitTest for Contains...()
+ *
+ */
+void TesselationTest::ContainmentTest()
+{
+  class BoundaryPointSet *point = NULL;
+  class BoundaryLineSet *line = NULL;
+
+  // check ContainsBoundaryPoint
+  for(LineMap::iterator Runner = TesselStruct->LinesOnBoundary.begin(); Runner != TesselStruct->LinesOnBoundary.end(); Runner++) {
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[0]));
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[1]));
+  }
+  for(TriangleMap::iterator Runner = TesselStruct->TrianglesOnBoundary.begin(); Runner != TesselStruct->TrianglesOnBoundary.end(); Runner++) {
+    for(PointMap::iterator PointRunner = TesselStruct->PointsOnBoundary.begin(); PointRunner != TesselStruct->PointsOnBoundary.end(); PointRunner++) {
+      point = PointRunner->second;
+      for (int i=0;i<3;i++)
+        if (point == (Runner->second)->endpoints[i])
+          point = NULL;
+      if (point != NULL)
+        break;
+    }
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[0]));
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[1]));
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[2]));
+    CPPUNIT_ASSERT_EQUAL( false, (Runner->second)->ContainsBoundaryPoint(point));
+  }
+
+  // check ContainsBoundaryLine
+  for(TriangleMap::iterator Runner = TesselStruct->TrianglesOnBoundary.begin(); Runner != TesselStruct->TrianglesOnBoundary.end(); Runner++) {
+    for(LineMap::iterator LineRunner = TesselStruct->LinesOnBoundary.begin(); LineRunner != TesselStruct->LinesOnBoundary.end(); LineRunner++) {
+      line = LineRunner->second;
+      for (int i=0;i<3;i++)
+        if (line == (Runner->second)->lines[i])
+          line = NULL;
+      if (line != NULL)
+        break;
+    }
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryLine((Runner->second)->lines[0]));
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryLine((Runner->second)->lines[1]));
+    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryLine((Runner->second)->lines[2]));
+    CPPUNIT_ASSERT_EQUAL( false, (Runner->second)->ContainsBoundaryLine(line));
+  }
+
+  // check IsPresentTupel
+  CPPUNIT_ASSERT_EQUAL( true, true );
+}
+
+/** UnitTest for Tesselation::GetAllTriangles()
+ *
+ */
+void TesselationTest::GetAllTrianglesTest()
+{
+  class BoundaryPointSet *Walker = NULL;
+
+  // check that there are three adjacent triangles for every boundary point
+  for (PointMap::iterator Runner = TesselStruct->PointsOnBoundary.begin(); Runner != TesselStruct->PointsOnBoundary.end(); Runner++) {
+    Walker = Runner->second;
+    set<BoundaryTriangleSet*> *triangles = TesselStruct->GetAllTriangles(Walker);
+    CPPUNIT_ASSERT_EQUAL( (size_t)3, triangles->size() );
+    // check that the returned triangle all contain the Walker
+    for (set<BoundaryTriangleSet*>::iterator TriangleRunner = triangles->begin(); TriangleRunner != triangles->end(); TriangleRunner++)
+      CPPUNIT_ASSERT_EQUAL( true, (*TriangleRunner)->ContainsBoundaryPoint(Walker) );
+    delete(triangles);
+  }
+}
Index: src/unittests/TesselationUnitTest.hpp
===================================================================
--- src/unittests/TesselationUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/TesselationUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,44 @@
+/*
+ * TesselationUnitTest.hpp
+ *
+ *  Created on: Aug 26, 2009
+ *      Author: heber
+ */
+
+#ifndef TESSELATIONUNITTEST_HPP_
+#define TESSELATIONUNITTEST_HPP_
+
+/*********************************************** includes ***********************************/
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "linkedcell.hpp"
+#include "tesselation.hpp"
+
+/********************************************** Test classes **************************************/
+
+class TesselationTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( TesselationTest) ;
+    CPPUNIT_TEST ( GetAllTrianglesTest );
+    CPPUNIT_TEST ( ContainmentTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void GetAllTrianglesTest();
+      void ContainmentTest();
+
+
+private:
+      static const double SPHERERADIUS;
+
+      class Tesselation *TesselStruct;
+      LinkedCell::LinkedNodes Corners;
+      class LinkedCell *LinkedList;
+};
+
+
+
+#endif /* TESSELATIONUNITTEST_HPP_ */
Index: src/unittests/Tesselation_BoundaryTriangleUnitTest.cpp
===================================================================
--- src/unittests/Tesselation_BoundaryTriangleUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/Tesselation_BoundaryTriangleUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,213 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * Tesselation_BoundaryTriangleUnitTest.cpp
+ *
+ *  Created on: Jan 13, 2010
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cstring>
+#include <iostream>
+
+#include "Helpers/defs.hpp"
+#include "TesselPoint.hpp"
+#include "BoundaryPointSet.hpp"
+#include "BoundaryLineSet.hpp"
+#include "BoundaryTriangleSet.hpp"
+#include "CandidateForTesselation.hpp"
+
+#include "Tesselation_BoundaryTriangleUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+const double TesselationBoundaryTriangleTest::SPHERERADIUS=2.;
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( TesselationBoundaryTriangleTest );
+
+
+void TesselationBoundaryTriangleTest::setUp()
+{
+  setVerbosity(5);
+
+  // create nodes
+  tesselpoints[0] = new TesselPoint;
+  tesselpoints[0]->setPosition(Vector(0., 0., 0.));
+  tesselpoints[0]->setName("1");
+  tesselpoints[0]->nr = 1;
+  points[0] = new BoundaryPointSet(tesselpoints[0]);
+  tesselpoints[1] = new TesselPoint;
+  tesselpoints[1]->setPosition(Vector(0., 1., 0.));
+  tesselpoints[1]->setName("2");
+  tesselpoints[1]->nr = 2;
+  points[1] = new BoundaryPointSet(tesselpoints[1]);
+  tesselpoints[2] = new TesselPoint;
+  tesselpoints[2]->setPosition(Vector(1., 0., 0.));
+  tesselpoints[2]->setName("3");
+  tesselpoints[2]->nr = 3;
+  points[2] = new BoundaryPointSet(tesselpoints[2] );
+
+  // create line
+  lines[0] = new BoundaryLineSet(points[0], points[1], 0);
+  lines[1] = new BoundaryLineSet(points[1], points[2], 1);
+  lines[2] = new BoundaryLineSet(points[0], points[2], 2);
+
+  // create triangle
+  triangle = new BoundaryTriangleSet(lines, 0);
+  triangle->GetNormalVector(Vector(0.,0.,1.));
+};
+
+
+void TesselationBoundaryTriangleTest::tearDown()
+{
+  delete(triangle);
+  for (int i=0;i<3;++i) {
+    // TesselPoint does not delete its vector as it only got a reference
+    delete tesselpoints[i];
+  }
+  logger::purgeInstance();
+  errorLogger::purgeInstance();
+};
+
+/** UnitTest for Tesselation::IsInnerPoint()
+ */
+void TesselationBoundaryTriangleTest::GetClosestPointOnPlaneTest()
+{
+  Vector TestIntersection;
+  Vector Point;
+
+  // simple test on y line
+  Point = Vector(-1.,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+  Point = Vector(-4.,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( 16., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on x line
+  Point = Vector(0.5,-1.,0.);
+  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+  Point = Vector(0.5,-6.,0.);
+  CPPUNIT_ASSERT_EQUAL( 36., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on slanted line
+  Point = Vector(1.,1.,0.);
+  CPPUNIT_ASSERT_EQUAL( 0.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+  Point = Vector(5.,5.,0.);
+  CPPUNIT_ASSERT_EQUAL( 40.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on first node
+  Point = Vector(-1.,-1.,0.);
+  CPPUNIT_ASSERT_EQUAL( 2., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on second node
+  Point = Vector(0.,2.,0.);
+  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,1.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on third node
+  Point = Vector(2.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(1.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+};
+
+/** UnitTest for Tesselation::IsInnerPoint()
+ */
+void TesselationBoundaryTriangleTest::GetClosestPointOffPlaneTest()
+{
+  Vector TestIntersection;
+  Vector Point;
+
+  // straight down/up
+  Point = Vector(1./3.,1./3.,+5.);
+  CPPUNIT_ASSERT_EQUAL( 25. , triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(1./3.,1./3.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+  Point = Vector(1./3.,1./3.,-5.);
+  CPPUNIT_ASSERT_EQUAL( 25. , triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(1./3.,1./3.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on y line
+  Point = Vector(-1.,0.5,+2.);
+  CPPUNIT_ASSERT_EQUAL( 5., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+  Point = Vector(-1.,0.5,-3.);
+  CPPUNIT_ASSERT_EQUAL( 10., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on x line
+  Point = Vector(0.5,-1.,+1.);
+  CPPUNIT_ASSERT_EQUAL( 2., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+  Point = Vector(0.5,-1.,-2.);
+  CPPUNIT_ASSERT_EQUAL( 5., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on slanted line
+  Point = Vector(1.,1.,+3.);
+  CPPUNIT_ASSERT_EQUAL( 9.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+  Point = Vector(1.,1.,-4.);
+  CPPUNIT_ASSERT_EQUAL( 16.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.5,0.5,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on first node
+  Point = Vector(-1.,-1.,5.);
+  CPPUNIT_ASSERT_EQUAL( 27., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on second node
+  Point = Vector(0.,2.,5.);
+  CPPUNIT_ASSERT_EQUAL( 26., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(0.,1.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+
+  // simple test on third node
+  Point = Vector(2.,0.,5.);
+  CPPUNIT_ASSERT_EQUAL( 26., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
+  Point = Vector(1.,0.,0.);
+  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
+};
Index: src/unittests/Tesselation_BoundaryTriangleUnitTest.hpp
===================================================================
--- src/unittests/Tesselation_BoundaryTriangleUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/Tesselation_BoundaryTriangleUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,46 @@
+/*
+ * Tesselation_BoundaryTriangleUnitTest.hpp
+ *
+ *  Created on: Jan 13, 2010
+ *      Author: heber
+ */
+
+#ifndef TESSELATION_BOUNDARYTRIANGLEUNITTEST_HPP_
+#define TESSELATION_BOUNDARYTRIANGLEUNITTEST_HPP_
+
+/*********************************************** includes ***********************************/
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "linkedcell.hpp"
+#include "tesselation.hpp"
+
+class TesselPoint;
+
+/********************************************** Test classes **************************************/
+
+class TesselationBoundaryTriangleTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( TesselationBoundaryTriangleTest) ;
+    CPPUNIT_TEST ( GetClosestPointOnPlaneTest );
+    CPPUNIT_TEST ( GetClosestPointOffPlaneTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void GetClosestPointOnPlaneTest();
+      void GetClosestPointOffPlaneTest();
+
+private:
+      static const double SPHERERADIUS;
+
+      class BoundaryTriangleSet *triangle;
+      class BoundaryLineSet *lines[3];
+      class BoundaryPointSet *points[3];
+      class TesselPoint *tesselpoints[3];
+      LinkedCell::LinkedNodes Corners;
+};
+
+
+#endif /* TESSELATION_BOUNDARYTRIANGLEUNITTEST_HPP_ */
Index: src/unittests/Tesselation_InsideOutsideUnitTest.cpp
===================================================================
--- src/unittests/Tesselation_InsideOutsideUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/Tesselation_InsideOutsideUnitTest.cpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,172 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * Tesselation_InsideOutsideUnitTest.cpp
+ *
+ *  Created on: Dec 28, 2009
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+using namespace std;
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <cstring>
+#include <iostream>
+
+#include "Helpers/defs.hpp"
+#include "TesselPoint.hpp"
+#include "BoundaryLineSet.hpp"
+#include "BoundaryTriangleSet.hpp"
+#include "CandidateForTesselation.hpp"
+#include "Helpers/Verbose.hpp"
+
+#include "Tesselation_InsideOutsideUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+const double TesselationInOutsideTest::SPHERERADIUS=2.;
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( TesselationInOutsideTest );
+
+void TesselationInOutsideTest::setUp()
+{
+  setVerbosity(2);
+
+  // create corners
+  class TesselPoint *Walker;
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(0., 0., 0.));
+  Walker->setName("1");
+  Walker->nr = 1;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(0., 1., 0.));
+  Walker->setName("2");
+  Walker->nr = 2;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(1., 0., 0.));
+  Walker->setName("3");
+  Walker->nr = 3;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(1., 1., 0.));
+  Walker->setName("4");
+  Walker->nr = 4;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(0., 0., 1.));
+  Walker->setName("5");
+  Walker->nr = 5;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(0., 1., 1.));
+  Walker->setName("6");
+  Walker->nr = 6;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(1., 0., 1.));
+  Walker->setName("7");
+  Walker->nr = 7;
+  Corners.push_back(Walker);
+  Walker = new TesselPoint;
+  Walker->setPosition(Vector(1., 1., 1.));
+  Walker->setName("8");
+  Walker->nr = 8;
+  Corners.push_back(Walker);
+
+  // create linkedcell
+  LinkedList = new LinkedCell(Corners, 2.*SPHERERADIUS);
+
+  // create tesselation
+  TesselStruct = new Tesselation;
+  TesselStruct->FindStartingTriangle(SPHERERADIUS, LinkedList);
+
+  CandidateForTesselation *baseline = NULL;
+  BoundaryTriangleSet *T = NULL;
+  bool OneLoopWithoutSuccessFlag = true;
+  bool TesselationFailFlag = false;
+  while ((!TesselStruct->OpenLines.empty()) && (OneLoopWithoutSuccessFlag)) {
+    // 2a. fill all new OpenLines
+    DoLog(1) && (Log() << Verbose(1) << "There are " << TesselStruct->OpenLines.size() << " open lines to scan for candidates:" << endl);
+    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++)
+      DoLog(2) && (Log() << Verbose(2) << *(Runner->second) << endl);
+
+    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
+      baseline = Runner->second;
+      if (baseline->pointlist.empty()) {
+        T = (((baseline->BaseLine->triangles.begin()))->second);
+        DoLog(1) && (Log() << Verbose(1) << "Finding best candidate for open line " << *baseline->BaseLine << " of triangle " << *T << endl);
+        TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*baseline, *T, SPHERERADIUS, LinkedList); //the line is there, so there is a triangle, but only one.
+      }
+    }
+
+    // 2b. search for smallest ShortestAngle among all candidates
+    double ShortestAngle = 4.*M_PI;
+    DoLog(1) && (Log() << Verbose(1) << "There are " << TesselStruct->OpenLines.size() << " open lines to scan for the best candidates:" << endl);
+    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++)
+      DoLog(2) && (Log() << Verbose(2) << *(Runner->second) << endl);
+
+    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
+      if (Runner->second->ShortestAngle < ShortestAngle) {
+        baseline = Runner->second;
+        ShortestAngle = baseline->ShortestAngle;
+        //Log() << Verbose(1) << "New best candidate is " << *baseline->BaseLine << " with point " << *baseline->point << " and angle " << baseline->ShortestAngle << endl;
+      }
+    }
+    if ((ShortestAngle == 4.*M_PI) || (baseline->pointlist.empty()))
+      OneLoopWithoutSuccessFlag = false;
+    else {
+      TesselStruct->AddCandidatePolygon(*baseline, SPHERERADIUS, LinkedList);
+    }
+  }
+};
+
+
+void TesselationInOutsideTest::tearDown()
+{
+  delete(LinkedList);
+  delete(TesselStruct);
+  for (LinkedCell::LinkedNodes::iterator Runner = Corners.begin(); Runner != Corners.end(); Runner++)
+    delete(*Runner);
+  Corners.clear();
+  logger::purgeInstance();
+  errorLogger::purgeInstance();
+};
+
+/** UnitTest for Tesselation::IsInnerPoint()
+ */
+void TesselationInOutsideTest::IsInnerPointTest()
+{
+  double n[3];
+  const double boundary = 2.;
+  const double step = 1.;
+
+  // go through the mesh and check each point
+  for (n[0] = -boundary; n[0] <= boundary; n[0]+=step)
+    for (n[1] = -boundary; n[1] <= boundary; n[1]+=step)
+      for (n[2] = -boundary; n[2] <= boundary; n[2]+=step) {
+        if ( ((n[0] >= 0.) && (n[1] >= 0.) && (n[2] >= 0.)) && ((n[0] <= 1.) && (n[1] <= 1.) && (n[2] <= 1.)))
+          CPPUNIT_ASSERT_EQUAL( true , TesselStruct->IsInnerPoint(Vector(n[0], n[1], n[2]), LinkedList) );
+        else
+          CPPUNIT_ASSERT_EQUAL( false , TesselStruct->IsInnerPoint(Vector(n[0], n[1], n[2]), LinkedList) );
+      }
+};
Index: src/unittests/Tesselation_InsideOutsideUnitTest.hpp
===================================================================
--- src/unittests/Tesselation_InsideOutsideUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ src/unittests/Tesselation_InsideOutsideUnitTest.hpp	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,40 @@
+/*
+ * Tesselation_InsideOutsideUnitTest.hpp
+ *
+ *  Created on: Dec 28, 2009
+ *      Author: heber
+ */
+
+#ifndef TESSELATION_INSIDEOUTSIDEUNITTEST_HPP_
+#define TESSELATION_INSIDEOUTSIDEUNITTEST_HPP_
+
+/*********************************************** includes ***********************************/
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include "linkedcell.hpp"
+#include "tesselation.hpp"
+
+/********************************************** Test classes **************************************/
+
+class TesselationInOutsideTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( TesselationInOutsideTest) ;
+    CPPUNIT_TEST ( IsInnerPointTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void IsInnerPointTest();
+
+private:
+      static const double SPHERERADIUS;
+
+      class Tesselation *TesselStruct;
+      LinkedCell::LinkedNodes Corners;
+      class LinkedCell *LinkedList;
+};
+
+
+#endif /* TESSELATION_INSIDEOUTSIDEUNITTEST_HPP_ */
Index: c/unittests/VectorContentUnittest.cpp
===================================================================
--- src/unittests/VectorContentUnittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,176 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * VectorContentUnittest.cpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "VectorContentUnittest.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( VectorContentTest );
-
-
-void VectorContentTest::setUp()
-{
-  v = new VectorContent(3);
-};
-
-void VectorContentTest::tearDown()
-{
-  delete(v);
-};
-
-/** Unit test for accessing elements in the vector.
- *
- */
-void VectorContentTest::AccessTest()
-{
-  // set
-  for (int i=0;i<3;i++)
-    v->at(i) = (double)i;
-
-  // and check
-  double *ptr = NULL;
-  for (int i=0;i<3;i++) {
-    CPPUNIT_ASSERT_EQUAL( (double)i, v->at(i) );
-    ptr = v->Pointer(i);
-    CPPUNIT_ASSERT_EQUAL( (double)i, *ptr );
-  }
-
-  // out of bounds
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(3) );
-  //CPPUNIT_ASSERT_EQUAL(0., v->at(-1) );
-};
-
-
-/** Unit test for initializing the vector.
- *
- */
-void VectorContentTest::InitializaionTest()
-{
-  // set zero
-  v->setZero();
-  for (int i=0;i<3;i++)
-    CPPUNIT_ASSERT_EQUAL( 0., v->at(i) );
-
-  // set basis
-  for (int i=0;i<3;i++) {
-    v->setBasis(i);
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( i == j ? 1. : 0. , v->at(j) );
-  }
-
-  // set all
-  v->setValue(1.5);
-  for (int i=0;i<3;i++)
-    CPPUNIT_ASSERT_EQUAL( 1.5, v->at(i) );
-};
-
-/** Unit test for copying vectors.
- *
- */
-void VectorContentTest::CopyTest()
-{
-  // set basis
-  VectorContent *dest = NULL;
-  for (int i=0;i<3;i++) {
-    v->setBasis(i);
-    dest = new VectorContent(v);
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( v->at(j) , dest->at(j) );
-
-    delete(dest);
-  }
-};
-
-/** Unit test for exchanging elements of a vector.
- *
- */
-void VectorContentTest::ExchangeTest()
-{
-  // set basis
-  for (int i=0;i<3;i++) {
-    v->setBasis(i);
-    v->SwapElements((i)%3,(i+1)%3);
-    for (int j=0;j<3;j++)
-      CPPUNIT_ASSERT_EQUAL( (i+1)%3 == j ? 1. : 0. , v->at(j) );
-  }
-
-  // set to 1,2,3 and reverse
-  for (int i=0;i<3;i++)
-    v->at(i) = (double)(i+1);
-  v->Reverse();
-  for (int j=0;j<3;j++)
-    CPPUNIT_ASSERT_EQUAL( (double)(3-j), v->at(j) );
-};
-
-/** UnitTest for operators.
- */
-void VectorContentTest::OperatorIsTest()
-{
-  VectorContent zero(3);
-  VectorContent unit(3);
-  zero.setZero();
-  unit.setZero();
-  unit[1] = 1.;
-  // summation and scaling
-  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, zero.IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, unit.IsZero() );
-  CPPUNIT_ASSERT_EQUAL( true, zero.IsZero() );
-};
-
-/** UnitTest for operators.
- */
-void VectorContentTest::OperatorAlgebraTest()
-{
-  VectorContent zero(3);
-  VectorContent unit(3);
-  zero.setZero();
-  unit.setZero();
-  unit[1] = 1.;
-  // summation and scaling
-  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, (zero-unit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, (zero-unit).IsZero() );
-  CPPUNIT_ASSERT_EQUAL( true, (zero+zero).IsZero() );
-  CPPUNIT_ASSERT_EQUAL( false, (unit*0.98).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, (0.98*unit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, (unit*1.).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, (1.*unit).IsOne() );
-
-  CPPUNIT_ASSERT_EQUAL( unit, (zero+unit) );
-  CPPUNIT_ASSERT_EQUAL( zero, (zero+zero) );
-  CPPUNIT_ASSERT_EQUAL( unit, (unit+zero) );
-
-  unit += zero;
-  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
-  unit *= 1.;
-  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
-};
Index: c/unittests/VectorContentUnittest.hpp
===================================================================
--- src/unittests/VectorContentUnittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,45 +1,0 @@
-/*
- * VectorContentUnittest.hpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-#ifndef VECTORCONTENTUNITTEST_HPP_
-#define VECTORCONTENTUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "LinearAlgebra/VectorContent.hpp"
-
-/********************************************** Test classes **************************************/
-
-class VectorContentTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( VectorContentTest) ;
-    CPPUNIT_TEST (AccessTest );
-    CPPUNIT_TEST (InitializaionTest );
-    CPPUNIT_TEST (CopyTest );
-    CPPUNIT_TEST (ExchangeTest );
-    CPPUNIT_TEST (OperatorAlgebraTest );
-    CPPUNIT_TEST (OperatorIsTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void AccessTest();
-    void InitializaionTest();
-    void CopyTest();
-    void ExchangeTest();
-    void OperatorIsTest();
-    void OperatorAlgebraTest();
-
-private:
-
-    VectorContent *v;
-};
-
-
-#endif /* VECTORCONTENTUNITTEST_HPP_ */
Index: c/unittests/analysisbondsunittest.cpp
===================================================================
--- src/unittests/analysisbondsunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,174 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * analysisbondsunittest.cpp
- *
- *  Created on: Nov 7, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <iostream>
-#include <stdio.h>
-#include <cstring>
-
-#include "analysis_bonds.hpp"
-#include "analysisbondsunittest.hpp"
-#include "atom.hpp"
-#include "bond.hpp"
-#include "bondgraph.hpp"
-#include "element.hpp"
-#include "molecule.hpp"
-#include "periodentafel.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "World.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( AnalysisBondsTest );
-
-
-void AnalysisBondsTest::setUp()
-{
-  atom *Walker = NULL;
-
-  // get elements
-  hydrogen = World::getInstance().getPeriode()->FindElement(1);
-  carbon = World::getInstance().getPeriode()->FindElement(6);
-  CPPUNIT_ASSERT(hydrogen != NULL && "could not find element hydrogen");
-  CPPUNIT_ASSERT(carbon != NULL && "could not find element carbon");
-
-  // construct molecule (tetraeder of hydrogens)
-  TestMolecule = World::getInstance().createMolecule();
-  CPPUNIT_ASSERT(TestMolecule != NULL && "could not create molecule");
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(1.5, 0., 1.5 ));
-  TestMolecule->AddAtom(Walker);
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(0., 1.5, 1.5 ));
-  TestMolecule->AddAtom(Walker);
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(1.5, 1.5, 0. ));
-  TestMolecule->AddAtom(Walker);
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(0., 0., 0. ));
-  TestMolecule->AddAtom(Walker);
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(carbon);
-  Walker->setPosition(Vector(0.5, 0.5, 0.5 ));
-  TestMolecule->AddAtom(Walker);
-
-  // check that TestMolecule was correctly constructed
-  CPPUNIT_ASSERT_EQUAL( TestMolecule->getAtomCount(), 5 );
-
-  // create a small file with table
-  filename = new string("test.dat");
-  CPPUNIT_ASSERT(filename != NULL && "could not create string");
-  ofstream test(filename->c_str());
-  test << ".\tH\tHe\tLi\tBe\tB\tC\n";
-  test << "H\t1.\t1.\t1.\t1.\t1.\t1.2\n";
-  test << "He\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "Li\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "Be\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "B\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "C\t1.2\t1.\t1.\t1.\t1.\t1.5\n";
-  test.close();
-  BG = new BondGraph(true);
-  CPPUNIT_ASSERT(BG != NULL && "could not create BondGraph");
-
-  CPPUNIT_ASSERT_EQUAL( true , BG->LoadBondLengthTable(*filename) );
-  CPPUNIT_ASSERT_EQUAL( 1., BG->GetBondLength(0,0) );
-  CPPUNIT_ASSERT_EQUAL( 1.2, BG->GetBondLength(0,5) );
-  CPPUNIT_ASSERT_EQUAL( 1.5, BG->GetBondLength(5,5) );
-
-  BG->ConstructBondGraph(TestMolecule);
-};
-
-
-void AnalysisBondsTest::tearDown()
-{
-  // remove the file
-  remove(filename->c_str());
-  delete(filename);
-  delete(BG);
-
-  // remove molecule
-  World::getInstance().destroyMolecule(TestMolecule);
-  // note that all the atoms are cleaned by TestMolecule
-  World::purgeInstance();
-};
-
-/** UnitTest for GetMaxMinMeanBondCount().
- */
-void AnalysisBondsTest::GetMaxMinMeanBondCountTest()
-{
-  double Min = 20.; // check that initialization resets these arbitrary values
-  double Mean = 200.;
-  double Max = 1e-6;
-  GetMaxMinMeanBondCount(TestMolecule, Min, Mean, Max);
-  CPPUNIT_ASSERT_EQUAL( 1., Min );
-  CPPUNIT_ASSERT_EQUAL( 1.6, Mean );
-  CPPUNIT_ASSERT_EQUAL( 4., Max );
-
-};
-
-/** UnitTest for MinMaxBondDistanceBetweenElements().
- */
-void AnalysisBondsTest::MinMeanMaxBondDistanceBetweenElementsTest()
-{
-  double Min = 20.; // check that initialization resets these arbitrary values
-  double Mean = 2e+6;
-  double Max = 1e-6;
-  double Min2 = 20.;
-  double Mean2 = 2e+6;
-  double Max2 = 1e-6;
-  const double maxbondlength = sqrt(1.*1. + 1.*1. + .5*.5);
-  const double minbondlength = sqrt(.5*.5 + .5*.5 + .5*.5);
-  const double meanbondlength = (minbondlength+3.*maxbondlength)/4.;
-  // check bond lengths C-H
-  MinMeanMaxBondDistanceBetweenElements(TestMolecule, hydrogen, carbon, Min, Mean, Max);
-  CPPUNIT_ASSERT_EQUAL( minbondlength , Min );
-  CPPUNIT_ASSERT_EQUAL( meanbondlength , Mean );
-  CPPUNIT_ASSERT_EQUAL( maxbondlength , Max );
-
-  // check that elements are symmetric, i.e. C-H == H-C
-  MinMeanMaxBondDistanceBetweenElements(TestMolecule, carbon, hydrogen, Min2, Mean2, Max2);
-  CPPUNIT_ASSERT_EQUAL( Min , Min2 );
-  CPPUNIT_ASSERT_EQUAL( Mean , Mean2 );
-  CPPUNIT_ASSERT_EQUAL( Max , Max2 );
-
-  // check no bond case (no bonds H-H in system!)
-  MinMeanMaxBondDistanceBetweenElements(TestMolecule, hydrogen, hydrogen, Min, Mean, Max);
-  CPPUNIT_ASSERT_EQUAL( 0. , Min );
-  CPPUNIT_ASSERT_EQUAL( 0. , Mean );
-  CPPUNIT_ASSERT_EQUAL( 0. , Max );
-};
Index: c/unittests/analysisbondsunittest.hpp
===================================================================
--- src/unittests/analysisbondsunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,43 +1,0 @@
-/*
- * analysisbondsunittest.hpp
- *
- *  Created on: Nov 7, 2009
- *      Author: heber
- */
-
-#ifndef ANALYSISBONDSUNITTEST_HPP_
-#define ANALYSISBONDSUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class BondGraph;
-class element;
-class molecule;
-class periodentafel;
-
-/********************************************** Test classes **************************************/
-
-class AnalysisBondsTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( AnalysisBondsTest) ;
-    CPPUNIT_TEST ( GetMaxMinMeanBondCountTest );
-    CPPUNIT_TEST ( MinMeanMaxBondDistanceBetweenElementsTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void GetMaxMinMeanBondCountTest();
-      void MinMeanMaxBondDistanceBetweenElementsTest();
-
-private:
-
-      molecule *TestMolecule;
-      const element *hydrogen;
-      const element *carbon;
-
-      BondGraph *BG;
-      string *filename;
-};
-
-#endif /* ANALYSISBONDSUNITTEST_HPP_ */
Index: c/unittests/atomsCalculationTest.cpp
===================================================================
--- src/unittests/atomsCalculationTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,108 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * atomsCalculationTest.cpp
- *
- *  Created on: Feb 19, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "atomsCalculationTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <iostream>
-#include <boost/bind.hpp>
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "Descriptors/AtomIdDescriptor.hpp"
-#include "Actions/AtomsCalculation.hpp"
-#include "Actions/AtomsCalculation_impl.hpp"
-#include "Actions/ActionRegistry.hpp"
-#include "Actions/ActionTraits.hpp"
-
-#include "World.hpp"
-#include "World_calculations.hpp"
-#include "atom.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( atomsCalculationTest );
-
-// set up and tear down
-void atomsCalculationTest::setUp(){
-  World::getInstance();
-  for(int i=0;i<ATOM_COUNT;++i){
-    atoms[i]= World::getInstance().createAtom();
-    atomIds[i]= atoms[i]->getId();
-  }
-}
-void atomsCalculationTest::tearDown(){
-  World::purgeInstance();
-  ActionRegistry::purgeInstance();
-}
-
-// some helper functions
-static bool hasAllIds(std::vector<atomId_t> atoms,atomId_t ids[ATOM_COUNT], std::set<atomId_t> excluded = std::set<atomId_t>()){
-  for(int i=0;i<ATOM_COUNT;++i){
-    atomId_t id = ids[i];
-    if(!excluded.count(id)){
-      std::vector<atomId_t>::iterator iter;
-      bool res=false;
-      for(iter=atoms.begin();iter!=atoms.end();++iter){
-        res |= (*iter) == id;
-      }
-      if(!res) {
-        cout << "Atom " << id << " missing in returned list" << endl;
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
-static bool hasNoDuplicates(std::vector<atomId_t> ids){
-  std::set<atomId_t> found;
-  std::vector<atomId_t>::iterator iter;
-  for(iter=ids.begin();iter!=ids.end();++iter){
-    int id = (*iter);
-    if(found.count(id))
-      return false;
-    found.insert(id);
-  }
-  return true;
-}
-
-void atomsCalculationTest::testCalculateSimple(){
-  ActionTraits FooTrait("FOO");
-  AtomsCalculation<atomId_t> *calc = World::getInstance().calcOnAtoms<atomId_t>(boost::bind(&atom::getId,_1),FooTrait,AllAtoms());
-  std::vector<atomId_t> allIds = (*calc)();
-  CPPUNIT_ASSERT(hasAllIds(allIds,atomIds));
-  CPPUNIT_ASSERT(hasNoDuplicates(allIds));
-}
-
-void atomsCalculationTest::testCalculateExcluded(){
-  ActionTraits FooTrait("FOO");
-  atomId_t excluded = atomIds[ATOM_COUNT/2];
-  AtomsCalculation<atomId_t> *calc = World::getInstance().calcOnAtoms<atomId_t>(boost::bind(&atom::getId,_1),FooTrait,AllAtoms() && !AtomById(excluded));
-  std::vector<atomId_t> allIds = (*calc)();
-  std::set<atomId_t> excluded_set;
-  excluded_set.insert(excluded);
-  CPPUNIT_ASSERT(hasAllIds(allIds,atomIds,excluded_set));
-  CPPUNIT_ASSERT(hasNoDuplicates(allIds));
-  CPPUNIT_ASSERT_EQUAL((size_t)(ATOM_COUNT-1),allIds.size());
-}
Index: c/unittests/atomsCalculationTest.hpp
===================================================================
--- src/unittests/atomsCalculationTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*
- * atomsCalculationTest.hpp
- *
- *  Created on: Feb 19, 2010
- *      Author: crueger
- */
-
-#ifndef ATOMSCALCULATIONTEST_HPP_
-#define ATOMSCALCULATIONTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-// we prefer enum over define
-enum { ATOM_COUNT = 10 };
-
-#include "types.hpp"
-
-class atom;
-
-class atomsCalculationTest :  public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( atomsCalculationTest );
-  CPPUNIT_TEST ( testCalculateSimple );
-  CPPUNIT_TEST ( testCalculateExcluded );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void testCalculateSimple();
-  void testCalculateExcluded();
-
-private:
-  atom *atoms [ATOM_COUNT];
-  atomId_t atomIds [ATOM_COUNT];
-};
-
-#endif /* ATOMSCALCULATIONTEST_HPP_ */
Index: c/unittests/bondgraphunittest.cpp
===================================================================
--- src/unittests/bondgraphunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,172 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * bondgraphunittest.cpp
- *
- *  Created on: Oct 29, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <iostream>
-#include <stdio.h>
-#include <cstring>
-
-#include "Helpers/Assert.hpp"
-
-#include "World.hpp"
-#include "atom.hpp"
-#include "bond.hpp"
-#include "bondgraph.hpp"
-#include "element.hpp"
-#include "Helpers/Log.hpp"
-#include "molecule.hpp"
-#include "periodentafel.hpp"
-#include "bondgraphunittest.hpp"
-#include "World.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( BondGraphTest );
-
-
-void BondGraphTest::setUp()
-{
-  atom *Walker = NULL;
-
-  // construct element
-  hydrogen = World::getInstance().getPeriode()->FindElement(1);
-  carbon = World::getInstance().getPeriode()->FindElement(6);
-  CPPUNIT_ASSERT(hydrogen != NULL && "could not find element hydrogen");
-  CPPUNIT_ASSERT(carbon != NULL && "could not find element carbon");
-
-  // construct molecule (tetraeder of hydrogens)
-  TestMolecule = World::getInstance().createMolecule();
-  CPPUNIT_ASSERT(TestMolecule != NULL && "could not create molecule");
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(carbon);
-  Walker->setPosition(Vector(1., 0., 1. ));
-  TestMolecule->AddAtom(Walker);
-
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(carbon);
-  Walker->setPosition(Vector(0., 1., 1. ));
-  TestMolecule->AddAtom(Walker);
-
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(carbon);
-  Walker->setPosition(Vector(1., 1., 0. ));
-  TestMolecule->AddAtom(Walker);
-
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(carbon);
-  Walker->setPosition(Vector(0., 0., 0. ));
-  TestMolecule->AddAtom(Walker);
-
-  // check that TestMolecule was correctly constructed
-  CPPUNIT_ASSERT_EQUAL( TestMolecule->getAtomCount(), 4 );
-
-  // create a small file with table
-  dummyname = new string("dummy.dat");
-  CPPUNIT_ASSERT(dummyname != NULL && "could not create string");
-  filename = new string("test.dat");
-  CPPUNIT_ASSERT(filename != NULL && "could not create string");
-  ofstream test(filename->c_str());
-  test << ".\tH\tHe\tLi\tBe\tB\tC\n";
-  test << "H\t1.\t1.\t1.\t1.\t1.\t1.2\n";
-  test << "He\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "Li\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "Be\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "B\t1.\t1.\t1.\t1.\t1.\t1.\n";
-  test << "C\t1.2\t1.\t1.\t1.\t1.\t1.5\n";
-  test.close();
-  BG = new BondGraph(true);
-  CPPUNIT_ASSERT(BG != NULL && "could not create BondGraph");
-};
-
-
-void BondGraphTest::tearDown()
-{
-  // remove the file
-  remove(filename->c_str());
-  delete(filename);
-  delete(dummyname);
-  delete(BG);
-
-  // remove molecule
-  World::getInstance().destroyMolecule(TestMolecule);
-  // note that all the atoms, molecules, the tafel and the elements
-  // are all cleaned when the world is destroyed
-  World::purgeInstance();
-  logger::purgeInstance();
-};
-
-/** Tests whether setup worked.
- */
-void BondGraphTest::SetupTest()
-{
-  CPPUNIT_ASSERT_EQUAL (false, TestMolecule->empty());
-  CPPUNIT_ASSERT_EQUAL ((size_t)4, TestMolecule->size());
-};
-
-/** UnitTest for BondGraphTest::LoadBondLengthTable().
- */
-void BondGraphTest::LoadTableTest()
-{
-  CPPUNIT_ASSERT_EQUAL( true , BG->LoadBondLengthTable(*filename) );
-  CPPUNIT_ASSERT_EQUAL( 1., BG->GetBondLength(0,0) );
-  CPPUNIT_ASSERT_EQUAL( 1.2, BG->GetBondLength(0,5) );
-  CPPUNIT_ASSERT_EQUAL( 1.5, BG->GetBondLength(5,5) );
-};
-
-/** UnitTest for BondGraphTest::ConstructBondGraph().
- */
-void BondGraphTest::ConstructGraphFromTableTest()
-{
-  molecule::iterator Walker = TestMolecule->begin();
-  molecule::iterator Runner = TestMolecule->begin();
-  Runner++;
-  CPPUNIT_ASSERT_EQUAL( true , BG->LoadBondLengthTable(*filename) );
-  CPPUNIT_ASSERT_EQUAL( true , BG->ConstructBondGraph(TestMolecule) );
-  CPPUNIT_ASSERT_EQUAL( true , (*Walker)->IsBondedTo((*Runner)) );
-};
-
-/** UnitTest for BondGraphTest::ConstructBondGraph().
- */
-void BondGraphTest::ConstructGraphFromCovalentRadiiTest()
-{
-
-  //atom *Walker = TestMolecule->start->next;
-  //atom *Runner = TestMolecule->end->previous;
-  //CPPUNIT_ASSERT( TestMolecule->end != Walker );
-  CPPUNIT_ASSERT_EQUAL( false , BG->LoadBondLengthTable(*dummyname) );
-  CPPUNIT_ASSERT_EQUAL( true , BG->ConstructBondGraph(TestMolecule) );
-
-  // this cannot be assured using dynamic IDs
-  //CPPUNIT_ASSERT_EQUAL( true , Walker->IsBondedTo(Runner) );
-};
-
Index: c/unittests/bondgraphunittest.hpp
===================================================================
--- src/unittests/bondgraphunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- * bondgraphunittest.hpp
- *
- *  Created on: Oct 29, 2009
- *      Author: heber
- */
-
-#ifndef BONDGRAPHUNITTEST_HPP_
-#define BONDGRAPHUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-
-class BondGraph;
-class element;
-class molecule;
-class periodentafel;
-
-/********************************************** Test classes **************************************/
-
-class BondGraphTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( BondGraphTest) ;
-    CPPUNIT_TEST ( SetupTest );
-    CPPUNIT_TEST ( LoadTableTest );
-    CPPUNIT_TEST ( ConstructGraphFromTableTest );
-    CPPUNIT_TEST ( ConstructGraphFromCovalentRadiiTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void SetupTest();
-      void LoadTableTest();
-      void ConstructGraphFromTableTest();
-      void ConstructGraphFromCovalentRadiiTest();
-
-private:
-
-      molecule *TestMolecule;
-      const element *hydrogen;
-      const element *carbon;
-
-      BondGraph *BG;
-      string *filename;
-      string *dummyname;
-};
-
-#endif /* BONDGRAPHUNITTEST_HPP_ */
Index: c/unittests/infounittest.cpp
===================================================================
--- src/unittests/infounittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * InfoUnitTest.cpp
- *
- *  Created on: Nov 25, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <iostream>
-#include <stdio.h>
-
-#include "Helpers/Info.hpp"
-#include "infounittest.hpp"
-#include "Helpers/Log.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( InfoTest );
-
-
-void InfoTest::setUp()
-{
-};
-
-
-void InfoTest::tearDown()
-{
-  logger::purgeInstance();
-};
-
-/** UnitTest for FunctionTest().
- */
-void InfoTest::FunctionTest()
-{
-  const char *msg = __func__;
-  class Info test(msg);
-
-  CPPUNIT_ASSERT_EQUAL( msg , test.FunctionName );
-  CPPUNIT_ASSERT_EQUAL( 1, test.verbosity );
-};
Index: c/unittests/infounittest.hpp
===================================================================
--- src/unittests/infounittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * InfoUnitTest.hpp
- *
- *  Created on: Nov 25, 2009
- *      Author: heber
- */
-
-#ifndef INFOUNITTEST_HPP_
-#define INFOUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class info;
-
-/********************************************** Test classes **************************************/
-
-class InfoTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( InfoTest) ;
-    CPPUNIT_TEST ( FunctionTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void FunctionTest();
-
-private:
-
-};
-
-#endif /* INFOUNITTEST_HPP_ */
Index: c/unittests/linearsystemofequationsunittest.cpp
===================================================================
--- src/unittests/linearsystemofequationsunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,121 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * linearsystemofequationsunittest.cpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <iomanip>
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <cmath>
-
-#include "linearsystemofequationsunittest.hpp"
-#include "LinearAlgebra/Vector.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( LinearSystemOfEquationsTest );
-
-
-void LinearSystemOfEquationsTest::setUp()
-{
-  s = new LinearSystemOfEquations(4,4);
-};
-
-void LinearSystemOfEquationsTest::tearDown()
-{
-  delete(s);
-};
-
-/** Unit test for initialization.
- *
- */
-void LinearSystemOfEquationsTest::InitializationTest()
-{
-  // Setting A
-  double array[] = { 1., 0., 0., 0.,
-                     0., 2., 0., 0.,
-                     0., 0., 3., 0.,
-                     0., 0., 0., 4. };
-  s->SetA(array);
-
-  // Setting b
-};
-
-/** Unit test for symmetry property.
- *
- */
-void LinearSystemOfEquationsTest::SymmetricTest()
-{
-  CPPUNIT_ASSERT_EQUAL( true, s->SetSymmetric(true) );
-  //LinearSystemOfEquations *t = new LinearSystemOfEquations(4,3);
-  //CPPUNIT_ASSERT_EQUAL( true, t->SetSymmetric(true) );
-  //delete(t);
-};
-
-/** Unit test for simple Solve.
- *
- */
-void LinearSystemOfEquationsTest::SolveSimpleTest()
-{
-  // set up A and b
-  double m_array[] = { 1., 0., 0., 0.,
-                       0., 2., 0., 0.,
-                       0., 0., 3., 0.,
-                       0., 0., 0., 4. };
-  double v_array[] = { 1., 2., 3., 4. };
-  s->SetA(m_array);
-  s->Setb(v_array);
-
-  // solve
-  double *array = new double[4];
-  s->GetSolutionAsArray(array);
-  for (int i=0;i<4;i++)
-    CPPUNIT_ASSERT_EQUAL( 1., array[i]);
-  delete[](array);
-};
-
-/** Unit test for advanced Solve.
- *
- */
-void LinearSystemOfEquationsTest::SolveAdvancedTest()
-{
-  // set up A and b
-  double m_array[] = { 0.18, 0.60, 0.57, 0.96,
-                       0.41, 0.24, 0.99, 0.58,
-                       0.14, 0.30, 0.97, 0.66,
-                       0.51, 0.13, 0.19, 0.85 };
-  double v_array[] = { 1.0, 2.0, 3.0, 4.0 };
-  double x_array[] = { -4.05205022957398, -12.60561139590692, 1.660911626708844, 8.693766928795233 };
-  s->SetA(m_array);
-  s->Setb(v_array);
-
-  // solve
-  double *array = new double[4];
-  s->GetSolutionAsArray(array);
-  for (int i=0;i<4;i++) {
-    CPPUNIT_ASSERT( fabs(x_array[i] - array[i]) < MYEPSILON );
-  }
-  delete[](array);
-};
Index: c/unittests/linearsystemofequationsunittest.hpp
===================================================================
--- src/unittests/linearsystemofequationsunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,40 +1,0 @@
-/*
- * linearsystemofequationsunittest.hpp
- *
- *  Created on: Jan 8, 2010
- *      Author: heber
- */
-
-#ifndef LINEARSYSTEMOFEQUATIONSUNITTEST_HPP_
-#define LINEARSYSTEMOFEQUATIONSUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "LinearAlgebra/linearsystemofequations.hpp"
-
-/********************************************** Test classes **************************************/
-
-class LinearSystemOfEquationsTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( LinearSystemOfEquationsTest) ;
-    CPPUNIT_TEST ( InitializationTest );
-    CPPUNIT_TEST ( SymmetricTest );
-    CPPUNIT_TEST ( SolveSimpleTest );
-    CPPUNIT_TEST ( SolveAdvancedTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void InitializationTest();
-    void SymmetricTest();
-    void SolveSimpleTest();
-    void SolveAdvancedTest();
-
-private:
-    LinearSystemOfEquations *s;
-};
-
-
-#endif /* LINEARSYSTEMOFEQUATIONSUNITTEST_HPP_ */
Index: c/unittests/listofbondsunittest.cpp
===================================================================
--- src/unittests/listofbondsunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,292 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * listofbondsunittest.cpp
- *
- *  Created on: 18 Oct 2009
- *      Author: user
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cstring>
-
-#include "listofbondsunittest.hpp"
-
-#include "World.hpp"
-#include "atom.hpp"
-#include "bond.hpp"
-#include "element.hpp"
-#include "molecule.hpp"
-#include "periodentafel.hpp"
-#include "World.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ListOfBondsTest );
-
-
-void ListOfBondsTest::setUp()
-{
-  atom *Walker = NULL;
-
-  // construct element
-  hydrogen = World::getInstance().getPeriode()->FindElement(1);
-  CPPUNIT_ASSERT(hydrogen != NULL && "could not find element hydrogen");
-
-  // construct molecule (tetraeder of hydrogens)
-  TestMolecule = World::getInstance().createMolecule();
-  CPPUNIT_ASSERT(TestMolecule != NULL && "could not create molecule");
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(1., 0., 1. ));
-  TestMolecule->AddAtom(Walker);
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(0., 1., 1. ));
-  TestMolecule->AddAtom(Walker);
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(1., 1., 0. ));
-  TestMolecule->AddAtom(Walker);
-  Walker = World::getInstance().createAtom();
-  CPPUNIT_ASSERT(Walker != NULL && "could not create atom");
-  Walker->setType(hydrogen);
-  Walker->setPosition(Vector(0., 0., 0. ));
-  TestMolecule->AddAtom(Walker);
-
-  // check that TestMolecule was correctly constructed
-  CPPUNIT_ASSERT_EQUAL( TestMolecule->getAtomCount(), 4 );
-};
-
-
-void ListOfBondsTest::tearDown()
-{
-  // remove
-  World::getInstance().destroyMolecule(TestMolecule);
-  // note that all the atoms, molecules, the tafel and the elements
-  // are all cleaned when the world is destroyed
-  World::purgeInstance();
-  logger::purgeInstance();
-};
-
-/** Tests whether setup worked correctly.
- *
- */
-void ListOfBondsTest::SetupTest()
-{
-  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->empty() );
-  CPPUNIT_ASSERT_EQUAL( (size_t)4, TestMolecule->size() );
-};
-
-/** Unit Test of molecule::AddBond()
- *
- */
-void ListOfBondsTest::AddingBondTest()
-{
-  bond *Binder = NULL;
-  molecule::iterator iter = TestMolecule->begin();
-  atom *atom1 = *iter;
-  iter++;
-  atom *atom2 = *iter;
-  CPPUNIT_ASSERT( atom1 != NULL );
-  CPPUNIT_ASSERT( atom2 != NULL );
-
-  // add bond
-  Binder = TestMolecule->AddBond(atom1, atom2, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-  CPPUNIT_ASSERT_EQUAL ( true, TestMolecule->hasBondStructure() );
-
-  // check that bond contains the two atoms
-  CPPUNIT_ASSERT_EQUAL( true, Binder->Contains(atom1) );
-  CPPUNIT_ASSERT_EQUAL( true, Binder->Contains(atom2) );
-
-  // check that bond is present in both atoms
-  bond *TestBond1 = *(atom1->ListOfBonds.begin());
-  CPPUNIT_ASSERT_EQUAL( TestBond1, Binder );
-  bond *TestBond2 = *(atom2->ListOfBonds.begin());
-  CPPUNIT_ASSERT_EQUAL( TestBond2, Binder );
-};
-
-/** Unit Test of molecule::RemoveBond()
- *
- */
-void ListOfBondsTest::RemovingBondTest()
-{
-  bond *Binder = NULL;
-  molecule::iterator iter = TestMolecule->begin();
-  atom *atom1 = *iter;
-  iter++;
-  atom *atom2 = *iter;
-  CPPUNIT_ASSERT( atom1 != NULL );
-  CPPUNIT_ASSERT( atom2 != NULL );
-
-  // add bond
-  Binder = TestMolecule->AddBond(atom1, atom2, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-
-  // remove bond
-  TestMolecule->RemoveBond(Binder);
-
-  // check if removed from atoms
-  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
-  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom2->ListOfBonds.size() );
-
-  // check if removed from molecule
-  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
-};
-
-/** Unit Test of molecule::RemoveBonds()
- *
- */
-void ListOfBondsTest::RemovingBondsTest()
-{
-  bond *Binder = NULL;
-  molecule::iterator iter = TestMolecule->begin();
-  atom *atom1 = *iter;
-  iter++;
-  atom *atom2 = *iter;
-  iter++;
-  atom *atom3 = *iter;
-  CPPUNIT_ASSERT( atom1 != NULL );
-  CPPUNIT_ASSERT( atom2 != NULL );
-  CPPUNIT_ASSERT( atom3 != NULL );
-
-  // add bond
-  Binder = TestMolecule->AddBond(atom1, atom2, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-  Binder = TestMolecule->AddBond(atom1, atom3, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-  Binder = TestMolecule->AddBond(atom2, atom3, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-
-  // check that all are present
-  CPPUNIT_ASSERT_EQUAL( (size_t) 2, atom1->ListOfBonds.size() );
-  CPPUNIT_ASSERT_EQUAL( (size_t) 2, atom2->ListOfBonds.size() );
-  CPPUNIT_ASSERT_EQUAL( (size_t) 2, atom3->ListOfBonds.size() );
-
-  // remove bond
-  TestMolecule->RemoveBonds(atom1);
-
-  // check if removed from atoms
-  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
-  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom2->ListOfBonds.size() );
-  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom3->ListOfBonds.size() );
-
-  // check if removed from molecule
-  CPPUNIT_ASSERT_EQUAL( true, TestMolecule->hasBondStructure() );
-  CPPUNIT_ASSERT_EQUAL( (unsigned int)1, TestMolecule->CountBonds() );
-};
-
-/** Unit Test of delete(bond *)
- *
- */
-void ListOfBondsTest::DeleteBondTest()
-{
-  bond *Binder = NULL;
-  molecule::iterator iter = TestMolecule->begin();
-  atom *atom1 = *iter;
-  iter++;
-  atom *atom2 = *iter;
-  CPPUNIT_ASSERT( atom1 != NULL );
-  CPPUNIT_ASSERT( atom2 != NULL );
-
-  // add bond
-  Binder = TestMolecule->AddBond(atom1, atom2, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-
-  // remove bond
-  delete(Binder);
-
-  // check if removed from atoms
-  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
-  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom2->ListOfBonds.size() );
-
-  // check if removed from molecule
-  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
-};
-
-/** Unit Test of molecule::RemoveAtom()
- *
- */
-void ListOfBondsTest::RemoveAtomTest()
-{
-  bond *Binder = NULL;
-  molecule::iterator iter = TestMolecule->begin();
-  atom *atom1 = *iter;
-  iter++;
-  atom *atom2 = *iter;
-  CPPUNIT_ASSERT( atom1 != NULL );
-  CPPUNIT_ASSERT( atom2 != NULL );
-
-  // add bond
-  Binder = TestMolecule->AddBond(atom1, atom2, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-
-  // remove atom2
-  TestMolecule->RemoveAtom(atom2);
-
-  // check bond if removed from other atom
-  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
-
-  // check if removed from molecule
-  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
-};
-
-/** Unit Test of delete(atom *)
- *
- */
-void ListOfBondsTest::DeleteAtomTest()
-{
-  atom *atom1 = NULL;
-  atom *atom2 = NULL;
-  bond *Binder = NULL;
-  {
-    molecule::iterator iter = TestMolecule->begin();
-    atom1 = *iter;
-    iter++;
-    atom2 = *iter;
-  }
-  CPPUNIT_ASSERT( atom1 != NULL );
-  CPPUNIT_ASSERT( atom2 != NULL );
-
-  // add bond
-  Binder = TestMolecule->AddBond(atom1, atom2, 1);
-  CPPUNIT_ASSERT( Binder != NULL );
-
-  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom1->ListOfBonds.size() );
-  CPPUNIT_ASSERT_EQUAL( (size_t) 1, atom2->ListOfBonds.size() );
-
-  CPPUNIT_ASSERT_EQUAL( true, TestMolecule->hasBondStructure() );
-
-  // remove atom2
-  World::getInstance().destroyAtom(atom2);
-
-  // check bond if removed from other atom
-  CPPUNIT_ASSERT_EQUAL( (size_t) 0, atom1->ListOfBonds.size() );
-
-  // check if removed from molecule
-  CPPUNIT_ASSERT_EQUAL( false, TestMolecule->hasBondStructure() );
-};
Index: c/unittests/listofbondsunittest.hpp
===================================================================
--- src/unittests/listofbondsunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- * listofbondsunittest.hpp
- *
- *  Created on: 18 Oct 2009
- *      Author: user
- */
-
-#ifndef LISTOFBONDSUNITTEST_HPP_
-#define LISTOFBONDSUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class element;
-class molecule;
-class periodentafel;
-
-/********************************************** Test classes **************************************/
-
-class ListOfBondsTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( ListOfBondsTest) ;
-    CPPUNIT_TEST ( SetupTest );
-    CPPUNIT_TEST ( AddingBondTest );
-    CPPUNIT_TEST ( RemovingBondTest );
-    CPPUNIT_TEST ( RemovingBondsTest );
-    CPPUNIT_TEST ( RemoveAtomTest );
-    CPPUNIT_TEST ( DeleteBondTest );
-    CPPUNIT_TEST ( DeleteAtomTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void SetupTest();
-      void AddingBondTest();
-      void RemovingBondTest();
-      void RemovingBondsTest();
-      void RemoveAtomTest();
-      void DeleteBondTest();
-      void DeleteAtomTest();
-
-private:
-
-      molecule *TestMolecule;
-      const element *hydrogen;
-};
-
-
-#endif /* LISTOFBONDSUNITTEST_HPP_ */
Index: c/unittests/logunittest.cpp
===================================================================
--- src/unittests/logunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * logunittest.cpp
- */
-
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "logunittest.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/defs.hpp"
-#include "Helpers/Verbose.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( LogTest );
-
-
-void LogTest::setUp()
-{
-};
-
-void LogTest::tearDown()
-{
-  logger::purgeInstance();
-  errorLogger::purgeInstance();
-};
-
-/**
- * UnitTest for log()
- */
-void LogTest::logTest()
-{
-  logger::getInstance().setVerbosity(2);
-  DoLog(0) && (Log() << Verbose(0) << "Verbosity level is set to 2." << endl);
-  DoLog(0) && (Log() << Verbose(0) << "Test level 0" << endl);
-  DoLog(1) && (Log() << Verbose(1) << "Test level 1" << endl);
-  DoLog(2) && (Log() << Verbose(2) << "Test level 2" << endl);
-  DoLog(3) && (Log() << Verbose(3) << "Test level 3" << endl);
-  DoLog(4) && (Log() << Verbose(4) << "Test level 4" << endl);
-
-  DoLog(0) && (Log() << Verbose(0) << "Output a log message." << endl);
-  DoeLog(0) && (eLog()<< Verbose(0) << "Output an error message." << endl);
-  setVerbosity(3);
-  DoLog(4) && (Log() << Verbose(4) << "This should not be printed." << endl);
-  DoeLog(4) && (eLog()<< Verbose(4) << "This should not be printed." << endl);
-};
Index: c/unittests/logunittest.hpp
===================================================================
--- src/unittests/logunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,26 +1,0 @@
-/*
- * logunittest.hpp
- */
-
-#ifndef LOGTEST_HPP_
-#define LOGTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-
-/********************************************** Test classes **************************************/
-
-class LogTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( LogTest) ;
-    CPPUNIT_TEST ( logTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void logTest();
-};
-
-#endif /* LOGTEST_HPP_ */
Index: c/unittests/manipulateAtomsTest.cpp
===================================================================
--- src/unittests/manipulateAtomsTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,158 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * manipulateAtomsTest.cpp
- *
- *  Created on: Feb 18, 2010
- *      Author: crueger
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "manipulateAtomsTest.hpp"
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-#include <iostream>
-#include <boost/bind.hpp>
-
-#include "Descriptors/AtomDescriptor.hpp"
-#include "Descriptors/AtomIdDescriptor.hpp"
-#include "Actions/ManipulateAtomsProcess.hpp"
-#include "Actions/ActionRegistry.hpp"
-#include "Actions/ActionHistory.hpp"
-
-#include "World.hpp"
-#include "atom.hpp"
-
-#include "DummyUI.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( manipulateAtomsTest );
-
-// some stubs
-class AtomStub : public atom {
-public:
-  AtomStub(int _id) :
-  atom(),
-  manipulated(false),
-  id(_id)
-  {}
-
-  virtual atomId_t getId(){
-    return id;
-  }
-
-  virtual void doSomething(){
-    manipulated = true;
-  }
-
-  bool manipulated;
-private:
-  atomId_t id;
-};
-
-class countObserver : public Observer{
-public:
-  countObserver() :
-    Observer("countObserver"),
-    count(0)
-    {}
-  virtual ~countObserver(){}
-
-  void update(Observable *){
-    count++;
-  }
-
-  void subjectKilled(Observable *)
-  {}
-
-  int count;
-};
-
-// set up and tear down
-void manipulateAtomsTest::setUp(){
-  hasDescriptor = false;
-  ActionHistory::init();
-  World::getInstance();
-  // TODO: find a way to really reset the factory to a clean state in tear-down
-  if(!hasDescriptor){
-    UIFactory::registerFactory(new DummyUIFactory::description());
-    hasDescriptor = true;
-  }
-  UIFactory::makeUserInterface("Dummy");
-  for(int i=0;i<ATOM_COUNT;++i){
-    atoms[i]= new AtomStub(i);
-    World::getInstance().registerAtom(atoms[i]);
-  }
-}
-void manipulateAtomsTest::tearDown(){
-  World::purgeInstance();
-  ActionRegistry::purgeInstance();
-  ActionHistory::purgeInstance();
-  {
-    UIFactory::purgeInstance();
-    hasDescriptor = false;
-  }
-}
-
-static void operation(atom* _atom){
-  AtomStub *atom = dynamic_cast<AtomStub*>(_atom);
-  CPPUNIT_ASSERT(atom);
-  atom->doSomething();
-}
-
-
-void manipulateAtomsTest::testManipulateSimple(){
-  ManipulateAtomsProcess *proc = World::getInstance().manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms());
-  proc->call();
-  std::vector<atom*> allAtoms = World::getInstance().getAllAtoms(AllAtoms());
-  std::vector<atom*>::iterator iter;
-  for(iter=allAtoms.begin();iter!=allAtoms.end();++iter){
-    AtomStub *atom;
-    atom = dynamic_cast<AtomStub*>(*iter);
-    CPPUNIT_ASSERT(atom);
-    CPPUNIT_ASSERT(atom->manipulated);
-  }
-}
-
-void manipulateAtomsTest::testManipulateExcluded(){
-
-  ManipulateAtomsProcess *proc = World::getInstance().manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms() && !AtomById(ATOM_COUNT/2));
-  proc->call();
-  std::vector<atom*> allAtoms = World::getInstance().getAllAtoms(AllAtoms());
-  std::vector<atom*>::iterator iter;
-  for(iter=allAtoms.begin();iter!=allAtoms.end();++iter){
-    AtomStub *atom;
-    atom = dynamic_cast<AtomStub*>(*iter);
-    CPPUNIT_ASSERT(atom);
-    if(atom->getId()!=(int)ATOM_COUNT/2)
-      CPPUNIT_ASSERT(atom->manipulated);
-    else
-      CPPUNIT_ASSERT(!atom->manipulated);
-  }
-}
-
-void manipulateAtomsTest::testObserver(){
-  countObserver *obs = new countObserver();
-  World::getInstance().signOn(obs);
-  ManipulateAtomsProcess *proc = World::getInstance().manipulateAtoms(boost::bind(operation,_1),"FOO",AllAtoms());
-  proc->call();
-
-  CPPUNIT_ASSERT_EQUAL(1,obs->count);
-  World::getInstance().signOff(obs);
-  delete obs;
-}
Index: c/unittests/manipulateAtomsTest.hpp
===================================================================
--- src/unittests/manipulateAtomsTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*
- * manipulateAtomsTest.hpp
- *
- *  Created on: Feb 18, 2010
- *      Author: crueger
- */
-
-#ifndef MANIPULATEATOMSTEST_HPP_
-#define MANIPULATEATOMSTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-// we prefer enum over define
-enum { ATOM_COUNT = 10 };
-
-class atom;
-
-class manipulateAtomsTest : public CppUnit::TestFixture
-{
-  CPPUNIT_TEST_SUITE( manipulateAtomsTest );
-  CPPUNIT_TEST ( testManipulateSimple );
-  CPPUNIT_TEST ( testManipulateExcluded );
-  CPPUNIT_TEST ( testObserver );
-  CPPUNIT_TEST_SUITE_END();
-
-public:
-  void setUp();
-  void tearDown();
-
-  void testManipulateSimple();
-  void testManipulateExcluded();
-  void testObserver();
-
-private:
-  atom *atoms [ATOM_COUNT];
-  bool hasDescriptor;
-};
-
-#endif /* MANIPULATEATOMSTEST_HPP_ */
Index: c/unittests/memoryallocatorunittest.cpp
===================================================================
--- src/unittests/memoryallocatorunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,123 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * memoryallocatorunittest.cpp
- *
- */
-
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "memoryallocator.hpp"
-#include "memoryallocatorunittest.hpp"
-#include "memoryusageobserver.hpp"
-#include "Helpers/helpers.hpp"
-#include "Helpers/Log.hpp"
-#include "Helpers/defs.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MemoryAllocatorTest );
-
-
-void MemoryAllocatorTest::setUp()
-{
-};
-
-
-void MemoryAllocatorTest::tearDown()
-{
-  MemoryUsageObserver::getInstance()->purgeInstance();
-  logger::purgeInstance();
-};
-
-/**
- * UnitTest for Malloc()
- */
-void MemoryAllocatorTest::MallocTest()
-{
-  int* buffer1 = NULL;
-  buffer1 = Malloc<int>(1, "");
-  Free(&buffer1);
-
-  long* buffer2 = NULL;
-  buffer2 = Malloc<long>(1, "");
-  Free(&buffer2);
-
-  char* buffer3 = NULL;
-  buffer3 = Malloc<char>(4, "");
-  DoLog(0) && (Log() << Verbose(0) << buffer3 << endl);
-  Free(&buffer3);
-
-  char** buffer4 = NULL;
-  buffer4 = Malloc<char*>(10, "");
-  for (int i=0;i<10;i++)
-    buffer4[i] = NULL;
-  Free(&buffer4);
-};
-
-/**
- * UnitTest for Calloc()
- */
-void MemoryAllocatorTest::CallocTest()
-{
-  int* buffer1 = NULL;
-  buffer1 = Calloc<int>(10, "");
-  Free(&buffer1);
-
-  long* buffer2 = NULL;
-  buffer2 = Calloc<long>(10, "");
-  Free(&buffer2);
-
-  char** buffer3 = NULL;
-  buffer3 = Calloc<char *>(10, "");
-  for (int i=0;i<10;i++)
-    buffer3[i] = NULL;
-  Free(&buffer3);
-};
-
-/**
- * UnitTest for ReAlloc()
- */
-void MemoryAllocatorTest::ReAllocTest()
-{
-  int* buffer1 = NULL;
-  buffer1 = Malloc<int>(1, "");
-  buffer1 = ReAlloc<int>(buffer1, 2, "");
-  Free(&buffer1);
-
-  int* buffer2 = NULL;
-  buffer2 = ReAlloc<int>(buffer2, 2, "");
-  Free(&buffer2);
-};
-
-/**
- * UnitTest for Free()
- */
-void MemoryAllocatorTest::FreeTest()
-{
-  char** buffer1 = NULL;
-  Free(buffer1);
-
-  int** buffer2 = NULL;
-  Free(buffer2);
-};
Index: c/unittests/memoryallocatorunittest.hpp
===================================================================
--- src/unittests/memoryallocatorunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,32 +1,0 @@
-/*
- * memoryallocatorunittest.hpp
- */
-
-#ifndef MEMORYALLOCATORTEST_HPP_
-#define MEMORYALLOCATORTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-
-/********************************************** Test classes **************************************/
-
-class MemoryAllocatorTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MemoryAllocatorTest) ;
-    CPPUNIT_TEST ( MallocTest );
-    CPPUNIT_TEST ( CallocTest );
-    CPPUNIT_TEST ( ReAllocTest );
-    CPPUNIT_TEST ( FreeTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void MallocTest();
-    void CallocTest();
-    void ReAllocTest();
-    void FreeTest();
-};
-
-#endif /* MEMORYALLOCATORTEST_HPP_ */
Index: c/unittests/memoryusageobserverunittest.cpp
===================================================================
--- src/unittests/memoryusageobserverunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,163 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * memoryusageobserverunittest.cpp
- */
-
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "memoryallocator.hpp"
-#include "memoryusageobserver.hpp"
-#include "memoryusageobserverunittest.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( MemoryUsageObserverTest );
-
-
-void MemoryUsageObserverTest::setUp()
-{
-};
-
-
-void MemoryUsageObserverTest::tearDown()
-{
-  MemoryUsageObserver::purgeInstance();
-  logger::purgeInstance();
-  errorLogger::purgeInstance();
-};
-
-/**
- * UnitTest for getInstance()
- */
-void MemoryUsageObserverTest::getInstanceReturnsMemoryUsageObserverTest()
-{
-  CPPUNIT_ASSERT_EQUAL(true, MemoryUsageObserver::getInstance() != NULL);
-};
-
-/**
- * UnitTest for getInstance()
- */
-void MemoryUsageObserverTest::getInstanceTwiceReturnsSameInstanceTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::getInstanceTwiceReturnsSameInstanceTest - i");
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  CPPUNIT_ASSERT_EQUAL(sizeof(int), MemoryUsageObserver::getInstance()->getUsedMemorySize());
-  CPPUNIT_ASSERT_EQUAL(sizeof(int), MemoryUsageObserver::getInstance()->getUsedMemorySize());
-};
-
-/**
- * UnitTest for getInstance()
- */
-void MemoryUsageObserverTest::getInstanceAfterPurgeInstanceReturnsNewInstanceTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::getInstanceAfterPurgeInstanceReturnsNewInstanceTest - i");
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  CPPUNIT_ASSERT_EQUAL(sizeof(int), MemoryUsageObserver::getInstance()->getUsedMemorySize());
-  MemoryUsageObserver::purgeInstance();
-  CPPUNIT_ASSERT_EQUAL((size_t) 0, MemoryUsageObserver::getInstance()->getUsedMemorySize());
-};
-
-/**
- * UnitTest for addMemory() and removeMemory()
- */
-void MemoryUsageObserverTest::addAndRemoveMemoryTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::addAndRemoveMemoryTest - i");
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  CPPUNIT_ASSERT_EQUAL(sizeof(int), MemoryUsageObserver::getInstance()->getUsedMemorySize());
-  MemoryUsageObserver::getInstance()->removeMemory(i);
-  CPPUNIT_ASSERT_EQUAL((size_t) 0, MemoryUsageObserver::getInstance()->getUsedMemorySize());
-  Free(i);
-};
-
-/**
- * UnitTest for addMemory() and removeMemory()
- */
-void MemoryUsageObserverTest::removeNonTrackedMemoryDoesNotCauseACrashTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::removeNonTrackedMemoryDoesNotCauseACrashTest - i");
-  MemoryUsageObserver::getInstance()->removeMemory(i);
-  CPPUNIT_ASSERT_EQUAL((size_t) 0, MemoryUsageObserver::getInstance()->getUsedMemorySize());
-  Free(i);
-};
-
-/**
- * UnitTest for addMemory() and removeMemory()
- */
-void MemoryUsageObserverTest::addMemoryTwiceTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::addMemoryTwiceTest - i");
-  int* j = Malloc<int>(1, "MemoryUsageObserverTest::addMemoryTwiceTest - j");
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  MemoryUsageObserver::getInstance()->addMemory(j, sizeof(int));
-  CPPUNIT_ASSERT_EQUAL(2 * sizeof(int), MemoryUsageObserver::getInstance()->getUsedMemorySize());
-  Free(i);
-  Free(j);
-};
-
-/**
- * UnitTest for addMemory() and removeMemory()
- */
-void MemoryUsageObserverTest::addMemoryAndChangeSizeOfAddedMemoryTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::addMemoryAndChangeSizeOfAddedMemoryTest - i");
-  MemoryUsageObserver::getInstance()->addMemory(i, 2 * sizeof(int));
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  CPPUNIT_ASSERT_EQUAL(sizeof(int), MemoryUsageObserver::getInstance()->getUsedMemorySize());
-  Free(i);
-};
-
-/**
- * UnitTest for getMaximumUsedMemory()
- */
-void MemoryUsageObserverTest::addMemoryChangeSizeOfAddedMemoryAndGetMaximumSizeTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::addMemoryChangeSizeOfAddedMemoryAndGetMaximumSizeTest - i");
-  MemoryUsageObserver::getInstance()->addMemory(i, 2 * sizeof(int));
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  CPPUNIT_ASSERT_EQUAL(2 * sizeof(int), MemoryUsageObserver::getInstance()->getMaximumUsedMemory());
-  Free(i);
-};
-
-/**
- * UnitTest for getMaximumUsedMemory()
- */
-void MemoryUsageObserverTest::addMemoryRemoveMemoryAndGetMaximumSizeTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::addMemoryRemoveMemoryAndGetMaximumSizeTest - i");
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  MemoryUsageObserver::getInstance()->removeMemory(i);
-  CPPUNIT_ASSERT_EQUAL(sizeof(int), MemoryUsageObserver::getInstance()->getMaximumUsedMemory());
-  Free(i);
-};
-
-/**
- * UnitTest for getPointersToAllocatedMemory()
- */
-void MemoryUsageObserverTest::getPointersToAllocatedMemoryTest()
-{
-  int* i = Malloc<int>(1, "MemoryUsageObserverTest::getPointersToAllocatedMemoryTest - i");
-  MemoryUsageObserver::getInstance()->addMemory(i, sizeof(int));
-  CPPUNIT_ASSERT_EQUAL(i, (int*) MemoryUsageObserver::getInstance()->getPointersToAllocatedMemory().begin()->first);
-  Free(i);
-};
Index: c/unittests/memoryusageobserverunittest.hpp
===================================================================
--- src/unittests/memoryusageobserverunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * memoryusageobserverunittest.hpp
- */
-
-#ifndef MEMORYUSAGEOBSERVERTEST_HPP_
-#define MEMORYUSAGEOBSERVERTEST_HPP_
-
-#include "memoryusageobserver.hpp"
-#include <cppunit/extensions/HelperMacros.h>
-
-
-/********************************************** Test classes **************************************/
-
-class MemoryUsageObserverTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MemoryUsageObserverTest) ;
-    CPPUNIT_TEST ( getInstanceReturnsMemoryUsageObserverTest );
-    CPPUNIT_TEST ( getInstanceTwiceReturnsSameInstanceTest );
-    CPPUNIT_TEST ( getInstanceAfterPurgeInstanceReturnsNewInstanceTest );
-    CPPUNIT_TEST ( addAndRemoveMemoryTest );
-    CPPUNIT_TEST ( removeNonTrackedMemoryDoesNotCauseACrashTest );
-    CPPUNIT_TEST ( addMemoryTwiceTest );
-    CPPUNIT_TEST ( addMemoryAndChangeSizeOfAddedMemoryTest );
-    CPPUNIT_TEST ( addMemoryChangeSizeOfAddedMemoryAndGetMaximumSizeTest );
-    CPPUNIT_TEST ( addMemoryRemoveMemoryAndGetMaximumSizeTest );
-    CPPUNIT_TEST ( getPointersToAllocatedMemoryTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void getInstanceReturnsMemoryUsageObserverTest();
-    void getInstanceTwiceReturnsSameInstanceTest();
-    void getInstanceAfterPurgeInstanceReturnsNewInstanceTest();
-    void addAndRemoveMemoryTest();
-    void removeNonTrackedMemoryDoesNotCauseACrashTest();
-    void addMemoryTwiceTest();
-    void addMemoryAndChangeSizeOfAddedMemoryTest();
-    void addMemoryChangeSizeOfAddedMemoryAndGetMaximumSizeTest();
-    void addMemoryRemoveMemoryAndGetMaximumSizeTest();
-    void getPointersToAllocatedMemoryTest();
-};
-
-#endif /* MEMORYUSAGEOBSERVERTEST_HPP_ */
-
Index: c/unittests/periodentafelTest.cpp
===================================================================
--- src/unittests/periodentafelTest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,94 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * periodentafelTest.cpp
- *
- *  Created on: May 18, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <sstream>
-#include <iostream>
-
-#include "Helpers/Assert.hpp"
-
-#include "World.hpp"
-#include "periodentafelTest.hpp"
-#include "element.hpp"
-#include "elements_db.hpp"
-#include "periodentafel.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( periodentafelTest );
-
-
-void periodentafelTest::setUp()
-{
-  // make sure world is present
-  tafel = World::getInstance().getPeriode();
-  CPPUNIT_ASSERT(tafel != NULL && "could not obtain periodentafel");
-};
-
-
-void periodentafelTest::tearDown()
-{
-  World::purgeInstance();
-};
-
-/** UnitTest for AddRemoveTest().
- */
-void periodentafelTest::AddRemoveTest()
-{
-  // copy the element
-  const element * ElementPtr = tafel->FindElement(3);
-  CPPUNIT_ASSERT( ElementPtr != NULL && "could not find element lithium");
-  element *Elemental = new element(*ElementPtr);
-  // remove element
-  tafel->RemoveElement((element * const)ElementPtr);
-  ElementPtr = tafel->FindElement(3);
-  CPPUNIT_ASSERT_EQUAL( (const element *)NULL, ElementPtr );
-  // add element again
-  tafel->AddElement((element * const)Elemental);
-  ElementPtr = tafel->FindElement(3);
-  CPPUNIT_ASSERT( ElementPtr != NULL && "could not find re-added element lithium");
-};
-
-/** UnitTest for LoadStoreTest().
- * TODO: periodentafelTest::LoadStoreTest() not implemented yet
- */
-void periodentafelTest::LoadStoreTest()
-{
-  // reload all databases
-  stringstream elementsDBstream(elementsDB,ios_base::in);
-  CPPUNIT_ASSERT(tafel->LoadElementsDatabase(elementsDBstream) && "General element initialization failed");
-  CPPUNIT_ASSERT(tafel->LoadValenceDatabase(new stringstream(valenceDB,ios_base::in)) && "Valence entry of element initialization failed");
-  CPPUNIT_ASSERT(tafel->LoadOrbitalsDatabase(new stringstream(orbitalsDB,ios_base::in)) && "Orbitals entry of element initialization failed");
-  CPPUNIT_ASSERT(tafel->LoadHBondAngleDatabase(new stringstream(HbondangleDB,ios_base::in)) && "HBond angle entry of element initialization failed");
-  CPPUNIT_ASSERT(tafel->LoadHBondLengthsDatabase(new stringstream(HbonddistanceDB,ios_base::in)) && "HBond distance entry of element initialization failed");
-  // check presence of elements
-  atomicNumber_t Z = 1;
-  for(periodentafel::const_iterator ElementRunner = tafel->begin(); ElementRunner != tafel->end(); ++ElementRunner)
-    CPPUNIT_ASSERT( (ElementRunner->second->getNumber() == Z++) && "element is missing in sequence");
-};
Index: c/unittests/periodentafelTest.hpp
===================================================================
--- src/unittests/periodentafelTest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,39 +1,0 @@
-/*
- * periodentafelTest.hpp
- *
- *  Created on: May 18, 2010
- *      Author: heber
- */
-
-#ifndef ANALYSISBONDSUNITTEST_HPP_
-#define ANALYSISBONDSUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-class element;
-class periodentafel;
-
-/********************************************** Test classes **************************************/
-
-class periodentafelTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( periodentafelTest) ;
-    CPPUNIT_TEST ( AddRemoveTest );
-    CPPUNIT_TEST ( LoadStoreTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void AddRemoveTest();
-      void LoadStoreTest();
-
-private:
-
-      const element *hydrogen;
-      const element *carbon;
-      periodentafel *tafel;
-
-};
-
-#endif /* ANALYSISBONDSUNITTEST_HPP_ */
Index: c/unittests/tesselation_boundarytriangleunittest.cpp
===================================================================
--- src/unittests/tesselation_boundarytriangleunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,212 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * tesselation_boundarytriangleunittest.cpp
- *
- *  Created on: Jan 13, 2010
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cstring>
-#include <iostream>
-
-#include "Helpers/defs.hpp"
-#include "TesselPoint.hpp"
-#include "BoundaryPointSet.hpp"
-#include "BoundaryLineSet.hpp"
-#include "BoundaryTriangleSet.hpp"
-#include "CandidateForTesselation.hpp"
-#include "tesselation_boundarytriangleunittest.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-const double TesselationBoundaryTriangleTest::SPHERERADIUS=2.;
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( TesselationBoundaryTriangleTest );
-
-
-void TesselationBoundaryTriangleTest::setUp()
-{
-  setVerbosity(5);
-
-  // create nodes
-  tesselpoints[0] = new TesselPoint;
-  tesselpoints[0]->setPosition(Vector(0., 0., 0.));
-  tesselpoints[0]->setName("1");
-  tesselpoints[0]->nr = 1;
-  points[0] = new BoundaryPointSet(tesselpoints[0]);
-  tesselpoints[1] = new TesselPoint;
-  tesselpoints[1]->setPosition(Vector(0., 1., 0.));
-  tesselpoints[1]->setName("2");
-  tesselpoints[1]->nr = 2;
-  points[1] = new BoundaryPointSet(tesselpoints[1]);
-  tesselpoints[2] = new TesselPoint;
-  tesselpoints[2]->setPosition(Vector(1., 0., 0.));
-  tesselpoints[2]->setName("3");
-  tesselpoints[2]->nr = 3;
-  points[2] = new BoundaryPointSet(tesselpoints[2] );
-
-  // create line
-  lines[0] = new BoundaryLineSet(points[0], points[1], 0);
-  lines[1] = new BoundaryLineSet(points[1], points[2], 1);
-  lines[2] = new BoundaryLineSet(points[0], points[2], 2);
-
-  // create triangle
-  triangle = new BoundaryTriangleSet(lines, 0);
-  triangle->GetNormalVector(Vector(0.,0.,1.));
-};
-
-
-void TesselationBoundaryTriangleTest::tearDown()
-{
-  delete(triangle);
-  for (int i=0;i<3;++i) {
-    // TesselPoint does not delete its vector as it only got a reference
-    delete tesselpoints[i];
-  }
-  logger::purgeInstance();
-  errorLogger::purgeInstance();
-};
-
-/** UnitTest for Tesselation::IsInnerPoint()
- */
-void TesselationBoundaryTriangleTest::GetClosestPointOnPlaneTest()
-{
-  Vector TestIntersection;
-  Vector Point;
-
-  // simple test on y line
-  Point = Vector(-1.,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-  Point = Vector(-4.,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( 16., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on x line
-  Point = Vector(0.5,-1.,0.);
-  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-  Point = Vector(0.5,-6.,0.);
-  CPPUNIT_ASSERT_EQUAL( 36., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on slanted line
-  Point = Vector(1.,1.,0.);
-  CPPUNIT_ASSERT_EQUAL( 0.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-  Point = Vector(5.,5.,0.);
-  CPPUNIT_ASSERT_EQUAL( 40.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on first node
-  Point = Vector(-1.,-1.,0.);
-  CPPUNIT_ASSERT_EQUAL( 2., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on second node
-  Point = Vector(0.,2.,0.);
-  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,1.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on third node
-  Point = Vector(2.,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( 1., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(1.,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-};
-
-/** UnitTest for Tesselation::IsInnerPoint()
- */
-void TesselationBoundaryTriangleTest::GetClosestPointOffPlaneTest()
-{
-  Vector TestIntersection;
-  Vector Point;
-
-  // straight down/up
-  Point = Vector(1./3.,1./3.,+5.);
-  CPPUNIT_ASSERT_EQUAL( 25. , triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(1./3.,1./3.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-  Point = Vector(1./3.,1./3.,-5.);
-  CPPUNIT_ASSERT_EQUAL( 25. , triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(1./3.,1./3.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on y line
-  Point = Vector(-1.,0.5,+2.);
-  CPPUNIT_ASSERT_EQUAL( 5., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-  Point = Vector(-1.,0.5,-3.);
-  CPPUNIT_ASSERT_EQUAL( 10., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on x line
-  Point = Vector(0.5,-1.,+1.);
-  CPPUNIT_ASSERT_EQUAL( 2., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-  Point = Vector(0.5,-1.,-2.);
-  CPPUNIT_ASSERT_EQUAL( 5., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on slanted line
-  Point = Vector(1.,1.,+3.);
-  CPPUNIT_ASSERT_EQUAL( 9.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-  Point = Vector(1.,1.,-4.);
-  CPPUNIT_ASSERT_EQUAL( 16.5, triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.5,0.5,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on first node
-  Point = Vector(-1.,-1.,5.);
-  CPPUNIT_ASSERT_EQUAL( 27., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on second node
-  Point = Vector(0.,2.,5.);
-  CPPUNIT_ASSERT_EQUAL( 26., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(0.,1.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-
-  // simple test on third node
-  Point = Vector(2.,0.,5.);
-  CPPUNIT_ASSERT_EQUAL( 26., triangle->GetClosestPointInsideTriangle(Point, TestIntersection) );
-  Point = Vector(1.,0.,0.);
-  CPPUNIT_ASSERT_EQUAL( true , Point == TestIntersection );
-};
Index: c/unittests/tesselation_boundarytriangleunittest.hpp
===================================================================
--- src/unittests/tesselation_boundarytriangleunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,46 +1,0 @@
-/*
- * tesselation_boundarytriangleunittest.hpp
- *
- *  Created on: Jan 13, 2010
- *      Author: heber
- */
-
-#ifndef TESSELATION_BOUNDARYTRIANGLEUNITTEST_HPP_
-#define TESSELATION_BOUNDARYTRIANGLEUNITTEST_HPP_
-
-/*********************************************** includes ***********************************/
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "linkedcell.hpp"
-#include "tesselation.hpp"
-
-class TesselPoint;
-
-/********************************************** Test classes **************************************/
-
-class TesselationBoundaryTriangleTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( TesselationBoundaryTriangleTest) ;
-    CPPUNIT_TEST ( GetClosestPointOnPlaneTest );
-    CPPUNIT_TEST ( GetClosestPointOffPlaneTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void GetClosestPointOnPlaneTest();
-      void GetClosestPointOffPlaneTest();
-
-private:
-      static const double SPHERERADIUS;
-
-      class BoundaryTriangleSet *triangle;
-      class BoundaryLineSet *lines[3];
-      class BoundaryPointSet *points[3];
-      class TesselPoint *tesselpoints[3];
-      LinkedCell::LinkedNodes Corners;
-};
-
-
-#endif /* TESSELATION_BOUNDARYTRIANGLEUNITTEST_HPP_ */
Index: c/unittests/tesselation_insideoutsideunittest.cpp
===================================================================
--- src/unittests/tesselation_insideoutsideunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,171 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * tesselation_insideoutsideunittest.cpp
- *
- *  Created on: Dec 28, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cstring>
-#include <iostream>
-
-#include "Helpers/defs.hpp"
-#include "TesselPoint.hpp"
-#include "BoundaryLineSet.hpp"
-#include "BoundaryTriangleSet.hpp"
-#include "CandidateForTesselation.hpp"
-#include "tesselation_insideoutsideunittest.hpp"
-#include "Helpers/Verbose.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-const double TesselationInOutsideTest::SPHERERADIUS=2.;
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( TesselationInOutsideTest );
-
-void TesselationInOutsideTest::setUp()
-{
-  setVerbosity(2);
-
-  // create corners
-  class TesselPoint *Walker;
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(0., 0., 0.));
-  Walker->setName("1");
-  Walker->nr = 1;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(0., 1., 0.));
-  Walker->setName("2");
-  Walker->nr = 2;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(1., 0., 0.));
-  Walker->setName("3");
-  Walker->nr = 3;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(1., 1., 0.));
-  Walker->setName("4");
-  Walker->nr = 4;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(0., 0., 1.));
-  Walker->setName("5");
-  Walker->nr = 5;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(0., 1., 1.));
-  Walker->setName("6");
-  Walker->nr = 6;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(1., 0., 1.));
-  Walker->setName("7");
-  Walker->nr = 7;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(1., 1., 1.));
-  Walker->setName("8");
-  Walker->nr = 8;
-  Corners.push_back(Walker);
-
-  // create linkedcell
-  LinkedList = new LinkedCell(Corners, 2.*SPHERERADIUS);
-
-  // create tesselation
-  TesselStruct = new Tesselation;
-  TesselStruct->FindStartingTriangle(SPHERERADIUS, LinkedList);
-
-  CandidateForTesselation *baseline = NULL;
-  BoundaryTriangleSet *T = NULL;
-  bool OneLoopWithoutSuccessFlag = true;
-  bool TesselationFailFlag = false;
-  while ((!TesselStruct->OpenLines.empty()) && (OneLoopWithoutSuccessFlag)) {
-    // 2a. fill all new OpenLines
-    DoLog(1) && (Log() << Verbose(1) << "There are " << TesselStruct->OpenLines.size() << " open lines to scan for candidates:" << endl);
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++)
-      DoLog(2) && (Log() << Verbose(2) << *(Runner->second) << endl);
-
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      baseline = Runner->second;
-      if (baseline->pointlist.empty()) {
-        T = (((baseline->BaseLine->triangles.begin()))->second);
-        DoLog(1) && (Log() << Verbose(1) << "Finding best candidate for open line " << *baseline->BaseLine << " of triangle " << *T << endl);
-        TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*baseline, *T, SPHERERADIUS, LinkedList); //the line is there, so there is a triangle, but only one.
-      }
-    }
-
-    // 2b. search for smallest ShortestAngle among all candidates
-    double ShortestAngle = 4.*M_PI;
-    DoLog(1) && (Log() << Verbose(1) << "There are " << TesselStruct->OpenLines.size() << " open lines to scan for the best candidates:" << endl);
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++)
-      DoLog(2) && (Log() << Verbose(2) << *(Runner->second) << endl);
-
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      if (Runner->second->ShortestAngle < ShortestAngle) {
-        baseline = Runner->second;
-        ShortestAngle = baseline->ShortestAngle;
-        //Log() << Verbose(1) << "New best candidate is " << *baseline->BaseLine << " with point " << *baseline->point << " and angle " << baseline->ShortestAngle << endl;
-      }
-    }
-    if ((ShortestAngle == 4.*M_PI) || (baseline->pointlist.empty()))
-      OneLoopWithoutSuccessFlag = false;
-    else {
-      TesselStruct->AddCandidatePolygon(*baseline, SPHERERADIUS, LinkedList);
-    }
-  }
-};
-
-
-void TesselationInOutsideTest::tearDown()
-{
-  delete(LinkedList);
-  delete(TesselStruct);
-  for (LinkedCell::LinkedNodes::iterator Runner = Corners.begin(); Runner != Corners.end(); Runner++)
-    delete(*Runner);
-  Corners.clear();
-  logger::purgeInstance();
-  errorLogger::purgeInstance();
-};
-
-/** UnitTest for Tesselation::IsInnerPoint()
- */
-void TesselationInOutsideTest::IsInnerPointTest()
-{
-  double n[3];
-  const double boundary = 2.;
-  const double step = 1.;
-
-  // go through the mesh and check each point
-  for (n[0] = -boundary; n[0] <= boundary; n[0]+=step)
-    for (n[1] = -boundary; n[1] <= boundary; n[1]+=step)
-      for (n[2] = -boundary; n[2] <= boundary; n[2]+=step) {
-        if ( ((n[0] >= 0.) && (n[1] >= 0.) && (n[2] >= 0.)) && ((n[0] <= 1.) && (n[1] <= 1.) && (n[2] <= 1.)))
-          CPPUNIT_ASSERT_EQUAL( true , TesselStruct->IsInnerPoint(Vector(n[0], n[1], n[2]), LinkedList) );
-        else
-          CPPUNIT_ASSERT_EQUAL( false , TesselStruct->IsInnerPoint(Vector(n[0], n[1], n[2]), LinkedList) );
-      }
-};
Index: c/unittests/tesselation_insideoutsideunittest.hpp
===================================================================
--- src/unittests/tesselation_insideoutsideunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,40 +1,0 @@
-/*
- * tesselation_insideoutsideunittest.hpp
- *
- *  Created on: Dec 28, 2009
- *      Author: heber
- */
-
-#ifndef TESSELATION_INSIDEOUTSIDEUNITTEST_HPP_
-#define TESSELATION_INSIDEOUTSIDEUNITTEST_HPP_
-
-/*********************************************** includes ***********************************/
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "linkedcell.hpp"
-#include "tesselation.hpp"
-
-/********************************************** Test classes **************************************/
-
-class TesselationInOutsideTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( TesselationInOutsideTest) ;
-    CPPUNIT_TEST ( IsInnerPointTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void IsInnerPointTest();
-
-private:
-      static const double SPHERERADIUS;
-
-      class Tesselation *TesselStruct;
-      LinkedCell::LinkedNodes Corners;
-      class LinkedCell *LinkedList;
-};
-
-
-#endif /* TESSELATION_INSIDEOUTSIDEUNITTEST_HPP_ */
Index: c/unittests/tesselationunittest.cpp
===================================================================
--- src/unittests/tesselationunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,189 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * tesselationunittest.cpp
- *
- *  Created on: Aug 26, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include <cstring>
-
-#include "Helpers/defs.hpp"
-#include "TesselPoint.hpp"
-#include "BoundaryLineSet.hpp"
-#include "BoundaryTriangleSet.hpp"
-#include "CandidateForTesselation.hpp"
-#include "tesselationunittest.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-const double TesselationTest::SPHERERADIUS=2.;
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( TesselationTest );
-
-
-void TesselationTest::setUp()
-{
-  // create corners
-  class TesselPoint *Walker;
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(1., 0., -1.));
-  Walker->setName("1");
-  Walker->nr = 1;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(-1., 1., -1.));
-  Walker->setName("2");
-  Walker->nr = 2;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(-1., -1., -1.));
-  Walker->setName("3");
-  Walker->nr = 3;
-  Corners.push_back(Walker);
-  Walker = new TesselPoint;
-  Walker->setPosition(Vector(-1., 0., 1.));
-  Walker->setName("4");
-  Walker->nr = 4;
-  Corners.push_back(Walker);
-
-  // create linkedcell
-  LinkedList = new LinkedCell(Corners, 2.*SPHERERADIUS);
-
-  // create tesselation
-  TesselStruct = new Tesselation;
-  CPPUNIT_ASSERT_EQUAL( true, TesselStruct->PointsOnBoundary.empty() );
-  CPPUNIT_ASSERT_EQUAL( true, TesselStruct->LinesOnBoundary.empty() );
-  CPPUNIT_ASSERT_EQUAL( true, TesselStruct->TrianglesOnBoundary.empty() );
-  TesselStruct->FindStartingTriangle(SPHERERADIUS, LinkedList);
-
-  CandidateForTesselation *baseline = NULL;
-  BoundaryTriangleSet *T = NULL;
-  bool OneLoopWithoutSuccessFlag = true;
-  bool TesselationFailFlag = false;
-  while ((!TesselStruct->OpenLines.empty()) && (OneLoopWithoutSuccessFlag)) {
-    // 2a. fill all new OpenLines
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      baseline = Runner->second;
-      if (baseline->pointlist.empty()) {
-        T = (((baseline->BaseLine->triangles.begin()))->second);
-        TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*baseline, *T, SPHERERADIUS, LinkedList); //the line is there, so there is a triangle, but only one.
-      }
-    }
-
-    // 2b. search for smallest ShortestAngle among all candidates
-    double ShortestAngle = 4.*M_PI;
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      if (Runner->second->ShortestAngle < ShortestAngle) {
-        baseline = Runner->second;
-        ShortestAngle = baseline->ShortestAngle;
-      }
-    }
-    if ((ShortestAngle == 4.*M_PI) || (baseline->pointlist.empty()))
-      OneLoopWithoutSuccessFlag = false;
-    else {
-      TesselStruct->AddCandidatePolygon(*baseline, SPHERERADIUS, LinkedList);
-    }
-  }
-};
-
-
-void TesselationTest::tearDown()
-{
-  delete(LinkedList);
-  delete(TesselStruct);
-  for (LinkedCell::LinkedNodes::iterator Runner = Corners.begin(); Runner != Corners.end(); Runner++)
-    delete(*Runner);
-  Corners.clear();
-  logger::purgeInstance();
-  errorLogger::purgeInstance();
-};
-
-/** UnitTest for Contains...()
- *
- */
-void TesselationTest::ContainmentTest()
-{
-  class BoundaryPointSet *point = NULL;
-  class BoundaryLineSet *line = NULL;
-
-  // check ContainsBoundaryPoint
-  for(LineMap::iterator Runner = TesselStruct->LinesOnBoundary.begin(); Runner != TesselStruct->LinesOnBoundary.end(); Runner++) {
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[0]));
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[1]));
-  }
-  for(TriangleMap::iterator Runner = TesselStruct->TrianglesOnBoundary.begin(); Runner != TesselStruct->TrianglesOnBoundary.end(); Runner++) {
-    for(PointMap::iterator PointRunner = TesselStruct->PointsOnBoundary.begin(); PointRunner != TesselStruct->PointsOnBoundary.end(); PointRunner++) {
-      point = PointRunner->second;
-      for (int i=0;i<3;i++)
-        if (point == (Runner->second)->endpoints[i])
-          point = NULL;
-      if (point != NULL)
-        break;
-    }
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[0]));
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[1]));
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryPoint((Runner->second)->endpoints[2]));
-    CPPUNIT_ASSERT_EQUAL( false, (Runner->second)->ContainsBoundaryPoint(point));
-  }
-
-  // check ContainsBoundaryLine
-  for(TriangleMap::iterator Runner = TesselStruct->TrianglesOnBoundary.begin(); Runner != TesselStruct->TrianglesOnBoundary.end(); Runner++) {
-    for(LineMap::iterator LineRunner = TesselStruct->LinesOnBoundary.begin(); LineRunner != TesselStruct->LinesOnBoundary.end(); LineRunner++) {
-      line = LineRunner->second;
-      for (int i=0;i<3;i++)
-        if (line == (Runner->second)->lines[i])
-          line = NULL;
-      if (line != NULL)
-        break;
-    }
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryLine((Runner->second)->lines[0]));
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryLine((Runner->second)->lines[1]));
-    CPPUNIT_ASSERT_EQUAL( true, (Runner->second)->ContainsBoundaryLine((Runner->second)->lines[2]));
-    CPPUNIT_ASSERT_EQUAL( false, (Runner->second)->ContainsBoundaryLine(line));
-  }
-
-  // check IsPresentTupel
-  CPPUNIT_ASSERT_EQUAL( true, true );
-}
-
-/** UnitTest for Tesselation::GetAllTriangles()
- *
- */
-void TesselationTest::GetAllTrianglesTest()
-{
-  class BoundaryPointSet *Walker = NULL;
-
-  // check that there are three adjacent triangles for every boundary point
-  for (PointMap::iterator Runner = TesselStruct->PointsOnBoundary.begin(); Runner != TesselStruct->PointsOnBoundary.end(); Runner++) {
-    Walker = Runner->second;
-    set<BoundaryTriangleSet*> *triangles = TesselStruct->GetAllTriangles(Walker);
-    CPPUNIT_ASSERT_EQUAL( (size_t)3, triangles->size() );
-    // check that the returned triangle all contain the Walker
-    for (set<BoundaryTriangleSet*>::iterator TriangleRunner = triangles->begin(); TriangleRunner != triangles->end(); TriangleRunner++)
-      CPPUNIT_ASSERT_EQUAL( true, (*TriangleRunner)->ContainsBoundaryPoint(Walker) );
-    delete(triangles);
-  }
-}
Index: c/unittests/tesselationunittest.hpp
===================================================================
--- src/unittests/tesselationunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,44 +1,0 @@
-/*
- * tesselationunittest.hpp
- *
- *  Created on: Aug 26, 2009
- *      Author: heber
- */
-
-#ifndef TESSELATIONUNITTEST_HPP_
-#define TESSELATIONUNITTEST_HPP_
-
-/*********************************************** includes ***********************************/
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "linkedcell.hpp"
-#include "tesselation.hpp"
-
-/********************************************** Test classes **************************************/
-
-class TesselationTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( TesselationTest) ;
-    CPPUNIT_TEST ( GetAllTrianglesTest );
-    CPPUNIT_TEST ( ContainmentTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-      void setUp();
-      void tearDown();
-      void GetAllTrianglesTest();
-      void ContainmentTest();
-
-
-private:
-      static const double SPHERERADIUS;
-
-      class Tesselation *TesselStruct;
-      LinkedCell::LinkedNodes Corners;
-      class LinkedCell *LinkedList;
-};
-
-
-
-#endif /* TESSELATIONUNITTEST_HPP_ */
Index: c/unittests/vectorunittest.cpp
===================================================================
--- src/unittests/vectorunittest.cpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,275 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2010 University of Bonn. All rights reserved.
- * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
- */
-
-/*
- * unittest.cpp
- *
- *  Created on: Aug 17, 2009
- *      Author: heber
- */
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-using namespace std;
-
-#include <cppunit/CompilerOutputter.h>
-#include <cppunit/extensions/TestFactoryRegistry.h>
-#include <cppunit/ui/text/TestRunner.h>
-
-#include "Helpers/defs.hpp"
-#include "Helpers/Log.hpp"
-#include "LinearAlgebra/Vector.hpp"
-#include "LinearAlgebra/vector_ops.hpp"
-#include "vectorunittest.hpp"
-#include "LinearAlgebra/Plane.hpp"
-#include "Exceptions/LinearDependenceException.hpp"
-#include "LinearAlgebra/RealSpaceMatrix.hpp"
-
-#ifdef HAVE_TESTRUNNER
-#include "UnitTestMain.hpp"
-#endif /*HAVE_TESTRUNNER*/
-
-#include <iostream>
-
-using namespace std;
-
-/********************************************** Test classes **************************************/
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( VectorTest );
-
-
-void VectorTest::setUp()
-{
-  zero  = Vector(0.,0.,0.);
-  unit = Vector(1.,0.,0.);
-  otherunit = Vector(0.,1.,0.);
-  notunit = Vector(0.,1.,1.);
-  two = Vector(2.,1.,0.);
-  three = Vector(1,2,3);
-};
-
-
-void VectorTest::tearDown()
-{
-  logger::purgeInstance();
-  errorLogger::purgeInstance();
-};
-
-/** UnitTest for Constructors and Vector::IsZero() and Vector::IsOne().
- */
-void VectorTest::AssignmentTest()
-{
-  // test with zero
-  zero.at(0) = 0;
-  zero.at(1) = 0;
-  zero.at(2) = 0;
-  double zero_array[3] = {0., 0., 0.};
-
-  CPPUNIT_ASSERT_EQUAL( zero, Vector(0,0,0));
-  CPPUNIT_ASSERT_EQUAL( zero, Vector(0.,0.,0.));
-  CPPUNIT_ASSERT_EQUAL( zero, Vector(zero_array[0], zero_array[1], zero_array[2]));
-  CPPUNIT_ASSERT_EQUAL( zero, Vector(zero_array));
-
-  // test with unit
-  unit.at(0) = 1;
-  unit.at(1) = 0;
-  unit.at(2) = 0;
-  double unit_array[3] = {1., 0., 0.};
-
-  CPPUNIT_ASSERT_EQUAL( unit, Vector(1,0,0));
-  CPPUNIT_ASSERT_EQUAL( unit, Vector(1.,0.,0.));
-  CPPUNIT_ASSERT_EQUAL( unit, Vector(unit_array[0], unit_array[1], unit_array[2]));
-  CPPUNIT_ASSERT_EQUAL( unit, Vector(unit_array));
-
-  // test with two
-  two.at(0) = 2;
-  two.at(1) = 1;
-  two.at(2) = 0;
-  double two_array[3] = {2., 1., 0.};
-
-  CPPUNIT_ASSERT_EQUAL( two, Vector(2,1,0));
-  CPPUNIT_ASSERT_EQUAL( two, Vector(2.,1.,0.));
-  CPPUNIT_ASSERT_EQUAL( two, Vector(two_array[0], two_array[1], two_array[2]));
-  CPPUNIT_ASSERT_EQUAL( two, Vector(two_array));
-
-  // test with three
-  three.at(0) = 1;
-  three.at(1) = 2;
-  three.at(2) = 3;
-  double three_array[3] = {1., 2., 3.};
-
-  CPPUNIT_ASSERT_EQUAL( three, Vector(1,2,3));
-  CPPUNIT_ASSERT_EQUAL( three, Vector(1.,2.,3.));
-  CPPUNIT_ASSERT_EQUAL( three, Vector(three_array[0], three_array[1], three_array[2]));
-  CPPUNIT_ASSERT_EQUAL( three, Vector(three_array));
-}
-
-/** UnitTest for Constructors and Vector::IsZero() and Vector::IsOne().
- */
-void VectorTest::UnityTest()
-{
-  // unity and zero tests
-  CPPUNIT_ASSERT_EQUAL( true, zero.IsZero() );
-  CPPUNIT_ASSERT_EQUAL( false, zero.IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, unit.IsZero() );
-  CPPUNIT_ASSERT_EQUAL( true, unit.IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, notunit.IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, otherunit.IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, otherunit.IsZero() );
-};
-
-/** UnitTest for Vector::CopyVector(), Vector::AddVector, Vector::SubtractVector() and Vector::Scale()/
- */
-void VectorTest::SimpleAlgebraTest()
-{
-  double factor;
-  // copy vector
-  fixture = Vector(2.,3.,4.);
-  CPPUNIT_ASSERT_EQUAL( Vector(2.,3.,4.), fixture );
-  // summation and scaling
-  fixture = zero + unit;
-  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
-  fixture = zero - unit;
-  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, fixture.IsZero() );
-  fixture = zero + zero;
-  CPPUNIT_ASSERT_EQUAL( true, fixture.IsZero() );
-  fixture = notunit - otherunit;
-  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
-  fixture = unit - otherunit;
-  CPPUNIT_ASSERT_EQUAL( false, fixture.IsOne() );
-  fixture = notunit - unit - otherunit;
-  CPPUNIT_ASSERT_EQUAL( false, fixture.IsZero() );
-  fixture = 0.98 * unit;
-  CPPUNIT_ASSERT_EQUAL( false, fixture.IsOne() );
-  fixture = 1. * unit;
-  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
-  factor = 0.98;
-  fixture = factor * unit;
-  CPPUNIT_ASSERT_EQUAL( false, fixture.IsOne() );
-  factor = 1.;
-  fixture = factor * unit;
-  CPPUNIT_ASSERT_EQUAL( true, fixture.IsOne() );
-};
-
-
-/** UnitTest for operator versions of Vector::CopyVector(), Vector::AddVector, Vector::SubtractVector() and Vector::Scale().
- */
-void VectorTest::OperatorAlgebraTest()
-{
-  // summation and scaling
-  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, (zero+unit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, (zero-unit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, (zero-unit).IsZero() );
-  CPPUNIT_ASSERT_EQUAL( true, (zero+zero).IsZero() );
-  CPPUNIT_ASSERT_EQUAL( true, (notunit-otherunit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, (unit+otherunit).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( false, (notunit-unit-otherunit).IsZero() );
-  CPPUNIT_ASSERT_EQUAL( false, (unit*0.98).IsOne() );
-  CPPUNIT_ASSERT_EQUAL( true, (unit*1.).IsOne() );
-
-  CPPUNIT_ASSERT_EQUAL( unit, (zero+unit) );
-  CPPUNIT_ASSERT_EQUAL( Vector(0.,0.,1.), (notunit-otherunit) );
-  CPPUNIT_ASSERT_EQUAL( Vector(-1, 0., 1.), (notunit-unit-otherunit) );
-};
-
-/** UnitTest for scalar products.
- */
-void VectorTest::EuclidianScalarProductTest()
-{
-  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(zero) );
-  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(unit) );
-  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(otherunit) );
-  CPPUNIT_ASSERT_EQUAL( 0., zero.ScalarProduct(notunit) );
-  CPPUNIT_ASSERT_EQUAL( 1., unit.ScalarProduct(unit) );
-  CPPUNIT_ASSERT_EQUAL( 0., otherunit.ScalarProduct(unit) );
-  CPPUNIT_ASSERT_EQUAL( 0., otherunit.ScalarProduct(unit) );
-  CPPUNIT_ASSERT_EQUAL( 1., otherunit.ScalarProduct(notunit) );
-  CPPUNIT_ASSERT_EQUAL( 2., two.ScalarProduct(unit) );
-  CPPUNIT_ASSERT_EQUAL( 1., two.ScalarProduct(otherunit) );
-  CPPUNIT_ASSERT_EQUAL( 1., two.ScalarProduct(notunit) );
-}
-
-/** UnitTest for norms.
- */
-void VectorTest::EuclidianNormTest()
-{
-  CPPUNIT_ASSERT_EQUAL( 0., zero.Norm() );
-  CPPUNIT_ASSERT_EQUAL( 0., zero.NormSquared() );
-  CPPUNIT_ASSERT_EQUAL( 1., unit.Norm() );
-  CPPUNIT_ASSERT_EQUAL( 1., unit.NormSquared() );
-  CPPUNIT_ASSERT_EQUAL( 1., otherunit.Norm() );
-  CPPUNIT_ASSERT_EQUAL( 1., otherunit.NormSquared() );
-  CPPUNIT_ASSERT_EQUAL( 2., notunit.NormSquared() );
-  CPPUNIT_ASSERT_EQUAL( sqrt(2.), notunit.Norm() );
-}
-
-/** UnitTest for distances.
- */
-void VectorTest::EuclidianDistancesTest()
-{
-  CPPUNIT_ASSERT_EQUAL( 1., zero.distance(unit) );
-  CPPUNIT_ASSERT_EQUAL( sqrt(2.), otherunit.distance(unit) );
-  CPPUNIT_ASSERT_EQUAL( sqrt(2.), zero.distance(notunit) );
-  CPPUNIT_ASSERT_EQUAL( 1., otherunit.distance(notunit) );
-  CPPUNIT_ASSERT_EQUAL( sqrt(5.), two.distance(notunit) );
-}
-
-/** UnitTest for angles.
- */
-void VectorTest::EuclidianAnglesTest()
-{
-  CPPUNIT_ASSERT_EQUAL( M_PI, zero.Angle(unit) );
-  CPPUNIT_ASSERT_EQUAL( 0., unit.Angle(unit) );
-  CPPUNIT_ASSERT_EQUAL( true, fabs(M_PI/2. - otherunit.Angle(unit)) < MYEPSILON );
-  CPPUNIT_ASSERT_EQUAL( true, fabs(M_PI/2. - unit.Angle(notunit)) < MYEPSILON );
-  CPPUNIT_ASSERT_EQUAL( true, fabs(M_PI/4. - otherunit.Angle(notunit)) < MYEPSILON );
-};
-
-/** UnitTest for projections.
- */
-void VectorTest::ProjectionTest()
-{
-  CPPUNIT_ASSERT_EQUAL( zero, zero.Projection(unit) );
-  CPPUNIT_ASSERT_EQUAL( zero, otherunit.Projection(unit) );
-  CPPUNIT_ASSERT_EQUAL( Vector(0.4,0.2,0.),  otherunit.Projection(two) );
-  CPPUNIT_ASSERT_EQUAL( Vector(0.,1.,0.),  two.Projection(otherunit) );
-};
-
-/**
- * Unittest for operation with normals
- */
-void VectorTest::NormalsTest(){
-  Vector testVector;
-  // the zero Vector should produce an error
-  CPPUNIT_ASSERT(!testVector.GetOneNormalVector(zero));
-
-  // first one-component system
-  CPPUNIT_ASSERT(testVector.GetOneNormalVector(unit));
-  CPPUNIT_ASSERT(testVector.ScalarProduct(unit) < MYEPSILON);
-
-  // second one-component system
-  CPPUNIT_ASSERT(testVector.GetOneNormalVector(otherunit));
-  CPPUNIT_ASSERT(testVector.ScalarProduct(otherunit) < MYEPSILON);
-
-  // first two-component system
-  CPPUNIT_ASSERT(testVector.GetOneNormalVector(notunit));
-  CPPUNIT_ASSERT(testVector.ScalarProduct(notunit) < MYEPSILON);
-
-  // second two-component system
-  CPPUNIT_ASSERT(testVector.GetOneNormalVector(two));
-  CPPUNIT_ASSERT(testVector.ScalarProduct(two) < MYEPSILON);
-
-  // three component system
-  CPPUNIT_ASSERT(testVector.GetOneNormalVector(three));
-  CPPUNIT_ASSERT(testVector.ScalarProduct(three) < MYEPSILON);
-}
Index: c/unittests/vectorunittest.hpp
===================================================================
--- src/unittests/vectorunittest.hpp	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ 	(revision )
@@ -1,62 +1,0 @@
-/*
- * cppunuit.hpp
- *
- *  Created on: Aug 17, 2009
- *      Author: heber
- */
-
-#ifndef VECTORUNITTEST_HPP_
-#define VECTORUNITTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include "LinearAlgebra/Vector.hpp"
-
-/********************************************** Test classes **************************************/
-
-class VectorTest : public CppUnit::TestFixture
-{
-    CPPUNIT_TEST_SUITE( VectorTest) ;
-    CPPUNIT_TEST ( AssignmentTest );
-    CPPUNIT_TEST ( UnityTest );
-    CPPUNIT_TEST ( SimpleAlgebraTest );
-    CPPUNIT_TEST ( OperatorAlgebraTest );
-    CPPUNIT_TEST ( EuclidianScalarProductTest );
-    CPPUNIT_TEST ( EuclidianNormTest );
-    CPPUNIT_TEST ( EuclidianDistancesTest );
-    CPPUNIT_TEST ( EuclidianAnglesTest );
-    CPPUNIT_TEST ( ProjectionTest );
-    CPPUNIT_TEST ( NormalsTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    void setUp();
-    void tearDown();
-
-    void AssignmentTest();
-    void UnityTest();
-    void OperatorAlgebraTest();
-    void SimpleAlgebraTest();
-    void EuclidianScalarProductTest();
-    void EuclidianNormTest();
-    void EuclidianDistancesTest();
-    void EuclidianAnglesTest();
-    void ProjectionTest();
-    void NormalsTest();
-    void LineIntersectionTest();
-    void VectorRotationTest();
-
-private:
-    // vector to execute tests on, may be modified during run
-    Vector fixture;
-    // never modify these during run, other tests might rely on them
-    Vector zero;
-    Vector unit;
-    Vector otherunit;
-    Vector notunit;
-    Vector two;
-    Vector three;
-};
-
-
-#endif /* VECTORUNITTEST_HPP_ */
Index: tests/CodeChecks/Makefile.am
===================================================================
--- tests/CodeChecks/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/CodeChecks/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,44 @@
+AUTOM4TE = autom4te
+EXTRA_DIST = \
+	atlocal.in \
+	testsuite*.at \
+	$(TESTSUITE)
+TESTSUITE = $(srcdir)/testsuite
+
+TESTSCRIPTS =
+
+max_jobs = 4
+ 
+check-local: atlocal package.m4 $(TESTSUITE)
+	nrjobs=; \
+	for flag in $$MAKEFLAGS; do \
+		case $$flag in \
+		--* | =*=) ;; \
+		*j*) nrjobs="-j$(max_jobs)" ;; \
+		esac; \
+	done; \
+	$(SHELL) '$(TESTSUITE)' $$nrjobs $(TESTSUITEFLAGS)
+
+installcheck-local: atconfig atlocal $(TESTSUITE)
+	$(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
+	$(TESTSUITEFLAGS)
+
+clean-local:
+	test ! -f '$(TESTSUITE)' || \
+	$(SHELL) '$(TESTSUITE)' --clean
+
+AUTOTEST = $(AUTOM4TE) --language=autotest
+$(TESTSUITE): $(srcdir)/testsuite.at $(TESTSCRIPTS)
+	$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
+	mv $@.tmp $@
+
+# The `:;' works around a Bash 3.2 bug when the output is not writeable.
+$(srcdir)/package.m4: $(top_srcdir)/configure.ac
+	:;{ \
+		echo '# Signature of the current package.' && \
+		echo 'm4_define([AT_PACKAGE_NAME],      [@PACKAGE_NAME@])' && \
+		echo 'm4_define([AT_PACKAGE_TARNAME],   [@PACKAGE_TARNAME@])' && \
+		echo 'm4_define([AT_PACKAGE_VERSION],   [@PACKAGE_VERSION@])' && \
+		echo 'm4_define([AT_PACKAGE_STRING],    [@PACKAGE_STRING@])' && \
+		echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \
+	} >'$(srcdir)/package.m4'
Index: tests/CodeChecks/atlocal.in
===================================================================
--- tests/CodeChecks/atlocal.in	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/CodeChecks/atlocal.in	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1 @@
+abs_top_srcdir='@abs_top_srcdir@'
Index: tests/CodeChecks/testsuite.at
===================================================================
--- tests/CodeChecks/testsuite.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/CodeChecks/testsuite.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,41 @@
+# Process with autom4te to create an -*- Autotest -*- test suite.
+#
+# see regression/... subdirs wherein for each of the cases and each check (enumerated) is a pre and post dir. 
+# In pre initial files are placed, in post results can be found to be checked by diff in this testsuite.
+
+AT_INIT([Molecular Builder])
+AT_TESTED(egrep find grep)
+
+# Use colored output with new-enough Autotest.
+m4_ifdef([AT_COLOR_TESTS], [AT_COLOR_TESTS])
+
+AT_BANNER([MoleCuilder - Code Checks])
+AT_SETUP([Checking for present MemDebug.hpp include])
+AT_KEYWORDS([CodeCheck,MemDebug])
+m4_include(atlocal)
+ok="builder.cpp MemDebug.cpp SubspaceFactorizer.cpp TestRunner.cpp"
+echo `pwd`
+echo "${#ok[*]} are ok to not contain MemDebug.hpp: ${ok[0]} ${ok[1]}."
+liste=`find ${abs_top_srcdir}/src -name '*.cpp'`
+for file in $liste
+do
+	# check whether its one of the excluded ones
+	found=0
+	for item in $ok
+	do
+		if test "$item" == "`basename $file`"
+		then
+			found=1
+			break
+		fi
+	done
+	# if not, check whether it contains the include if its NOT a unit test
+	if test -z `echo $file | grep unittests`
+	then
+		if test $found -eq 0
+		then
+			AT_CHECK([egrep -q '^#include.*MemDebug.hpp' $file], 0, [ignore], [ignore], [echo "Could not find MemDebug.hpp include in $file."])
+		fi
+	fi
+done
+AT_CLEANUP
Index: tests/Makefile.am
===================================================================
--- tests/Makefile.am	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ tests/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -1,2 +1,2 @@
-SUBDIRS = regression Tesselations
+SUBDIRS = CodeChecks regression Tesselations
 
Index: tests/regression/CheckCommand.sh
===================================================================
--- tests/regression/CheckCommand.sh	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/CheckCommand.sh	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,24 @@
+check_command() {
+  # $1 is the path to regression files (relative to tests/regression)
+  # $2 is the source file name (the one in pre/)
+  # $3 is filename (correlates to the to compare in post/)
+  # $4 is first part of command (till command to test, undo/redo affect this one)
+  # $5 is second part of command (anything thereafter)
+  regressionpath=${abs_top_srcdir}/${AUTOTEST_PATH}/$1
+  AT_CHECK([cp -n $regressionpath/pre/$2 test.xyz], 0)
+  AT_CHECK([../../molecuilder -i test.xyz $4 $add $5], 0, [stdout], [stderr])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' test.xyz $regressionpath/post/$3], 0, [ignore], [ignore])
+}
+
+check_command_output() {
+  # $1 is the path to regression files (relative to tests/regression)
+  # $2 is the source file name (the one in pre/)
+  # $3 is output file name to diff (correlates to the to compare in post/, NOT $testfile)
+  # $4 is first part of command (till command to test, undo/redo affect this one)
+  # $5 is second part of command (anything thereafter)
+  testfile=test.xyz
+  regressionpath=${abs_top_srcdir}/${AUTOTEST_PATH}/$1
+  AT_CHECK([cp -n $regressionpath/pre/$2 $testfile], 0)
+  AT_CHECK([../../molecuilder -i $testfile $4 $add $5], 0, [stdout], [stderr])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' $3 $regressionpath/post/$3], 0, [ignore], [ignore])
+}
Index: tests/regression/Makefile.am
===================================================================
--- tests/regression/Makefile.am	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ tests/regression/Makefile.am	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -11,7 +11,35 @@
 	Graph \
 	Molecules \
+	Selection \
 	Simple_configuration \
 	Tesselation
 TESTSUITE = $(srcdir)/testsuite
+
+TESTSCRIPTS = \
+	$(srcdir)/testsuite-analysis.at \
+	$(srcdir)/testsuite-domain.at \
+	$(srcdir)/testsuite-filling.at \
+	$(srcdir)/testsuite-fragmentation.at \
+	$(srcdir)/testsuite-graph.at \
+	$(srcdir)/testsuite-molecules.at \
+	$(srcdir)/testsuite-simple_configuration.at \
+	$(srcdir)/Selection/testsuite-selection.at \
+	$(srcdir)/Selection/Atoms/testsuite-selection-all-atoms.at \
+	$(srcdir)/Selection/Atoms/testsuite-selection-atoms-by-element.at \
+	$(srcdir)/Selection/Atoms/testsuite-selection-atom-by-id.at \
+	$(srcdir)/Selection/Atoms/testsuite-selection-atoms-inside-cuboid.at \
+	$(srcdir)/Selection/Atoms/testsuite-selection-atoms-inside-sphere.at \
+	$(srcdir)/Selection/Atoms/testsuite-selection-atoms-of-molecule.at \
+	$(srcdir)/Selection/Atoms/testsuite-selection-clear-atoms.at \
+	$(srcdir)/Selection/Molecules/testsuite-selection-all-molecules.at \
+	$(srcdir)/Selection/Molecules/testsuite-selection-clear-molecules.at \
+	$(srcdir)/Selection/Molecules/testsuite-selection-molecules-by-formula.at \
+	$(srcdir)/Selection/Molecules/testsuite-selection-molecule-by-id.at \
+	$(srcdir)/Selection/Molecules/testsuite-selection-molecules-by-name.at \
+	$(srcdir)/Selection/Molecules/testsuite-selection-molecules-of-atoms.at \
+	$(srcdir)/testsuite-specifics.at \
+	$(srcdir)/testsuite-standard_options.at \
+	$(srcdir)/testsuite-tesselation.at
+
 
 max_jobs = 4
@@ -36,5 +64,5 @@
 
 AUTOTEST = $(AUTOM4TE) --language=autotest
-$(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/testsuite-*.at
+$(TESTSUITE): $(srcdir)/testsuite.at $(TESTSCRIPTS)
 	$(AUTOTEST) -I '$(srcdir)' -o $@.tmp $@.at
 	mv $@.tmp $@
Index: tests/regression/Selection/Atoms/1/post/allatoms.xyz
===================================================================
--- tests/regression/Selection/Atoms/1/post/allatoms.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/1/post/allatoms.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for select-all-atoms test
Index: tests/regression/Selection/Atoms/1/post/id0_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/1/post/id0_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/1/post/id0_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1030 @@
+1028
+	Created by molecuilder for unselect-all-atoms test
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/1/pre/box.xyz
===================================================================
--- tests/regression/Selection/Atoms/1/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/1/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder on Wed Dec  8 00:25:14 2010
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/2/post/allatomsinsidecuboid.xyz
===================================================================
--- tests/regression/Selection/Atoms/2/post/allatomsinsidecuboid.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/2/post/allatomsinsidecuboid.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,194 @@
+192
+	Created by molecuilder on Fri Dec 10 17:55:17 2010
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
Index: tests/regression/Selection/Atoms/2/post/allatomsoutsidecuboid.xyz
===================================================================
--- tests/regression/Selection/Atoms/2/post/allatomsoutsidecuboid.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/2/post/allatomsoutsidecuboid.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,839 @@
+837
+	Created by molecuilder on Fri Dec 10 17:42:57 2010
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/2/post/box.xyz
===================================================================
--- tests/regression/Selection/Atoms/2/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/2/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder on Wed Dec  8 00:25:14 2010
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/2/post/empty.xyz
===================================================================
--- tests/regression/Selection/Atoms/2/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/2/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for unselect-atoms-inside-cuboid test
Index: tests/regression/Selection/Atoms/2/pre/box.xyz
===================================================================
--- tests/regression/Selection/Atoms/2/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/2/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder on Wed Dec  8 00:25:14 2010
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/3/post/allatomsinsidesphere.xyz
===================================================================
--- tests/regression/Selection/Atoms/3/post/allatomsinsidesphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/3/post/allatomsinsidesphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,526 @@
+524
+	Created by molecuilder for select-atoms-inside-sphere test
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+H	3.61574	5.71429	3.86571
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+H	3.61574	11.4286	17.1429
+H	3.61574	14.2857	3.86571
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+H	6.47289	8.57143	1.00857
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+H	6.47289	11.4286	1.00857
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+H	9.33003	5.71429	1.00857
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+H	9.33003	14.2857	1.00857
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	14.2857
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	14.2857
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	14.2857
+O	17.1429	8.57143	3.36143
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	11.4286	3.36143
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	14.2857
Index: tests/regression/Selection/Atoms/3/post/allatomsoutsidesphere.xyz
===================================================================
--- tests/regression/Selection/Atoms/3/post/allatomsoutsidesphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/3/post/allatomsoutsidesphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,507 @@
+505
+	Created by molecuilder for select-atoms-inside-sphere test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+O	0	8.57143	11.9329
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+O	0	11.4286	11.9329
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+O	2.85714	2.85714	11.9329
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+O	2.85714	17.1429	11.9329
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	0
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	0
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	0
+H	9.33003	8.57143	0
+H	9.33003	11.4286	0
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	0
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+H	12.1872	8.57143	0
+H	12.1872	11.4286	0
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+H	15.0443	2.85714	15.2943
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+H	15.0443	5.71429	18.1514
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+H	15.0443	14.2857	18.1514
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+H	15.0443	17.1429	15.2943
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+H	17.9015	5.71429	15.2943
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+H	17.9015	14.2857	15.2943
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/3/post/empty.xyz
===================================================================
--- tests/regression/Selection/Atoms/3/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/3/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for unselect-atoms-inside-cuboid test
Index: tests/regression/Selection/Atoms/3/post/inversesphere.xyz
===================================================================
--- tests/regression/Selection/Atoms/3/post/inversesphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/3/post/inversesphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,507 @@
+505	
+	Created by molecuilder on
+O 0 0 0.504284
+H 0.758602 0 1.00857
+H 0.758602 0 0
+O 0 0 3.36143
+H 0.758602 0 3.86571
+H 0.758602 0 2.85714
+O 0 0 6.21857
+H 0.758602 0 6.72285
+H 0.758602 0 5.71429
+O 0 0 9.07571
+H 0.758602 0 9.58
+H 0.758602 0 8.57143
+O 0 0 11.9329
+H 0.758602 0 12.4371
+H 0.758602 0 11.4286
+O 0 0 14.79
+H 0.758602 0 15.2943
+H 0.758602 0 14.2857
+O 0 0 17.6471
+H 0.758602 0 18.1514
+H 0.758602 0 17.1429
+O 0 2.85714 0.504284
+H 0.758602 2.85714 1.00857
+H 0.758602 2.85714 0
+O 0 2.85714 3.36143
+H 0.758602 2.85714 3.86571
+H 0.758602 2.85714 2.85714
+O 0 2.85714 6.21857
+H 0.758602 2.85714 6.72285
+H 0.758602 2.85714 5.71429
+O 0 2.85714 9.07571
+H 0.758602 2.85714 9.58
+H 0.758602 2.85714 8.57143
+O 0 2.85714 11.9329
+H 0.758602 2.85714 12.4371
+H 0.758602 2.85714 11.4286
+O 0 2.85714 14.79
+H 0.758602 2.85714 15.2943
+H 0.758602 2.85714 14.2857
+O 0 2.85714 17.6471
+H 0.758602 2.85714 18.1514
+H 0.758602 2.85714 17.1429
+O 0 5.71429 0.504284
+H 0.758602 5.71429 1.00857
+H 0.758602 5.71429 0
+O 0 5.71429 3.36143
+H 0.758602 5.71429 3.86571
+H 0.758602 5.71429 2.85714
+O 0 5.71429 6.21857
+H 0.758602 5.71429 6.72285
+H 0.758602 5.71429 5.71429
+O 0 5.71429 9.07571
+H 0.758602 5.71429 9.58
+H 0.758602 5.71429 8.57143
+O 0 5.71429 11.9329
+H 0.758602 5.71429 12.4371
+H 0.758602 5.71429 11.4286
+O 0 5.71429 14.79
+H 0.758602 5.71429 15.2943
+H 0.758602 5.71429 14.2857
+O 0 5.71429 17.6471
+H 0.758602 5.71429 18.1514
+H 0.758602 5.71429 17.1429
+O 0 8.57143 0.504284
+H 0.758602 8.57143 1.00857
+H 0.758602 8.57143 0
+O 0 8.57143 3.36143
+H 0.758602 8.57143 3.86571
+H 0.758602 8.57143 2.85714
+O 0 8.57143 6.21857
+H 0.758602 8.57143 5.71429
+O 0 8.57143 9.07571
+O 0 8.57143 11.9329
+O 0 8.57143 14.79
+H 0.758602 8.57143 15.2943
+H 0.758602 8.57143 14.2857
+O 0 8.57143 17.6471
+H 0.758602 8.57143 18.1514
+H 0.758602 8.57143 17.1429
+O 0 11.4286 0.504284
+H 0.758602 11.4286 1.00857
+H 0.758602 11.4286 0
+O 0 11.4286 3.36143
+H 0.758602 11.4286 3.86571
+H 0.758602 11.4286 2.85714
+O 0 11.4286 6.21857
+H 0.758602 11.4286 5.71429
+O 0 11.4286 9.07571
+O 0 11.4286 11.9329
+O 0 11.4286 14.79
+H 0.758602 11.4286 15.2943
+H 0.758602 11.4286 14.2857
+O 0 11.4286 17.6471
+H 0.758602 11.4286 18.1514
+H 0.758602 11.4286 17.1429
+O 0 14.2857 0.504284
+H 0.758602 14.2857 1.00857
+H 0.758602 14.2857 0
+O 0 14.2857 3.36143
+H 0.758602 14.2857 3.86571
+H 0.758602 14.2857 2.85714
+O 0 14.2857 6.21857
+H 0.758602 14.2857 6.72285
+H 0.758602 14.2857 5.71429
+O 0 14.2857 9.07571
+H 0.758602 14.2857 9.58
+H 0.758602 14.2857 8.57143
+O 0 14.2857 11.9329
+H 0.758602 14.2857 12.4371
+H 0.758602 14.2857 11.4286
+O 0 14.2857 14.79
+H 0.758602 14.2857 15.2943
+H 0.758602 14.2857 14.2857
+O 0 14.2857 17.6471
+H 0.758602 14.2857 18.1514
+H 0.758602 14.2857 17.1429
+O 0 17.1429 0.504284
+H 0.758602 17.1429 1.00857
+H 0.758602 17.1429 0
+O 0 17.1429 3.36143
+H 0.758602 17.1429 3.86571
+H 0.758602 17.1429 2.85714
+O 0 17.1429 6.21857
+H 0.758602 17.1429 6.72285
+H 0.758602 17.1429 5.71429
+O 0 17.1429 9.07571
+H 0.758602 17.1429 9.58
+H 0.758602 17.1429 8.57143
+O 0 17.1429 11.9329
+H 0.758602 17.1429 12.4371
+H 0.758602 17.1429 11.4286
+O 0 17.1429 14.79
+H 0.758602 17.1429 15.2943
+H 0.758602 17.1429 14.2857
+O 0 17.1429 17.6471
+H 0.758602 17.1429 18.1514
+H 0.758602 17.1429 17.1429
+O 2.85714 0 0.504284
+H 3.61574 0 1.00857
+H 3.61574 0 0
+O 2.85714 0 3.36143
+H 3.61574 0 3.86571
+H 3.61574 0 2.85714
+O 2.85714 0 6.21857
+H 3.61574 0 6.72285
+H 3.61574 0 5.71429
+O 2.85714 0 9.07571
+H 3.61574 0 9.58
+H 3.61574 0 8.57143
+O 2.85714 0 11.9329
+H 3.61574 0 12.4371
+H 3.61574 0 11.4286
+O 2.85714 0 14.79
+H 3.61574 0 15.2943
+H 3.61574 0 14.2857
+O 2.85714 0 17.6471
+H 3.61574 0 18.1514
+H 3.61574 0 17.1429
+O 2.85714 2.85714 0.504284
+H 3.61574 2.85714 1.00857
+H 3.61574 2.85714 0
+O 2.85714 2.85714 3.36143
+H 3.61574 2.85714 3.86571
+H 3.61574 2.85714 2.85714
+O 2.85714 2.85714 6.21857
+H 3.61574 2.85714 6.72285
+H 3.61574 2.85714 5.71429
+O 2.85714 2.85714 9.07571
+O 2.85714 2.85714 11.9329
+O 2.85714 2.85714 14.79
+H 3.61574 2.85714 15.2943
+H 3.61574 2.85714 14.2857
+O 2.85714 2.85714 17.6471
+H 3.61574 2.85714 18.1514
+H 3.61574 2.85714 17.1429
+O 2.85714 5.71429 0.504284
+H 3.61574 5.71429 1.00857
+H 3.61574 5.71429 0
+O 2.85714 5.71429 3.36143
+H 3.61574 5.71429 2.85714
+O 2.85714 5.71429 17.6471
+H 3.61574 5.71429 18.1514
+H 3.61574 5.71429 17.1429
+O 2.85714 8.57143 0.504284
+H 3.61574 8.57143 1.00857
+H 3.61574 8.57143 0
+O 2.85714 8.57143 17.6471
+H 3.61574 8.57143 18.1514
+O 2.85714 11.4286 0.504284
+H 3.61574 11.4286 1.00857
+H 3.61574 11.4286 0
+O 2.85714 11.4286 17.6471
+H 3.61574 11.4286 18.1514
+O 2.85714 14.2857 0.504284
+H 3.61574 14.2857 1.00857
+H 3.61574 14.2857 0
+O 2.85714 14.2857 3.36143
+H 3.61574 14.2857 2.85714
+O 2.85714 14.2857 17.6471
+H 3.61574 14.2857 18.1514
+H 3.61574 14.2857 17.1429
+O 2.85714 17.1429 0.504284
+H 3.61574 17.1429 1.00857
+H 3.61574 17.1429 0
+O 2.85714 17.1429 3.36143
+H 3.61574 17.1429 3.86571
+H 3.61574 17.1429 2.85714
+O 2.85714 17.1429 6.21857
+H 3.61574 17.1429 6.72285
+H 3.61574 17.1429 5.71429
+O 2.85714 17.1429 9.07571
+O 2.85714 17.1429 11.9329
+O 2.85714 17.1429 14.79
+H 3.61574 17.1429 15.2943
+H 3.61574 17.1429 14.2857
+O 2.85714 17.1429 17.6471
+H 3.61574 17.1429 18.1514
+H 3.61574 17.1429 17.1429
+O 5.71429 0 0.504284
+H 6.47289 0 1.00857
+H 6.47289 0 0
+O 5.71429 0 3.36143
+H 6.47289 0 3.86571
+H 6.47289 0 2.85714
+O 5.71429 0 6.21857
+H 6.47289 0 6.72285
+H 6.47289 0 5.71429
+O 5.71429 0 9.07571
+H 6.47289 0 9.58
+H 6.47289 0 8.57143
+O 5.71429 0 11.9329
+H 6.47289 0 12.4371
+H 6.47289 0 11.4286
+O 5.71429 0 14.79
+H 6.47289 0 15.2943
+H 6.47289 0 14.2857
+O 5.71429 0 17.6471
+H 6.47289 0 18.1514
+H 6.47289 0 17.1429
+O 5.71429 2.85714 0.504284
+H 6.47289 2.85714 1.00857
+H 6.47289 2.85714 0
+O 5.71429 2.85714 3.36143
+H 6.47289 2.85714 3.86571
+H 6.47289 2.85714 2.85714
+O 5.71429 2.85714 17.6471
+H 6.47289 2.85714 18.1514
+H 6.47289 2.85714 17.1429
+O 5.71429 5.71429 0.504284
+H 6.47289 5.71429 1.00857
+H 6.47289 5.71429 0
+O 5.71429 8.57143 0.504284
+H 6.47289 8.57143 0
+O 5.71429 11.4286 0.504284
+H 6.47289 11.4286 0
+O 5.71429 14.2857 0.504284
+H 6.47289 14.2857 1.00857
+H 6.47289 14.2857 0
+O 5.71429 17.1429 0.504284
+H 6.47289 17.1429 1.00857
+H 6.47289 17.1429 0
+O 5.71429 17.1429 3.36143
+H 6.47289 17.1429 3.86571
+H 6.47289 17.1429 2.85714
+O 5.71429 17.1429 17.6471
+H 6.47289 17.1429 18.1514
+H 6.47289 17.1429 17.1429
+O 8.57143 0 0.504284
+H 9.33003 0 1.00857
+H 9.33003 0 0
+O 8.57143 0 3.36143
+H 9.33003 0 3.86571
+H 9.33003 0 2.85714
+O 8.57143 0 6.21857
+H 9.33003 0 6.72285
+H 9.33003 0 5.71429
+O 8.57143 0 9.07571
+H 9.33003 0 9.58
+H 9.33003 0 8.57143
+O 8.57143 0 11.9329
+H 9.33003 0 12.4371
+H 9.33003 0 11.4286
+O 8.57143 0 14.79
+H 9.33003 0 15.2943
+H 9.33003 0 14.2857
+O 8.57143 0 17.6471
+H 9.33003 0 18.1514
+H 9.33003 0 17.1429
+O 8.57143 2.85714 0.504284
+H 9.33003 2.85714 1.00857
+H 9.33003 2.85714 0
+H 9.33003 2.85714 2.85714
+O 8.57143 2.85714 17.6471
+H 9.33003 2.85714 18.1514
+H 9.33003 2.85714 17.1429
+O 8.57143 5.71429 0.504284
+H 9.33003 5.71429 0
+H 9.33003 8.57143 0
+H 9.33003 11.4286 0
+O 8.57143 14.2857 0.504284
+H 9.33003 14.2857 0
+O 8.57143 17.1429 0.504284
+H 9.33003 17.1429 1.00857
+H 9.33003 17.1429 0
+H 9.33003 17.1429 2.85714
+O 8.57143 17.1429 17.6471
+H 9.33003 17.1429 18.1514
+H 9.33003 17.1429 17.1429
+O 11.4286 0 0.504284
+H 12.1872 0 1.00857
+H 12.1872 0 0
+O 11.4286 0 3.36143
+H 12.1872 0 3.86571
+H 12.1872 0 2.85714
+O 11.4286 0 6.21857
+H 12.1872 0 6.72285
+H 12.1872 0 5.71429
+O 11.4286 0 9.07571
+H 12.1872 0 9.58
+H 12.1872 0 8.57143
+O 11.4286 0 11.9329
+H 12.1872 0 12.4371
+H 12.1872 0 11.4286
+O 11.4286 0 14.79
+H 12.1872 0 15.2943
+H 12.1872 0 14.2857
+O 11.4286 0 17.6471
+H 12.1872 0 18.1514
+H 12.1872 0 17.1429
+O 11.4286 2.85714 0.504284
+H 12.1872 2.85714 1.00857
+H 12.1872 2.85714 0
+H 12.1872 2.85714 2.85714
+O 11.4286 2.85714 17.6471
+H 12.1872 2.85714 18.1514
+H 12.1872 2.85714 17.1429
+O 11.4286 5.71429 0.504284
+H 12.1872 5.71429 1.00857
+H 12.1872 5.71429 0
+H 12.1872 8.57143 0
+H 12.1872 11.4286 0
+O 11.4286 14.2857 0.504284
+H 12.1872 14.2857 1.00857
+H 12.1872 14.2857 0
+O 11.4286 17.1429 0.504284
+H 12.1872 17.1429 1.00857
+H 12.1872 17.1429 0
+H 12.1872 17.1429 2.85714
+O 11.4286 17.1429 17.6471
+H 12.1872 17.1429 18.1514
+H 12.1872 17.1429 17.1429
+O 14.2857 0 0.504284
+H 15.0443 0 1.00857
+H 15.0443 0 0
+O 14.2857 0 3.36143
+H 15.0443 0 3.86571
+H 15.0443 0 2.85714
+O 14.2857 0 6.21857
+H 15.0443 0 6.72285
+H 15.0443 0 5.71429
+O 14.2857 0 9.07571
+H 15.0443 0 9.58
+H 15.0443 0 8.57143
+O 14.2857 0 11.9329
+H 15.0443 0 12.4371
+H 15.0443 0 11.4286
+O 14.2857 0 14.79
+H 15.0443 0 15.2943
+H 15.0443 0 14.2857
+O 14.2857 0 17.6471
+H 15.0443 0 18.1514
+H 15.0443 0 17.1429
+O 14.2857 2.85714 0.504284
+H 15.0443 2.85714 1.00857
+H 15.0443 2.85714 0
+O 14.2857 2.85714 3.36143
+H 15.0443 2.85714 3.86571
+H 15.0443 2.85714 2.85714
+H 15.0443 2.85714 15.2943
+O 14.2857 2.85714 17.6471
+H 15.0443 2.85714 18.1514
+H 15.0443 2.85714 17.1429
+O 14.2857 5.71429 0.504284
+H 15.0443 5.71429 1.00857
+H 15.0443 5.71429 0
+H 15.0443 5.71429 18.1514
+O 14.2857 8.57143 0.504284
+H 15.0443 8.57143 1.00857
+H 15.0443 8.57143 0
+O 14.2857 11.4286 0.504284
+H 15.0443 11.4286 1.00857
+H 15.0443 11.4286 0
+O 14.2857 14.2857 0.504284
+H 15.0443 14.2857 1.00857
+H 15.0443 14.2857 0
+H 15.0443 14.2857 18.1514
+O 14.2857 17.1429 0.504284
+H 15.0443 17.1429 1.00857
+H 15.0443 17.1429 0
+O 14.2857 17.1429 3.36143
+H 15.0443 17.1429 3.86571
+H 15.0443 17.1429 2.85714
+H 15.0443 17.1429 15.2943
+O 14.2857 17.1429 17.6471
+H 15.0443 17.1429 18.1514
+H 15.0443 17.1429 17.1429
+O 17.1429 0 0.504284
+H 17.9015 0 1.00857
+H 17.9015 0 0
+O 17.1429 0 3.36143
+H 17.9015 0 3.86571
+H 17.9015 0 2.85714
+O 17.1429 0 6.21857
+H 17.9015 0 6.72285
+H 17.9015 0 5.71429
+O 17.1429 0 9.07571
+H 17.9015 0 9.58
+H 17.9015 0 8.57143
+O 17.1429 0 11.9329
+H 17.9015 0 12.4371
+H 17.9015 0 11.4286
+O 17.1429 0 14.79
+H 17.9015 0 15.2943
+H 17.9015 0 14.2857
+O 17.1429 0 17.6471
+H 17.9015 0 18.1514
+H 17.9015 0 17.1429
+O 17.1429 2.85714 0.504284
+H 17.9015 2.85714 1.00857
+H 17.9015 2.85714 0
+O 17.1429 2.85714 3.36143
+H 17.9015 2.85714 3.86571
+H 17.9015 2.85714 2.85714
+O 17.1429 2.85714 6.21857
+H 17.9015 2.85714 6.72285
+H 17.9015 2.85714 5.71429
+O 17.1429 2.85714 9.07571
+H 17.9015 2.85714 9.58
+H 17.9015 2.85714 8.57143
+O 17.1429 2.85714 11.9329
+H 17.9015 2.85714 12.4371
+H 17.9015 2.85714 11.4286
+O 17.1429 2.85714 14.79
+H 17.9015 2.85714 15.2943
+H 17.9015 2.85714 14.2857
+O 17.1429 2.85714 17.6471
+H 17.9015 2.85714 18.1514
+H 17.9015 2.85714 17.1429
+O 17.1429 5.71429 0.504284
+H 17.9015 5.71429 1.00857
+H 17.9015 5.71429 0
+O 17.1429 5.71429 3.36143
+H 17.9015 5.71429 3.86571
+H 17.9015 5.71429 2.85714
+H 17.9015 5.71429 15.2943
+O 17.1429 5.71429 17.6471
+H 17.9015 5.71429 18.1514
+H 17.9015 5.71429 17.1429
+O 17.1429 8.57143 0.504284
+H 17.9015 8.57143 1.00857
+H 17.9015 8.57143 0
+H 17.9015 8.57143 3.86571
+H 17.9015 8.57143 2.85714
+O 17.1429 8.57143 17.6471
+H 17.9015 8.57143 18.1514
+H 17.9015 8.57143 17.1429
+O 17.1429 11.4286 0.504284
+H 17.9015 11.4286 1.00857
+H 17.9015 11.4286 0
+H 17.9015 11.4286 3.86571
+H 17.9015 11.4286 2.85714
+O 17.1429 11.4286 17.6471
+H 17.9015 11.4286 18.1514
+H 17.9015 11.4286 17.1429
+O 17.1429 14.2857 0.504284
+H 17.9015 14.2857 1.00857
+H 17.9015 14.2857 0
+O 17.1429 14.2857 3.36143
+H 17.9015 14.2857 3.86571
+H 17.9015 14.2857 2.85714
+H 17.9015 14.2857 15.2943
+O 17.1429 14.2857 17.6471
+H 17.9015 14.2857 18.1514
+H 17.9015 14.2857 17.1429
+O 17.1429 17.1429 0.504284
+H 17.9015 17.1429 1.00857
+H 17.9015 17.1429 0
+O 17.1429 17.1429 3.36143
+H 17.9015 17.1429 3.86571
+H 17.9015 17.1429 2.85714
+O 17.1429 17.1429 6.21857
+H 17.9015 17.1429 6.72285
+H 17.9015 17.1429 5.71429
+O 17.1429 17.1429 9.07571
+H 17.9015 17.1429 9.58
+H 17.9015 17.1429 8.57143
+O 17.1429 17.1429 11.9329
+H 17.9015 17.1429 12.4371
+H 17.9015 17.1429 11.4286
+O 17.1429 17.1429 14.79
+H 17.9015 17.1429 15.2943
+H 17.9015 17.1429 14.2857
+O 17.1429 17.1429 17.6471
+H 17.9015 17.1429 18.1514
+H 17.9015 17.1429 17.1429
Index: tests/regression/Selection/Atoms/3/post/sphere.xyz
===================================================================
--- tests/regression/Selection/Atoms/3/post/sphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/3/post/sphere.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,526 @@
+524
+	Created by Molecuilder for select-atoms-inside-sphere test
+H 0.758602 8.57143 6.72285
+H 0.758602 8.57143 9.58
+H 0.758602 8.57143 8.57143
+H 0.758602 8.57143 12.4371
+H 0.758602 8.57143 11.4286
+H 0.758602 11.4286 6.72285
+H 0.758602 11.4286 9.58
+H 0.758602 11.4286 8.57143
+H 0.758602 11.4286 12.4371
+H 0.758602 11.4286 11.4286
+H 3.61574 2.85714 9.58
+H 3.61574 2.85714 8.57143
+H 3.61574 2.85714 12.4371
+H 3.61574 2.85714 11.4286
+H 3.61574 5.71429 3.86571
+O 2.85714 5.71429 6.21857
+H 3.61574 5.71429 6.72285
+H 3.61574 5.71429 5.71429
+O 2.85714 5.71429 9.07571
+H 3.61574 5.71429 9.58
+H 3.61574 5.71429 8.57143
+O 2.85714 5.71429 11.9329
+H 3.61574 5.71429 12.4371
+H 3.61574 5.71429 11.4286
+O 2.85714 5.71429 14.79
+H 3.61574 5.71429 15.2943
+H 3.61574 5.71429 14.2857
+O 2.85714 8.57143 3.36143
+H 3.61574 8.57143 3.86571
+H 3.61574 8.57143 2.85714
+O 2.85714 8.57143 6.21857
+H 3.61574 8.57143 6.72285
+H 3.61574 8.57143 5.71429
+O 2.85714 8.57143 9.07571
+H 3.61574 8.57143 9.58
+H 3.61574 8.57143 8.57143
+O 2.85714 8.57143 11.9329
+H 3.61574 8.57143 12.4371
+H 3.61574 8.57143 11.4286
+O 2.85714 8.57143 14.79
+H 3.61574 8.57143 15.2943
+H 3.61574 8.57143 14.2857
+H 3.61574 8.57143 17.1429
+O 2.85714 11.4286 3.36143
+H 3.61574 11.4286 3.86571
+H 3.61574 11.4286 2.85714
+O 2.85714 11.4286 6.21857
+H 3.61574 11.4286 6.72285
+H 3.61574 11.4286 5.71429
+O 2.85714 11.4286 9.07571
+H 3.61574 11.4286 9.58
+H 3.61574 11.4286 8.57143
+O 2.85714 11.4286 11.9329
+H 3.61574 11.4286 12.4371
+H 3.61574 11.4286 11.4286
+O 2.85714 11.4286 14.79
+H 3.61574 11.4286 15.2943
+H 3.61574 11.4286 14.2857
+H 3.61574 11.4286 17.1429
+H 3.61574 14.2857 3.86571
+O 2.85714 14.2857 6.21857
+H 3.61574 14.2857 6.72285
+H 3.61574 14.2857 5.71429
+O 2.85714 14.2857 9.07571
+H 3.61574 14.2857 9.58
+H 3.61574 14.2857 8.57143
+O 2.85714 14.2857 11.9329
+H 3.61574 14.2857 12.4371
+H 3.61574 14.2857 11.4286
+O 2.85714 14.2857 14.79
+H 3.61574 14.2857 15.2943
+H 3.61574 14.2857 14.2857
+H 3.61574 17.1429 9.58
+H 3.61574 17.1429 8.57143
+H 3.61574 17.1429 12.4371
+H 3.61574 17.1429 11.4286
+O 5.71429 2.85714 6.21857
+H 6.47289 2.85714 6.72285
+H 6.47289 2.85714 5.71429
+O 5.71429 2.85714 9.07571
+H 6.47289 2.85714 9.58
+H 6.47289 2.85714 8.57143
+O 5.71429 2.85714 11.9329
+H 6.47289 2.85714 12.4371
+H 6.47289 2.85714 11.4286
+O 5.71429 2.85714 14.79
+H 6.47289 2.85714 15.2943
+H 6.47289 2.85714 14.2857
+O 5.71429 5.71429 3.36143
+H 6.47289 5.71429 3.86571
+H 6.47289 5.71429 2.85714
+O 5.71429 5.71429 6.21857
+H 6.47289 5.71429 6.72285
+H 6.47289 5.71429 5.71429
+O 5.71429 5.71429 9.07571
+H 6.47289 5.71429 9.58
+H 6.47289 5.71429 8.57143
+O 5.71429 5.71429 11.9329
+H 6.47289 5.71429 12.4371
+H 6.47289 5.71429 11.4286
+O 5.71429 5.71429 14.79
+H 6.47289 5.71429 15.2943
+H 6.47289 5.71429 14.2857
+O 5.71429 5.71429 17.6471
+H 6.47289 5.71429 18.1514
+H 6.47289 5.71429 17.1429
+H 6.47289 8.57143 1.00857
+O 5.71429 8.57143 3.36143
+H 6.47289 8.57143 3.86571
+H 6.47289 8.57143 2.85714
+O 5.71429 8.57143 6.21857
+H 6.47289 8.57143 6.72285
+H 6.47289 8.57143 5.71429
+O 5.71429 8.57143 9.07571
+H 6.47289 8.57143 9.58
+H 6.47289 8.57143 8.57143
+O 5.71429 8.57143 11.9329
+H 6.47289 8.57143 12.4371
+H 6.47289 8.57143 11.4286
+O 5.71429 8.57143 14.79
+H 6.47289 8.57143 15.2943
+H 6.47289 8.57143 14.2857
+O 5.71429 8.57143 17.6471
+H 6.47289 8.57143 18.1514
+H 6.47289 8.57143 17.1429
+H 6.47289 11.4286 1.00857
+O 5.71429 11.4286 3.36143
+H 6.47289 11.4286 3.86571
+H 6.47289 11.4286 2.85714
+O 5.71429 11.4286 6.21857
+H 6.47289 11.4286 6.72285
+H 6.47289 11.4286 5.71429
+O 5.71429 11.4286 9.07571
+H 6.47289 11.4286 9.58
+H 6.47289 11.4286 8.57143
+O 5.71429 11.4286 11.9329
+H 6.47289 11.4286 12.4371
+H 6.47289 11.4286 11.4286
+O 5.71429 11.4286 14.79
+H 6.47289 11.4286 15.2943
+H 6.47289 11.4286 14.2857
+O 5.71429 11.4286 17.6471
+H 6.47289 11.4286 18.1514
+H 6.47289 11.4286 17.1429
+O 5.71429 14.2857 3.36143
+H 6.47289 14.2857 3.86571
+H 6.47289 14.2857 2.85714
+O 5.71429 14.2857 6.21857
+H 6.47289 14.2857 6.72285
+H 6.47289 14.2857 5.71429
+O 5.71429 14.2857 9.07571
+H 6.47289 14.2857 9.58
+H 6.47289 14.2857 8.57143
+O 5.71429 14.2857 11.9329
+H 6.47289 14.2857 12.4371
+H 6.47289 14.2857 11.4286
+O 5.71429 14.2857 14.79
+H 6.47289 14.2857 15.2943
+H 6.47289 14.2857 14.2857
+O 5.71429 14.2857 17.6471
+H 6.47289 14.2857 18.1514
+H 6.47289 14.2857 17.1429
+O 5.71429 17.1429 6.21857
+H 6.47289 17.1429 6.72285
+H 6.47289 17.1429 5.71429
+O 5.71429 17.1429 9.07571
+H 6.47289 17.1429 9.58
+H 6.47289 17.1429 8.57143
+O 5.71429 17.1429 11.9329
+H 6.47289 17.1429 12.4371
+H 6.47289 17.1429 11.4286
+O 5.71429 17.1429 14.79
+H 6.47289 17.1429 15.2943
+H 6.47289 17.1429 14.2857
+O 8.57143 2.85714 3.36143
+H 9.33003 2.85714 3.86571
+O 8.57143 2.85714 6.21857
+H 9.33003 2.85714 6.72285
+H 9.33003 2.85714 5.71429
+O 8.57143 2.85714 9.07571
+H 9.33003 2.85714 9.58
+H 9.33003 2.85714 8.57143
+O 8.57143 2.85714 11.9329
+H 9.33003 2.85714 12.4371
+H 9.33003 2.85714 11.4286
+O 8.57143 2.85714 14.79
+H 9.33003 2.85714 15.2943
+H 9.33003 2.85714 14.2857
+H 9.33003 5.71429 1.00857
+O 8.57143 5.71429 3.36143
+H 9.33003 5.71429 3.86571
+H 9.33003 5.71429 2.85714
+O 8.57143 5.71429 6.21857
+H 9.33003 5.71429 6.72285
+H 9.33003 5.71429 5.71429
+O 8.57143 5.71429 9.07571
+H 9.33003 5.71429 9.58
+H 9.33003 5.71429 8.57143
+O 8.57143 5.71429 11.9329
+H 9.33003 5.71429 12.4371
+H 9.33003 5.71429 11.4286
+O 8.57143 5.71429 14.79
+H 9.33003 5.71429 15.2943
+H 9.33003 5.71429 14.2857
+O 8.57143 5.71429 17.6471
+H 9.33003 5.71429 18.1514
+H 9.33003 5.71429 17.1429
+O 8.57143 8.57143 0.504284
+H 9.33003 8.57143 1.00857
+O 8.57143 8.57143 3.36143
+H 9.33003 8.57143 3.86571
+H 9.33003 8.57143 2.85714
+O 8.57143 8.57143 6.21857
+H 9.33003 8.57143 6.72285
+H 9.33003 8.57143 5.71429
+O 8.57143 8.57143 9.07571
+H 9.33003 8.57143 9.58
+H 9.33003 8.57143 8.57143
+O 8.57143 8.57143 11.9329
+H 9.33003 8.57143 12.4371
+H 9.33003 8.57143 11.4286
+O 8.57143 8.57143 14.79
+H 9.33003 8.57143 15.2943
+H 9.33003 8.57143 14.2857
+O 8.57143 8.57143 17.6471
+H 9.33003 8.57143 18.1514
+H 9.33003 8.57143 17.1429
+O 8.57143 11.4286 0.504284
+H 9.33003 11.4286 1.00857
+O 8.57143 11.4286 3.36143
+H 9.33003 11.4286 3.86571
+H 9.33003 11.4286 2.85714
+O 8.57143 11.4286 6.21857
+H 9.33003 11.4286 6.72285
+H 9.33003 11.4286 5.71429
+O 8.57143 11.4286 9.07571
+H 9.33003 11.4286 9.58
+H 9.33003 11.4286 8.57143
+O 8.57143 11.4286 11.9329
+H 9.33003 11.4286 12.4371
+H 9.33003 11.4286 11.4286
+O 8.57143 11.4286 14.79
+H 9.33003 11.4286 15.2943
+H 9.33003 11.4286 14.2857
+O 8.57143 11.4286 17.6471
+H 9.33003 11.4286 18.1514
+H 9.33003 11.4286 17.1429
+H 9.33003 14.2857 1.00857
+O 8.57143 14.2857 3.36143
+H 9.33003 14.2857 3.86571
+H 9.33003 14.2857 2.85714
+O 8.57143 14.2857 6.21857
+H 9.33003 14.2857 6.72285
+H 9.33003 14.2857 5.71429
+O 8.57143 14.2857 9.07571
+H 9.33003 14.2857 9.58
+H 9.33003 14.2857 8.57143
+O 8.57143 14.2857 11.9329
+H 9.33003 14.2857 12.4371
+H 9.33003 14.2857 11.4286
+O 8.57143 14.2857 14.79
+H 9.33003 14.2857 15.2943
+H 9.33003 14.2857 14.2857
+O 8.57143 14.2857 17.6471
+H 9.33003 14.2857 18.1514
+H 9.33003 14.2857 17.1429
+O 8.57143 17.1429 3.36143
+H 9.33003 17.1429 3.86571
+O 8.57143 17.1429 6.21857
+H 9.33003 17.1429 6.72285
+H 9.33003 17.1429 5.71429
+O 8.57143 17.1429 9.07571
+H 9.33003 17.1429 9.58
+H 9.33003 17.1429 8.57143
+O 8.57143 17.1429 11.9329
+H 9.33003 17.1429 12.4371
+H 9.33003 17.1429 11.4286
+O 8.57143 17.1429 14.79
+H 9.33003 17.1429 15.2943
+H 9.33003 17.1429 14.2857
+O 11.4286 2.85714 3.36143
+H 12.1872 2.85714 3.86571
+O 11.4286 2.85714 6.21857
+H 12.1872 2.85714 6.72285
+H 12.1872 2.85714 5.71429
+O 11.4286 2.85714 9.07571
+H 12.1872 2.85714 9.58
+H 12.1872 2.85714 8.57143
+O 11.4286 2.85714 11.9329
+H 12.1872 2.85714 12.4371
+H 12.1872 2.85714 11.4286
+O 11.4286 2.85714 14.79
+H 12.1872 2.85714 15.2943
+H 12.1872 2.85714 14.2857
+O 11.4286 5.71429 3.36143
+H 12.1872 5.71429 3.86571
+H 12.1872 5.71429 2.85714
+O 11.4286 5.71429 6.21857
+H 12.1872 5.71429 6.72285
+H 12.1872 5.71429 5.71429
+O 11.4286 5.71429 9.07571
+H 12.1872 5.71429 9.58
+H 12.1872 5.71429 8.57143
+O 11.4286 5.71429 11.9329
+H 12.1872 5.71429 12.4371
+H 12.1872 5.71429 11.4286
+O 11.4286 5.71429 14.79
+H 12.1872 5.71429 15.2943
+H 12.1872 5.71429 14.2857
+O 11.4286 5.71429 17.6471
+H 12.1872 5.71429 18.1514
+H 12.1872 5.71429 17.1429
+O 11.4286 8.57143 0.504284
+H 12.1872 8.57143 1.00857
+O 11.4286 8.57143 3.36143
+H 12.1872 8.57143 3.86571
+H 12.1872 8.57143 2.85714
+O 11.4286 8.57143 6.21857
+H 12.1872 8.57143 6.72285
+H 12.1872 8.57143 5.71429
+O 11.4286 8.57143 9.07571
+H 12.1872 8.57143 9.58
+H 12.1872 8.57143 8.57143
+O 11.4286 8.57143 11.9329
+H 12.1872 8.57143 12.4371
+H 12.1872 8.57143 11.4286
+O 11.4286 8.57143 14.79
+H 12.1872 8.57143 15.2943
+H 12.1872 8.57143 14.2857
+O 11.4286 8.57143 17.6471
+H 12.1872 8.57143 18.1514
+H 12.1872 8.57143 17.1429
+O 11.4286 11.4286 0.504284
+H 12.1872 11.4286 1.00857
+O 11.4286 11.4286 3.36143
+H 12.1872 11.4286 3.86571
+H 12.1872 11.4286 2.85714
+O 11.4286 11.4286 6.21857
+H 12.1872 11.4286 6.72285
+H 12.1872 11.4286 5.71429
+O 11.4286 11.4286 9.07571
+H 12.1872 11.4286 9.58
+H 12.1872 11.4286 8.57143
+O 11.4286 11.4286 11.9329
+H 12.1872 11.4286 12.4371
+H 12.1872 11.4286 11.4286
+O 11.4286 11.4286 14.79
+H 12.1872 11.4286 15.2943
+H 12.1872 11.4286 14.2857
+O 11.4286 11.4286 17.6471
+H 12.1872 11.4286 18.1514
+H 12.1872 11.4286 17.1429
+O 11.4286 14.2857 3.36143
+H 12.1872 14.2857 3.86571
+H 12.1872 14.2857 2.85714
+O 11.4286 14.2857 6.21857
+H 12.1872 14.2857 6.72285
+H 12.1872 14.2857 5.71429
+O 11.4286 14.2857 9.07571
+H 12.1872 14.2857 9.58
+H 12.1872 14.2857 8.57143
+O 11.4286 14.2857 11.9329
+H 12.1872 14.2857 12.4371
+H 12.1872 14.2857 11.4286
+O 11.4286 14.2857 14.79
+H 12.1872 14.2857 15.2943
+H 12.1872 14.2857 14.2857
+O 11.4286 14.2857 17.6471
+H 12.1872 14.2857 18.1514
+H 12.1872 14.2857 17.1429
+O 11.4286 17.1429 3.36143
+H 12.1872 17.1429 3.86571
+O 11.4286 17.1429 6.21857
+H 12.1872 17.1429 6.72285
+H 12.1872 17.1429 5.71429
+O 11.4286 17.1429 9.07571
+H 12.1872 17.1429 9.58
+H 12.1872 17.1429 8.57143
+O 11.4286 17.1429 11.9329
+H 12.1872 17.1429 12.4371
+H 12.1872 17.1429 11.4286
+O 11.4286 17.1429 14.79
+H 12.1872 17.1429 15.2943
+H 12.1872 17.1429 14.2857
+O 14.2857 2.85714 6.21857
+H 15.0443 2.85714 6.72285
+H 15.0443 2.85714 5.71429
+O 14.2857 2.85714 9.07571
+H 15.0443 2.85714 9.58
+H 15.0443 2.85714 8.57143
+O 14.2857 2.85714 11.9329
+H 15.0443 2.85714 12.4371
+H 15.0443 2.85714 11.4286
+O 14.2857 2.85714 14.79
+H 15.0443 2.85714 14.2857
+O 14.2857 5.71429 3.36143
+H 15.0443 5.71429 3.86571
+H 15.0443 5.71429 2.85714
+O 14.2857 5.71429 6.21857
+H 15.0443 5.71429 6.72285
+H 15.0443 5.71429 5.71429
+O 14.2857 5.71429 9.07571
+H 15.0443 5.71429 9.58
+H 15.0443 5.71429 8.57143
+O 14.2857 5.71429 11.9329
+H 15.0443 5.71429 12.4371
+H 15.0443 5.71429 11.4286
+O 14.2857 5.71429 14.79
+H 15.0443 5.71429 15.2943
+H 15.0443 5.71429 14.2857
+O 14.2857 5.71429 17.6471
+H 15.0443 5.71429 17.1429
+O 14.2857 8.57143 3.36143
+H 15.0443 8.57143 3.86571
+H 15.0443 8.57143 2.85714
+O 14.2857 8.57143 6.21857
+H 15.0443 8.57143 6.72285
+H 15.0443 8.57143 5.71429
+O 14.2857 8.57143 9.07571
+H 15.0443 8.57143 9.58
+H 15.0443 8.57143 8.57143
+O 14.2857 8.57143 11.9329
+H 15.0443 8.57143 12.4371
+H 15.0443 8.57143 11.4286
+O 14.2857 8.57143 14.79
+H 15.0443 8.57143 15.2943
+H 15.0443 8.57143 14.2857
+O 14.2857 8.57143 17.6471
+H 15.0443 8.57143 18.1514
+H 15.0443 8.57143 17.1429
+O 14.2857 11.4286 3.36143
+H 15.0443 11.4286 3.86571
+H 15.0443 11.4286 2.85714
+O 14.2857 11.4286 6.21857
+H 15.0443 11.4286 6.72285
+H 15.0443 11.4286 5.71429
+O 14.2857 11.4286 9.07571
+H 15.0443 11.4286 9.58
+H 15.0443 11.4286 8.57143
+O 14.2857 11.4286 11.9329
+H 15.0443 11.4286 12.4371
+H 15.0443 11.4286 11.4286
+O 14.2857 11.4286 14.79
+H 15.0443 11.4286 15.2943
+H 15.0443 11.4286 14.2857
+O 14.2857 11.4286 17.6471
+H 15.0443 11.4286 18.1514
+H 15.0443 11.4286 17.1429
+O 14.2857 14.2857 3.36143
+H 15.0443 14.2857 3.86571
+H 15.0443 14.2857 2.85714
+O 14.2857 14.2857 6.21857
+H 15.0443 14.2857 6.72285
+H 15.0443 14.2857 5.71429
+O 14.2857 14.2857 9.07571
+H 15.0443 14.2857 9.58
+H 15.0443 14.2857 8.57143
+O 14.2857 14.2857 11.9329
+H 15.0443 14.2857 12.4371
+H 15.0443 14.2857 11.4286
+O 14.2857 14.2857 14.79
+H 15.0443 14.2857 15.2943
+H 15.0443 14.2857 14.2857
+O 14.2857 14.2857 17.6471
+H 15.0443 14.2857 17.1429
+O 14.2857 17.1429 6.21857
+H 15.0443 17.1429 6.72285
+H 15.0443 17.1429 5.71429
+O 14.2857 17.1429 9.07571
+H 15.0443 17.1429 9.58
+H 15.0443 17.1429 8.57143
+O 14.2857 17.1429 11.9329
+H 15.0443 17.1429 12.4371
+H 15.0443 17.1429 11.4286
+O 14.2857 17.1429 14.79
+H 15.0443 17.1429 14.2857
+O 17.1429 5.71429 6.21857
+H 17.9015 5.71429 6.72285
+H 17.9015 5.71429 5.71429
+O 17.1429 5.71429 9.07571
+H 17.9015 5.71429 9.58
+H 17.9015 5.71429 8.57143
+O 17.1429 5.71429 11.9329
+H 17.9015 5.71429 12.4371
+H 17.9015 5.71429 11.4286
+O 17.1429 5.71429 14.79
+H 17.9015 5.71429 14.2857
+O 17.1429 8.57143 3.36143
+O 17.1429 8.57143 6.21857
+H 17.9015 8.57143 6.72285
+H 17.9015 8.57143 5.71429
+O 17.1429 8.57143 9.07571
+H 17.9015 8.57143 9.58
+H 17.9015 8.57143 8.57143
+O 17.1429 8.57143 11.9329
+H 17.9015 8.57143 12.4371
+H 17.9015 8.57143 11.4286
+O 17.1429 8.57143 14.79
+H 17.9015 8.57143 15.2943
+H 17.9015 8.57143 14.2857
+O 17.1429 11.4286 3.36143
+O 17.1429 11.4286 6.21857
+H 17.9015 11.4286 6.72285
+H 17.9015 11.4286 5.71429
+O 17.1429 11.4286 9.07571
+H 17.9015 11.4286 9.58
+H 17.9015 11.4286 8.57143
+O 17.1429 11.4286 11.9329
+H 17.9015 11.4286 12.4371
+H 17.9015 11.4286 11.4286
+O 17.1429 11.4286 14.79
+H 17.9015 11.4286 15.2943
+H 17.9015 11.4286 14.2857
+O 17.1429 14.2857 6.21857
+H 17.9015 14.2857 6.72285
+H 17.9015 14.2857 5.71429
+O 17.1429 14.2857 9.07571
+H 17.9015 14.2857 9.58
+H 17.9015 14.2857 8.57143
+O 17.1429 14.2857 11.9329
+H 17.9015 14.2857 12.4371
+H 17.9015 14.2857 11.4286
+O 17.1429 14.2857 14.79
+H 17.9015 14.2857 14.2857
Index: tests/regression/Selection/Atoms/3/post/test.xyz
===================================================================
--- tests/regression/Selection/Atoms/3/post/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/3/post/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,505 @@
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+O	0	8.57143	11.9329
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+O	0	11.4286	11.9329
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+O	2.85714	2.85714	11.9329
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+O	2.85714	17.1429	11.9329
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	0
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	0
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	0
+H	9.33003	8.57143	0
+H	9.33003	11.4286	0
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	0
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+H	12.1872	8.57143	0
+H	12.1872	11.4286	0
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+H	15.0443	2.85714	15.2943
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+H	15.0443	5.71429	18.1514
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+H	15.0443	14.2857	18.1514
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+H	15.0443	17.1429	15.2943
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+H	17.9015	5.71429	15.2943
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+H	17.9015	14.2857	15.2943
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/3/pre/box.xyz
===================================================================
--- tests/regression/Selection/Atoms/3/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/3/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder on Wed Dec  8 00:25:14 2010
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/4/post/empty.xyz
===================================================================
--- tests/regression/Selection/Atoms/4/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/4/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for unselect-atoms-inside-cuboid test
Index: tests/regression/Selection/Atoms/4/post/molecule0.xyz
===================================================================
--- tests/regression/Selection/Atoms/4/post/molecule0.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/4/post/molecule0.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,5 @@
+3
+	Created by molecuilder for select-molecules-atoms test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
Index: tests/regression/Selection/Atoms/4/post/molecule1.xyz
===================================================================
--- tests/regression/Selection/Atoms/4/post/molecule1.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/4/post/molecule1.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,5 @@
+3
+	Created by molecuilder for select-molecules-atoms test
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
Index: tests/regression/Selection/Atoms/4/pre/test.xyz
===================================================================
--- tests/regression/Selection/Atoms/4/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/4/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,8 @@
+6
+	Created by molecuilder for select-molecules-atoms test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
Index: tests/regression/Selection/Atoms/5/post/test-Be_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/5/post/test-Be_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/5/post/test-Be_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,11 @@
+9
+	Created by molecuilder for select-by-element test
+H	0	0	0
+He	0	0	1
+Li	0	1	0
+B	0	1	2
+C	0	1	3
+N	0	1	4
+O	0	1	5
+F	0	1	6
+Ne	0	1	7
Index: tests/regression/Selection/Atoms/5/post/test-H_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/5/post/test-H_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/5/post/test-H_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,11 @@
+9
+	Created by molecuilder for select-by-element test
+He	0	0	1
+Li	0	1	0
+Be	0	1	1
+B	0	1	2
+C	0	1	3
+N	0	1	4
+O	0	1	5
+F	0	1	6
+Ne	0	1	7
Index: tests/regression/Selection/Atoms/5/post/test.xyz
===================================================================
--- tests/regression/Selection/Atoms/5/post/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/5/post/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,12 @@
+10
+	Created by molecuilder for select-by-element test
+H	0	0	0
+He	0	0	1
+Li	0	1	0
+Be	0	1	1
+B	0	1	2
+C	0	1	3
+N	0	1	4
+O	0	1	5
+F	0	1	6
+Ne	0	1	7
Index: tests/regression/Selection/Atoms/5/pre/test.xyz
===================================================================
--- tests/regression/Selection/Atoms/5/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/5/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,12 @@
+10
+	Created by molecuilder for select-by-element test
+H	0	0	0
+He	0	0	1
+Li	0	1	0
+Be	0	1	1
+B	0	1	2
+C	0	1	3
+N	0	1	4
+O	0	1	5
+F	0	1	6
+Ne	0	1	7
Index: tests/regression/Selection/Atoms/6/post/empty.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for unselect-atom-by-id test
Index: tests/regression/Selection/Atoms/6/post/id0_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id0_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id0_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	1
+H	0	1	0
+H	0	1	1
+H	1	0	0
+H	1	0	1
+H	1	1	0
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/post/id0_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id0_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id0_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	0	0	0
Index: tests/regression/Selection/Atoms/6/post/id1_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id1_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id1_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	1	0
+H	0	1	1
+H	1	0	0
+H	1	0	1
+H	1	1	0
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/post/id1_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id1_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id1_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	0	0	1
Index: tests/regression/Selection/Atoms/6/post/id2_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id2_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id2_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	0	1
+H	0	1	1
+H	1	0	0
+H	1	0	1
+H	1	1	0
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/post/id2_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id2_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id2_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	0	1	0
Index: tests/regression/Selection/Atoms/6/post/id3_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id3_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id3_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	0	1
+H	0	1	0
+H	1	0	0
+H	1	0	1
+H	1	1	0
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/post/id3_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id3_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id3_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	0	1	1
Index: tests/regression/Selection/Atoms/6/post/id4_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id4_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id4_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	0	1
+H	0	1	0
+H	0	1	1
+H	1	0	1
+H	1	1	0
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/post/id4_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id4_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id4_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	1	0	0
Index: tests/regression/Selection/Atoms/6/post/id5_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id5_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id5_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	0	1
+H	0	1	0
+H	0	1	1
+H	1	0	0
+H	1	1	0
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/post/id5_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id5_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id5_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	1	0	1
Index: tests/regression/Selection/Atoms/6/post/id6_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id6_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id6_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	0	1
+H	0	1	0
+H	0	1	1
+H	1	0	0
+H	1	0	1
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/post/id6_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id6_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id6_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	1	1	0
Index: tests/regression/Selection/Atoms/6/post/id7_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id7_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id7_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,9 @@
+7
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	0	1
+H	0	1	0
+H	0	1	1
+H	1	0	0
+H	1	0	1
+H	1	1	0
Index: tests/regression/Selection/Atoms/6/post/id7_present.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/post/id7_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/post/id7_present.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,3 @@
+1
+	Created by molecuilder for unselect-atom-by-id
+H	1	1	1
Index: tests/regression/Selection/Atoms/6/pre/test.xyz
===================================================================
--- tests/regression/Selection/Atoms/6/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/6/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,10 @@
+8
+	Created by molecuilder for select-atom-by-id
+H	0	0	0
+H	0	0	1
+H	0	1	0
+H	0	1	1
+H	1	0	0
+H	1	0	1
+H	1	1	0
+H	1	1	1
Index: tests/regression/Selection/Atoms/7/post/id0_missing.xyz
===================================================================
--- tests/regression/Selection/Atoms/7/post/id0_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/7/post/id0_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1030 @@
+1028
+	Created by molecuilder for unselect-all-atoms test
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/7/pre/box.xyz
===================================================================
--- tests/regression/Selection/Atoms/7/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/7/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder on Wed Dec  8 00:25:14 2010
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Atoms/testsuite-selection-all-atoms.at
===================================================================
--- tests/regression/Selection/Atoms/testsuite-selection-all-atoms.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/testsuite-selection-all-atoms.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,27 @@
+### 1. (un)select all atoms
+
+AT_SETUP([Selection - All Atoms])
+AT_KEYWORDS([selection])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz allatoms.xyz], 0)
+AT_CHECK([../../molecuilder -i allatoms.xyz -v 3 --select-all-atoms -r], 0, [stdout], [stderr])
+AT_CHECK([file=allatoms.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz allatoms.xyz], 0)
+AT_CHECK([../../molecuilder -i allatoms.xyz -v 3 --select-all-atoms --undo -r], 0, [stdout], [stderr])
+AT_CHECK([file=allatoms.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz allatoms.xyz], 0)
+AT_CHECK([../../molecuilder -i allatoms.xyz -v 3 --select-all-atoms --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([file=allatoms.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - All Atoms])
+AT_KEYWORDS([selection])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz .], 0)
+AT_CHECK([../../molecuilder -i box.xyz -v 3 --select-atom-by-id 0 --unselect-all-atoms -r], 0, [stdout], [stderr])
+AT_CHECK([file=box.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz id0_missing.xyz], 0)
+AT_CHECK([../../molecuilder -i id0_missing.xyz -v 3 --select-atom-by-id 0 --unselect-all-atoms --undo -r], 0, [stdout], [stderr])
+AT_CHECK([file=id0_missing.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz .], 0)
+AT_CHECK([../../molecuilder -i box.xyz -v 3 --select-atom-by-id 0 --unselect-all-atoms --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([file=box.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/$file], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Atoms/testsuite-selection-atom-by-id.at
===================================================================
--- tests/regression/Selection/Atoms/testsuite-selection-atom-by-id.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/testsuite-selection-atom-by-id.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,45 @@
+### 6. (un)select atom by id
+
+AT_SETUP([Selection - atom with specific id])
+AT_KEYWORDS([selection,id,atom])
+# go through all possible ids (0-7) and removed
+i=0
+while test $i -lt 8; do
+  file=id${i}_missing.xyz
+  # normal
+  AT_CHECK([cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/pre/test.xyz $file])
+  AT_CHECK([../../molecuilder -i $file -v 3 --select-atom-by-id ${i} -r], [], [ignore], [ignore])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/post/$file])
+  # normal
+  AT_CHECK([cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/pre/test.xyz $file])
+  AT_CHECK([../../molecuilder -i $file -v 3 --select-atom-by-id ${i} --undo -r], [], [ignore], [ignore])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/pre/test.xyz])
+  # redo
+  AT_CHECK([cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/pre/test.xyz $file])
+  AT_CHECK([../../molecuilder -i $file -v 3 --select-atom-by-id ${i} --undo --redo -r], [], [ignore], [ignore])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/post/$file])
+  ((i+=1))
+done
+AT_CLEANUP
+
+AT_SETUP([Unselection - atom with specific id])
+AT_KEYWORDS([selection,id,atom])
+# go through all possible ids (0-7) and remove others
+i=0
+while test $i -lt 8; do
+  file=id${i}_present.xyz
+  # normal
+  AT_CHECK([cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/pre/test.xyz $file])
+  AT_CHECK([../../molecuilder -i $file -v 3 --select-all-atoms --unselect-atom-by-id ${i} -r], [], [ignore], [ignore])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/post/$file])
+  # normal
+  AT_CHECK([cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/pre/test.xyz $file])
+  AT_CHECK([../../molecuilder -i $file -v 3 --select-all-atoms --unselect-atom-by-id ${i} --undo -r], [], [ignore], [ignore])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/post/empty.xyz])
+  # redo
+  AT_CHECK([cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/pre/test.xyz $file])
+  AT_CHECK([../../molecuilder -i $file -v 3 --select-all-atoms --unselect-atom-by-id ${i} --undo --redo -r], [], [ignore], [ignore])
+  AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/6/post/$file])
+  ((i+=1))
+done
+AT_CLEANUP
Index: tests/regression/Selection/Atoms/testsuite-selection-atoms-by-element.at
===================================================================
--- tests/regression/Selection/Atoms/testsuite-selection-atoms-by-element.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/testsuite-selection-atoms-by-element.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,28 @@
+### 5. (un)select atoms by element
+
+# select element by atomic number: 1, 4
+AT_SETUP([Selection - All atoms with specific element by atomic number])
+AT_KEYWORDS([selection,atom,element,atomic number])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/pre/test.xyz test-H_missing.xyz], 0)
+AT_CHECK([../../molecuilder -i test-H_missing.xyz -v 3 --select-atom-by-element 1 -r], 0, [stdout], [stderr])
+AT_CHECK([file=test-H_missing.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/pre/test.xyz test-Be_missing.xyz], 0)
+AT_CHECK([../../molecuilder -i test-Be_missing.xyz -v 3 --select-atom-by-element 4 -r], 0, [stdout], [stderr])
+AT_CHECK([file=test-Be_missing.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Selection - All atoms with specific element by symbol with Undo/Redo])
+AT_KEYWORDS([element,symbol])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/pre/test.xyz test.xyz], 0)
+AT_CHECK([../../molecuilder -i test.xyz -v 3 --select-atom-by-element 1 --undo -r], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/pre/test.xyz test.xyz], 0)
+AT_CHECK([../../molecuilder -i test.xyz -v 3 --select-atom-by-element 4 --undo -r], 0, [stdout], [stderr])
+AT_CHECK([file=test.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/pre/test.xyz test-H_missing.xyz], 0)
+AT_CHECK([../../molecuilder -i test-H_missing.xyz -v 3 --select-atom-by-element 1 --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([file=test-H_missing.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/pre/test.xyz test-Be_missing.xyz], 0)
+AT_CHECK([../../molecuilder -i test-Be_missing.xyz -v 3 --select-atom-by-element 4 --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([file=test-Be_missing.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/5/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Atoms/testsuite-selection-atoms-inside-cuboid.at
===================================================================
--- tests/regression/Selection/Atoms/testsuite-selection-atoms-inside-cuboid.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/testsuite-selection-atoms-inside-cuboid.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,45 @@
+### 2. (un)select all atoms inside cuboid
+
+AT_SETUP([Selection - All atoms inside cuboid])
+AT_KEYWORDS([selection,cuboid])
+file=allatomsoutsidecuboid.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-atoms-inside-cuboid "10,10,10" --position "0,0,0" --angle-x 0 --angle-y 0 --angle-z 0 -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-atoms-inside-cuboid "10,10,10" --position "0,0,0" --angle-x 0 --angle-y 0 --angle-z 0  --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/pre/box.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-atoms-inside-cuboid "10,10,10" --position "0,0,0" --angle-x 0 --angle-y 0 --angle-z 0  --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/post/$file], 0, [ignore], [ignore])
+# check size of cuboid
+AT_SKIP_IF([! awk '' < /dev/null])  # check whether awk is there
+AT_SKIP_IF([! cat >/dev/null < /dev/null])  # check whether cat is there
+AT_SKIP_IF([! wc -l /dev/null])  # check whether wc is there
+AT_CHECK([cat < $file | awk -F" " '{ if (($2 > 10) || ($3 > 10) || ($4 > 10)) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "838" stdout], 0, [ignore], [ignore])
+AT_CHECK([cat < $file | awk -F" " '{ if (($2 < 10) && ($3 < 10) && ($4 < 10)) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "1" stdout], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - All atoms inside cuboid])
+AT_KEYWORDS([selection,cuboid])
+file=allatomsinsidecuboid.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-all-atoms --unselect-atoms-inside-cuboid "10,10,10" --position "0,0,0" --angle-x 0 --angle-y 0 --angle-z 0 -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-all-atoms --unselect-atoms-inside-cuboid "10,10,10" --position "0,0,0" --angle-x 0 --angle-y 0 --angle-z 0  --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/post/empty.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-all-atoms --unselect-atoms-inside-cuboid "10,10,10" --position "0,0,0" --angle-x 0 --angle-y 0 --angle-z 0  --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/2/post/$file], 0, [ignore], [ignore])
+# check size of cuboid
+AT_SKIP_IF([! awk '' < /dev/null])  # check whether awk is there
+AT_SKIP_IF([! cat >/dev/null < /dev/null])  # check whether cat is there
+AT_SKIP_IF([! wc -l /dev/null])  # check whether wc is there
+AT_CHECK([cat < $file | awk -F" " '{ if (($2 < 10) || ($3 < 10) || ($4 < 10)) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "193" stdout], 0, [ignore], [ignore])
+AT_CHECK([cat < $file | awk -F" " '{ if (($2 > 10) && ($3 > 10) && ($4 > 10)) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "1" stdout], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Atoms/testsuite-selection-atoms-inside-sphere.at
===================================================================
--- tests/regression/Selection/Atoms/testsuite-selection-atoms-inside-sphere.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/testsuite-selection-atoms-inside-sphere.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,46 @@
+### 3. (un)select all atoms inside sphere
+
+AT_SETUP([Selection - All atoms inside sphere])
+AT_KEYWORDS([selection,sphere])
+file=allatomsoutsidesphere.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-atoms-inside-sphere 10 --position "10,10,10" -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-atoms-inside-sphere 10 --position "10,10,10" --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/pre/box.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-atoms-inside-sphere 10 --position "10,10,10" --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/post/$file], 0, [ignore], [ignore])
+# check size of sphere
+AT_SKIP_IF([! awk '' < /dev/null])  # check whether awk is there
+AT_SKIP_IF([! cat >/dev/null < /dev/null])  # check whether cat is there
+AT_SKIP_IF([! wc -l /dev/null])  # check whether wc is there
+AT_CHECK([cat < $file | awk -F" " '{ if (($2-10)*($2-10)+($3-10)*($3-10)+($4-10)*($4-10) > 100) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "507" stdout], 0, [ignore], [ignore])
+AT_CHECK([cat < $file | awk -F" " '{ if (($2-10)*($2-10)+($3-10)*($3-10)+($4-10)*($4-10) < 100) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "0" stdout], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - All atoms inside sphere])
+AT_KEYWORDS([selection,sphere])
+file=allatomsinsidesphere.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-all-atoms --unselect-atoms-inside-sphere 10 --position "10,10,10" -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-all-atoms --unselect-atoms-inside-sphere 10 --position "10,10,10" --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/post/empty.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/pre/box.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 5 --select-all-atoms --unselect-atoms-inside-sphere 10 --position "10,10,10" --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/3/post/$file], 0, [ignore], [ignore])
+# check size of sphere
+AT_SKIP_IF([! awk '' < /dev/null])  # check whether cat is there
+AT_SKIP_IF([! cat >/dev/null < /dev/null])  # check whether awk is there
+AT_SKIP_IF([! wc -l /dev/null])  # check whether wc is there
+AT_CHECK([cat < $file | awk -F" " '{ if (($2-10)*($2-10)+($3-10)*($3-10)+($4-10)*($4-10) > 100) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "2" stdout], 0, [ignore], [ignore])
+AT_CHECK([cat < $file | awk -F" " '{ if (($2-10)*($2-10)+($3-10)*($3-10)+($4-10)*($4-10) < 100) print $1,$2,$3,$4;}' | wc -l], 0, [stdout], [ignore])
+AT_CHECK([fgrep "524" stdout], 0, [ignore], [ignore])
+AT_CLEANUP
+
Index: tests/regression/Selection/Atoms/testsuite-selection-atoms-of-molecule.at
===================================================================
--- tests/regression/Selection/Atoms/testsuite-selection-atoms-of-molecule.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/testsuite-selection-atoms-of-molecule.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,49 @@
+### 4. (un)select all atoms of molecule
+
+AT_SETUP([Selection - All atoms of selected molecules])
+AT_KEYWORDS([selection])
+file=molecule1.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-molecule-by-id 1 --select-molecules-atoms -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-molecule-by-id 1 --select-molecules-atoms --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-molecule-by-id 1 --select-molecules-atoms --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+file=molecule0.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-molecule-by-id 2 --select-molecules-atoms -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-molecule-by-id 2 --select-molecules-atoms --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-molecule-by-id 2 --select-molecules-atoms --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - All atoms of selected molecules])
+AT_KEYWORDS([selection])
+file=molecule0.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-all-atoms --select-molecule-by-id 1 --unselect-molecules-atoms -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-all-atoms --select-molecule-by-id 1 --unselect-molecules-atoms --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/empty.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-all-atoms --select-molecule-by-id 1 --unselect-molecules-atoms --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+file=molecule1.xyz
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-all-atoms --select-molecule-by-id 2 --unselect-molecules-atoms -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-all-atoms --select-molecule-by-id 2 --unselect-molecules-atoms --undo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/empty.xyz], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/pre/test.xyz $file], 0)
+AT_CHECK([../../molecuilder -i $file -v 3 -I --select-all-atoms --select-molecule-by-id 2 --unselect-molecules-atoms --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/4/post/$file], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Atoms/testsuite-selection-clear-atoms.at
===================================================================
--- tests/regression/Selection/Atoms/testsuite-selection-clear-atoms.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Atoms/testsuite-selection-clear-atoms.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,14 @@
+### 7. clear atom selection
+
+AT_SETUP([Unselection - clear atom selection])
+AT_KEYWORDS([selection,clear])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz .], 0)
+AT_CHECK([../../molecuilder -i box.xyz -v 3 --select-atom-by-id 0 --unselect-all-atoms -r], 0, [stdout], [stderr])
+AT_CHECK([file=box.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz id0_missing.xyz], 0)
+AT_CHECK([../../molecuilder -i id0_missing.xyz -v 3 --select-atom-by-id 0 --unselect-all-atoms --undo -r], 0, [stdout], [stderr])
+AT_CHECK([file=id0_missing.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/post/$file], 0, [ignore], [ignore])
+AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/box.xyz .], 0)
+AT_CHECK([../../molecuilder -i box.xyz -v 3 --select-atom-by-id 0 --unselect-all-atoms --undo --redo -r], 0, [stdout], [stderr])
+AT_CHECK([file=box.xyz; diff -I '.*Created by molecuilder.*' $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Selection/Atoms/1/pre/$file], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Molecules/1/post/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/1/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/1/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for select-all-molecules test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/1/post/empty.xyz
===================================================================
--- tests/regression/Selection/Molecules/1/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/1/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for select-all-molecules test
Index: tests/regression/Selection/Molecules/1/pre/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/1/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/1/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for select-all-molecules test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/2/post/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/2/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/2/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for clear-molecule-selection test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/2/post/empty.xyz
===================================================================
--- tests/regression/Selection/Molecules/2/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/2/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for clear-molecule-selection test
Index: tests/regression/Selection/Molecules/2/pre/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/2/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/2/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for clear-molecule-selection test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/3/post/benzene.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/benzene.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/benzene.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,14 @@
+12
+	Created by molecuilder for select-molecule-by-formula test
+C	10	11.396	0
+C	11.209	10.698	0
+C	11.209	9.302	0
+C	10	8.604	0
+C	8.791	9.302	0
+C	8.791	10.698	0
+H	10	12.479	0
+H	12.147	11.24	0
+H	12.147	8.76	0
+H	10	7.521	0
+H	7.853	8.76	0
+H	7.853	11.24	0
Index: tests/regression/Selection/Molecules/3/post/benzene_missing.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/benzene_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/benzene_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,14 @@
+12
+	Created by molecuilder for select-molecule-by-formula test
+O	5	0	1.9329
+H	5.7586	0	2.4371
+H	5.7586	0	1.4286
+H	12.9199	0.432973	0.0722817
+C	13.787	-0.229529	-0.00971563
+H	13.7344	-0.953986	0.809795
+C	15.085	0.559039	0.0510545
+O	16.2322	-0.27319	-0.127612
+H	15.1506	1.12002	0.994302
+H	16.2474	-0.899874	0.615068
+H	15.1316	1.28418	-0.764522
+H	13.7263	-0.774863	-0.954059
Index: tests/regression/Selection/Molecules/3/post/empty.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for select-molecule-by-formula test
Index: tests/regression/Selection/Molecules/3/post/ethanol.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/ethanol.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/ethanol.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,11 @@
+9
+	Created by molecuilder for select-molecule-by-formula test
+H	12.9199	0.432973	0.0722817
+C	13.787	-0.229529	-0.00971563
+H	13.7344	-0.953986	0.809795
+C	15.085	0.559039	0.0510545
+O	16.2322	-0.27319	-0.127612
+H	15.1506	1.12002	0.994302
+H	16.2474	-0.899874	0.615068
+H	15.1316	1.28418	-0.764522
+H	13.7263	-0.774863	-0.954059
Index: tests/regression/Selection/Molecules/3/post/ethanol_missing.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/ethanol_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/ethanol_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,17 @@
+15
+	Created by molecuilder for select-molecule-by-formula test
+O	5	0	1.9329
+H	5.7586	0	2.4371
+H	5.7586	0	1.4286
+C	10	11.396	0
+C	11.209	10.698	0
+C	11.209	9.302	0
+C	10	8.604	0
+C	8.791	9.302	0
+C	8.791	10.698	0
+H	10	12.479	0
+H	12.147	11.24	0
+H	12.147	8.76	0
+H	10	7.521	0
+H	7.853	8.76	0
+H	7.853	11.24	0
Index: tests/regression/Selection/Molecules/3/post/mix.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/mix.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/mix.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,26 @@
+24
+	Created by molecuilder for select-molecule-by-formula test
+O	5	0	1.9329
+H	5.7586	0	2.4371
+H	5.7586	0	1.4286
+H	12.9199	0.432973	0.0722817
+C	13.787	-0.229529	-0.00971563
+H	13.7344	-0.953986	0.809795
+C	15.085	0.559039	0.0510545
+O	16.2322	-0.27319	-0.127612
+H	15.1506	1.12002	0.994302
+H	16.2474	-0.899874	0.615068
+H	15.1316	1.28418	-0.764522
+H	13.7263	-0.774863	-0.954059
+C	10	11.396	0
+C	11.209	10.698	0
+C	11.209	9.302	0
+C	10	8.604	0
+C	8.791	9.302	0
+C	8.791	10.698	0
+H	10	12.479	0
+H	12.147	11.24	0
+H	12.147	8.76	0
+H	10	7.521	0
+H	7.853	8.76	0
+H	7.853	11.24	0
Index: tests/regression/Selection/Molecules/3/post/water.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/water.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/water.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,5 @@
+3
+	Created by molecuilder for select-molecule-by-formula test
+O	5	0	1.9329
+H	5.7586	0	2.4371
+H	5.7586	0	1.4286
Index: tests/regression/Selection/Molecules/3/post/water_missing.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/post/water_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/post/water_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,23 @@
+21
+	Created by molecuilder for select-molecule-by-formula test
+H	12.9199	0.432973	0.0722817
+C	13.787	-0.229529	-0.00971563
+H	13.7344	-0.953986	0.809795
+C	15.085	0.559039	0.0510545
+O	16.2322	-0.27319	-0.127612
+H	15.1506	1.12002	0.994302
+H	16.2474	-0.899874	0.615068
+H	15.1316	1.28418	-0.764522
+H	13.7263	-0.774863	-0.954059
+C	10	11.396	0
+C	11.209	10.698	0
+C	11.209	9.302	0
+C	10	8.604	0
+C	8.791	9.302	0
+C	8.791	10.698	0
+H	10	12.479	0
+H	12.147	11.24	0
+H	12.147	8.76	0
+H	10	7.521	0
+H	7.853	8.76	0
+H	7.853	11.24	0
Index: tests/regression/Selection/Molecules/3/pre/mix.xyz
===================================================================
--- tests/regression/Selection/Molecules/3/pre/mix.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/3/pre/mix.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,26 @@
+24
+	Created by molecuilder for select-molecule-by-formula test
+O	5	0	1.9329
+H	5.7586	0	2.4371
+H	5.7586	0	1.4286
+H	12.9199	0.432973	0.0722817
+C	13.787	-0.229529	-0.00971563
+H	13.7344	-0.953986	0.809795
+C	15.085	0.559039	0.0510545
+O	16.2322	-0.27319	-0.127612
+H	15.1506	1.12002	0.994302
+H	16.2474	-0.899874	0.615068
+H	15.1316	1.28418	-0.764522
+H	13.7263	-0.774863	-0.954059
+C	10	11.396	0
+C	11.209	10.698	0
+C	11.209	9.302	0
+C	10	8.604	0
+C	8.791	9.302	0
+C	8.791	10.698	0
+H	10	12.479	0
+H	12.147	11.24	0
+H	12.147	8.76	0
+H	10	7.521	0
+H	7.853	8.76	0
+H	7.853	11.24	0
Index: tests/regression/Selection/Molecules/4/post/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/4/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/4/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for select-molecule-by-id test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/4/post/empty.xyz
===================================================================
--- tests/regression/Selection/Molecules/4/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/4/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for select-molecule-by-id test
Index: tests/regression/Selection/Molecules/4/post/id5_missing.xyz
===================================================================
--- tests/regression/Selection/Molecules/4/post/id5_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/4/post/id5_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1028 @@
+1026
+	Created by molecuilder for select-molecule-by-id test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/4/post/water_id5.xyz
===================================================================
--- tests/regression/Selection/Molecules/4/post/water_id5.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/4/post/water_id5.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,5 @@
+3
+	Created by molecuilder for select-molecule-by-id test
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
Index: tests/regression/Selection/Molecules/4/pre/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/4/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/4/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for select-molecule-by-id test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/5/post/empty.xyz
===================================================================
--- tests/regression/Selection/Molecules/5/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/5/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for select-molecule-by-name test
Index: tests/regression/Selection/Molecules/5/post/water.xyz
===================================================================
--- tests/regression/Selection/Molecules/5/post/water.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/5/post/water.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,5 @@
+3
+	Created by molecuilder for select-molecule-by-name test
+O	5	0	1.9329
+H	5.7586	0	2.4371
+H	5.7586	0	1.4286
Index: tests/regression/Selection/Molecules/5/pre/test.xyz
===================================================================
--- tests/regression/Selection/Molecules/5/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/5/pre/test.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,5 @@
+3
+	Created by molecuilder for select-molecule-by-name test
+O	5	0	1.9329
+H	5.7586	0	2.4371
+H	5.7586	0	1.4286
Index: tests/regression/Selection/Molecules/6/post/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/6/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/6/post/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for select-atoms-molecules test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/6/post/empty.xyz
===================================================================
--- tests/regression/Selection/Molecules/6/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/6/post/empty.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,2 @@
+0
+	Created by molecuilder for select-atoms-molecules test
Index: tests/regression/Selection/Molecules/6/post/water.xyz
===================================================================
--- tests/regression/Selection/Molecules/6/post/water.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/6/post/water.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,5 @@
+3
+	Created by molecuilder for select-atoms-molecules test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
Index: tests/regression/Selection/Molecules/6/post/water_missing.xyz
===================================================================
--- tests/regression/Selection/Molecules/6/post/water_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/6/post/water_missing.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1028 @@
+1026
+	Created by molecuilder for select-atoms-molecules test
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/6/pre/box.xyz
===================================================================
--- tests/regression/Selection/Molecules/6/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/6/pre/box.xyz	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,1031 @@
+1029
+	Created by molecuilder for select-atoms-molecules test
+O	0	0	0.504284
+H	0.758602	0	1.00857
+H	0.758602	0	0
+O	0	0	3.36143
+H	0.758602	0	3.86571
+H	0.758602	0	2.85714
+O	0	0	6.21857
+H	0.758602	0	6.72285
+H	0.758602	0	5.71429
+O	0	0	9.07571
+H	0.758602	0	9.58
+H	0.758602	0	8.57143
+O	0	0	11.9329
+H	0.758602	0	12.4371
+H	0.758602	0	11.4286
+O	0	0	14.79
+H	0.758602	0	15.2943
+H	0.758602	0	14.2857
+O	0	0	17.6471
+H	0.758602	0	18.1514
+H	0.758602	0	17.1429
+O	0	2.85714	0.504284
+H	0.758602	2.85714	1.00857
+H	0.758602	2.85714	0
+O	0	2.85714	3.36143
+H	0.758602	2.85714	3.86571
+H	0.758602	2.85714	2.85714
+O	0	2.85714	6.21857
+H	0.758602	2.85714	6.72285
+H	0.758602	2.85714	5.71429
+O	0	2.85714	9.07571
+H	0.758602	2.85714	9.58
+H	0.758602	2.85714	8.57143
+O	0	2.85714	11.9329
+H	0.758602	2.85714	12.4371
+H	0.758602	2.85714	11.4286
+O	0	2.85714	14.79
+H	0.758602	2.85714	15.2943
+H	0.758602	2.85714	14.2857
+O	0	2.85714	17.6471
+H	0.758602	2.85714	18.1514
+H	0.758602	2.85714	17.1429
+O	0	5.71429	0.504284
+H	0.758602	5.71429	1.00857
+H	0.758602	5.71429	0
+O	0	5.71429	3.36143
+H	0.758602	5.71429	3.86571
+H	0.758602	5.71429	2.85714
+O	0	5.71429	6.21857
+H	0.758602	5.71429	6.72285
+H	0.758602	5.71429	5.71429
+O	0	5.71429	9.07571
+H	0.758602	5.71429	9.58
+H	0.758602	5.71429	8.57143
+O	0	5.71429	11.9329
+H	0.758602	5.71429	12.4371
+H	0.758602	5.71429	11.4286
+O	0	5.71429	14.79
+H	0.758602	5.71429	15.2943
+H	0.758602	5.71429	14.2857
+O	0	5.71429	17.6471
+H	0.758602	5.71429	18.1514
+H	0.758602	5.71429	17.1429
+O	0	8.57143	0.504284
+H	0.758602	8.57143	1.00857
+H	0.758602	8.57143	0
+O	0	8.57143	3.36143
+H	0.758602	8.57143	3.86571
+H	0.758602	8.57143	2.85714
+O	0	8.57143	6.21857
+H	0.758602	8.57143	6.72285
+H	0.758602	8.57143	5.71429
+O	0	8.57143	9.07571
+H	0.758602	8.57143	9.58
+H	0.758602	8.57143	8.57143
+O	0	8.57143	11.9329
+H	0.758602	8.57143	12.4371
+H	0.758602	8.57143	11.4286
+O	0	8.57143	14.79
+H	0.758602	8.57143	15.2943
+H	0.758602	8.57143	14.2857
+O	0	8.57143	17.6471
+H	0.758602	8.57143	18.1514
+H	0.758602	8.57143	17.1429
+O	0	11.4286	0.504284
+H	0.758602	11.4286	1.00857
+H	0.758602	11.4286	0
+O	0	11.4286	3.36143
+H	0.758602	11.4286	3.86571
+H	0.758602	11.4286	2.85714
+O	0	11.4286	6.21857
+H	0.758602	11.4286	6.72285
+H	0.758602	11.4286	5.71429
+O	0	11.4286	9.07571
+H	0.758602	11.4286	9.58
+H	0.758602	11.4286	8.57143
+O	0	11.4286	11.9329
+H	0.758602	11.4286	12.4371
+H	0.758602	11.4286	11.4286
+O	0	11.4286	14.79
+H	0.758602	11.4286	15.2943
+H	0.758602	11.4286	14.2857
+O	0	11.4286	17.6471
+H	0.758602	11.4286	18.1514
+H	0.758602	11.4286	17.1429
+O	0	14.2857	0.504284
+H	0.758602	14.2857	1.00857
+H	0.758602	14.2857	0
+O	0	14.2857	3.36143
+H	0.758602	14.2857	3.86571
+H	0.758602	14.2857	2.85714
+O	0	14.2857	6.21857
+H	0.758602	14.2857	6.72285
+H	0.758602	14.2857	5.71429
+O	0	14.2857	9.07571
+H	0.758602	14.2857	9.58
+H	0.758602	14.2857	8.57143
+O	0	14.2857	11.9329
+H	0.758602	14.2857	12.4371
+H	0.758602	14.2857	11.4286
+O	0	14.2857	14.79
+H	0.758602	14.2857	15.2943
+H	0.758602	14.2857	14.2857
+O	0	14.2857	17.6471
+H	0.758602	14.2857	18.1514
+H	0.758602	14.2857	17.1429
+O	0	17.1429	0.504284
+H	0.758602	17.1429	1.00857
+H	0.758602	17.1429	0
+O	0	17.1429	3.36143
+H	0.758602	17.1429	3.86571
+H	0.758602	17.1429	2.85714
+O	0	17.1429	6.21857
+H	0.758602	17.1429	6.72285
+H	0.758602	17.1429	5.71429
+O	0	17.1429	9.07571
+H	0.758602	17.1429	9.58
+H	0.758602	17.1429	8.57143
+O	0	17.1429	11.9329
+H	0.758602	17.1429	12.4371
+H	0.758602	17.1429	11.4286
+O	0	17.1429	14.79
+H	0.758602	17.1429	15.2943
+H	0.758602	17.1429	14.2857
+O	0	17.1429	17.6471
+H	0.758602	17.1429	18.1514
+H	0.758602	17.1429	17.1429
+O	2.85714	0	0.504284
+H	3.61574	0	1.00857
+H	3.61574	0	0
+O	2.85714	0	3.36143
+H	3.61574	0	3.86571
+H	3.61574	0	2.85714
+O	2.85714	0	6.21857
+H	3.61574	0	6.72285
+H	3.61574	0	5.71429
+O	2.85714	0	9.07571
+H	3.61574	0	9.58
+H	3.61574	0	8.57143
+O	2.85714	0	11.9329
+H	3.61574	0	12.4371
+H	3.61574	0	11.4286
+O	2.85714	0	14.79
+H	3.61574	0	15.2943
+H	3.61574	0	14.2857
+O	2.85714	0	17.6471
+H	3.61574	0	18.1514
+H	3.61574	0	17.1429
+O	2.85714	2.85714	0.504284
+H	3.61574	2.85714	1.00857
+H	3.61574	2.85714	0
+O	2.85714	2.85714	3.36143
+H	3.61574	2.85714	3.86571
+H	3.61574	2.85714	2.85714
+O	2.85714	2.85714	6.21857
+H	3.61574	2.85714	6.72285
+H	3.61574	2.85714	5.71429
+O	2.85714	2.85714	9.07571
+H	3.61574	2.85714	9.58
+H	3.61574	2.85714	8.57143
+O	2.85714	2.85714	11.9329
+H	3.61574	2.85714	12.4371
+H	3.61574	2.85714	11.4286
+O	2.85714	2.85714	14.79
+H	3.61574	2.85714	15.2943
+H	3.61574	2.85714	14.2857
+O	2.85714	2.85714	17.6471
+H	3.61574	2.85714	18.1514
+H	3.61574	2.85714	17.1429
+O	2.85714	5.71429	0.504284
+H	3.61574	5.71429	1.00857
+H	3.61574	5.71429	0
+O	2.85714	5.71429	3.36143
+H	3.61574	5.71429	3.86571
+H	3.61574	5.71429	2.85714
+O	2.85714	5.71429	6.21857
+H	3.61574	5.71429	6.72285
+H	3.61574	5.71429	5.71429
+O	2.85714	5.71429	9.07571
+H	3.61574	5.71429	9.58
+H	3.61574	5.71429	8.57143
+O	2.85714	5.71429	11.9329
+H	3.61574	5.71429	12.4371
+H	3.61574	5.71429	11.4286
+O	2.85714	5.71429	14.79
+H	3.61574	5.71429	15.2943
+H	3.61574	5.71429	14.2857
+O	2.85714	5.71429	17.6471
+H	3.61574	5.71429	18.1514
+H	3.61574	5.71429	17.1429
+O	2.85714	8.57143	0.504284
+H	3.61574	8.57143	1.00857
+H	3.61574	8.57143	0
+O	2.85714	8.57143	3.36143
+H	3.61574	8.57143	3.86571
+H	3.61574	8.57143	2.85714
+O	2.85714	8.57143	6.21857
+H	3.61574	8.57143	6.72285
+H	3.61574	8.57143	5.71429
+O	2.85714	8.57143	9.07571
+H	3.61574	8.57143	9.58
+H	3.61574	8.57143	8.57143
+O	2.85714	8.57143	11.9329
+H	3.61574	8.57143	12.4371
+H	3.61574	8.57143	11.4286
+O	2.85714	8.57143	14.79
+H	3.61574	8.57143	15.2943
+H	3.61574	8.57143	14.2857
+O	2.85714	8.57143	17.6471
+H	3.61574	8.57143	18.1514
+H	3.61574	8.57143	17.1429
+O	2.85714	11.4286	0.504284
+H	3.61574	11.4286	1.00857
+H	3.61574	11.4286	0
+O	2.85714	11.4286	3.36143
+H	3.61574	11.4286	3.86571
+H	3.61574	11.4286	2.85714
+O	2.85714	11.4286	6.21857
+H	3.61574	11.4286	6.72285
+H	3.61574	11.4286	5.71429
+O	2.85714	11.4286	9.07571
+H	3.61574	11.4286	9.58
+H	3.61574	11.4286	8.57143
+O	2.85714	11.4286	11.9329
+H	3.61574	11.4286	12.4371
+H	3.61574	11.4286	11.4286
+O	2.85714	11.4286	14.79
+H	3.61574	11.4286	15.2943
+H	3.61574	11.4286	14.2857
+O	2.85714	11.4286	17.6471
+H	3.61574	11.4286	18.1514
+H	3.61574	11.4286	17.1429
+O	2.85714	14.2857	0.504284
+H	3.61574	14.2857	1.00857
+H	3.61574	14.2857	0
+O	2.85714	14.2857	3.36143
+H	3.61574	14.2857	3.86571
+H	3.61574	14.2857	2.85714
+O	2.85714	14.2857	6.21857
+H	3.61574	14.2857	6.72285
+H	3.61574	14.2857	5.71429
+O	2.85714	14.2857	9.07571
+H	3.61574	14.2857	9.58
+H	3.61574	14.2857	8.57143
+O	2.85714	14.2857	11.9329
+H	3.61574	14.2857	12.4371
+H	3.61574	14.2857	11.4286
+O	2.85714	14.2857	14.79
+H	3.61574	14.2857	15.2943
+H	3.61574	14.2857	14.2857
+O	2.85714	14.2857	17.6471
+H	3.61574	14.2857	18.1514
+H	3.61574	14.2857	17.1429
+O	2.85714	17.1429	0.504284
+H	3.61574	17.1429	1.00857
+H	3.61574	17.1429	0
+O	2.85714	17.1429	3.36143
+H	3.61574	17.1429	3.86571
+H	3.61574	17.1429	2.85714
+O	2.85714	17.1429	6.21857
+H	3.61574	17.1429	6.72285
+H	3.61574	17.1429	5.71429
+O	2.85714	17.1429	9.07571
+H	3.61574	17.1429	9.58
+H	3.61574	17.1429	8.57143
+O	2.85714	17.1429	11.9329
+H	3.61574	17.1429	12.4371
+H	3.61574	17.1429	11.4286
+O	2.85714	17.1429	14.79
+H	3.61574	17.1429	15.2943
+H	3.61574	17.1429	14.2857
+O	2.85714	17.1429	17.6471
+H	3.61574	17.1429	18.1514
+H	3.61574	17.1429	17.1429
+O	5.71429	0	0.504284
+H	6.47289	0	1.00857
+H	6.47289	0	0
+O	5.71429	0	3.36143
+H	6.47289	0	3.86571
+H	6.47289	0	2.85714
+O	5.71429	0	6.21857
+H	6.47289	0	6.72285
+H	6.47289	0	5.71429
+O	5.71429	0	9.07571
+H	6.47289	0	9.58
+H	6.47289	0	8.57143
+O	5.71429	0	11.9329
+H	6.47289	0	12.4371
+H	6.47289	0	11.4286
+O	5.71429	0	14.79
+H	6.47289	0	15.2943
+H	6.47289	0	14.2857
+O	5.71429	0	17.6471
+H	6.47289	0	18.1514
+H	6.47289	0	17.1429
+O	5.71429	2.85714	0.504284
+H	6.47289	2.85714	1.00857
+H	6.47289	2.85714	0
+O	5.71429	2.85714	3.36143
+H	6.47289	2.85714	3.86571
+H	6.47289	2.85714	2.85714
+O	5.71429	2.85714	6.21857
+H	6.47289	2.85714	6.72285
+H	6.47289	2.85714	5.71429
+O	5.71429	2.85714	9.07571
+H	6.47289	2.85714	9.58
+H	6.47289	2.85714	8.57143
+O	5.71429	2.85714	11.9329
+H	6.47289	2.85714	12.4371
+H	6.47289	2.85714	11.4286
+O	5.71429	2.85714	14.79
+H	6.47289	2.85714	15.2943
+H	6.47289	2.85714	14.2857
+O	5.71429	2.85714	17.6471
+H	6.47289	2.85714	18.1514
+H	6.47289	2.85714	17.1429
+O	5.71429	5.71429	0.504284
+H	6.47289	5.71429	1.00857
+H	6.47289	5.71429	0
+O	5.71429	5.71429	3.36143
+H	6.47289	5.71429	3.86571
+H	6.47289	5.71429	2.85714
+O	5.71429	5.71429	6.21857
+H	6.47289	5.71429	6.72285
+H	6.47289	5.71429	5.71429
+O	5.71429	5.71429	9.07571
+H	6.47289	5.71429	9.58
+H	6.47289	5.71429	8.57143
+O	5.71429	5.71429	11.9329
+H	6.47289	5.71429	12.4371
+H	6.47289	5.71429	11.4286
+O	5.71429	5.71429	14.79
+H	6.47289	5.71429	15.2943
+H	6.47289	5.71429	14.2857
+O	5.71429	5.71429	17.6471
+H	6.47289	5.71429	18.1514
+H	6.47289	5.71429	17.1429
+O	5.71429	8.57143	0.504284
+H	6.47289	8.57143	1.00857
+H	6.47289	8.57143	0
+O	5.71429	8.57143	3.36143
+H	6.47289	8.57143	3.86571
+H	6.47289	8.57143	2.85714
+O	5.71429	8.57143	6.21857
+H	6.47289	8.57143	6.72285
+H	6.47289	8.57143	5.71429
+O	5.71429	8.57143	9.07571
+H	6.47289	8.57143	9.58
+H	6.47289	8.57143	8.57143
+O	5.71429	8.57143	11.9329
+H	6.47289	8.57143	12.4371
+H	6.47289	8.57143	11.4286
+O	5.71429	8.57143	14.79
+H	6.47289	8.57143	15.2943
+H	6.47289	8.57143	14.2857
+O	5.71429	8.57143	17.6471
+H	6.47289	8.57143	18.1514
+H	6.47289	8.57143	17.1429
+O	5.71429	11.4286	0.504284
+H	6.47289	11.4286	1.00857
+H	6.47289	11.4286	0
+O	5.71429	11.4286	3.36143
+H	6.47289	11.4286	3.86571
+H	6.47289	11.4286	2.85714
+O	5.71429	11.4286	6.21857
+H	6.47289	11.4286	6.72285
+H	6.47289	11.4286	5.71429
+O	5.71429	11.4286	9.07571
+H	6.47289	11.4286	9.58
+H	6.47289	11.4286	8.57143
+O	5.71429	11.4286	11.9329
+H	6.47289	11.4286	12.4371
+H	6.47289	11.4286	11.4286
+O	5.71429	11.4286	14.79
+H	6.47289	11.4286	15.2943
+H	6.47289	11.4286	14.2857
+O	5.71429	11.4286	17.6471
+H	6.47289	11.4286	18.1514
+H	6.47289	11.4286	17.1429
+O	5.71429	14.2857	0.504284
+H	6.47289	14.2857	1.00857
+H	6.47289	14.2857	0
+O	5.71429	14.2857	3.36143
+H	6.47289	14.2857	3.86571
+H	6.47289	14.2857	2.85714
+O	5.71429	14.2857	6.21857
+H	6.47289	14.2857	6.72285
+H	6.47289	14.2857	5.71429
+O	5.71429	14.2857	9.07571
+H	6.47289	14.2857	9.58
+H	6.47289	14.2857	8.57143
+O	5.71429	14.2857	11.9329
+H	6.47289	14.2857	12.4371
+H	6.47289	14.2857	11.4286
+O	5.71429	14.2857	14.79
+H	6.47289	14.2857	15.2943
+H	6.47289	14.2857	14.2857
+O	5.71429	14.2857	17.6471
+H	6.47289	14.2857	18.1514
+H	6.47289	14.2857	17.1429
+O	5.71429	17.1429	0.504284
+H	6.47289	17.1429	1.00857
+H	6.47289	17.1429	0
+O	5.71429	17.1429	3.36143
+H	6.47289	17.1429	3.86571
+H	6.47289	17.1429	2.85714
+O	5.71429	17.1429	6.21857
+H	6.47289	17.1429	6.72285
+H	6.47289	17.1429	5.71429
+O	5.71429	17.1429	9.07571
+H	6.47289	17.1429	9.58
+H	6.47289	17.1429	8.57143
+O	5.71429	17.1429	11.9329
+H	6.47289	17.1429	12.4371
+H	6.47289	17.1429	11.4286
+O	5.71429	17.1429	14.79
+H	6.47289	17.1429	15.2943
+H	6.47289	17.1429	14.2857
+O	5.71429	17.1429	17.6471
+H	6.47289	17.1429	18.1514
+H	6.47289	17.1429	17.1429
+O	8.57143	0	0.504284
+H	9.33003	0	1.00857
+H	9.33003	0	0
+O	8.57143	0	3.36143
+H	9.33003	0	3.86571
+H	9.33003	0	2.85714
+O	8.57143	0	6.21857
+H	9.33003	0	6.72285
+H	9.33003	0	5.71429
+O	8.57143	0	9.07571
+H	9.33003	0	9.58
+H	9.33003	0	8.57143
+O	8.57143	0	11.9329
+H	9.33003	0	12.4371
+H	9.33003	0	11.4286
+O	8.57143	0	14.79
+H	9.33003	0	15.2943
+H	9.33003	0	14.2857
+O	8.57143	0	17.6471
+H	9.33003	0	18.1514
+H	9.33003	0	17.1429
+O	8.57143	2.85714	0.504284
+H	9.33003	2.85714	1.00857
+H	9.33003	2.85714	0
+O	8.57143	2.85714	3.36143
+H	9.33003	2.85714	3.86571
+H	9.33003	2.85714	2.85714
+O	8.57143	2.85714	6.21857
+H	9.33003	2.85714	6.72285
+H	9.33003	2.85714	5.71429
+O	8.57143	2.85714	9.07571
+H	9.33003	2.85714	9.58
+H	9.33003	2.85714	8.57143
+O	8.57143	2.85714	11.9329
+H	9.33003	2.85714	12.4371
+H	9.33003	2.85714	11.4286
+O	8.57143	2.85714	14.79
+H	9.33003	2.85714	15.2943
+H	9.33003	2.85714	14.2857
+O	8.57143	2.85714	17.6471
+H	9.33003	2.85714	18.1514
+H	9.33003	2.85714	17.1429
+O	8.57143	5.71429	0.504284
+H	9.33003	5.71429	1.00857
+H	9.33003	5.71429	0
+O	8.57143	5.71429	3.36143
+H	9.33003	5.71429	3.86571
+H	9.33003	5.71429	2.85714
+O	8.57143	5.71429	6.21857
+H	9.33003	5.71429	6.72285
+H	9.33003	5.71429	5.71429
+O	8.57143	5.71429	9.07571
+H	9.33003	5.71429	9.58
+H	9.33003	5.71429	8.57143
+O	8.57143	5.71429	11.9329
+H	9.33003	5.71429	12.4371
+H	9.33003	5.71429	11.4286
+O	8.57143	5.71429	14.79
+H	9.33003	5.71429	15.2943
+H	9.33003	5.71429	14.2857
+O	8.57143	5.71429	17.6471
+H	9.33003	5.71429	18.1514
+H	9.33003	5.71429	17.1429
+O	8.57143	8.57143	0.504284
+H	9.33003	8.57143	1.00857
+H	9.33003	8.57143	0
+O	8.57143	8.57143	3.36143
+H	9.33003	8.57143	3.86571
+H	9.33003	8.57143	2.85714
+O	8.57143	8.57143	6.21857
+H	9.33003	8.57143	6.72285
+H	9.33003	8.57143	5.71429
+O	8.57143	8.57143	9.07571
+H	9.33003	8.57143	9.58
+H	9.33003	8.57143	8.57143
+O	8.57143	8.57143	11.9329
+H	9.33003	8.57143	12.4371
+H	9.33003	8.57143	11.4286
+O	8.57143	8.57143	14.79
+H	9.33003	8.57143	15.2943
+H	9.33003	8.57143	14.2857
+O	8.57143	8.57143	17.6471
+H	9.33003	8.57143	18.1514
+H	9.33003	8.57143	17.1429
+O	8.57143	11.4286	0.504284
+H	9.33003	11.4286	1.00857
+H	9.33003	11.4286	0
+O	8.57143	11.4286	3.36143
+H	9.33003	11.4286	3.86571
+H	9.33003	11.4286	2.85714
+O	8.57143	11.4286	6.21857
+H	9.33003	11.4286	6.72285
+H	9.33003	11.4286	5.71429
+O	8.57143	11.4286	9.07571
+H	9.33003	11.4286	9.58
+H	9.33003	11.4286	8.57143
+O	8.57143	11.4286	11.9329
+H	9.33003	11.4286	12.4371
+H	9.33003	11.4286	11.4286
+O	8.57143	11.4286	14.79
+H	9.33003	11.4286	15.2943
+H	9.33003	11.4286	14.2857
+O	8.57143	11.4286	17.6471
+H	9.33003	11.4286	18.1514
+H	9.33003	11.4286	17.1429
+O	8.57143	14.2857	0.504284
+H	9.33003	14.2857	1.00857
+H	9.33003	14.2857	0
+O	8.57143	14.2857	3.36143
+H	9.33003	14.2857	3.86571
+H	9.33003	14.2857	2.85714
+O	8.57143	14.2857	6.21857
+H	9.33003	14.2857	6.72285
+H	9.33003	14.2857	5.71429
+O	8.57143	14.2857	9.07571
+H	9.33003	14.2857	9.58
+H	9.33003	14.2857	8.57143
+O	8.57143	14.2857	11.9329
+H	9.33003	14.2857	12.4371
+H	9.33003	14.2857	11.4286
+O	8.57143	14.2857	14.79
+H	9.33003	14.2857	15.2943
+H	9.33003	14.2857	14.2857
+O	8.57143	14.2857	17.6471
+H	9.33003	14.2857	18.1514
+H	9.33003	14.2857	17.1429
+O	8.57143	17.1429	0.504284
+H	9.33003	17.1429	1.00857
+H	9.33003	17.1429	0
+O	8.57143	17.1429	3.36143
+H	9.33003	17.1429	3.86571
+H	9.33003	17.1429	2.85714
+O	8.57143	17.1429	6.21857
+H	9.33003	17.1429	6.72285
+H	9.33003	17.1429	5.71429
+O	8.57143	17.1429	9.07571
+H	9.33003	17.1429	9.58
+H	9.33003	17.1429	8.57143
+O	8.57143	17.1429	11.9329
+H	9.33003	17.1429	12.4371
+H	9.33003	17.1429	11.4286
+O	8.57143	17.1429	14.79
+H	9.33003	17.1429	15.2943
+H	9.33003	17.1429	14.2857
+O	8.57143	17.1429	17.6471
+H	9.33003	17.1429	18.1514
+H	9.33003	17.1429	17.1429
+O	11.4286	0	0.504284
+H	12.1872	0	1.00857
+H	12.1872	0	0
+O	11.4286	0	3.36143
+H	12.1872	0	3.86571
+H	12.1872	0	2.85714
+O	11.4286	0	6.21857
+H	12.1872	0	6.72285
+H	12.1872	0	5.71429
+O	11.4286	0	9.07571
+H	12.1872	0	9.58
+H	12.1872	0	8.57143
+O	11.4286	0	11.9329
+H	12.1872	0	12.4371
+H	12.1872	0	11.4286
+O	11.4286	0	14.79
+H	12.1872	0	15.2943
+H	12.1872	0	14.2857
+O	11.4286	0	17.6471
+H	12.1872	0	18.1514
+H	12.1872	0	17.1429
+O	11.4286	2.85714	0.504284
+H	12.1872	2.85714	1.00857
+H	12.1872	2.85714	0
+O	11.4286	2.85714	3.36143
+H	12.1872	2.85714	3.86571
+H	12.1872	2.85714	2.85714
+O	11.4286	2.85714	6.21857
+H	12.1872	2.85714	6.72285
+H	12.1872	2.85714	5.71429
+O	11.4286	2.85714	9.07571
+H	12.1872	2.85714	9.58
+H	12.1872	2.85714	8.57143
+O	11.4286	2.85714	11.9329
+H	12.1872	2.85714	12.4371
+H	12.1872	2.85714	11.4286
+O	11.4286	2.85714	14.79
+H	12.1872	2.85714	15.2943
+H	12.1872	2.85714	14.2857
+O	11.4286	2.85714	17.6471
+H	12.1872	2.85714	18.1514
+H	12.1872	2.85714	17.1429
+O	11.4286	5.71429	0.504284
+H	12.1872	5.71429	1.00857
+H	12.1872	5.71429	0
+O	11.4286	5.71429	3.36143
+H	12.1872	5.71429	3.86571
+H	12.1872	5.71429	2.85714
+O	11.4286	5.71429	6.21857
+H	12.1872	5.71429	6.72285
+H	12.1872	5.71429	5.71429
+O	11.4286	5.71429	9.07571
+H	12.1872	5.71429	9.58
+H	12.1872	5.71429	8.57143
+O	11.4286	5.71429	11.9329
+H	12.1872	5.71429	12.4371
+H	12.1872	5.71429	11.4286
+O	11.4286	5.71429	14.79
+H	12.1872	5.71429	15.2943
+H	12.1872	5.71429	14.2857
+O	11.4286	5.71429	17.6471
+H	12.1872	5.71429	18.1514
+H	12.1872	5.71429	17.1429
+O	11.4286	8.57143	0.504284
+H	12.1872	8.57143	1.00857
+H	12.1872	8.57143	0
+O	11.4286	8.57143	3.36143
+H	12.1872	8.57143	3.86571
+H	12.1872	8.57143	2.85714
+O	11.4286	8.57143	6.21857
+H	12.1872	8.57143	6.72285
+H	12.1872	8.57143	5.71429
+O	11.4286	8.57143	9.07571
+H	12.1872	8.57143	9.58
+H	12.1872	8.57143	8.57143
+O	11.4286	8.57143	11.9329
+H	12.1872	8.57143	12.4371
+H	12.1872	8.57143	11.4286
+O	11.4286	8.57143	14.79
+H	12.1872	8.57143	15.2943
+H	12.1872	8.57143	14.2857
+O	11.4286	8.57143	17.6471
+H	12.1872	8.57143	18.1514
+H	12.1872	8.57143	17.1429
+O	11.4286	11.4286	0.504284
+H	12.1872	11.4286	1.00857
+H	12.1872	11.4286	0
+O	11.4286	11.4286	3.36143
+H	12.1872	11.4286	3.86571
+H	12.1872	11.4286	2.85714
+O	11.4286	11.4286	6.21857
+H	12.1872	11.4286	6.72285
+H	12.1872	11.4286	5.71429
+O	11.4286	11.4286	9.07571
+H	12.1872	11.4286	9.58
+H	12.1872	11.4286	8.57143
+O	11.4286	11.4286	11.9329
+H	12.1872	11.4286	12.4371
+H	12.1872	11.4286	11.4286
+O	11.4286	11.4286	14.79
+H	12.1872	11.4286	15.2943
+H	12.1872	11.4286	14.2857
+O	11.4286	11.4286	17.6471
+H	12.1872	11.4286	18.1514
+H	12.1872	11.4286	17.1429
+O	11.4286	14.2857	0.504284
+H	12.1872	14.2857	1.00857
+H	12.1872	14.2857	0
+O	11.4286	14.2857	3.36143
+H	12.1872	14.2857	3.86571
+H	12.1872	14.2857	2.85714
+O	11.4286	14.2857	6.21857
+H	12.1872	14.2857	6.72285
+H	12.1872	14.2857	5.71429
+O	11.4286	14.2857	9.07571
+H	12.1872	14.2857	9.58
+H	12.1872	14.2857	8.57143
+O	11.4286	14.2857	11.9329
+H	12.1872	14.2857	12.4371
+H	12.1872	14.2857	11.4286
+O	11.4286	14.2857	14.79
+H	12.1872	14.2857	15.2943
+H	12.1872	14.2857	14.2857
+O	11.4286	14.2857	17.6471
+H	12.1872	14.2857	18.1514
+H	12.1872	14.2857	17.1429
+O	11.4286	17.1429	0.504284
+H	12.1872	17.1429	1.00857
+H	12.1872	17.1429	0
+O	11.4286	17.1429	3.36143
+H	12.1872	17.1429	3.86571
+H	12.1872	17.1429	2.85714
+O	11.4286	17.1429	6.21857
+H	12.1872	17.1429	6.72285
+H	12.1872	17.1429	5.71429
+O	11.4286	17.1429	9.07571
+H	12.1872	17.1429	9.58
+H	12.1872	17.1429	8.57143
+O	11.4286	17.1429	11.9329
+H	12.1872	17.1429	12.4371
+H	12.1872	17.1429	11.4286
+O	11.4286	17.1429	14.79
+H	12.1872	17.1429	15.2943
+H	12.1872	17.1429	14.2857
+O	11.4286	17.1429	17.6471
+H	12.1872	17.1429	18.1514
+H	12.1872	17.1429	17.1429
+O	14.2857	0	0.504284
+H	15.0443	0	1.00857
+H	15.0443	0	0
+O	14.2857	0	3.36143
+H	15.0443	0	3.86571
+H	15.0443	0	2.85714
+O	14.2857	0	6.21857
+H	15.0443	0	6.72285
+H	15.0443	0	5.71429
+O	14.2857	0	9.07571
+H	15.0443	0	9.58
+H	15.0443	0	8.57143
+O	14.2857	0	11.9329
+H	15.0443	0	12.4371
+H	15.0443	0	11.4286
+O	14.2857	0	14.79
+H	15.0443	0	15.2943
+H	15.0443	0	14.2857
+O	14.2857	0	17.6471
+H	15.0443	0	18.1514
+H	15.0443	0	17.1429
+O	14.2857	2.85714	0.504284
+H	15.0443	2.85714	1.00857
+H	15.0443	2.85714	0
+O	14.2857	2.85714	3.36143
+H	15.0443	2.85714	3.86571
+H	15.0443	2.85714	2.85714
+O	14.2857	2.85714	6.21857
+H	15.0443	2.85714	6.72285
+H	15.0443	2.85714	5.71429
+O	14.2857	2.85714	9.07571
+H	15.0443	2.85714	9.58
+H	15.0443	2.85714	8.57143
+O	14.2857	2.85714	11.9329
+H	15.0443	2.85714	12.4371
+H	15.0443	2.85714	11.4286
+O	14.2857	2.85714	14.79
+H	15.0443	2.85714	15.2943
+H	15.0443	2.85714	14.2857
+O	14.2857	2.85714	17.6471
+H	15.0443	2.85714	18.1514
+H	15.0443	2.85714	17.1429
+O	14.2857	5.71429	0.504284
+H	15.0443	5.71429	1.00857
+H	15.0443	5.71429	0
+O	14.2857	5.71429	3.36143
+H	15.0443	5.71429	3.86571
+H	15.0443	5.71429	2.85714
+O	14.2857	5.71429	6.21857
+H	15.0443	5.71429	6.72285
+H	15.0443	5.71429	5.71429
+O	14.2857	5.71429	9.07571
+H	15.0443	5.71429	9.58
+H	15.0443	5.71429	8.57143
+O	14.2857	5.71429	11.9329
+H	15.0443	5.71429	12.4371
+H	15.0443	5.71429	11.4286
+O	14.2857	5.71429	14.79
+H	15.0443	5.71429	15.2943
+H	15.0443	5.71429	14.2857
+O	14.2857	5.71429	17.6471
+H	15.0443	5.71429	18.1514
+H	15.0443	5.71429	17.1429
+O	14.2857	8.57143	0.504284
+H	15.0443	8.57143	1.00857
+H	15.0443	8.57143	0
+O	14.2857	8.57143	3.36143
+H	15.0443	8.57143	3.86571
+H	15.0443	8.57143	2.85714
+O	14.2857	8.57143	6.21857
+H	15.0443	8.57143	6.72285
+H	15.0443	8.57143	5.71429
+O	14.2857	8.57143	9.07571
+H	15.0443	8.57143	9.58
+H	15.0443	8.57143	8.57143
+O	14.2857	8.57143	11.9329
+H	15.0443	8.57143	12.4371
+H	15.0443	8.57143	11.4286
+O	14.2857	8.57143	14.79
+H	15.0443	8.57143	15.2943
+H	15.0443	8.57143	14.2857
+O	14.2857	8.57143	17.6471
+H	15.0443	8.57143	18.1514
+H	15.0443	8.57143	17.1429
+O	14.2857	11.4286	0.504284
+H	15.0443	11.4286	1.00857
+H	15.0443	11.4286	0
+O	14.2857	11.4286	3.36143
+H	15.0443	11.4286	3.86571
+H	15.0443	11.4286	2.85714
+O	14.2857	11.4286	6.21857
+H	15.0443	11.4286	6.72285
+H	15.0443	11.4286	5.71429
+O	14.2857	11.4286	9.07571
+H	15.0443	11.4286	9.58
+H	15.0443	11.4286	8.57143
+O	14.2857	11.4286	11.9329
+H	15.0443	11.4286	12.4371
+H	15.0443	11.4286	11.4286
+O	14.2857	11.4286	14.79
+H	15.0443	11.4286	15.2943
+H	15.0443	11.4286	14.2857
+O	14.2857	11.4286	17.6471
+H	15.0443	11.4286	18.1514
+H	15.0443	11.4286	17.1429
+O	14.2857	14.2857	0.504284
+H	15.0443	14.2857	1.00857
+H	15.0443	14.2857	0
+O	14.2857	14.2857	3.36143
+H	15.0443	14.2857	3.86571
+H	15.0443	14.2857	2.85714
+O	14.2857	14.2857	6.21857
+H	15.0443	14.2857	6.72285
+H	15.0443	14.2857	5.71429
+O	14.2857	14.2857	9.07571
+H	15.0443	14.2857	9.58
+H	15.0443	14.2857	8.57143
+O	14.2857	14.2857	11.9329
+H	15.0443	14.2857	12.4371
+H	15.0443	14.2857	11.4286
+O	14.2857	14.2857	14.79
+H	15.0443	14.2857	15.2943
+H	15.0443	14.2857	14.2857
+O	14.2857	14.2857	17.6471
+H	15.0443	14.2857	18.1514
+H	15.0443	14.2857	17.1429
+O	14.2857	17.1429	0.504284
+H	15.0443	17.1429	1.00857
+H	15.0443	17.1429	0
+O	14.2857	17.1429	3.36143
+H	15.0443	17.1429	3.86571
+H	15.0443	17.1429	2.85714
+O	14.2857	17.1429	6.21857
+H	15.0443	17.1429	6.72285
+H	15.0443	17.1429	5.71429
+O	14.2857	17.1429	9.07571
+H	15.0443	17.1429	9.58
+H	15.0443	17.1429	8.57143
+O	14.2857	17.1429	11.9329
+H	15.0443	17.1429	12.4371
+H	15.0443	17.1429	11.4286
+O	14.2857	17.1429	14.79
+H	15.0443	17.1429	15.2943
+H	15.0443	17.1429	14.2857
+O	14.2857	17.1429	17.6471
+H	15.0443	17.1429	18.1514
+H	15.0443	17.1429	17.1429
+O	17.1429	0	0.504284
+H	17.9015	0	1.00857
+H	17.9015	0	0
+O	17.1429	0	3.36143
+H	17.9015	0	3.86571
+H	17.9015	0	2.85714
+O	17.1429	0	6.21857
+H	17.9015	0	6.72285
+H	17.9015	0	5.71429
+O	17.1429	0	9.07571
+H	17.9015	0	9.58
+H	17.9015	0	8.57143
+O	17.1429	0	11.9329
+H	17.9015	0	12.4371
+H	17.9015	0	11.4286
+O	17.1429	0	14.79
+H	17.9015	0	15.2943
+H	17.9015	0	14.2857
+O	17.1429	0	17.6471
+H	17.9015	0	18.1514
+H	17.9015	0	17.1429
+O	17.1429	2.85714	0.504284
+H	17.9015	2.85714	1.00857
+H	17.9015	2.85714	0
+O	17.1429	2.85714	3.36143
+H	17.9015	2.85714	3.86571
+H	17.9015	2.85714	2.85714
+O	17.1429	2.85714	6.21857
+H	17.9015	2.85714	6.72285
+H	17.9015	2.85714	5.71429
+O	17.1429	2.85714	9.07571
+H	17.9015	2.85714	9.58
+H	17.9015	2.85714	8.57143
+O	17.1429	2.85714	11.9329
+H	17.9015	2.85714	12.4371
+H	17.9015	2.85714	11.4286
+O	17.1429	2.85714	14.79
+H	17.9015	2.85714	15.2943
+H	17.9015	2.85714	14.2857
+O	17.1429	2.85714	17.6471
+H	17.9015	2.85714	18.1514
+H	17.9015	2.85714	17.1429
+O	17.1429	5.71429	0.504284
+H	17.9015	5.71429	1.00857
+H	17.9015	5.71429	0
+O	17.1429	5.71429	3.36143
+H	17.9015	5.71429	3.86571
+H	17.9015	5.71429	2.85714
+O	17.1429	5.71429	6.21857
+H	17.9015	5.71429	6.72285
+H	17.9015	5.71429	5.71429
+O	17.1429	5.71429	9.07571
+H	17.9015	5.71429	9.58
+H	17.9015	5.71429	8.57143
+O	17.1429	5.71429	11.9329
+H	17.9015	5.71429	12.4371
+H	17.9015	5.71429	11.4286
+O	17.1429	5.71429	14.79
+H	17.9015	5.71429	15.2943
+H	17.9015	5.71429	14.2857
+O	17.1429	5.71429	17.6471
+H	17.9015	5.71429	18.1514
+H	17.9015	5.71429	17.1429
+O	17.1429	8.57143	0.504284
+H	17.9015	8.57143	1.00857
+H	17.9015	8.57143	0
+O	17.1429	8.57143	3.36143
+H	17.9015	8.57143	3.86571
+H	17.9015	8.57143	2.85714
+O	17.1429	8.57143	6.21857
+H	17.9015	8.57143	6.72285
+H	17.9015	8.57143	5.71429
+O	17.1429	8.57143	9.07571
+H	17.9015	8.57143	9.58
+H	17.9015	8.57143	8.57143
+O	17.1429	8.57143	11.9329
+H	17.9015	8.57143	12.4371
+H	17.9015	8.57143	11.4286
+O	17.1429	8.57143	14.79
+H	17.9015	8.57143	15.2943
+H	17.9015	8.57143	14.2857
+O	17.1429	8.57143	17.6471
+H	17.9015	8.57143	18.1514
+H	17.9015	8.57143	17.1429
+O	17.1429	11.4286	0.504284
+H	17.9015	11.4286	1.00857
+H	17.9015	11.4286	0
+O	17.1429	11.4286	3.36143
+H	17.9015	11.4286	3.86571
+H	17.9015	11.4286	2.85714
+O	17.1429	11.4286	6.21857
+H	17.9015	11.4286	6.72285
+H	17.9015	11.4286	5.71429
+O	17.1429	11.4286	9.07571
+H	17.9015	11.4286	9.58
+H	17.9015	11.4286	8.57143
+O	17.1429	11.4286	11.9329
+H	17.9015	11.4286	12.4371
+H	17.9015	11.4286	11.4286
+O	17.1429	11.4286	14.79
+H	17.9015	11.4286	15.2943
+H	17.9015	11.4286	14.2857
+O	17.1429	11.4286	17.6471
+H	17.9015	11.4286	18.1514
+H	17.9015	11.4286	17.1429
+O	17.1429	14.2857	0.504284
+H	17.9015	14.2857	1.00857
+H	17.9015	14.2857	0
+O	17.1429	14.2857	3.36143
+H	17.9015	14.2857	3.86571
+H	17.9015	14.2857	2.85714
+O	17.1429	14.2857	6.21857
+H	17.9015	14.2857	6.72285
+H	17.9015	14.2857	5.71429
+O	17.1429	14.2857	9.07571
+H	17.9015	14.2857	9.58
+H	17.9015	14.2857	8.57143
+O	17.1429	14.2857	11.9329
+H	17.9015	14.2857	12.4371
+H	17.9015	14.2857	11.4286
+O	17.1429	14.2857	14.79
+H	17.9015	14.2857	15.2943
+H	17.9015	14.2857	14.2857
+O	17.1429	14.2857	17.6471
+H	17.9015	14.2857	18.1514
+H	17.9015	14.2857	17.1429
+O	17.1429	17.1429	0.504284
+H	17.9015	17.1429	1.00857
+H	17.9015	17.1429	0
+O	17.1429	17.1429	3.36143
+H	17.9015	17.1429	3.86571
+H	17.9015	17.1429	2.85714
+O	17.1429	17.1429	6.21857
+H	17.9015	17.1429	6.72285
+H	17.9015	17.1429	5.71429
+O	17.1429	17.1429	9.07571
+H	17.9015	17.1429	9.58
+H	17.9015	17.1429	8.57143
+O	17.1429	17.1429	11.9329
+H	17.9015	17.1429	12.4371
+H	17.9015	17.1429	11.4286
+O	17.1429	17.1429	14.79
+H	17.9015	17.1429	15.2943
+H	17.9015	17.1429	14.2857
+O	17.1429	17.1429	17.6471
+H	17.9015	17.1429	18.1514
+H	17.9015	17.1429	17.1429
Index: tests/regression/Selection/Molecules/testsuite-selection-all-molecules.at
===================================================================
--- tests/regression/Selection/Molecules/testsuite-selection-all-molecules.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/testsuite-selection-all-molecules.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+### 1. (un)select all molecules
+
+
+AT_SETUP([Selection - All Molecules])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/1"
+srcfile=box.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "box.xyz" "-I --select-all-molecules -s box.xyz"
+mv box.xyz box_a.xyz
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-all-molecules --undo -s empty.xyz"
+check_command_output $srcpath $srcfile "box.xyz" "-I --select-all-molecules --undo --redo -s box.xyz"
+mv box.xyz box_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' box_a.xyz box_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - All Molecules])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/1"
+srcfile=box.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-all-molecules --unselect-all-molecules -s empty.xyz"
+mv empty.xyz empty_a.xyz
+check_command_output $srcpath $srcfile "box.xyz" "-I --select-all-molecules --unselect-all-molecules --undo -s box.xyz"
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-all-molecules --unselect-all-molecules --undo --redo -s empty.xyz"
+mv empty.xyz empty_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' empty_a.xyz empty_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Molecules/testsuite-selection-clear-molecules.at
===================================================================
--- tests/regression/Selection/Molecules/testsuite-selection-clear-molecules.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/testsuite-selection-clear-molecules.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,16 @@
+### 2. clear molecule selection
+
+AT_SETUP([Selection - clear])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/2"
+srcfile=box.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-all-molecules --clear-molecule-selection -s empty.xyz"
+mv empty.xyz empty_a.xyz
+check_command_output $srcpath $srcfile "box.xyz" "-I --select-all-molecules --clear-molecule-selection --undo -s box.xyz"
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-all-molecules --clear-molecule-selection --undo --redo -s empty.xyz"
+mv empty.xyz empty_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' empty_a.xyz empty_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Molecules/testsuite-selection-molecule-by-id.at
===================================================================
--- tests/regression/Selection/Molecules/testsuite-selection-molecule-by-id.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/testsuite-selection-molecule-by-id.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,32 @@
+### 4. (un)select molecules by id
+
+
+AT_SETUP([Selection - Molecule by id])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/4"
+srcfile=box.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "water_id5.xyz" "-I --select-molecule-by-id 5 -s water_id5.xyz"
+mv water_id5.xyz water_id5_a.xyz
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-molecule-by-id 5 --undo -s empty.xyz"
+check_command_output $srcpath $srcfile "water_id5.xyz" "-I --select-molecule-by-id 5 --undo --redo -s water_id5.xyz"
+mv water_id5.xyz water_id5_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' water_id5_a.xyz water_id5_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - Molecule by id])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/4"
+srcfile=box.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "id5_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-id 5 -s id5_missing.xyz"
+mv id5_missing.xyz id5_missing_a.xyz
+check_command_output $srcpath $srcfile "box.xyz" "-I --select-all-molecules --unselect-molecule-by-id 5 --undo -s box.xyz"
+check_command_output $srcpath $srcfile "id5_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-id 5 --undo --redo -s id5_missing.xyz"
+mv id5_missing.xyz id5_missing_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' id5_missing_a.xyz id5_missing_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Molecules/testsuite-selection-molecules-by-formula.at
===================================================================
--- tests/regression/Selection/Molecules/testsuite-selection-molecules-by-formula.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/testsuite-selection-molecules-by-formula.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,60 @@
+### 3. (un)select molecules by formula
+
+
+AT_SETUP([Selection - Molecules by formula])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/3"
+srcfile=mix.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "water.xyz" "-I --select-molecule-by-formula H2O -s water.xyz"
+mv water.xyz water_a.xyz
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-molecule-by-formula H2O --undo -s empty.xyz"
+check_command_output $srcpath $srcfile "water.xyz" "-I --select-molecule-by-formula H2O --undo --redo -s water.xyz"
+mv water.xyz water_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' water_a.xyz water_b.xyz], 0, [ignore], [ignore])
+
+check_command_output $srcpath $srcfile "ethanol.xyz" "-I --select-molecule-by-formula C2H5(OH) -s ethanol.xyz"
+mv ethanol.xyz ethanol_a.xyz
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-molecule-by-formula C2H5(OH) --undo -s empty.xyz"
+check_command_output $srcpath $srcfile "ethanol.xyz" "-I --select-molecule-by-formula C2H5(OH) --undo --redo -s ethanol.xyz"
+mv ethanol.xyz ethanol_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' ethanol_a.xyz ethanol_b.xyz], 0, [ignore], [ignore])
+
+check_command_output $srcpath $srcfile "benzene.xyz" "-I --select-molecule-by-formula C6H6 -s benzene.xyz"
+mv benzene.xyz benzene_a.xyz
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-molecule-by-formula C6H6 --undo -s empty.xyz"
+check_command_output $srcpath $srcfile "benzene.xyz" "-I --select-molecule-by-formula C6H6 --undo --redo -s benzene.xyz"
+mv benzene.xyz benzene_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' benzene_a.xyz benzene_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - Molecules by formula])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/3"
+srcfile=mix.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "water_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-formula H2O -s water_missing.xyz"
+mv water_missing.xyz water_missing_a.xyz
+check_command_output $srcpath $srcfile "mix.xyz" "-I --select-all-molecules --unselect-molecule-by-formula H2O --undo -s mix.xyz"
+check_command_output $srcpath $srcfile "water_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-formula H2O --undo --redo -s water_missing.xyz"
+mv water_missing.xyz water_missing_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' water_missing_a.xyz water_missing_b.xyz], 0, [ignore], [ignore])
+
+check_command_output $srcpath $srcfile "ethanol_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-formula C2H5(OH) -s ethanol_missing.xyz"
+mv ethanol_missing.xyz ethanol_missing_a.xyz
+check_command_output $srcpath $srcfile "mix.xyz" "-I --select-all-molecules --unselect-molecule-by-formula C2H5(OH) --undo -s mix.xyz"
+check_command_output $srcpath $srcfile "ethanol_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-formula C2H5(OH) --undo --redo -s ethanol_missing.xyz"
+mv ethanol_missing.xyz ethanol_missing_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' ethanol_missing_a.xyz ethanol_missing_b.xyz], 0, [ignore], [ignore])
+
+check_command_output $srcpath $srcfile "benzene_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-formula C6H6 -s benzene_missing.xyz"
+mv benzene_missing.xyz benzene_missing_a.xyz
+check_command_output $srcpath $srcfile "mix.xyz" "-I --select-all-molecules --unselect-molecule-by-formula C6H6 --undo -s mix.xyz"
+check_command_output $srcpath $srcfile "benzene_missing.xyz" "-I --select-all-molecules --unselect-molecule-by-formula C6H6 --undo --redo -s benzene_missing.xyz"
+mv benzene_missing.xyz benzene_missing_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' benzene_missing_a.xyz benzene_missing_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Molecules/testsuite-selection-molecules-by-name.at
===================================================================
--- tests/regression/Selection/Molecules/testsuite-selection-molecules-by-name.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/testsuite-selection-molecules-by-name.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,31 @@
+### 5. (un)select molecule by name
+
+AT_SETUP([Selection - Molecules by name])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/5"
+srcfile=test.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "water.xyz" "-I --select-molecule-by-id 1 --change-molname \"water\" --unselect-molecule-by-id 1 --select-molecule-by-name water -s water.xyz"
+mv water.xyz water_a.xyz
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-molecule-by-id 1 --change-molname \"water\" --unselect-molecule-by-id 1 --select-molecule-by-name water --undo -s empty.xyz"
+check_command_output $srcpath $srcfile "water.xyz" "-I --select-molecule-by-id 1 --change-molname \"water\" --unselect-molecule-by-id 1 --select-molecule-by-name water --undo --redo -s water.xyz"
+mv water.xyz water_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' water_a.xyz water_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - Molecules by name])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/5"
+srcfile=test.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-molecule-by-id 1 --change-molname \"water\" --unselect-molecule-by-name water -s empty.xyz"
+mv empty.xyz empty_a.xyz
+check_command_output $srcpath $srcfile "water.xyz" "-I --select-molecule-by-id 1 --change-molname \"water\" --unselect-molecule-by-name water --undo -s water.xyz"
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-molecule-by-id 1 --change-molname \"water\" --unselect-molecule-by-name water --undo --redo -s empty.xyz"
+mv empty.xyz empty_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' empty_a.xyz empty_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/Molecules/testsuite-selection-molecules-of-atoms.at
===================================================================
--- tests/regression/Selection/Molecules/testsuite-selection-molecules-of-atoms.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/Molecules/testsuite-selection-molecules-of-atoms.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,31 @@
+### 6. (un)select molecule from atom selection
+
+AT_SETUP([Selection - Molecules by atom selection])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/6"
+srcfile=box.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "water.xyz" "-I --select-atom-by-id 0 --select-atoms-molecules -s water.xyz"
+mv water.xyz water_a.xyz
+check_command_output $srcpath $srcfile "empty.xyz" "-I --select-atom-by-id 0 --select-atoms-molecules --undo -s empty.xyz"
+check_command_output $srcpath $srcfile "water.xyz" "-I --select-atom-by-id 0 --select-atoms-molecules --undo --redo -s water.xyz"
+mv water.xyz water_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' water_a.xyz water_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
+
+AT_SETUP([Unselection - Molecules by atom selection])
+AT_KEYWORDS([selection,molecule])
+# some variables before
+srcpath="Selection/Molecules/6"
+srcfile=box.xyz
+m4_include(CheckCommand.sh)
+# the tests
+check_command_output $srcpath $srcfile "water_missing.xyz" "-I --select-all-molecules --select-atom-by-id 0 --unselect-atoms-molecules -s water_missing.xyz"
+mv water_missing.xyz water_missing_a.xyz
+check_command_output $srcpath $srcfile "box.xyz" "-I --select-all-molecules --select-atom-by-id 0 --unselect-atoms-molecules --undo -s box.xyz"
+check_command_output $srcpath $srcfile "water_missing.xyz" "-I --select-all-molecules --select-atom-by-id 0 --unselect-atoms-molecules --undo --redo -s water_missing.xyz"
+mv water_missing.xyz water_missing_b.xyz
+AT_CHECK([diff -I '.*Created by molecuilder.*' water_missing_a.xyz water_missing_b.xyz], 0, [ignore], [ignore])
+AT_CLEANUP
Index: tests/regression/Selection/testsuite-selection.at
===================================================================
--- tests/regression/Selection/testsuite-selection.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
+++ tests/regression/Selection/testsuite-selection.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -0,0 +1,44 @@
+AT_BANNER([MoleCuilder - Selections])
+
+### ATOMS ####
+
+# 5. (un)select atoms by element
+m4_include(Selection/Atoms/testsuite-selection-atoms-by-element.at)
+
+# 6. (un)select atom by id
+m4_include(Selection/Atoms/testsuite-selection-atom-by-id.at)
+
+# 1. (un)select all atoms
+m4_include(Selection/Atoms/testsuite-selection-all-atoms.at)
+
+# 2. (un)select all atoms inside cuboid
+m4_include(Selection/Atoms/testsuite-selection-atoms-inside-cuboid.at)
+
+# 3. (un)select all atoms inside sphere
+m4_include(Selection/Atoms/testsuite-selection-atoms-inside-sphere.at)
+
+# 4. (un)select all atoms of molecule
+m4_include(Selection/Atoms/testsuite-selection-atoms-of-molecule.at)
+
+# 7. clear atom selection
+m4_include(Selection/Atoms/testsuite-selection-clear-atoms.at)
+
+### Molecules ###
+
+# 1. (un)select all molecules
+m4_include(Selection/Molecules/testsuite-selection-all-molecules.at)
+
+# 2. clear molecule selection
+m4_include(Selection/Molecules/testsuite-selection-clear-molecules.at)
+
+# 3. (un)select molecules by formula
+m4_include(Selection/Molecules/testsuite-selection-molecules-by-formula.at)
+
+# 4. (un)select molecule by id
+m4_include(Selection/Molecules/testsuite-selection-molecule-by-id.at)
+
+# 5. (un)select molecule by name
+m4_include(Selection/Molecules/testsuite-selection-molecules-by-name.at)
+
+# 6. (un)select molecule from atom selection
+m4_include(Selection/Molecules/testsuite-selection-molecules-of-atoms.at)
Index: tests/regression/Simple_configuration/2/post/test.pdb
===================================================================
--- tests/regression/Simple_configuration/2/post/test.pdb	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ tests/regression/Simple_configuration/2/post/test.pdb	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -1,3 +1,3 @@
-REMARK created by molecuilder on Fri Aug 27 12:18:33 2010
-ATOM      1  H01 tes b   0        10.0    10.0    10.0   1.0   1.0         0 H 0
+REMARK created by molecuilder on Tue Dec  7 13:11:31 2010
+ATOM      1 H01 0pre b1         10.000  10.000  10.000  1.00  1.00           H 0
 END
Index: tests/regression/testsuite-molecules.at
===================================================================
--- tests/regression/testsuite-molecules.at	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ tests/regression/testsuite-molecules.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -45,8 +45,8 @@
 AT_KEYWORDS([Molecules])
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Molecules/6/pre/test.* .], 0)
-AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ --select-molecules-atoms 0 -t "1., 1., 1." --periodic 0], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ --select-molecule-by-id 0 --select-molecules-atoms -t "1., 1., 1." --periodic 0], 0, [stdout], [stderr])
 AT_CHECK([file=test.conf; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Molecules/6/post/$file], 0, [ignore], [ignore])
 AT_CHECK([/bin/cp -f ${abs_top_srcdir}/${AUTOTEST_PATH}/Molecules/6/pre/test2.* .], 0)
-AT_CHECK([../../molecuilder -i test2.conf -e ${abs_top_srcdir}/src/ --select-molecules-atoms 0 -t "-1., -1., -1." --periodic 0], 0, [stdout], [stderr])
+AT_CHECK([../../molecuilder -i test2.conf -e ${abs_top_srcdir}/src/ --select-molecule-by-id 0 --select-molecules-atoms -t "-1., -1., -1." --periodic 0], 0, [stdout], [stderr])
 AT_CHECK([file=test2.conf; diff $file ${abs_top_srcdir}/${AUTOTEST_PATH}/Molecules/6/post/$file], 0, [ignore], [ignore])
 AT_CLEANUP
Index: tests/regression/testsuite-simple_configuration.at
===================================================================
--- tests/regression/testsuite-simple_configuration.at	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ tests/regression/testsuite-simple_configuration.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -43,20 +43,20 @@
 AT_SETUP([Simple configuration - saving conf file])
 AT_KEYWORDS([configuration])
-AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -o pcp -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.conf -s store.conf], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.conf -e ${abs_top_srcdir}/src/ -o pcp -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.conf --output store.conf], 0, [ignore], [ignore])
 AT_CHECK([diff store.conf ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/post/test.conf], 0, [ignore], [ignore])
 AT_CLEANUP
 AT_SETUP([Simple configuration - saving mpqc (from parsed xyz) file])
 AT_KEYWORDS([configuration])
-AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ -o mpqc -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.xyz -s store.in], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ -o mpqc -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.xyz --output store.in], 0, [ignore], [ignore])
 AT_CHECK([diff store.in ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/post/test.in], 0, [ignore], [ignore])
 AT_CLEANUP
 AT_SETUP([Simple configuration - saving pdb file])
 AT_KEYWORDS([configuration])
-AT_CHECK([../../molecuilder -i test.pdb -e ${abs_top_srcdir}/src/ -o pdb -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.pdb -s store.pdb], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.pdb -e ${abs_top_srcdir}/src/ -o pdb -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.pdb --output store.pdb], 0, [ignore], [ignore])
 AT_CHECK([diff -I '.*created by molecuilder.*' store.pdb ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/post/test.pdb], 0, [ignore], [ignore])
 AT_CLEANUP
 AT_SETUP([Simple configuration - saving xyz file])
 AT_KEYWORDS([configuration])
-AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ -o xyz -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.xyz -s store.xyz], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -i test.xyz -e ${abs_top_srcdir}/src/ -o xyz -l ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/pre/test.xyz --output store.xyz], 0, [ignore], [ignore])
 AT_CHECK([diff -I '.*Created by molecuilder.*' store.xyz ${abs_top_srcdir}/${AUTOTEST_PATH}/Simple_configuration/2/post/test.xyz], 0, [ignore], [ignore])
 AT_CLEANUP
Index: tests/regression/testsuite-standard_options.at
===================================================================
--- tests/regression/testsuite-standard_options.at	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ tests/regression/testsuite-standard_options.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -1,16 +1,13 @@
 AT_BANNER([MoleCuilder - standard options])
 # 1. verbosity
-AT_SETUP([Standard Options - verbosity])
+AT_SETUP([Standard Options - verbosity with Undo/Redo])
 AT_KEYWORDS([options])
 AT_CHECK([pwd],[ignore],[ignore])
-AT_CHECK([../../molecuilder -v 1], 0, [stdout], [ignore])
-AT_CHECK([grep "Setting verbosity from .* to 1" stdout], 0, [ignore], [ignore])
-AT_CLEANUP
-AT_SETUP([Standard Options - verbosity with Undo/Redo])
-AT_KEYWORDS([options])
-AT_CHECK([../../molecuilder -v 1 --undo], 0, [stdout], [ignore])
-AT_CHECK([grep "Setting verbosity from 1 to .*" stdout], 0, [ignore], [ignore])
-AT_CHECK([../../molecuilder -v 1 --undo --redo], 0, [stdout], [ignore])
-AT_CHECK([grep "Setting verbosity from .* to 1" stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -v 9], 0, [stdout], [ignore])
+AT_CHECK([grep "Setting verbosity from .* to 9" stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -v 9 --undo], 0, [stdout], [ignore])
+AT_CHECK([grep "Setting verbosity from 9 to .*" stdout], 0, [ignore], [ignore])
+AT_CHECK([../../molecuilder -v 9 --undo --redo], 0, [stdout], [ignore])
+AT_CHECK([grep "Setting verbosity from .* to 9" stdout], 0, [ignore], [ignore])
 AT_CLEANUP
 
Index: tests/regression/testsuite.at
===================================================================
--- tests/regression/testsuite.at	(revision dd97a92224a10b645572d2e62e316c7cf76175e6)
+++ tests/regression/testsuite.at	(revision 5d6f38416b4c5e08382366362df9df4bac7f185a)
@@ -16,4 +16,6 @@
 m4_include(testsuite-simple_configuration.at)
 
+m4_include(Selection/testsuite-selection.at)
+
 m4_include(testsuite-domain.at)
 
