parsed_atom parse_pdbqt_atom_string(const std::string& str) { unsigned number = checked_convert_substring<unsigned>(str, 7, 11, "atom number"); vec coords(checked_convert_substring<fl>(str, 31, 38, "coordinate"), checked_convert_substring<fl>(str, 39, 46, "coordinate"), checked_convert_substring<fl>(str, 47, 54, "coordinate")); fl charge = 0; if(!substring_is_blank(str, 69, 76)) charge = checked_convert_substring<fl>(str, 69, 76, "charge"); std::string name = omit_whitespace(str, 78, 79); sz ad = string_to_ad_type(name); parsed_atom tmp(ad, charge, coords, number); if(is_non_ad_metal_name(name)) tmp.xs = XS_TYPE_Met_D; if(tmp.acceptable_type()) return tmp; else throw atom_syntax_error(std::string("\"") + name + "\" is not a valid AutoDock type. Note that AutoDock atom types are case-sensitive."); }
int omit_whitespace_newline(int c) { return omit_whitespace(c) || c == '\n'; }