48#include "visitors/RigidBodyVisitor.hpp"
56 void LipidHeadVisitor::visit(
RigidBody* rb) {
61 std::shared_ptr<GenericData> data;
62 std::shared_ptr<AtomData> atomData;
63 std::shared_ptr<AtomInfo> atomInfo;
67 if (!canVisit(rb->getType()))
return;
69 globalID = rb->getGlobalIndex();
71 rotMatrix = rb->getA();
73 newVec = rotMatrix * u;
75 data = rb->getPropertyByName(
"ATOMDATA");
77 if (data !=
nullptr) {
78 atomData = std::dynamic_pointer_cast<AtomData>(data);
80 if (atomData ==
nullptr) {
81 std::cerr <<
"can not get Atom Data from " << rb->getType()
84 atomData = std::make_shared<AtomData>();
91 atomData = std::make_shared<AtomData>();
95 atomInfo = std::make_shared<AtomInfo>();
96 atomInfo->atomTypeName =
"X";
97 atomInfo->globalID = globalID;
98 atomInfo->pos[0] = pos[0];
99 atomInfo->pos[1] = pos[1];
100 atomInfo->pos[2] = pos[2];
101 atomInfo->vec[0] = newVec[0];
102 atomInfo->vec[1] = newVec[1];
103 atomInfo->vec[2] = newVec[2];
105 atomData->addAtomInfo(atomInfo);
108 atomData->setID(
"ATOMDATA");
109 rb->addProperty(atomData);
113 void LipidHeadVisitor::addLipidHeadName(
const std::string& name) {
114 lipidHeadName.insert(name);
117 bool LipidHeadVisitor::canVisit(
const std::string& name) {
118 return lipidHeadName.find(name) != lipidHeadName.end() ? true :
false;
121 const std::string LipidHeadVisitor::toString() {
124 std::set<std::string>::iterator i;
128 "------------------------------------------------------------------\n");
131 snprintf(buffer, 65535,
"Visitor name: %s\n", visitorName.c_str());
135 snprintf(buffer, 65535,
"lipidHeadName list contains below types:\n");
138 for (i = lipidHeadName.begin(); i != lipidHeadName.end(); ++i) {
139 snprintf(buffer, 65535,
"%s\t", i->c_str());
143 snprintf(buffer, 65535,
"\n");
148 "------------------------------------------------------------------\n");
154 void RBCOMVisitor::visit(
RigidBody* rb) {
155 std::shared_ptr<AtomData> atomData;
156 std::shared_ptr<AtomInfo> atomInfo;
160 atomInfo = std::make_shared<AtomInfo>();
161 atomInfo->atomTypeName =
"X";
162 atomInfo->pos[0] = pos[0];
163 atomInfo->pos[1] = pos[1];
164 atomInfo->pos[2] = pos[2];
165 atomInfo->vec[0] = 0;
166 atomInfo->vec[1] = 0;
167 atomInfo->vec[2] = 0;
169 atomData = std::make_shared<AtomData>();
170 atomData->setID(
"ATOMDATA");
171 atomData->addAtomInfo(atomInfo);
173 rb->addProperty(atomData);
176 const std::string RBCOMVisitor::toString() {
182 "------------------------------------------------------------------\n");
185 snprintf(buffer, 65535,
"Visitor name: %s\n", visitorName.c_str());
189 snprintf(buffer, 65535,
190 "Visitor Description: add a pseudo atom at the center of "
197 "------------------------------------------------------------------\n");
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.