Changes in src/molecule.hpp [e4afb4:af2c424]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/molecule.hpp
re4afb4 raf2c424 66 66 struct EvaluatePotential 67 67 { 68 int startstep; //!< start configuration (MDStep in atom::trajectory)69 int endstep; //!< end configuration (MDStep in atom::trajectory)70 atom **PermutationMap; //!< gives target ptr for each atom, array of size molecule::AtomCount (this is "x" in \f$ V^{con}(x) \f$ )68 int startstep; //!< start configuration (MDStep in atom::trajectory) 69 int endstep; //!< end configuration (MDStep in atom::trajectory) 70 atom **PermutationMap; //!< gives target ptr for each atom, array of size molecule::AtomCount (this is "x" in \f$ V^{con}(x) \f$ ) 71 71 DistanceMap **DistanceList; //!< distance list of each atom to each atom 72 72 DistanceMap::iterator *StepList; //!< iterator to ascend through NearestNeighbours \a **DistanceList 73 int *DoubleList; //!< count of which sources want to move to this target, basically the injective measure (>1 -> not injective)73 int *DoubleList; //!< count of which sources want to move to this target, basically the injective measure (>1 -> not injective) 74 74 DistanceMap::iterator *DistanceIterators; //!< marks which was the last picked target as injective candidate with smallest distance 75 bool IsAngstroem; //!< whether coordinates are in angstroem (true) or bohrradius (false)76 double *PenaltyConstants; //!< penalty constant in front of each term75 bool IsAngstroem; //!< whether coordinates are in angstroem (true) or bohrradius (false) 76 double *PenaltyConstants; //!< penalty constant in front of each term 77 77 }; 78 78 … … 80 80 * Class incorporates number of types 81 81 */ 82 class molecule : public PointCloud, public Observable 83 { 82 class molecule : public PointCloud , public Observable { 84 83 friend molecule *NewMolecule(); 85 84 friend void DeleteMolecule(molecule *); 86 85 87 public:88 typedef ATOMSET(std::list) atomSet;89 typedef std::set<atomId_t> atomIdSet;90 typedef ObservedIterator<atomSet> iterator;91 typedef atomSet::const_iterator const_iterator;92 93 const periodentafel * const elemente; //!< periodic table with each element94 // old deprecated atom handling95 //atom *start; //!< start of atom list96 //atom *end; //!< end of atom list97 //bond *first; //!< start of bond list98 //bond *last; //!< end of bond list99 int MDSteps;//!< The number of MD steps in Trajectories100 //int AtomCount; //!< number of atoms, brought up-to-date by CountAtoms()101 int BondCount;//!< number of atoms, brought up-to-date by CountBonds()102 mutable int NoNonHydrogen;//!< number of non-hydrogen atoms in molecule103 mutable int NoNonBonds;//!< number of non-hydrogen bonds in molecule104 mutable int NoCyclicBonds;//!< number of cyclic bonds in molecule, by DepthFirstSearchAnalysis()105 double BondDistance;//!< typical bond distance used in CreateAdjacencyList() and furtheron106 bool ActiveFlag;//!< in a MoleculeListClass used to discern active from inactive molecules107 //Vector Center; //!< Center of molecule in a global box108 int IndexNr;//!< index of molecule in a MoleculeListClass109 char name[MAXSTRINGSIZE];//!< arbitrary name110 111 private:112 Formula formula;113 Cacheable<int>AtomCount;114 moleculeId_t id;115 atomSet atoms; //<!list of atoms116 atomIdSet atomIds; //<!set of atomic ids to check uniqueness of atoms117 protected:118 //void CountAtoms();119 /**120 * this iterator type should be used for internal variables, \86 public: 87 typedef ATOMSET(std::list) atomSet; 88 typedef std::set<atomId_t> atomIdSet; 89 typedef ObservedIterator<atomSet> iterator; 90 typedef atomSet::const_iterator const_iterator; 91 92 const periodentafel * const elemente; //!< periodic table with each element 93 // old deprecated atom handling 94 //atom *start; //!< start of atom list 95 //atom *end; //!< end of atom list 96 //bond *first; //!< start of bond list 97 //bond *last; //!< end of bond list 98 int MDSteps; //!< The number of MD steps in Trajectories 99 //int AtomCount; //!< number of atoms, brought up-to-date by CountAtoms() 100 int BondCount; //!< number of atoms, brought up-to-date by CountBonds() 101 mutable int NoNonHydrogen; //!< number of non-hydrogen atoms in molecule 102 mutable int NoNonBonds; //!< number of non-hydrogen bonds in molecule 103 mutable int NoCyclicBonds; //!< number of cyclic bonds in molecule, by DepthFirstSearchAnalysis() 104 double BondDistance; //!< typical bond distance used in CreateAdjacencyList() and furtheron 105 bool ActiveFlag; //!< in a MoleculeListClass used to discern active from inactive molecules 106 //Vector Center; //!< Center of molecule in a global box 107 int IndexNr; //!< index of molecule in a MoleculeListClass 108 char name[MAXSTRINGSIZE]; //!< arbitrary name 109 110 private: 111 Formula formula; 112 Cacheable<int> AtomCount; 113 moleculeId_t id; 114 atomSet atoms; //<!list of atoms 115 atomIdSet atomIds; //<!set of atomic ids to check uniqueness of atoms 116 protected: 117 //void CountAtoms(); 118 /** 119 * this iterator type should be used for internal variables, \ 121 120 * since it will not lock 122 */ 123 typedef atomSet::iterator internal_iterator; 124 125 molecule(const periodentafel * const teil); 126 virtual ~molecule(); 121 */ 122 typedef atomSet::iterator internal_iterator; 123 124 125 molecule(const periodentafel * const teil); 126 virtual ~molecule(); 127 127 128 128 129 public: … … 150 151 bool empty() const; 151 152 size_t size() const; 152 const_iterator erase( const_iterator loc);153 const_iterator erase( atom * key);154 const_iterator find (atom * key) const;155 pair<iterator, bool> insert(atom * const key);153 const_iterator erase( const_iterator loc ); 154 const_iterator erase( atom * key ); 155 const_iterator find ( atom * key ) const; 156 pair<iterator,bool> insert ( atom * const key ); 156 157 bool containsAtom(atom* key); 158 157 159 158 160 // re-definition of virtual functions from PointCloud 159 161 const char * const GetName() const; 160 Vector *GetCenter() const ;161 TesselPoint *GetPoint() const ;162 Vector *GetCenter() const ; 163 TesselPoint *GetPoint() const ; 162 164 int GetMaxId() const; 163 void GoToNext() const; 164 void GoToFirst() const; 165 bool IsEmpty() const; 166 bool IsEnd() const; 165 void GoToNext() const ; 166 void GoToFirst() const ; 167 bool IsEmpty() const ; 168 bool IsEnd() const ; 169 170 // templates for allowing global manipulation of molecule with each atom as single argument 171 template <typename res> void ActWithEachAtom( res (molecule::*f)(atom *) ) const; 172 template <typename res> void ActWithEachAtom( res (molecule::*f)(atom *) const) const; 173 174 // templates for allowing global copying of molecule with each atom as single argument 175 template <typename res> void ActOnCopyWithEachAtom( res (molecule::*f)(atom *) , molecule *copy) const; 176 template <typename res> void ActOnCopyWithEachAtom( res (molecule::*f)(atom *) const, molecule *copy) const; 177 178 // templates for allowing global manipulation of all atoms 179 template <typename res, typename typ> void ActOnAllAtoms( res (typ::*f)() ) const; 180 template <typename res, typename typ> void ActOnAllAtoms( res (typ::*f)() const) const; 181 template <typename res, typename typ, typename T> void ActOnAllAtoms( res (typ::*f)(T), T t ) const; 182 template <typename res, typename typ, typename T> void ActOnAllAtoms( res (typ::*f)(T) const, T t ) const; 183 template <typename res, typename typ, typename T, typename U> void ActOnAllAtoms( res (typ::*f)(T, U), T t, U u ) const; 184 template <typename res, typename typ, typename T, typename U> void ActOnAllAtoms( res (typ::*f)(T, U) const, T t, U u ) const; 185 template <typename res, typename typ, typename T, typename U, typename V> void ActOnAllAtoms( res (typ::*f)(T, U, V), T t, U u, V v) const; 186 template <typename res, typename typ, typename T, typename U, typename V> void ActOnAllAtoms( res (typ::*f)(T, U, V) const, T t, U u, V v) const; 187 template <typename res, typename typ, typename T, typename U, typename V, typename W> void ActOnAllAtoms( res (typ::*f)(T, U, V, W), T t, U u, V v, W w) const; 188 template <typename res, typename typ, typename T, typename U, typename V, typename W> void ActOnAllAtoms( res (typ::*f)(T, U, V, W) const, T t, U u, V v, W w) const; 189 190 // templates for allowing conditional global copying of molecule with each atom as single argument 191 template <typename res> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) () ) const; 192 template <typename res> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) () const ) const; 193 template <typename res> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) () ) const; 194 template <typename res> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) () const ) const; 195 template <typename res, typename T> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T), T t ) const; 196 template <typename res, typename T> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T) const, T t ) const; 197 template <typename res, typename T> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) (T), T t ) const; 198 template <typename res, typename T> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) (T) const, T t ) const; 199 template <typename res, typename T, typename U> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T, U), T t, U u ) const; 200 template <typename res, typename T, typename U> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T, U) const, T t, U u ) const; 201 template <typename res, typename T, typename U> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) (T, U), T t, U u ) const; 202 template <typename res, typename T, typename U> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) (T, U) const, T t, U u ) const; 203 template <typename res, typename T, typename U, typename V> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T, U, V), T t, U u, V v ) const; 204 template <typename res, typename T, typename U, typename V> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) , molecule *copy, bool (atom::*condition) (T, U, V) const, T t, U u, V v ) const; 205 template <typename res, typename T, typename U, typename V> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) (T, U, V), T t, U u, V v ) const; 206 template <typename res, typename T, typename U, typename V> void ActOnCopyWithEachAtomIfTrue( res (molecule::*f)(atom *) const , molecule *copy, bool (atom::*condition) (T, U, V) const, T t, U u, V v ) const; 207 208 // templates for allowing global manipulation of an array with one entry per atom 209 void SetIndexedArrayForEachAtomTo ( atom **array, int ParticleInfo::* index) const; 210 template <typename T> void SetIndexedArrayForEachAtomTo ( T *array, int ParticleInfo::* index, void (*Setor)(T *, T *)) const; 211 template <typename T> void SetIndexedArrayForEachAtomTo ( T *array, int ParticleInfo::* index, void (*Setor)(T *, T *), T t) const; 212 template <typename T> void SetIndexedArrayForEachAtomTo ( T *array, int ParticleInfo::* index, void (*Setor)(T *, T *), T *t) const; 213 template <typename T> void SetIndexedArrayForEachAtomTo ( T *array, int element::* index, void (*Setor)(T *, T *)) const; 214 template <typename T> void SetIndexedArrayForEachAtomTo ( T *array, int element::* index, void (*Setor)(T *, T *), T t) const; 215 template <typename T> void SetIndexedArrayForEachAtomTo ( T *array, int element::* index, void (*Setor)(T *, T *), T *t) const; 216 template <typename T, typename typ> void SetIndexedArrayForEachAtomTo ( T *array, int ParticleInfo::*index, T (atom::*Setor)(typ &), typ atom::*value) const; 217 template <typename T, typename typ> void SetIndexedArrayForEachAtomTo ( T *array, int ParticleInfo::*index, T (atom::*Setor)(typ &) const, typ atom::*value) const; 218 template <typename T, typename typ> void SetIndexedArrayForEachAtomTo ( T *array, int ParticleInfo::*index, T (atom::*Setor)(typ &), typ &vect ) const; 219 template <typename T, typename typ> void SetIndexedArrayForEachAtomTo ( T *array, int ParticleInfo::*index, T (atom::*Setor)(typ &) const, typ &vect ) const; 220 221 // templates for allowing global manipulation of each atom by entries in an array 222 template <typename T, typename typ, typename typ2> void SetAtomValueToIndexedArray ( T *array, int typ::*index, T typ2::*value ) const; 223 template <typename T, typename typ> void SetAtomValueToValue ( T value, T typ::*ptr ) const; 224 225 template <typename res, typename typ> res SumPerAtom(res (typ::*f)() ) const; 226 template <typename res, typename typ> res SumPerAtom(res (typ::*f)() const ) const; 227 template <typename res, typename typ, typename T> res SumPerAtom(res (typ::*f)(T) , T t ) const; 228 template <typename res, typename typ, typename T> res SumPerAtom(res (typ::*f)(T) const, T t ) const; 167 229 168 230 /// remove atoms from molecule. … … 179 241 bool RemoveBond(bond *pointer); 180 242 bool RemoveBonds(atom *BondPartner); 181 bool hasBondStructure() const;243 bool hasBondStructure(); 182 244 unsigned int CountBonds() const; 183 245 … … 206 268 void ScanForPeriodicCorrection(); 207 269 bool VerletForceIntegration(char *file, config &configuration, const size_t offset); 270 void Thermostats(config &configuration, double ActualTemp, int Thermostat); 208 271 double VolumeOfConvexEnvelope(bool IsAngstroem); 209 272 … … 211 274 double MinimiseConstrainedPotential(atom **&permutation, int startstep, int endstep, bool IsAngstroem); 212 275 void EvaluateConstrainedForces(int startstep, int endstep, atom **PermutationMap, ForceMatrix *Force); 213 bool LinearInterpolationBetweenConfiguration(int startstep, int endstep, std::string prefix, config &configuration, bool MapByIdentity);214 276 bool LinearInterpolationBetweenConfiguration(int startstep, int endstep, std::string &prefix, config &configuration, bool MapByIdentity); 277 215 278 bool CheckBounds(const Vector *x) const; 216 279 void GetAlignvector(struct lsq_params * par) const; … … 218 281 /// Initialising routines in fragmentation 219 282 void CreateAdjacencyListFromDbondFile(ifstream *output); 220 void CreateAdjacencyList(double bonddistance, bool IsAngstroem, void (BondGraph::*f)(BondedParticle * const , BondedParticle * const , double &, double &, bool), BondGraph *BG = NULL);283 void CreateAdjacencyList(double bonddistance, bool IsAngstroem, void (BondGraph::*f)(BondedParticle * const , BondedParticle * const , double &, double &, bool), BondGraph *BG = NULL); 221 284 int CorrectBondDegree() const; 222 285 void OutputBondsList() const; … … 224 287 void OutputGraphInfoPerAtom() const; 225 288 void OutputGraphInfoPerBond() const; 289 226 290 227 291 // Graph analysis … … 237 301 bond * CopyBond(atom *left, atom *right, bond *CopyBond); 238 302 239 molecule *CopyMolecule() const; 303 304 molecule *CopyMolecule(); 240 305 molecule* CopyMoleculeFromSubRegion(const Shape&) const; 241 306 … … 243 308 int FragmentMolecule(int Order, std::string &prefix); 244 309 bool CheckOrderAtSite(bool *AtomMask, Graph *GlobalKeySetList, int Order, int *MinimumRingSize, std::string path = ""); 245 bool StoreBondsToFile(std::string filename, std::string path = "");246 bool StoreAdjacencyToFile(std::string filename, std::string path = "");310 bool StoreBondsToFile(std::string &filename, std::string path = ""); 311 bool StoreAdjacencyToFile(std::string &filename, std::string path = ""); 247 312 bool CheckAdjacencyFileAgainstMolecule(std::string &path, atom **ListOfAtoms); 248 313 bool ParseOrderAtSiteFromFile(std::string &path); … … 265 330 266 331 // Output routines. 267 bool Output(std::ostream * const output) const;268 bool OutputTrajectories(ofstream * const output) const;332 bool Output(std::ostream * const output); 333 bool OutputTrajectories(ofstream * const output); 269 334 void OutputListOfBonds() const; 270 335 bool OutputXYZ(ofstream * const output) const; … … 276 341 void flipActiveFlag(); 277 342 278 private: 279 void init_DFS(struct DFSAccounting&) const; 280 int last_atom; //!< number given to last atom 281 mutable internal_iterator InternalPointer; //!< internal pointer for PointCloud 343 private: 344 int last_atom; //!< number given to last atom 345 mutable internal_iterator InternalPointer; //!< internal pointer for PointCloud 282 346 }; 283 347 … … 285 349 void DeleteMolecule(molecule* mol); 286 350 351 #include "molecule_template.hpp" 352 287 353 /** A list of \a molecule classes. 288 354 */ 289 class MoleculeListClass : public Observable 290 { 291 public: 292 MoleculeList ListOfMolecules; //!< List of the contained molecules 293 int MaxIndex; 355 class MoleculeListClass : public Observable { 356 public: 357 MoleculeList ListOfMolecules; //!< List of the contained molecules 358 int MaxIndex; 294 359 295 360 MoleculeListClass(World *world); … … 315 380 void eraseMolecule(); 316 381 317 private:382 private: 318 383 World *world; //!< The world this List belongs to. Needed to avoid deadlocks in the destructor 319 384 }; 385 320 386 321 387 /** A leaf for a tree of \a molecule class 322 388 * Wraps molecules in a tree structure 323 389 */ 324 class MoleculeLeafClass 325 { 326 public: 327 molecule *Leaf; //!< molecule of this leaf 328 //MoleculeLeafClass *UpLeaf; //!< Leaf one level up 329 //MoleculeLeafClass *DownLeaf; //!< First leaf one level down 330 MoleculeLeafClass *previous; //!< Previous leaf on this level 331 MoleculeLeafClass *next; //!< Next leaf on this level 390 class MoleculeLeafClass { 391 public: 392 molecule *Leaf; //!< molecule of this leaf 393 //MoleculeLeafClass *UpLeaf; //!< Leaf one level up 394 //MoleculeLeafClass *DownLeaf; //!< First leaf one level down 395 MoleculeLeafClass *previous; //!< Previous leaf on this level 396 MoleculeLeafClass *next; //!< Next leaf on this level 332 397 333 398 //MoleculeLeafClass(MoleculeLeafClass *Up, MoleculeLeafClass *Previous); … … 344 409 }; 345 410 411 346 412 #endif /*MOLECULES_HPP_*/ 347 413
Note:
See TracChangeset
for help on using the changeset viewer.