Source code for asterism.core.morphometry.features
"""
Module: features
========================
Overview
--------
This modules provides the implementation of the :class:`.MorphometricFeatures` class
used to handle the storage of morphometric features.
This class, actually implements a list of :Feature:`.Feature` objects
Classes relations
---------------------------------------
.. figure::
:align: center
Classes and Inheritance Structure
----------------------------------------------
.. inheritance-diagram::
Summary
---------
.. autosummary::
Feature
MorphometricFeatures
Module API
-----------
"""
from __future__ import division, absolute_import, print_function
import numpy as np
__author__ = 'andrea tramacere'
[docs]class MorphometricFeaturesArray(object):
"""
Class storing features and features names built from a list
of :class:`asterism.core.morphometry.features.MorphometricFeatures` objects
"""
def __init__(self,morph_features_list):
self.dtype=[]
self.values_tuple=()
self.add(morph_features_list)
[docs] def add(self,morph_features_list):
_list=[]
_dt_list=[]
for morph_feature in morph_features_list:
_list.extend(morph_feature.values)
_dt_list.extend(morph_feature.dtype.descr)
self.dtype= np.dtype(_dt_list)
self.values_tuple=tuple(_list)
[docs]class MorphometricFeatures(object):
def __init__(self,
group_name,\
names,\
dtypes,\
null_value=None,\
failed_value=None,\
name_flag=None,
values=None):
self.names=names
self.dtype=self._build_dtype(group_name,names,dtypes,name_flag=name_flag)
self.null_value=null_value
self.failed_value=failed_value
if values is None:
self.values=values
else:
self.values=tuple(values)
def _build_dtype(self,group_name,names,dtypes,name_flag=None):
_list=[]
for name,dt in zip(names,dtypes):
f_name=group_name+'_'+name
if name_flag is not None:
f_name+='_'+name_flag
_list.append((f_name,dt))
return np.dtype(_list)
[docs] def fill(self,values_tuple):
self.values=tuple(values_tuple)
[docs] def fill_null(self):
values_tuple=[self.null_value]*len(self.dtype.names)
self.values=tuple(values_tuple)
[docs] def fill_failed(self):
values_tuple=[self.failed_value]*len(self.dtype.names)
self.values=tuple(values_tuple)
@classmethod
[docs] def feature_factory(cls,
feat_names,
feat_dt,
group_name,
name_flag=None,
null_value=None,
failed_value=None):
return MorphometricFeatures(group_name,
feat_names,
feat_dt,
name_flag=name_flag,
null_value=null_value,
failed_value=failed_value)