--- trunk/OOPSE/libmdtools/CutoffGroup.hpp 2004/05/12 15:02:03 1164 +++ trunk/OOPSE/libmdtools/CutoffGroup.hpp 2004/05/12 15:58:35 1166 @@ -3,68 +3,85 @@ class CutoffGroup{ #include "Atom.hpp" class CutoffGroup{ - public: - - void addAtom(Atom* atom) {cutoffAtomList.push_back(atom);} - - Atom* beginAtom(vector::iterator& i){ - i = cutoffAtomList.begin(); - return i != cutoffAtomList.end()? *i : NULL; - } - - Atom* nextAtom(vector::iterator& i){ - i++; - return i != cutoffAtomList.end()? *i : NULL; - } - - double getMass(){ - vector::iterator i; - Atom* atom; - double totalMass; - double mass; +public: + + CutoffGroup() { + haveTotalMass = false; + totalMass = 0.0; + } + + void addAtom(Atom* atom) {cutoffAtomList.push_back(atom);} + + Atom* beginAtom(vector::iterator& i){ + i = cutoffAtomList.begin(); + return i != cutoffAtomList.end()? *i : NULL; + } + + Atom* nextAtom(vector::iterator& i){ + i++; + return i != cutoffAtomList.end()? *i : NULL; + } + + double getMass(){ + vector::iterator i; + Atom* atom; + double mass; - totalMass = 0; + if (!haveTotalMass) { + totalMass = 0; + for(atom = beginAtom(i); atom != NULL; atom = nextAtom(i)){ mass = atom->getMass(); totalMass += mass; } - return totalMass; + haveTotalMass = true; } - void getCOM(double com[3]){ - vector::iterator i; - Atom* atom; - double pos[3]; - double totalMass; - double mass; - - com[0] = 0; - com[1] = 0; - com[2] = 0; - totalMass = 0; + return totalMass; + } + + void getCOM(double com[3]){ + vector::iterator i; + Atom* atom; + double pos[3]; + double mass; + + com[0] = 0; + com[1] = 0; + com[2] = 0; + totalMass = getMass(); + + if (cutoffAtomList.size() == 1) { + + beginAtom(i)->getPos(com); + + } else { + for(atom = beginAtom(i); atom != NULL; atom = nextAtom(i)){ mass = atom->getMass(); - totalMass += mass; atom->getPos(pos); com[0] += pos[0] * mass; com[1] += pos[1] * mass; com[2] += pos[2] * mass; } - + com[0] /= totalMass; com[1] /= totalMass; com[2] /= totalMass; - } - - int getNumAtom() {return cutoffAtomList.size();} + + } + + int getNumAtom() {return cutoffAtomList.size();} + +private: + vector cutoffAtomList; + bool haveTotalMass; + double totalMass; - private: - vector cutoffAtomList; - }; #endif