Compute a Dynamic Imaging of Coherent Sources (DICS) spatial filter.
This is a beamformer filter that can be used to estimate the source power
at a specific frequency range [1]. It does this by constructing a spatial
filter for each source point. The computation of these filters is very
similar to those of the LCMV beamformer (make_lcmv()
), but instead of
operating on a covariance matrix, the CSD matrix is used. When applying
these filters to a CSD matrix (see apply_dics_csd()
), the source
power can be estimated for each source point.
Parameters: 
 info : instance of Info
Measurement info, e.g. epochs.info .
 forward : instance of Forward
Forward operator.
 csd : instance of CrossSpectralDensity
The data crossspectral density (CSD) matrices. A source estimate is
performed for each frequency or frequencybin defined in the CSD
object.
 reg : float
The regularization to apply to the crossspectral density before
computing the inverse.
 label : Label  None
Restricts the solution to a given label.
 pick_ori : None  ‘normal’  ‘maxpower’
The source orientation to compute the filter for:
None :
orientations are pooled (Default)
 ‘normal’ :
filters are computed for the orientation tangential to the
cortical surface
 ‘maxpower’ :
filters are computer for the orientation that maximizes
spectral power.
 rank : None  int  ‘full’
This controls the effective rank of the covariance matrix when
computing the inverse. The rank can be set explicitly by specifying an
integer value. If None , the rank will be automatically estimated.
Since applying regularization will always make the covariance matrix
full rank, the rank is estimated before regularization in this case. If
‘full’, the rank will be estimated after regularization and hence
will mean using the full rank, unless reg=0 is used.
The default is None.
 inversion : ‘single’  ‘matrix’
This determines how the beamformer deals with source spaces in “free”
orientation. Such source spaces define three orthogonal dipoles at each
source point. When inversion='single' , each dipole is considered
as an individual source and the corresponding spatial filter is
computed for each dipole separately. When inversion='matrix' , all
three dipoles at a source vertex are considered as a group and the
spatial filters are computed jointly using a matrix inversion. While
inversion='single' is more stable, inversion='matrix' is more
precise. See section 5 of [5]. Defaults to ‘single’.
 weight_norm : ‘unitnoisegain’  ‘nai’  None
If ‘unitnoisegain’, the unitnoise gain minimum variance beamformer
will be computed (BorgiottiKaplan beamformer) [2],
If ‘nai’, the Neural Activity Index [4] will be computed.
Defaults to None , in which case no normalization is performed.
 normalize_fwd : bool
Whether to normalize the forward solution. Defaults to True . Note
that this normalization is not required when weight normalization
(weight_norm ) is used.
 real_filter : bool
If True , take only the real part of the crossspectraldensity
matrices to compute real filters. Defaults to False .
 reduce_rank : bool
If True , the rank of the forward operator will be reduced by 1 for
each spatial location, prior to inversion. This may be necessary when
you use a single sphere model for MEG and mode='vertex' .
Defaults to False .
 verbose : bool, str, int, or None
If not None, override default verbose level (see mne.verbose()
and Logging documentation for more).

Returns: 
 filters : instance of Beamformer
Dictionary containing filter weights from DICS beamformer.
Contains the following keys:
 ‘weights’ : ndarray, shape (n_frequencies, n_weights)
For each frequency, the filter weights of the beamformer.
 ‘csd’ : instance of CrossSpectralDensity
The data crossspectral density matrices used to compute the
beamformer.
 ‘ch_names’ : list of str
Channels used to compute the beamformer.
 ‘proj’ : ndarray, shape (n_channels, n_channels)
Projections used to compute the beamformer.
 ‘vertices’ : list of ndarray
Vertices for which the filter weights were computed.
 ‘inversion’ : ‘single’  ‘matrix’
Whether the spatial filters were computed for each dipole
separately or jointly for all dipoles at each vertex using a
matrix inversion.
 ‘weight_norm’ : None  ‘unitnoisegain’
The normalization of the weights.
 ‘normalize_fwd’ : bool
Whether the forward solution was normalized
 ‘n_orient’ : int
Number of source orientations defined in the forward model.
 ‘subject’ : str
The subject ID.
 ‘src_type’ : str
Type of source space.

Notes
The original reference is [1]. See [5] for a tutorial style paper on the
topic.
The DICS beamformer is very similar to the LCMV (make_lcmv()
)
beamformer and many of the parameters are shared. However,
make_dics()
and make_lcmv()
currently have different defaults
for these parameters, which were settled on separately through extensive
practical use case testing (but not necessarily exhaustive parameter space
searching), and it remains to be seen how functionally interchangeable they
could be.
The default setting reproduce the DICS beamformer as described in [5]:
inversion='single', weight_norm=None, normalize_fwd=True
To use the make_lcmv()
defaults, use:
inversion='matrix', weight_norm='unitgain', normalize_fwd=False
For more information about real_filter
, see the
supplemental information from [3].
References
[2]  (1, 2) Sekihara & Nagarajan. Adaptive spatial filters for electromagnetic
brain imaging (2008) Springer Science & Business Media 
[4]  (1, 2) Van Veen et al. Localization of brain electrical activity via
linearly constrained minimum variance spatial filtering.
Biomedical Engineering (1997) vol. 44 (9) pp. 867–880 
[5]  (1, 2, 3, 4) van Vliet, et al. (2018) Analysis of functional connectivity and
oscillatory power using DICS: from raw MEG data to grouplevel
statistics in Python. bioRxiv, 245530.
https://doi.org/10.1101/245530 