3
d!                 @   sf   d Z ddlZddlZddlZddlmZmZmZm	Z	m
Z
mZmZ G dd deeZG dd deZdS )	z/Experimental Slicer wrapper - Work in progress.    N   )CommandLineCommandLineInputSpecDynamicTraitedSpectraits	UndefinedFile	isdefinedc               @   s   e Zd ZejddZdS )SlicerCommandLineInputSpecz6name of the Slicer command line module you want to use)descN)__name__
__module____qualname__r   Strmodule r   r   B/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/dynamic_slicer.pyr
      s   r
   c                   sd   e Zd ZdZdZeZeZdd Z	 fddZ
 fddZd	d
 Zdd Zdd Z fddZ  ZS )SlicerCommandLinez.Experimental Slicer wrapper. Work in progress.Slicer3c             C   sR   t ddd| d}|j }|jjdkr8tjjj|jjS t	|j
d|jj  d S )Nr   Fz--launch %s --xml)commandZresource_monitorargsr   z failed:
%s)r   runZruntime
returncodexmldomminidomparseStringstdout	ExceptionZcmdlinestderr)selfr   cmdretr   r   r   	_grab_xml   s    zSlicerCommandLine._grab_xmlc                s^   t t| j }i }x2dd | jD D ]}|j|tdd t||< q$W |jf ddi| |S )Nc             S   s   g | ]}|j d d jjqS )namer   )getElementsByTagName
firstChild	nodeValue).0noder   r   r   
<listcomp>-   s   z.SlicerCommandLine._outputs.<locals>.<listcomp>T)existstrait_change_notifyF)superr   _outputs_outputs_nodes	add_traitr   r   	trait_set)r    baseZundefined_output_traitskey)	__class__r   r   r.   )   s    zSlicerCommandLine._outputsc                s  t jdt tt| jf d| |d| | j|}i | _g | _i }xN|j	dD ]>}x6|j
D ]*}|jd*krvqdi }|j	d	d
 jj}|j	d}	|	rd|	d
 jj d |d< nd| d |d< dddddddddd	}
|jjdr
|d  |
|jd d+  7  < n|d  |
|j 7  < |j	d}|r@|d
 jj|d< |j	d}|r`|d
 jj|d< |j	d	d
 jj}tjtjtjtttjtjtd}|jdkrtj}dd |j	dD }n@|jjdrtj}||jd d,  g}d|d< ng }||j }|jd-kr`|j	d$d
 jjd%kr`| jj|tjtjtf| t||< | j|| j|< | jj| qd|jd.krtd&|d'< | jj|||| t||< qdW qTW | jjf d(d)i| x"t|j D ]}t | j|}qW d S )/Nzslicer is Not fully implementedzSlicer3 --launch %s )r   r$   
parameterslabeldescription#text#commentr$   r   Zlongflagz-- argstrz%sz%dz%f )	fileintegerdoublefloatimage	transformbooleanzstring-enumerationstringz-vector   indexpositionr   )r>   r?   r@   rA   rB   rC   rD   r=   zstring-enumerationc             S   s   g | ]}|j jqS r   )r&   r'   )r(   elr   r   r   r*   {   s   z.SlicerCommandLine.__init__.<locals>.<listcomp>element,sepr=   	directoryrA   rB   ZchanneloutputTr+   r,   F)r6   r7   r8   r9   ii)r=   rL   rA   rB   )r=   rL   rA   rB   )!warningswarnRuntimeWarningr-   r   __init__r#   _outputs_filenamesr/   r%   
childNodesnodeNamer&   r'   endswithr   ZIntZFloatr   ZBoolr   EnumListinputsr0   ZEitherr   _gen_filename_from_paramappendr1   listkeysgetattr)r    r   rX   r   Zundefined_traitsZ
paramGroupparamZtraitsParamsr$   ZlongFlagNodeZargsDictrF   r   Z	typesDicttypevalues_)r4   r   r   rQ   6   s    


 



zSlicerCommandLine.__init__c             C   s&   || j kr"tjjtj | j | S d S )N)rR   ospathjoingetcwd)r    r$   r   r   r   _gen_filename   s    
zSlicerCommandLine._gen_filenamec             C   s@   |j dd jj}|jd}|r&|}ndddd|j }|| S )Nr$   r   fileExtensionsz.niiz.txtr<   )rA   rB   r=   )r%   r&   r'   getAttributerT   )r    r^   r2   rg   extr   r   r   rY      s    
z*SlicerCommandLine._gen_filename_from_paramc             C   s|   | j  j }xj| jD ]`}|jdd jj}t| j|||< t|| rt	|| t
r|| rl| j|||< qt||< qW |S )Nr$   r   )output_specgetr/   r%   r&   r'   r]   rX   r	   
isinstanceboolrf   r   )r    outputsoutput_noder$   r   r   r   _list_outputs   s    zSlicerCommandLine._list_outputsc                sL   |dd | j D kr8t|tr*| j|}n|}|j| S tt| j|||S )Nc             S   s   g | ]}|j d d jjqS )r$   r   )r%   r&   r'   )r(   ro   r   r   r   r*      s   z1SlicerCommandLine._format_arg.<locals>.<listcomp>)r/   rl   rm   rf   r;   r-   r   _format_arg)r    r$   specvaluefname)r4   r   r   rq      s    

zSlicerCommandLine._format_arg)r   r   r   __doc__Z_cmdr
   Z
input_specr   rj   r#   r.   rQ   rf   rY   rp   rq   __classcell__r   r   )r4   r   r      s   
j	r   )ru   rb   rN   Zxml.dom.minidomr   r2   r   r   r   r   r   r   r	   r
   r   r   r   r   r   <module>   s   $