Changes in src/molecule.hpp [af2c424:e4afb4]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/molecule.hpp
raf2c424 re4afb4 66 66 struct EvaluatePotential 67 67 { 68 int startstep; 69 int endstep; 70 atom **PermutationMap; 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; 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; 76 double *PenaltyConstants; 75 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 { 82 class molecule : public PointCloud, public Observable 83 { 83 84 friend molecule *NewMolecule(); 84 85 friend void DeleteMolecule(molecule *); 85 86 86 87 88 89 90 91 92 93 94 95 96 97 98 int MDSteps;//!< The number of MD steps in Trajectories99 100 int BondCount;//!< number of atoms, brought up-to-date by CountBonds()101 mutable int NoNonHydrogen;//!< number of non-hydrogen atoms in molecule102 mutable int NoNonBonds;//!< number of non-hydrogen bonds in molecule103 mutable int NoCyclicBonds;//!< number of cyclic bonds in molecule, by DepthFirstSearchAnalysis()104 double BondDistance;//!< typical bond distance used in CreateAdjacencyList() and furtheron105 bool ActiveFlag;//!< in a MoleculeListClass used to discern active from inactive molecules106 107 int IndexNr;//!< index of molecule in a MoleculeListClass108 char name[MAXSTRINGSIZE];//!< arbitrary name109 110 111 112 Cacheable<int>AtomCount;113 114 115 116 117 118 119 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 element 94 // old deprecated atom handling 95 //atom *start; //!< start of atom list 96 //atom *end; //!< end of atom list 97 //bond *first; //!< start of bond list 98 //bond *last; //!< end of bond list 99 int MDSteps; //!< The number of MD steps in Trajectories 100 //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 molecule 103 mutable int NoNonBonds; //!< number of non-hydrogen bonds in molecule 104 mutable int NoCyclicBonds; //!< number of cyclic bonds in molecule, by DepthFirstSearchAnalysis() 105 double BondDistance; //!< typical bond distance used in CreateAdjacencyList() and furtheron 106 bool ActiveFlag; //!< in a MoleculeListClass used to discern active from inactive molecules 107 //Vector Center; //!< Center of molecule in a global box 108 int IndexNr; //!< index of molecule in a MoleculeListClass 109 char name[MAXSTRINGSIZE]; //!< arbitrary name 110 111 private: 112 Formula formula; 113 Cacheable<int> AtomCount; 114 moleculeId_t id; 115 atomSet atoms; //<!list of atoms 116 atomIdSet atomIds; //<!set of atomic ids to check uniqueness of atoms 117 protected: 118 //void CountAtoms(); 119 /** 120 * this iterator type should be used for internal variables, \ 120 121 * since it will not lock 121 */ 122 typedef atomSet::iterator internal_iterator; 123 124 125 molecule(const periodentafel * const teil); 126 virtual ~molecule(); 127 122 */ 123 typedef atomSet::iterator internal_iterator; 124 125 molecule(const periodentafel * const teil); 126 virtual ~molecule(); 128 127 129 128 public: … … 151 150 bool empty() const; 152 151 size_t size() const; 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);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); 157 156 bool containsAtom(atom* key); 158 159 157 160 158 // re-definition of virtual functions from PointCloud 161 159 const char * const GetName() const; 162 Vector *GetCenter() const 163 TesselPoint *GetPoint() const 160 Vector *GetCenter() const; 161 TesselPoint *GetPoint() const; 164 162 int GetMaxId() 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; 163 void GoToNext() const; 164 void GoToFirst() const; 165 bool IsEmpty() const; 166 bool IsEnd() const; 229 167 230 168 /// remove atoms from molecule. … … 241 179 bool RemoveBond(bond *pointer); 242 180 bool RemoveBonds(atom *BondPartner); 243 bool hasBondStructure() ;181 bool hasBondStructure() const; 244 182 unsigned int CountBonds() const; 245 183 … … 268 206 void ScanForPeriodicCorrection(); 269 207 bool VerletForceIntegration(char *file, config &configuration, const size_t offset); 270 void Thermostats(config &configuration, double ActualTemp, int Thermostat);271 208 double VolumeOfConvexEnvelope(bool IsAngstroem); 272 209 … … 274 211 double MinimiseConstrainedPotential(atom **&permutation, int startstep, int endstep, bool IsAngstroem); 275 212 void EvaluateConstrainedForces(int startstep, int endstep, atom **PermutationMap, ForceMatrix *Force); 276 bool LinearInterpolationBetweenConfiguration(int startstep, int endstep, std::string &prefix, config &configuration, bool MapByIdentity);277 213 bool LinearInterpolationBetweenConfiguration(int startstep, int endstep, std::string prefix, config &configuration, bool MapByIdentity); 214 278 215 bool CheckBounds(const Vector *x) const; 279 216 void GetAlignvector(struct lsq_params * par) const; … … 281 218 /// Initialising routines in fragmentation 282 219 void CreateAdjacencyListFromDbondFile(ifstream *output); 283 void CreateAdjacencyList(double bonddistance, bool IsAngstroem, void 220 void CreateAdjacencyList(double bonddistance, bool IsAngstroem, void(BondGraph::*f)(BondedParticle * const , BondedParticle * const , double &, double &, bool), BondGraph *BG = NULL); 284 221 int CorrectBondDegree() const; 285 222 void OutputBondsList() const; … … 287 224 void OutputGraphInfoPerAtom() const; 288 225 void OutputGraphInfoPerBond() const; 289 290 226 291 227 // Graph analysis … … 301 237 bond * CopyBond(atom *left, atom *right, bond *CopyBond); 302 238 303 304 molecule *CopyMolecule(); 239 molecule *CopyMolecule() const; 305 240 molecule* CopyMoleculeFromSubRegion(const Shape&) const; 306 241 … … 308 243 int FragmentMolecule(int Order, std::string &prefix); 309 244 bool CheckOrderAtSite(bool *AtomMask, Graph *GlobalKeySetList, int Order, int *MinimumRingSize, std::string path = ""); 310 bool StoreBondsToFile(std::string &filename, std::string path = "");311 bool StoreAdjacencyToFile(std::string &filename, std::string path = "");245 bool StoreBondsToFile(std::string filename, std::string path = ""); 246 bool StoreAdjacencyToFile(std::string filename, std::string path = ""); 312 247 bool CheckAdjacencyFileAgainstMolecule(std::string &path, atom **ListOfAtoms); 313 248 bool ParseOrderAtSiteFromFile(std::string &path); … … 330 265 331 266 // Output routines. 332 bool Output(std::ostream * const output) ;333 bool OutputTrajectories(ofstream * const output) ;267 bool Output(std::ostream * const output) const; 268 bool OutputTrajectories(ofstream * const output) const; 334 269 void OutputListOfBonds() const; 335 270 bool OutputXYZ(ofstream * const output) const; … … 341 276 void flipActiveFlag(); 342 277 343 private: 344 int last_atom; //!< number given to last atom 345 mutable internal_iterator InternalPointer; //!< internal pointer for PointCloud 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 346 282 }; 347 283 … … 349 285 void DeleteMolecule(molecule* mol); 350 286 351 #include "molecule_template.hpp"352 353 287 /** A list of \a molecule classes. 354 288 */ 355 class MoleculeListClass : public Observable { 356 public: 357 MoleculeList ListOfMolecules; //!< List of the contained molecules 358 int MaxIndex; 289 class MoleculeListClass : public Observable 290 { 291 public: 292 MoleculeList ListOfMolecules; //!< List of the contained molecules 293 int MaxIndex; 359 294 360 295 MoleculeListClass(World *world); … … 380 315 void eraseMolecule(); 381 316 382 317 private: 383 318 World *world; //!< The world this List belongs to. Needed to avoid deadlocks in the destructor 384 319 }; 385 320 386 387 321 /** A leaf for a tree of \a molecule class 388 322 * Wraps molecules in a tree structure 389 323 */ 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 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 397 332 398 333 //MoleculeLeafClass(MoleculeLeafClass *Up, MoleculeLeafClass *Previous); … … 409 344 }; 410 345 411 412 346 #endif /*MOLECULES_HPP_*/ 413 347
Note:
See TracChangeset
for help on using the changeset viewer.