U
    f»{j× ã                   @   sò  d dl mZ d dlmZ d dlZd dl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 d dlZd dlmZmZmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d dl'm(Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZD e Ee FeG¡ddddd¡ZHe EeHd¡ZIejJdd�ZJe EeJd¡ZKe EeKd¡ZLeLd ZMeLd ZNeLd ZOeLd ZPeLd ZQeLd  ZReLd! ZSeLd" ZTeLd# ZUeLd$ ZVeLd% ZWeLd& ZXeLd' ZYeLd( ZZe EeJd)d*¡Z[eLd+ Z\eLd, Z]eLd- Z^eLd. Z_eLd/ Z`eLd0 ZaeLd1 ZbeLd2 Zce EeJd3d4d5¡Zde EeJdd6¡Zee EeJdd7¡Zfe EeJdd8¡Zge EeKd9¡Zhe EeKd:¡Zie EeKd;¡Zje EeKd<¡Zke EeKd=¡Zle EeKd>¡Zme EeJdd?¡Zne Eend@¡Zoe EendA¡Zpe EendB¡Zqe EendC¡Zre EendD¡Zse EendE¡Zte EendF¡Zue EendG¡Zve EendH¡Zwe EendI¡Zxe Ee FeG¡ddd¡Zye EeydddJ¡Zze EeJdKdL¡Z{e Ee FejG¡ddM¡Z|dN\Z}Z~dOZdPZ€dQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdngZ�dÂdodp„Z‚dqdr„ ZƒdÃdtdu„Z„ej…j†ej‡dvdw„ ƒƒZˆej…j†dxdy„ ƒZ‰dzd{„ ZŠej‡d|d}„ ƒZ‹ej‡d~d„ ƒZŒej‡d€d�„ ƒZ�ej…j†ej‡d‚dƒ„ ƒƒZŽej…j†eCej‡d„d…„ ƒƒƒZ�ej…j†ej‡d†d‡„ ƒƒZ�ej‡dˆd‰„ ƒZ‘ej…j†ej‡dŠd‹„ ƒƒZ’dŒd�„ Z“ej‡dŽd�„ ƒZ”ej‡d�d‘„ ƒZ•ej–d’fd“d”„Z—eCej‡ej… ˜d•d–¡ej… ˜d—g d˜gf¡d™dš„ ƒƒƒƒZ™ed›dœ„ ƒZšeCej…j†ej‡d�dž„ ƒƒƒZ›ej…j†ej‡dŸd „ ƒƒZœej…j†ej‡d¡d¢„ ƒƒZ�ej‡d£d¤„ ƒZžej‡d¥d¦„ ƒZŸej‡ej… ˜d§edg dddd¨gddd©f	eddªgd«d«dd¨gddd©f	e{g dddd¬hddd©f	e{g ddd«d­gddd©f	eddªgd«d«dd¨gd«d®d©f	eddªgd«d«dd¨gd«d®df	g¡d¯d°„ ƒƒZ d±d²„ Z¡ej… ˜d³d´dµg¡d¶d·„ ƒZ¢ej‡ej… ˜d—d¸¡d¹dº„ ƒƒZ£ej‡ej…j†ej… ˜d»d¼¡ej… ˜d½d¾¡ej… ˜d¿d¾¡dÀdÁ„ ƒƒƒƒƒZ¤dS )Äé    )ÚcontextmanagerN)Úassert_allcloseÚassert_array_equal)Úsparse)Úsph_harm)Úcompute_raw_covarianceÚ
pick_typesÚconcatenate_rawsÚ	pick_info)Ú_annotations_starts_stops)Úread_head_posÚfilter_chpi)Ú_prep_meg_channels)Útesting)Úuse_coil_def)Úread_raw_fifÚ	read_infoÚread_raw_btiÚread_raw_kitÚBaseRawÚread_raw_ctf)ÚFIFF)Úmaxwell_filterÚfind_bad_channels_maxwellÚannotate_amplitudeÚcompute_maxwell_basisÚ maxwell_filter_prepare_emptyroomÚannotate_movement)	Ú_get_n_momentsÚ_sss_basis_basicÚ_sh_complex_to_realÚ_sh_real_to_complexÚ
_sh_negateÚ_bases_complex_to_realÚ_trans_sss_basisÚ_bases_real_to_complexÚ_prep_mf_coils)Ú_get_rank_sssÚ_compute_rank_intÚcompute_rank)Úassert_meg_snrÚcatch_loggingÚ_record_warningsÚobject_diffÚbuggy_mkl_svdÚuse_log_levelz..ÚioÚtestsÚdataztest_raw.fifF)ÚdownloadÚSSSZtest_move_anon_zraw.fifzstdOrigin_raw_sss.fifznonStdOrigin_raw_sss.fifzbadRecon_raw_sss.fifzregIn_raw_sss.fifzfineCal_raw_sss.fifzcrossTalk_raw_sss.fifztransDefault_raw_sss.fifztransSample_raw_sss.fifz$st1FineCalCrossTalkRegIn_raw_sss.fifz/st1FineCalCrossTalkRegInTransSample_raw_sss.fifzmovecomp_raw_sss.fifzmovecomp_regIn_raw_sss.fifzmovecomp_regIn_st4s_raw_sss.fifÚmisczintervalrecording_raw.fifzerm_raw.fifzerm_devOrigin_raw_sss.fifzerm_regIn_raw_sss.fifzerm_fineCal_raw_sss.fifzerm_crossTalk_raw_sss.fifzerm_st1_raw_sss.fifz#erm_st1FineCalCrossTalk_raw_sss.fifz(erm_st1FineCalCrossTalkRegIn_raw_sss.fifZMEGÚsamplezsample_audvis_trunc_raw.fifz%sample_audvis_trunc_regIn_raw_sss.fifzsample_audvis_trunc_raw_sss.fifztest_move_anon_raw.poszsss_data.matzsss_cal_3053.datzsss_cal_3053_3d.datzct_sparse.fifzsss_cal_mgh.datzct_sparse_mgh.fifZTRIUXztriux_bmlhus_erm_raw.fifztriux_bmlhus_erm_raw_sss.fifz"triux_bmlhus_erm_regIn_raw_sss.fifz triux_bmlhus_erm_st4_raw_sss.fifz triux_bmlhus_erm_ctc_raw_sss.fifz triux_bmlhus_erm_cal_raw_sss.fifz$triux_bmlhus_erm_ctc_cal_raw_sss.fifz*triux_bmlhus_erm_ctc_cal_regIn_raw_sss.fifzct_sparse_BMLHUS.fifzsss_cal_BMLHUS.datztest_ctf_comp_raw.fifZCTFztestdata_ctf.dszcoil_def_Elekta.dat)é   é   ©ç        r:   ç{®Gáz¤?)r:   g9´Èv¾ŸŠ?gú~j¼t“x¿ZMEG0912ZMEG1722ZMEG2213ZMEG0132ZMEG1312ZMEG0432ZMEG2433ZMEG1022ZMEG0442ZMEG2332ZMEG0633ZMEG1043ZMEG1713ZMEG0422ZMEG0932ZMEG1622ZMEG1343ÚMEG0943ZMEG0643ZMEG0143ZMEG2142ZMEG0813ZMEG2143ZMEG1323ZMEG0522ZMEG1123ZMEG0423ZMEG2122ZMEG2532ZMEG0812c                 C   sV   |dkr|n|}| j d d d d d }||  kr>|ksRn td|||f ƒ‚dS )zCheck the DOF.NÚproc_historyr   Úmax_infoÚsss_infoÚnfreeznfree fail: %s <= %s <= %s)ÚinfoÚAssertionError)Úraw_sssÚlowerÚupperZn_free© rF   úc/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/preprocessing/tests/test_maxwell.pyÚ_assert_n_freez   s
    ÿrH   c                    s:   d}t ˆ ddd�}t‡ fdd„|D ƒƒ}||hks6t‚d S )NTÚmagrF   ©ÚmegÚexcludec                 3   s   | ]}ˆ d  | d V  qdS )ÚchsÚ	coil_typeNrF   ©Ú.0Úpick©rA   rF   rG   Ú	<genexpr>…   s     z(_assert_mag_coil_type.<locals>.<genexpr>)r   ÚsetrB   )rA   rN   Ú__tracebackhide__ÚpicksZ
coil_typesrF   rR   rG   Ú_assert_mag_coil_type‚   s    rW   ©r   Nc                 C   s   t | dd�j|Ž S )zRead and crop.Úyes)Úallow_maxshield)r   Úcrop)ÚfnameÚlimsrF   rF   rG   Ú	read_crop‰   s    r^   c              	   C   sF  t | ƒ}d}tt|ƒ ¡ }ttƒ}t|jtj	ƒ t
|jd d d ddd� tj|jd d d< t||td	d
d�}t|jtj	ƒ t|tt|ƒdddd� t |d¡}| |¡ t|ƒ}t|tt|ƒdddd� t||td�}t|tt|ƒdddd� t| ¡ dd�}tjtdd�� t||dtdd�}W 5 Q R X t|tt|ƒddƒ t td¡}	t|t|	|ƒddd	d� tttƒt|	ƒd dd	d� t||dtd!�}
t|
t|	|ƒddd	d� t|
|dd"ƒ ttƒ}tjtd#d�� t|d$|d%� W 5 Q R X tjtd&d��" t||d	d	…d	d'…f d(� W 5 Q R X tjtd)d�� t|d*d(� W 5 Q R X tjtd+d�� t||d	d	d,… d(� W 5 Q R X | ¡ }|jd- |d.< tjtd/d�� t||d(� W 5 Q R X | ¡ }d|d< tjtd0d��  t| ¡   d1d2¡|d
d3� W 5 Q R X | ¡ }|jd4 |d.< t| ¡   d1d5¡|td�}t|| ¡   d1d5¡d"d6d7d� d	S )8zTest movement compensation.)r   é   rM   é   ÚcalgÓfS2ˆÂÆ=ç�íµ ÷Æ°>©ÚrtolrN   NÚignore)Úhead_posÚoriginÚ
regularizeÚbad_conditiongffffff@gÍÌÌÌÌÌ(@é:   )Zchpi_med_tolútest_raw_sss.fif)rf   rg   ç      à?gffffffþ?éy   çš™™™™™É?)Zt_windowZuntested©Úmatchç      @F)rf   Úst_durationrg   Úst_fixedç333333ã?gÍÌÌÌÌÌô?ztest_move_anon_st4s_raw_sss.fifç      ð?gš™™™™™é?)rf   rr   rg   gffffffö?zpositions can only be usedrK   )Úcoord_framerf   zof shape \(N, 10\)é	   ©rf   zinstance of ndarrayÚfooZ	ascendingéÿÿÿÿç{®Gáz„?)r   r   zgreater thanzgreater than 1 mr   çš™™™™™¹?)rf   ri   gü©ñÒMb@?gš™™™™™©?ç       @é   )!Ústrr^   Ú	raw_fnameÚ	load_datar   Ú	pos_fnamerW   rA   r   ÚFIFFV_COIL_VV_MAG_T3r   ZFIFFV_COIL_VV_MAG_T2r   Úmf_head_originr*   Ússs_movecomp_fnameÚopÚjoinÚsaveÚsss_movecomp_reg_in_fnamer   ÚcopyÚpytestÚwarnsÚRuntimeWarningÚsss_movecomp_reg_in_st4s_fnameÚsss_pathÚ	erm_fnameÚraisesÚ
ValueErrorÚ	TypeErrorÚ_first_timer[   )Útmp_pathÚtemp_dirr]   Úrawrf   rC   Ú
temp_fnameZ	raw_nohpiZ
raw_sss_mvÚ
tSSS_fnameZ
raw_sss_mcÚraw_ermZhead_pos_badZraw_sss_tweakrF   rF   rG   Útest_movement_compensationŽ   s¼     ÿ  ÿ
  ÿ  ÿ þ ÿ  ÿ   ÿÿ  ÿÿ& ÿ  ÿÿr›   c               
   C   sÊ  t  tddd¡} t  | d¡}t  | d¡}t  | d¡}t  | d¡}t||||ƒ}tjtdd	�� t tt	|¡ W 5 Q R X t
ƒ �}t	|d
ddd�}W 5 Q R X d| ¡ ks¨t‚t|ddƒ t	|d
ddd�}t|j|jƒ tjtdd	��> t
ƒ �,}tjtt	|ddd� t	|ddddd�}W 5 Q R X W 5 Q R X | ¡ }d|k�s:t‚d|k�sHt‚t|ddƒ t
ƒ �}t	|d
ddddd�}W 5 Q R X | ¡ }d|k�s�t‚d|k�sžt‚t|dƒ t
ƒ �}t	|d
ddd�}W 5 Q R X | ¡ }d|k�sàt‚d|k�sît‚t|dƒ t  tddd¡}	t  |	d¡}
t  |	d¡}t  |	d ¡}t|
||d!d"�}t|jd#d$d%�}t t || d& d' ¡¡}t	|ƒ}t|d(ƒ t||d)ƒ t	|ddd*�}t||d+ƒ ttƒ}|jd,k�s¸t‚tjtd-d	�� t	|ƒ W 5 Q R X | d&¡ tjtd.d	�� t	|ƒ W 5 Q R X t	|d
d/�}t|d0ƒ t||d1ƒ t
ƒ �}t	|d
ddd�}W 5 Q R X d2| ¡ k�s\t‚t|d(ƒ t||d3ƒ t	|d
ddd�}t|j|jƒ t
ƒ �}t	|d
dddd4� W 5 Q R X d| ¡ k�sÆt‚dS )5z2Test Maxwell filtering on KIT, BTI, and CTF files.Zkitr1   r2   ztest.sqdztest_mrk.sqdztest_elp.txtztest_hsp.txtÚfitro   r9   T)rg   Ú
ignore_refÚverbosez	12/15 outéA   Úauto)rg   r�   Ú	mag_scalezmore than 20 mmN)r�   rh   rA   )rg   r�   ri   rž   zbadly conditionedzmore than 20 mm fromé   é"   )rg   r�   ri   rh   rž   z80/80 in, 12/15 outéP   ZbtiZtest_pdf_linuxZtest_config_linuxZtest_hs_linuxF©ZpreloadrI   rF   rJ   r   r`   éF   rl   )r¡   rž   gffffffæ?r8   Zcompensatedzdigitization points©rg   éD   gÍÌÌÌÌÌü?z, 12/15 outé   )rg   rh   r�   rž   )r†   r‡   Úio_dirr   r‹   rŒ   r�   r‘   ÚRuntimeErrorr   r+   ÚgetvaluerB   rH   r   Ú_datar   r   rA   ÚnpÚsqrtÚsumÚ_assert_shieldingr^   Úfname_ctf_rawZcompensation_gradeÚapply_gradient_compensationr’   )Zkit_dirZsqd_pathZmrk_pathZelp_pathZhsp_pathZraw_kitÚlogrC   Zraw_sss_autoZbti_dirZbti_pdfZ
bti_configZbti_hsZraw_btirV   ÚpowerÚraw_ctfrF   rF   rG   Útest_other_systemsé   sÀ     ÿ ÿ
 ÿ þ  þ
 ÿ



 ÿ
 ÿ ÿr·   c               	   C   s°   t  t  ddt j d¡t  dt jd¡¡\} }tdtƒD ]t}td|d ƒD ]`}t||| |ƒ}tt||ƒt| || |ƒƒ t	||ƒ}t	|| ƒ}t
||g|ƒ}t||dd� qHq6dS )	z$Test spherical harmonic conversions.r   r`   é   é   é   çH¯¼šò×z>©ÚatolN)r®   ZmeshgridZlinspaceÚpiÚrangeÚ	int_orderr   r   r"   r    r!   )ÚazZpolZdegreeÚorderZsphZsph_real_posZsph_real_negZsph_2rF   rF   rG   Útest_spherical_conversionsD  s    ÿ
ÿ
rÃ   c               
   C   s(  ddl m}  ttƒ}ttƒ� t|dd�d }W 5 Q R X | tƒ}tt	t
d�}dD �]Ð}d dd	„ |D ƒ¡}|j|d
� t||dd�}t|t	t
ƒ}t|t	t
ƒ}	t||	dd� tj|d|  |d|  gdd�}
t|
t	t
ƒ}t|t	t
ƒ}t|
|dd� t||
ddd� t||ddd� |t tj|| dd�¡tj  }|t tj|| ¡  jdd�¡tj  }tj|d|  |d|  gdd�}
t|
t	t
ƒ}t|t	t
ƒ}t|
|dd� t||
ddd� t||ƒ}ttƒ� t|t|ƒ|d d�}W 5 Q R X t |d ¡t |d ¡k}dd|  }t||| dd� qPdS )zBTest multipolar moment basis calculation using sensor information.r   )ÚloadmatT)Zdo_es)rÀ   Ú	ext_order))r   r   r;   )r   ç{®Gáz”?rÆ   Ú c                 s   s   | ]}d d|  V  qdS )z%diè  NrF   )rP   ÚnrF   rF   rG   rS   b  s     z(test_multipolar_bases.<locals>.<genexpr>r§   Úalternative)Úmethodr»   r¼   ZSinZSoutrº   )Zaxisg-Cëâ6?g:Œ0âŽyE>©rd   r½   ZSNinZSNoutÚ
dev_head_t)Ú	all_coilsÚtransr`   g¼‰Ø—²Òœ<N)Zscipy.iorÄ   r   r€   r   Úelekta_def_fnamer   Úbases_fnameÚdictrÀ   rÅ   r‡   Úupdater   r%   r#   r   r®   Zconcatenater¯   r°   ZnewaxisZconjÚrealr$   r&   Úsign)rÄ   rA   ZcoilsZsss_dataÚexprg   Zo_strÚS_totZS_tot_complexZS_tot_roundZ	S_tot_matZS_tot_mat_realZS_tot_mat_roundZ
S_tot_fastZflipsrF   rF   rG   Útest_multipolar_basesV  s€    

 ÿ
ÿÿ ÿ ÿ"
 ÿÿ
ÿÿ ÿ ÿ

  ÿr×   c               	      sÆ  t tdƒ} t tƒ ¡ }t tƒ}tjtdd�� t|ƒ W 5 Q R X tjtdd�� tdƒ W 5 Q R X tjt	dd�� t| dd� W 5 Q R X t
d	 d	t
  }td	 d	t  }|| }tt
tgƒ ¡ |ksÈt‚t| jd
 ƒdksÞt‚ttƒ� t| tddd�}W 5 Q R X t|jd
 ƒdk�st‚|jd
 d d dk�s6t‚t|t tƒddƒ |jd d d d }t|ƒdk�spt‚|jd d d d }t|ƒdk�s˜t‚|jd d d d }	t|	ƒdk�sÀt‚tjtdd�� t|ƒ W 5 Q R X ttƒ� t| dddgddd�}W 5 Q R X t|t tƒddƒ t tƒ}
t|dtddd �}t||
d!d"ƒ d#D ]2‰ ‡ fd$d%„||
fD ƒ}|d |d k�sJt‚�qJt| dd&d'�}t| | jd( d) dd*…d*f d+�}t||d,d-ƒ tt
ƒt|ƒk�sÒt‚tjt	d.d�� t| d/d0� W 5 Q R X tjt	d1d�� t| d/d+� W 5 Q R X tjt	d2d�� t| dgd3 d+� W 5 Q R X tjt	d4d�� t| d/d5� W 5 Q R X |  ¡  ¡ }d6g|jd7< |jd8d9� t|ƒ tjtd:d�� t|td;� W 5 Q R X dS )<z"Test Maxwell filter basic version.©r:   ru   zcannot be appliedro   zinstance of BaseRawru   zNumber of requested basesr¹   )rÀ   r`   Úprojsr©   Nre   ©rg   rh   ri   rº   r   ÚdesczAverage EEG referenceç      i@ç     @�@r=   r>   Ússs_calÚsss_ctcÚmax_stzcannot reapplyr:   rÆ   g     @o@ç     à…@rK   )rv   rg   rh   ri   g     €Q@g     @p@)ZjobÚframec                    s&   g | ]}|j d  d d d ˆ  ‘qS )r=   r   r>   r?   rR   )rP   Úx©ÚkeyrF   rG   Ú
<listcomp>Æ  s   ÿztest_basic.<locals>.<listcomp>©r:   r:   r:   ©rv   rg   rÌ   rÎ   r8   r§   ç      Y@g      Œ@zInvalid valuery   ©rv   znumerical arrayz3-element arrayr_   zmust be a float)r¡   ÚMEG0111ÚbadsT©rK   znot in data)Úcalibration) r^   r€   Z
apply_projr�   r‹   r‘   r«   r   r“   r’   rÀ   rÅ   r   r°   rB   ÚlenrA   r   rÏ   r„   r*   Ússs_std_fnameÚsss_nonstd_fnameÚsss_erm_std_fnameÚmf_meg_originr'   rŠ   r�   r   rŒ   r�   Úfine_cal_fname)r—   Zraw_errrš   Zn_int_basesZn_ext_basesZnbasesrC   Úpy_calÚpy_ctcÚpy_stZsss_erm_stdÚvalsZraw_sss_megZraw_sss_headÚraw_missingrF   rä   rG   Ú
test_basic“  sŽ    

ÿ
ÿ þ
ÿ  ÿ ÿrú   c                 C   sú   d}t  td|d ¡}t|dƒ}| ¡  |jddd� d}t|td	d
d�}t| ƒ}t  |d¡}| 	|¡ t|ƒ ¡ }t
|d	d	… d |d	d	… d ddd� t|ƒ}	t|ƒ}
d	}t|	||jdd�}t|
||jdd�}||jd ksæt‚|t|ƒksöt‚d	S )z)Test processing of Maxwell filtered data.Ztest_move_anonr4   z_raw.fif)r:   ç       @TF©rK   Úeegr7   Nre   rÚ   rk   r   rb   ç#B’¡œÇ;rË   )ÚscalingsrA   ÚprojZnchan)r†   r‡   Ú	data_pathr^   r�   r   r   r„   r   rˆ   r   r   r(   rA   rB   r   )r•   Ú	file_namer€   r—   rÀ   rC   ÚtempdirZtest_outnameZraw_sss_loadedZcov_rawZcov_sssrÿ   Zcov_raw_rankZcov_sss_rankrF   rF   rG   Útest_maxwell_filter_additionalæ  sD    
ÿ
 ÿ   ÿ   ÿr  c               	   C   sL   t tdƒ} t| jd< ttƒ� t| tddd�}W 5 Q R X t|t t	ƒdƒ dS )z3Test Maxwell filter reconstruction of bad channels.rØ   rì   Nre   rÚ   g     Àr@)
r^   r€   rì   rA   r   rÏ   r   r„   r*   Ússs_bad_recon_fname)r—   rC   rF   rF   rG   Útest_bads_reconstruction  s    


ÿr  c            
   	   C   s  t tƒ} tjtdd�� t| dd� W 5 Q R X dg}dg}ttddd	�}t||ƒD ]ž\}}t	 
td
| ¡}t |ƒ}t| fd|i|—Ž}t|dd�dksšt‚t||f|žŽ  |jd d d d }	t|	ƒdksÐt‚|	d |ksàt‚|	d dksRt‚qRtjtdd�� t| ddd� W 5 Q R X dS )z5Test Maxwell filter (tSSS) spatiotemporal processing.zmust bero   rÝ   ©rr   rq   )r¤   éd   Nre   rÚ   z!test_move_anon_st%0ds_raw_sss.fifrr   F©r   éŒ   r=   r   r>   rà   ÚbuflenZ	subspcorrg\�Âõ(\ï?zNeed 0 < st_correlationç      $@r:   )rr   Úst_correlation)r^   r€   r‹   r‘   r’   r   rÑ   r„   Úzipr†   r‡   r�   r(   rB   r*   rA   rï   )
r—   Zst_durationsZtolsÚkwargsrr   Ztolr™   Z
tsss_benchÚraw_tsssr÷   rF   rF   rG   Útest_spatiotemporal  s8    ÿÿ
ÿÿÿr  c               	      sŽ  d} t td| fƒ ¡ ‰ tˆ jddd�ddd… }ˆ  ‡ fdd	„|D ƒ¡ tˆ jd
dd�}t t ˆ | d d ¡¡}t	ˆ | d dd�}t
ˆ jd ƒt
|jd ƒks¦t‚t|dd�t
|ƒks¾t‚t||dƒ ttƒ}t	ˆ | d d|d�}t|dd�t
|ƒksþt‚t||dƒ tjtdd�� t	ˆ | d d|dd�}W 5 Q R X t|dd�t
|ƒk�sTt‚t||dƒ t	ˆ | ddd�}tˆ dd… d |dd… d ƒ tjtt	ˆ dd� t	ˆ | dd�}t	|ƒ}t	ˆ | d�}t||dƒ t
ˆ jd ƒdk�sêt‚ˆ jd g}t|ƒˆ jd< t	ˆ | d|d�}ˆ jd |k�s(t‚|jd |k�s<t‚t	||d�}|jd g k�s\t‚t	ˆ | |d�}|jd g k�s~t‚t||dƒ dS )zTest tSSS-only processing.rl   r   Trì   rJ   Nr`   c                    s   g | ]}ˆ j | ‘qS rF   ©Úch_namesrO   ©r—   rF   rG   ræ   T  s     z,test_spatiotemporal_only.<locals>.<listcomp>rI   rF   rû   )rr   Úst_onlyrÙ   Fr	  rw   )rr   r  rf   rs   ro   )rr   r  rf   rs   ru   )rr   r  r  )r  r  g     jø@rx   )rr   rf   )r^   r€   r�   r   rA   Úpick_channelsr®   r¯   r°   r   rï   rB   r(   r±   r   r‚   r‹   rŒ   r�   r   r‘   r’   r*   r  Úlist)ZtmaxrV   Z	mag_picksrµ   r  rf   Z
raw_tsss_2rì   rF   r  rG   Útest_spatiotemporal_onlyL  sZ     ÿ ÿÿ"ÿr  c               
   C   sä  t tdƒ} t tƒ}ttƒ�, tƒ �}t| ttdddd�}W 5 Q R X W 5 Q R X | 	¡ }d|ks`t
‚t t¡|ksrt
‚t||ddƒ |jd	 d
 d d }|dk	s¢t
‚t|ƒd
ks²t
‚|jd	 d
 d d }d|d |d dd…df dkdf< t|d |d ƒ t|d |d ddd� |  ¡  ¡ }ddg|jd< |j ¡  t|ttddd�}|jdd� | |j¡ tjtdd�� t|ttddd�}W 5 Q R X t||ddƒ t| ttddd�}	t|	|ddƒ t tƒ d
¡}
tjtt|
dtd � dS )!z%Test Maxwell filter fine calibration.rØ   Nre   T)rî   rg   rh   ri   rž   zUsing fine calibrationéR   ic  r=   r   r>   rÞ   iÐ  Z	cal_chansrº   iÎ  Z	cal_corrsgü©ñÒMbP?rË   rë   r<   rì   )rî   rg   rh   ri   rí   zcal channels not in dataro   rÝ   g     ˆÃ@ru   ç      @r9   )rg   rî   )r^   r€   Ússs_fine_cal_fnamer   rÏ   r+   r   rô   r„   r¬   rB   r†   Úbasenamer*   rA   rï   r   rŠ   r�   Z_check_consistencyr   r  r  r‹   rŒ   r�   Úfine_cal_fname_3dr²   r³   r‘   r«   )r—   Zsss_fine_calr´   rC   rõ   Zmf_calrù   Zraw_sss_badZraw_sss_missingZ
raw_sss_3Dr¶   rF   rF   rG   Útest_fine_calibration�  sn    

  þ$ ÿ
   þ   þ þÿr  c                  C   sš   d} d}d}d}t ttf}tttf}dddg}t|ƒD ]^\}}t|dƒ}	t|| ƒ}
t|	|| || d	�}t	||
| | || |d
� t
||
|| ƒ q6dS )z#Test Maxwell filter regularization.)g      4@gÍÌÌÌÌÌ@ru   )rÜ   g      5@gš™™™™™@)r9   rç   )r:   rÆ   rÆ   )ÚheadrK   r  r   rº   r_   rØ   rè   ©ÚmsgN)r€   r�   Úsample_fnameÚsss_reg_in_fnameÚsss_erm_reg_in_fnameÚsss_samp_reg_in_fnameÚ	enumerater^   r   r*   Ú_check_reg_match)Zmin_tolsZmed_tolsÚoriginsÚcoord_framesÚ
raw_fnamesÚ
sss_fnamesZ	comp_tolsÚiiÚrfr—   Z
sss_reg_inrC   rF   rF   rG   Útest_regularizationµ  s"    
ÿ


ÿr.  c                 C   sÆ   | j d d d d }|dk	s"t‚t|ƒdks2t‚|j d d d d }d}||fD ]N}|dkrnt|d ƒ}n|t|d ƒks‚t‚|d d|…  ¡ |d ksTt‚qTt|d |d || jd d	� dS )
zCheck regularization.r=   r   r>   r?   NZin_orderÚ
componentsr@   )r½   Úerr_msg)rA   rB   rï   r   r°   r   Z
_filenames)Ússs_pyÚsss_mfZcomp_tolZinfo_pyZinfo_mfZn_inÚinfrF   rF   rG   r'  Ï  s    " ÿr'  c              	      sF  t tdƒ‰ tˆ jd< t tƒ}ttƒ� tˆ t 	t
¡tddd�}W 5 Q R X t||dƒ |jd d d	 d
 }t|ƒdkszt‚tjtdd�� tˆ ˆ d� W 5 Q R X tjttˆ td� |jd d d	 d
 }|d= t|d tjƒsât‚t|d tjƒsöt‚t|d  ¡ |d  ¡ ƒ t| ƒ}t |d¡}| |¡ t|ƒ}|jd d d	 d
 }t|d tjƒ�sbt‚t|d  ¡ |d  ¡ ƒ t||ƒdk�s�t‚t tƒ d¡}	t|	dd�}t |dƒ t|	ddd�}t |dƒ ˆ  !¡  "dd¡ #¡  $‡ fdd„t%ˆ jddd�dd… D ƒ¡}
tj&t'dd�� t|
t
d� W 5 Q R X tjt(t|	dt
d� dS ) z,Test Maxwell filter cross-talk cancellation.rØ   rì   Nre   )Ú
cross_talkrg   rh   ri   g     0q@r=   r   r>   rß   z	path-likero   ©r4  Zblock_idZ	decouplerztest_sss_raw.fifrÇ   r9   r§   r¨   T)rg   r�   r¦   r|   c                    s   g | ]}ˆ j | ‘qS rF   r  )rP   r¾   r  rF   rG   ræ     s     z#test_cross_talk.<locals>.<listcomp>rF   rJ   r8   zNot all cross-talk channels)rg   r4  ))r^   r€   rì   rA   Ússs_ctc_fnamer   rÏ   r   ÚpathlibÚPathÚ	ctc_fnamer„   r*   rï   rB   r‹   r‘   r“   r’   Ú
isinstancer   Z
csc_matrixr   Ztoarrayr   r†   r‡   rˆ   r   r-   r²   r³   rH   rŠ   r[   r�   r  r   rŒ   r�   r«   )r•   rß   rC   rö   Zmf_ctcr  r\   Zsss_ctc_readZmf_ctc_readr¶   rù   rF   r  rG   Útest_cross_talkà  sb    


 þ
ÿ

ÿ

ÿÿ
ÿÿr;  c               
   C   sJ  t tdƒ} ttƒ� t| ttddd�}W 5 Q R X t|t tdƒdƒ ttƒ�4 tj	t
dd�� t| ttdddd	�}W 5 Q R X W 5 Q R X t|t tƒd
ƒ t d¡}d|d< t|jd d |ƒ tj	t
dd�� t| ttdddd	�}W 5 Q R X t|t tƒddƒ t|jd d ttƒd d ƒ tjtt| tdd� tjtt| dgd d� dS )z%Test Maxwell filter head translation.rØ   Nre   )Údestinationrg   rh   ri   rÜ   z
over 25 mmro   T)r<  rg   rh   ri   rž   g     @_@r_   r;   )r`   r8   rÌ   rÎ   z	= 25.6 mmg      *@ré   rK   )r<  rv   r:   )r<  )r^   r€   r   rÏ   r   r„   r*   rð   r‹   rŒ   r�   Ússs_trans_default_fnamer®   Úeyer   rA   r"  Ússs_trans_sample_fnamer   r‘   r«   r’   )r—   rC   r<  rF   rF   rG   Útest_head_translation  sH    

 þ
  þ
  þÿ
 ÿr@  rI   c           
      C   sª   d}t | j|dd�}t|tƒrRt | j|dd�}t||ƒ t || d d  ¡ ¡}| | d  ¡ }t t || ¡¡}|| }	||	  kr’|k s¦n t	d||	|f ƒ‚dS )z9Assert a minimum shielding factor using empty-room power.TF©rK   Zref_megr   r`   z+Shielding factor not %0.3f <= %0.3f < %0.3fN)
r   rA   r:  r   r   r®   r¯   r°   ZravelrB   )
rC   Ú	erm_powerZ
min_factorZ
max_factorrK   rU   rV   Z	picks_ermZ	sss_powerÚfactorrF   rF   rG   r±   5  s    

ÿÿr±   rh   )ÚinNrì   rë   c              	   C   s  t tƒ ¡ jdd�}||jd< tj|ddddd�}t|jt|jdd�ƒ}tt	dd	d
d�t
|ƒddd�}|jd t|ƒks|t‚t||jƒD ]\}}||d d dd…< qˆtƒ �}t|d| dd�}	W 5 Q R X | ¡ }d|ksÜt‚tƒ �}t|d| d|dd�}
W 5 Q R X | ¡ }d|k�st‚t|
j|	jdd� |jd dg |jd< t|d|d� |dd… }|d d d dd… |d d d< tjtdd�� t|d|d� W 5 Q R X d|d< tjtdd�� t|d|d� W 5 Q R X tjtdd�� t|ddd� W 5 Q R X dS ) zTest extended-basis SSS.Trí   rì   ÚcombinedÚerroré   ©rK   rž   Zn_magZn_gradr   r8   rç   )rÀ   rÅ   rg   ru   N)rÍ   Z
coil_scalerÎ   rz   r2   rK   )rv   rh   rž   Úxtend)rv   rh   rÅ   Úextended_projrž   z0Extending external SSS basis using 15 projectionrþ   r¼   ZMEG0112©rv   rJ  r`   Z	col_nameszwere missingro   z"extended_proj\[0\] must be an instzextended_proj must be an inst)r^   r�   r�   r   rA   ÚmneÚcompute_proj_rawr
   r$   rÑ   r&   Úshaperï   rB   r  ÚTr+   r   r¬   r   r­   r‹   r‘   r’   r“   )rh   rì   rš   Zproj_sssZ	good_inforÖ   ÚaÚbr´   rC   Z	raw_sss_2rF   rF   rG   Ú	test_esssF  sX    

 ÿ  þ ÿ  þ$rR  c               
   c   sˆ   t ƒ } tdƒ� tƒ �}| V  W 5 Q R X W 5 Q R X | ¡ }d|ksFt‚| ¡ }t d¡}|D ]&}| |¡}|r\|  	t
| d¡ƒ¡ q\dS )z9Get the number of projected tSSS components from the log.TzProcessing data using tSSSz/\s+Projecting\s+([0-9])+\s+intersecting tSSS .*rº   N)r  r/   r+   r¬   rB   Ú
splitlinesÚreÚcompilerp   ÚappendÚintÚgroup)Úcountr´   ÚregÚlineÚmrF   rF   rG   Úget_n_projectedu  s    


r]  c                 C   s
  t tƒ ¡ jdd�}|t|jdd� d }t t || ¡¡}|t|jdd� d }t t || ¡¡}tt t	ƒ|dƒ t
|ddd	�}t||d
dƒ t||dddƒ t
|dddd�}t||ddƒ ~tt t	ƒ|dƒ t
|dd�}t||ddƒ tj|ddddd�}t
|dd|dd… d�}t||ddƒ t
|dd|d�}t||ddƒ t
|d|dd… d�}t||dd ƒ t
|d|d�}t||d!d"ƒ t
|ddd#d$�}t||d
dƒ t||d%d&dƒ t
|dddd$�}t||d'd(ƒ t||d)d*dƒ t
|ddd+d,d-�}t||d.d/ƒ t||d0d)dƒ tt tƒ|d
ƒ t
|ddtt t¡d1�}t||d
dƒ tt tƒ|d
ƒ t
|ddttd2�}t||d
dƒ t
|ddtttd3�}t||dd4ƒ t
|ddttt|d5�}t||d6d7ƒ t
|ddttt|dd… d5�}t||d8d9ƒ tt tƒ|d:ƒ t
|ddtdd;�}t||d:dƒ tƒ �}t
|ddttdd<�}W 5 Q R X t||ddƒ |d d=k�s`t‚tƒ �}t
|ddttdd>�}W 5 Q R X t||ddƒ |d d=k�s¦t‚tƒ �}t
|ddtd|d?�}W 5 Q R X t||d@dƒ |d dk�sìt‚tƒ �"}t
|ddtd|dd… d?�}W 5 Q R X t||dAd:ƒ |d dBk�s:t‚tt tƒ|dd@ƒ t
|ddtttddC�}t||dd@ƒ tt tƒ|dd@ƒ t
|ddtttd|dd… dD�}t||dEdFƒ tt tƒ|dGdHƒ t
|ttdtddIdJ�}t||dKdLƒ tƒ �}t
|ttdddIdM�}W 5 Q R X t||dHd!ƒ t||dNdOdƒ |d d=k�s<t‚tƒ �}t
|ttdddId#dP�}W 5 Q R X t||ddQƒ t||dRdNdƒ |d dk�s”t‚tƒ �,}tƒ � t
|ttdddIdM�}W 5 Q R X W 5 Q R X t||dGdHƒ |d dk�sìt‚t| ƒ}t |dS¡}	ttdTƒ�N}
t|	dUƒ�8}|
D ],}| dV |  ¡  !dV¡dd4… ¡dW ¡ �qW 5 Q R X W 5 Q R X tƒ �,}tƒ � t
||	tdddIdM�}W 5 Q R X W 5 Q R X t||d dXƒ |d dk�s¶t‚tƒ �$}t
|ttdddI|dd… dY�}W 5 Q R X t||dZd[ƒ |d dBk�st‚dS )\z6Test Maxwell filter shielding factor using empty room.Trí   rI   r   Zgradé
   rK   N©rv   rh   r©   é   gÍÌÌÌÌÌÜ?gš™™™™™á?)rv   rh   rÅ   ru   gš™™™™™ñ?rê   g      -@g      /@rE  rF  rG  rH  r8   )rv   rh   rJ  é&   é'   é1   é3   rK  é*   é,   é;   é=   r    )rv   rh   r¡   g¸…ëQ¸Þ?g�Âõ(\�â?g333333@r}   rn   ç333333Ó?rÝ   re   )rv   rh   r¡   ri   rq   ç      @r|   )rv   rh   rg   rî   )rv   rh   rg   r4  )rv   rh   rî   rg   r4  é   )rv   rh   rî   rg   r4  rJ  r¢   r¸   é   é   é%   )rv   rh   rg   rr   )rv   rh   r4  rg   rr   r_   )rv   rh   rî   rg   rr   )rv   rh   rg   rr   rJ  é(   é#   rº   )rv   rh   rî   rg   r4  rr   )rv   rh   rî   rg   r4  rr   rJ  r£   é$   é9   rj   rD  )rî   r4  rr   rg   rv   rh   é5   é6   )rî   r4  rr   rv   rh   gš™™™™™ù?g333333û?)rî   r4  rr   rv   rh   r¡   é4   g      ø?ztest_cal.datÚrÚwú Ú
é-   )rî   r4  rr   rv   rh   rJ  é0   é2   )"r^   r�   r�   r   rA   r®   r¯   r°   r±   rò   r   rL  rM  Ússs_erm_fine_cal_fnameró   r7  r8  rô   Ússs_erm_ctc_fnamer9  Ússs_erm_st_fnamer]  rB   Ú!sss_erm_st1FineCalCrossTalk_fnameÚ&sss_erm_st1FineCalCrossTalkRegIn_fnamer,   r  r   r†   r‡   ÚopenÚwriteÚstripÚsplit)r•   rš   rB  Zerm_power_gradrC   Z	raw_sss_0r   Úcountsr–   r˜   ZfidZfid_outr[  rF   rF   rG   Útest_shielding_factor†  s´   ÿ
 ÿ
ÿÿ
ÿÿÿÿ ÿþþý ý 
ý ÿ þ þ þ 
þ  ÿ  þ  ÿ  
ý  ÿ  ý  þ  ý  þ>  þ  
ýr‡  c                  C   sÞ   t t ttf} ttttf}ttttf}d}t	t	t	t
f}d}d}d}dtddf}ttttf}	t| ƒD ]x\}
}t|dƒ}tƒ �4 t|||
 ||
 ||
 ||
 ||
 |	|
 d�}W 5 Q R X t||
 ƒ}t||||
 ||
 |d� q`dS )	z&Test maxwell filter using all options.)r  r  rK   r  )ç      @rˆ  g333333ó?gÍÌÌÌÌÌì?)gš™™™™™%@gÍÌÌÌÌÌ$@gš™™™™™	@r  )ru   ru   ru   NNrØ   )rî   r4  rr   rv   r<  rg   r   )r€   r�   r"  Ú"sss_st1FineCalCrossTalkRegIn_fnameÚ-sss_st1FineCalCrossTalkRegInTransSample_fnamer�  Ússs_samp_fnamerô   Úfine_cal_mgh_fnamer9  Úctc_mgh_fnamer„   ró   r&  r^   r,   r   r*   )r*  r+  Z	fine_calsr)  ZctcsZminsZmedsZst_dursÚdestinationsr(  r,  r-  r—   r1  r2  rF   rF   rG   Útest_allY  sH    ýýý
    ýr�  c               	   C   sŠ  t tdƒ} t| jtjƒ t| jd d d ddd� ttƒ� t	| dd	d
�}W 5 Q R X t|jtj
ƒ t|t tƒddƒ t	| dd	td�}t|t tƒddƒ t	| dd	td�}t|t tƒddƒ t	| dd	ttd�}t|t tƒddƒ t	| ddd
�}t tƒ}t||ddƒ t||dƒ t	| ddttd�}t tƒ}t||ddƒ t||dƒ t tƒ ¡ } ttƒ� t	| dd	ddd�}W 5 Q R X t|t tƒddƒ d	S )zTest TRIUX system support.)r   g+‡ÙÎ÷ï?rM   r`   ra   g6µ9€…Gâ=rb   rc   rK   Nr_  rn  i¼  )rv   rh   r4  é   éú   )rv   rh   rî   é   éÈ   )rv   rh   rî   r4  r¢   rD  rt   rw   rº   rq   T)rv   rh   rr   rž   rá   i@  )r^   Ú	tri_fnamerW   rA   r   ZFIFFV_COIL_VV_MAG_T1r   r   rÏ   r   rƒ   r*   Útri_sss_fnameÚtri_ctc_fnameÚtri_sss_ctc_fnameÚtri_cal_fnameÚtri_sss_cal_fnameÚtri_sss_ctc_cal_fnameÚtri_sss_reg_fnamer'  Útri_sss_ctc_cal_reg_in_fnameÚfix_mag_coil_typesÚtri_sss_st4_fname)r—   r1  r2  rF   rF   rG   Ú
test_triux{  sL    

ÿÿþþ
 ÿrŸ  c                  C   s@   t tdƒ} t| td�}|jd d d d }t|ƒdks<t‚dS )zTest cross-talk.rØ   r5  r=   r   r>   rß   N)r^   r€   r   r�  rA   rï   rB   )r—   rC   rö   rF   rF   rG   Útest_MGH_cross_talk¨  s    
r   c               	   C   sn  t tdd�} |  ¡  |  | jdd… ¡ tddddd�}t| fd	d
dœ|—Ž t| fdd
dœ|—Ž tjt	dd�� t| fdd	i|—Ž W 5 Q R X t
| ddd�\}}||  ¡ | jd  dksÂt‚||  ¡ | jd  dksàt‚dD ]œ}t| fd|i|—Ž}t||ƒD ]x\}}| dd…||…f d }|dd…||…f d }	|| | jd  |k�rntj|	|dd��r|t‚nt|	|dd� �qqä|  dd¡ t| fddi|—Ž}t|| ¡ gƒ}
t|  ¡ |  ¡ gƒ}t|fddi|—Ž}t|fdd
dœ|—Ž}|dd… d }|
dd… d }|dd… d }|dd… d }tj||dd��rFt‚tj||dd��r\t‚t||dd� dS )z#Test processing of data with skips.Tr¥   Nr|  rK   r_   r8   )r  rv   rÀ   rÅ   g      1@rF   )rr   Úskip_by_annotationrû   Údurationro   rr   )ÚedgeZbad_acq_skip)ÚinvertÚsfreqç      @)rû   r¦  r   rþ   r¼   rº   ru   )r   Ú
skip_fnamer�  r  r  rÑ   r   r‹   r‘   r’   r   ÚminrA   rB   Úmaxr  r®   Zallcloser   r[   r	   rŠ   )r—   r  ZonsetsZendsrr   rC   ÚstartÚstopZ	orig_dataZnew_dataZraw_sss_concatZ
raw_concatZraw_concat_sssZraw_concat_sss_badZdata_cZdata_scZdata_csZdata_csbrF   rF   rG   Útest_mf_skips±  sP      ÿ
ÿÿr¬  )	r\   rì   ÚannotÚadd_chr�   Ú	want_badsÚreturn_scoresÚh_freqÚ	meas_dateúMEG 2443r—   zMEG 0111TzBR1-4304z
MLC24-4304r|  c	                 C   s~  |   d¡rt| ƒ ¡ }	d}
n"t| ƒ}	|	 ¡  ¡ jddd� d}
|dkrR|	 d¡ n|dks^t‚|	 dd	¡ ||	j	d
< d|	j
|
< |	j|
 g}|	 d¡ d}|rüt| ƒ}|jdddd� ¡  |j	 ¡ � d|j	d< W 5 Q R X | |	g¡}	dt|	j	ddd�ksüt‚|�rZdt|	j	ddd�k�st‚|	jdd… |k�s4t‚|	j
d  tj d¡ t|	jƒ¡7  < |�r¬tt|	j	d d ƒƒ}d|	j	d  }|dk�s’t‚|	j || |	j |d¡ tƒ �"}t|	ddddd||||d�
}W 5 Q R X |�rþt|ƒdk�sòt‚|\}}}nt|ƒdk�st‚|\}}t|tƒ�r4||k�sHt‚n| t|ƒ¡�sHt‚||k�sVt‚|  ¡ }d|k�slt‚d |k�szt‚|dk	�r¢||	j	d k�r¢d!|k�s¢t‚|�rz|	 !¡ jdg d�j}|	 "|¡}t|d" ƒ|k�sÜt‚t|d# ƒ|k�sòt‚t #|d$  $¡ ¡dk %¡ �st‚|d% j&|d& j&  k�rFt|ƒt|d$ ƒfk�sLn t‚|d' j&|d( j&  k�rxt|ƒdfk�s~n t‚|d% }|d' }tj'|t (|¡< tj' |t (|¡< ||k  )d)¡}t *|t+|t|d$ ƒƒk¡}t|d" | ƒ}|t|ƒk�süt‚|d& }|d( }tj' |t (|¡< tj'|t (|¡< ||k )d)¡}t *|t+|t|d$ ƒƒk¡}t|d" | ƒ}|t|ƒk�szt‚dS )*z%Test automatic bad channel detection.z.dsé!   TrF   rJ   rº   Nr—   ro  rì   r   r~   F)rK   rý   rL   g      D@Zlowpassrü   re  rA  é+   r¥  rj  ru   iÞ  ÚBADr9   re   )	rg   rh   ri   r¡  rž   r�   Ú	min_countr°  r±  r8   r`   zInterval   1:    0.00zInterval   2:    5.00z'data has already been low-pass filteredr  Úch_typesZbinsÚscores_flatÚscores_noisyÚlimits_flatÚlimits_noisyrz   ),Úendswithr   r�   r   r�  r   Úset_meas_daterB   ÚfilterrA   r­   r  r³   Z_unlockZadd_channelsr®   ÚrandomZRandomStateZrandnrï   ÚtimesrW  ÚroundÚannotationsrV  r”   r+   r   r:  r  ÚintersectionrT   r¬   rŠ   Zget_channel_typesÚdiffÚflattenÚallrN  r3  Úisnanr°   Úwherer¨  )r\   rì   r­  r®  r�   r¯  r°  r±  r²  r—   Zflat_idxZ
want_flatsr·  Zraw_eegÚstepÚdtr´   Zreturn_valsZgot_badsZ	got_flatsZ
got_scoresZmeg_chsr¸  r¹  r»  Zn_segments_below_limitZch_idxZflatsrº  r¼  Zn_segments_beyond_limitrF   rF   rG   Útest_find_bad_channels_maxwellà  s¼    



&      ü
 ÿ
þÿ

þÿÿrÌ  c            
   
   C   sH  t j t¡ ¡ } t| jd ddd� t| dd�\}}|ddd	gksFt‚|g ksRt‚t	t
| jd
 d ƒƒ}t| jƒ| | jd
  dksˆt‚tƒ �.}t|  ¡  || jd
  d¡ddd�\}}W 5 Q R X | ¡ }d|ksÖt‚|dd	gksæt‚|g ksòt‚d| jdd…d|…f< tjtdd��* tƒ �}t| ddd�\}}W 5 Q R X W 5 Q R X | ¡ }d|k�s\t‚|| jdd… k�stt‚|g k�s‚t‚t| dddd�\}}t|jddd� g | jd< |  |¡ | jdd�}	|	jd | jd
  d dk�sèt‚tƒ �}t| dddd �\}}W 5 Q R X | ¡ }d!|k�s(t|ƒ‚||k�s6t‚||k�sDt‚dS )"z4Test find_bads_maxwell when there are flat channels.rz   g¸…ëQø7@r{   r¼   rº   )r·  zMEG 1032zMEG 2313r³  r¥  r^  NÚdebug)r·  rž   zin 2 intervals r   zAll-flat segment detectedro   z in 4 intervals é2  r:   r  ru   )ÚflatZbad_percentZmin_durationr  rì   Zomit©Zreject_by_annotationrj  r`   Zbad_flat)r·  r¡  rž   z in 2 intervals )rL  r0   r   Úraw_small_fnamer�   r   rÁ  r   rB   rW  rÂ  rA   rï   r+   rŠ   r[   r¬   r­   r‹   rŒ   r�   r  r   r¢  Úset_annotationsÚget_datarN  )
r—   ZnoisyrÏ  rÈ   r´   Z
want_noisyZ	want_flatr­  Ú_Z	data_goodrF   rF   rG   Útest_find_bads_maxwell_flatg  s`      þ  ÿÿ


"   ÿrÕ  zregularize, n)Nr¤   )rD  éG   c                 C   s  t tƒ dd¡}|jd g ks"t‚| ¡  t|ƒd }|dksBt‚dg|jd< t| dd�}t|f|Ž}| 	d¡}t|ƒd }||ksˆt‚t
|jf|Ž\}}}	}
|
|ksªt‚|
t|	ƒd	 ks¾t‚|d
d
…d
|
…f |d
|
…  }||jddd� 	¡  }t||ƒ d
S )zTest compute_maxwell_basis.r   r`   rì   rK   rÎ  r³  T)rh   rž   rG  NrJ   )r   rÑ  r[   rA   rB   Zdel_projr)   rÑ   r   rÓ  r   rï   r   r   )rh   rÈ   r—   Zrankr  rC   ZwantÚSZpSZreg_momentsZn_use_inZxformÚgotrF   rF   rG   Útest_compute_maxwell_basis“  s"    
 rÙ  )Úfrom_rawÚunionÚkeepc                 C   sˆ  t tddd�}dd„ |jD ƒ}| |¡ t tddd�}| |¡ |j|jksPt‚|jd dksbt‚|jd dk	stt‚| d¡ | dkr”d	d
g}g }n*| dkrªd	g}d
g}n| dkr¾g }d	d
g}||jd< ||jd< t||| d�}|jd d	d
gksöt‚|jd |jd k�st‚| 	¡ j
dd� ¡ }| ¡ |k�s6t‚|jd |k�sJt‚|jd |k�s^t‚|jd dk�srt‚| ¡ dk�s„t‚dS )úTest prepare_emptyroom.rY   F©rZ   rž   c                 S   s   g | ]}d |kr|‘qS )ZEEGrF   )rP   ÚnamerF   rF   rG   ræ   ±  s      z/test_prepare_emptyroom_bads.<locals>.<listcomp>rÌ   NrÚ  ZMEG0113ZMEG2313rÛ  rÜ  rì   )Úraw_err—   rì   Trí   )r   r€   r  r  r�   rB   rA   Zset_montager   rŠ   r   Zget_montage)rì   r—   Únamesrà  Zraw_bads_origZraw_er_bads_origÚraw_er_preparedZmontage_expectedrF   rF   rG   Útest_prepare_emptyroom_bads¬  sB    




ýrã  Úset_annot_when)ÚbeforeÚafterÚraw_meas_date)ÚorigNÚraw_er_meas_datec                 C   s�  t tddd�}t tddd�}|jdd… }| |¡ | |¡ |j|jksNt‚|jd |jd ksft‚|dkrx| d¡ |dkrŠ| d¡ tt	t
 t|jƒt|jƒ ¡ƒdƒ}t |g| ¡ d|jd	 ¡}t|j|jƒ |j}t|jƒdksòt‚tj t¡}t||d
ƒ\}	}
|jdd	g }d
|jd  }|	 ||j|jd dk	  |dg¡ d}| dk�rv| |	¡ d}|jd }n| dk�s„t‚d}|jd }t|||dd�}|j|k�s²t‚|jd |k�sÆt‚|j|jk�sØt‚t|	ƒ|k�sêt‚| dk�r| |	¡ | |	¡ t|jƒ|k�st‚t
 |jdgdd�¡ ¡ }d|  k �rNdk �sTn t‚t|jƒ|k�sht‚t
 |jdgdd�¡ ¡ }t||ƒ dS )rÝ  rY   FrÞ  Nr8   r²  rº   r   rz   ru   r¥  Z
BAD_CUSTOMé   rå  rÜ  ræ  rÚ  T)rà  r—   r²  Zemit_warningÚnanrÐ  ri  gš™™™™™Ù?)r   r€   r�   r  r  rB   rA   r¾  r©  rW  r®   Úceilrï   rÁ  rL  r	   r[   r   Z
first_samprÃ  Zchpir   r‚   r   rV  Z
first_timerÒ  r   rÈ  rÓ  Zmean)rä  rç  ré  r—   rà  rá  Zn_repZraw_er_first_samp_origÚposr­  rÔ  Zonsetr¢  Z
want_annotr²  Z	want_daterâ  Zprop_badZprop_bad_errF   rF   rG   Ú'test_prepare_emptyroom_annot_first_sampÙ  sn    



$ ÿ


   ÿ


ÿÿrî  )N)rX   )¥Ú
contextlibr   Úos.pathÚpathr†   r7  rT  Únumpyr®   Znumpy.testingr   r   r‹   Zscipyr   Zscipy.specialr   rL  r   r   r	   r
   Zmne.annotationsr   Zmne.chpir   r   Zmne.forwardr   Zmne.datasetsr   r   Zmne.ior   r   r   r   r   r   Zmne.io.constantsr   Zmne.preprocessingr   r   r   r   r   r   Zmne.preprocessing.maxwellr   r   r    r!   r"   r#   r$   r%   r&   Zmne.rankr'   r(   r)   Z	mne.utilsr*   r+   r,   r-   r.   r/   r‡   ÚdirnameÚ__file__Zio_pathrÑ  r  r�   Úprer€   rð   rñ   r  r#  r  r6  r=  r?  r‰  rŠ  r…   r‰   rŽ   r§  r�   rò   r$  r}  r~  r  r€  r�  r"  r%  r‹  r‚   rÐ   rô   r  r9  rŒ  r�  Z
triux_pathr”  r•  r›  rž  r—  r™  rš  rœ  r–  r˜  rª   r²   Zctf_fname_continuousrÏ   rÀ   rÅ   r„   ró   rì   rH   rW   r^   ÚmarkZslowtestZrequires_testing_datar›   r·   rÃ   r×   rú   r  r  r  r  r  r.  r'  r;  r@  r3  r±   ZparametrizerR  r]  r‡  r�  rŸ  r   r¬  rÌ  rÕ  rÙ  rã  rî  rF   rF   rF   rG   Ú<module>   sÂ    , ÿÿÿ   ÿÿ ÿ ÿÿ                    ü

Y
Z
<
R
*
,3
3
.
%ÿ
+
 Q +

.ÿ ÿ ÿ ÿ ÿ ÿíþn,þ
+