3
d                 @   sz   d dl mZm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 )   )loggingLooseVersion)which   )CommandLineInputSpecCommandLinetraitsFile	isdefinedPackageInfoznipype.interfacec               @   s(   e Zd ZdZedd Zedd ZdS )Infozmrconvert --versionc             C   sT   x,| j  D ]}|jdr
|j d }P q
W d S |jdd }dj|jdd d S )Nz== mrconvert r   -    .r   )
splitlines
startswithsplitjoin)Zraw_infolineZv_string r   @/tmp/pip-build-7vycvbft/nipype/nipype/interfaces/mrtrix3/base.pyparse_version   s    
zInfo.parse_versionc             C   s   t | j pdS )zcReturn a comparable version object

        If no version found, use LooseVersion('0.0.0')
        z0.0.0)r   version)clsr   r   r   looseversion%   s    zInfo.looseversionN)__name__
__module____qualname__Zversion_cmdstaticmethodr   classmethodr   r   r   r   r   r      s   r   c               @   s   e Zd ZejddddZeddddgdZejedd	edd	d
ddgdZ	ej
dddddZedd
ddZedddZeddddZedddZdS )MRTrix3BaseInputSpecz-nthreads %dzEnumber of threads. if zero, the number of available cpus will be usedT)argstrdescZnohashz-grad %sz"dw gradient scheme (MRTrix format)grad_fsl)existsr!   r"   xor)r$   z-fslgrad %s %sz.(bvecs, bvals) dw gradient scheme (FSL format)	grad_file)r!   r"   r%   yesnoz-bvalue_scaling %saD  specifies whether the b - values should be scaled by the square of the corresponding DW gradient norm, as often required for multishell or DSI DW acquisition schemes. The default action can also be set in the MRtrix config file, under the BValueScaling entry. Valid choices are yes / no, true / false, 0 / 1 (default: true).)r!   r"   zbvecs file in FSL format)r$   r!   r"   zbvals file in FSL format)r$   r"   Fz-export_grad_fsl %s %szexport bvec file in FSL formatzexport bval file in FSL formatN)r   r   r   r   ZIntnthreadsr	   r&   Tupler#   EnumZ
bval_scalein_bvecin_bvalout_bvecout_bvalr   r   r   r   r    .   s<   

r    c                   s6   e Zd Z fddZd fdd	Zedd Z  ZS )	MRTrix3Basec          
      s   |dkrL|dkrLd}yddl m} | }W n   tjd Y nX |j| S |dkrf|j|| jjf S |dkr|j|| jjf S tt	| j
|||S )Nr)   r      )	cpu_countz'Number of threads could not be computedr,   r.   )multiprocessingr2   ifloggerwarningr!   inputsr-   r/   superr0   _format_arg)selfnameZ
trait_specvaluer2   )	__class__r   r   r8   ^   s    


zMRTrix3Base._format_argNc                s   |d krg }yft | jjs&t | jjr2|ddg7 }t | jj}t | jj}|sR|rp| s^| rftd|dg7 }W n tk
r   Y nX tt	| j
|dS )Nr,   r-   z6If using bvecs and bvals inputs, bothshould be defined)skip)r
   r6   r&   r#   r,   r-   RuntimeErrorAttributeErrorr7   r0   _parse_inputs)r9   r=   Zis_bvecZis_bval)r<   r   r   r@   q   s    zMRTrix3Base._parse_inputsc             C   s   t j S )N)r   r   )r9   r   r   r   r      s    zMRTrix3Base.version)N)r   r   r   r8   r@   propertyr   __classcell__r   r   )r<   r   r0   ]   s   r0   N) r   r   Zutils.filemanipr   baser   r   r   r	   r
   r   	getLoggerr4   r   r    r0   r   r   r   r   <module>   s    	
/