3
d-                 @   s  d Z ddlmZmZmZmZmZ ddlmZ ddlm	Z	m
Z
 ddlZd	ZG d
d deZG dd deZG dd de	ZG dd deZG dd deZG dd de	ZG dd deZG dd deZG dd de	ZG dd deZG dd deZG d d! d!e	ZG d"d# d#eZG d$d% d%eZG d&d' d'e	ZG d(d) d)eZG d*d+ d+eZG d,d- d-e	ZG d.d/ d/e
eZG d0d1 d1e
eZ G d2d3 d3e
eZ!G d4d5 d5e
eZ"G d6d7 d7e
eZ#G d8d9 d9e
eZ$G d:d; d;e
eZ%dS )<aa  DTITK utility interfaces

DTI-TK developed by Gary Hui Zhang, gary.zhang@ucl.ac.uk
For additional help, visit http://dti-tk.sf.net

The high-dimensional tensor-based DTI registration algorithm

Zhang, H., Avants, B.B, Yushkevich, P.A., Woo, J.H., Wang, S., McCluskey, L.H.,
Elman, L.B., Melhem, E.R., Gee, J.C., High-dimensional spatial normalization of
diffusion tensor images improves the detection of white matter differences in
amyotrophic lateral sclerosis, IEEE Transactions on Medical Imaging,
26(11):1585-1597, November 2007. PMID: 18041273.

The original piecewise-affine tensor-based DTI registration algorithm at the
core of DTI-TK

Zhang, H., Yushkevich, P.A., Alexander, D.C., Gee, J.C., Deformable
registration of diffusion tensor MR images with explicit orientation
optimization, Medical Image Analysis, 10(5):764-785, October 2006. PMID:
16899392.

   )TraitedSpecCommandLineInputSpecFiletraits	isdefined   )fname_presuffix   )CommandLineDtitkDTITKRenameMixin    NZrestructuredtextc               @   s   e Zd ZedddddZedddddd	Zed
dddgdZejej	 ej	 ej	 fdddgdZ
ejej	 ej	 ej	 fdddgdZdS )TVAdjustVoxSpInputSpecztensor volume to modifyTz-in %s)descexists	mandatoryargstrzoutput pathz-out %sin_filez%s_avs)r   r   name_sourcename_templatekeep_extensionztarget volume to matchz
-target %s
voxel_sizeorigin)r   r   xorz%xyz voxel size (superseded by target)z-vsize %g %g %gtarget_filez!xyz origin (superseded by target)z-origin %g %g %gN)__name__
__module____qualname__r   r   out_filer   r   TupleFloatr   r    r    r    ?/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/dtitk/utils.pyr   #   s(   
r   c               @   s   e Zd ZeddZdS )TVAdjustVoxSpOutputSpecT)r   N)r   r   r   r   r   r    r    r    r!   r"   ?   s   r"   c               @   s   e Zd ZdZeZeZdZdS )TVAdjustVoxSpat  
     Adjusts the voxel space of a tensor volume.

    Example
    -------
    >>> from nipype.interfaces import dtitk
    >>> node = dtitk.TVAdjustVoxSp()
    >>> node.inputs.in_file = 'im1.nii'
    >>> node.inputs.target_file = 'im2.nii'
    >>> node.cmdline
    'TVAdjustVoxelspace -in im1.nii -out im1_avs.nii -target im2.nii'
    >>> node.run() # doctest: +SKIP

    ZTVAdjustVoxelspaceN)	r   r   r   __doc__r   
input_specr"   output_spec_cmdr    r    r    r!   r#   C   s   r#   c               @   s   e Zd ZedddddZedddddd	Zed
dddgdZejej	 ej	 ej	 fdddgdZ
ejej	 ej	 ej	 fdddgdZdS )SVAdjustVoxSpInputSpeczscalar volume to modifyTz-in %s)r   r   r   r   zoutput pathz-out %sr   z%s_avs)r   r   r   r   r   ztarget volume to matchz
-target %sr   r   )r   r   r   z%xyz voxel size (superseded by target)z-vsize %g %g %gr   z!xyz origin (superseded by target)z-origin %g %g %gN)r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r(   X   s(   
r(   c               @   s   e Zd ZeddZdS )SVAdjustVoxSpOutputSpecT)r   N)r   r   r   r   r   r    r    r    r!   r)   t   s   r)   c               @   s   e Zd ZdZeZeZdZdS )SVAdjustVoxSpas  
    Adjusts the voxel space of a scalar volume.

    Example
    -------
    >>> from nipype.interfaces import dtitk
    >>> node = dtitk.SVAdjustVoxSp()
    >>> node.inputs.in_file = 'im1.nii'
    >>> node.inputs.target_file = 'im2.nii'
    >>> node.cmdline
    'SVAdjustVoxelspace -in im1.nii -out im1_avs.nii -target im2.nii'
    >>> node.run() # doctest: +SKIP

    ZSVAdjustVoxelspaceN)	r   r   r   r$   r(   r%   r)   r&   r'   r    r    r    r!   r*   x   s   r*   c               @   s   e Zd ZedddddZedddddd	Zed
ddddgdZejdddddZ	ejdddddZ
ejej ej ej fddgddZejej ej ej fddgddZejej ej ej fddgddZd S )!TVResampleInputSpecztensor volume to resampleTz-in %s)r   r   r   r   zoutput pathr   z%s_resampledz-out %s)r   r   r   r   r   z!specs read from the target volumez
-target %s
array_sizer   r   )r   r   r   centerz	-align %sz*how to align output volume to input volume)r   r   ZLEIZEIz
-interp %sz%Log Euclidean Euclidean Interpolationzresampled array sizer   z-size %d %d %d)r   r   r   zresampled voxel sizez-vsize %g %g %gz
xyz originz-origin %g %g %gN)r   r   r   r   r   r   r   r   Enumaligninterpolationr   Intr,   r   r   r   r    r    r    r!   r+      sD   r+   c               @   s   e Zd ZeddZdS )TVResampleOutputSpecT)r   N)r   r   r   r   r   r    r    r    r!   r2      s   r2   c               @   s   e Zd ZdZeZeZd ZdS )
TVResamplea]  
    Resamples a tensor volume.

    Example
    -------
    >>> from nipype.interfaces import dtitk
    >>> node = dtitk.TVResample()
    >>> node.inputs.in_file = 'im1.nii'
    >>> node.inputs.target_file = 'im2.nii'
    >>> node.cmdline
    'TVResample -in im1.nii -out im1_resampled.nii -target im2.nii'
    >>> node.run() # doctest: +SKIP

    N)	r   r   r   r$   r+   r%   r2   r&   r'   r    r    r    r!   r3      s   r3   c               @   s   e Zd ZedddddZedddddd	Zed
ddddgdZejdddddZ	ej
ej ej ej fddgddZej
ej ej ej fddgddZej
ej ej ej fddgddZdS )SVResampleInputSpeczimage to resampleTz-in %s)r   r   r   r   zoutput pathr   z%s_resampledz-out %s)r   r   r   r   r   z!specs read from the target volumez
-target %sr,   r   r   )r   r   r   r-   z	-align %sz*how to align output volume to input volume)r   r   zresampled array sizer   z-size %d %d %d)r   r   r   zresampled voxel sizez-vsize %g %g %gz
xyz originz-origin %g %g %gN)r   r   r   r   r   r   r   r   r.   r/   r   r1   r,   r   r   r   r    r    r    r!   r4      s@   r4   c               @   s   e Zd ZeddZdS )SVResampleOutputSpecT)r   N)r   r   r   r   r   r    r    r    r!   r5      s   r5   c               @   s   e Zd ZdZeZeZd ZdS )
SVResamplea]  
    Resamples a scalar volume.

    Example
    -------
    >>> from nipype.interfaces import dtitk
    >>> node = dtitk.SVResample()
    >>> node.inputs.in_file = 'im1.nii'
    >>> node.inputs.target_file = 'im2.nii'
    >>> node.cmdline
    'SVResample -in im1.nii -out im1_resampled.nii -target im2.nii'
    >>> node.run() # doctest: +SKIP

    N)	r   r   r   r$   r4   r%   r5   r&   r'   r    r    r    r!   r6     s   r6   c            
   @   sB   e Zd ZedddddZejddddd	d
dddZedddZdS )TVtoolInputSpeczscalar volume to resampleTz-in %s)r   r   r   r   fatradrdpdZrgbz-%s )r   r   z-out %s)r   ZgenfileN)	r   r   r   r   r   r   r.   in_flagr   r    r    r    r!   r7     s   r7   c               @   s   e Zd Ze ZdS )TVtoolOutputSpecN)r   r   r   r   r   r    r    r    r!   r?     s   r?   c               @   s,   e Zd ZdZeZeZd Zdd Z	dd Z
dS )TVtoolaV  
    Calculates a tensor metric volume from a tensor volume.

    Example
    -------
    >>> from nipype.interfaces import dtitk
    >>> node = dtitk.TVtool()
    >>> node.inputs.in_file = 'im1.nii'
    >>> node.inputs.in_flag = 'fa'
    >>> node.cmdline
    'TVtool -in im1.nii -fa -out im1_fa.nii'
    >>> node.run() # doctest: +SKIP

    c             C   s:   | j  j }| jj}t|s&| jd}tjj||d< |S )Nr   )	Z_outputsgetinputsr   r   _gen_filenameospathabspath)selfoutputsr   r    r    r!   _list_outputs7  s    
zTVtool._list_outputsc             C   s,   |dkrd S t tjj| jjd| jj dS )Nr   _)suffix)r   rD   rE   basenamerB   r   r>   )rG   namer    r    r!   rC   ?  s    zTVtool._gen_filenameN)r   r   r   r$   r7   r%   r?   r&   r'   rI   rC   r    r    r    r!   r@   #  s   r@   c               @   s   e Zd ZeddddddZedddddd	d
ZejdddddddZejdddddddZ	ejdddddddZ
ejdddddddZdS )BinThreshInputSpeczImage to threshold/binarizeTr   z%s)r   r   positionr   r   zoutput pathr	   r   z	%s_thrbin)r   rO   r   r   r   r   g{Gz?r   z%gz!lower bound of binarization range)
usedefaultrO   r   r   r   d   r   z!upper bound of binarization range   z&value for voxels in binarization range)rO   r   rP   r   r      z-value for voxelsoutside of binarization rangeN)r   r   r   r   r   r   r   r   Zlower_boundZupper_boundZinside_valueZoutside_valuer    r    r    r!   rN   J  sR   rN   c               @   s   e Zd ZeddZdS )BinThreshOutputSpecT)r   N)r   r   r   r   r   r    r    r    r!   rT   |  s   rT   c               @   s   e Zd ZdZeZeZdZdS )	BinThresha  
    Binarizes an image.

    Example
    -------
    >>> from nipype.interfaces import dtitk
    >>> node = dtitk.BinThresh()
    >>> node.inputs.in_file = 'im1.nii'
    >>> node.inputs.lower_bound = 0
    >>> node.inputs.upper_bound = 100
    >>> node.inputs.inside_value = 1
    >>> node.inputs.outside_value = 0
    >>> node.cmdline
    'BinaryThresholdImageFilter im1.nii im1_thrbin.nii 0 100 1 0'
    >>> node.run() # doctest: +SKIP

    ZBinaryThresholdImageFilterN)	r   r   r   r$   rN   r%   rT   r&   r'   r    r    r    r!   rU     s   rU   c               @   s   e Zd ZdS )BinThreshTaskN)r   r   r   r    r    r    r!   rV     s   rV   c               @   s   e Zd ZdS )SVAdjustVoxSpTaskN)r   r   r   r    r    r    r!   rW     s   rW   c               @   s   e Zd ZdS )SVResampleTaskN)r   r   r   r    r    r    r!   rX     s   rX   c               @   s   e Zd ZdS )TVAdjustOriginTaskN)r   r   r   r    r    r    r!   rY     s   rY   c               @   s   e Zd ZdS )TVAdjustVoxSpTaskN)r   r   r   r    r    r    r!   rZ     s   rZ   c               @   s   e Zd ZdS )TVResampleTaskN)r   r   r   r    r    r    r!   r[     s   r[   c               @   s   e Zd ZdS )
TVtoolTaskN)r   r   r   r    r    r    r!   r\     s   r\   )&r$   baser   r   r   r   r   Zutils.filemanipr   r
   r   rD   Z__docformat__r   r"   r#   r(   r)   r*   r+   r2   r3   r4   r5   r6   r7   r?   r@   rN   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r    r    r    r!   <module>   s<   -*	'2