U
    f»{jß;  ã                   @   s|  d dl mZ d dlZd dlmZmZmZ d dl	Z	d dl
Z
d dlmZmZ 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 d dlmZmZ d dlmZ ed	d
�Ze eddddd¡Z e eddd¡Z!e eddddd¡Z"e eddddd¡Z#e eddddd¡Z$e eddddd¡Z%e eddd¡Z&e eddddd¡Z'e
 (d¡Z)e edd d!¡Z*e edd"d#¡Z+d$d%„ Z,ee
j- .d&¡e
j- .d'¡e
j- /d(e e#e"e#e$e$e'e+g¡d)d*„ ƒƒƒƒZ0ee
j- .d'¡d+d,„ ƒƒZ1ed-d.„ ƒZ2ed/d0„ ƒZ3ed1d2„ ƒZ4ed3d4„ ƒZ5ed5d6„ ƒZ6ed7d8„ ƒZ7ed9d:„ ƒZ8ed;d<„ ƒZ9ee
j- /d=e d d>d>ge#d d>d	ge$d d	d>ge%d d>d>gf¡d?d@„ ƒƒZ:edAdB„ ƒZ;dS )Cé    N)Úassert_allcloseÚassert_almost_equalÚassert_equal)Ú	data_pathÚrequires_testing_data)Úread_raw_snirfÚread_raw_nirx)Ú_test_raw_reader)Úoptical_densityÚbeer_lambert_lawÚshort_channelsÚsource_detector_distancesÚ_reorder_nirx)Úapply_transÚ
_get_trans)ÚFIFFF)ÚdownloadZSNIRFZSfNIRSZsnirf_homer3z1.0.3z+snirf_1_3_nirx_15_2_recording_w_short.snirfZNIRxZnirscoutZnirx_15_2_recording_w_shortznirx_15_3_recording.snirfZ	NIRSport2z2021-04-23_005.snirfz2021-05-05_001.snirfz2021.9z2021-10-01_002.snirfZnirsport_v2Zaurora_2021_9ZKernelZFlow50ZPortal_2021_11zhb.snirfÚh5pyZ	FieldTripz220307_opticaldensity.snirfZ	GowerLabszlumomat-1-1-0.snirfc                 C   s   |   ¡  |¡jd d d S )NÚchsr   Úloc)ÚcopyÚpickÚinfo)ÚrawZch_name© r   ú\/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/snirf/tests/test_snirf.pyÚ_get_loc:   s    r   z ignore:.*contains 2D location.*:zignore:.*measurement date.*:Úfnamec                 C   sL   t | dd�}d|krt|ƒ}d|kr0t|dd�}d|ks<t‚d|ksHt‚d	S )
z8Test reading SNIRF files and minimum typical processing.T©ÚpreloadÚfnirs_cw_amplitudeÚfnirs_odé   )ZppfÚhboÚhbrN)r   r
   r   ÚAssertionError)r   r   r   r   r   Ú"test_basic_reading_and_min_process>   s    r&   c                  C   s˜   t tdd�} | jjdkst‚| jd d d tjks8t‚t| j	ƒdksJt‚t
| jd d	ƒ | j	t| j	ƒksnt‚t| j	ƒ | j	t| j	d
d„ d�ks”t‚dS )úTest reading SNIRF files.Tr   )éØ   i  Údigr   Úcoord_framer(   Úsfreqg      $@c                 S   sz   t |  ¡ d  d¡d dd … ƒd d t |  ¡ d ƒt |  ¡ d  d¡d dd … ƒt |  ¡ d  d¡d dd … ƒfS )Nr   Ú_é   é   )ÚintÚsplit)Únamer   r   r   Ú<lambda>g   s
    (  üz&test_snirf_gowerlabs.<locals>.<lambda>)ÚkeyN)r   Úlumo110Ú_dataÚshaper%   r   r   ÚFIFFV_COORD_HEADÚlenÚch_namesr   ÚsortedÚprint©r   r   r   r   Útest_snirf_gowerlabsV   s    
ýr=   c                  C   sî  t tdd�} | jjdkst‚| jd dks.t‚| jd dd… d	d
ddgksPt‚| jd dd… ddgksnt‚| jd d d d dksŒt‚| jd d d d dksªt‚tdddgt| d	ƒdd… dd� tddd gt| dƒdd… dd� td!d"d#gt| d$ƒdd… dd� td%d&d'gt| d(ƒdd… dd� td)d*d+gt| d,ƒdd… dd� td-d.d/gt| d	ƒdd… dd� td0d1d2gt| d3ƒdd… dd� td4d5d6gt| d7ƒdd… dd� td8d9d:gt| d;ƒdd… dd� d<| k�sêt‚dS )=r'   Tr   )é   é‘   r+   g      )@r9   Né   ú	S1_D1 760ú	S1_D9 760z	S2_D3 760z
S2_D10 760é   r>   z	S5_D8 850z
S5_D13 850r   r   r   é	   éø  éR  güo%;6¶¿gÀ“.«°	?gñð¤…Ëš¿r.   r"   g{®Gáz”?)ZrtolgLÉrJ_´?gü¥E}’;œ¿gmË€³”,—¿g3û<Fyæ•¿g×övKrÀ¶¿gohÊN?¨£?z	S3_D2 760g~Ž�g“?g.:Yj½ß¸?gÈ@ž]¾õ‘?z	S4_D4 760g
ÚäðI'R¿gí×�î<ñ|?gåcw�’·?z	S5_D5 760g$×M)¯•´¿g�ÆÁ¥cž¿gJµOÇcš¿gáþ~1[¶¿g@Š:s	?gŸ°ÄÊ¦œ¿z	S1_D9 850gŠWYÛ�·?gÌÔ$xC%?gj�=&Rš�¿z	S2_D3 850gôÅÞ‹/Ú³?g†’É©�a¢¿g.áÐ[<¼—¿z
S2_D10 850r    )r   Úsfnirs_homer_103_wShortr5   r6   r%   r   r   r   r<   r   r   r   Útest_snirf_basico   s^     ÿ

 ÿ
 ÿ
 ÿ
 ÿ
 ÿ
 ÿ
 ÿ
 ÿ
 ÿrH   c                     sä   t tdd�} t| ƒ ttdd�}t| jj|jjƒ tdd„ | jjD ƒdd„ |jjD ƒƒ t| jj	|jj	ƒ | j
d |j
d ks‚t‚t| jƒ}| j
d ‰ |j
d ‰t‡ fdd„t|ƒD ƒ‡fd	d„t|ƒD ƒƒ t|  ¡ | ¡ ƒ d
S )z)Test against file snirf was created from.Tr   c                 S   s   g | ]}t |ƒ‘qS r   ©Úfloat©Ú.0Údr   r   r   Ú
<listcomp>£   s     z+test_snirf_against_nirx.<locals>.<listcomp>c                 S   s   g | ]}t |ƒ‘qS r   rI   rK   r   r   r   rN   ¤   s     r9   r   c                    s   g | ]}ˆ | d  d ‘qS ©r   rD   r   ©rL   Úidx)Únew_chsr   r   rN   ®   s     c                    s   g | ]}ˆ | d  d ‘qS rO   r   rP   )Úori_chsr   r   rN   ¯   s     N)r   rG   r   r   Ú sfnirs_homer_103_wShort_originalr   ÚannotationsÚonsetÚdescriptionÚdurationr   r%   r8   r9   ÚrangeÚget_data)r   Zraw_origZ	num_chansr   )rR   rS   r   Útest_snirf_against_nirxš   s     ÿ


ÿr[   c              	   C   s¤  t  tt| ƒd ¡ t| ƒd }t |d¡�H}|jdd d¡gd� |jdd d¡gd� |jd	d
 d¡gd� W 5 Q R X t|dd�}|j	d d dksœt
‚|j	d d dks²t
‚|j	d d dksÈt
‚t |d¡�"}|d	= |jd	d d¡gd� W 5 Q R X t|dd�}|j	d d dk�s t
‚t |d¡�"}|d	= |jd	d d¡gd� W 5 Q R X t|dd�}|j	d d dk�sxt
‚t |d¡�}|jddgd� W 5 Q R X dS )zTest custom tags.z
/mod.snirfzr+znirs/metaDataTags/middleNameÚXzUTF-8)Údataznirs/metaDataTags/lastNameÚYznirs/metaDataTags/sexÚ1Tr   Zsubject_infoZmiddle_nameÚ	last_nameZsexr-   Ú2é   Ú0r   z nirs/metaDataTags/MNE_coordFrameN)Úshutilr   rG   Ústrr   ÚFileZcreate_datasetÚencoder   r   r%   )Ztmp_pathr   Úfr   r   r   r   Útest_snirf_nonstandardµ   s@    
ÿ
ÿ
ÿ
ÿ
ÿri   c                  C   sÆ   t tdd�} | jjdkst‚t| jd ddd� | jd d	d
… ddddgksRt‚| jd dd… ddgkspt‚| jd d d d dksŽt‚| jd d d d dks¬t‚tt| jƒƒdksÂt‚d	S )r'   Tr   )é\   éT   r+   gffffff@r-   ©Údecimalr9   Nr@   rA   z	S1_D3 760rB   z
S1_D16 760rC   r>   z
S8_D15 760z
S8_D20 760r   r   r   rD   rE   éÿÿÿÿrF   é   )	r   Únirx_nirsport2_103r5   r6   r%   r   r   Úsumr   r<   r   r   r   Útest_snirf_nirsport2×   s     ÿ
rr   c                  C   s|   t tdd�jd d d } | tjks(t‚t tdd�jd d d } | tjksPt‚t tdd�jd d d } | tjksxt‚dS )	r'   Úhead)Úoptode_framer   r.   r*   ÚmriÚunknownN)r   rp   r   r   r7   r%   ZFIFFV_COORD_UNKNOWNr<   r   r   r   Útest_snirf_coordframeì   s0    ÿÿÿÿÿÿÿÿÿrw   c                  C   sä  t tddd�} t| ƒ | jjdks&t‚t| jd ddd� | jd	 d
d… ddddgks\t‚| jd	 dd… ddgkszt‚| jd d d d dks˜t‚| jd d d d dks¶t‚tt	| jƒƒdksÌt‚d}t
t|  ¡  d¡jƒdg|d� t
t|  ¡  d¡jƒdg|d� d }d!d"„ | jd D ƒ}td#d$dƒ\}}t||ƒ}| jd	 d d%d&… d'k�sbt‚t
|d d(d)d*g|d� | jd	 d+ d%d&… d,k�sšt‚t
|d+ d(d-d.g|d� | jd	 d/ d%d&… d0k�sÒt‚t
|d/ d1d2d3g|d� d }d4d"„ | jd D ƒ}td#d$dƒ\}}t||ƒ}| jd	 d d
d+… d5k�s<t‚t
|d d6d7d8g|d� | jd	 d d
d+… d9k�stt‚t
|d d:d;d<g|d� | jd	 d/ d
d+… d=k�s¬t‚t
|d/ d>d?d@g|d� |  ¡ }t|jƒdAk�sàt‚d
S )Bz.Test reading SNIRF files with known positions.Tru   )r   rt   )é(   é€   r+   gffffff$@r-   rl   r9   Nr@   rA   z	S1_D1 850z	S1_D6 760z	S1_D6 850rC   r>   z	S6_D4 760z	S6_D4 850r   r   r   rD   rE   rF   ro   g{®Gázt?gÅ�1w-!Ÿ?)Zatolz	S2_D2 760g{®Gáz¤?g-Cëâ6*?c                 S   s   g | ]}|d  dd… ‘qS )r   r"   rD   r   ©rL   Úchr   r   r   rN   "  s     z4test_snirf_nirsport2_w_positions.<locals>.<listcomp>Z	fsaveragers   r.   é   ZD1g+ö—Ý“‡µ¿gàœ¥½Á§¿g³{ò°PkŠ¿rb   ZD6glxz¥,CŒ¿gaÃÓ+e™?é"   ZD5goƒÀÊ¡µ?g,eâX§¿g�(í¾0‰¿c                 S   s   g | ]}|d  dd… ‘qS )r   r.   r"   r   rz   r   r   r   rN   7  s     ZS1g¡g³êsµµ¿g‚âÇ˜»–�¿gÅþ²{ò°�¿ZS2g       €gd;ßO�—¾¿g†ZÓ¼ã�?ZS8gQÚ|a2µ?gZd;ßO�§¿gÉv¾Ÿ/�?é   )r   Únirx_nirsport2_103_2r   r5   r6   r%   r   r   rq   r   r   r   r   r   r   r   Zget_montager8   r)   )r   Zallowed_distance_errorZallowed_dist_errorZlocsZ
head_mri_tr,   Zmni_locsÚmonr   r   r   Ú test_snirf_nirsport2_w_positionsü   s’    ÿ ÿ
ÿ þÿ þ
   ÿ   ÿ   ÿ
   ÿ   ÿ   ÿr�   c               	   C   s´   t tdd�} | jjdkst‚|  ¡  d¡jjdks6t‚|  ¡  d¡jjdksPt‚tjt	dd�� |  ¡  d¡ W 5 Q R X tjt	dd�� |  ¡  d	¡ W 5 Q R X t
| jd
 dƒ dS )z=Test reading FieldTrip SNIRF files with optical density data.Tr   )éH   iô  Zfnirsr!   znot be interpreted as channel)Úmatchr#   r$   r+   é2   N)r   Úft_odr5   r6   r%   r   r   ÚpytestZraisesÚ
ValueErrorr   r   r<   r   r   r   Útest_snirf_fieldtrip_odK  s    rˆ   c                  C   sð   t tdd�} | jjdkst‚|  ¡  d¡jjdks6t‚|  ¡  d¡jjdksPt‚t| jd dƒ t	 
|  ¡ ¡jd	d
�}t	 |¡dksˆt‚t| jjƒdksœt‚| jjd dks°t‚| jjd	 dksÄt‚| jjd dksØt‚| jjd	 dksìt‚dS )z6Test reading Kernel SNIRF files with haemoglobin data.Tr   )ih  é   r#   )é´   r‰   r$   r+   gèiÀ éƒ @r-   )Zaxisé   rb   r   gØÕä)«é¢?gf`Xþüë?Z
StartTrialZStartItiN)r   Ú	kernel_hbr5   r6   r%   r   r   r   r   ÚnpÚisnanrZ   Úanyrq   r8   rU   rW   rV   )r   Zbad_nansr   r   r   Útest_snirf_kernel_hb\  s    r�   z0fname, boundary_decimal, test_scaling, test_rankTc                 C   s   t t| |||d� dS )zTest standard operations.©r   Zboundary_decimalZtest_scalingZ	test_rankN)r	   r   r‘   r   r   r   Útest_snirf_standardr  s
    	ýr’   c                  C   s(   t tdd�} dddg}t|| jjƒ dS )z:Test annotation descriptions parsed from stim group names.Tr   r_   ra   Ú6N)r   r   r   rU   rW   )r   Zexpected_descriptionsr   r   r   Ú,test_annotation_description_from_stim_groups�  s    
r”   )<Úos.pathÚpathÚopÚnumpyr�   Znumpy.testingr   r   r   rd   r†   Zmne.datasets.testingr   r   Zmne.ior   r   Zmne.io.tests.test_rawr	   Zmne.preprocessing.nirsr
   r   r   r   r   Zmne.transformsr   r   Zmne.io.constantsr   Ztesting_pathÚjoinrG   rT   Zsfnirs_homer_103_153rp   r   Zsnirf_nirsport2_20219Znirx_nirsport2_20219rŒ   Zimportorskipr   r…   r4   r   ÚmarkÚfilterwarningsZparametrizer&   r=   rH   r[   ri   rr   rw   r�   rˆ   r�   r’   r”   r   r   r   r   Ú<module>   s´   

 þ
ÿ ÿ ÿ ÿ ÿ
ÿ ÿ

ÿ


ù	

*

!


N





ü