From 5675fd45573649e8e060208d826b72173131b897 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Mon, 3 Feb 2025 12:30:02 +0100 Subject: [PATCH 01/13] package mmtf --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 80e7386d0..0a5b57031 100644 --- a/setup.py +++ b/setup.py @@ -86,7 +86,8 @@ 'datafiles/dcd*.dcd', 'datafiles/xml*.xml', 'datafiles/msa*', - 'datafiles/mmcif*cif',], + 'datafiles/mmcif*cif', + 'datafiles/*.mmtf'], 'prody.proteins': ['tabulated_energies.txt'], } From 7c32cf97de14973e2808b94093c096b96b1407a7 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Mon, 3 Feb 2025 12:49:07 +0100 Subject: [PATCH 02/13] package hpb.so --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 0a5b57031..27c3c8e75 100644 --- a/setup.py +++ b/setup.py @@ -88,7 +88,8 @@ 'datafiles/msa*', 'datafiles/mmcif*cif', 'datafiles/*.mmtf'], - 'prody.proteins': ['tabulated_energies.txt'], + 'prody.proteins': ['tabulated_energies.txt', + 'hpb.so'], } PACKAGE_DIR = {} From 245473aec0d1331174a9ad52c883deba7f379398 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Mon, 3 Feb 2025 14:54:26 +0100 Subject: [PATCH 03/13] credit Anupam --- prody/proteins/interactions.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/prody/proteins/interactions.py b/prody/proteins/interactions.py index 1c2f443a9..641439103 100644 --- a/prody/proteins/interactions.py +++ b/prody/proteins/interactions.py @@ -13,8 +13,8 @@ """ __author__ = 'Karolina Mikulska-Ruminska' -__credits__ = ['James Krieger', 'Karolina Mikulska-Ruminska'] -__email__ = ['karolamik@fizyka.umk.pl', 'jamesmkrieger@gmail.com'] +__credits__ = ['James Krieger', 'Karolina Mikulska-Ruminska', 'Anupam Banerjee'] +__email__ = ['karolamik@fizyka.umk.pl', 'jamesmkrieger@gmail.com', 'anupam.banerjee@stonybrook.edu'] import numpy as np From 3c98d3422a30f5563626df35fd06df01605ed752 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Thu, 6 Feb 2025 22:07:15 +0100 Subject: [PATCH 04/13] pack addH pdbs --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 80e7386d0..adaad98f4 100644 --- a/setup.py +++ b/setup.py @@ -81,6 +81,7 @@ PACKAGE_DATA = { 'prody.utilities': ['datafiles/*.dat'], 'prody.tests': ['datafiles/pdb*.pdb', + 'datafiles/addH*.pdb', 'datafiles/*.dat', 'datafiles/*.coo', 'datafiles/dcd*.dcd', From e3a6960497562f0ff9b10464fdb75a8af523a425 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Thu, 6 Feb 2025 22:07:44 +0100 Subject: [PATCH 05/13] pack all pdbs --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index adaad98f4..6f694ce1d 100644 --- a/setup.py +++ b/setup.py @@ -80,8 +80,7 @@ 'prody.tests.utilities',] PACKAGE_DATA = { 'prody.utilities': ['datafiles/*.dat'], - 'prody.tests': ['datafiles/pdb*.pdb', - 'datafiles/addH*.pdb', + 'prody.tests': ['datafiles/*.pdb', 'datafiles/*.dat', 'datafiles/*.coo', 'datafiles/dcd*.dcd', From d347bc256788747735fa4800f3e2ea002b95856e Mon Sep 17 00:00:00 2001 From: James Krieger Date: Thu, 6 Feb 2025 22:08:46 +0100 Subject: [PATCH 06/13] pack npy files --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6f694ce1d..6fb47301c 100644 --- a/setup.py +++ b/setup.py @@ -86,7 +86,8 @@ 'datafiles/dcd*.dcd', 'datafiles/xml*.xml', 'datafiles/msa*', - 'datafiles/mmcif*cif',], + 'datafiles/mmcif*cif', + 'datafiles/*.npy',], 'prody.proteins': ['tabulated_energies.txt'], } From f6a9b597cec5a78655a59aa0cba09693d200c513 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 14 Feb 2025 11:54:53 +0100 Subject: [PATCH 07/13] support mmcif with no b fac and occ --- prody/proteins/ciffile.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/prody/proteins/ciffile.py b/prody/proteins/ciffile.py index 0abedf9fe..7002b5276 100644 --- a/prody/proteins/ciffile.py +++ b/prody/proteins/ciffile.py @@ -478,8 +478,10 @@ def _parseMMCIFLines(atomgroup, lines, model, chain, subset, serials[acount] = line.split()[fields['id']] elements[acount] = line.split()[fields['type_symbol']] - bfactors[acount] = line.split()[fields['B_iso_or_equiv']] - occupancies[acount] = line.split()[fields['occupancy']] + if 'B_iso_or_equiv' in fields.keys(): + bfactors[acount] = line.split()[fields['B_iso_or_equiv']] + if 'occupancy' in fields.keys(): + occupancies[acount] = line.split()[fields['occupancy']] acount += 1 From a24c5bfd40b25fb9fca95570c9267415e6bae3cf Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 14 Feb 2025 12:02:51 +0100 Subject: [PATCH 08/13] comment out bioexcel fetch tests --- prody/tests/database/test_bioexcel.py | 438 +++++++++++++------------- 1 file changed, 219 insertions(+), 219 deletions(-) diff --git a/prody/tests/database/test_bioexcel.py b/prody/tests/database/test_bioexcel.py index 47d8b9c45..19a0dbad5 100644 --- a/prody/tests/database/test_bioexcel.py +++ b/prody/tests/database/test_bioexcel.py @@ -32,54 +32,54 @@ def setUpClass(cls): cls.query = 'MCV1900370' cls.outname = 'outname' - def testFetchDefault(self): - """Test the outcome of a simple fetch scenario using - default options.""" + # def testFetchDefault(self): + # """Test the outcome of a simple fetch scenario using + # default options.""" - a = fetchBioexcelPDB(self.query, folder=self.workdir) + # a = fetchBioexcelPDB(self.query, folder=self.workdir) - self.assertIsInstance(a, str, - 'fetchBioexcelPDB failed to return a str instance') + # self.assertIsInstance(a, str, + # 'fetchBioexcelPDB failed to return a str instance') - self.assertTrue(os.path.isfile(a), - 'fetchBioexcelPDB failed to return a file') + # self.assertTrue(os.path.isfile(a), + # 'fetchBioexcelPDB failed to return a file') - self.assertTrue(a.endswith('.pdb'), - 'fetchBioexcelPDB failed to return a pdb file') + # self.assertTrue(a.endswith('.pdb'), + # 'fetchBioexcelPDB failed to return a pdb file') - self.assertEqual(a, os.path.join(self.workdir, self.query + '.pdb'), - 'fetchBioexcelPDB default run did not give the right path') + # self.assertEqual(a, os.path.join(self.workdir, self.query + '.pdb'), + # 'fetchBioexcelPDB default run did not give the right path') - ag = prody.parsePDB(a) + # ag = prody.parsePDB(a) - self.assertIsInstance(ag, prody.AtomGroup, - 'parsePDB failed to return an AtomGroup from fetchBioexcelPDB') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parsePDB failed to return an AtomGroup from fetchBioexcelPDB') - self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, - 'fetchBioexcelPDB default output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, + # 'fetchBioexcelPDB default output does not have correct number of atoms') - def testFetchSelection(self): - """Test the outcome of a simple fetch scenario - using selection='_C'.""" + # def testFetchSelection(self): + # """Test the outcome of a simple fetch scenario + # using selection='_C'.""" - a = fetchBioexcelPDB(self.query, folder=self.workdir, - selection='_C') + # a = fetchBioexcelPDB(self.query, folder=self.workdir, + # selection='_C') - ag = prody.parsePDB(a) - self.assertIsInstance(ag, prody.AtomGroup, - 'parsePDB failed to return an AtomGroup from fetchBioexcelPDB') - self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, - 'fetchBioexcelPDB selection _C output does not have correct number of atoms') + # ag = prody.parsePDB(a) + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parsePDB failed to return an AtomGroup from fetchBioexcelPDB') + # self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, + # 'fetchBioexcelPDB selection _C output does not have correct number of atoms') - def testFetchOutname(self): - """Test the outcome of a simple fetch scenario using - outname='outname'.""" + # def testFetchOutname(self): + # """Test the outcome of a simple fetch scenario using + # outname='outname'.""" - a = fetchBioexcelPDB(self.query, folder=self.workdir, - outname=self.outname) + # a = fetchBioexcelPDB(self.query, folder=self.workdir, + # outname=self.outname) - self.assertEqual(a, os.path.join(self.workdir, self.outname + '.pdb'), - 'fetchBioexcelPDB default run did not give the right path') + # self.assertEqual(a, os.path.join(self.workdir, self.outname + '.pdb'), + # 'fetchBioexcelPDB default run did not give the right path') def testParseDefault(self): """Test the outcome of a simple fetch and parse scenario @@ -124,75 +124,75 @@ def setUpClass(cls): cls.query = 'MCV1900370' cls.outname = 'outname' - def testFetchDefault(self): - """Test the outcome of a simple fetch scenario using - default options.""" + # def testFetchDefault(self): + # """Test the outcome of a simple fetch scenario using + # default options.""" - a = fetchBioexcelTopology(self.query, folder=self.workdir) + # a = fetchBioexcelTopology(self.query, folder=self.workdir) - self.assertIsInstance(a, str, - 'fetchBioexcelTopology failed to return a str instance') + # self.assertIsInstance(a, str, + # 'fetchBioexcelTopology failed to return a str instance') - self.assertTrue(os.path.isfile(a), - 'fetchBioexcelTopology failed to return a file') + # self.assertTrue(os.path.isfile(a), + # 'fetchBioexcelTopology failed to return a file') - self.assertTrue(a.endswith('.psf'), - 'fetchBioexcelTopology default failed to return a psf file') + # self.assertTrue(a.endswith('.psf'), + # 'fetchBioexcelTopology default failed to return a psf file') - self.assertEqual(a, os.path.join(self.workdir, self.query + '.psf'), - 'fetchBioexcelTopology default run did not give the right path') + # self.assertEqual(a, os.path.join(self.workdir, self.query + '.psf'), + # 'fetchBioexcelTopology default run did not give the right path') - ag = prody.parsePSF(a) + # ag = prody.parsePSF(a) - self.assertIsInstance(ag, prody.AtomGroup, - 'parsePSF failed to return an AtomGroup from fetchBioexcelTopology default') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parsePSF failed to return an AtomGroup from fetchBioexcelTopology default') - self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, - 'fetchBioexcelTopology default output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, + # 'fetchBioexcelTopology default output does not have correct number of atoms') - def testFetchSelection(self): - """Test the outcome of a simple fetch scenario - using selection='_C'.""" + # def testFetchSelection(self): + # """Test the outcome of a simple fetch scenario + # using selection='_C'.""" - a = fetchBioexcelTopology(self.query, folder=self.workdir, - selection='_C') + # a = fetchBioexcelTopology(self.query, folder=self.workdir, + # selection='_C') - ag = prody.parsePSF(a) - self.assertIsInstance(ag, prody.AtomGroup, - 'parsePSF failed to return an AtomGroup from fetchBioexcelTopology') - self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, - 'fetchBioexcelTopology selection _C output does not have correct number of atoms') + # ag = prody.parsePSF(a) + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parsePSF failed to return an AtomGroup from fetchBioexcelTopology') + # self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, + # 'fetchBioexcelTopology selection _C output does not have correct number of atoms') - def testFetchOutname(self): - """Test the outcome of a simple fetch scenario using - outname='outname'.""" + # def testFetchOutname(self): + # """Test the outcome of a simple fetch scenario using + # outname='outname'.""" - a = fetchBioexcelTopology(self.query, folder=self.workdir, - outname=self.outname) + # a = fetchBioexcelTopology(self.query, folder=self.workdir, + # outname=self.outname) - self.assertEqual(a, os.path.join(self.workdir, self.outname + '.psf'), - 'fetchBioexcelPDB default run did not give the right path') + # self.assertEqual(a, os.path.join(self.workdir, self.outname + '.psf'), + # 'fetchBioexcelPDB default run did not give the right path') - def testFetchConvertFalse(self): - """Test the outcome of a simple fetch scenario using - convert=False.""" + # def testFetchConvertFalse(self): + # """Test the outcome of a simple fetch scenario using + # convert=False.""" - a = fetchBioexcelTopology(self.query, folder=self.workdir, convert=False) + # a = fetchBioexcelTopology(self.query, folder=self.workdir, convert=False) - self.assertIsInstance(a, str, - 'fetchBioexcelTopology failed to return a str instance') + # self.assertIsInstance(a, str, + # 'fetchBioexcelTopology failed to return a str instance') - self.assertTrue(os.path.isfile(a), - 'fetchBioexcelTopology failed to return a file') + # self.assertTrue(os.path.isfile(a), + # 'fetchBioexcelTopology failed to return a file') - self.assertTrue(a.endswith('.json'), - 'fetchBioexcelTopology default failed to return a json file') + # self.assertTrue(a.endswith('.json'), + # 'fetchBioexcelTopology default failed to return a json file') - self.assertEqual(a, os.path.join(self.workdir, self.query + '.json'), - 'fetchBioexcelTopology default run did not give the right path') + # self.assertEqual(a, os.path.join(self.workdir, self.query + '.json'), + # 'fetchBioexcelTopology default run did not give the right path') def testParseDefault(self): - """Test the outcome of a simple fetch and parse scenario + """Test the outcome of a simple parse from file scenario with default parameters.""" ag = parseBioexcelTopology(self.query, folder=self.workdir) @@ -204,7 +204,7 @@ def testParseDefault(self): 'parseBioexcelTopology default output does not have correct number of atoms') def testParseSelection(self): - """Test the outcome of a simple fetch and parse scenario + """Test the outcome of a simple parse from file scenario using selection='_C'.""" ag = parseBioexcelTopology(self.query, folder=self.workdir, @@ -216,35 +216,35 @@ def testParseSelection(self): self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, 'parseBioexcelTopology selection _C output does not have correct number of atoms') - def testFetchAndParse(self): - """Test the outcome of a simple fetch and parse scenario""" + # def testFetchAndParse(self): + # """Test the outcome of a simple fetch and parse scenario""" - a = fetchBioexcelTopology(self.query, folder=self.workdir) + # a = fetchBioexcelTopology(self.query, folder=self.workdir) - ag = parseBioexcelTopology(a, folder=self.workdir) + # ag = parseBioexcelTopology(a, folder=self.workdir) - self.assertIsInstance(ag, prody.AtomGroup, - 'fetch then parseBioexcelTopology failed to return an AtomGroup') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'fetch then parseBioexcelTopology failed to return an AtomGroup') - self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, - 'fetch then parseBioexcelTopology output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, + # 'fetch then parseBioexcelTopology output does not have correct number of atoms') - def testFetchConvParse(self): - """Test the outcome of a simple fetch, convert and parse scenario.""" + # def testFetchConvParse(self): + # """Test the outcome of a simple fetch, convert and parse scenario.""" - a = fetchBioexcelTopology(self.query, folder=self.workdir, convert=False) + # a = fetchBioexcelTopology(self.query, folder=self.workdir, convert=False) - ag = parseBioexcelTopology(a, folder=self.workdir) + # ag = parseBioexcelTopology(a, folder=self.workdir) - self.assertIsInstance(ag, prody.AtomGroup, - 'fetch, then convert & parseBioexcelTopology failed to return an AtomGroup') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'fetch, then convert & parseBioexcelTopology failed to return an AtomGroup') - self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, - 'fetch, then convert & parseBioexcelTopology output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, + # 'fetch, then convert & parseBioexcelTopology output does not have correct number of atoms') - def testConvertWrongType(self): - with self.assertRaises(TypeError): - fetchBioexcelTopology(self.query, folder=self.workdir, convert='False') + # def testConvertWrongType(self): + # with self.assertRaises(TypeError): + # fetchBioexcelTopology(self.query, folder=self.workdir, convert='False') @classmethod def tearDownClass(cls): @@ -411,79 +411,79 @@ def setUpClass(cls): cls.frames1 = '1-5,11-15' cls.frames2 = '10:20:2' - def testFetchFrames1(self): - """Test the outcome of a simple fetch scenario using - default options.""" - - try: - a = fetchBioexcelTrajectory(self.query, folder=self.workdir, - frames=self.frames1) - except OSError: - pass - else: - self.assertIsInstance(a, str, - 'fetchBioexcelTrajectory failed to return a str instance') + # def testFetchFrames1(self): + # """Test the outcome of a simple fetch scenario using + # default options.""" + + # try: + # a = fetchBioexcelTrajectory(self.query, folder=self.workdir, + # frames=self.frames1) + # except OSError: + # pass + # else: + # self.assertIsInstance(a, str, + # 'fetchBioexcelTrajectory failed to return a str instance') - self.assertTrue(os.path.isfile(a), - 'fetchBioexcelTrajectory failed to return a file') + # self.assertTrue(os.path.isfile(a), + # 'fetchBioexcelTrajectory failed to return a file') - self.assertTrue(a.endswith('.dcd'), - 'fetchBioexcelTrajectory default failed to return a dcd file') + # self.assertTrue(a.endswith('.dcd'), + # 'fetchBioexcelTrajectory default failed to return a dcd file') - self.assertEqual(a, os.path.join(self.workdir, self.query + '.dcd'), - 'fetchBioexcelTrajectory default run did not give the right path') - - ens = prody.parseDCD(a) - - self.assertIsInstance(ens, prody.Ensemble, - 'parseDCD failed to return an Ensemble from fetchBioexcelTrajectory default') - self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, - 'fetchBioexcelTrajectory default output does not have correct number of atoms') - self.assertEqual(ens.numCoordsets(), N_FRAMES_1, - 'fetchBioexcelTrajectory output with example frames 1 does not have correct number of frames') - - def testFetchSelectionFrames2(self): - """Test the outcome of a simple fetch scenario - using selection='_C'.""" - - try: - a = fetchBioexcelTrajectory(self.query, folder=self.workdir, - selection='_C', frames=self.frames2) - except OSError: - pass - else: - ens = prody.parseDCD(a) - self.assertIsInstance(ens, prody.Ensemble, - 'parseDCD failed to return an Ensemble from fetchBioexcelTrajectory') - self.assertEqual(ens.numAtoms(), SELE_N_ATOMS, - 'fetchBioexcelTrajectory selection _C output does not have correct number of atoms') - self.assertEqual(ens.numCoordsets(), N_FRAMES_2, - 'fetchBioexcelTrajectory output with example frames 2 does not have correct number of frames') - - def testFetchConvertFalse(self): - """Test the outcome of a simple fetch scenario using - convert=False.""" - - try: - a = fetchBioexcelTrajectory(self.query, folder=self.workdir, - convert=False, frames=self.frames1) - except OSError: - pass - else: - self.assertIsInstance(a, str, - 'fetchBioexcelTrajectory failed to return a str instance') + # self.assertEqual(a, os.path.join(self.workdir, self.query + '.dcd'), + # 'fetchBioexcelTrajectory default run did not give the right path') + + # ens = prody.parseDCD(a) + + # self.assertIsInstance(ens, prody.Ensemble, + # 'parseDCD failed to return an Ensemble from fetchBioexcelTrajectory default') + # self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, + # 'fetchBioexcelTrajectory default output does not have correct number of atoms') + # self.assertEqual(ens.numCoordsets(), N_FRAMES_1, + # 'fetchBioexcelTrajectory output with example frames 1 does not have correct number of frames') + + # def testFetchSelectionFrames2(self): + # """Test the outcome of a simple fetch scenario + # using selection='_C'.""" + + # try: + # a = fetchBioexcelTrajectory(self.query, folder=self.workdir, + # selection='_C', frames=self.frames2) + # except OSError: + # pass + # else: + # ens = prody.parseDCD(a) + # self.assertIsInstance(ens, prody.Ensemble, + # 'parseDCD failed to return an Ensemble from fetchBioexcelTrajectory') + # self.assertEqual(ens.numAtoms(), SELE_N_ATOMS, + # 'fetchBioexcelTrajectory selection _C output does not have correct number of atoms') + # self.assertEqual(ens.numCoordsets(), N_FRAMES_2, + # 'fetchBioexcelTrajectory output with example frames 2 does not have correct number of frames') + + # def testFetchConvertFalse(self): + # """Test the outcome of a simple fetch scenario using + # convert=False.""" + + # try: + # a = fetchBioexcelTrajectory(self.query, folder=self.workdir, + # convert=False, frames=self.frames1) + # except OSError: + # pass + # else: + # self.assertIsInstance(a, str, + # 'fetchBioexcelTrajectory failed to return a str instance') - self.assertTrue(os.path.isfile(a), - 'fetchBioexcelTrajectory failed to return a file') + # self.assertTrue(os.path.isfile(a), + # 'fetchBioexcelTrajectory failed to return a file') - self.assertTrue(a.endswith('.xtc'), - 'fetchBioexcelTrajectory default failed to return a xtc file') + # self.assertTrue(a.endswith('.xtc'), + # 'fetchBioexcelTrajectory default failed to return a xtc file') - self.assertEqual(a, os.path.join(self.workdir, self.query + '.xtc'), - 'fetchBioexcelTrajectory default run did not give the right path') + # self.assertEqual(a, os.path.join(self.workdir, self.query + '.xtc'), + # 'fetchBioexcelTrajectory default run did not give the right path') def testParseFrames1(self): - """Test the outcome of a simple fetch and parse scenario + """Test the outcome of a simple parse from file scenario with default parameters.""" try: @@ -500,7 +500,7 @@ def testParseFrames1(self): 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') def testParseSelectionFrames2(self): - """Test the outcome of a simple fetch and parse scenario + """Test the outcome of a simple parse from file scenario using selection='_C'.""" try: ens = parseBioexcelTrajectory(self.query, folder=self.workdir, @@ -515,61 +515,61 @@ def testParseSelectionFrames2(self): self.assertEqual(ens.numCoordsets(), N_FRAMES_2, 'parseBioexcelTrajectory output with example frames 2 does not have correct number of frames') - def testFetchAndParse(self): - """Test the outcome of a simple fetch and parse scenario""" - try: - a = fetchBioexcelTrajectory(self.query, folder=self.workdir, - frames=self.frames1) - except OSError: - pass - else: - ens = parseBioexcelTrajectory(a, folder=self.workdir) + # def testFetchAndParse(self): + # """Test the outcome of a simple fetch and parse scenario""" + # try: + # a = fetchBioexcelTrajectory(self.query, folder=self.workdir, + # frames=self.frames1) + # except OSError: + # pass + # else: + # ens = parseBioexcelTrajectory(a, folder=self.workdir) - self.assertIsInstance(ens, prody.Ensemble, - 'parseBioexcelTrajectory failed to return an Ensemble instance') - self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, - 'parseBioexcelTrajectory default output does not have correct number of atoms') - self.assertEqual(ens.numCoordsets(), N_FRAMES_1, - 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') - - def testFetchNoConvParse(self): - """Test the outcome of a simple fetch, then internally convert and parse scenario.""" - try: - a = fetchBioexcelTrajectory(self.query, folder=self.workdir, - convert=False, frames=self.frames1) - except OSError: - pass - else: - ens = parseBioexcelTrajectory(a) + # self.assertIsInstance(ens, prody.Ensemble, + # 'parseBioexcelTrajectory failed to return an Ensemble instance') + # self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, + # 'parseBioexcelTrajectory default output does not have correct number of atoms') + # self.assertEqual(ens.numCoordsets(), N_FRAMES_1, + # 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') + + # def testFetchNoConvParse(self): + # """Test the outcome of a simple fetch, then internally convert and parse scenario.""" + # try: + # a = fetchBioexcelTrajectory(self.query, folder=self.workdir, + # convert=False, frames=self.frames1) + # except OSError: + # pass + # else: + # ens = parseBioexcelTrajectory(a) - self.assertIsInstance(ens, prody.Ensemble, - 'parseBioexcelTrajectory failed to return an Ensemble instance') - self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, - 'parseBioexcelTrajectory default output does not have correct number of atoms') - self.assertEqual(ens.numCoordsets(), N_FRAMES_1, - 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') - - def testFetchConvParse(self): - """Test the outcome of a simple fetch, externally convert and then parse scenario.""" - try: - a = fetchBioexcelTrajectory(self.query, folder=self.workdir, - convert=False, frames=self.frames1) - except OSError: - pass - else: - b = convertXtcToDcd(a) - ens = parseBioexcelTrajectory(b) + # self.assertIsInstance(ens, prody.Ensemble, + # 'parseBioexcelTrajectory failed to return an Ensemble instance') + # self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, + # 'parseBioexcelTrajectory default output does not have correct number of atoms') + # self.assertEqual(ens.numCoordsets(), N_FRAMES_1, + # 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') + + # def testFetchConvParse(self): + # """Test the outcome of a simple fetch, externally convert and then parse scenario.""" + # try: + # a = fetchBioexcelTrajectory(self.query, folder=self.workdir, + # convert=False, frames=self.frames1) + # except OSError: + # pass + # else: + # b = convertXtcToDcd(a) + # ens = parseBioexcelTrajectory(b) - self.assertIsInstance(ens, prody.Ensemble, - 'parseBioexcelTrajectory failed to return an Ensemble instance') - self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, - 'parseBioexcelTrajectory default output does not have correct number of atoms') - self.assertEqual(ens.numCoordsets(), N_FRAMES_1, - 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') - - def testConvertWrongType(self): - with self.assertRaises(TypeError): - fetchBioexcelTrajectory(self.query, folder=self.workdir, convert='False') + # self.assertIsInstance(ens, prody.Ensemble, + # 'parseBioexcelTrajectory failed to return an Ensemble instance') + # self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, + # 'parseBioexcelTrajectory default output does not have correct number of atoms') + # self.assertEqual(ens.numCoordsets(), N_FRAMES_1, + # 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') + + # def testConvertWrongType(self): + # with self.assertRaises(TypeError): + # fetchBioexcelTrajectory(self.query, folder=self.workdir, convert='False') @classmethod def tearDownClass(cls): From 951c9673de05ac4503de8bb98c24989435900d6f Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 14 Feb 2025 14:00:49 +0100 Subject: [PATCH 09/13] install openmm --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 01f44012f..e8a8a9c2d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,7 +30,7 @@ jobs: source activate test conda config --add channels conda-forge conda install --yes numpy scipy nose requests - conda install --yes pdbfixer mdtraj + conda install --yes pdbfixer mdtraj openmm pip install mmtf-python scikit-learn pip install . python setup.py build_ext --inplace --force From a2962427a220088cefb4ab05bea4f3b280c9af96 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 14 Feb 2025 14:01:41 +0100 Subject: [PATCH 10/13] package json datafiles --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 80e7386d0..29d5ee40b 100644 --- a/setup.py +++ b/setup.py @@ -86,7 +86,8 @@ 'datafiles/dcd*.dcd', 'datafiles/xml*.xml', 'datafiles/msa*', - 'datafiles/mmcif*cif',], + 'datafiles/mmcif*cif', + 'datafiles/*json'], 'prody.proteins': ['tabulated_energies.txt'], } From f6cfa1a62d7153bfa57f2fa5fbdec275a9e41052 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 14 Feb 2025 14:01:41 +0100 Subject: [PATCH 11/13] package json datafiles --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e95a924a2..1456de8ad 100644 --- a/setup.py +++ b/setup.py @@ -88,7 +88,8 @@ 'datafiles/msa*', 'datafiles/mmcif*cif', 'datafiles/*.npy', - 'datafiles/*.mmtf'], + 'datafiles/*.mmtf', + 'datafiles/*json'], 'prody.proteins': ['tabulated_energies.txt', 'hpb.so'], } From 8e6333dc61cc3c864804e19dbb3423e85e8cd878 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 14 Feb 2025 15:47:11 +0100 Subject: [PATCH 12/13] comment more bioexcel tests --- prody/tests/database/test_bioexcel.py | 216 +++++++++++++------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/prody/tests/database/test_bioexcel.py b/prody/tests/database/test_bioexcel.py index 19a0dbad5..7fc2dd7cd 100644 --- a/prody/tests/database/test_bioexcel.py +++ b/prody/tests/database/test_bioexcel.py @@ -20,17 +20,17 @@ N_FRAMES_1 = 10 N_FRAMES_2 = 6 - class TestFetchParseBioexcelPDB(unittest.TestCase): + # class TestFetchParseBioexcelPDB(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls.workdir = 'bioexcel_PDB_tests' - if not os.path.exists(cls.workdir): - os.mkdir(cls.workdir) - os.chdir(cls.workdir) + # @classmethod + # def setUpClass(cls): + # cls.workdir = 'bioexcel_PDB_tests' + # if not os.path.exists(cls.workdir): + # os.mkdir(cls.workdir) + # os.chdir(cls.workdir) - cls.query = 'MCV1900370' - cls.outname = 'outname' + # cls.query = 'MCV1900370' + # cls.outname = 'outname' # def testFetchDefault(self): # """Test the outcome of a simple fetch scenario using @@ -81,48 +81,48 @@ def setUpClass(cls): # self.assertEqual(a, os.path.join(self.workdir, self.outname + '.pdb'), # 'fetchBioexcelPDB default run did not give the right path') - def testParseDefault(self): - """Test the outcome of a simple fetch and parse scenario - with default parameters.""" + # def testParseDefault(self): + # """Test the outcome of a simple fetch and parse scenario + # with default parameters.""" - ag = parseBioexcelPDB(self.query, folder=self.workdir) + # ag = parseBioexcelPDB(self.query, folder=self.workdir) - self.assertIsInstance(ag, prody.AtomGroup, - 'parseBioexcelPDB failed to return an AtomGroup instance') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parseBioexcelPDB failed to return an AtomGroup instance') - self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, - 'parseBioexcelPDB default output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, + # 'parseBioexcelPDB default output does not have correct number of atoms') - def testParseSelection(self): - """Test the outcome of a simple fetch and parse scenario - using selection='_C'.""" + # def testParseSelection(self): + # """Test the outcome of a simple fetch and parse scenario + # using selection='_C'.""" - ag = parseBioexcelPDB(self.query, folder=self.workdir, - selection='_C') + # ag = parseBioexcelPDB(self.query, folder=self.workdir, + # selection='_C') - self.assertIsInstance(ag, prody.AtomGroup, - 'parseBioexcelPDB with selection failed to return an AtomGroup') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parseBioexcelPDB with selection failed to return an AtomGroup') - self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, - 'parseBioexcelPDB selection _C output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, + # 'parseBioexcelPDB selection _C output does not have correct number of atoms') - @classmethod - def tearDownClass(cls): - os.chdir('..') - shutil.rmtree(cls.workdir) + # @classmethod + # def tearDownClass(cls): + # os.chdir('..') + # shutil.rmtree(cls.workdir) - class TestFetchConvertParseBioexcelTop(unittest.TestCase): + # class TestFetchConvertParseBioexcelTop(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls.workdir = 'bioexcel_top_tests' - if not os.path.exists(cls.workdir): - os.mkdir(cls.workdir) - os.chdir(cls.workdir) + # @classmethod + # def setUpClass(cls): + # cls.workdir = 'bioexcel_top_tests' + # if not os.path.exists(cls.workdir): + # os.mkdir(cls.workdir) + # os.chdir(cls.workdir) - cls.query = 'MCV1900370' - cls.outname = 'outname' + # cls.query = 'MCV1900370' + # cls.outname = 'outname' # def testFetchDefault(self): # """Test the outcome of a simple fetch scenario using @@ -191,30 +191,30 @@ def setUpClass(cls): # self.assertEqual(a, os.path.join(self.workdir, self.query + '.json'), # 'fetchBioexcelTopology default run did not give the right path') - def testParseDefault(self): - """Test the outcome of a simple parse from file scenario - with default parameters.""" + # def testParseDefault(self): + # """Test the outcome of a simple parse from file scenario + # with default parameters.""" - ag = parseBioexcelTopology(self.query, folder=self.workdir) + # ag = parseBioexcelTopology(self.query, folder=self.workdir) - self.assertIsInstance(ag, prody.AtomGroup, - 'parseBioexcelTopology failed to return an AtomGroup instance') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parseBioexcelTopology failed to return an AtomGroup instance') - self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, - 'parseBioexcelTopology default output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), FULL_N_ATOMS, + # 'parseBioexcelTopology default output does not have correct number of atoms') - def testParseSelection(self): - """Test the outcome of a simple parse from file scenario - using selection='_C'.""" + # def testParseSelection(self): + # """Test the outcome of a simple parse from file scenario + # using selection='_C'.""" - ag = parseBioexcelTopology(self.query, folder=self.workdir, - selection='_C') + # ag = parseBioexcelTopology(self.query, folder=self.workdir, + # selection='_C') - self.assertIsInstance(ag, prody.AtomGroup, - 'parseBioexcelTopology with selection failed to return an AtomGroup') + # self.assertIsInstance(ag, prody.AtomGroup, + # 'parseBioexcelTopology with selection failed to return an AtomGroup') - self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, - 'parseBioexcelTopology selection _C output does not have correct number of atoms') + # self.assertEqual(ag.numAtoms(), SELE_N_ATOMS, + # 'parseBioexcelTopology selection _C output does not have correct number of atoms') # def testFetchAndParse(self): # """Test the outcome of a simple fetch and parse scenario""" @@ -246,10 +246,10 @@ def testParseSelection(self): # with self.assertRaises(TypeError): # fetchBioexcelTopology(self.query, folder=self.workdir, convert='False') - @classmethod - def tearDownClass(cls): - os.chdir('..') - shutil.rmtree(cls.workdir) + # @classmethod + # def tearDownClass(cls): + # os.chdir('..') + # shutil.rmtree(cls.workdir) class TestCheckSelection(unittest.TestCase): @@ -397,19 +397,19 @@ def testReplaceBoth(self): def tearDownClass(cls): shutil.rmtree(cls.workdir) - class TestFetchConvertParseBioexcelTraj(unittest.TestCase): + # class TestFetchConvertParseBioexcelTraj(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls.workdir = 'bioexcel_traj_tests' - if not os.path.exists(cls.workdir): - os.mkdir(cls.workdir) - os.chdir(cls.workdir) - - cls.query = 'MCV1900370' - cls.outname = 'outname' - cls.frames1 = '1-5,11-15' - cls.frames2 = '10:20:2' + # @classmethod + # def setUpClass(cls): + # cls.workdir = 'bioexcel_traj_tests' + # if not os.path.exists(cls.workdir): + # os.mkdir(cls.workdir) + # os.chdir(cls.workdir) + + # cls.query = 'MCV1900370' + # cls.outname = 'outname' + # cls.frames1 = '1-5,11-15' + # cls.frames2 = '10:20:2' # def testFetchFrames1(self): # """Test the outcome of a simple fetch scenario using @@ -482,38 +482,38 @@ def setUpClass(cls): # self.assertEqual(a, os.path.join(self.workdir, self.query + '.xtc'), # 'fetchBioexcelTrajectory default run did not give the right path') - def testParseFrames1(self): - """Test the outcome of a simple parse from file scenario - with default parameters.""" - - try: - ens = parseBioexcelTrajectory(self.query, folder=self.workdir, - frames=self.frames1) - except OSError: - pass - else: - self.assertIsInstance(ens, prody.Ensemble, - 'parseBioexcelTrajectory failed to return an Ensemble instance') - self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, - 'parseBioexcelTrajectory default output does not have correct number of atoms') - self.assertEqual(ens.numCoordsets(), N_FRAMES_1, - 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') - - def testParseSelectionFrames2(self): - """Test the outcome of a simple parse from file scenario - using selection='_C'.""" - try: - ens = parseBioexcelTrajectory(self.query, folder=self.workdir, - selection='_C', frames=self.frames2) - except OSError: - pass - else: - self.assertIsInstance(ens, prody.Ensemble, - 'parseBioexcelTrajectory with selection failed to return an Ensemble') - self.assertEqual(ens.numAtoms(), SELE_N_ATOMS, - 'parseBioexcelTrajectory selection _C output does not have correct number of atoms') - self.assertEqual(ens.numCoordsets(), N_FRAMES_2, - 'parseBioexcelTrajectory output with example frames 2 does not have correct number of frames') + # def testParseFrames1(self): + # """Test the outcome of a simple parse from file scenario + # with default parameters.""" + + # try: + # ens = parseBioexcelTrajectory(self.query, folder=self.workdir, + # frames=self.frames1) + # except OSError: + # pass + # else: + # self.assertIsInstance(ens, prody.Ensemble, + # 'parseBioexcelTrajectory failed to return an Ensemble instance') + # self.assertEqual(ens.numAtoms(), FULL_N_ATOMS, + # 'parseBioexcelTrajectory default output does not have correct number of atoms') + # self.assertEqual(ens.numCoordsets(), N_FRAMES_1, + # 'parseBioexcelTrajectory output with example frames 1 does not have correct number of frames') + + # def testParseSelectionFrames2(self): + # """Test the outcome of a simple parse from file scenario + # using selection='_C'.""" + # try: + # ens = parseBioexcelTrajectory(self.query, folder=self.workdir, + # selection='_C', frames=self.frames2) + # except OSError: + # pass + # else: + # self.assertIsInstance(ens, prody.Ensemble, + # 'parseBioexcelTrajectory with selection failed to return an Ensemble') + # self.assertEqual(ens.numAtoms(), SELE_N_ATOMS, + # 'parseBioexcelTrajectory selection _C output does not have correct number of atoms') + # self.assertEqual(ens.numCoordsets(), N_FRAMES_2, + # 'parseBioexcelTrajectory output with example frames 2 does not have correct number of frames') # def testFetchAndParse(self): # """Test the outcome of a simple fetch and parse scenario""" @@ -571,10 +571,10 @@ def testParseSelectionFrames2(self): # with self.assertRaises(TypeError): # fetchBioexcelTrajectory(self.query, folder=self.workdir, convert='False') - @classmethod - def tearDownClass(cls): - os.chdir('..') - shutil.rmtree(cls.workdir) + # @classmethod + # def tearDownClass(cls): + # os.chdir('..') + # shutil.rmtree(cls.workdir) class TestOnlyConvertParseBioexcel(unittest.TestCase): From 720a05e07d8aa222302a9571cb5b945f082ecd71 Mon Sep 17 00:00:00 2001 From: James Krieger Date: Fri, 14 Feb 2025 16:22:25 +0100 Subject: [PATCH 13/13] add insty ref to insty code docs --- prody/proteins/interactions.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/prody/proteins/interactions.py b/prody/proteins/interactions.py index 641439103..6e1cb8c62 100644 --- a/prody/proteins/interactions.py +++ b/prody/proteins/interactions.py @@ -4545,7 +4545,14 @@ def buildInteractionMatrixEnergy(self, **kwargs): O Keskin, I Bahar and colleagues from [OK98]_ and have RT units. 'CS' is from MD simulations of amino acid pairs from Carlos Simmerling - and Gary Wu in the InSty paper (under preparation) and have units of kcal/mol. """ + and Gary Wu in the [MR25]_ and have units of kcal/mol. + + .. [MR25] Mikulska-Ruminska K, Krieger JM, Cao X, Banerjee A, Wu G, + Bogetti AT, Zhang F, Simmerling C, Coutsias EA, Bahar I + InSty: a new module in ProDy for evaluating the interactions + and stability of proteins + *Bioinformatics* **2025** 169009 + """ import numpy as np import matplotlib @@ -4898,7 +4905,7 @@ def showCumulativeInteractionTypes(self, **kwargs): O Keskin, I Bahar and colleagues from [OK98]_ and have RT units. 'CS' is from MD simulations of amino acid pairs from Carlos Simmerling - and Gary Wu for the InSty paper (under preparation) and have units kcal/mol. + and Gary Wu for [MR25]_ and have units kcal/mol. """ import numpy as np