Files
rdkit/Code/GraphMol/Descriptors/test.cpp

235 lines
5.7 KiB
C++

// $Id$
//
// Copyright (C) 2004-2008 Greg Landrum and Rational Discovery LLC
//
// @@ All Rights Reserved @@
//
#include <iostream>
#include <RDGeneral/Invariant.h>
#include <RDGeneral/RDLog.h>
#include <RDGeneral/utils.h>
#include <GraphMol/RDKitBase.h>
#include <GraphMol/MolPickler.h>
#include <GraphMol/SmilesParse/SmilesParse.h>
#include <GraphMol/FileParsers/FileParsers.h>
#include <GraphMol/FileParsers/MolSupplier.h>
#include <GraphMol/Descriptors/MolDescriptors.h>
#include <GraphMol/Descriptors/Crippen.h>
#include <DataStructs/BitVects.h>
#include <DataStructs/BitOps.h>
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;
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
}