// $Id$ // // Copyright (C) 2004-2010 Greg Landrum and 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. // #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace RDKit; using namespace RDKit::Descriptors; void test1(){ BOOST_LOG(rdErrorLog) << "-------------------------------------" << std::endl; BOOST_LOG(rdErrorLog) << " Test Crippen parameter acquisition." << std::endl; CrippenParamCollection *params=CrippenParamCollection::getParams(); TEST_ASSERT(params); CrippenParams p=*(params->begin()); TEST_ASSERT(p.label=="C1"); TEST_ASSERT(p.smarts=="[CH4]"); BOOST_LOG(rdErrorLog) << " done" << std::endl; } void test2(){ BOOST_LOG(rdErrorLog) << "-------------------------------------" << std::endl; BOOST_LOG(rdErrorLog) << " Test Crippen calculation." << std::endl; ROMol *mol; double logp,mr; mol = SmilesToMol("C"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,0.6361)); TEST_ASSERT(feq(mr,6.7310)); // check that caching works: CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,0.6361)); TEST_ASSERT(feq(mr,6.7310)); CalcCrippenDescriptors(*mol,logp,mr,true,true); TEST_ASSERT(feq(logp,0.6361)); TEST_ASSERT(feq(mr,6.7310)); // check that things work when we don't add Hs: CalcCrippenDescriptors(*mol,logp,mr,false,true); TEST_ASSERT(feq(logp,0.1441)); TEST_ASSERT(feq(mr,2.503)); delete mol; mol = SmilesToMol("C=C"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr,true); TEST_ASSERT(feq(logp,0.8022)); TEST_ASSERT(feq(mr,11.2540)); delete mol; mol = SmilesToMol("C#C"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,0.2494)); TEST_ASSERT(feq(mr,9.8900)); delete mol; mol = SmilesToMol("CO"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,-0.3915)); TEST_ASSERT(feq(mr,8.1428)); delete mol; mol = SmilesToMol("C=O"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,-0.1849)); TEST_ASSERT(feq(mr,7.121)); delete mol; mol = SmilesToMol("C#[O+]"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,0.0059)); TEST_ASSERT(feq(mr,5.6315)); delete mol; mol = SmilesToMol("C(C)(C)C"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,1.6623)); TEST_ASSERT(feq(mr,20.512)); delete mol; mol = SmilesToMol("C(C)(C)(C)O"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,logp,mr); TEST_ASSERT(feq(logp,0.7772)); TEST_ASSERT(feq(mr,21.9718)); delete mol; BOOST_LOG(rdErrorLog) << " done" << std::endl; } void testIssue262(){ BOOST_LOG(rdErrorLog) << "-------------------------------------" << std::endl; BOOST_LOG(rdErrorLog) << " Test Issue262: problems with Crippen calculation from pickles." << std::endl; ROMol *mol,*mol2; RWMol *mol3; std::string pkl; double rlogp,rmr,logp,mr; mol = SmilesToMol("c1ncccc1"); TEST_ASSERT(mol); CalcCrippenDescriptors(*mol,rlogp,rmr); MolPickler::pickleMol(*mol,pkl); mol2=new ROMol(pkl); TEST_ASSERT(mol2); CalcCrippenDescriptors(*mol2,logp,mr); TEST_ASSERT(feq(logp,rlogp)); TEST_ASSERT(feq(mr,rmr)); mol3=new RWMol(); TEST_ASSERT(mol3); MolPickler::molFromPickle(pkl,mol3); CalcCrippenDescriptors(*mol3,logp,mr); TEST_ASSERT(feq(logp,rlogp)); TEST_ASSERT(feq(mr,rmr)); delete mol; delete mol2; delete mol3; BOOST_LOG(rdErrorLog) << " done" << std::endl; } void test3(){ BOOST_LOG(rdErrorLog) << "-------------------------------------" << std::endl; BOOST_LOG(rdErrorLog) << " Test AMW calculation." << std::endl; ROMol *mol,*mol2; double amw; mol = SmilesToMol("C"); TEST_ASSERT(mol); amw = CalcAMW(*mol); TEST_ASSERT(feq(amw,16.043,.001)); amw = CalcAMW(*mol,true); TEST_ASSERT(feq(amw,12.011,.001)); mol2 = MolOps::addHs(*mol); amw = CalcAMW(*mol2); TEST_ASSERT(feq(amw,16.043,.001)); amw = CalcAMW(*mol2,true); TEST_ASSERT(feq(amw,12.011,.001)); delete mol; delete mol2; mol = SmilesToMol("[CH4]"); TEST_ASSERT(mol); amw = CalcAMW(*mol); TEST_ASSERT(feq(amw,16.043,.001)); amw = CalcAMW(*mol,true); TEST_ASSERT(feq(amw,12.011,.001)); delete mol; mol = SmilesToMol("C[2H]"); TEST_ASSERT(mol); amw = CalcAMW(*mol); TEST_ASSERT(feq(amw,17.0,.1)); BOOST_LOG(rdErrorLog) << " done" << std::endl; } void testLabute(){ BOOST_LOG(rdErrorLog) << "-------------------------------------" << std::endl; BOOST_LOG(rdErrorLog) << " Test Labute ASA descriptors." << std::endl; ROMol *mol; double asa; mol = SmilesToMol("CO"); asa=calcLabuteASA(*mol); TEST_ASSERT(feq(asa,13.5335,.0001)); asa=calcLabuteASA(*mol); TEST_ASSERT(feq(asa,13.5335,.0001)); asa=calcLabuteASA(*mol,true,true); TEST_ASSERT(feq(asa,13.5335,.0001)); delete mol; mol = SmilesToMol("OC(=O)c1ccncc1C(=O)O"); asa=calcLabuteASA(*mol); TEST_ASSERT(feq(asa,67.2924,.0001)); delete mol; mol = SmilesToMol("C1CCC(c2cccnc2)NC1"); asa=calcLabuteASA(*mol); TEST_ASSERT(feq(asa,73.0198,.0001)); delete mol; BOOST_LOG(rdErrorLog) << " done" << std::endl; } //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* // //-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* int main(){ RDLog::InitLogs(); #if 1 test1(); test2(); testIssue262(); test3(); testLabute(); #endif }