45#include "types/TorsionTypeParser.hpp"
49#include "types/CharmmTorsionType.hpp"
50#include "types/CubicTorsionType.hpp"
51#include "types/HarmonicTorsionType.hpp"
56#include "utils/Constants.hpp"
57#include "utils/OpenMDException.hpp"
63 TorsionTypeParser::TorsionTypeParser() : trans180_(true) {
64 stringToEnumMap_[
"GhostTorsion"] = ttGhostTorsion;
65 stringToEnumMap_[
"Cubic"] = ttCubic;
66 stringToEnumMap_[
"Quartic"] = ttQuartic;
67 stringToEnumMap_[
"Polynomial"] = ttPolynomial;
68 stringToEnumMap_[
"Charmm"] = ttCharmm;
69 stringToEnumMap_[
"Opls"] = ttOpls;
70 stringToEnumMap_[
"Trappe"] = ttTrappe;
71 stringToEnumMap_[
"Harmonic"] = ttHarmonic;
74 TorsionType* TorsionTypeParser::parseTypeAndPars(
const std::string& type,
75 std::vector<RealType> pars) {
76 std::string line(type);
78 std::vector<RealType>::iterator it;
79 for (it = pars.begin(); it != pars.end(); ++it) {
81 line.append(std::to_string(*it));
84 return parseLine(line);
87 TorsionType* TorsionTypeParser::parseLine(
const std::string& line) {
90 int nTokens = tokenizer.countTokens();
96 TorsionTypeEnum tt = getTorsionTypeEnum(tokenizer.nextToken());
105 RealType k3 = tokenizer.nextTokenAsDouble();
106 RealType k2 = tokenizer.nextTokenAsDouble();
107 RealType k1 = tokenizer.nextTokenAsDouble();
108 RealType k0 = tokenizer.nextTokenAsDouble();
121 RealType k3 = tokenizer.nextTokenAsDouble();
122 RealType k2 = tokenizer.nextTokenAsDouble();
123 RealType k1 = tokenizer.nextTokenAsDouble();
124 RealType k0 = tokenizer.nextTokenAsDouble();
137 RealType k4 = tokenizer.nextTokenAsDouble();
138 RealType k3 = tokenizer.nextTokenAsDouble();
139 RealType k2 = tokenizer.nextTokenAsDouble();
140 RealType k1 = tokenizer.nextTokenAsDouble();
141 RealType k0 = tokenizer.nextTokenAsDouble();
151 if (nTokens < 2 || nTokens % 2 != 0) {
154 int nPairs = nTokens / 2;
156 RealType coefficient;
162 for (
int i = 0; i < nPairs; ++i) {
163 power = tokenizer.nextTokenAsInt();
164 bool isOdd = power % 2 == 0 ? false :
true;
166 coefficient = tokenizer.nextTokenAsDouble();
168 if (!trans180_ && isOdd) coefficient = -coefficient;
170 ptt->setCoefficient(power, coefficient);
178 if (nTokens < 3 || nTokens % 3 != 0) {
181 int nSets = nTokens / 3;
183 std::vector<CharmmTorsionParameter> parameters;
184 for (
int i = 0; i < nSets; ++i) {
186 currParam.kchi = tokenizer.nextTokenAsDouble();
187 currParam.n = tokenizer.nextTokenAsInt();
188 currParam.delta = tokenizer.nextTokenAsDouble() / 180.0 *
191 bool isOdd = currParam.n % 2 == 0 ? false :
true;
193 currParam.delta = Constants::PI - currParam.delta;
194 if (isOdd) currParam.kchi = -currParam.kchi;
197 parameters.push_back(currParam);
210 RealType v1 = tokenizer.nextTokenAsDouble();
211 RealType v2 = tokenizer.nextTokenAsDouble();
212 RealType v3 = tokenizer.nextTokenAsDouble();
224 RealType c0 = tokenizer.nextTokenAsDouble();
225 RealType c1 = tokenizer.nextTokenAsDouble();
226 RealType c2 = tokenizer.nextTokenAsDouble();
227 RealType c3 = tokenizer.nextTokenAsDouble();
246 RealType degreesPerRadian = 180.0 / Constants::PI;
249 RealType phi0 = tokenizer.nextTokenAsDouble() / degreesPerRadian;
252 RealType d0 = tokenizer.nextTokenAsDouble() * pow(degreesPerRadian, 2);
254 if (!trans180_) phi0 = Constants::PI - phi0;
268 TorsionTypeParser::TorsionTypeEnum TorsionTypeParser::getTorsionTypeEnum(
269 const std::string& str) {
270 std::map<std::string, TorsionTypeEnum>::iterator i;
271 i = stringToEnumMap_.find(str);
273 return i == stringToEnumMap_.end() ? ttUnknown : i->second;
"types/CharmmTorsionType.hpp" These torsion types are defined identically with functional form given ...
These torsion types are defined identically with functional form given in equation 5 in the following...
These torsion types are defined identically with functional form given in the following paper:
"types/PolynomialTorsionType.hpp"
The string tokenizer class allows an application to break a string into tokens The set of delimiters ...
"types/TrappeTorsionType.hpp" These torsion types are defined identically with functional form given ...
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.