From e29779bee06135133c7ea69b147454d97a252098 Mon Sep 17 00:00:00 2001 From: Sean Colby Date: Fri, 24 Jan 2025 15:54:30 -0800 Subject: [PATCH] Fix attribute referencing for conformational ensemble --- isicle/conformers.py | 19 +++++++------------ isicle/geometry.py | 15 --------------- isicle/parse.py | 3 +-- 3 files changed, 8 insertions(+), 29 deletions(-) diff --git a/isicle/conformers.py b/isicle/conformers.py index ea9e428..6aa7357 100644 --- a/isicle/conformers.py +++ b/isicle/conformers.py @@ -398,13 +398,10 @@ def _check_attributes(self, attr): If all members do not have `attr`. ''' - - value = [x.get___dict__() for x in self] - for key in safelist(attr): - if not all(key in x for x in value): - raise AttributeError('"{}" not found for all conformational ' - 'ensemble members.'.format(attr)) - value = [x.get(key) for x in value] + + if not all(hasattr(x, attr) for x in self): + raise AttributeError('"{}" not found for all conformational ' + 'ensemble members.'.format(attr)) def reduce(self, attr, func='boltzmann', **kwargs): ''' @@ -438,9 +435,7 @@ def reduce(self, attr, func='boltzmann', **kwargs): self._check_attributes('energy') # Extract (possibly nested) value attribute - value = [x.get___dict__() for x in self] - for key in safelist(attr): - value = [x.get(key) for x in value] + value = [getattr(x, attr) for x in self] # Check nested values if isinstance(value[0], dict): @@ -463,7 +458,7 @@ def reduce(self, attr, func='boltzmann', **kwargs): value = np.array([x['mean'] for x in value]).flatten() else: - value = np.array([x[attr] for x in value]).flatten() + value = np.array([getattr(x, attr) for x in value]).flatten() # Not nested else: @@ -474,7 +469,7 @@ def reduce(self, attr, func='boltzmann', **kwargs): # Extract energy attribute if _energy_based(f): energy = np.array( - [np.repeat(x.get___dict__()['energy'], pad) for x in self]) + [np.repeat(getattr(x, 'energy'), pad) for x in self]) energy = energy.flatten() # Exectue energy-based method diff --git a/isicle/geometry.py b/isicle/geometry.py index a394aff..8907c00 100644 --- a/isicle/geometry.py +++ b/isicle/geometry.py @@ -27,7 +27,6 @@ class Geometry(GeometryInterface): "_connectivity", "_formal_charge", "_ccs", - "_ccs_std" ] _default_value = None @@ -171,20 +170,6 @@ def ccs(self): return self._ccs - @property - def ccs_std(self): - """ - Get standard deviation of CCS prediction of the molecule. - - Returns - ------- - float - Standard deviation of collision cross section. - - """ - - return self._ccs_std - def view(self): """ View internal rdkit mol object representation. diff --git a/isicle/parse.py b/isicle/parse.py index 05cd747..f6f85a6 100644 --- a/isicle/parse.py +++ b/isicle/parse.py @@ -835,8 +835,7 @@ def parse(self): elif "standard deviation (percent)" in line: done = True if done is True: - self.result["ccs"] = ccs_mn - self.result["ccs_std"] = ccs_std + self.result["ccs"] = {"mean": ccs_mn, "std": ccs_std} self.result["geometry"] = self.data["geometry"]