65 class MoleculeStamp :
public DataHolder {
66 DeclareParameter(Name, std::string);
67 DeclareParameter(ConstrainTotalCharge,
bool);
71 virtual ~MoleculeStamp();
83 void setIdent(
int id) { ident_ = id; }
84 int getIdent() {
return ident_; }
86 void setRegion(
int r) { region_ = r; }
87 int getRegion() {
return region_; }
89 std::size_t getNAtoms() {
return atomStamps_.size(); }
90 std::size_t getNBonds() {
return bondStamps_.size(); }
91 std::size_t getNBends() {
return bendStamps_.size(); }
92 std::size_t getNTorsions() {
return torsionStamps_.size(); }
93 std::size_t getNInversions() {
return inversionStamps_.size(); }
94 std::size_t getNRigidBodies() {
return rigidBodyStamps_.size(); }
95 std::size_t getNCutoffGroups() {
return cutoffGroupStamps_.size(); }
96 std::size_t getNConstraints() {
return constraintStamps_.size(); }
97 int getNIntegrable() {
return nintegrable_; }
98 std::size_t getNFreeAtoms() {
return freeAtoms_.size(); }
99 virtual void validate();
101 AtomStamp* getAtomStamp(
int index) {
return atomStamps_[index]; }
102 BondStamp* getBondStamp(
int index) {
return bondStamps_[index]; }
103 BendStamp* getBendStamp(
int index) {
return bendStamps_[index]; }
104 TorsionStamp* getTorsionStamp(
int index) {
return torsionStamps_[index]; }
106 return inversionStamps_[index];
109 return rigidBodyStamps_[index];
112 return cutoffGroupStamps_[index];
115 return fragmentStamps_[index];
118 return constraintStamps_[index];
121 bool isBondInSameRigidBody(
BondStamp* bond);
122 bool isAtomInRigidBody(
int atomIndex);
123 bool isAtomInRigidBody(
int atomIndex,
int& whichRigidBody,
125 std::vector<std::pair<int, int>> getJointAtoms(
int rb1,
int rb2);
132 void checkTorsions();
133 void checkInversions();
134 void checkRigidBodies();
135 void checkCutoffGroups();
136 void checkFragments();
137 void checkConstraints();
139 template<
class Cont,
class T>
140 bool addIndexSensitiveStamp(Cont& cont, T* stamp) {
142 unsigned int index = stamp->getIndex();
144 size_t size = cont.size();
146 if (size >= index + 1) {
147 if (cont[index] != NULL) {
154 cont.insert(cont.end(), index - cont.size() + 1, NULL);
162 std::vector<AtomStamp*> atomStamps_;
163 std::vector<int> freeAtoms_;
164 std::vector<BondStamp*> bondStamps_;
165 std::vector<BendStamp*> bendStamps_;
166 std::vector<TorsionStamp*> torsionStamps_;
167 std::vector<InversionStamp*> inversionStamps_;
168 std::vector<RigidBodyStamp*> rigidBodyStamps_;
169 std::vector<CutoffGroupStamp*> cutoffGroupStamps_;
170 std::vector<FragmentStamp*> fragmentStamps_;
171 std::vector<ConstraintStamp*> constraintStamps_;
172 std::vector<int> atom2Rigidbody;