Commit 1472708f authored by eric pellegrini's avatar eric pellegrini
Browse files

Small changes in a few configurators

parent b8e1e865
......@@ -30,10 +30,6 @@ Created on Mar 30, 2015
:author: Eric C. Pellegrini
'''
import collections
import numpy
from MDANSE.Framework.UserDefinitionsStore import UD_STORE
from MDANSE.Framework.Configurators.IConfigurator import IConfigurator
from MDANSE.MolecularDynamics.Trajectory import find_atoms_in_molecule
......@@ -97,73 +93,7 @@ class AtomsListConfigurator(IConfigurator):
self['atoms'] = zip(*indexes)
self['n_values'] = len(self['atoms'])
@staticmethod
def find_parent(atom, level):
'''
Retrieve recursively the parent of a given MMTK atom at a given level.
For example, a level of 1 will return the direct parent of the atom.
:note: this is a static method
:param atom: the atom for which the parent is searched for
:type atom: MMTK.Atom object
:param level: the level of the parent
:type level: int
'''
for _ in range(level):
atom = atom.parent
return atom
def group(self, atoms, level="atom"):
'''
Group the selected atoms according to a given granularity and update
the configurator with the grouping results.
:param atoms: the atoms for
:type atoms: list of MMTK.Atom
:param level: the level of granularity at which the atoms should be grouped
:type level: str
'''
groups = collections.OrderedDict()
for at in atoms:
lvl = LEVELS[level][at.topLevelChemicalObject().__class__.__name__.lower()]
parent = self.find_parent(at,lvl)
groups.setdefault(parent,[]).append(at.index)
self["groups"] = groups.values()
self["n_groups"] = len(self["groups"])
if level != "atom":
self["elements"] = [["dummy"]]*self["n_groups"]
self["level"] = level
self.set_contents()
def set_contents(self):
'''
Sets the contents of the atom selection.
'''
self["contents"] = collections.OrderedDict()
self['index_to_symbol'] = collections.OrderedDict()
for i, group in enumerate(self["elements"]):
for j, el in enumerate(group):
self["contents"].setdefault(el,[]).append(self["groups"][i][j])
self['index_to_symbol'][self["groups"][i][j]] = el
for k,v in self["contents"].items():
self["contents"][k] = numpy.array(v,dtype=numpy.int32)
self["n_atoms_per_element"] = dict([(k,len(v)) for k,v in self["contents"].items()])
self['n_selected_elements'] = len(self["contents"])
def get_information(self):
'''
Returns some informations the atom selection.
......@@ -172,13 +102,10 @@ class AtomsListConfigurator(IConfigurator):
:rtype: str
'''
if not self.has_key("n_selected_atoms"):
if not self.has_key("atoms"):
return "No configured yet"
info = []
info.append("Number of selected atoms:%d" % self["n_selected_atoms"])
info.append("Level of selection:%s" % self["level"])
info.append("Number of selected groups:%d" % self["n_groups"])
info.append("Selected elements:%s" % self["contents"].keys())
info.append("Number of selected %d-tuplets:%d" % (self._nAtoms,self["n_values"]))
return "\n".join(info)
\ No newline at end of file
......@@ -49,18 +49,19 @@ class InterpolationOrderConfigurator(SingleChoiceConfigurator):
type = "interpolation_order"
_default = "no interpolation"
orders = ["no interpolation","1st order","2nd order","3rd order","4th order","5th order"]
def __init__(self, name, **kwargs):
def __init__(self, name, orders=None,**kwargs):
'''
Initializes the configurator.
:param name: the name of the configurator as it will appear in the configuration.
:type name: str.
'''
if orders is None:
orders = ["no interpolation","1st order","2nd order","3rd order","4th order","5th order"]
SingleChoiceConfigurator.__init__(self, name, choices=InterpolationOrderConfigurator.orders, **kwargs)
SingleChoiceConfigurator.__init__(self, name, choices=orders, **kwargs)
def configure(self, configuration, value):
'''
......
......@@ -59,11 +59,11 @@ class OutputFilesConfigurator(IConfigurator):
:type name: str
:param formats: the list of output file formats suported.
:type formats: list of str
'''
'''
IConfigurator.__init__(self, name, **kwargs)
self._formats = formats if formats is not None else ["netcdf"]
self._formats = formats if formats is not None else OutputFilesConfigurator._default[2]
def configure(self, configuration, value):
'''
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment