def test1(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter(db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin=os.path.join(current_dir, "points.min"), pointsts=os.path.join(current_dir, "points.ts"), endianness="<") converter.convert() self.assertEqual(db.number_of_minima(), 2) self.assertEqual(db.number_of_transition_states(), 1) ts = db.transition_states()[0] self.assertAlmostEqual(ts.coords[0], 1.548324, 5) self.assertAlmostEqual(ts.coords[2], 0.18178001, 5) self.assertAlmostEqual(ts.coords[-1], -0.50953229, 5) self.assertEqual((180,), ts.coords.shape) m = db.minima()[0] print(repr(m.coords)) self.assertAlmostEqual(m.coords[0], 1.53700142, 5) self.assertAlmostEqual(m.coords[2], 0.87783657, 5) self.assertAlmostEqual(m.coords[-1], -0.50953229, 5) self.assertEqual((180,), m.coords.shape)
def main(): parser = argparse.ArgumentParser(description=desc, formatter_class=argparse.RawDescriptionHelpFormatter) # parser.add_argument('--ndof', help='Number of total degrees of freedom (e.g. 3*number of atoms). This is simply the length of a coordinates vector.', # type=int, default=1) # parser.add_argument('--Database','-d', help = 'Name of database to write into', type = str, default="optimdb.sqlite") # parser.add_argument('--Mindata','-m', help = 'Name of min.data file', type = str, default="min.data") # parser.add_argument('--Tsdata','-t', help = 'Name of ts.data file', type = str, default="ts.data") # parser.add_argument('--Pointsmin','-p', help = 'Name of points.min file', type = str, default="points.min") # parser.add_argument('--Pointsts','-q', help = 'Name of points.ts file', type = str, default="points.ts") parser.add_argument('--endianness', help = 'set the endianness of the binary data. Can be "<" for little-endian or ">" for big-endian', type = str, default="=") args = parser.parse_args() system = AMBERSystem(prmtopFname="coords.prmtop", inpcrdFname="coords.inpcrd") db = system.create_database() converter = OptimDBConverter(db, mindata="min.data", tsdata="ts.data", pointsmin="points.min", pointsts="points.ts", endianness=args.endianness) converter.convert() # system.get_ndof = lambda : args.ndof run_gui(system, db=db) print db.number_of_minima()
def test1(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter( db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin=os.path.join(current_dir, "points.min"), pointsts=os.path.join(current_dir, "points.ts"), endianness="<") converter.convert() self.assertEqual(db.number_of_minima(), 2) self.assertEqual(db.number_of_transition_states(), 1) ts = db.transition_states()[0] self.assertAlmostEqual(ts.coords[0], 1.548324, 5) self.assertAlmostEqual(ts.coords[2], 0.18178001, 5) self.assertAlmostEqual(ts.coords[-1], -0.50953229, 5) self.assertEqual((180, ), ts.coords.shape) m = db.minima()[0] print repr(m.coords) self.assertAlmostEqual(m.coords[0], 1.53700142, 5) self.assertAlmostEqual(m.coords[2], 0.87783657, 5) self.assertAlmostEqual(m.coords[-1], -0.50953229, 5) self.assertEqual((180, ), m.coords.shape)
def main(): parser = argparse.ArgumentParser(description=""" convert an OPTIM database to a pele sqlite database. Four files are needed. Normally they are called: points.min : the coordinates of the minima in binary format min.data : additional information about the minima (like the energy) points.ts : the coordinates of the transition states min.ts : additional information about transition states (like which minima they connect) Other file names can optionally be passed. Some fortran compilers use non-standard endianness to save the binary data. If your coordinates are garbage, try changing the endianness. """, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('--ndof', help='Number of total degrees of freedom (e.g. 3*number of atoms). This is simply the length of a coordinates vector.', type=int, default=None) parser.add_argument('--Database','-d', help = 'Name of database to write into', type = str, default="optimdb.sqlite") parser.add_argument('--Mindata','-m', help = 'Name of min.data file', type = str, default="min.data") parser.add_argument('--Tsdata','-t', help = 'Name of ts.data file', type = str, default="ts.data") parser.add_argument('--Pointsmin','-p', help = 'Name of points.min file', type = str, default="points.min") parser.add_argument('--Pointsts','-q', help = 'Name of points.ts file', type = str, default="points.ts") parser.add_argument('--endianness', help = 'set the endianness of the binary data. Can be "<" for little-endian or ">" for big-endian', type = str, default="=") args = parser.parse_args() db = Database(args.Database) cv = OptimDBConverter(database=db, ndof=args.ndof, mindata=args.Mindata, tsdata=args.Tsdata, pointsmin=args.Pointsmin, pointsts=args.Pointsts, endianness=args.endianness) cv.setAccuracy() cv.convert() cv.db.session.commit()
def main(): parser = argparse.ArgumentParser( description=desc, formatter_class=argparse.RawDescriptionHelpFormatter) # parser.add_argument('--ndof', help='Number of total degrees of freedom (e.g. 3*number of atoms). This is simply the length of a coordinates vector.', # type=int, default=1) # parser.add_argument('--Database','-d', help = 'Name of database to write into', type = str, default="optimdb.sqlite") # parser.add_argument('--Mindata','-m', help = 'Name of min.data file', type = str, default="min.data") # parser.add_argument('--Tsdata','-t', help = 'Name of ts.data file', type = str, default="ts.data") # parser.add_argument('--Pointsmin','-p', help = 'Name of points.min file', type = str, default="points.min") # parser.add_argument('--Pointsts','-q', help = 'Name of points.ts file', type = str, default="points.ts") parser.add_argument( '--endianness', help= 'set the endianness of the binary data. Can be "<" for little-endian or ">" for big-endian', type=str, default="=") args = parser.parse_args() system = AMBERSystem(prmtopFname="coords.prmtop", inpcrdFname="coords.inpcrd") db = system.create_database() converter = OptimDBConverter(db, mindata="min.data", tsdata="ts.data", pointsmin="points.min", pointsts="points.ts", endianness=args.endianness) converter.convert() # system.get_ndof = lambda : args.ndof run_gui(system, db=db) print db.number_of_minima()
def test_nocoords(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter(db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin="poo", pointsts="poo", assert_coords=False, endianness="<") converter.convert()
def test_nocoords(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter( db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin="poo", pointsts="poo", assert_coords=False, endianness="<") converter.convert()
def test_nocoords_Fails(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter(db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin="poo", pointsts="poo", assert_coords=True, endianness="<") with self.assertRaises(IOError): converter.convert()
def test_nocoords_Fails(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter( db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin="poo", pointsts="poo", assert_coords=True, endianness="<") with self.assertRaises(IOError): converter.convert()
def main(): parser = argparse.ArgumentParser(description=""" convert an OPTIM database to a pele sqlite database. Four files are needed. Normally they are called: points.min : the coordinates of the minima in binary format min.data : additional information about the minima (like the energy) points.ts : the coordinates of the transition states min.ts : additional information about transition states (like which minima they connect) Other file names can optionally be passed. Some fortran compilers use non-standard endianness to save the binary data. If your coordinates are garbage, try changing the endianness. """, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument('--ndof', help='Number of total degrees of freedom (e.g. 3*number of atoms). This is simply the length of a coordinates vector.', type=int, default=None) parser.add_argument('--parentDB', help = 'Name of parent pinned database from which the system properties will be copied. Choose a small one!') parser.add_argument('--Database','-d', help = 'Name of database to write into', type = str, default="optimdb.sqlite") parser.add_argument('--Mindata','-m', help = 'Name of min.data file', type = str, default="min.data") parser.add_argument('--Tsdata','-t', help = 'Name of ts.data file', type = str, default="ts.data") parser.add_argument('--Pointsmin','-p', help = 'Name of points.min file', type = str, default="points.min") parser.add_argument('--Pointsts','-q', help = 'Name of points.ts file', type = str, default="points.ts") parser.add_argument('--endianness', help = 'set the endianness of the binary data. Can be "<" for little-endian or ">" for big-endian', type = str, default="=") parser.add_argument('--nopoints', help = 'Load the metadata for minima and transition states without reading the coordinates (usually to save storage space)', action = 'store_true') args = parser.parse_args() system, basedb, x0 = create_frozenblj_system_from_db(args.parentDB) db = Database(args.Database) props = basedb.properties(as_dict=True) for key, prop in props.iteritems(): db.add_property(key, prop) cv = OptimDBConverter(database=db, ndof=args.ndof, mindata=args.Mindata, tsdata=args.Tsdata, pointsmin=args.Pointsmin, pointsts=args.Pointsts, endianness=args.endianness, coords_converter=system.coords_converter.get_reduced_coords) cv.setAccuracy() if args.nopoints: cv.convert_no_coords() else: cv.convert() cv.db.session.commit()
def test1(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter( db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin=os.path.join(current_dir, "points.min"), pointsts=os.path.join(current_dir, "points.ts"), endianness="<") converter.convert() mdata = tempfile.NamedTemporaryFile(delete=True) tsdata = tempfile.NamedTemporaryFile(delete=True) pm = tempfile.NamedTemporaryFile(delete=True) pts = tempfile.NamedTemporaryFile(delete=True) print mdata.name, tsdata.name writer = WritePathsampleDB(db, mindata=mdata.name, tsdata=tsdata.name, pointsmin=pm.name, pointsts=pts.name, endianness="<") writer.write_db() d1 = np.genfromtxt(os.path.join(current_dir, "min.data"))[:, :3] d2 = np.genfromtxt(mdata.name)[:, :3] _base_test.assert_arrays_almost_equal(self, d1, d2) d1 = np.genfromtxt(os.path.join(current_dir, "ts.data")).reshape(-1, 8)[:, :5] d2 = np.genfromtxt(tsdata.name).reshape(-1, 8)[:, :5] print d1, d2 _base_test.assert_arrays_almost_equal(self, d1, d2) self.assertEqual(sha1_of_file(os.path.join(current_dir, "points.min")), sha1_of_file(pm.name)) self.assertEqual(sha1_of_file(os.path.join(current_dir, "points.ts")), sha1_of_file(pts.name))
def test2(self): from pele.utils.tests.test_disconnectivity_graph import create_random_database db = create_random_database(nmin=20, nts=15) delete = False mdata = tempfile.NamedTemporaryFile(delete=delete, suffix=".min.data") tsdata = tempfile.NamedTemporaryFile(delete=delete, suffix=".ts.data") pm = tempfile.NamedTemporaryFile(delete=delete) pts = tempfile.NamedTemporaryFile(delete=delete) print mdata.name, tsdata.name writer = WritePathsampleDB(db, mindata=mdata.name, tsdata=tsdata.name, pointsmin=pm.name, pointsts=pts.name, endianness="<") writer.write_db() newdb = Database() reader = OptimDBConverter(newdb, mindata=mdata.name, tsdata=tsdata.name, pointsmin=pm.name, pointsts=pts.name, endianness="<") reader.convert() for m1, m2 in izip(db.minima(), newdb.minima()): self.assertAlmostEqual(m1.energy, m2.energy) _base_test.assert_arrays_almost_equal(self, m1.coords, m2.coords) for ts1, ts2 in izip(db.transition_states(), newdb.transition_states()): self.assertAlmostEqual(ts1.energy, ts2.energy) _base_test.assert_arrays_almost_equal(self, ts1.coords, ts2.coords) self.assertAlmostEqual(ts1.minimum1.energy, ts2.minimum1.energy) self.assertAlmostEqual(ts1.minimum2.energy, ts2.minimum2.energy)
def test1(self): current_dir = os.path.dirname(__file__) db = Database() converter = OptimDBConverter(db, mindata=os.path.join(current_dir, "min.data"), tsdata=os.path.join(current_dir, "ts.data"), pointsmin=os.path.join(current_dir, "points.min"), pointsts=os.path.join(current_dir, "points.ts"), endianness="<") converter.convert() mdata = tempfile.NamedTemporaryFile(delete=True) tsdata = tempfile.NamedTemporaryFile(delete=True) pm = tempfile.NamedTemporaryFile(delete=True) pts = tempfile.NamedTemporaryFile(delete=True) print(mdata.name, tsdata.name) writer = WritePathsampleDB(db, mindata=mdata.name, tsdata=tsdata.name, pointsmin=pm.name, pointsts=pts.name, endianness="<") writer.write_db() d1 = np.genfromtxt(os.path.join(current_dir, "min.data"))[:,:3] d2 = np.genfromtxt(mdata.name)[:,:3] _base_test.assert_arrays_almost_equal(self, d1, d2) d1 = np.genfromtxt(os.path.join(current_dir, "ts.data")).reshape(-1,8)[:,:5] d2 = np.genfromtxt(tsdata.name).reshape(-1,8)[:,:5] print(d1, d2) _base_test.assert_arrays_almost_equal(self, d1, d2) self.assertEqual(sha1_of_file(os.path.join(current_dir, "points.min")), sha1_of_file(pm.name)) self.assertEqual(sha1_of_file(os.path.join(current_dir, "points.ts")), sha1_of_file(pts.name))
def test2(self): from pele.utils.tests.test_disconnectivity_graph import create_random_database db = create_random_database(nmin=20, nts=15) delete=False mdata = tempfile.NamedTemporaryFile(delete=delete, suffix=".min.data") tsdata = tempfile.NamedTemporaryFile(delete=delete, suffix=".ts.data") pm = tempfile.NamedTemporaryFile(delete=delete) pts = tempfile.NamedTemporaryFile(delete=delete) print(mdata.name, tsdata.name) writer = WritePathsampleDB(db, mindata=mdata.name, tsdata=tsdata.name, pointsmin=pm.name, pointsts=pts.name, endianness="<") writer.write_db() newdb = Database() reader = OptimDBConverter(newdb, mindata=mdata.name, tsdata=tsdata.name, pointsmin=pm.name, pointsts=pts.name, endianness="<") reader.convert() for m1, m2 in zip(db.minima(), newdb.minima()): self.assertAlmostEqual(m1.energy, m2.energy) _base_test.assert_arrays_almost_equal(self, m1.coords, m2.coords) for ts1, ts2 in zip(db.transition_states(), newdb.transition_states()): self.assertAlmostEqual(ts1.energy, ts2.energy) _base_test.assert_arrays_almost_equal(self, ts1.coords, ts2.coords) self.assertAlmostEqual(ts1.minimum1.energy, ts2.minimum1.energy) self.assertAlmostEqual(ts1.minimum2.energy, ts2.minimum2.energy)
def main(): parser = argparse.ArgumentParser( description=""" convert an OPTIM database to a pele sqlite database. Four files are needed. Normally they are called: points.min : the coordinates of the minima in binary format min.data : additional information about the minima (like the energy) points.ts : the coordinates of the transition states min.ts : additional information about transition states (like which minima they connect) Other file names can optionally be passed. Some fortran compilers use non-standard endianness to save the binary data. If your coordinates are garbage, try changing the endianness. """, formatter_class=argparse.RawDescriptionHelpFormatter) parser.add_argument( '--ndof', help= 'Number of total degrees of freedom (e.g. 3*number of atoms). This is simply the length of a coordinates vector.', type=int, default=None) parser.add_argument('--Database', '-d', help='Name of database to write into', type=str, default="optimdb.sqlite") parser.add_argument('--Mindata', '-m', help='Name of min.data file', type=str, default="min.data") parser.add_argument('--Tsdata', '-t', help='Name of ts.data file', type=str, default="ts.data") parser.add_argument('--Pointsmin', '-p', help='Name of points.min file', type=str, default="points.min") parser.add_argument('--Pointsts', '-q', help='Name of points.ts file', type=str, default="points.ts") parser.add_argument( '--endianness', help= 'set the endianness of the binary data. Can be "<" for little-endian or ">" for big-endian', type=str, default="=") args = parser.parse_args() db = Database(args.Database) cv = OptimDBConverter(database=db, ndof=args.ndof, mindata=args.Mindata, tsdata=args.Tsdata, pointsmin=args.Pointsmin, pointsts=args.Pointsts, endianness=args.endianness) cv.setAccuracy() cv.convert() cv.db.session.commit()