12#ifndef RD_MMFFPARAMS_H
13#define RD_MMFFPARAMS_H
26#define M_PI 3.14159265358979323846
43 return ((x < 1.0e-10) && (x > -1.0e-10));
45inline void clipToOne(
double &x) { x = std::clamp(x, -1.0, 1.0); }
50 std::uint8_t eqLevel[4];
158 return std::find(d_params.begin(), d_params.end(), atomType) !=
173#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
174 const auto res = d_params.find(atomType);
175 return ((res != d_params.end()) ? &((*res).second) : NULL);
177 return ((atomType && (atomType <= d_params.size()))
178 ? &d_params[atomType - 1]
185#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
186 std::map<const unsigned int, MMFFDef> d_params;
199#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
200 const auto res = d_params.find(atomType);
201 return ((res != d_params.end()) ? &((*res).second) : NULL);
204 std::equal_range(d_iAtomType.begin(), d_iAtomType.end(), atomType);
205 return ((bounds.first != bounds.second)
206 ? &d_params[bounds.first - d_iAtomType.begin()]
212#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
213 std::map<const unsigned int, MMFFProp> d_params;
227#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
228 const auto res = d_params.find(atomType);
229 return ((res != d_params.end()) ? &((*res).second) : NULL);
231 return ((atomType && (atomType <= d_params.size()))
232 ? &d_params[atomType - 1]
239#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
240 std::map<const unsigned int, MMFFPBCI> d_params;
253 const unsigned int bondType,
const unsigned int iAtomType,
254 const unsigned int jAtomType)
const {
256 const MMFFChg *mmffChgParams =
nullptr;
257 unsigned int canIAtomType = iAtomType;
258 unsigned int canJAtomType = jAtomType;
259 if (iAtomType > jAtomType) {
260 canIAtomType = jAtomType;
261 canJAtomType = iAtomType;
264#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
265 const auto res1 = d_params[bondType].find(canIAtomType);
266 if (res1 != d_params[bondType].end()) {
267 const auto res2 = ((*res1).second).find(canJAtomType);
268 if (res2 != ((*res1).second).end()) {
269 mmffChgParams = &((*res2).second);
274 std::equal_range(d_iAtomType.begin(), d_iAtomType.end(), canIAtomType);
275 if (bounds.first != bounds.second) {
276 bounds = std::equal_range(
277 d_jAtomType.begin() + (bounds.first - d_iAtomType.begin()),
278 d_jAtomType.begin() + (bounds.second - d_iAtomType.begin()),
280 if (bounds.first != bounds.second) {
281 bounds = std::equal_range(
282 d_bondType.begin() + (bounds.first - d_jAtomType.begin()),
283 d_bondType.begin() + (bounds.second - d_jAtomType.begin()),
285 if (bounds.first != bounds.second) {
286 mmffChgParams = &d_params[bounds.first - d_bondType.begin()];
292 return std::make_pair(sign, mmffChgParams);
298#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
299 std::map<
const unsigned int,
300 std::map<const unsigned int, std::map<const unsigned int, MMFFChg>>>
317 const unsigned int atomType,
318 const unsigned int nbrAtomType)
const {
319 const MMFFBond *mmffBondParams =
nullptr;
320 unsigned int canAtomType = atomType;
321 unsigned int canNbrAtomType = nbrAtomType;
322 if (atomType > nbrAtomType) {
323 canAtomType = nbrAtomType;
324 canNbrAtomType = atomType;
326#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
327 const auto res1 = d_params.find(bondType);
328 std::map<
const unsigned int,
329 std::map<const unsigned int, MMFFBond>>::const_iterator res2;
330 std::map<const unsigned int, MMFFBond>::const_iterator res3;
331 if (res1 != d_params.end()) {
332 res2 = ((*res1).second).find(canAtomType);
333 if (res2 != ((*res1).second).end()) {
334 res3 = ((*res2).second).find(canNbrAtomType);
335 if (res3 != ((*res2).second).end()) {
336 mmffBondParams = &((*res3).second);
342 std::equal_range(d_iAtomType.begin(), d_iAtomType.end(), canAtomType);
343 if (bounds.first != bounds.second) {
344 bounds = std::equal_range(
345 d_jAtomType.begin() + (bounds.first - d_iAtomType.begin()),
346 d_jAtomType.begin() + (bounds.second - d_iAtomType.begin()),
348 if (bounds.first != bounds.second) {
349 bounds = std::equal_range(
350 d_bondType.begin() + (bounds.first - d_jAtomType.begin()),
351 d_bondType.begin() + (bounds.second - d_jAtomType.begin()),
353 if (bounds.first != bounds.second) {
354 mmffBondParams = &d_params[bounds.first - d_bondType.begin()];
360 return mmffBondParams;
364#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
365 std::map<
const unsigned int,
366 std::map<const unsigned int, std::map<const unsigned int, MMFFBond>>>
383 const int nbrAtomicNum)
const {
384 const MMFFBond *mmffBndkParams =
nullptr;
385 unsigned int canAtomicNum = atomicNum;
386 unsigned int canNbrAtomicNum = nbrAtomicNum;
387 if (atomicNum > nbrAtomicNum) {
388 canAtomicNum = nbrAtomicNum;
389 canNbrAtomicNum = atomicNum;
391#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
392 const auto res1 = d_params.find(canAtomicNum);
393 std::map<const unsigned int, MMFFBond>::const_iterator res2;
394 if (res1 != d_params.end()) {
395 res2 = ((*res1).second).find(canNbrAtomicNum);
396 if (res2 != ((*res1).second).end()) {
397 mmffBndkParams = &((*res2).second);
401 auto bounds = std::equal_range(d_iAtomicNum.begin(), d_iAtomicNum.end(),
403 if (bounds.first != bounds.second) {
404 bounds = std::equal_range(
405 d_jAtomicNum.begin() + (bounds.first - d_iAtomicNum.begin()),
406 d_jAtomicNum.begin() + (bounds.second - d_iAtomicNum.begin()),
408 if (bounds.first != bounds.second) {
409 mmffBndkParams = &d_params[bounds.first - d_jAtomicNum.begin()];
414 return mmffBndkParams;
418#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
419 std::map<const unsigned int, std::map<const unsigned int, MMFFBond>>
436 unsigned int canIRow = iRow;
437 unsigned int canJRow = jRow;
442#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
443 const auto res1 = d_params.find(canIRow);
444 std::map<const unsigned int, MMFFHerschbachLaurie>::const_iterator res2;
445 if (res1 != d_params.end()) {
446 res2 = ((*res1).second).find(canJRow);
447 if (res2 != ((*res1).second).end()) {
448 mmffHerschbachLaurieParams = &((*res2).second);
452 auto bounds = std::equal_range(d_iRow.begin(), d_iRow.end(), canIRow);
453 if (bounds.first != bounds.second) {
454 bounds = std::equal_range(
455 d_jRow.begin() + (bounds.first - d_iRow.begin()),
456 d_jRow.begin() + (bounds.second - d_iRow.begin()), canJRow);
457 if (bounds.first != bounds.second) {
458 mmffHerschbachLaurieParams = &d_params[bounds.first - d_jRow.begin()];
463 return mmffHerschbachLaurieParams;
468#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
469 std::map<
const unsigned int,
470 std::map<const unsigned int, MMFFHerschbachLaurie>>
486#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
487 const auto res = d_params.find(atomicNum);
488 return ((res != d_params.end()) ? &((*res).second) : NULL);
491 std::equal_range(d_atomicNum.begin(), d_atomicNum.end(), atomicNum);
492 return ((bounds.first != bounds.second)
493 ? &d_params[bounds.first - d_atomicNum.begin()]
499#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
500 std::map<const unsigned int, MMFFCovRadPauEle>
515 const unsigned int angleType,
516 const unsigned int iAtomType,
517 const unsigned int jAtomType,
518 const unsigned int kAtomType)
const {
519 const MMFFAngle *mmffAngleParams =
nullptr;
520 unsigned int iter = 0;
526#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
527 while ((iter < 4) && (!mmffAngleParams)) {
528 unsigned int canIAtomType = (*mmffDef)(iAtomType)->eqLevel[iter];
529 unsigned int canKAtomType = (*mmffDef)(kAtomType)->eqLevel[iter];
530 if (canIAtomType > canKAtomType) {
531 std::swap(canIAtomType, canKAtomType);
533 const auto res1 = d_params.find(angleType);
534 if (res1 != d_params.end()) {
535 const auto res2 = ((*res1).second).find(canIAtomType);
536 if (res2 != ((*res1).second).end()) {
537 const auto res3 = ((*res2).second).find(jAtomType);
538 if (res3 != ((*res2).second).end()) {
539 const auto res4 = ((*res3).second).find(canKAtomType);
540 if (res4 != ((*res3).second).end()) {
541 mmffAngleParams = &((*res4).second);
550 std::equal_range(d_jAtomType.begin(), d_jAtomType.end(), jAtomType);
551 if (jBounds.first != jBounds.second) {
552 while ((iter < 4) && (!mmffAngleParams)) {
553 unsigned int canIAtomType = (*mmffDef)(iAtomType)->eqLevel[iter];
554 unsigned int canKAtomType = (*mmffDef)(kAtomType)->eqLevel[iter];
555 if (canIAtomType > canKAtomType) {
556 std::swap(canIAtomType, canKAtomType);
559 auto bounds = std::equal_range(
560 d_iAtomType.begin() + (jBounds.first - d_jAtomType.begin()),
561 d_iAtomType.begin() + (jBounds.second - d_jAtomType.begin()),
563 if (bounds.first != bounds.second) {
564 bounds = std::equal_range(
565 d_kAtomType.begin() + (bounds.first - d_iAtomType.begin()),
566 d_kAtomType.begin() + (bounds.second - d_iAtomType.begin()),
568 if (bounds.first != bounds.second) {
569 bounds = std::equal_range(
570 d_angleType.begin() + (bounds.first - d_kAtomType.begin()),
571 d_angleType.begin() + (bounds.second - d_kAtomType.begin()),
573 if (bounds.first != bounds.second) {
574 mmffAngleParams = &d_params[bounds.first - d_angleType.begin()];
583 return mmffAngleParams;
587#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
588 std::map<
const unsigned int,
589 std::map<
const unsigned int,
590 std::map<
const unsigned int,
591 std::map<const unsigned int, MMFFAngle>>>>
609 const unsigned int stretchBendType,
const unsigned int bondType1,
610 const unsigned int bondType2,
const unsigned int iAtomType,
611 const unsigned int jAtomType,
const unsigned int kAtomType)
const {
612 const MMFFStbn *mmffStbnParams =
nullptr;
614 unsigned int canIAtomType = iAtomType;
615 unsigned int canKAtomType = kAtomType;
616 unsigned int canStretchBendType = stretchBendType;
617 if (iAtomType > kAtomType) {
618 canIAtomType = kAtomType;
619 canKAtomType = iAtomType;
621 }
else if (iAtomType == kAtomType) {
622 swap = (bondType1 < bondType2);
624#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
625 const auto res1 = d_params.find(canStretchBendType);
626 if (res1 != d_params.end()) {
627 const auto res2 = ((*res1).second).find(canIAtomType);
628 if (res2 != ((*res1).second).end()) {
629 const auto res3 = ((*res2).second).find(jAtomType);
630 if (res3 != ((*res2).second).end()) {
631 const auto res4 = ((*res3).second).find(canKAtomType);
632 if (res4 != ((*res3).second).end()) {
633 mmffStbnParams = &((*res4).second);
640 std::equal_range(d_jAtomType.begin(), d_jAtomType.end(), jAtomType);
641 if (jBounds.first != jBounds.second) {
642 auto bounds = std::equal_range(
643 d_iAtomType.begin() + (jBounds.first - d_jAtomType.begin()),
644 d_iAtomType.begin() + (jBounds.second - d_jAtomType.begin()),
646 if (bounds.first != bounds.second) {
647 bounds = std::equal_range(
648 d_kAtomType.begin() + (bounds.first - d_iAtomType.begin()),
649 d_kAtomType.begin() + (bounds.second - d_iAtomType.begin()),
651 if (bounds.first != bounds.second) {
652 bounds = std::equal_range(
653 d_stretchBendType.begin() + (bounds.first - d_kAtomType.begin()),
654 d_stretchBendType.begin() + (bounds.second - d_kAtomType.begin()),
656 if (bounds.first != bounds.second) {
658 &d_params[bounds.first - d_stretchBendType.begin()];
665 return std::make_pair(swap, mmffStbnParams);
669#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
670 std::map<
const unsigned int,
671 std::map<
const unsigned int,
672 std::map<
const unsigned int,
673 std::map<const unsigned int, MMFFStbn>>>>
680 std::vector<std::uint8_t>
692 const unsigned int periodicTableRow1,
693 const unsigned int periodicTableRow2,
694 const unsigned int periodicTableRow3)
const {
695 const MMFFStbn *mmffDfsbParams =
nullptr;
697 unsigned int canPeriodicTableRow1 = periodicTableRow1;
698 unsigned int canPeriodicTableRow3 = periodicTableRow3;
699 if (periodicTableRow1 > periodicTableRow3) {
700 canPeriodicTableRow1 = periodicTableRow3;
701 canPeriodicTableRow3 = periodicTableRow1;
704 const auto res1 = d_params.find(canPeriodicTableRow1);
705 if (res1 != d_params.end()) {
706 const auto res2 = ((*res1).second).find(periodicTableRow2);
707 if (res2 != ((*res1).second).end()) {
708 const auto res3 = ((*res2).second).find(canPeriodicTableRow3);
709 if (res3 != ((*res2).second).end()) {
710 mmffDfsbParams = &((*res3).second);
715 return std::make_pair(swap, mmffDfsbParams);
719 std::map<
const unsigned int,
720 std::map<const unsigned int, std::map<const unsigned int, MMFFStbn>>>
731 const unsigned int iAtomType,
732 const unsigned int jAtomType,
733 const unsigned int kAtomType,
734 const unsigned int lAtomType)
const {
735 const MMFFOop *mmffOopParams =
nullptr;
736 unsigned int iter = 0;
737 std::vector<unsigned int> canIKLAtomType(3);
742#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
743 while ((iter < 4) && (!mmffOopParams)) {
744 canIKLAtomType[0] = (*mmffDef)(iAtomType)->eqLevel[iter];
745 unsigned int canJAtomType = jAtomType;
746 canIKLAtomType[1] = (*mmffDef)(kAtomType)->eqLevel[iter];
747 canIKLAtomType[2] = (*mmffDef)(lAtomType)->eqLevel[iter];
748 std::sort(canIKLAtomType.begin(), canIKLAtomType.end());
749 const auto res1 = d_params.find(canIKLAtomType[0]);
750 if (res1 != d_params.end()) {
751 const auto res2 = ((*res1).second).find(canJAtomType);
752 if (res2 != ((*res1).second).end()) {
753 const auto res3 = ((*res2).second).find(canIKLAtomType[1]);
754 if (res3 != ((*res2).second).end()) {
755 const auto res4 = ((*res3).second).find(canIKLAtomType[2]);
756 if (res4 != ((*res3).second).end()) {
757 mmffOopParams = &((*res4).second);
766 std::equal_range(d_jAtomType.begin(), d_jAtomType.end(), jAtomType);
767 if (jBounds.first != jBounds.second) {
768 while ((iter < 4) && (!mmffOopParams)) {
769 canIKLAtomType[0] = (*mmffDef)(iAtomType)->eqLevel[iter];
770 canIKLAtomType[1] = (*mmffDef)(kAtomType)->eqLevel[iter];
771 canIKLAtomType[2] = (*mmffDef)(lAtomType)->eqLevel[iter];
772 std::sort(canIKLAtomType.begin(), canIKLAtomType.end());
773 auto bounds = std::equal_range(
774 d_iAtomType.begin() + (jBounds.first - d_jAtomType.begin()),
775 d_iAtomType.begin() + (jBounds.second - d_jAtomType.begin()),
777 if (bounds.first != bounds.second) {
778 bounds = std::equal_range(
779 d_kAtomType.begin() + (bounds.first - d_iAtomType.begin()),
780 d_kAtomType.begin() + (bounds.second - d_iAtomType.begin()),
782 if (bounds.first != bounds.second) {
783 bounds = std::equal_range(
784 d_lAtomType.begin() + (bounds.first - d_kAtomType.begin()),
785 d_lAtomType.begin() + (bounds.second - d_kAtomType.begin()),
787 if (bounds.first != bounds.second) {
788 mmffOopParams = &d_params[bounds.first - d_lAtomType.begin()];
797 return mmffOopParams;
802#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
803 std::map<
const unsigned int,
804 std::map<
const unsigned int,
805 std::map<
const unsigned int,
806 std::map<const unsigned int, MMFFOop>>>>
825 const std::pair<unsigned int, unsigned int> torType,
826 const unsigned int iAtomType,
const unsigned int jAtomType,
827 const unsigned int kAtomType,
const unsigned int lAtomType)
const {
828 const MMFFTor *mmffTorParams =
nullptr;
829 unsigned int iter = 0;
830 unsigned int iWildCard = 0;
831 unsigned int lWildCard = 0;
832 unsigned int canTorType = torType.first;
833 unsigned int maxIter = 5;
838#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
842 while (((iter < maxIter) && ((!mmffTorParams) || (maxIter == 4))) ||
843 ((iter == 4) && (torType.first == 5) && torType.second)) {
849 if ((maxIter == 5) && (iter == 4)) {
852 canTorType = torType.second;
859 }
else if (iter == 2) {
863 unsigned int canIAtomType = (*mmffDef)(iAtomType)->eqLevel[iWildCard];
864 unsigned int canJAtomType = jAtomType;
865 unsigned int canKAtomType = kAtomType;
866 unsigned int canLAtomType = (*mmffDef)(lAtomType)->eqLevel[lWildCard];
867 if (canJAtomType > canKAtomType) {
868 unsigned int temp = canKAtomType;
869 canKAtomType = canJAtomType;
872 canLAtomType = canIAtomType;
874 }
else if ((canJAtomType == canKAtomType) &&
875 (canIAtomType > canLAtomType)) {
876 unsigned int temp = canLAtomType;
877 canLAtomType = canIAtomType;
880#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
881 const auto res1 = d_params.find(canTorType);
882 if (res1 != d_params.end()) {
883 const auto res2 = ((*res1).second).find(canIAtomType);
884 if (res2 != ((*res1).second).end()) {
885 const auto res3 = ((*res2).second).find(canJAtomType);
886 if (res3 != ((*res2).second).end()) {
887 const auto res4 = ((*res3).second).find(canKAtomType);
888 if (res4 != ((*res3).second).end()) {
889 const auto res5 = ((*res4).second).find(canLAtomType);
890 if (res5 != ((*res4).second).end()) {
891 mmffTorParams = &((*res5).second);
901 auto jBounds = std::equal_range(d_jAtomType.begin(), d_jAtomType.end(),
903 if (jBounds.first != jBounds.second) {
904 auto bounds = std::equal_range(
905 d_kAtomType.begin() + (jBounds.first - d_jAtomType.begin()),
906 d_kAtomType.begin() + (jBounds.second - d_jAtomType.begin()),
908 if (bounds.first != bounds.second) {
909 bounds = std::equal_range(
910 d_iAtomType.begin() + (bounds.first - d_kAtomType.begin()),
911 d_iAtomType.begin() + (bounds.second - d_kAtomType.begin()),
913 if (bounds.first != bounds.second) {
914 bounds = std::equal_range(
915 d_lAtomType.begin() + (bounds.first - d_iAtomType.begin()),
916 d_lAtomType.begin() + (bounds.second - d_iAtomType.begin()),
918 if (bounds.first != bounds.second) {
919 bounds = std::equal_range(
920 d_torType.begin() + (bounds.first - d_lAtomType.begin()),
921 d_torType.begin() + (bounds.second - d_lAtomType.begin()),
923 if (bounds.first != bounds.second) {
924 mmffTorParams = &d_params[bounds.first - d_torType.begin()];
937 return std::make_pair(canTorType, mmffTorParams);
941#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
946 std::map<
const unsigned int,
947 std::map<
const unsigned int, std::map<
const unsigned int,
956 std::vector<std::uint8_t>
974#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
975 const auto res = d_params.find(atomType);
976 return (res != d_params.end() ? &((*res).second) : NULL);
979 std::equal_range(d_atomType.begin(), d_atomType.end(), atomType);
980 return ((bounds.first != bounds.second)
981 ? &d_params[bounds.first - d_atomType.begin()]
987#ifdef RDKIT_MMFF_PARAMS_USE_STD_MAP
988 std::map<const unsigned int, MMFFVdW> d_params;
const MMFFAngle * operator()(const MMFFDefCollection *mmffDef, const unsigned int angleType, const unsigned int iAtomType, const unsigned int jAtomType, const unsigned int kAtomType) const
Looks up the parameters for a particular key and returns them.
std::vector< MMFFAngle > d_params
the parameter vector
std::vector< std::uint8_t > d_angleType
angle type vector for angle i-j-k
MMFFAngleCollection(std::string mmffAngle="")
std::vector< std::uint8_t > d_kAtomType
atom type vector for atom k
std::vector< std::uint8_t > d_jAtomType
atom type vector for atom j
std::vector< std::uint8_t > d_iAtomType
atom type vector for atom i
class to store MMFF parameters for angle bending
MMFFAromCollection(const std::vector< std::uint8_t > *mmffArom=nullptr)
std::vector< std::uint8_t > d_params
the aromatic type vector
bool isMMFFAromatic(const unsigned int atomType) const
Looks up the parameters for a particular key and returns them.
MMFFBndkCollection(std::string mmffBndk="")
std::vector< std::uint8_t > d_jAtomicNum
atomic number vector for atom j
std::vector< std::uint8_t > d_iAtomicNum
atomic number vector for atom i
std::vector< MMFFBond > d_params
the parameter vector
const MMFFBond * operator()(const int atomicNum, const int nbrAtomicNum) const
Looks up the parameters for a particular key and returns them.
std::vector< std::uint8_t > d_jAtomType
atom type vector for atom j
std::vector< std::uint8_t > d_bondType
bond type vector for bond i-j
std::vector< std::uint8_t > d_iAtomType
atom type vector for atom i
MMFFBondCollection(std::string mmffBond="")
const MMFFBond * operator()(const unsigned int bondType, const unsigned int atomType, const unsigned int nbrAtomType) const
Looks up the parameters for a particular key and returns them.
std::vector< MMFFBond > d_params
the parameter vector
class to store MMFF parameters for bond stretching
std::vector< MMFFChg > d_params
the parameter vector
std::vector< std::uint8_t > d_jAtomType
atom type vector for atom j
MMFFChgCollection(std::string mmffChg="")
the parameter 3D-map
const std::pair< int, const MMFFChg * > getMMFFChgParams(const unsigned int bondType, const unsigned int iAtomType, const unsigned int jAtomType) const
Looks up the parameters for a particular key and returns them.
std::vector< std::uint8_t > d_iAtomType
atom type vector for atom i
std::vector< std::uint8_t > d_bondType
bond type vector for bond i-j
const MMFFCovRadPauEle * operator()(const unsigned int atomicNum) const
Looks up the parameters for a particular key and returns them.
std::vector< MMFFCovRadPauEle > d_params
the parameter vector
std::vector< std::uint8_t > d_atomicNum
the atomic number vector
MMFFCovRadPauEleCollection(std::string mmffCovRadPauEle="")
const MMFFDef * operator()(const unsigned int atomType) const
Looks up the parameters for a particular key and returns them.
std::vector< MMFFDef > d_params
the parameter vector
MMFFDefCollection(std::string mmffDef="")
class to store MMFF atom type equivalence levels
const std::pair< bool, const MMFFStbn * > getMMFFDfsbParams(const unsigned int periodicTableRow1, const unsigned int periodicTableRow2, const unsigned int periodicTableRow3) const
Looks up the parameters for a particular key and returns them.
MMFFDfsbCollection(std::string mmffDfsb="")
std::map< const unsigned int, std::map< const unsigned int, std::map< const unsigned int, MMFFStbn > > > d_params
the parameter 3D-map
const MMFFHerschbachLaurie * operator()(const int iRow, const int jRow) const
Looks up the parameters for a particular key and returns them.
std::vector< std::uint8_t > d_iRow
periodic row number vector for atom i
std::vector< std::uint8_t > d_jRow
periodic row number vector for atom j
MMFFHerschbachLaurieCollection(std::string mmffHerschbachLaurie="")
std::vector< MMFFHerschbachLaurie > d_params
the parameter vector
MMFFOopCollection(const bool isMMFFs, std::string mmffOop="")
std::vector< std::uint8_t > d_iAtomType
atom type vector for atom i
std::vector< std::uint8_t > d_kAtomType
atom type vector for atom k
std::vector< MMFFOop > d_params
the parameter vector
const MMFFOop * operator()(const MMFFDefCollection *mmffDef, const unsigned int iAtomType, const unsigned int jAtomType, const unsigned int kAtomType, const unsigned int lAtomType) const
Looks up the parameters for a particular key and returns them.
std::vector< std::uint8_t > d_jAtomType
atom type vector for atom j
std::vector< std::uint8_t > d_lAtomType
atom type vector for atom l
class to store MMFF parameters for out-of-plane bending
const MMFFPBCI * operator()(const unsigned int atomType) const
Looks up the parameters for a particular key and returns them.
MMFFPBCICollection(std::string mmffPBCI="")
std::vector< MMFFPBCI > d_params
the parameter vector
class to store MMFF Partial Bond Charge Increments
const MMFFProp * operator()(const unsigned int atomType) const
Looks up the parameters for a particular key and returns them.
std::vector< MMFFProp > d_params
MMFFPropCollection(std::string mmffProp="")
std::vector< std::uint8_t > d_iAtomType
the parameter vector
class to store MMFF Properties
const std::pair< bool, const MMFFStbn * > getMMFFStbnParams(const unsigned int stretchBendType, const unsigned int bondType1, const unsigned int bondType2, const unsigned int iAtomType, const unsigned int jAtomType, const unsigned int kAtomType) const
Looks up the parameters for a particular key and returns them.
MMFFStbnCollection(std::string mmffStbn="")
std::vector< std::uint8_t > d_jAtomType
atom type vector for atom j
std::vector< std::uint8_t > d_stretchBendType
stretch-bend type vector for angle i-j-k
std::vector< MMFFStbn > d_params
the parameter vector
std::vector< std::uint8_t > d_kAtomType
atom type vector for atom k
std::vector< std::uint8_t > d_iAtomType
atom type vector for atom i
class to store MMFF parameters for stretch-bending
std::vector< std::uint8_t > d_jAtomType
atom type vector for atom j
MMFFTorCollection(const bool isMMFFs, std::string mmffTor="")
std::vector< std::uint8_t > d_kAtomType
atom type vector for atom k
std::vector< std::uint8_t > d_torType
torsion type vector for angle i-j-k-l
const std::pair< const unsigned int, const MMFFTor * > getMMFFTorParams(const MMFFDefCollection *mmffDef, const std::pair< unsigned int, unsigned int > torType, const unsigned int iAtomType, const unsigned int jAtomType, const unsigned int kAtomType, const unsigned int lAtomType) const
Looks up the parameters for a particular key and returns them.
std::vector< std::uint8_t > d_lAtomType
atom type vector for atom l
std::vector< MMFFTor > d_params
the parameter vector
std::vector< std::uint8_t > d_iAtomType
atom type vector for atom i
class to store MMFF parameters for torsions
double power
gets a pointer to the singleton MMFFVdWCollection
std::vector< MMFFVdW > d_params
the parameter vector
MMFFVdWCollection(std::string mmffVdW="")
std::vector< std::uint8_t > d_atomType
atom type vector
const MMFFVdW * operator()(const unsigned int atomType) const
Looks up the parameters for a particular key and returns them.
class to store MMFF parameters for non-bonded Van der Waals
#define RDKIT_FORCEFIELD_EXPORT
constexpr double MDYNE_A_TO_KCAL_MOL
bool isDoubleZero(const double x)
void clipToOne(double &x)