U
    f»{jÙ  ã                   @   s&  d dl mZ d dlZd dlmZ d dlZd dl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 d dlmZ d d	lmZmZ d d
lmZ ejdd�Ze edd¡Ze edd¡Ze edd¡Z e edd¡Z!e edd¡Z"ej# $de"eef¡ej%dd„ ƒƒZ&ej#j'ej%dd„ ƒƒZ(dS )é    N)Úassert_allclose)Ú
pick_types)Úread_raw_fif)Útesting)Ú_loc_to_coil_trans)Úread_fine_calibrationÚwrite_fine_calibrationÚcompute_fine_calibrationÚmaxwell_filter)Ú_assert_shielding)Úrot_to_quatÚ_angle_between_quats)Úobject_diffF)ÚdownloadZSSSzsss_cal_3053.datzsss_cal_3053_3d.datz141027_cropped_90Hz_raw.fifzct_sparse.fifz
141027.datÚfnamec                 C   s@   t  t| ƒd¡}t|ƒ}t||ƒ t|ƒ}t||ƒdks<t‚dS )z>Test round trip reading/writing of fine calibration .dat file.zfine_cal_temp.datÚ N)ÚopÚjoinÚstrr   r   r   ÚAssertionError)Ztmp_pathr   Z
temp_fnameZfine_cal_dictZfine_cal_dict_reload© r   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/preprocessing/tests/test_fine_cal.pyÚtest_fine_cal_io   s
    
r   c            "         sÎ  t tƒ} ttƒ}t| tddd�\‰ }|dks0t‚tˆ  ¡ ƒt| ¡ ƒksLt‚ˆ d |d ks`t‚t	dd„ |d D ƒƒdks~t‚t	d	d„ ˆ d D ƒƒdksœt‚t
 ˆ d t¡}t
 |d t¡}|j|j  krÔd
ksÚn t‚|dd…df |dd…df  }}t
 dd„ | jd dd… D ƒ¡}|d }ˆ d }|j|jk�s@t‚t|ƒ}t|ƒ}	t|ƒ}
t
jj|
dd…dd…df |	dd…dd…df  dd�}t|ddd� t
jj|
dd…dd…df |dd…dd…df  dd�}t|ddd� t|dd…dd…dd…f ƒ}t|	dd…dd…dd…f ƒ}t|
dd…dd…dd…f ƒ}t
 t||ƒ¡}t
 t||ƒ¡}t
 t||ƒ¡}dD �]t}t| j|dd�}t
 || || ¡t
j || ¡t
j || ¡  }d|  k �rÔdk�sên t|› d|d›�ƒ‚||  ¡ }||  ¡ }||  ¡ }|dk�r€d|  k �r0dk �s:n t|ƒ‚d|  k �rRdk �s\n t|ƒ‚d |  k �rtdk �sæn t|ƒ‚nfd!|  k �r˜d"k �s¢n t|ƒ‚d#|  k �rºd$k �sÄn t|ƒ‚d%|  k �rÜd&k �srn t|ƒ‚�qrtd'td(d)�}t| f|Ž}t| fd*ti|—Ž}t| fd*ˆ i|—Ž}t|| d+d,ƒ t|| d-d.ƒ t|| d-d.ƒ t| tdˆ dd/�\}}ˆ d |d k�s‚t‚tˆ d |d d0d� tˆ d |d dd� t	d1d„ ˆ d D ƒƒdk�sÎt‚t| jd2d3�}t|ƒd4k�rø|d dk�süt‚t
 ‡ fd5d„|D ƒ¡}|jd6k�s$t‚t| tdˆ dd/�\‰}t
 ‡fd7d„|D ƒ¡} | jd8k�sbt‚t
 | dd…df |dd…df ¡d9 }!d:|!  k �r¢d;k �s¨n t‚t| fd*ˆi|—Ž}t|| d"d<ƒ dS )=z-Test computing fine calibration coefficients.é   Údebug)Ú
cross_talkÚn_imbalanceÚverboseZch_namesc                 S   s   g | ]}|d k  ¡ ‘qS ©g      ð?©Úany©Ú.0Zicr   r   r   Ú
<listcomp><   s     z)test_compute_fine_cal.<locals>.<listcomp>Úimb_calsr   c                 S   s   g | ]}|d k  ¡ ‘qS r   r   r!   r   r   r   r#   =   s     )é2  r   Nc                 S   s   g | ]}|d  ‘qS )Úlocr   )r"   Úchr   r   r   r#   D   s     Zchsr%   Zlocsé   )Zaxisg        g�íµ ÷Æ°>)Zatol)ÚmagÚgradr   )ÚmegÚexcludeg®Gáz®ï?grÄZ|
 ð?z: z0.3fr)   é   é   é   é	   éB   éD   é8   éq   é5   é<   Úwarningr+   )Zbad_conditionr   Zcoord_frameÚcalibrationé   é   é=   é?   )r   r   r8   r   g-Cëâ6
?c                 S   s   g | ]}|d k  ¡ ‘qS r   r   r!   r   r   r   r#   {   s     r*   )r+   éÌ   c                    s   g | ]}ˆ d  | ‘qS ©r$   r   ©r"   Úpick)Úgot_calr   r   r#   �   s     )r=   r   c                    s   g | ]}ˆ d  | ‘qS r>   r   r?   )Ú	got_cal_3r   r   r#   †   s    )r=   r(   )r   r   g333333ã?gffffffæ?éF   )r   Ú	erm_fnamer   Úcal_mf_fnamer	   Úctcr   ÚsetÚkeysÚsumÚnpÚarrayÚfloatÚshapeÚinfor   ZlinalgZnormr   r   Zrad2degr   r   ÚdotÚmaxÚdictr
   r   ÚlenZcorrcoef)"ÚrawZwant_calÚcountsZgot_imbZwant_imbZ	orig_locsZ	want_locsZgot_locsZ
orig_transZ
want_transZ	got_transÚdistZ	orig_quatZ	want_quatZgot_quatZwant_orig_anglesZgot_want_anglesZgot_orig_anglesÚkeyÚpÚr2Zwant_orig_max_angleZgot_orig_max_angleZgot_want_max_angleÚkwargsZraw_sssZ
raw_sss_mfZ
raw_sss_pyZgot_cal_redoÚ_Z
grad_picksZgot_grad_imbsZgot_grad_3_imbsZcorrr   )rA   rB   r   Útest_compute_fine_cal0   s²       ÿ
""88
ÿ.
""$""&   þ
  ÿ   þ
ÿ(r[   ))Úos.pathÚpathr   ÚnumpyrJ   Znumpy.testingr   ZpytestZmner   Zmne.ior   Zmne.datasetsr   Z
mne.io.tagr   Zmne.preprocessingr   r   r	   r
   Z$mne.preprocessing.tests.test_maxwellr   Zmne.transformsr   r   Z	mne.utilsr   Z	data_pathr   Zfine_cal_fnameZfine_cal_fname_3drD   rF   rE   ÚmarkZparametrizeZrequires_testing_datar   Zslowtestr[   r   r   r   r   Ú<module>   s2   ÿ