Skip to content
Snippets Groups Projects
Commit 4e20cd11 authored by James Graham's avatar James Graham
Browse files

Ignore missing beads - for DNA with issue #2

parent 83346152
No related branches found
No related tags found
No related merge requests found
...@@ -38,7 +38,7 @@ def main(args): ...@@ -38,7 +38,7 @@ def main(args):
for mol in bonds: for mol in bonds:
print("Bonds in {0}:".format(mol)) print("Bonds in {0}:".format(mol))
for bond in bonds[mol]: for bond in bonds[mol]:
print(bond.eqm, bond.fconst) print(len(bond.values), bond.eqm, bond.fconst)
bonds.write_itp("out.itp", mapping=mapping) bonds.write_itp("out.itp", mapping=mapping)
ff = ForceField("fftest.ff") ff = ForceField("fftest.ff")
......
...@@ -3,6 +3,8 @@ import numpy as np ...@@ -3,6 +3,8 @@ import numpy as np
from .util import stat_moments, sliding from .util import stat_moments, sliding
from .parsers.cfg import CFG from .parsers.cfg import CFG
np.seterr(all="raise")
class Bond: class Bond:
__slots__ = ["atoms", "atom_numbers", "values", "eqm", "fconst"] __slots__ = ["atoms", "atom_numbers", "values", "eqm", "fconst"]
......
...@@ -3,6 +3,8 @@ import numpy as np ...@@ -3,6 +3,8 @@ import numpy as np
from .frame import Atom, Residue, Frame from .frame import Atom, Residue, Frame
from .parsers.cfg import CFG from .parsers.cfg import CFG
np.seterr(all="raise")
class BeadMap: class BeadMap:
__slots__ = ["name", "typ", "type", "atoms", "charge", "mass"] __slots__ = ["name", "typ", "type", "atoms", "charge", "mass"]
...@@ -84,9 +86,10 @@ class Mapping: ...@@ -84,9 +86,10 @@ class Mapping:
try: try:
bead.coords /= n bead.coords /= n
except FloatingPointError: except FloatingPointError:
raise EmptyBeadError("Bead {0} in molecule {1} contains no atoms.".format( # raise EmptyBeadError("Bead {0} in molecule {1} contains no atoms.".format(
bead.name, aares.name # bead.name, aares.name
)) # ))
pass
cgframe.natoms += 1 cgframe.natoms += 1
cgframe.residues.append(res) cgframe.residues.append(res)
......
...@@ -2,23 +2,29 @@ import numpy as np ...@@ -2,23 +2,29 @@ import numpy as np
np.seterr(all="raise") np.seterr(all="raise")
def stat_moments(vals): def stat_moments(vals, ignore_nan=True):
""" """
Return statistical (population) moments of data provided. Return statistical (population) moments of data provided.
:param vals: The data for which to calculate moments :param vals: The data for which to calculate moments
:param ignore_nan: Whether to exclude np.nan from calculation
:return: Numpy array of moments - population mean and variance :return: Numpy array of moments - population mean and variance
""" """
if ignore_nan:
vals_tmp = [val for val in vals if not np.isnan(val)]
else:
vals_tmp = vals
res = np.zeros(2) res = np.zeros(2)
try: try:
for val in vals: for val in vals_tmp:
res[0] += val res[0] += val
mean = res[0] / len(vals) mean = res[0] / len(vals_tmp)
for val in vals: for val in vals_tmp:
res[1] += pow(val - mean, 2) res[1] += pow(val - mean, 2)
res /= len(vals) res /= len(vals_tmp)
return res return res
except FloatingPointError: except FloatingPointError:
return np.zeros(2) return np.zeros(2)
...@@ -29,7 +35,7 @@ def sliding(vals): ...@@ -29,7 +35,7 @@ def sliding(vals):
Yield three values in a sliding window along an iterable. Yield three values in a sliding window along an iterable.
:param vals: Iterable to iterate over :param vals: Iterable to iterate over
:return: Iterable of tuples :return: Generator of tuples
""" """
it = iter(vals) it = iter(vals)
prev = None prev = None
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment