67 class FragmentStamp :
public DataHolder {
68 DeclareParameter(Name, std::string);
72 virtual ~FragmentStamp();
84 std::size_t getNAtoms() {
return atomStamps_.size(); }
85 std::size_t getNBonds() {
return bondStamps_.size(); }
86 std::size_t getNBends() {
return bendStamps_.size(); }
87 std::size_t getNTorsions() {
return torsionStamps_.size(); }
88 std::size_t getNInversions() {
return inversionStamps_.size(); }
89 std::size_t getNRigidBodies() {
return rigidBodyStamps_.size(); }
90 std::size_t getNCutoffGroups() {
return cutoffGroupStamps_.size(); }
91 std::size_t getNConstraints() {
return constraintStamps_.size(); }
93 std::size_t getNNodes() {
return nodesStamps_.size(); }
95 AtomStamp* getAtomStamp(
int index) {
return atomStamps_[index]; }
96 BondStamp* getBondStamp(
int index) {
return bondStamps_[index]; }
97 BendStamp* getBendStamp(
int index) {
return bendStamps_[index]; }
98 TorsionStamp* getTorsionStamp(
int index) {
return torsionStamps_[index]; }
100 return inversionStamps_[index];
103 return rigidBodyStamps_[index];
106 return cutoffGroupStamps_[index];
109 return constraintStamps_[index];
111 NodesStamp* getNodesStamp(
int index) {
return nodesStamps_[index]; }
113 bool isBondInSameRigidBody(
BondStamp* bond);
114 bool isAtomInRigidBody(
int atomIndex);
115 bool isAtomInRigidBody(
int atomIndex,
int& whichRigidBody,
117 std::vector<std::pair<int, int>> getJointAtoms(
int rb1,
int rb2);
119 std::size_t getNFreeAtoms() {
return freeAtoms_.size(); }
120 virtual void validate();
121 int getIndex() {
return index_; }
128 void checkTorsions();
129 void checkInversions();
130 void checkRigidBodies();
131 void checkCutoffGroups();
133 void checkConstraints();
135 template<
class Cont,
class T>
136 bool addIndexSensitiveStamp(Cont& cont, T* stamp) {
138 unsigned int index = stamp->getIndex();
140 size_t size = cont.size();
142 if (size >= index + 1) {
143 if (cont[index] != NULL) {
150 cont.insert(cont.end(), index - cont.size() + 1, NULL);
159 std::vector<AtomStamp*> atomStamps_;
160 std::vector<int> freeAtoms_;
161 std::vector<BondStamp*> bondStamps_;
162 std::vector<BendStamp*> bendStamps_;
163 std::vector<TorsionStamp*> torsionStamps_;
164 std::vector<InversionStamp*> inversionStamps_;
165 std::vector<RigidBodyStamp*> rigidBodyStamps_;
166 std::vector<CutoffGroupStamp*> cutoffGroupStamps_;
167 std::vector<ConstraintStamp*> constraintStamps_;
168 std::vector<NodesStamp*> nodesStamps_;
169 std::vector<int> nodeAtoms_;
170 std::vector<int> atom2Rigidbody;