3
XdA                 @   s  d dl Z d dlZd dlmZ d dljjjZd dl	m
Z
 d dlZd dlm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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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dS )%    N)	Undefined)no_fsl)*create_files_in_directory_plus_output_typezfsl is not installed)reasonc             C   sR  | \}}}t j }|jdks ttjt |j  W d Q R X d|j_	dj
|}|jdj
tjj||ksntddddd	d
g}dtjj|| }dtjj|| d }dtjj|| d }	xx|D ]p}
t jd|
d}|j|j
|
kstt jd|
d}|j|j
|
kstt jd|
|
d}|j|	j
|
|
kstqW d|j_|jdksNtd S )Nfslmathsza.niiz	a_maths{}zfslmaths a.nii {}floatcharintshortdoubleinputzfslmaths -dt {} a.nii zfslmaths a.nii z -odt {})in_fileinternal_datatype)r   output_datatype)r   r   r   zb.niizfslmaths a.nii b.nii)fslMathsCommandcmdAssertionErrorpytestraises
ValueErrorruninputsr   formatcmdlineospathjoinout_file)r   filestestdirout_extmathsr   dtypesZint_cmdlineZout_cmdlineZduo_cmdlinedtypefoobarZfoobar r'   X/var/www/html/virt/lib/python3.6/site-packages/nipype/interfaces/fsl/tests/test_maths.pytest_maths_base   s,    


r)   c       	      C   s   | \}}}t j }|jdks ttjt |j  W d Q R X d|j_	d|j_
tjt |j  W d Q R X dddddd	g}d
}x0|D ](}t jdd|d}|j|j|kstqW d S )Nr   za.niizb.niir   r   r	   r
   r   r   zfslmaths a.nii b.nii -odt {})r   r   r   )r   ZChangeDataTyper   r   r   r   r   r   r   r   r   r   r   r   )	r   r   r    r!   Zcdtr#   r   r$   r%   r'   r'   r(   test_changedt:   s    

r*   c             C   s@  | \}}}t jddd}|jdks&ttjt |j  W d Q R X d}x.dD ]&}||j_	|j
|jdj|ksNtqNW djd}t jddddd}|j
|jd| kstd|j_|j
|jd| kstt jddddd}|j
|jd| k std|j_|j
|jd| kstd|j_|j
|jd| ks<td S )Nza.niizb.nii)r   r   r   zfslmaths a.nii {} b.niir              g      ?      ?          y@z-thr {:.10f}z{:.10f}*   T)r   r   threshuse_robust_rangez-thrp z-thrP Zabove)r   r   r2   	directionz-uthr z-uthrp z-uthrP             )	r   r+   r5   r6   r7   r-   r.   r/   r0   )r   Z	Thresholdr   r   r   r   r   r   r   r2   r   r   Zuse_nonzero_voxelsr3   )r   r   r    r!   r2   r   valr'   r'   r(   test_thresholdX   s,    


r9   c             C   s   | \}}}t jddd}|jdks&t|jdks4td}x(dD ] }||j_|j|j|ks>tq>W t jdd}|jdjtj	j
|dj|kstd S )Nza.niizb.nii)r   r   r   zfslmaths a.nii -Tmean b.niizfslmaths a.nii -{}mean b.niiXYZT)r   zfslmaths a.nii -Tmean {}za_mean{})r:   r;   r<   r=   )r   Z	MeanImager   r   r   r   	dimensionr   r   r   r   )r   r   r    r!   Zmeanerr   dimr'   r'   r(   test_meanimage}   s    

r@   c             C   s   | \}}}t jddd}|jdks&t|jdks4td}x(dD ] }||j_|j|j|ks>tq>W t jddd}|jdjtj	j
|dkstd S )Nza.niizb.nii)r   r   r   zfslmaths a.nii -Tstd b.niizfslmaths a.nii -{}std b.niir:   r;   r<   r=   ZNIFTI)r   output_typezfslmaths a.nii -Tstd {}z	a_std.nii)r:   r;   r<   r=   )r   ZStdImager   r   r   r   r>   r   r   r   r   )r   r   r    r!   Zstderr   r?   r'   r'   r(   test_stdimage   s    

rB   c             C   s   | \}}}t jddd}|jdks&t|jdks4td}x(dD ] }||j_|j|j|ks>tq>W t jdd}|jdjtj	j
|dj|kstd S )Nza.niizb.nii)r   r   r   zfslmaths a.nii -Tmax b.niizfslmaths a.nii -{}max b.niir:   r;   r<   r=   )r   zfslmaths a.nii -Tmax {}za_max{})r:   r;   r<   r=   )r   ZMaxImager   r   r   r   r>   r   r   r   r   )r   r   r    r!   Zmaxerr   r?   r'   r'   r(   test_maximage   s    

rC   c             C   s   | \}}}t jddd}|jdks&ttjt |j  W d Q R X d}xpdD ]h}t jdd|d}|j|j	|ksvtt jdd|d}t
|tjdtjd  }|j|j	|ksNtqNW t jddd}|jdj	dtjj|dj	|kstd S )Nza.niizb.nii)r   r   r   zfslmaths a.nii -s {:.5f} b.niir         ?r,            ?   g      @)r   r   sigma)r   r   Zfwhm      )r   rH   zfslmaths a.nii -s {:.5f} {}z
a_smooth{}UUUUUU@)r   rD   r,   rE   rF   rK   )r   ZIsotropicSmoothr   r   r   r   r   r   r   r   r   npsqrtlogr   r   r   )r   r   r    r!   Zsmootherr   r8   r'   r'   r(   test_smooth   s    

rO   c             C   s   | \}}}t jddd}|jdks&ttjt |j  W d Q R X d|j_	|j
dksZtt jddd}|j
dtjj|d	j| kstd S )
Nza.niizc.nii)r   r   r   zb.niizfslmaths a.nii -mas b.nii c.nii)r   	mask_filezfslmaths a.nii -mas b.nii z
a_masked{})r   Z	ApplyMaskr   r   r   r   r   r   r   rP   r   r   r   r   r   )r   r   r    r!   Zmaskerr'   r'   r(   	test_mask   s    
rQ   c             C   s2  | \}}}t jddd}|jdks&ttjt |j  W d Q R X x:dD ]2}tdd	d
d}||j	_
|jdj|| ksJtqJW x@dD ]8}x2d D ]*}||j	_||j	_|jdj||kstqW qW tddj }	~	d|j	_t|j	_d|j	_|jdk stt jddd}
|
jdjtjj|dj|ks.td S )!Nza.niizb.nii)r   r   r   meanmodalmaxMDF)rR   rS   rT   zfslmaths a.nii -dil{} b.nii3D2Dboxboxvgaussspherer,         ?rJ   z,fslmaths a.nii -kernel {} {:.4f} -dilF b.niiz
kernel.txtwfilez2fslmaths a.nii -kernel file kernel.txt -dilF b.nii)r   	operationzfslmaths a.nii -dilF {}za_dil{})rR   rS   rT   )rX   rY   rZ   r[   r\   r]   )r,   r^   rJ   )r   ZDilateImager   r   r   r   r   r   dictr   ra   r   r   Zkernel_shapeZkernel_sizeopencloser   Zkernel_filer   r   r   )r   r   r    r!   ZdilleropZcvksizefZdilr'   r'   r(   test_dilation  s0    



ri   c             C   s~   | \}}}t jddd}|jdks&t|jdks4td|j_|jdksJtt jdd}|jd	jtj	j
|d
j|ksztd S )Nza.niizb.nii)r   r   r   zfslmaths a.nii -ero b.niiTzfslmaths a.nii -eroF b.nii)r   zfslmaths a.nii -ero {}za_ero{})r   Z
ErodeImager   r   r   r   Zminimum_filterr   r   r   r   )r   r   r    r!   Zeroder'   r'   r(   test_erosion/  s    
rj   c             C   s   | \}}}t jddd}|jdks&ttjt |j  W d Q R X x(dD ] }||j_	|j
dj|ksJtqJW t jddd	}|j
d
jtjj|dj|kstd S )Nza.niizb.nii)r   r   r   rR   meanumedianzfslmaths a.nii -f{} b.nii)r   ra   zfslmaths a.nii -fmean {}za_filt{})rR   rk   rl   )r   ZSpatialFilterr   r   r   r   r   r   r   ra   r   r   r   r   r   )r   r   r    r!   filterre   r'   r'   r(   test_spatial_filterG  s    

rn   c             C   s   | \}}}t jddd}|jdks&ttjt |j  W d Q R X ddddd	d
ddddg
}x(|D ] }||j_	|j
dj|ksbtqbW xB|D ]:}t jd|d}|j
dj|tjj|dj||kstqW d S )Nza.niizb.nii)r   r   r   exprN   sincosZsqrrM   Zrecipabsbinindexzfslmaths a.nii -{} b.nii)r   ra   zfslmaths a.nii -{} {}za_{}{})r   Z
UnaryMathsr   r   r   r   r   r   r   ra   r   r   r   r   r   )r   r   r    r!   r"   opsre   r'   r'   r(   test_unarymathsa  s    


rv   c       	      C   s"  | \}}}t jddd}|jdks&ttjt |j  W d Q R X ddddd	d
dg}dddddtj	dg}xn|D ]f}x`|D ]X}t jdd|d}|dkr||j
_|jdj|kstqz||j
_|jdj||ksztqzW qpW xB|D ]:}t jd|dd}|jdj|tjj|dj|kstqW d S )Nza.niizc.nii)r   r   r   addsubmuldivremminrT   zb.niirI   g      ?r   g~Ϛ?i  )r   r   ra   zfslmaths a.nii -{} b.nii c.niizfslmaths a.nii -{} {:.8f} c.nii)r   ra   operand_filezfslmaths a.nii -{} b.nii {}z	a_maths{}g      )r   ZBinaryMathsr   r   r   r   r   r   rL   pir   r}   r   r   Zoperand_valuer   r   r   )	r   r   r    r!   r"   ru   Zoperandsre   entr'   r'   r(   test_binarymaths}  s(    



r   c             C   s   | \}}}t jddd}|jdks&ttjt |j  W d Q R X ddg|j_	dddg}x*|D ]"}||j_
|jd	| d ks`tq`W t jdd
dgd}|jdtjj|d|  kstd S )Na.niizc.nii)r   r   r   b.niiz-add %s -div %sz-max 1 -sub %s -min %sz-mas %s -add %szfslmaths a.nii %s c.niiz-add %s -mul 5)r   	op_stringoperand_filesz#fslmaths a.nii -add b.nii -mul 5 %sz	a_maths%s)r   r   )r   ZMultiImageMathsr   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r    r!   r"   Z	opstringsZostrr'   r'   r(   test_multimaths  s    


r   c             C   s   | \}}}t jddd}|jdks&t|jdks4tdddddg}xB|D ]:}|d |j_|d |j_|jdj|d |d ksHtqHW t jddd}|jdjt	j
j|dj|kstd S )Nza.niizb.nii)r   r   r   z.fslmaths a.nii -bptf -1.000000 -1.000000 b.niir,   皙?         r   z(fslmaths a.nii -bptf {:.6f} {:.6f} b.nii@   )r   highpass_sigmaz+fslmaths a.nii -bptf 64.000000 -1.000000 {}za_filt{}r5   r5   )r5   r5   )r   r   r5   )r5   r   r5   )r   r5   )r   r   )r   ZTemporalFilterr   r   r   r   r   Zlowpass_sigmar   r   r   r   )r   r   r    r!   ZfiltZwindowswinr'   r'   r(   test_tempfilt  s    

r   )r   ZnumpyrL   Znipype.interfaces.baser   Znipype.interfaces.fsl.mathsZ
interfacesr   r"   Znipype.interfaces.fslr   r   Znipype.testing.fixturesr   markZskipifr)   r*   r9   r@   rB   rC   rO   rQ   ri   rj   rn   rv   r   r   r   r'   r'   r'   r(   <module>   s*   +%-%