45#include "types/InversionTypeParser.hpp"
50#include "types/HarmonicInversionType.hpp"
51#include "types/ImproperCosineInversionType.hpp"
53#include "utils/Constants.hpp"
56#include "utils/OpenMDException.hpp"
62 InversionTypeParser::InversionTypeParser() {
63 stringToEnumMap_[
"AmberImproper"] = itAmberImproper;
64 stringToEnumMap_[
"ImproperCosine"] = itImproperCosine;
65 stringToEnumMap_[
"Harmonic"] = itHarmonic;
66 stringToEnumMap_[
"CentralAtomHeight"] = itCentralAtomHeight;
67 stringToEnumMap_[
"Dreiding"] = itDreiding;
71 const std::string& type, std::vector<RealType> pars) {
72 std::string line(type);
74 std::vector<RealType>::iterator it;
75 for (it = pars.begin(); it != pars.end(); ++it) {
77 line.append(std::to_string(*it));
80 return parseLine(line);
83 InversionType* InversionTypeParser::parseLine(
const std::string& line) {
87 int nTokens = tokenizer.countTokens();
93 InversionTypeEnum it = getInversionTypeEnum(tokenizer.nextToken());
98 case itImproperCosine:
100 if (nTokens < 3 || nTokens % 3 != 0) {
103 int nSets = nTokens / 3;
105 std::vector<ImproperCosineInversionParameter> parameters;
106 for (
int i = 0; i < nSets; ++i) {
108 currParam.kchi = tokenizer.nextTokenAsDouble();
109 currParam.n = tokenizer.nextTokenAsInt();
110 currParam.delta = tokenizer.nextTokenAsDouble() / 180.0 *
112 parameters.push_back(currParam);
119 case itAmberImproper:
124 RealType v2 = tokenizer.nextTokenAsDouble();
142 RealType degreesPerRadian = 180.0 / Constants::PI;
145 RealType d0 = tokenizer.nextTokenAsDouble() * pow(degreesPerRadian, 2);
148 RealType phi0 = tokenizer.nextTokenAsDouble() / degreesPerRadian;
179 return inversionType;
182 InversionTypeParser::InversionTypeEnum
183 InversionTypeParser::getInversionTypeEnum(
const std::string& str) {
184 std::map<std::string, InversionTypeEnum>::iterator i;
185 i = stringToEnumMap_.find(str);
187 return i == stringToEnumMap_.end() ? itUnknown : i->second;
"types/AmberImproperTorsionType.hpp"
This inversion potential has the form:
"types/ImproperCosineInversionType.hpp"
The string tokenizer class allows an application to break a string into tokens The set of delimiters ...
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.