source: molecuilder/src/atom.hpp@ 1e0785

Last change on this file since 1e0785 was f058ef, checked in by Tillmann Crueger <crueger@…>, 16 years ago

Added methods to query Molecules by ID

  • Property mode set to 100644
File size: 3.5 KB
RevLine 
[834ff3]1/*
2 * atom.hpp
3 *
4 * Created on: Aug 3, 2009
5 * Author: heber
6 */
7
8#ifndef ATOM_HPP_
9#define ATOM_HPP_
10
11using namespace std;
12
[17b3a5c]13/*********************************************** includes ***********************************/
14
[4dca8e]15// include config.h
16#ifdef HAVE_CONFIG_H
17#include <config.h>
18#endif
19
20#include <iostream>
[872b51]21#include <list>
[567b7f]22#include <vector>
[4dca8e]23
[2e2a70]24#include "atom_atominfo.hpp"
25#include "atom_bondedparticle.hpp"
26#include "atom_graphnode.hpp"
27#include "atom_particleinfo.hpp"
28#include "atom_trajectoryparticle.hpp"
[834ff3]29#include "tesselation.hpp"
[17b3a5c]30
31/****************************************** forward declarations *****************************/
[834ff3]32
[17b3a5c]33class Vector;
[7bfc19]34class World;
[17b3a5c]35
36/********************************************** declarations *******************************/
[70b7aa]37
[834ff3]38/** Single atom.
39 * Class incorporates position, type
40 */
[6b937bd]41class atom : public TesselPoint, public TrajectoryParticle, public GraphNode, public BondedParticle, public virtual ParticleInfo, public virtual AtomInfo {
[3746aeb]42 friend atom* NewAtom(atomId_t);
[7bfc19]43 friend void DeleteAtom(atom*);
[834ff3]44 public:
45 atom *previous; //!< previous atom in molecule list
46 atom *next; //!< next atom in molecule list
47 atom *father; //!< In many-body bond order fragmentations points to originating atom
48 int *sort; //!< sort criteria
49
[7bfc19]50 virtual atom *clone();
[834ff3]51
[543ce4]52 bool OutputIndexed(ofstream * const out, const int ElementNo, const int AtomNo, const char *comment = NULL) const;
53 bool OutputArrayIndexed(ofstream * const out, const int *ElementNo, int *AtomNo, const char *comment = NULL) const;
[834ff3]54 bool OutputXYZLine(ofstream *out) const;
[543ce4]55 bool OutputTrajectory(ofstream * const out, const int *ElementNo, int *AtomNo, const int step) const;
56 bool OutputTrajectoryXYZ(ofstream * const out, const int step) const;
57 void OutputMPQCLine(ofstream * const out, const Vector *center, int *AtomNo) const;
[872b51]58
[6b937bd]59 void InitComponentNr();
[0cd3b2]60
[94d0ad]61 void EqualsFather ( const atom *ptr, const atom **res ) const;
[dcbdf2]62 void CorrectFather();
[834ff3]63 atom *GetTrueFather();
[94d0ad]64 bool Compare(const atom &ptr) const;
[834ff3]65
[94d0ad]66 double DistanceToVector(const Vector &origin) const;
67 double DistanceSquaredToVector(const Vector &origin) const;
68 bool IsInParallelepiped(const Vector offset, const double *parallelepiped) const;
[7c2f6b]69
[7bfc19]70 // getter and setter
71
72 /**
73 * returns the World that contains this atom.
74 * Use this if you need to get the world without locking
75 * the singleton for example.
76 *
77 */
78 World *getWorld();
79 void setWorld(World*);
80
[f058ef]81 virtual atomId_t getId();
[3746aeb]82 virtual bool changeId(atomId_t newId);
83
84 /**
85 * this function sets the Id without notifying the world. Only use it, if the world has already
86 * gotten an ID for this Atom.
87 */
88 virtual void setId(atomId_t);
89
[7bfc19]90 protected:
91 /**
92 * Protected constructor to ensure construction of atoms through the world.
93 * see World::createAtom()
94 */
95 atom();
96
97 /**
98 * Protected copy-constructor to ensure construction of atoms by cloning.
99 * see atom::clone()
100 */
101 atom(class atom *pointer);
102
103 /**
104 * Protected destructor to ensure destruction of atoms through the world.
105 * see World::destroyAtom()
106 */
107 virtual ~atom();
[834ff3]108 private:
[7bfc19]109 World* world;
[3746aeb]110 atomId_t id;
[834ff3]111};
112
[7bfc19]113/**
114 * internal method used by the world. Do not use if you don't know what you are doing.
115 * You might get burned...
116 * Use World::createAtom() instead.
117 */
[3746aeb]118atom* NewAtom(atomId_t _id);
[7bfc19]119
120/**
121* internal method used by the world. Do not use if you don't know what you are doing.
122 * You might get burned...
123 * Use World::destroyAtom() instead.
124 */
125void DeleteAtom(atom*);
126
127
[834ff3]128#endif /* ATOM_HPP_ */
Note: See TracBrowser for help on using the repository browser.