Dear Paul,I'm afraid currently there is no public method to get r0 and kb from ForceField contribs. I have attached a C++ sample program which shows how to get the information you need from a ROMol. Please feel free to contact me if you need further help.
Cheers, p. On 09/29/2014 07:36 PM, Paul Emsley wrote:
Dear Paolo (I presume :-), I'd like to get the ro values for the bonds in an MMFF. I have the following so far: void mmff_bonds(RDKit::ROMol &mol_in) { RDKit::MMFF::MMFFMolProperties *mmffMolProperties = new RDKit::MMFF::MMFFMolProperties(mol_in); ForceFields::ForceField *field = new ForceFields::ForceField(); RDKit::MMFF::Tools::addBonds( mol_in, mmffMolProperties, field); ForceFields::ContribPtrVect::const_iterator contrib; for(contrib=field->contribs().begin(); contrib!=field->contribs().end(); contrib++) { ForceFields::MMFF::MMFFBond *mmffBondParams; // something xxx!!! double d = something(contrib???)->calcBondRestLength(mmffBondParams); } } As you can see, I got lost between contrib and bond parameters. Please can you tell me what I am missing? I hope it's only a few lines - but I can't determine which ones :) Thanks, Paul. ------------------------------------------------------------------------------ Slashdot TV. Videos for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk _______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss
-- ========================================================== Paolo Tosco, Ph.D. Department of Drug Science and Technology Via Pietro Giuria, 9 - 10125 Torino (Italy) Tel: +39 011 670 7680 | Mob: +39 348 5537206 Fax: +39 011 670 7687 | E-mail: paolo.to...@unito.it http://open3dqsar.org | http://open3dalign.org ==========================================================
/* Build with: g++ -Wall -o get_r0_kb get_r0_kb.cpp \ -I$BOOST_INCLUDE -I$RDBASE/Code -L$BOOST_LIB -L$RDBASE/lib \ -lFileParsers -lRDGeneral -lForceFieldHelpers */ #include <GraphMol/RDKitBase.h> #include <GraphMol/FileParsers/FileParsers.h> #include <ForceField/MMFF/Params.h> #include <ForceField/MMFF/Contribs.h> #include <ForceField/MMFF/BondStretch.h> #include <GraphMol/ForceFieldHelpers/MMFF/AtomTyper.h> #include <GraphMol/ForceFieldHelpers/MMFF/Builder.h> #include <ForceField/ForceField.h> #include <string> #include <iostream> using namespace RDKit; int main(int argc, char **argv) { std::stringstream ss; if (argc < 2) { std::cerr << "Usage: get_r0_kb <molFile>" << std::endl; return 0; } std::string sdf(argv[1]); ROMol *mol = static_cast<ROMol *>(MolFileToMol(sdf, true, false)); MMFF::MMFFMolProperties *mp = new MMFF::MMFFMolProperties(*mol); if (!(mp->isValid())) { std::cerr << "Error setting up force-field" << std::endl; } else { ForceFields::MMFF::MMFFBondCollection *mmffBond = ForceFields::MMFF::MMFFBondCollection::getMMFFBond(); std::cout << std::setw(8) << "idx1" << std::setw(8) << "idx2" << std::setw(8) << "r0" << std::setw(8) << "kb" << std::endl; for (ROMol::BondIterator bi = mol->beginBonds(); bi != mol->endBonds(); ++bi) { unsigned int idx1 = (*bi)->getBeginAtomIdx(); unsigned int idx2 = (*bi)->getEndAtomIdx(); unsigned int iAtomType = mp->getMMFFAtomType(idx1); unsigned int jAtomType = mp->getMMFFAtomType(idx2); unsigned int bondType = mp->getMMFFBondType(*bi); bool areMMFFBondParamsEmpirical = false; const ForceFields::MMFF::MMFFBond *mmffBondParams = (*mmffBond)(bondType, iAtomType, jAtomType); if (!mmffBondParams) { mmffBondParams = mp->getMMFFBondStretchEmpiricalRuleParams(*mol, *bi); areMMFFBondParamsEmpirical = true; } double r0 = ForceFields::MMFF::Utils::calcBondRestLength(mmffBondParams); double kb = ForceFields::MMFF::Utils::calcBondForceConstant(mmffBondParams); if (areMMFFBondParamsEmpirical) { delete mmffBondParams; } std::cout << std::setw(8) << idx1 + 1 << std::setw(8) << idx2 + 1 << std::setw(8) << std::fixed << std::setprecision(4) << r0 << std::setw(8) << std::fixed << std::setprecision(4) << kb << std::endl; } } if (mp) delete mp; if (mol) delete mol; return 0; }
------------------------------------------------------------------------------ Slashdot TV. Videos for Nerds. Stuff that Matters. http://pubads.g.doubleclick.net/gampad/clk?id=160591471&iu=/4140/ostg.clktrk
_______________________________________________ Rdkit-discuss mailing list Rdkit-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rdkit-discuss