1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346
|
// $Id$
//
// Copyright (C) 2004-2006 Rational Discovery LLC
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#ifdef WIN32
#define _USE_MATH_DEFINES
#endif
#include <cmath>
#include "Params.h"
#include <iostream>
#include <sstream>
#include <RDGeneral/StreamOps.h>
#include <boost/lexical_cast.hpp>
#include <boost/tokenizer.hpp>
#include <Geometry/point.h>
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
namespace ForceFields {
namespace UFF {
class ParamCollection *ParamCollection::ds_instance = nullptr;
extern const std::string defaultParamData;
ParamCollection *ParamCollection::getParams(const std::string ¶mData) {
if (ds_instance == nullptr) {
ds_instance = new ParamCollection(paramData);
} else if (paramData != "") {
delete ds_instance;
ds_instance = nullptr;
ds_instance = new ParamCollection(paramData);
}
return ds_instance;
}
ParamCollection::ParamCollection(std::string paramData) {
if (paramData == "") paramData = defaultParamData;
std::istringstream inStream(paramData);
std::string inLine = RDKit::getLine(inStream);
while (!inStream.eof()) {
if (inLine[0] != '#') {
AtomicParams paramObj;
boost::char_separator<char> tabSep("\t");
tokenizer tokens(inLine, tabSep);
tokenizer::iterator token = tokens.begin();
std::string label = *token;
++token;
paramObj.r1 = boost::lexical_cast<double>(*token);
++token;
paramObj.theta0 = boost::lexical_cast<double>(*token);
++token;
paramObj.theta0 = paramObj.theta0 * M_PI / 180.;
paramObj.x1 = boost::lexical_cast<double>(*token);
++token;
paramObj.D1 = boost::lexical_cast<double>(*token);
++token;
paramObj.zeta = boost::lexical_cast<double>(*token);
++token;
paramObj.Z1 = boost::lexical_cast<double>(*token);
++token;
paramObj.V1 = boost::lexical_cast<double>(*token);
++token;
paramObj.U1 = boost::lexical_cast<double>(*token);
++token;
paramObj.GMP_Xi = boost::lexical_cast<double>(*token);
++token;
paramObj.GMP_Hardness = boost::lexical_cast<double>(*token);
++token;
paramObj.GMP_Radius = boost::lexical_cast<double>(*token);
++token;
d_params[label] = paramObj;
}
inLine = RDKit::getLine(inStream);
}
}
const std::string defaultParamData =
"#Atom r1 theta0 x1 D1 zeta Z1 Vi Uj "
"Xi Hard Radius\n"
"H_ 0.354 180 2.886 0.044 12 0.712 0 0 "
"4.528 6.9452 0.371\n"
"H_b 0.46 83.5 2.886 0.044 12 0.712 0 0 "
"4.528 6.9452 0.371\n"
"He4+4 0.849 90 2.362 0.056 15.24 0.098 0 0 "
"9.66 14.92 1.3\n"
"Li 1.336 180 2.451 0.025 12 1.026 0 2 "
"3.006 2.386 1.557\n"
"Be3+2 1.074 109.47 2.745 0.085 12 1.565 0 2 "
"4.877 4.443 1.24\n"
"B_3 0.838 109.47 4.083 0.18 12.052 1.755 0 2 "
"5.11 4.75 0.822\n"
"B_2 0.828 120 4.083 0.18 12.052 1.755 0 2 "
"5.11 4.75 0.822\n"
"C_3 0.757 109.47 3.851 0.105 12.73 1.912 2.119 2 "
"5.343 5.063 0.759\n"
"C_R 0.729 120 3.851 0.105 12.73 1.912 0 2 "
"5.343 5.063 0.759\n"
"C_2 0.732 120 3.851 0.105 12.73 1.912 0 2 "
"5.343 5.063 0.759\n"
"C_1 0.706 180 3.851 0.105 12.73 1.912 0 2 "
"5.343 5.063 0.759\n"
"N_3 0.7 106.7 3.66 0.069 13.407 2.544 0.45 2 "
"6.899 5.88 0.715\n"
"N_R 0.699 120 3.66 0.069 13.407 2.544 0 2 "
"6.899 5.88 0.715\n"
"N_2 0.685 111.2 3.66 0.069 13.407 2.544 0 2 "
"6.899 5.88 0.715\n"
"N_1 0.656 180 3.66 0.069 13.407 2.544 0 2 "
"6.899 5.88 0.715\n"
"O_3 0.658 104.51 3.5 0.06 14.085 2.3 0.018 2 "
"8.741 6.682 0.669\n"
"O_3_z 0.528 146 3.5 0.06 14.085 2.3 0.018 2 "
"8.741 6.682 0.669\n"
"O_R 0.68 110 3.5 0.06 14.085 2.3 0 2 "
"8.741 6.682 0.669\n"
"O_2 0.634 120 3.5 0.06 14.085 2.3 0 2 "
"8.741 6.682 0.669\n"
"O_1 0.639 180 3.5 0.06 14.085 2.3 0 2 "
"8.741 6.682 0.669\n"
"F_ 0.668 180 3.364 0.05 14.762 1.735 0 2 "
"10.874 7.474 0.706\n"
"Ne4+4 0.92 90 3.243 0.042 15.44 0.194 0 2 "
"11.04 10.55 1.768\n"
"Na 1.539 180 2.983 0.03 12 1.081 0 1.25 "
"2.843 2.296 2.085\n"
"Mg3+2 1.421 109.47 3.021 0.111 12 1.787 0 1.25 "
"3.951 3.693 1.5\n"
"Al3 1.244 109.47 4.499 0.505 11.278 1.792 0 1.25 "
"4.06 3.59 1.201\n"
"Si3 1.117 109.47 4.295 0.402 12.175 2.323 1.225 1.25 "
"4.168 3.487 1.176\n"
"P_3+3 1.101 93.8 4.147 0.305 13.072 2.863 2.4 1.25 "
"5.463 4 1.102\n"
"P_3+5 1.056 109.47 4.147 0.305 13.072 2.863 2.4 1.25 "
"5.463 4 1.102\n"
"P_3+q 1.056 109.47 4.147 0.305 13.072 2.863 2.4 1.25 "
"5.463 4 1.102\n"
"S_3+2 1.064 92.1 4.035 0.274 13.969 2.703 0.484 1.25 "
"6.928 4.486 1.047\n"
"S_3+4 1.049 103.2 4.035 0.274 13.969 2.703 0.484 1.25 "
"6.928 4.486 1.047\n"
"S_3+6 1.027 109.47 4.035 0.274 13.969 2.703 0.484 1.25 "
"6.928 4.486 1.047\n"
"S_R 1.077 92.2 4.035 0.274 13.969 2.703 0 1.25 "
"6.928 4.486 1.047\n"
"S_2 0.854 120 4.035 0.274 13.969 2.703 0 1.25 "
"6.928 4.486 1.047\n"
"Cl 1.044 180 3.947 0.227 14.866 2.348 0 1.25 "
"8.564 4.946 0.994\n"
"Ar4+4 1.032 90 3.868 0.185 15.763 0.3 0 1.25 "
"9.465 6.355 2.108\n"
"K_ 1.953 180 3.812 0.035 12 1.165 0 0.7 "
"2.421 1.92 2.586\n"
"Ca6+2 1.761 90 3.399 0.238 12 2.141 0 0.7 "
"3.231 2.88 2\n"
"Sc3+3 1.513 109.47 3.295 0.019 12 2.592 0 0.7 "
"3.395 3.08 1.75\n"
"Ti3+4 1.412 109.47 3.175 0.017 12 2.659 0 0.7 "
"3.47 3.38 1.607\n"
"Ti6+4 1.412 90 3.175 0.017 12 2.659 0 0.7 "
"3.47 3.38 1.607\n"
"V_3+5 1.402 109.47 3.144 0.016 12 2.679 0 0.7 "
"3.65 3.41 1.47\n"
"Cr6+3 1.345 90 3.023 0.015 12 2.463 0 0.7 "
"3.415 3.865 1.402\n"
"Mn6+2 1.382 90 2.961 0.013 12 2.43 0 0.7 "
"3.325 4.105 1.533\n"
"Fe3+2 1.27 109.47 2.912 0.013 12 2.43 0 0.7 "
"3.76 4.14 1.393\n"
"Fe6+2 1.335 90 2.912 0.013 12 2.43 0 0.7 "
"3.76 4.14 1.393\n"
"Co6+3 1.241 90 2.872 0.014 12 2.43 0 0.7 "
"4.105 4.175 1.406\n"
"Ni4+2 1.164 90 2.834 0.015 12 2.43 0 0.7 "
"4.465 4.205 1.398\n"
"Cu3+1 1.302 109.47 3.495 0.005 12 1.756 0 0.7 "
"4.2 4.22 1.434\n"
"Zn3+2 1.193 109.47 2.763 0.124 12 1.308 0 0.7 "
"5.106 4.285 1.4\n"
"Ga3+3 1.26 109.47 4.383 0.415 11 1.821 0 0.7 "
"3.641 3.16 1.211\n"
"Ge3 1.197 109.47 4.28 0.379 12 2.789 0.701 0.7 "
"4.051 3.438 1.189\n"
"As3+3 1.211 92.1 4.23 0.309 13 2.864 1.5 0.7 "
"5.188 3.809 1.204\n"
"Se3+2 1.19 90.6 4.205 0.291 14 2.764 0.335 0.7 "
"6.428 4.131 1.224\n"
"Br 1.192 180 4.189 0.251 15 2.519 0 0.7 "
"7.79 4.425 1.141\n"
"Kr4+4 1.147 90 4.141 0.22 16 0.452 0 0.7 "
"8.505 5.715 2.27\n"
"Rb 2.26 180 4.114 0.04 12 1.592 0 0.2 "
"2.331 1.846 2.77\n"
"Sr6+2 2.052 90 3.641 0.235 12 2.449 0 0.2 "
"3.024 2.44 2.415\n"
"Y_3+3 1.698 109.47 3.345 0.072 12 3.257 0 0.2 "
"3.83 2.81 1.998\n"
"Zr3+4 1.564 109.47 3.124 0.069 12 3.667 0 0.2 "
"3.4 3.55 1.758\n"
"Nb3+5 1.473 109.47 3.165 0.059 12 3.618 0 0.2 "
"3.55 3.38 1.603\n"
"Mo6+6 1.467 90 3.052 0.056 12 3.4 0 0.2 "
"3.465 3.755 1.53\n"
"Mo3+6 1.484 109.47 3.052 0.056 12 3.4 0 0.2 "
"3.465 3.755 1.53\n"
"Tc6+5 1.322 90 2.998 0.048 12 3.4 0 0.2 "
"3.29 3.99 1.5\n"
"Ru6+2 1.478 90 2.963 0.056 12 3.4 0 0.2 "
"3.575 4.015 1.5\n"
"Rh6+3 1.332 90 2.929 0.053 12 3.5 0 0.2 "
"3.975 4.005 1.509\n"
"Pd4+2 1.338 90 2.899 0.048 12 3.21 0 0.2 "
"4.32 4 1.544\n"
"Ag1+1 1.386 180 3.148 0.036 12 1.956 0 0.2 "
"4.436 3.134 1.622\n"
"Cd3+2 1.403 109.47 2.848 0.228 12 1.65 0 0.2 "
"5.034 3.957 1.6\n"
"In3+3 1.459 109.47 4.463 0.599 11 2.07 0 0.2 "
"3.506 2.896 1.404\n"
"Sn3 1.398 109.47 4.392 0.567 12 2.961 0.199 0.2 "
"3.987 3.124 1.354\n"
"Sb3+3 1.407 91.6 4.42 0.449 13 2.704 1.1 0.2 "
"4.899 3.342 1.404\n"
"Te3+2 1.386 90.25 4.47 0.398 14 2.882 0.3 0.2 "
"5.816 3.526 1.38\n"
"I_ 1.382 180 4.5 0.339 15 2.65 0 0.2 "
"6.822 3.762 1.333\n"
"Xe4+4 1.267 90 4.404 0.332 12 0.556 0 0.2 "
"7.595 4.975 2.459\n"
"Cs 2.57 180 4.517 0.045 12 1.573 0 0.1 "
"2.183 1.711 2.984\n"
"Ba6+2 2.277 90 3.703 0.364 12 2.727 0 0.1 "
"2.814 2.396 2.442\n"
"La3+3 1.943 109.47 3.522 0.017 12 3.3 0 0.1 "
"2.8355 2.7415 2.071\n"
"Ce6+3 1.841 90 3.556 0.013 12 3.3 0 0.1 "
"2.774 2.692 1.925\n"
"Pr6+3 1.823 90 3.606 0.01 12 3.3 0 0.1 "
"2.858 2.564 2.007\n"
"Nd6+3 1.816 90 3.575 0.01 12 3.3 0 0.1 "
"2.8685 2.6205 2.007\n"
"Pm6+3 1.801 90 3.547 0.009 12 3.3 0 0.1 "
"2.881 2.673 2\n"
"Sm6+3 1.78 90 3.52 0.008 12 3.3 0 0.1 "
"2.9115 2.7195 1.978\n"
"Eu6+3 1.771 90 3.493 0.008 12 3.3 0 0.1 "
"2.8785 2.7875 2.227\n"
"Gd6+3 1.735 90 3.368 0.009 12 3.3 0 0.1 "
"3.1665 2.9745 1.968\n"
"Tb6+3 1.732 90 3.451 0.007 12 3.3 0 0.1 "
"3.018 2.834 1.954\n"
"Dy6+3 1.71 90 3.428 0.007 12 3.3 0 0.1 "
"3.0555 2.8715 1.934\n"
"Ho6+3 1.696 90 3.409 0.007 12 3.416 0 0.1 "
"3.127 2.891 1.925\n"
"Er6+3 1.673 90 3.391 0.007 12 3.3 0 0.1 "
"3.1865 2.9145 1.915\n"
"Tm6+3 1.66 90 3.374 0.006 12 3.3 0 0.1 "
"3.2514 2.9329 2\n"
"Yb6+3 1.637 90 3.355 0.228 12 2.618 0 0.1 "
"3.2889 2.965 2.158\n"
"Lu6+3 1.671 90 3.64 0.041 12 3.271 0 0.1 "
"2.9629 2.4629 1.896\n"
"Hf3+4 1.611 109.47 3.141 0.072 12 3.921 0 0.1 "
"3.7 3.4 1.759\n"
"Ta3+5 1.511 109.47 3.17 0.081 12 4.075 0 0.1 "
"5.1 2.85 1.605\n"
"W_6+6 1.392 90 3.069 0.067 12 3.7 0 0.1 "
"4.63 3.31 1.538\n"
"W_3+4 1.526 109.47 3.069 0.067 12 3.7 0 0.1 "
"4.63 3.31 1.538\n"
"W_3+6 1.38 109.47 3.069 0.067 12 3.7 0 0.1 "
"4.63 3.31 1.538\n"
"Re6+5 1.372 90 2.954 0.066 12 3.7 0 0.1 "
"3.96 3.92 1.6\n"
"Re3+7 1.314 109.47 2.954 0.066 12 3.7 0 0.1 "
"3.96 3.92 1.6\n"
"Os6+6 1.372 90 3.12 0.037 12 3.7 0 0.1 "
"5.14 3.63 1.7\n"
"Ir6+3 1.371 90 2.84 0.073 12 3.731 0 0.1 "
"5 4 1.866\n"
"Pt4+2 1.364 90 2.754 0.08 12 3.382 0 0.1 "
"4.79 4.43 1.557\n"
"Au4+3 1.262 90 3.293 0.039 12 2.625 0 0.1 "
"4.894 2.586 1.618\n"
"Hg1+2 1.34 180 2.705 0.385 12 1.75 0 0.1 "
"6.27 4.16 1.6\n"
"Tl3+3 1.518 120 4.347 0.68 11 2.068 0 0.1 "
"3.2 2.9 1.53\n"
"Pb3 1.459 109.47 4.297 0.663 12 2.846 0.1 0.1 "
"3.9 3.53 1.444\n"
"Bi3+3 1.512 90 4.37 0.518 13 2.47 1 0.1 "
"4.69 3.74 1.514\n"
"Po3+2 1.5 90 4.709 0.325 14 2.33 0.3 0.1 "
"4.21 4.21 1.48\n"
"At 1.545 180 4.75 0.284 15 2.24 0 0.1 "
"4.75 4.75 1.47\n"
"Rn4+4 1.42 90 4.765 0.248 16 0.583 0 0.1 "
"5.37 5.37 2.2\n"
"Fr 2.88 180 4.9 0.05 12 1.847 0 0 "
"2 2 2.3\n"
"Ra6+2 2.512 90 3.677 0.404 12 2.92 0 0 "
"2.843 2.434 2.2\n"
"Ac6+3 1.983 90 3.478 0.033 12 3.9 0 0 "
"2.835 2.835 2.108\n"
"Th6+4 1.721 90 3.396 0.026 12 4.202 0 0 "
"3.175 2.905 2.018\n"
"Pa6+4 1.711 90 3.424 0.022 12 3.9 0 0 "
"2.985 2.905 1.8\n"
"U_6+4 1.684 90 3.395 0.022 12 3.9 0 0 "
"3.341 2.853 1.713\n"
"Np6+4 1.666 90 3.424 0.019 12 3.9 0 0 "
"3.549 2.717 1.8\n"
"Pu6+4 1.657 90 3.424 0.016 12 3.9 0 0 "
"3.243 2.819 1.84\n"
"Am6+4 1.66 90 3.381 0.014 12 3.9 0 0 "
"2.9895 3.0035 1.942\n"
"Cm6+3 1.801 90 3.326 0.013 12 3.9 0 0 "
"2.8315 3.1895 1.9\n"
"Bk6+3 1.761 90 3.339 0.013 12 3.9 0 0 "
"3.1935 3.0355 1.9\n"
"Cf6+3 1.75 90 3.313 0.013 12 3.9 0 0 "
"3.197 3.101 1.9\n"
"Es6+3 1.724 90 3.299 0.012 12 3.9 0 0 "
"3.333 3.089 1.9\n"
"Fm6+3 1.712 90 3.286 0.012 12 3.9 0 0 "
"3.4 3.1 1.9\n"
"Md6+3 1.689 90 3.274 0.011 12 3.9 0 0 "
"3.47 3.11 1.9\n"
"No6+3 1.679 90 3.248 0.011 12 3.9 0 0 "
"3.475 3.175 1.9\n"
"Lw6+3 1.698 90 3.236 0.011 12 3.9 0 0 "
"3.5 3.2 1.9\n";
} // end of namespace UFF
} // end of namespace ForceFields
|