Source code for mne.preprocessing.nirs._optical_density
# Authors: The MNE-Python contributors.# License: BSD-3-Clause# Copyright the MNE-Python contributors.importnumpyasnpfrom..._fiff.constantsimportFIFFfrom...ioimportBaseRawfrom...utilsimport_validate_type,verbose,warnfrom..nirsimport_validate_nirs_info
[docs]@verbosedefoptical_density(raw,*,verbose=None):r"""Convert NIRS raw data to optical density. Parameters ---------- raw : instance of Raw The raw data. %(verbose)s Returns ------- raw : instance of Raw The modified raw instance. """raw=raw.copy().load_data()_validate_type(raw,BaseRaw,"raw")picks=_validate_nirs_info(raw.info,fnirs="cw_amplitude")# The devices measure light intensity. Negative light intensities should# not occur. If they do it is likely due to hardware or movement issues.# Set all negative values to abs(x), this also has the benefit of ensuring# that the means are all greater than zero for the division below.ifnp.any(raw._data[picks]<=0):warn("Negative intensities encountered. Setting to abs(x)")min_=np.infforpiinpicks:np.abs(raw._data[pi],out=raw._data[pi])min_=min(min_,raw._data[pi].min()ormin_)# avoid == 0forpiinpicks:np.maximum(raw._data[pi],min_,out=raw._data[pi])forpiinpicks:data_mean=np.mean(raw._data[pi])raw._data[pi]/=data_meannp.log(raw._data[pi],out=raw._data[pi])raw._data[pi]*=-1raw.info["chs"][pi]["coil_type"]=FIFF.FIFFV_COIL_FNIRS_ODreturnraw