/* * atom.hpp * * Created on: Aug 3, 2009 * Author: heber */ #ifndef ATOM_HPP_ #define ATOM_HPP_ using namespace std; /*********************************************** includes ***********************************/ // include config.h #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include "atom_atominfo.hpp" #include "atom_bondedparticle.hpp" #include "atom_graphnode.hpp" #include "atom_particleinfo.hpp" #include "atom_trajectoryparticle.hpp" #include "tesselation.hpp" /****************************************** forward declarations *****************************/ class Vector; /********************************************** declarations *******************************/ /** Single atom. * Class incorporates position, type */ class atom : public TesselPoint, public TrajectoryParticle, public GraphNode, public BondedParticle, public virtual ParticleInfo, public virtual AtomInfo { public: atom *previous; //!< previous atom in molecule list atom *next; //!< next atom in molecule list atom *father; //!< In many-body bond order fragmentations points to originating atom int *sort; //!< sort criteria atom(); atom(class atom *pointer); virtual ~atom(); bool Output(ofstream *out, int ElementNo, int AtomNo, const char *comment = NULL) const; bool Output(ofstream *out, int *ElementNo, int *AtomNo, const char *comment = NULL); bool OutputXYZLine(ofstream *out) const; bool OutputTrajectory(ofstream *out, int *ElementNo, int *AtomNo, int step) const; bool OutputTrajectoryXYZ(ofstream *out, int step) const; void OutputMPQCLine(ofstream *out, Vector *center, int *AtomNo) const; void InitComponentNr(); void EqualsFather ( atom *ptr, atom **res ); void CorrectFather(); atom *GetTrueFather(); bool Compare(const atom &ptr); double DistanceToVector(Vector &origin); double DistanceSquaredToVector(Vector &origin); bool IsInParallelepiped(Vector offset, double *parallelepiped); private: }; #endif /* ATOM_HPP_ */