3
d                 @   sx   d Z ddljZddlmZ ddlmZmZm	Z	m
Z
mZmZ ejdZG dd	 d	eZG d
d de
ZG dd deZdS )zt
Generic interfaces to manipulate registration parameters files, including
transform files (to configure warpings)

    N   )logging   )BaseInterfaceBaseInterfaceInputSpec	isdefinedTraitedSpecFiletraitsznipype.interfacec               @   sz   e Zd ZeddddZedddZejddddd	d
dZejdddddddddd	Z	ejddddddddZ
eddZdS ) EditTransformInputSpecTz transform-parameter file, only 1)exists	mandatorydesczAset a new reference image to change the target coordinate system.)r   r   cubiclinearnearestFinalBSplineInterpolationOrderz)set a new interpolator for transformation)Z
usedefaultargstrr   floatzunsigned charzunsigned shortshortzunsigned longlongdoubleResultImagePixelTypez0set a new output pixel type for resampled images)r   r   znii.gzZniiZmhdhdrZvtkResultImageFormatz+set a new image format for resampled imagesz-the filename for the resulting transform file)r   N)__name__
__module____qualname__r	   transform_filereference_imager
   Enuminterpolationoutput_typeoutput_formatoutput_file r%   r%   A/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/elastix/utils.pyr      s>   r   c               @   s   e Zd ZedddZdS )EditTransformOutputSpecTzoutput transform file)r   r   N)r   r   r   r	   r$   r%   r%   r%   r&   r'   A   s   r'   c               @   sD   e Zd ZdZeZeZdZdZ	ddddZ
dd	 Zd
d Zdd ZdS )EditTransforma  
    Manipulates an existing transform file generated with elastix

    Example
    -------

    >>> from nipype.interfaces.elastix import EditTransform
    >>> tfm = EditTransform()
    >>> tfm.inputs.transform_file = 'TransformParameters.0.txt'  # doctest: +SKIP
    >>> tfm.inputs.reference_image = 'fixed1.nii'  # doctest: +SKIP
    >>> tfm.inputs.output_type = 'unsigned char'
    >>> tfm.run() # doctest: +SKIP

     z%\((?P<entry>%s\s"?)([-\.\s\w]+)("?\))r      r   )r   r   r   c             C   s  dd l }dd l}dd l}d}t| jjd}|j }W d Q R X t| jjrx|j	| j
d jd}d| jj }|j||}t| jjr|j	| j
d jd}d| jj }|j||}t| jjr|j	| j
d jd}d| j| jj  }|j||}t| jjr|j| jj}	t|	jj d	kr2|jj|	d }	d
jdd |	jD }
|j	| j
d jd}d|
 }|j||}d
jdd |	jD }|j	| j
d jd}d| }|j||}d
jdd |	jj D }|j	| j
d jd}d| }|j||}|jd	}d|d< d|d< |j||	j}d
jdd |ddddf jdD }d
jdd |dddf jdD }|j	| j
d jd}d| }|j||}t| j d}|j| W d Q R X |S )Nr   r)   rr   zstring-escapez(\g<entry>%s\g<3>r   r       c             S   s   g | ]}d | qS )z%01dr%   ).0sr%   r%   r&   
<listcomp>   s    z0EditTransform._run_interface.<locals>.<listcomp>Sizec             S   s   g | ]}d qS )0r%   )r.   r/   r%   r%   r&   r0      s    Indexc             S   s   g | ]}d | qS )z%0.4fr%   )r.   fr%   r%   r&   r0      s    ZSpacingr*   c             S   s   g | ]}d | qS )z%0.4fr%   )r.   r4   r%   r%   r&   r0      s    r   c             S   s   g | ]}d | qS )z%0.4fr%   )r.   r4   r%   r%   r&   r0      s    ZOriginw)r   r   r6   )r*   r*   r6   r6   )reZnibabelnumpyopeninputsr   readr   r"   compile_patterndecodesubr#   r!   _interpr   loadlenheaderZ	get_zoomsfuncZfour_to_threejoinshapeZeyedotaffineZreshape_get_outfilewrite)selfZruntimer7   nbnpcontentsr4   prepZimsizeindexspacingZitkmatrH   dirsorigZofr%   r%   r&   _run_interface\   sd    

*&zEditTransform._run_interfacec             C   s   | j  j }t| d|d< |S )N	_out_filer$   )output_specgetgetattr)rK   outputsr%   r%   r&   _list_outputs   s    zEditTransform._list_outputsc             C   sf   t | d}|d k	r|dkr|S t| jjrBt| d| jj | jjS tjtj| jj}t| d| |S )NrW   r)   )	rZ   r   r:   r$   setattropabspathbasenamer   )rK   valout_filer%   r%   r&   rI      s    
zEditTransform._get_outfileN)r   r   r   __doc__r   Z
input_specr'   rX   rW   r=   r@   rV   r\   rI   r%   r%   r%   r&   r(   E   s   Kr(   )rc   os.pathpathr^   r)   r   baser   r   r   r   r	   r
   	getLoggerZifloggerr   r'   r(   r%   r%   r%   r&   <module>	   s   
 	
(