// $Id$ // // Copyright (C) 2005-2008 Greg Landrum and Rational Discovery LLC // // @@ All Rights Reserved @@ // #include "UniformGrid3D.h" #include #include "point.h" #include #include #include "GridUtils.h" #include #include #include #include #include using namespace RDGeom; using namespace RDKit; void testUniformGrid1() { UniformGrid3D grd(6.0, 5.0, 4.0); CHECK_INVARIANT(grd.getSize() == 960, ""); CHECK_INVARIANT(RDKit::feq(grd.getSpacing(), .5), ""); CHECK_INVARIANT(grd.getNumX()==12, ""); CHECK_INVARIANT(grd.getNumY()==10, ""); CHECK_INVARIANT(grd.getNumZ()==8, ""); grd.setSphereOccupancy(Point3D(0.0, 0.0, 0.0), 1.5, 0.25); CHECK_INVARIANT(grd.getOccupancyVect()->getTotalVal() == 523, "" ); //writeGridToFile(grd, "junk.grd"); UniformGrid3D grd2(grd); CHECK_INVARIANT(grd2.getSize() == 960, ""); CHECK_INVARIANT(RDKit::feq(grd2.getSpacing(), .5), ""); CHECK_INVARIANT(grd2.getNumX()==12, ""); CHECK_INVARIANT(grd2.getNumY()==10, ""); CHECK_INVARIANT(grd2.getNumZ()==8, ""); CHECK_INVARIANT(grd2.getOccupancyVect()->getTotalVal() == 523, "" ); // make sure the data are actually decoupled: grd.setSphereOccupancy(Point3D(1.0, 1.0, 0.0), 1.5, 0.25); CHECK_INVARIANT(grd.getOccupancyVect()->getTotalVal()>523, "" ); CHECK_INVARIANT(grd2.getOccupancyVect()->getTotalVal() == 523, "" ); } void testUniformGrid2() { // test distance metrics: UniformGrid3D grd(10.0, 10.0, 10.0); grd.setSphereOccupancy(Point3D(-2.0, -2.0, 0.0), 1.5, 0.25); grd.setSphereOccupancy(Point3D(-2.0, 2.0, 0.0), 1.5, 0.25); grd.setSphereOccupancy(Point3D(2.0, -2.0, 0.0), 1.5, 0.25); grd.setSphereOccupancy(Point3D(2.0, 2.0, 0.0), 1.5, 0.25); writeGridToFile(grd, "junk.grd"); #if 1 std::ofstream outS; outS.open("junk.bin",std::ios_base::binary); std::string pkl=grd.toString(); unsigned int sz=pkl.size(); outS<> length; char *buff = new char[length]; length=inS.readsome(buff,length); inS.close(); std::string pkl(buff,length); delete [] buff; UniformGrid3D grd(pkl); UniformGrid3D grd2(10.0, 10.0, 10.0); grd2.setSphereOccupancy(Point3D(-2.0, -2.0, 0.0), 1.5, 0.25); grd2.setSphereOccupancy(Point3D(-2.0, 2.0, 0.0), 1.5, 0.25); grd2.setSphereOccupancy(Point3D(2.0, -2.0, 0.0), 1.5, 0.25); grd2.setSphereOccupancy(Point3D(2.0, 2.0, 0.0), 1.5, 0.25); TEST_ASSERT(grd.getSize()==grd2.getSize()); TEST_ASSERT(grd.getNumX()==grd2.getNumX()); TEST_ASSERT(grd.getNumY()==grd2.getNumY()); TEST_ASSERT(grd.getNumZ()==grd2.getNumZ()); TEST_ASSERT(grd.compareParams(grd2)); double dist = tanimotoDistance(grd, grd2); TEST_ASSERT(RDKit::feq(dist, 0.0)); } } void testUniformGridOps() { UniformGrid3D grd(10.0, 10.0, 10.0); grd.setSphereOccupancy(Point3D(-2.0, -2.0, 0.0), 1.0, 0.25); grd.setSphereOccupancy(Point3D(-2.0, 2.0, 0.0), 1.0, 0.25); UniformGrid3D grd2(10.0, 10.0, 10.0); grd2.setSphereOccupancy(Point3D(2.0, -2.0, 0.0), 1.0, 0.25); grd2.setSphereOccupancy(Point3D(2.0, 2.0, 0.0), 1.0, 0.25); double dist = tanimotoDistance(grd, grd2); CHECK_INVARIANT(RDKit::feq(dist, 1.0), ""); UniformGrid3D grd3(grd); grd3 |= grd2; dist = tanimotoDistance(grd3, grd); CHECK_INVARIANT(RDKit::feq(dist, 0.5), ""); dist = tanimotoDistance(grd3, grd2); CHECK_INVARIANT(RDKit::feq(dist, 0.5), ""); UniformGrid3D grd4(10.0, 10.0, 10.0); grd4.setSphereOccupancy(Point3D(-2.0, -2.0, 0.0), 1.0, 0.25); grd4.setSphereOccupancy(Point3D(-2.0, 2.0, 0.0), 1.0, 0.25); grd4.setSphereOccupancy(Point3D(2.0, -2.0, 0.0), 1.0, 0.25); UniformGrid3D grd5(grd4); grd5 &= grd2; dist = tanimotoDistance(grd5, grd); CHECK_INVARIANT(RDKit::feq(dist, 1.0), ""); dist = tanimotoDistance(grd5, grd2); CHECK_INVARIANT(RDKit::feq(dist, 0.5), ""); } int main() { std::cout << "***********************************************************\n"; std::cout << "Testing Grid\n"; std::cout << "\t---------------------------------\n"; std::cout << "\t testUniformGrid1 \n\n"; testUniformGrid1(); std::cout << "\t---------------------------------\n"; std::cout << "\t testUniformGrid2 \n\n"; testUniformGrid2(); std::cout << "\t---------------------------------\n"; std::cout << "\t testUniformGridPickling \n\n"; testUniformGridPickling(); std::cout << "\t---------------------------------\n"; std::cout << "\t testGridOps \n\n"; testUniformGridOps(); return 0; }