48#include "types/DirectionalAdapter.hpp"
53#include "utils/simError.h"
57 bool DirectionalAdapter::isDirectional() {
58 return at_->hasProperty(DirectionalTypeID);
62 if (!isDirectional()) {
63 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
64 "DirectionalAdapter::getDirectionalParam was passed an atomType "
66 "\tthat does not appear to be a Directional atom.\n",
67 at_->getName().c_str());
68 painCave.severity = OPENMD_ERROR;
73 std::shared_ptr<GenericData> data =
74 at_->getPropertyByName(DirectionalTypeID);
75 if (data ==
nullptr) {
77 painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
78 "DirectionalAdapter::getDirectionalParam could not find Directional\n"
79 "\tparameters for atomType %s.\n",
80 at_->getName().c_str());
81 painCave.severity = OPENMD_ERROR;
86 std::shared_ptr<DirectionalAtypeData> directionalData =
87 std::dynamic_pointer_cast<DirectionalAtypeData>(data);
88 if (directionalData ==
nullptr) {
89 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
90 "DirectionalAdapter::getDirectionalParam could not convert\n"
91 "\tGenericData to DirectionalAtypeData for atom type %s\n",
92 at_->getName().c_str());
93 painCave.severity = OPENMD_ERROR;
98 return directionalData->getData();
101 Mat3x3d DirectionalAdapter::getI() {
102 DirectionalAtypeParameters directionalParam = getDirectionalParam();
103 return directionalParam.I;
106 void DirectionalAdapter::makeDirectional(Mat3x3d I) {
107 if (isDirectional()) { at_->removeProperty(DirectionalTypeID); }
109 DirectionalAtypeParameters directionalParam {};
111 directionalParam.I = I;
113 at_->addProperty(std::make_shared<DirectionalAtypeData>(DirectionalTypeID,
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.