00001 #ifndef SimTK_MOLMODEL_IONS_H_
00002 #define SimTK_MOLMODEL_IONS_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #include "SimTKsimbody.h"
00037
00038 #include "molmodel/internal/common.h"
00039 #include "molmodel/internal/Compound.h"
00040
00041 #include <iosfwd>
00042
00043 namespace SimTK {
00044
00046 class LithiumIon : public Molecule {
00047 public:
00048 LithiumIon()
00049 {
00050 instantiateBiotypes();
00051
00052 setPdbResidueName("LI ");
00053
00054 setBaseAtom( "Li+", Biotype::get("Lithium Ion", "Li+") );
00055
00056 setCompoundName("Lithium Ion");
00057 }
00058
00059 static void instantiateBiotypes() {
00060 if (! Biotype::exists("Lithium Ion", "Li+") )
00061 Biotype::defineBiotype(Element::Lithium(), 0, "Lithium Ion", "Li+");
00062 }
00063
00064
00065
00066 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00067 {
00068 instantiateBiotypes();
00069
00070 const char* ionName = "Li+ Lithium Ion";
00071
00072 if (! dumm.hasAtomClass(ionName) ) {
00073 dumm.defineAtomClass_KA(
00074 dumm.getNextUnusedAtomClassIndex(),
00075 ionName,
00076 Element::Lithium().getAtomicNumber(),
00077 0,
00078 1.137,
00079 0.0183
00080 );
00081 }
00082
00083 if (! dumm.hasChargedAtomType(ionName) ) {
00084 dumm.defineChargedAtomType(
00085 dumm.getNextUnusedChargedAtomTypeIndex(),
00086 ionName,
00087 dumm.getAtomClassIndex(ionName),
00088 1.00
00089 );
00090 }
00091
00092 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Lithium Ion", "Li+").getIndex() );
00093 }
00094 };
00095
00097 class SodiumIon : public Molecule {
00098 public:
00099 SodiumIon()
00100 {
00101 instantiateBiotypes();
00102
00103 setPdbResidueName("NA ");
00104
00105 setBaseAtom( "Na+", Biotype::get("Sodium Ion", "Na+") );
00106
00107 setCompoundName("Sodium Ion");
00108 }
00109
00110 static void instantiateBiotypes() {
00111 if (! Biotype::exists("Sodium Ion", "Na+") )
00112 Biotype::defineBiotype(Element::Sodium(), 0, "Sodium Ion", "Na+");
00113 }
00114
00115
00116
00117 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00118 {
00119 instantiateBiotypes();
00120
00121 if (! dumm.hasAtomClass("Na+ Sodium Ion") ) {
00122 dumm.defineAtomClass_KA(
00123 dumm.getNextUnusedAtomClassIndex(),
00124 "Na+ Sodium Ion",
00125 Element::Sodium().getAtomicNumber(),
00126 0,
00127 1.8680,
00128 0.00277
00129 );
00130 }
00131
00132 if (! dumm.hasChargedAtomType("Na+ Sodium Ion") ) {
00133 dumm.defineChargedAtomType(
00134 dumm.getNextUnusedChargedAtomTypeIndex(),
00135 "Na+ Sodium Ion",
00136 dumm.getAtomClassIndex("Na+ Sodium Ion"),
00137 1.00
00138 );
00139 }
00140
00141 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex("Na+ Sodium Ion"), Biotype::get("Sodium Ion", "Na+").getIndex() );
00142 }
00143
00144 };
00145
00147 class PotassiumIon : public Molecule {
00148 public:
00149 PotassiumIon()
00150 {
00151 instantiateBiotypes();
00152
00153 setPdbResidueName("K ");
00154
00155 setBaseAtom( "K+", Biotype::get("Potassium Ion", "K+") );
00156
00157 setCompoundName("Potassium Ion");
00158 }
00159
00160 static void instantiateBiotypes() {
00161 if (! Biotype::exists("Potassium Ion", "K+") )
00162 Biotype::defineBiotype(Element::Potassium(), 0, "Potassium Ion", "K+");
00163 }
00164
00165
00166
00167 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00168 {
00169 instantiateBiotypes();
00170
00171 const char* ionName = "K+ Potassium Ion";
00172
00173 if (! dumm.hasAtomClass(ionName) ) {
00174 dumm.defineAtomClass_KA(
00175 dumm.getNextUnusedAtomClassIndex(),
00176 ionName,
00177 Element::Potassium().getAtomicNumber(),
00178 0,
00179 2.6580,
00180 0.000328
00181 );
00182 }
00183
00184 if (! dumm.hasChargedAtomType(ionName) ) {
00185 dumm.defineChargedAtomType(
00186 dumm.getNextUnusedChargedAtomTypeIndex(),
00187 ionName,
00188 dumm.getAtomClassIndex(ionName),
00189 1.00
00190 );
00191 }
00192
00193 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Potassium Ion", "K+").getIndex() );
00194 }
00195 };
00196
00198 class RubidiumIon : public Molecule {
00199 public:
00200 RubidiumIon()
00201 {
00202 instantiateBiotypes();
00203
00204 setPdbResidueName("RB ");
00205
00206 setBaseAtom( "Rb+", Biotype::get("Rubidium Ion", "Rb+") );
00207
00208 setCompoundName("Rubidium Ion");
00209 }
00210
00211 static void instantiateBiotypes() {
00212 if (! Biotype::exists("Rubidium Ion", "Rb+") )
00213 Biotype::defineBiotype(Element::Rubidium(), 0, "Rubidium Ion", "Rb+");
00214 }
00215
00216
00217
00218 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00219 {
00220 instantiateBiotypes();
00221
00222 const char* ionName = "Rb+ Rubidium Ion";
00223
00224 if (! dumm.hasAtomClass(ionName) ) {
00225 dumm.defineAtomClass_KA(
00226 dumm.getNextUnusedAtomClassIndex(),
00227 ionName,
00228 Element::Rubidium().getAtomicNumber(),
00229 0,
00230 2.956,
00231 0.00017
00232 );
00233 }
00234
00235 if (! dumm.hasChargedAtomType(ionName) ) {
00236 dumm.defineChargedAtomType(
00237 dumm.getNextUnusedChargedAtomTypeIndex(),
00238 ionName,
00239 dumm.getAtomClassIndex(ionName),
00240 1.00
00241 );
00242 }
00243
00244 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Rubidium Ion", "Rb+").getIndex() );
00245 }
00246 };
00247
00249 class CesiumIon : public Molecule {
00250 public:
00251 CesiumIon()
00252 {
00253 instantiateBiotypes();
00254
00255 setPdbResidueName("CS ");
00256
00257 setBaseAtom( "Cs+", Biotype::get("Cesium Ion", "Cs+") );
00258
00259 setCompoundName("Cesium Ion");
00260 }
00261
00262 static void instantiateBiotypes() {
00263 if (! Biotype::exists("Cesium Ion", "Cs+") )
00264 Biotype::defineBiotype(Element::Cesium(), 0, "Cesium Ion", "Cs+");
00265 }
00266
00267
00268
00269 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00270 {
00271 instantiateBiotypes();
00272
00273 const char* ionName = "Cs+ Cesium Ion";
00274
00275 if (! dumm.hasAtomClass(ionName) ) {
00276 dumm.defineAtomClass_KA(
00277 dumm.getNextUnusedAtomClassIndex(),
00278 ionName,
00279 Element::Cesium().getAtomicNumber(),
00280 0,
00281 3.390,
00282 0.0000806
00283 );
00284 }
00285
00286 if (! dumm.hasChargedAtomType(ionName) ) {
00287 dumm.defineChargedAtomType(
00288 dumm.getNextUnusedChargedAtomTypeIndex(),
00289 ionName,
00290 dumm.getAtomClassIndex(ionName),
00291 1.00
00292 );
00293 }
00294
00295 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Cesium Ion", "Cs+").getIndex() );
00296 }
00297 };
00298
00300 class MagnesiumIon : public Molecule {
00301 public:
00302 MagnesiumIon()
00303 {
00304 instantiateBiotypes();
00305
00306 setPdbResidueName("MG ");
00307
00308 setBaseAtom( "Mg+2", Biotype::get("Magnesium Ion", "Mg+2") );
00309
00310 setCompoundName("Magnesium Ion");
00311 }
00312
00313 static void instantiateBiotypes() {
00314 if (! Biotype::exists("Magnesium Ion", "Mg+2") )
00315 Biotype::defineBiotype(Element::Magnesium(), 0, "Magnesium Ion", "Mg+2");
00316 }
00317
00318
00319
00320 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00321 {
00322 instantiateBiotypes();
00323
00324 const char* ionName = "Mg+2 Magnesium Ion";
00325
00326 if (! dumm.hasAtomClass(ionName) ) {
00327 dumm.defineAtomClass_KA(
00328 dumm.getNextUnusedAtomClassIndex(),
00329 ionName,
00330 Element::Magnesium().getAtomicNumber(),
00331 0,
00332 0.7926,
00333 0.8947
00334 );
00335 }
00336
00337 if (! dumm.hasChargedAtomType(ionName) ) {
00338 dumm.defineChargedAtomType(
00339 dumm.getNextUnusedChargedAtomTypeIndex(),
00340 ionName,
00341 dumm.getAtomClassIndex(ionName),
00342 2.00
00343 );
00344 }
00345
00346 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Magnesium Ion", "Mg+2").getIndex() );
00347 }
00348 };
00349
00351 class CalciumIon : public Molecule {
00352 public:
00353 CalciumIon()
00354 {
00355 instantiateBiotypes();
00356
00357 setPdbResidueName("CA ");
00358
00359 setBaseAtom( "Ca+2", Biotype::get("Calcium Ion", "Ca+2") );
00360
00361 setCompoundName("Calcium Ion");
00362 }
00363
00364 static void instantiateBiotypes() {
00365 if (! Biotype::exists("Calcium Ion", "Ca+2") )
00366 Biotype::defineBiotype(Element::Calcium(), 0, "Calcium Ion", "Ca+2");
00367 }
00368
00369
00370
00371 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00372 {
00373 instantiateBiotypes();
00374
00375 const char* ionName = "Ca+2 Calcium Ion";
00376
00377 if (! dumm.hasAtomClass(ionName) ) {
00378 dumm.defineAtomClass_KA(
00379 dumm.getNextUnusedAtomClassIndex(),
00380 ionName,
00381 Element::Calcium().getAtomicNumber(),
00382 0,
00383 1.7131,
00384 0.459789
00385 );
00386 }
00387
00388 if (! dumm.hasChargedAtomType(ionName) ) {
00389 dumm.defineChargedAtomType(
00390 dumm.getNextUnusedChargedAtomTypeIndex(),
00391 ionName,
00392 dumm.getAtomClassIndex(ionName),
00393 2.00
00394 );
00395 }
00396
00397 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Calcium Ion", "Ca+2").getIndex() );
00398 }
00399 };
00400
00402 class ZincIon : public Molecule {
00403 public:
00404 ZincIon()
00405 {
00406 instantiateBiotypes();
00407
00408 setPdbResidueName("ZN ");
00409
00410 setBaseAtom( "Zn+2", Biotype::get("Zinc Ion", "Zn+2") );
00411
00412 setCompoundName("Zinc Ion");
00413 }
00414
00415 static void instantiateBiotypes() {
00416 if (! Biotype::exists("Zinc Ion", "Zn+2") )
00417 Biotype::defineBiotype(Element::Zinc(), 0, "Zinc Ion", "Zn+2");
00418 }
00419
00420
00421
00422 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00423 {
00424 instantiateBiotypes();
00425
00426 const char* ionName = "Zn+2 Zinc Ion";
00427
00428 if (! dumm.hasAtomClass(ionName) ) {
00429 dumm.defineAtomClass_KA(
00430 dumm.getNextUnusedAtomClassIndex(),
00431 ionName,
00432 Element::Zinc().getAtomicNumber(),
00433 0,
00434 1.1000,
00435 0.0125
00436 );
00437 }
00438
00439 if (! dumm.hasChargedAtomType(ionName) ) {
00440 dumm.defineChargedAtomType(
00441 dumm.getNextUnusedChargedAtomTypeIndex(),
00442 ionName,
00443 dumm.getAtomClassIndex(ionName),
00444 2.00
00445 );
00446 }
00447
00448 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Zinc Ion", "Zn+2").getIndex() );
00449 }
00450 };
00451
00453 class ChlorideIon : public Molecule {
00454 public:
00455 ChlorideIon()
00456 {
00457 instantiateBiotypes();
00458
00459 setPdbResidueName("CL ");
00460
00461 setBaseAtom( "Cl-", Biotype::get("Chloride Ion", "Cl-") );
00462
00463 setCompoundName("Chloride Ion");
00464 }
00465
00466 static void instantiateBiotypes() {
00467 if (! Biotype::exists("Chloride Ion", "Cl-") )
00468 Biotype::defineBiotype(Element::Chlorine(), 0, "Chloride Ion", "Cl-");
00469 }
00470
00471
00472
00473 static void setAmberLikeParameters(DuMMForceFieldSubsystem& dumm)
00474 {
00475 instantiateBiotypes();
00476
00477 const char* ionName = "Cl- Chloride Ion";
00478
00479 if (! dumm.hasAtomClass(ionName) ) {
00480 dumm.defineAtomClass_KA(
00481 dumm.getNextUnusedAtomClassIndex(),
00482 ionName,
00483 Element::Chlorine().getAtomicNumber(),
00484 0,
00485 2.4700,
00486 0.1000
00487 );
00488 }
00489
00490 if (! dumm.hasChargedAtomType(ionName) ) {
00491 dumm.defineChargedAtomType(
00492 dumm.getNextUnusedChargedAtomTypeIndex(),
00493 ionName,
00494 dumm.getAtomClassIndex(ionName),
00495 -1.00
00496 );
00497 }
00498
00499 dumm.setBiotypeChargedAtomType( dumm.getChargedAtomTypeIndex(ionName), Biotype::get("Chloride Ion", "Cl-").getIndex() );
00500 }
00501 };
00502
00503 }
00504
00505 #endif // SimTK_MOLMODEL_IONS_H_