mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-03 21:44:30 +08:00
- initial work to put the Trajectory code into a separate object
This commit is contained in:
@@ -13,7 +13,6 @@
|
||||
|
||||
#include <RDGeneral/Invariant.h>
|
||||
#include <Numerics/Optimizer/BFGSOpt.h>
|
||||
#include <Geometry/Trajectory.h>
|
||||
|
||||
namespace ForceFieldsHelper {
|
||||
class calcEnergy {
|
||||
@@ -186,7 +185,7 @@ int ForceField::minimize(unsigned int maxIts, double forceTol,
|
||||
return minimize(0, NULL, maxIts, forceTol, energyTol);
|
||||
}
|
||||
|
||||
int ForceField::minimize(unsigned int trajEverySteps, RDGeom::Trajectory *traj,
|
||||
int ForceField::minimize(unsigned int trajEverySteps, std::vector<double *> *traj,
|
||||
unsigned int maxIts, double forceTol, double energyTol) {
|
||||
PRECONDITION(df_init, "not initialized");
|
||||
PRECONDITION(static_cast<unsigned int>(d_numPoints) == d_positions.size(),
|
||||
|
||||
@@ -131,7 +131,7 @@ class ForceField {
|
||||
- 0: indicates success
|
||||
- 1: the minimization did not converge in \c maxIts iterations.
|
||||
*/
|
||||
int minimize(unsigned int trajEverySteps, RDGeom::Trajectory *traj,
|
||||
int minimize(unsigned int trajEverySteps, std::vector<double *> *traj,
|
||||
unsigned int maxIts = 200, double forceTol = 1e-4,
|
||||
double energyTol = 1e-6);
|
||||
|
||||
@@ -144,7 +144,7 @@ class ForceField {
|
||||
will be stored after as many steps as indicated
|
||||
through this parameter; defaults to 0 (no
|
||||
trajectory stored)
|
||||
\param traj the pointer to the Trajectory object where
|
||||
\param traj a pointer to a std::vector<double *> where
|
||||
coordinates will be stored
|
||||
|
||||
\return an integer value indicating whether or not the convergence
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
rdkit_library(RDGeometryLib
|
||||
point.cpp Transform2D.cpp Transform3D.cpp
|
||||
Trajectory.cpp UniformGrid3D.cpp GridUtils.cpp
|
||||
UniformGrid3D.cpp GridUtils.cpp
|
||||
LINK_LIBRARIES DataStructs RDGeneral)
|
||||
|
||||
rdkit_headers(Grid3D.h
|
||||
@@ -9,12 +9,10 @@ rdkit_headers(Grid3D.h
|
||||
Transform2D.h
|
||||
Transform3D.h
|
||||
Transform.h
|
||||
Trajectory.h
|
||||
UniformGrid3D.h
|
||||
Utils.h DEST Geometry)
|
||||
|
||||
rdkit_test(testTransforms testTransforms.cpp LINK_LIBRARIES RDGeometryLib DataStructs RDGeneral )
|
||||
rdkit_test(testGrid testGrid.cpp LINK_LIBRARIES RDGeometryLib DataStructs RDGeneral )
|
||||
rdkit_test(testTrajectory testTrajectory.cpp LINK_LIBRARIES RDGeometryLib RDGeneral )
|
||||
|
||||
add_subdirectory(Wrap)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
rdkit_python_extension(rdGeometry
|
||||
Point.cpp Trajectory.cpp UniformGrid3D.cpp rdGeometry.cpp
|
||||
Point.cpp UniformGrid3D.cpp rdGeometry.cpp
|
||||
DEST Geometry
|
||||
LINK_LIBRARIES RDGeometryLib DataStructs RDGeneral RDBoost)
|
||||
|
||||
|
||||
@@ -406,241 +406,6 @@ class TestCase(unittest.TestCase):
|
||||
self.assertEqual(yi,2)
|
||||
self.assertEqual(zi,1)
|
||||
|
||||
def testSnapshot(self):
|
||||
s = geom.Snapshot([])
|
||||
e = False
|
||||
try:
|
||||
s.GetPoint2D(12)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
s = geom.Snapshot([0.0, 0.0, 0.0])
|
||||
e = False
|
||||
try:
|
||||
s.GetPoint2D(0)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
|
||||
def testTrajectory2D(self):
|
||||
dim = 2
|
||||
np = 10
|
||||
ns = 5
|
||||
traj = geom.Trajectory(dim, np)
|
||||
self.assertEqual(traj.Dimension(), dim)
|
||||
self.assertEqual(traj.NumPoints(), np)
|
||||
c = []
|
||||
for i in range(np * dim):
|
||||
c.append(float(i))
|
||||
for i in range(ns):
|
||||
traj.AddSnapshot(geom.Snapshot(c, float(i)))
|
||||
self.assertEqual(len(traj), ns)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(ns)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(0).GetPoint2D(np)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
for i in range(np):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint2D(i).x, float(i * dim))
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint2D(i).y, float(i * dim + 1))
|
||||
e = False
|
||||
try:
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).z, 0.0)
|
||||
except:
|
||||
e = True;
|
||||
self.assertFalse(e)
|
||||
for i in range(ns):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i))
|
||||
traj.RemoveSnapshot(0)
|
||||
self.assertEqual(len(traj), ns - 1)
|
||||
for i in range(ns - 1):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i + 1))
|
||||
traj.InsertSnapshot(0, geom.Snapshot(c, 999.0))
|
||||
self.assertEqual(len(traj), ns)
|
||||
copySnapshot = geom.Snapshot(traj.GetSnapshot(0))
|
||||
traj.AddSnapshot(copySnapshot)
|
||||
self.assertEqual(len(traj), ns + 1)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetEnergy(), 999.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(1).GetEnergy(), 1.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(len(traj) - 1).GetEnergy(), 999.0)
|
||||
traj2 = geom.Trajectory(traj);
|
||||
self.assertEqual(len(traj), len(traj2))
|
||||
|
||||
def testTrajectory3D(self):
|
||||
dim = 3
|
||||
np = 10
|
||||
ns = 5
|
||||
traj = geom.Trajectory(dim, np)
|
||||
self.assertEqual(traj.Dimension(), dim)
|
||||
self.assertEqual(traj.NumPoints(), np)
|
||||
c = []
|
||||
for i in range(np * dim):
|
||||
c.append(float(i))
|
||||
for i in range(ns):
|
||||
traj.AddSnapshot(geom.Snapshot(c, float(i)))
|
||||
self.assertEqual(len(traj), ns)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(ns)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(0).GetPoint2D(np)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
for i in range(np):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).x, float(i * dim))
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).y, float(i * dim + 1))
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).z, float(i * dim + 2))
|
||||
if (not i):
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(0).GetPoint2D(i)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
for i in range(ns):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i))
|
||||
traj.RemoveSnapshot(0)
|
||||
self.assertEqual(len(traj), ns - 1)
|
||||
for i in range(ns - 1):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i + 1))
|
||||
traj.InsertSnapshot(0, geom.Snapshot(c, 999.0))
|
||||
self.assertEqual(len(traj), ns)
|
||||
copySnapshot = geom.Snapshot(traj.GetSnapshot(0))
|
||||
traj.AddSnapshot(copySnapshot)
|
||||
self.assertEqual(len(traj), ns + 1)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetEnergy(), 999.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(1).GetEnergy(), 1.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(len(traj) - 1).GetEnergy(), 999.0)
|
||||
traj2 = geom.Trajectory(traj);
|
||||
self.assertEqual(len(traj), len(traj2))
|
||||
|
||||
def testReadAmber(self):
|
||||
rdbase = os.environ['RDBASE']
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords_bad.trx')
|
||||
traj = geom.Trajectory(2, 0)
|
||||
ok = False
|
||||
try:
|
||||
geom.ReadAmberTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
traj = geom.Trajectory(3, 3)
|
||||
ok = False
|
||||
try:
|
||||
geom.ReadAmberTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords_bad2.trx')
|
||||
ok = False
|
||||
try:
|
||||
traj = geom.Trajectory(3, 3)
|
||||
geom.ReadAmberTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords.trx')
|
||||
traj = geom.Trajectory(3, 3)
|
||||
geom.ReadAmberTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 1)
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords2.trx')
|
||||
traj = geom.Trajectory(3, 3)
|
||||
geom.ReadAmberTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 2)
|
||||
|
||||
def testReadAmberPython(self):
|
||||
# reimplemented the Amber trajectory reader in Python
|
||||
# let's check we get the same data as the C++ reader
|
||||
# (test for building a trajectory out of Snapshots from Python)
|
||||
rdbase = os.environ['RDBASE']
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords2.trx')
|
||||
traj = geom.Trajectory(3, 3)
|
||||
nCoords = traj.NumPoints() * 3
|
||||
nSnapshots = 0
|
||||
hnd = open(fName, 'r')
|
||||
line = hnd.readline()
|
||||
lineNum = 0
|
||||
c = []
|
||||
i = 0
|
||||
while (line):
|
||||
lineNum += 1
|
||||
if (lineNum > 1):
|
||||
tok = line.strip().split()
|
||||
j = 0
|
||||
while ((i < nCoords) and (j < len(tok))):
|
||||
c.append(float(tok[j]))
|
||||
j += 1
|
||||
i += 1
|
||||
if (i == nCoords):
|
||||
nSnapshots += 1
|
||||
traj.AddSnapshot(geom.Snapshot(c))
|
||||
c = []
|
||||
i = 0
|
||||
line = ' '.join(tok[j:]) + ' '
|
||||
else:
|
||||
line = ''
|
||||
else:
|
||||
line = ''
|
||||
line += hnd.readline()
|
||||
hnd.close()
|
||||
self.assertEqual(i, 0)
|
||||
self.assertEqual(nSnapshots, 2)
|
||||
traj2 = geom.Trajectory(3, 3)
|
||||
geom.ReadAmberTrajectory(fName, traj2)
|
||||
self.assertEqual(len(traj), len(traj2))
|
||||
self.assertEqual(traj.NumPoints(), traj2.NumPoints())
|
||||
for snapshotNum in range(len(traj)):
|
||||
for pointNum in range(traj.NumPoints()):
|
||||
for i in range(3):
|
||||
self.assertEqual(traj.GetSnapshot(snapshotNum).GetPoint3D(pointNum)[i],
|
||||
traj2.GetSnapshot(snapshotNum).GetPoint3D(pointNum)[i])
|
||||
|
||||
def testReadGromos(self):
|
||||
rdbase = os.environ['RDBASE']
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords_bad.trc')
|
||||
traj = geom.Trajectory(2, 0)
|
||||
ok = False
|
||||
try:
|
||||
geom.ReadGromosTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
traj = geom.Trajectory(3, 3)
|
||||
ok = False
|
||||
try:
|
||||
geom.ReadGromosTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords_bad2.trc')
|
||||
ok = False
|
||||
try:
|
||||
traj = geom.Trajectory(3, 3)
|
||||
geom.ReadGromosTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords.trc')
|
||||
traj = geom.Trajectory(3, 3)
|
||||
geom.ReadGromosTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 1)
|
||||
fName = os.path.join(rdbase, 'Code', 'Geometry', 'testData', 'water_coords2.trc')
|
||||
traj = geom.Trajectory(3, 3)
|
||||
geom.ReadGromosTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 2)
|
||||
|
||||
if __name__=='__main__':
|
||||
print("Testing Geometry wrapper")
|
||||
unittest.main()
|
||||
|
||||
@@ -74,6 +74,7 @@ add_subdirectory(MMPA)
|
||||
|
||||
|
||||
add_subdirectory(ReducedGraphs)
|
||||
add_subdirectory(Trajectory)
|
||||
|
||||
if(RDK_BUILD_SLN_SUPPORT AND NOT CMAKE_COMPILER_IS_CLANG)
|
||||
add_subdirectory(SLNParse)
|
||||
@@ -110,3 +111,6 @@ rdkit_test(graphmolMemTest1 memtest1.cpp LINK_LIBRARIES SmilesParse GraphMol RDG
|
||||
|
||||
rdkit_test(resMolSupplierTest resMolSupplierTest.cpp
|
||||
LINK_LIBRARIES SmilesParse GraphMol RDGeometryLib RDGeneral SubstructMatch FileParsers)
|
||||
|
||||
rdkit_test(trajectoryTest resMolSupplierTest.cpp
|
||||
LINK_LIBRARIES SmilesParse GraphMol RDGeometryLib RDGeneral SubstructMatch FileParsers)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#include <set>
|
||||
#include "Trajectory.h"
|
||||
|
||||
namespace RDGeom {
|
||||
namespace RDKit {
|
||||
|
||||
Snapshot::Snapshot(boost::shared_array<double> pos, double energy) :
|
||||
d_trajectory(NULL),
|
||||
@@ -12,11 +12,11 @@
|
||||
#define __RD_TRAJECTORY_H__
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include "point.h"
|
||||
#include "Geometry/point.h"
|
||||
#include "boost/shared_ptr.hpp"
|
||||
#include "boost/shared_array.hpp"
|
||||
|
||||
namespace RDGeom {
|
||||
namespace RDKit {
|
||||
|
||||
class Trajectory;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// $Id$
|
||||
//
|
||||
// Copyright (C) 2005-2013 Greg Landrum and Rational Discovery LLC
|
||||
// Copyright (C) 2016 Sereina Riniker, Paolo Tosco
|
||||
//
|
||||
// @@ All Rights Reserved @@
|
||||
// This file is part of the RDKit.
|
||||
@@ -8,11 +8,11 @@
|
||||
// which is included in the file license.txt, found at the root
|
||||
// of the RDKit source tree.
|
||||
//
|
||||
|
||||
#include "Trajectory.h"
|
||||
#include "point.h"
|
||||
#include "Geometry/point.h"
|
||||
#include <RDGeneral/Invariant.h>
|
||||
|
||||
using namespace RDGeom;
|
||||
using namespace RDKit;
|
||||
|
||||
void testSnapshot() {
|
||||
@@ -180,7 +180,7 @@ void testReadAmber() {
|
||||
BOOST_LOG(rdErrorLog) << "testReadAmber" << std::endl;
|
||||
|
||||
std::string rdbase = getenv("RDBASE");
|
||||
std::string fName = rdbase + "/Code/Geometry/testData/water_coords_bad.trx";
|
||||
std::string fName = rdbase + "/Code/GraphMol/testData/water_coords_bad.trx";
|
||||
{
|
||||
Trajectory traj(2, 0);
|
||||
bool ok = false;
|
||||
@@ -204,7 +204,7 @@ void testReadAmber() {
|
||||
}
|
||||
TEST_ASSERT(ok);
|
||||
}
|
||||
fName = rdbase + "/Code/Geometry/testData/water_coords_bad2.trx";
|
||||
fName = rdbase + "/Code/GraphMol/testData/water_coords_bad2.trx";
|
||||
{
|
||||
bool ok = false;
|
||||
try {
|
||||
@@ -217,13 +217,13 @@ void testReadAmber() {
|
||||
}
|
||||
TEST_ASSERT(ok);
|
||||
}
|
||||
fName = rdbase + "/Code/Geometry/testData/water_coords.trx";
|
||||
fName = rdbase + "/Code/GraphMol/testData/water_coords.trx";
|
||||
{
|
||||
Trajectory traj(3, 3);
|
||||
readAmberTrajectory(fName, traj);
|
||||
TEST_ASSERT(traj.size() == 1);
|
||||
}
|
||||
fName = rdbase + "/Code/Geometry/testData/water_coords2.trx";
|
||||
fName = rdbase + "/Code/GraphMol/testData/water_coords2.trx";
|
||||
{
|
||||
Trajectory traj(3, 3);
|
||||
readAmberTrajectory(fName, traj);
|
||||
@@ -238,7 +238,7 @@ void testReadGromos() {
|
||||
BOOST_LOG(rdErrorLog) << "testReadGromos" << std::endl;
|
||||
|
||||
std::string rdbase = getenv("RDBASE");
|
||||
std::string fName = rdbase + "/Code/Geometry/testData/water_coords_bad.trc";
|
||||
std::string fName = rdbase + "/Code/GraphMol/testData/water_coords_bad.trc";
|
||||
{
|
||||
Trajectory traj(2, 0);
|
||||
bool ok = false;
|
||||
@@ -262,7 +262,7 @@ void testReadGromos() {
|
||||
}
|
||||
TEST_ASSERT(ok);
|
||||
}
|
||||
fName = rdbase + "/Code/Geometry/testData/water_coords_bad2.trc";
|
||||
fName = rdbase + "/Code/GraphMol/testData/water_coords_bad2.trc";
|
||||
{
|
||||
bool ok = false;
|
||||
try {
|
||||
@@ -275,13 +275,13 @@ void testReadGromos() {
|
||||
}
|
||||
TEST_ASSERT(ok);
|
||||
}
|
||||
fName = rdbase + "/Code/Geometry/testData/water_coords.trc";
|
||||
fName = rdbase + "/Code/GraphMol/testData/water_coords.trc";
|
||||
{
|
||||
Trajectory traj(3, 3);
|
||||
readGromosTrajectory(fName, traj);
|
||||
TEST_ASSERT(traj.size() == 1);
|
||||
}
|
||||
fName = rdbase + "/Code/Geometry/testData/water_coords2.trc";
|
||||
fName = rdbase + "/Code/GraphMol/testData/water_coords2.trc";
|
||||
{
|
||||
Trajectory traj(3, 3);
|
||||
readGromosTrajectory(fName, traj);
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
namespace python = boost::python;
|
||||
|
||||
namespace RDGeom {
|
||||
namespace RDKit {
|
||||
|
||||
Snapshot *getSnapshot_wrap(Trajectory *traj, unsigned int snapshotNum) {
|
||||
return new Snapshot(traj->getSnapshot(snapshotNum));
|
||||
251
Code/GraphMol/Wrap/testTrajectory.py
Normal file
251
Code/GraphMol/Wrap/testTrajectory.py
Normal file
@@ -0,0 +1,251 @@
|
||||
from __future__ import print_function
|
||||
import os,sys
|
||||
import unittest
|
||||
|
||||
from rdkit import RDConfig
|
||||
|
||||
def feq(v1, v2, tol=1.0e-4):
|
||||
return abs(v1-v2) < tol
|
||||
|
||||
class TestCase(unittest.TestCase):
|
||||
def setUp(self) :
|
||||
pass
|
||||
|
||||
def testSnapshot(self):
|
||||
s = Snapshot([])
|
||||
e = False
|
||||
try:
|
||||
s.GetPoint2D(12)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
s = Snapshot([0.0, 0.0, 0.0])
|
||||
e = False
|
||||
try:
|
||||
s.GetPoint2D(0)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
|
||||
def testTrajectory2D(self):
|
||||
dim = 2
|
||||
np = 10
|
||||
ns = 5
|
||||
traj = Trajectory(dim, np)
|
||||
self.assertEqual(traj.Dimension(), dim)
|
||||
self.assertEqual(traj.NumPoints(), np)
|
||||
c = []
|
||||
for i in range(np * dim):
|
||||
c.append(float(i))
|
||||
for i in range(ns):
|
||||
traj.AddSnapshot(Snapshot(c, float(i)))
|
||||
self.assertEqual(len(traj), ns)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(ns)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(0).GetPoint2D(np)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
for i in range(np):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint2D(i).x, float(i * dim))
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint2D(i).y, float(i * dim + 1))
|
||||
e = False
|
||||
try:
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).z, 0.0)
|
||||
except:
|
||||
e = True;
|
||||
self.assertFalse(e)
|
||||
for i in range(ns):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i))
|
||||
traj.RemoveSnapshot(0)
|
||||
self.assertEqual(len(traj), ns - 1)
|
||||
for i in range(ns - 1):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i + 1))
|
||||
traj.InsertSnapshot(0, Snapshot(c, 999.0))
|
||||
self.assertEqual(len(traj), ns)
|
||||
copySnapshot = Snapshot(traj.GetSnapshot(0))
|
||||
traj.AddSnapshot(copySnapshot)
|
||||
self.assertEqual(len(traj), ns + 1)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetEnergy(), 999.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(1).GetEnergy(), 1.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(len(traj) - 1).GetEnergy(), 999.0)
|
||||
traj2 = Trajectory(traj);
|
||||
self.assertEqual(len(traj), len(traj2))
|
||||
|
||||
def testTrajectory3D(self):
|
||||
dim = 3
|
||||
np = 10
|
||||
ns = 5
|
||||
traj = Trajectory(dim, np)
|
||||
self.assertEqual(traj.Dimension(), dim)
|
||||
self.assertEqual(traj.NumPoints(), np)
|
||||
c = []
|
||||
for i in range(np * dim):
|
||||
c.append(float(i))
|
||||
for i in range(ns):
|
||||
traj.AddSnapshot(Snapshot(c, float(i)))
|
||||
self.assertEqual(len(traj), ns)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(ns)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(0).GetPoint2D(np)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
for i in range(np):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).x, float(i * dim))
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).y, float(i * dim + 1))
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetPoint3D(i).z, float(i * dim + 2))
|
||||
if (not i):
|
||||
e = False
|
||||
try:
|
||||
traj.GetSnapshot(0).GetPoint2D(i)
|
||||
except:
|
||||
e = True
|
||||
self.assertTrue(e)
|
||||
for i in range(ns):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i))
|
||||
traj.RemoveSnapshot(0)
|
||||
self.assertEqual(len(traj), ns - 1)
|
||||
for i in range(ns - 1):
|
||||
self.assertAlmostEqual(traj.GetSnapshot(i).GetEnergy(), float(i + 1))
|
||||
traj.InsertSnapshot(0, Snapshot(c, 999.0))
|
||||
self.assertEqual(len(traj), ns)
|
||||
copySnapshot = Snapshot(traj.GetSnapshot(0))
|
||||
traj.AddSnapshot(copySnapshot)
|
||||
self.assertEqual(len(traj), ns + 1)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(0).GetEnergy(), 999.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(1).GetEnergy(), 1.0)
|
||||
self.assertAlmostEqual(traj.GetSnapshot(len(traj) - 1).GetEnergy(), 999.0)
|
||||
traj2 = Trajectory(traj);
|
||||
self.assertEqual(len(traj), len(traj2))
|
||||
|
||||
def testReadAmber(self):
|
||||
rdbase = os.environ['RDBASE']
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords_bad.trx')
|
||||
traj = Trajectory(2, 0)
|
||||
ok = False
|
||||
try:
|
||||
ReadAmberTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
traj = Trajectory(3, 3)
|
||||
ok = False
|
||||
try:
|
||||
ReadAmberTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords_bad2.trx')
|
||||
ok = False
|
||||
try:
|
||||
traj = Trajectory(3, 3)
|
||||
ReadAmberTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords.trx')
|
||||
traj = Trajectory(3, 3)
|
||||
ReadAmberTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 1)
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords2.trx')
|
||||
traj = Trajectory(3, 3)
|
||||
ReadAmberTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 2)
|
||||
|
||||
def testReadAmberPython(self):
|
||||
# reimplemented the Amber trajectory reader in Python
|
||||
# let's check we get the same data as the C++ reader
|
||||
# (test for building a trajectory out of Snapshots from Python)
|
||||
rdbase = os.environ['RDBASE']
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords2.trx')
|
||||
traj = Trajectory(3, 3)
|
||||
nCoords = traj.NumPoints() * 3
|
||||
nSnapshots = 0
|
||||
hnd = open(fName, 'r')
|
||||
line = hnd.readline()
|
||||
lineNum = 0
|
||||
c = []
|
||||
i = 0
|
||||
while (line):
|
||||
lineNum += 1
|
||||
if (lineNum > 1):
|
||||
tok = line.strip().split()
|
||||
j = 0
|
||||
while ((i < nCoords) and (j < len(tok))):
|
||||
c.append(float(tok[j]))
|
||||
j += 1
|
||||
i += 1
|
||||
if (i == nCoords):
|
||||
nSnapshots += 1
|
||||
traj.AddSnapshot(Snapshot(c))
|
||||
c = []
|
||||
i = 0
|
||||
line = ' '.join(tok[j:]) + ' '
|
||||
else:
|
||||
line = ''
|
||||
else:
|
||||
line = ''
|
||||
line += hnd.readline()
|
||||
hnd.close()
|
||||
self.assertEqual(i, 0)
|
||||
self.assertEqual(nSnapshots, 2)
|
||||
traj2 = Trajectory(3, 3)
|
||||
ReadAmberTrajectory(fName, traj2)
|
||||
self.assertEqual(len(traj), len(traj2))
|
||||
self.assertEqual(traj.NumPoints(), traj2.NumPoints())
|
||||
for snapshotNum in range(len(traj)):
|
||||
for pointNum in range(traj.NumPoints()):
|
||||
for i in range(3):
|
||||
self.assertEqual(traj.GetSnapshot(snapshotNum).GetPoint3D(pointNum)[i],
|
||||
traj2.GetSnapshot(snapshotNum).GetPoint3D(pointNum)[i])
|
||||
|
||||
def testReadGromos(self):
|
||||
rdbase = os.environ['RDBASE']
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords_bad.trc')
|
||||
traj = Trajectory(2, 0)
|
||||
ok = False
|
||||
try:
|
||||
ReadGromosTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
traj = Trajectory(3, 3)
|
||||
ok = False
|
||||
try:
|
||||
ReadGromosTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords_bad2.trc')
|
||||
ok = False
|
||||
try:
|
||||
traj = Trajectory(3, 3)
|
||||
ReadGromosTrajectory(fName, traj)
|
||||
except:
|
||||
ok = True
|
||||
self.assertTrue(ok)
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords.trc')
|
||||
traj = Trajectory(3, 3)
|
||||
ReadGromosTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 1)
|
||||
fName = os.path.join(rdbase, 'Code', 'GraphMol', 'test_data', 'water_coords2.trc')
|
||||
traj = Trajectory(3, 3)
|
||||
ReadGromosTrajectory(fName, traj)
|
||||
self.assertEqual(len(traj), 2)
|
||||
|
||||
if __name__=='__main__':
|
||||
print("Testing Trajectory wrapper")
|
||||
unittest.main()
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <GraphMol/ForceFieldHelpers/MMFF/AtomTyper.h>
|
||||
#include <GraphMol/ForceFieldHelpers/MMFF/Builder.h>
|
||||
#include <ForceField/ForceField.h>
|
||||
#include <Geometry/Trajectory.h>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
|
||||
@@ -932,6 +931,7 @@ void test1() {
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void testAddConformersFromTrajectory() {
|
||||
BOOST_LOG(rdInfoLog) << "-----------------------\n";
|
||||
BOOST_LOG(rdInfoLog) << "Testing adding conformers from a trajectory" << std::endl;
|
||||
@@ -1187,6 +1187,7 @@ void testAddConformersFromGromosTrajectory() {
|
||||
delete mol;
|
||||
BOOST_LOG(rdErrorLog) << "done" << std::endl;
|
||||
}
|
||||
#endif
|
||||
|
||||
void testPeriodicTable() {
|
||||
BOOST_LOG(rdInfoLog) << "-----------------------\n";
|
||||
@@ -1523,9 +1524,6 @@ int main() {
|
||||
// boost::logging::enable_logs("rdApp.info");
|
||||
#if 1
|
||||
test1();
|
||||
testAddConformersFromTrajectory();
|
||||
testAddConformersFromAmberTrajectory();
|
||||
testAddConformersFromGromosTrajectory();
|
||||
testPropLeak();
|
||||
testMolProps();
|
||||
testAtomProps();
|
||||
@@ -1535,6 +1533,10 @@ int main() {
|
||||
testIssue1993296();
|
||||
testIssue2381580();
|
||||
testIssue2840217();
|
||||
#else
|
||||
testAddConformersFromTrajectory();
|
||||
testAddConformersFromAmberTrajectory();
|
||||
testAddConformersFromGromosTrajectory();
|
||||
#endif
|
||||
testPeriodicTable();
|
||||
testAddAtomWithConf();
|
||||
|
||||
Reference in New Issue
Block a user