85 Atom* donatedHydrogen;
88 using AtomIterator = std::vector<Atom*>::iterator;
89 using BondIterator = std::vector<Bond*>::iterator;
90 using BendIterator = std::vector<Bend*>::iterator;
91 using TorsionIterator = std::vector<Torsion*>::iterator;
92 using InversionIterator = std::vector<Inversion*>::iterator;
93 using RigidBodyIterator = std::vector<RigidBody*>::iterator;
94 using CutoffGroupIterator = std::vector<CutoffGroup*>::iterator;
95 using IntegrableObjectIterator = std::vector<StuntDouble*>::iterator;
96 using ConstraintPairIterator = std::vector<ConstraintPair*>::iterator;
97 using ConstraintElemIterator = std::vector<ConstraintElem*>::iterator;
98 using FluctuatingChargeIterator = std::vector<Atom*>::iterator;
99 using HBondDonorIterator = std::vector<HBondDonor*>::iterator;
100 using HBondAcceptorIterator = std::vector<Atom*>::iterator;
119 int getRegion() {
return molStamp_->getRegion(); }
121 MoleculeStamp* getMolStamp()
const {
return molStamp_; }
124 std::string
getType() {
return molStamp_->getName(); }
132 void setConstrainTotalCharge(
bool ctc) { constrainTotalCharge_ = ctc; }
134 bool constrainTotalCharge() {
return constrainTotalCharge_; }
157 void addConstraintPair(ConstraintPair* consPair);
159 void addConstraintElem(ConstraintElem* consElem);
199 Atom* getAtomAt(
unsigned int i) {
200 assert(i < atoms_.size());
204 RigidBody* getRigidBodyAt(
unsigned int i) {
205 assert(i < rigidBodies_.size());
206 return rigidBodies_[i];
209 Atom* beginAtom(std::vector<Atom*>::iterator& i) {
211 return (i == atoms_.end()) ? NULL : *i;
214 Atom* nextAtom(std::vector<Atom*>::iterator& i) {
216 return (i == atoms_.end()) ? NULL : *i;
219 Bond* beginBond(std::vector<Bond*>::iterator& i) {
221 return (i == bonds_.end()) ? NULL : *i;
224 Bond* nextBond(std::vector<Bond*>::iterator& i) {
226 return (i == bonds_.end()) ? NULL : *i;
229 Bend* beginBend(std::vector<Bend*>::iterator& i) {
231 return (i == bends_.end()) ? NULL : *i;
234 Bend* nextBend(std::vector<Bend*>::iterator& i) {
236 return (i == bends_.end()) ? NULL : *i;
239 Torsion* beginTorsion(std::vector<Torsion*>::iterator& i) {
240 i = torsions_.begin();
241 return (i == torsions_.end()) ? NULL : *i;
244 Torsion* nextTorsion(std::vector<Torsion*>::iterator& i) {
246 return (i == torsions_.end()) ? NULL : *i;
249 Inversion* beginInversion(std::vector<Inversion*>::iterator& i) {
250 i = inversions_.begin();
251 return (i == inversions_.end()) ? NULL : *i;
254 Inversion* nextInversion(std::vector<Inversion*>::iterator& i) {
256 return (i == inversions_.end()) ? NULL : *i;
259 RigidBody* beginRigidBody(std::vector<RigidBody*>::iterator& i) {
260 i = rigidBodies_.begin();
261 return (i == rigidBodies_.end()) ? NULL : *i;
264 RigidBody* nextRigidBody(std::vector<RigidBody*>::iterator& i) {
266 return (i == rigidBodies_.end()) ? NULL : *i;
269 StuntDouble* beginIntegrableObject(std::vector<StuntDouble*>::iterator& i) {
270 i = integrableObjects_.begin();
271 return (i == integrableObjects_.end()) ? NULL : *i;
274 StuntDouble* nextIntegrableObject(std::vector<StuntDouble*>::iterator& i) {
276 return (i == integrableObjects_.end()) ? NULL : *i;
279 CutoffGroup* beginCutoffGroup(std::vector<CutoffGroup*>::iterator& i) {
280 i = cutoffGroups_.begin();
281 return (i == cutoffGroups_.end()) ? NULL : *i;
284 CutoffGroup* nextCutoffGroup(std::vector<CutoffGroup*>::iterator& i) {
286 return (i == cutoffGroups_.end()) ? NULL : *i;
289 ConstraintPair* beginConstraintPair(
290 std::vector<ConstraintPair*>::iterator& i) {
291 i = constraintPairs_.begin();
292 return (i == constraintPairs_.end()) ? NULL : *i;
295 ConstraintPair* nextConstraintPair(
296 std::vector<ConstraintPair*>::iterator& i) {
298 return (i == constraintPairs_.end()) ? NULL : *i;
301 ConstraintElem* beginConstraintElem(
302 std::vector<ConstraintElem*>::iterator& i) {
303 i = constraintElems_.begin();
304 return (i == constraintElems_.end()) ? NULL : *i;
307 ConstraintElem* nextConstraintElem(
308 std::vector<ConstraintElem*>::iterator& i) {
310 return (i == constraintElems_.end()) ? NULL : *i;
313 Atom* beginFluctuatingCharge(std::vector<Atom*>::iterator& i) {
314 i = fluctuatingCharges_.begin();
315 return (i == fluctuatingCharges_.end()) ? NULL : *i;
318 Atom* nextFluctuatingCharge(std::vector<Atom*>::iterator& i) {
320 return (i == fluctuatingCharges_.end()) ? NULL : *i;
323 HBondDonor* beginHBondDonor(std::vector<HBondDonor*>::iterator& i) {
324 i = hBondDonors_.begin();
325 return (i == hBondDonors_.end()) ? NULL : *i;
328 HBondDonor* nextHBondDonor(std::vector<HBondDonor*>::iterator& i) {
330 return (i == hBondDonors_.end()) ? NULL : *i;
333 Atom* beginHBondAcceptor(std::vector<Atom*>::iterator& i) {
334 i = hBondAcceptors_.begin();
335 return (i == hBondAcceptors_.end()) ? NULL : *i;
338 Atom* nextHBondAcceptor(std::vector<Atom*>::iterator& i) {
340 return (i == hBondAcceptors_.end()) ? NULL : *i;
377 Vector3d
getCom(
int snapshotNo);
380 void setCom(
const Vector3d& newCom);
383 void moveCom(
const Vector3d& delta);
388 friend std::ostream& operator<<(std::ostream& o, Molecule& mol);
395 void addProperty(std::shared_ptr<GenericData> genData);
426 std::vector<Atom*> atoms_;
427 std::vector<Bond*> bonds_;
428 std::vector<Bend*> bends_;
429 std::vector<Torsion*> torsions_;
430 std::vector<Inversion*> inversions_;
431 std::vector<RigidBody*> rigidBodies_;
432 std::vector<StuntDouble*> integrableObjects_;
433 std::vector<CutoffGroup*> cutoffGroups_;
434 std::vector<ConstraintPair*> constraintPairs_;
435 std::vector<ConstraintElem*> constraintElems_;
436 std::vector<Atom*> fluctuatingCharges_;
437 std::vector<HBondDonor*> hBondDonors_;
438 std::vector<Atom*> hBondAcceptors_;
440 PropertyMap properties_;
441 bool constrainTotalCharge_;
442 MoleculeStamp* molStamp_;