45#include "io/TorsionTypesSectionParser.hpp"
48#include "types/TorsionTypeParser.hpp"
49#include "utils/simError.h"
53 TorsionTypesSectionParser::TorsionTypesSectionParser(
54 ForceFieldOptions& options) :
56 setSectionName(
"TorsionTypes");
59 void TorsionTypesSectionParser::parseLine(ForceField& ff,
60 const std::string& line,
62 StringTokenizer tokenizer(line);
63 TorsionTypeParser ttParser;
64 TorsionType* torsionType = NULL;
66 std::string torsionConvention = options_.getTorsionAngleConvention();
67 toUpper(torsionConvention);
69 if (torsionConvention.compare(
"180_IS_TRANS") == 0)
74 int nTokens = tokenizer.countTokens();
78 painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
79 "TorsionTypesSectionParser Error: Not enough tokens at line %d\n",
86 std::string at1 = tokenizer.nextToken();
87 std::string at2 = tokenizer.nextToken();
88 std::string at3 = tokenizer.nextToken();
89 std::string at4 = tokenizer.nextToken();
90 std::string remainder = tokenizer.getRemainingString();
93 torsionType = ttParser.parseLine(remainder);
94 }
catch (OpenMDException& e) {
95 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
96 "TorsionTypesSectionParser Error: %s "
103 if (torsionType != NULL) {
104 ff.addTorsionType(at1, at2, at3, at4, torsionType);
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.