Source code for hippounit.scores.score_ZScore_somaticSpiking

from __future__ import division
from builtins import range
from sciunit import Score
import numpy
from sciunit.utils import assert_dimensionless

[docs]class ZScore_somaticSpiking(Score): """ Mean of Z scores. A float indicating the sum of standardized difference from reference means for somatic spiking features. """ def __init__(self, score, related_data={}): if not isinstance(score, Exception) and not isinstance(score, float): raise InvalidScoreError("Score must be a float.") else: super(ZScore_somaticSpiking,self).__init__(score, related_data=related_data)
[docs] @classmethod def compute(cls, observation, prediction): """Computes average of z-scores from observation and prediction for somatic spiking features""" feature_errors=numpy.array([]) features_names=(list(observation.keys())) feature_results_dict={} bad_features = [] for i in range (0, len(features_names)): p_value = prediction[features_names[i]]['feature mean'] o_mean = float(observation[features_names[i]]['Mean']) o_std = float(observation[features_names[i]]['Std']) p_std = prediction[features_names[i]]['feature sd'] try: feature_error = abs(p_value - o_mean)/o_std feature_error = assert_dimensionless(feature_error) except ZeroDivisionError: feature_error = float("inf") feature_error = float("inf") except (TypeError,AssertionError) as e: feature_error = e #feature_errors=numpy.append(feature_errors,feature_error) feature_result={features_names[i]: feature_error} feature_results_dict.update(feature_result) if numpy.isnan(feature_error) or numpy.isinf(feature_error): bad_features.append(features_names[i]) else: feature_errors=numpy.append(feature_errors,feature_error) score_avg=numpy.nanmean(feature_errors) return score_avg, feature_results_dict, features_names, bad_features
def __str__(self): return 'ZScore_avg = %.2f' % self.score