Describe the new feature or enhancement
Discussed briefly with @larsoner.
We are considering changes in MNE-Connectivity where the spectral coefficients can be passed directly to the connectivity estimation functions in the form of EpochsSpectrum and EpochsTFR objects, as returned from Epochs.compute_psd/tfr(output="complex").
While the complex output is supported for TFR objects, Spectrum objects do not allow complex outputs from the various PSD functions:
|
if method_kw.get("output", "") == "complex": |
|
raise ValueError( |
|
f"Complex output is not supported in {type(self).__name__} objects. " |
|
f"Please use mne.time_frequency.{psd_funcs[method].__name__}() instead." |
|
) |
Describe your proposed implementation
Remove the ValueError for output="complex" from Spectrum classes.
There are a couple places where tweaks would be required, e.g. in _check_values() and handling PSD func outputs in _compute_spectra(), but similar solutions are already present in the TFR classes.
Same situation for the plotting methods, but again TFR classes also have solutions for this already which could be followed:
|
# complex amplitude → real power; real-valued data is already power (or ITC) |
|
if np.iscomplexobj(data): |
|
data = (data * data.conj()).real |
One thing that would need to be added is storage for weights in the Spectrum class when complex output is requested from the multitaper mode, which as I understand is not the case for the TFR multitaper.
Describe possible alternatives
N/A
Additional context
No response
Describe the new feature or enhancement
Discussed briefly with @larsoner.
We are considering changes in MNE-Connectivity where the spectral coefficients can be passed directly to the connectivity estimation functions in the form of
EpochsSpectrumandEpochsTFRobjects, as returned fromEpochs.compute_psd/tfr(output="complex").While the complex output is supported for
TFRobjects,Spectrumobjects do not allow complex outputs from the various PSD functions:mne-python/mne/time_frequency/spectrum.py
Lines 319 to 323 in 6ad28a4
Describe your proposed implementation
Remove the
ValueErrorforoutput="complex"fromSpectrumclasses.There are a couple places where tweaks would be required, e.g. in
_check_values()and handling PSD func outputs in_compute_spectra(), but similar solutions are already present in theTFRclasses.Same situation for the plotting methods, but again
TFRclasses also have solutions for this already which could be followed:mne-python/mne/time_frequency/tfr.py
Lines 4326 to 4328 in 0c369e0
One thing that would need to be added is storage for weights in the
Spectrumclass when complex output is requested from the multitaper mode, which as I understand is not the case for the TFR multitaper.Describe possible alternatives
N/A
Additional context
No response