Source code for niftynet.evaluation.base_evaluations

# -*- coding: utf-8 -*-
"""
This module defines basic interfaces for NiftyNet evaluations
"""

from __future__ import absolute_import, division, print_function

import pandas as pd

from niftynet.layer.base_layer import Layer

[docs]class BaseEvaluation(Layer): """ Minimal interface for a NiftyNet evaluation """ def __init__(self, reader, app_param, eval_param): super(BaseEvaluation, self).__init__() self.reader = reader self.app_param = app_param self.eval_param = eval_param
[docs] def get_aggregations(self): """ Returns aggregations to compute for the metric. Each aggregation is a callable that computes a list of DataFrames from a dictionary of metric dataframes (index by the DataFrame index). See BaseEvaluator.ScalarAggregator for an example. :return: list of aggregation callables """ return []
[docs] def layer_op(self, subject_id, data): """ Perform one evaluation calculation for one subject :param subject_id: subject identifier string :param data: a data dictionary as built by ImageReader :return: a list of pandas.DataFrame objects """ raise NotImplementedError('not implemented in abstract base class')
[docs]class CachedSubanalysisEvaluation(BaseEvaluation): """ Interface for NiftyNet evaluations used with CachedSubanalysisEvaluator so that evaluations are run in a way that is friendly for caching intermediate computations. Each evaluation defines sub-analyses to run, and all subanalysis are run at the same time then the cache is cleared """
[docs] def subanalyses(self, subject_id, data): """ This function defines the sub-analyses to run. All evaluations with matching sub-analyses will be run in sequence, before clearing the cache :param subject_id: subject identifier string :param data: a data dictionary as built by ImageReader :return: list of dictionaries, each containing information specifyng the analysis to run. Elements will be passed to layer_op one at a time in a cache friendly order """ raise NotImplementedError('not implemented in abstract class')
[docs] def layer_op(self, subject_id, data, subanalysis): """ Performs one sub-analysis :param subject_id: subject identifier string :param data: a data dictionary as built by ImageReader :param subanalysis: dictionary containing information specifying the analysis to run :return: a list of pandas.DataFrame objects """ raise NotImplementedError('not implemented in abstract class')