U
    f»{j­   ã                   @   s2   d Z ddlZddlZddlZdd„ Zej ¡  dS )a   Compute SSP/PCA projections for ECG artifacts.

Examples
--------
.. code-block:: console

    $ mne compute_proj_ecg -i sample_audvis_raw.fif -c "MEG 1531" -a \
                           --l-freq 1 --h-freq 100 \
                           --rej-grad 3000 --rej-mag 4000 --rej-eeg 100

é    Nc            &      C   sð  ddl m}  | tƒ}|jdddddd� |jd	d
dddd� |jdddddd� |jddddddd� |jddddddd� |jddddd dd� |jd!d"dd#d$d� |jd%d&dd'd(d� |jd)d*dd+d,d� |jd-d.dd/d0d� |jd1d2d3d4d5d6� |jd7d8d9d:d;d<d=� |jd>d?d@dAd6� |jdBdCddDdEd� |jdFdGdHddId$d� |jdJdKdLdMdAd6� |jdNdOddPdQd� |jdRdSddTdUd� |jdVdWddXdYd� |jdZd[dd\d]d� |jd^d_d:d`d<d=� |jdadbd:dcd<d=� |jdddedfdAd6� |jdgdhddidjd� |jdkdldmdAd6� |jdndoddpdqd� |jdrdsdtdudvd� | ¡ \}}|j}|dAk�rb| ¡  t d$¡ |j	}|j
}|j}|j}|j}	|j}
|j}|j}|j}|j}|j}|j}|j}|j}tdwt|jƒ dxt|jƒ dyt|jƒ dyt|jƒ dz�}|j}|j}|j}|j }|j!}|j"}|j#}|j$}|dvk�rTzt|ƒ}W n t%k
�rR   t%d{ƒ‚Y nX |dAk	�r”t&|d|ƒ�}d}d~„ | '¡ D ƒ}W 5 Q R X t(d| ƒ ng }| )d€¡�s°| )d�¡�r¾|dAd‚… }n|dAdƒ… }|d„ }|�râ|d… } n|d† } t*j+j,||d‡�}!|dAk	�rt*j+ ,|¡}"n|!}"dA}#t*j-j.|!|"|||||	|
|||||||#||||||||d<dˆ�\}$}%|! /¡  |dAk	�rt|" /¡  |dAk	�r˜t(d‰| ƒ t* 0|¡|$ }$t1|t2ƒ�r¼t3j4 5|¡�r¼t3 6|¡ t(dŠ|  ƒ t* 7| |$¡ t(d‹| ƒ t* 8||%¡ dAS )ŒzRun command.r   )Úget_optparserz-iz--inÚraw_inzInput raw FIF fileÚFILE)ÚdestÚhelpÚmetavarz--tminÚtminÚfloatzTime before event in secondsgš™™™™™É¿)r   Útyper   Údefaultz--tmaxÚtmaxzTime after event in secondsgš™™™™™Ù?z-gz--n-gradÚn_gradÚintz&Number of SSP vectors for gradiometersé   z-mz--n-magÚn_magz'Number of SSP vectors for magnetometersz-ez--n-eegÚn_eegzNumber of SSP vectors for EEGz--l-freqÚl_freqz"Filter low cut-off frequency in Hzé   z--h-freqÚh_freqz#Filter high cut-off frequency in Hzéd   z--ecg-l-freqÚ
ecg_l_freqz?Filter low cut-off frequency in Hz used for ECG event detectioné   z--ecg-h-freqÚ
ecg_h_freqz@Filter high cut-off frequency in Hz used for ECG event detectioné#   z-pz	--preloadÚpreloadz7Temporary file used during computation (to save memory)T)r   r   r   z-az	--averageÚaverageÚ
store_truezCompute SSP after averagingF)r   Úactionr   r   z--projÚprojz$Use SSP projections from a fif file.Nz--filtersizeÚfilter_lengthz#Number of taps to use for filteringi   z-jz--n-jobsÚn_jobsz!Number of jobs to run in parallelz-cz	--channelÚch_namez;Channel to use for ECG detection (Required if no ECG found)z
--rej-gradÚrej_gradzBGradiometers rejection parameter in fT/cm (peak to peak amplitude)iÐ  z	--rej-magÚrej_magz@Magnetometers rejection parameter in fT (peak to peak amplitude)i¸  z	--rej-eegÚrej_eegu7   EEG rejection parameter in ÂµV (peak to peak amplitude)é2   z	--rej-eogÚrej_eogu7   EOG rejection parameter in ÂµV (peak to peak amplitude)éú   z	--avg-refÚavg_refzAdd EEG average reference projz	--no-projÚno_projz5Exclude the SSP projectors currently in the fiff filez--badÚ	bad_fnamez5Text file containing bad channels list (one per line)z
--event-idÚevent_idzID to use for eventsiç  z--event-rawÚraw_event_fnamez#raw file to use for event detectionz--tstartÚtstartz-Start artifact detection after tstart secondsg        z--qrsthrÚqrs_thresholdÚstringzTQRS detection threshold. Between 0 and 1. Can also be 'auto' for automatic selectionÚautog‚vIhÂ%<=gVçž¯Ò<g�íµ ÷Æ°>)ZgradÚmagZeegZeogz qrsthr must be "auto" or a floatÚrc                 S   s   g | ]}|  ¡ ‘qS © )Úrstrip)Ú.0Úwr3   r3   ú`/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/commands/mne_compute_proj_ecg.pyÚ
<listcomp>¡   s     zrun.<locals>.<listcomp>zBad channels read : %sz_raw.fifz-raw.fifiøÿÿÿéüÿÿÿz_ecg-eve.fifz_ecg_avg-proj.fifz_ecg-proj.fif)r   )Úcopyz#Including SSP projections from : %szWriting ECG projections in %szWriting ECG events in %s)9Zmne.commands.utilsr   Ú__file__Ú
add_optionÚ
parse_argsr   Ú
print_helpÚsysÚexitr   r   r   r   r   r   r   r   r   r   r   r   r    r!   Údictr	   r"   r#   r$   r&   r(   r)   r*   r+   r   r,   r-   r.   Ú
ValueErrorÚopenÚ	readlinesÚprintÚendswithÚmneÚioZread_raw_fifZpreprocessingZcompute_proj_ecgÚcloseZ	read_projÚ
isinstanceÚstrÚosÚpathÚexistsÚremoveZ
write_projZwrite_events)&r   ÚparserÚoptionsÚargsr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   Zrejectr(   r)   r*   r+   Z
proj_fnamer,   r-   r.   ZfidZbadsÚprefixZecg_event_fnameZecg_proj_fnameÚrawZ	raw_eventZflatZprojsÚeventsr3   r3   r7   Úrun   s”   
 ÿ
þ
þþþþ
þ
þ
ý
ý
ýþþ
þþ
ý
ý
ý
ý
ý
þ
ýý
þþ
þ
ý

ý



                    ü



rV   )Ú__doc__rL   r?   rG   rV   ÚutilsZrun_command_if_mainr3   r3   r3   r7   Ú<module>   s    @