Source code for neurokit2.rsp.rsp_methods

import numpy as np

from ..misc.report import get_kwargs
from .rsp_clean import rsp_clean
from .rsp_peaks import rsp_peaks
from .rsp_rvt import rsp_rvt


[docs] def rsp_methods( sampling_rate=1000, method="khodadad", method_cleaning="default", method_peaks="default", method_rvt="power", **kwargs, ): """**RSP Preprocessing Methods** This function analyzes and specifies the methods used in the preprocessing, and create a textual description of the methods used. It is used by :func:`rsp_process()` to dispatch the correct methods to each subroutine of the pipeline and :func:`rsp_report()` to create a preprocessing report. Parameters ---------- sampling_rate : int The sampling frequency of the raw RSP signal (in Hz, i.e., samples/second). method : str The method used for cleaning and peak finding if ``"method_cleaning"`` and ``"method_peaks"`` are set to ``"default"``. Can be one of ``"Khodadad"``, ``"BioSPPy"``. Defaults to ``"Khodadad"``. method_cleaning: str The method used to clean the raw RSP signal. If ``"default"``, will be set to the value of ``"method"``. Defaults to ``"default"``. For more information, see the ``"method"`` argument of :func:`.rsp_clean`. method_peaks: str The method used to find peaks. If ``"default"``, will be set to the value of ``"method"``. Defaults to ``"default"``. For more information, see the ``"method"`` argument of :func:`.rsp_peaks`. method_rvt: str The method used to compute respiratory volume per time. Defaults to ``"harrison"``. For more information, see the ``"method"`` argument of :func:`.rsp_rvt`. **kwargs Other arguments to be passed to :func:`.rsp_clean`, :func:`.rsp_peaks`, and :func:`.rsp_rvt`. Returns ------- report_info : dict A dictionary containing the keyword arguments passed to the cleaning and peak finding functions, text describing the methods, and the corresponding references. See Also -------- rsp_process, rsp_clean, rsp_findpeaks Examples -------- .. ipython:: python import neurokit2 as nk methods = nk.rsp_methods(sampling_rate=100, method="Khodadad", method_cleaning="hampel") print(methods["text_cleaning"]) print(methods["references"][0]) """ # Sanitize inputs method_cleaning = str(method).lower() if method_cleaning == "default" else str(method_cleaning).lower() method_peaks = str(method).lower() if method_peaks == "default" else str(method_peaks).lower() method_rvt = str(method_rvt).lower() # Create dictionary with all inputs report_info = { "sampling_rate": sampling_rate, "method": method, "method_cleaning": method_cleaning, "method_peaks": method_peaks, "method_rvt": method_rvt, **kwargs, } # Get arguments to be passed to cleaning and peak finding functions kwargs_cleaning, report_info = get_kwargs(report_info, rsp_clean) kwargs_peaks, report_info = get_kwargs(report_info, rsp_peaks) kwargs_rvt, report_info = get_kwargs(report_info, rsp_rvt) # Save keyword arguments in dictionary report_info["kwargs_cleaning"] = kwargs_cleaning report_info["kwargs_peaks"] = kwargs_peaks report_info["kwargs_rvt"] = kwargs_rvt # Initialize refs list with NeuroKit2 reference refs = [ """Makowski, D., Pham, T., Lau, Z. J., Brammer, J. C., Lespinasse, F., Pham, H., Schölzel, C., & Chen, S. A. (2021). NeuroKit2: A Python toolbox for neurophysiological signal processing. Behavior Research Methods, 53(4), 1689–1696. https://doi.org/10.3758/s13428-020-01516-y """ ] # 1. Cleaning # ------------ report_info["text_cleaning"] = f"The raw signal, sampled at {sampling_rate} Hz," if method_cleaning in ["khodadad", "khodadad2018"]: report_info["text_cleaning"] += " was preprocessed using a second order 0.05-3 Hz bandpass Butterworth filter." elif method_cleaning in ["hampel", "power", "power2020"]: report_info["text_cleaning"] += ( " was preprocessed using a median-based Hampel filter by replacing values which" + f" are {report_info.get('threshold', 3)} median absolute deviation away from the rolling median;" + "following Power et al. 2020." ) refs.append( """Power, J., Lynch, C., Dubin, M., Silver, B., Martin, A., Jones, R.,(2020) Characteristics of respiratory measures in young adults scanned at rest, including systematic changes and “missed” deep breaths. NeuroImage, Volume 204, 116234""" ) elif method_cleaning in ["biosppy"]: report_info["text_cleaning"] += ( " was preprocessed using a second order 0.1-0.35 Hz bandpass " + "Butterworth filter followed by a constant detrending." ) elif method_cleaning in ["none"]: report_info["text_cleaning"] += " was directly used for peak detection without preprocessing." else: # just in case more methods are added report_info["text_cleaning"] += f" was cleaned following the {method} method." # 2. Peaks # ---------- if method_peaks in ["khodadad", "khodadad2018"]: report_info["text_peaks"] = "The peak detection was carried out using the method described in Khoadadad et al. (2018)." refs.append( """Khodadad, D., Nordebo, S., Müller, B., Waldmann, A., Yerworth, R., Becher, T., ... & Bayford, R. (2018). Optimized breath detection algorithm in electrical impedance tomography. Physiological measurement, 39(9), 094001.""" ) elif method_peaks in ["biosppy"]: report_info["text_peaks"] = ( "The peak detection was carried out using the method provided by the Python library BioSPpy (/signals/resp.py)." ) elif method_peaks in ["scipy"]: report_info["text_peaks"] = ( "The peak detection was carried out using the method provided by the Python library SciPy (signal.find_peaks)." ) elif method_peaks in ["none"]: report_info["text_peaks"] = "There was no peak detection carried out." else: report_info["text_peaks"] = f"The peak detection was carried out using the method {method_peaks}." # 3. RVT # ---------- if method_rvt in ["harrison", "harrison2021"]: report_info["text_rvt"] = ( "The respiratory volume per time computation was carried out using the method described in Harrison et al. (2021)." ) refs.append( """Harrison, S. J., Bianchi, S., Heinzle, J., Stephan, K. E., Iglesias, S., & Kasper, L. (2021). A Hilbert-based method for processing respiratory timeseries. Neuroimage, 230, 117787.""" ) elif method_rvt in ["birn", "birn2006"]: report_info["text_rvt"] = ( "The respiratory volume per time computation was carried out using the method described in Birn et al. (2006)." ) refs.append( """Birn, R. M., Diamond, J. B., Smith, M. A., & Bandettini, P. A. (2006). Separating respiratory-variation-related fluctuations from neuronal-activity-related fluctuations in fMRI. Neuroimage, 31(4), 1536-1548.""" ) elif method_rvt in ["power", "power2020"]: report_info["text_rvt"] = ( "The respiratory volume per time computation was carried out using the method described in Power at al. (2020)." ) refs.append( """Power, J. D., Lynch, C. J., Dubin, M. J., Silver, B. M., Martin, A., & Jones, R. M. (2020). Characteristics of respiratory measures in young adults scanned at rest, including systematic changes and "missed" deep breaths. Neuroimage, 204, 116234.""" ) elif method_rvt in ["none"]: report_info["text_rvt"] = "Respiratory volume per time was not computed." else: report_info["text_rvt"] = ( f"The respiratory volume per time computation was carried out using the method described in {method_rvt}." ) report_info["references"] = list(np.unique(refs)) return report_info