U
    f»{j–  ã                   @   sŒ   d Z ddlmZ ddlZddlmZ ddlm	Z	 ddd	„Z
dd
d„Zddd„Zdd„ Zdd„ Zdd„ Zd dd„Zdd„ Zdd„ Zdd„ ZdS )!zRead .res4 files.é    Né   )Úloggeré   )ÚCTFTc                 C   sL   t  | t  | ¡dd… d | ¡}d}t  |¡sD|r@td| ƒ‚d}||fS )zMake a CTF name.NéýÿÿÿÚ.TzStandard file %s not foundF)ÚopÚjoinÚbasenameÚisfileÚIOError)Ú	directoryÚextraZraise_errorÚfnameÚfound© r   úN/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/io/ctf/res4.pyÚ_make_ctf_name   s    "
r   c                 C   s   t  | d|¡S )zRead a double.ú>f8©ÚnpÚfromfile)ÚfidÚnr   r   r   Ú_read_double   s    r   c                 C   s*   |   |¡}| d¡d }|r&| d¡S |S )zRead string.ó    r   úutf-8)ÚreadÚsplitÚdecode)r   Ún_bytesr   Ús0Úsr   r   r   Ú_read_string    s    
r#   c                 C   s   t  | d|¡S )zRead unsigned character string.z>Br   )r   r    r   r   r   Ú_read_ustring'   s    r$   c                 C   s   t  | dd¡d S )zRead int from short.ú>i2r   r   r   ©r   r   r   r   Ú
_read_int2,   s    r'   c                 C   s   t  | dd¡d S )zRead a 32-bit integer.ú>i4r   r   r   r&   r   r   r   Ú	_read_int1   s    r)   é   c                 C   s4   |   ¡ }|| dkr0|||  | }|  |d¡ dS )zMove to next byte boundary.r   N)ÚtellÚseek)r   ÚbyteÚnowr   r   r   Ú_move_to_next6   s    r/   c                 C   sP   t ƒ }t| ƒd |d< t| ƒ|d< t| ƒ|d< t| ƒ|d< t| |d ƒ|d< |S )zRead filter information.r   ÚfreqÚclassÚtypeZnparZpars)Údictr   r)   r'   )r   Úfr   r   r   Ú_read_filter>   s    r5   c              
   C   s  t | ƒ|d< tƒ |d< t ddddddtj tjfd	d
tjfg¡}t | ||d ¡}t|d ƒD ]°}t	ƒ }|d  
|¡ |d |  d¡d  d¡|d< |d | |d< |d | |d< dd„ |d | d|d … D ƒ|d< |d	 | d|d … |d	< |d  |d ¡|d< q`dS )zRead compensation coefficients.ZncompÚcomp)Úsensor_nameZS32)Ú
coeff_typer(   ©Úd0r(   )Úncoeffr%   ZsensorszS%sZcoeffsr   r7   r   r   r   r8   r;   c                 S   s    g | ]}|  d ¡d  d¡‘qS )r   r   r   )r   r   )Ú.0r"   r   r   r   Ú
<listcomp>]   s   ÿz$_read_comp_coeff.<locals>.<listcomp>NÚch_namesZscanno)r'   Úlistr   Údtyper   ZCTFV_SENSOR_LABELZCTFV_MAX_BALANCINGr   Úranger3   Úappendr   r   Úindex)r   ÚdÚdtÚcompsÚkr6   r   r   r   Ú_read_comp_coeffI   s.    
 
ûÿÿ
rH   c           
         s  t | dƒ\}}tƒ }t|dƒ��Þ‰tˆdƒ|d< tˆdƒ|d< tˆdƒ|d< tˆdƒ|d< tˆƒ|d	< tˆd
ƒ|d< tˆd
ƒ|d< d|d kr¶d|d kr¶|d }|d |d< ||d< tˆƒ|d< tˆƒ|d< tˆdƒ tˆƒd |d< tˆƒd |d< tˆƒ|d< tˆdƒ tˆƒ|d< tˆƒ|d< tˆƒ|d< tˆdƒ tˆƒ|d< ˆ d¡|d< ‡fdd„t	t
jƒD ƒ|d< ˆ d¡|d< tˆƒ|d < tˆdƒ tˆƒ|d!< tˆƒ|d"< tˆdƒ tˆƒ|d#< tˆdƒ tˆƒ|d$< tˆƒ tˆd%ƒ|d&< tˆdƒ|d'< tˆd%ƒ|d(< tˆd%ƒ|d)< tˆd%ƒ|d*< tˆd%ƒ|d+< t|d+ ƒdk�rPd,|d+< tˆd-ƒ|d.< tˆdƒ tˆƒ|d/< ˆ t
jd¡ |d/ dk�r¢tˆ|d/ ƒ|d0< tˆƒ|d1< tƒ |d2< t	|d1 ƒD ]}|d2  tˆƒ¡ �qÄtƒ |d3< t	|d ƒD ]}tˆd%ƒ}|d3  |¡ �qôt d4d5d6d7d8d9d:d;g¡}t d<d=d>d?d@dAdBdCdDdEdF|t
jfdG|t
jfg¡}t ˆ||d ¡‰ ˆ dF ˆ dG fD ]&}	|	dH  dI  < |	dJ  dK9  < �q‚‡ fdLd„ˆ D ƒ‰ ˆ |dM< t	|d ƒD ]}|d3 | |dM | dN< �qÐtˆ|ƒ W 5 Q R X t dO¡ |S )PzRead the magical res4 file.Zres4Úrbr*   Úheadé   ÚappnameÚoriginÚdescZnaveéÿ   Z	data_timeÚ	data_dateú/ú:ZnsampZnchanr   ZsfreqZ
epoch_timeZ	no_trialsé   Zpre_trig_ptsZno_trials_doneZno_trials_bst_message_windowlayZsave_trialsr   Zprimary_triggerc                    s   g | ]}ˆ   d ¡‘qS )r   )r   )r<   rG   r&   r   r   r=   „   s   ÿz_read_res4.<locals>.<listcomp>Zsecondary_triggerZtrigger_polarity_maskZtrigger_modeZaccept_rejectZrun_time_bst_message_windowlayZ	zero_headZartifact_modeé    Znf_run_nameZnf_run_titleZnf_instrumentsZnf_collect_descriptorZnf_subject_idZnf_operatorNé<   Znf_sensor_file_nameZrdlenZrun_descZnfiltÚfiltersr>   )Úposr   r   )r:   r   )Znormr   r   )Zd1r   )Zturnsr%   )Zd2r(   )Zd3r%   )Úarear   )Zsensor_type_indexr%   )Zoriginal_run_nor%   )Z	coil_typer(   )Zproper_gainr   )Zqgainr   )Zio_gainr   )Z	io_offsetr   )Z	num_coilsr%   )Zgrad_order_nor%   r9   ÚcoilZ	head_coilrW   g      Y@rX   g-Cëâ6?c                    s   g | ]}t tˆ jj|ƒƒ‘qS r   )r3   Úzipr@   Únames)r<   Úx)Úchsr   r   r=   Á   s     r]   Úch_namez    res4 data read.)r   r3   Úopenr#   r'   r)   r/   r   r   rA   r   ZCTFV_MAX_AVERAGE_BINSÚlenr$   r,   Z	FUNNY_POSr?   rB   r5   r   r@   ZCTFV_MAX_COILSr   rH   r   Úinfo)
ZdsdirÚnameÚ_ÚresrP   rG   r^   Z_coil_dtZ_ch_dtrY   r   )r]   r   r   Ú
_read_res4c   sÂ    



ÿ







    ü 

õ
re   )T)r   )T)r*   )Ú__doc__Úos.pathÚpathr   Únumpyr   Úutilsr   Ú	constantsr   r   r   r#   r$   r'   r)   r/   r5   rH   re   r   r   r   r   Ú<module>   s   



