Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ The rules for this file:
Fixes

* fix initialization of mutable instance variable of Grid class (metadata dict) (#71)
* fix multiple __init__ calls (#73)


05/16/2019 giacomofiorin, orbeckst
Expand Down
79 changes: 41 additions & 38 deletions gridData/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,38 +157,7 @@ def __init__(self, grid=None, edges=None, origin=None, delta=None,
if filename is not None:
self.load(filename, file_format=file_format)
else:
if edges is not None:
# set up from histogramdd-type data
self.grid = numpy.asanyarray(grid)
self.edges = edges
self._update()
elif origin is not None and delta is not None:
# setup from generic data
origin = numpy.asanyarray(origin)
delta = numpy.asanyarray(delta)
if len(origin) != grid.ndim:
raise TypeError(
"Dimension of origin is not the same as grid dimension.")
if delta.shape == () and numpy.isreal(delta):
delta = numpy.ones(grid.ndim) * delta
elif delta.ndim > 1:
raise NotImplementedError(
"Non-rectangular grids are not supported.")
elif len(delta) != grid.ndim:
raise TypeError("delta should be scalar or array-like of"
"len(grid.ndim)")
# note that origin is CENTER so edges must be shifted by -0.5*delta
self.edges = [origin[dim] +
(numpy.arange(m + 1) - 0.5) * delta[dim]
for dim, m in enumerate(grid.shape)]
self.grid = numpy.asanyarray(grid)
self._update()
else:
raise ValueError("Wrong/missing data to set up Grid. Use Grid() or "
"Grid(grid=<array>, edges=<list>) or "
"Grid(grid=<array>, origin=(x0, y0, z0), delta=(dx, dy, dz)):\n"
"grid={0} edges={1} origin={2} delta={3}".format(
grid, edges, origin, delta))
self._load(grid, edges, metadata, origin, delta)

@property
def interpolation_spline_order(self):
Expand Down Expand Up @@ -404,6 +373,40 @@ def _get_loader(self, filename, file_format=None):
file_format=file_format,
export=False)]

def _load(self, grid=None, edges=None, metadata=None, origin=None, delta=None):
if edges is not None:
# set up from histogramdd-type data
self.grid = numpy.asanyarray(grid)
self.edges = edges
self._update()
elif origin is not None and delta is not None:
# setup from generic data
origin = numpy.asanyarray(origin)
delta = numpy.asanyarray(delta)
if len(origin) != grid.ndim:
raise TypeError(
"Dimension of origin is not the same as grid dimension.")
if delta.shape == () and numpy.isreal(delta):
delta = numpy.ones(grid.ndim) * delta
elif delta.ndim > 1:
raise NotImplementedError(
"Non-rectangular grids are not supported.")
elif len(delta) != grid.ndim:
raise TypeError("delta should be scalar or array-like of"
"len(grid.ndim)")
# note that origin is CENTER so edges must be shifted by -0.5*delta
self.edges = [origin[dim] +
(numpy.arange(m + 1) - 0.5) * delta[dim]
for dim, m in enumerate(grid.shape)]
self.grid = numpy.asanyarray(grid)
self._update()
else:
raise ValueError("Wrong/missing data to set up Grid. Use Grid() or "
"Grid(grid=<array>, edges=<list>) or "
"Grid(grid=<array>, origin=(x0, y0, z0), delta=(dx, dy, dz)):\n"
"grid={0} edges={1} origin={2} delta={3}".format(
grid, edges, origin, delta))

def load(self, filename, file_format=None):
"""Load saved (pickled or dx) grid and edges from <filename>.pickle

Expand All @@ -425,30 +428,30 @@ def load(self, filename, file_format=None):
def _load_python(self, filename):
with open(filename, 'rb') as f:
saved = cPickle.load(f)
self.__init__(grid=saved['grid'],
edges=saved['edges'],
metadata=saved['metadata'])
self._load(grid=saved['grid'],
edges=saved['edges'],
metadata=saved['metadata'])

def _load_cpp4(self, filename):
"""Initializes Grid from a CCP4 file."""
ccp4 = CCP4.CCP4()
ccp4.read(filename)
grid, edges = ccp4.histogramdd()
self.__init__(grid=grid, edges=edges, metadata=self.metadata)
self._load(grid=grid, edges=edges, metadata=self.metadata)

def _load_dx(self, filename):
"""Initializes Grid from a OpenDX file."""
dx = OpenDX.field(0)
dx.read(filename)
grid, edges = dx.histogramdd()
self.__init__(grid=grid, edges=edges, metadata=self.metadata)
self._load(grid=grid, edges=edges, metadata=self.metadata)

def _load_plt(self, filename):
"""Initialize Grid from gOpenMol plt file."""
g = gOpenMol.Plt()
g.read(filename)
grid, edges = g.histogramdd()
self.__init__(grid=grid, edges=edges, metadata=self.metadata)
self._load(grid=grid, edges=edges, metadata=self.metadata)

def export(self, filename, file_format=None, type=None, typequote='"'):
"""export density to file using the given format.
Expand Down