3
XdX              
   @   s
  d dl Z d dlmZ d dlZd dlZd dlmZmZ ddlm	Z
 d dlmZ d dlmZmZmZmZ d dlmZ d	d
 Zej dd Zejje dddd Zejje dddd Zejje dddd Zej dd Zejje dddd Zejje dddd Zejje dddd Zejje dddd Zejje dddd  Z ejje ddd!d" Z!ej d#d$ Z"ejje ddejj#d%d&d'd'd(d)d*fd&d'd+d'd(d,d-fd'd'd'd(d.d/fgd0d1 Z$ejje ddd2d3 Z%dS )4    N)deepcopy)split_filenameensure_list   )
preprocess)Info)File
TraitError	Undefined	isdefined)no_fslc             C   s   t j| jj}|| S )z@Create valid fsl name, including file extension for output type.)r   output_type_to_extinputsoutput_type)objfnameext r   ]/var/www/html/virt/lib/python3.6/site-packages/nipype/interfaces/fsl/tests/test_preprocess.pyfsl_name   s    r   c             C   s2   t jt j }| jd| }|jd |j| jfS )Nfoow)r   r   r   joinopenstrpath)tmpdirr   
tmp_infiler   r   r   setup_infile   s    
r   zfsl is not installed)reasonc       	         sl  | \}}t jj|t j d}tj   jdks2ttj	t
  j  W d Q R X | j_t d}d||f } j|ks|tt d}| j_d||f } j|kst fdd}tj	t |  W d Q R X ddd d!d"d#d$ddddgfd%d&d'd}tj  t d}x^t|j D ]N\}}tjf ||d i | j_dj j|||d g} j|kstqW d S )(N)startZbetZ	foo_brainz	bet %s %sz/newdata/barc                  s    j ddd d S )Nzfoo2.niizbar.nii)in_fileout_file)runr   )betterr   r   func7   s    ztest_bet.<locals>.func-oT-m-s-n-f 0.40皙?-g 0.75      ?-r 20   z-c 54 75 806   K   P   -t-e-A)outlinemaskZskullZ	no_outputfracZvertical_gradientZradiuscenter	thresholdZmeshZsurfaces    r   )r%   T)r&   T)r'   T)r(   T)r)   r*   )r+   r,   )r-   r.   )r2   T)r3   T)r4   T)ospathrelpathgetcwdfslZBETcmdAssertionErrorpytestraises
ValueErrorr"   r   r    r   cmdliner!   r	   listitemsr   )	r   r   tp_diroutfilerealcmdr$   opt_mapnamesettingsr   )r#   r   test_bet   sF    


rO   c       	      C   s  | \}}t j }d|j_t j|dd}t j||gdd}|jdksFt|jjsRt|jjtksbt|j|jksrt|jd| kst|jd||f kstt j }||j_	|jd| kst||g|j_	|jd||f kstd.d/d0d1d2d3d| d| fd|||f d| d| d| gfd4d5d6d7d8d9d:d;d<d=d>d&| d| fd?d(}x\t
|j D ]L\}}t jf d)|i||d* i}|jd+j|j|d, d-| gksTtqTW d S )@NT)in_filesverbosefastzfast -v -S 1 %szfast -v -S 2 %s %szfast -S 1 %szfast -S 2 %s %s-n 4   -I 5   -l 15   -t 2r   -f 0.035Q?-gz-a %sz%sz-A %s %s %s--nopve-b-B-N	-o fastedfasted-P-W 14   -R 0.25      ?-O 3   -H 0.15333333?-vz-s %s-p)Znumber_classesZ
bias_itersZbias_lowpassZimg_typeZinit_seg_smoothsegmentsZinit_transformZother_priorsZno_pveZoutput_biasfieldZoutput_biascorrectedZno_biasout_basenameZ
use_priorsZsegment_itersZmixel_smoothZiters_afterbiasZhyperrQ   
manual_segZprobability_mapsrP   r:   r;   r   z-S 1 %s)rS   rT   )rU   rV   )rW   rX   )rY   r   )rZ   r[   )r\   T)r]   T)r^   T)r_   T)r`   T)ra   rb   )rc   T)rd   re   )rf   rg   )rh   ri   )rj   rk   )rl   T)rm   T)r@   FASTr   rQ   rA   rB   rp   r
   rF   rP   rG   rH   r   )	r   r   rI   Zfasterrb   Zfasted2rL   rM   rN   r   r   r   	test_fast^   sT    rr   c             C   s   dd }| \}}|j d}|j  ||jks0td}d|i}t|\}}	}
||tjj||	 ||d< ||tjj|j| dS )zBy default (no -o), FSL's fast command outputs files into the same
    directory as the input files. If the flag -o is set, it outputs files into
    the cwdc             S   sZ   t jf | j }xD|j D ]8}|rx.t|D ]"}tjj|jtjj|s,t	q,W qW d S )N)
r@   rq   _list_outputsvaluesr   r<   r=   realpath
startswithrB   )optsZoutput_baseoutputsoutputfilenamer   r   r   _run_and_test   s    z-test_fast_list_outputs.<locals>._run_and_testnewZ
a_basenamerP   ro   N)mkdirchdirr   rB   r   r<   r=   r   )r   r   r{   r   Zindircwdro   rw   Z
input_pathZinput_filenameZ	input_extr   r   r   test_fast_list_outputs   s    

r   c             C   sL   t jt j }| jd| }|jd | jd| }|jd | |j|jfS )Ninfiler   reffile)r   r   r   r   r   r   )r   r   r   r   r   r   r   setup_flirt   s    

r   c          $   C   s  | \}}}t j }|jdks td|j_d|j_t j||ddddd}t j||dddd}|j|jksjt|j|jkszt|jj|jjkst|jj|jjkstd||f }|j|kstt j }tj	t
 |j W d Q R X ||j_tj	t
 |j W d Q R X ||j_t|\}}	}
t|d	|	 }d
|	 }d||||f }|j|ksPtt|}d|j_tj	t |j W d Q R X t|}d|j_|j|d kst||j_|j|d|  kst|jd}|jd xTtt jj j j D ]8\}}|d/krqd }d }|dkr"d}d}nvt|jtrB|j}|j| }nV|jd krZ|j}d}n>|d0krd1d$g}|jd%jd&d' |D  }n|j}|j| }d(||f }t|\}}	}
tt j d	|	 }d%jd)|g}d
|	 }d%jd*|g}d%j||||g}t j||d+}t |j|| |j|kstqW t j||d+}t|\}}	}
d,jd-|
g|j_!d,jd.|
g|j_"|j# }|d t$j%jt$j& |jj!kst|d t$j%jt$j& |jj"kstt'|jj( std S )2NZflirt   
mutualinforJ   z
outmat.mat)r    	referencer!   out_matrix_filebinscost)r    r   r   r   r   zMflirt -in %s -ref %s -out outfile -omat outmat.mat -bins 256 -cost mutualinfoz%s_flirtz%s_flirt.matz%flirt -in %s -ref %s -out %s -omat %sTz -applyxfm -usesqformz -applyxfm -init %szfile4test.niir   trait_addedtrait_modifiedr    r   environr   r!   r   in_matrix_file	apply_xfmresource_monitorout_logsave_logargsz-vF	searchr_x	searchr_y	searchr_z-   r;   c             s   s   | ]}t |V  qd S )N)str).0eltr   r   r   	<genexpr>.  s    ztest_flirt.<locals>.<genexpr>zflirt -in %s -ref %sz-outz-omat)r    r    r   bar)r   r   r    r   r   r   r!   r   r   r   r   r   r   )r   r   r   i))r@   ZFLIRTrA   rB   r   r   r   rF   rC   rD   rE   r    r   r   r   r   r   RuntimeErrorZ
uses_qformr   r   r   sortedZ
input_specZtraitsrH   
isinstanceZ
trait_typer   r   Zargstrdefaultsetattrr!   r   rs   r<   r=   r?   r   r   )r   r   r   r   ZflirterZflirtedZ	flirt_estrK   pthr   r   rJ   ZoutmatZaxfmZaxfm2Ztmpfilekey
trait_specparamvaluerF   Z	outmatrixZoutsr   r   r   
test_flirt   s    



$            


$r   c       
      C   s   | \}}}t j }|jdks t||j_tjj|\}}tjj	tj
 |}|j|dd}d| d | }|j|ksvtd}	|	|j_d| d |	 }|j|kstd S )NZmcflirt_mcf)suffixzmcflirt -in z -out z/newdata/bar.nii)r@   MCFLIRTrA   rB   r   r    r<   r=   splitr   r?   
_gen_fnamerF   r!   )
r   r   r   r   Zfrt_nmerJ   rK   Zoutfile2r   r   r   test_mcflirtN  s    
r   c             C   s  | \}}}t jj|\}}d&d'd(d)d*d+d,d-d| |fd.d/d0d1d2d3d}xt|j D ]\}}tjf d|i||d i}	t jjt j |}
|	j	|
dd}
d| }d|
 }|d4k r|	j
d$j|	j||d% |gk stqT|	j
d$j|	j|||d% gksTtqTW d S )5N-cost mutualinfor   	-bins 256r   -dof 6   	-refvol 2r   -scaling 6.00      @-smooth 1.00      ?-rotation 2	-stages 3ri   z-init %s-gdtT-edge-meanvol-stats-mats-plots)r   r   dofZref_volZscalingZsmoothZrotationZstagesinitZuse_gradientZuse_contourmean_volZ
stats_imgsZ	save_matsZ
save_plotsr    r:   r   )r   z-in %sz-out %sr   r   r   r   r   r;   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   ri   )r   T)r   T)r   T)r   T)r   T)r   T)r   r   r   r   r   )r<   r=   r   rG   rH   r@   r   r   r?   r   rF   rA   rB   )r   r   r   r   r   r   rL   rM   rN   fntrJ   instrZoutstrr   r   r   test_mcflirt_optc  s4    


&r   c           	   C   s>   t j } tjt}| j  W d Q R X t|jjds:t	d S )Nz,MCFLIRT requires a value for input 'in_file')
r@   r   rC   rD   rE   r"   r   r   rv   rB   )r   Zexcinfor   r   r   test_mcflirt_noinput  s    r   c          %   C   s  | \}}}|j   tj }|jdks(tddddddgdfdd	ddddgd
fddddddgdfddddddgdfddddddgdfddddddgdfddddgdfdKg}x|D ]\}}}}	tjf ||d||i}|j|d d!d"}
|j|d#d$}|dkrd%||
||	||f }nV|dLkr2d&|||	|
||f }n6|jd'rTd(||	||
||f }nd)||
|||	|f }|j|kstqW tj }tj	t
 |j  W d Q R X ||j_||j_d*tjj| }t||}d+| }t|d, W d Q R X t|d, W d Q R X d-d.| |fd/d0| |fd1d2| |gfd1d2| ||gfd3d4| |fd5d6| |fd7d8| |fd9d:| |fd;d<| |fd=d>| |fd?d@| dAfd?d@| |fdBdC| |fdDdE| |fg}x|D ]\}}}tjf ||d||i}|dMkrdF|||
||f }nj|d5krdG||
|||f }nL|dNkr4dH|||
||f }n.|dDkrPdI||||f }ndJ||
|||f }|j|ksrt|d?kr|j d? ||gkstqW d S )ONfnirtZsubsampling_schemez	--subsamprT   r   r:   z4,2,2,1Zmax_nonlin_iterz--miterz4,4,4,2Zref_fwhmz	--reffwhmr   z4,2,2,0in_fwhmz--infwhmZapply_refmaskz--applyrefmaskz0,0,1,1Zapply_inmaskz--applyinmaskz0,0,0,1Zregularization_lambdaz--lambdag      ?g      ?z0.5,0.75intensity_mapping_model--intmodglobal_non_linear)r    ref_filez_log.txtF)r   Z
change_extZ_warped)r   z2fnirt --in=%s --logout=%s %s=%s --ref=%s --iout=%sz2fnirt --in=%s %s=%s --logout=%s --ref=%s --iout=%sapplyz2fnirt %s=%s --in=%s --logout=%s --ref=%s --iout=%sz2fnirt --in=%s --logout=%s --ref=%s %s=%s --iout=%sz	%s_intmapz%s.txtr   affine_filez--aff=%sinwarp_filez--inwarp=%sin_intensitymap_filez
--intin=%sconfig_filez--config=%sZrefmask_filez--refmask=%sinmask_filez--inmask=%s
field_filez	--fout=%sjacobian_filez	--jout=%sZmodulatedref_filez--refout=%sZout_intensitymap_filez--intout=%sTfieldcoeff_filez	--cout=%sZlog_filez--logout=%sz/fnirt %s --in=%s --logout=%s --ref=%s --iout=%sz/fnirt --in=%s --logout=%s --ref=%s %s --iout=%sz/fnirt --in=%s %s --logout=%s --ref=%s --iout=%sz#fnirt --in=%s %s --ref=%s --iout=%sz/fnirt --in=%s --logout=%s %s --ref=%s --iout=%s)r   r   r   r   )r   r   )r   r   r   r   )r   r   r   r   )r~   r@   ZFNIRTrA   rB   r   rv   rF   rC   rD   rE   r"   r   r    r   Zintensitymap_file_basenamer   r   rs   )r   r   r   r   r   paramsitemflagvalstrvallogZioutrA   Zintmap_basenameZintmap_imageZ
intmap_txtrL   rM   rN   argr   r   r   
test_fnirt  s    
   







   


r   c       
      C   s   | \}}}dd| |fd| |fd}xt |j D ]x\}}tjf |||d||d i}|dkrzd	|||d |f }n$|j|d
d}	d|||	||d f }|j|ks4tq4W d S )N--out=bar.niibar.niiz--premat=%sz--postmat=%s)r!   ZprematZpostmat)r    r   r   r:   r!   z-applywarp --in=%s --ref=%s --out=%s --warp=%sZ_warp)r   z0applywarp --in=%s --ref=%s --out=%s --warp=%s %sr   )r   r   )rG   rH   r@   Z	ApplyWarpr   rF   rB   )
r   r   r   r   rL   rM   rN   ZawarprK   rJ   r   r   r   test_applywarp&  s    

r   c             C   sL   dd l }dd l}dd lj}|jd}| jdj}|j|d d j| | |fS )Nr   r1   zdumbfile.nii.gz)r1   r1   r1   )	ZnibabelZnumpyos.pathr=   Zonesr   r   ZNifti1Imageto_filename)r   nbnpopdr   r   r   r   setup_fugueD  s    

r   zattr, out_fileTr   NIFTI_GZ)Zsave_unmasked_fmapfmap_in_file	mask_filer   Zfmap_out_filegMbP?)Zsave_unmasked_shiftr   Z
dwell_timer   r   Zshift_out_file)r    r   Zshift_in_filer   Zunwarped_filec             C   s   dd l j}| \}}tj }x:|j D ].\}}|dkrDt|j|| q$t|j|| q$W |j }	tt	|	j
|srt|jj|}
|
jd }|d7 }|jt	|	j
||kstd S )Nr   r   Zdumbfilez.nii.gz)r   r=   r@   ZFUGUErH   r   r   r"   r   getattrrx   rB   ZtraitZname_templatebasename)r   attrr!   r   r   r   Zfuguer   r   resr   Zout_namer   r   r   
test_fugueQ  s    #

r   c              C   s   t j } d| j_d| j_| jdd}tjjd}||ks<t	d| j_
| jdd}tjjd}||ksht	d| j_
d	d
g| j_| jdd}tjjd}||kst	d S )Nzsegment.niir   Zoriginal_segmentations)r   z segment_all_fast_origsegs.nii.gznonez segment_all_none_origsegs.nii.gzautoZL_HippZR_Hipp)r@   ZFIRSTr   r!   r   r   r<   r=   abspathrB   methodZlist_of_specific_structures)firstr   Zexpected_valuer   r   r   test_first_genfname  s    r   )&r<   copyr   rC   pdbZnipype.utils.filemanipr   r   r   r   r@   Znipype.interfaces.fslr   Znipype.interfaces.baser   r	   r
   r   r   r   Zfixturer   markZskipifrO   rr   r   r   r   r   r   r   r   r   r   Zparametrizer   r   r   r   r   r   <module>   sV   @:
 $ 