3
d                 @   s   d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ ejd	ZdddZG dd deZG dd deZG dd deZdS )an  
The niftyreg module provides classes for interfacing with `niftyreg
<http://sourceforge.net/projects/niftyreg/>`_ command line tools.

These are the base tools for working with niftyreg.

Registration tools are found in niftyreg/reg.py
Every other tool is found in niftyreg/regutils.py

Examples
--------
See the docstrings of the individual classes for examples.

    )StrictVersionN   )logging   )CommandLineCommandLineInputSpectraits	UndefinedPackageInfo)split_filenameznipype.interfaceNIFTYREGDIRc             C   s   t jjt j|d| S )N )ospathjoingetenv)commandZenv_dir r   A/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/niftyreg/base.pyget_custom_path   s    r   c               @   s$   e Zd Zedd Zedd ZdS )InfoZ
reg_aladinz
 --versionc             C   s   | S )Nr   )Zraw_infor   r   r   parse_version#   s    zInfo.parse_versionN)__name__
__module____qualname__r   Zversion_cmdstaticmethodr   r   r   r   r   r       s   r   c               @   s0   e Zd ZdZejeejj	ddddddZ
dS )	NiftyRegCommandInputSpecz#Input Spec for niftyreg interfaces.OMP_NUM_THREADS1zNumber of openmp thread to usez-omp %iT)descZargstrZ
usedefaultN)r   r   r   __doc__r   ZIntintr   environgetomp_core_valr   r   r   r   r   (   s   r   c                   sp   e Zd ZdZdZdZeZd fdd	Zdd Z	d	d
 Z
dd Zedd Zdd Z fddZdddZ  ZS )NiftyRegCommandz7
    Base support interface for NiftyReg commands.
    Z_nrz1.5.30Nc                s   d| _ tt| jf | || _| j}|r| jd k	rXt|t| jk rXd}tj	||| j |d k	rt|t|krd}|d7 }tj	||| j | j
j| jd | j
j| jd | j  d S )N   z1A later version of Niftyreg is required (%s < %s)z1The version of NiftyReg differs from the requiredz
(%s != %s)r$   r"   )num_threadssuperr%   __init__required_versionversion_min_versionr   ifloggerwarninginputsZon_trait_change_omp_update_environ_update)selfr*   r/   _versionmsg)	__class__r   r   r)   >   s$    zNiftyRegCommand.__init__c             C   sH   | j jr(t| j j| j jd< | j j| _nd| j jkr>| j jd= d| _d S )Nr   r&   )r/   r$   strr"   r'   )r2   r   r   r   r0   R   s    
zNiftyRegCommand._omp_updatec             C   s@   | j jr4d| j jkr*t| j jd | j _q<t| j _nt| j _d S )Nr   )r/   r"   r!   r$   r	   )r2   r   r   r   r1   [   s
    
zNiftyRegCommand._environ_updatec             C   st   | j }|stdt|t| jk r:d}t||| jf | jrpt|t| jkrpd}|d7 }t||| jf d S )NzNiftyreg not foundz1A later version of Niftyreg is required (%s < %s)z1The version of NiftyReg differs from the requiredz
(%s != %s))r+   	Exceptionr   r,   
ValueErrorr*   )r2   r3   errr   r   r   check_versiond   s    zNiftyRegCommand.check_versionc             C   s   t j S )N)r   r+   )r2   r   r   r   r+   q   s    zNiftyRegCommand.versionc             C   s
   | j d k	S )N)r+   )r2   r   r   r   existsu   s    zNiftyRegCommand.existsc                s"   |dkr|| _ tt| j|||S )Nr$   )Z
numthreadsr(   r%   _format_arg)r2   namespecvalue)r5   r   r   r<   x   s    zNiftyRegCommand._format_argc       	      C   s|   |dkr"d| j  }|d7 }t|t|\}}}|d kr@tj }|d k	rL|}|d k	rbdj||f}tjjtjj||| S )Nr   z,Unable to generate filename for command %s. zbasename is not set!)cmdr8   r   r   getcwdr   r   abspath)	r2   basenameZout_dirsuffixextr4   _Zfinal_bnZ	final_extr   r   r   
_gen_fname}   s    
zNiftyRegCommand._gen_fname)N)NNN)r   r   r   r    _suffixr,   r   Z
input_specr)   r0   r1   r:   propertyr+   r;   r<   rG   __classcell__r   r   )r5   r   r%   4   s   		r%   )r   )r    distutils.versionr   r   r   r   baser   r   r   r	   r
   Zutils.filemanipr   	getLoggerr-   r   r   r   r%   r   r   r   r   <module>   s   

