3
d                 @   sx   d dl Z d dlZd dlZddlmZmZ ddlmZm	Z	m
Z
mZmZ G dd de
ZG dd	 d	eZG d
d deZdS )    N   )NipyBaseInterface	have_nipy   )TraitedSpectraitsBaseInterfaceInputSpecFile	isdefinedc               @   sf   e Zd ZeddddZeddddZedddZedddZej	ej
ddddd	d
ej dddZdS )SimilarityInputSpecTz	3D volume)existsdesc	mandatory)r   r   cccrZcrl1miZnmiZslra  str or callable
Cost-function for assessing image similarity. If a string,
one of 'cc': correlation coefficient, 'cr': correlation
ratio, 'crl1': L1-norm based correlation ratio, 'mi': mutual
information, 'nmi': normalized mutual information, 'slr':
supervised log-likelihood ratio. If a callable, it should
take a two-dimensional array representing the image joint
histogram as an input and return a float.)r   Z
usedefaultN)__name__
__module____qualname__r	   volume1volume2mask1mask2r   ZEitherEnumCallablemetric r   r   >/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/nipy/utils.pyr      s   r   c               @   s   e Zd ZejddZdS )SimilarityOutputSpecz!Similarity between volume 1 and 2)r   N)r   r   r   r   ZFloat
similarityr   r   r   r   r      s   r   c                   s8   e Zd ZdZeZeZ fddZdd Z	dd Z
  ZS )
Similaritya  Calculates similarity between two 3D volumes. Both volumes have to be in
    the same coordinate system, same space within that coordinate system and
    with the same voxel dimensions.

    .. deprecated:: 0.10.0
       Use :py:class:`nipype.algorithms.metrics.Similarity` instead.

    Example
    -------
    >>> from nipype.interfaces.nipy.utils import Similarity
    >>> similarity = Similarity()
    >>> similarity.inputs.volume1 = 'rc1s1.nii'
    >>> similarity.inputs.volume2 = 'rc1s2.nii'
    >>> similarity.inputs.mask1 = 'mask.nii'
    >>> similarity.inputs.mask2 = 'mask.nii'
    >>> similarity.inputs.metric = 'cr'
    >>> res = similarity.run() # doctest: +SKIP
    c                s"   t jdt tt| jf | d S )NzZThis interface is deprecated since 0.10.0. Please use nipype.algorithms.metrics.Similarity)warningswarnDeprecationWarningsuperr    __init__)selfinputs)	__class__r   r   r%   :   s    zSimilarity.__init__c       	      C   s   ddl m} ddlm} tj| jj}tj| jj}t	| jj
r\tjtj| jj
jdk}nd }t	| jjrtjtj| jjjdk}nd }|||| jj||d}|j| | _|S )Nr   )HistogramRegistration)Affiner   )Zfrom_imgZto_imgr   Z	from_maskZto_mask)Z3nipy.algorithms.registration.histogram_registrationr)   Z#nipy.algorithms.registration.affiner*   nbloadr'   r   r   r
   r   npZ
asanyarrayZdataobjr   r   eval_similarity)	r&   Zruntimer)   r*   Zvol1_niiZvol2_niir   r   Zhistregr   r   r   _run_interfaceD   s$    zSimilarity._run_interfacec             C   s   | j  j }| j|d< |S )Nr   )Z_outputsgetr/   )r&   outputsr   r   r   _list_outputsb   s    
zSimilarity._list_outputs)r   r   r   __doc__r   Z
input_specr   Zoutput_specr%   r0   r3   __classcell__r   r   )r(   r   r    #   s   
r    )r!   numpyr-   Znibabelr+   baser   r   r   r   r   r	   r
   r   r   r    r   r   r   r   <module>   s   