U
    f»{jÈ0  ã                
   @   sº  d dl mZ d dlZd dlmZ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 d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZmZ e  e !e"¡ddddd¡Z#e  e#d¡Z$e  e#d¡Z%e  e#d¡Z&ej'dd�Z(d\Z)Z*Z+dZ,dd„ Z-ej. /dd¡ej. /dddg¡ej. /dej0ddej.j1d�e2d d!�d"fg¡ej. 3d#¡d$d%„ ƒƒƒƒZ4ej.j1d&d'„ ƒZ5d1d(d)„Z6ej.j1d*d+„ ƒZ7ej8d,d-„ ƒZ9ed.ƒej8d/d0„ ƒƒZ:dS )2é    N)Úassert_allcloseÚassert_array_equal)Úcompress)ÚioÚ
pick_typesÚpick_channelsÚread_eventsÚEpochs)Ú_make_interpolation_matrix)Útesting)Úoptical_densityÚscalp_coupling_indexÚbeer_lambert_law)Úread_raw_nirx)Ú_has_eeg_average_ref_proj)Ú_record_warningsÚrequires_versionz..r   ZtestsÚdataztest_raw.fifztest-eve.fifztest_ctf_raw.fifF)Údownload)é   gš™™™™™É¿ç      à?é   c                 C   s¾   t  t¡}ttƒ}| dkrTt|jddg d�dd… }t||tt	t
|dtdd�d	�}nbt|jddg d�d
dd… }| dks|t‚tjtdd��& t||tt	t
|dtddd�d	�}W 5 Q R X ||fS )z
Load data.ÚeegFT)Úmegr   ÚexcludeNé   gñhãˆµø?©r   )ÚpicksÚpreloadZrejectr   éÈ   r   r   Ú
projection©Úmatchg•Ö&è.>gê-�™—‘=)ZgradÚmag)r   Úread_raw_fifÚ	raw_fnamer   Ú
event_namer   Úinfor	   Úevent_idÚtminÚtmaxÚdictÚAssertionErrorÚpytestÚwarnsÚRuntimeWarning)ÚkindÚrawÚeventsr   Zepochs© r3   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/channels/tests/test_interpolation.pyÚ
_load_data   s     
 ÿ
þr5   Úoffset)ç        çš™™™™™¹?zavg_proj, ctol)T)g…ëQ¸…ë?gÃõ(\�Âí?)F)g
×£p=
ï?g®Gáz®ï?zmethod, atolgTäqs*É>)ZmarksZMNEr   g�íµ ÷ÆÐ>z,ignore:.*than 20 mm from head frame origin.*c           "   
   C   sp  t dƒ\}}| ¡ }t|jd ƒr&t‚||fD ]v}|jd D ]F}|d tjjjkr<|d dd…  | 7  < |d dd…  | 7  < q<|jd	 D ]}	|	d
  | 7  < qŽq.g |jd< | 	¡ }
t
|d�}tjtdd�� |
jf |Ž W 5 Q R X g |jd< tjt|jƒtd�}d||j d¡< | }| ¡ }| 	¡ }
|�rX|
jdd� ¡  t|
j d¡ddd� |
j| }dg|jd< | 	¡ }
|�r¶|
jdd� ¡  t|
jddd�}t|
j|  d¡ddd� |
 ¡ }t|j|jd dd�}d|j|dd…f< | ¡ }ddg|jd< d|jt|jddgƒ< |jf ddgdœ|—Ž}|jd dgk�s@t‚t | d¡dk¡�sZt‚t | d¡dk¡�stt‚dg|jd< | ¡ jf ddi|—Ž}|�r´t|j d¡ddd� |j| }|dk�r&|| }|| }t||ƒ}|j d t|jƒd  fk�s t‚t !||j| ¡}t"||ƒ ~~~~~t|||d� |d t #||¡d!   k �r`|d  k �sfn t‚| ¡ jf |Žj| }t||d"d� |d  t #||¡d! k �s¨t‚d|_$tj%t&d#d�� |jf |Ž W 5 Q R X d|_$tj'|j(d |jd$�}|j(| }|jf |Žj(| }t ||k¡�r t‚||fD ]T}t)|d%ƒ�s<t‚d|_$|jd  g|jd< tj%t&d&d�� |jf |Ž W 5 Q R X �q(| ¡  *dd'¡ +¡ }| |jdd … |jdd(…  ¡ t|jƒd)k�sÈt‚| ,¡  |jd* g|jd< |d  d }t-ƒ �} |jf d+di|—Ž W 5 Q R X td,d-„ | D ƒƒdk�s0t‚|d  d }!|!dk ¡ d.k �sRt‚t #|!|¡d! d/k�slt‚dS )0z#Test interpolation of EEG channels.r   ZprojsZchsr0   ÚlocNé   é   ÚdigÚrÚbads)ÚmethodzDoing nothingr!   )ZdtypeFzEEG 012T)r    r   r7   g#B’¡œÇ;)Úatol)r   r   )ÚincludeÚorderedç    _ BzEEG 004)r7   r7   r7   ©Úoriginr   rE   g�íµ ÷Æ°>r   ©r   r   gñhãˆµøÄ>z requires epochs data to be loade©r   r'   r   zrequires.*data to be loadedr8   é   r   éÿÿÿÿÚ
reset_badsc                 S   s   g | ]}d t |jƒkr|‘qS )z	more than)ÚstrÚmessage)Ú.0Zwwr3   r3   r4   Ú
<listcomp>¨   s      z*test_interpolation_eeg.<locals>.<listcomp>r   gš™™™™™É?).r5   Úcopyr   r'   r,   r   Ú	constantsZFIFFZFIFFV_EEG_CHÚaverager+   r-   r.   r/   Úinterpolate_badsÚnpZonesÚlenÚch_namesÚboolÚindexZ_get_channel_positionsZset_eeg_referenceZ
apply_projr   r   Zmeanr   r   ÚallÚget_datar
   ÚshapeÚdotr   Úcorrcoefr   ZraisesÚRuntimeErrorÚRawArrayÚ_dataÚhasattrÚcropÚ	load_dataZdel_projr   )"r6   Zavg_projZctolr@   r?   r1   Z
epochs_eegÚinstÚchÚdZ
evoked_eegÚkwZ	goods_idxZbads_idxÚposZ
ave_beforeZ
good_picksZevoked_eeg_badZ
bads_picksZevoked_eeg_2_badsZevoked_eeg_interpZinterp_zeroZpos_goodZpos_badÚinterpolationZinterp_manualZ
interp_fitZraw_eegZ
raw_beforeZ	raw_afterZraw_fewZ	orig_dataÚwZnew_datar3   r3   r4   Útest_interpolation_eeg1   sÊ    



  ÿþÿ ÿÿÿÿ




2
"rj   c               	   C   s²  d} t dƒ\}}| dd¡ ¡  |j¡ |j ¡  tjt	dd�� | 
|jd di¡ W 5 Q R X |jd g|jd	< | ¡  |jd
d� ~dg|jd	< | ¡ }t|jd |jd	 ƒ}tj|jd |jd�}dg|jd	< ||dd…f d d }|j ¡  |jdd
d�|dd…f d d }t ||¡d | k�s2t‚t|jd	 ƒt|jd	 ƒk�sTt‚| ¡ dd…|dd…f  ¡ }|j ¡  |jd
d� | ¡ dd…|dd…f  ¡ }t ||¡d | k�sÀt‚t|jd	 ƒdk�sØt‚|j| }|j ¡  |jdd�j| }t ||¡d | k�st‚ddg|jd	< t|j|jd	 dd�}d|j|d < |j| }|j ¡  |jddgd�j| }t |d |d ¡d | k�s–t‚t |d dk¡�s®t‚dS )z#Test interpolation of MEG channels.gÃõ(\�Âå?r   r   r8   zunit .* changed from .* to .*r!   Zstimr   r>   Úfast)ÚmodezMEG 0141rU   rG   NF)rJ   rl   rF   Úauto)rE   zMEG 0121T)rB   rC   rI   rD   )r5   ra   rb   r   rU   r'   Znormalize_projr-   r.   r/   Zset_channel_typesrR   rQ   r   r^   r_   rS   r\   r,   rT   rY   Zravelr   rX   )Úthreshr1   Z
epochs_megZevokedÚpickZraw_megZdata1Zdata2r3   r3   r4   Útest_interpolation_meg®   sf    

ÿÿ
ÿÿ"




 ÿþ"rp   c                 C   s   ddl m} || |dd� | S )Nr   )Ú_interpolate_bads_megrk   )Úref_megrl   )Úmne.channels.interpolationrq   )rc   rr   rq   r3   r3   r4   Ú_this_interpolî   s    rt   c            	      C   sþ   d} d}d}t  t¡ dd¡ ¡ }| d¡ |g|jd< t|jd |jd ƒ}||d	d	…f d }t|d
d�|d	d	…f d }t|dd�|d	d	…f d }t	ƒ }t
 ||¡d |d< t
 ||¡d |d< td|ƒ |d |d | ksêt‚|d | ksút‚d	S )z3Test interpolation of MEG channels from CTF system.g333333ë?gš™™™™™©?z
MLC22-2622r   g      ð?r:   r>   rU   NT)rr   FrF   Z	no_refmegZwith_refmegz0Corrcoef of interpolated with original channel: )r   r$   Úraw_fname_ctfra   rb   Zapply_gradient_compensationr'   r   rt   r+   rS   r\   Úprintr,   )	rn   ZtolÚbadr1   Zpick_badZ	data_origZdata_interp_refmegZdata_interp_no_refmegÚRr3   r3   r4   Útest_interpolate_meg_ctfô   s     

ry   c                  C   sZ   t  tdd¡} tj| dd�}|jd |jd g|jd< |jdd	d
� |jd g ksVt‚dS )z-Test interpolation with compensated CTF data.ZCTFzsomMDYO-18av.dsT©r   é   éûÿÿÿr>   rk   )r7   r7   g{®Gáz¤?)rl   rE   N)	ÚopÚjoinÚtesting_pathr   Zread_raw_ctfrU   r'   rR   r,   )r%   r1   r3   r3   r4   Útest_interpolation_ctf_comp  s
    r€   Zpymatreaderc                     s>  t  tddd¡} t| dd�}t|ƒ‰ tˆ ƒ}ttˆ j|dk ƒƒˆ j	d< t
 ‡ fdd	„ˆ jD ƒ¡d
 d
 }t
 ˆ j| ¡}tˆ j	d ƒ}ˆ j|dd… d� ˆ j	d |dd… ks´t‚ˆ  ¡  ˆ j	d g ksÎt‚|t
 ˆ j| ¡ksæt‚tˆ dd�}|jdd… |j	d< |j	d ddgk�st‚| ¡  |j	d g k�s:t‚dS )z%Test interpolating bad nirs channels.ZNIRxZnirscoutZnirx_15_2_recording_w_overlapFrz   r   r>   c                    s   g | ]}|ˆ j d  d k‘qS )r>   r   )r'   )rM   Úname©Zraw_odr3   r4   rN   &  s   ÿz+test_interpolation_nirs.<locals>.<listcomp>r   Nr   )r   r;   )ZppfrH   z	S1_D2 hboz	S1_D2 hbr)r}   r~   r   r   r   r   Úlistr   rU   r'   rS   ÚwhereZstdr_   rR   r,   r   )ÚfnameZraw_intensityZsciZbad_0Zbad_0_std_pre_interpZ	bads_initZ	raw_haemor3   r‚   r4   Útest_interpolation_nirs  s8      ÿÿÿÿr†   )F);Úos.pathÚpathr}   ÚnumpyrS   Znumpy.testingr   r   r-   Ú	itertoolsr   Zmner   r   r   r   r	   rs   r
   Zmne.datasetsr   Zmne.preprocessing.nirsr   r   r   Zmne.ior   Zmne.io.projr   Z	mne.utilsr   r   r~   ÚdirnameÚ__file__Úbase_dirr%   r&   ru   Z	data_pathr   r(   r)   r*   Z
event_id_2r5   ÚmarkZparametrizeÚparamZslowtestr+   Úfilterwarningsrj   rp   rt   ry   Zrequires_testing_datar€   r†   r3   r3   r3   r4   Ú<module>   sP   
þþ
s
?


	