diff --git a/docs/build/html/.buildinfo b/docs/build/html/.buildinfo
index da34d3e..294ba48 100644
--- a/docs/build/html/.buildinfo
+++ b/docs/build/html/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 105c21b613064f8802f7edf354e2edcd
+config: 913909f8d36e9cf6e88bd087e9f5c83a
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html
index 8784b35..c60cae0 100644
--- a/docs/build/html/_modules/index.html
+++ b/docs/build/html/_modules/index.html
@@ -3,7 +3,7 @@
[docs]defmoving_transform(x,y=None,sf=100,window=.3,step=.1,method='corr',
- interp=False):
- """Moving transformation of one or two time-series.
-
- Parameters
- ----------
- x : array_like
- Single-channel data
- y : array_like, optional
- Second single-channel data (only used if method in ['corr', 'covar']).
- sf : float
- Sampling frequency.
- window : int
- Window size in seconds.
- step : int
- Step in seconds.
- A step of 0.1 second (100 ms) is usually a good default.
- If step == 0, overlap at every sample (slowest)
- If step == nperseg, no overlap (fastest)
- Higher values = higher precision = slower computation.
- method : str
- Transformation to use.
- Available methods are::
-
- 'mean' : arithmetic mean of x
- 'min' : minimum value of x
- 'max' : maximum value of x
- 'ptp' : peak-to-peak amplitude of x
- 'prop_above_zero' : proportion of values of x that are above zero
- 'rms' : root mean square of x
- 'slope' : slope of the least-square regression of x (in a.u / sec)
- 'corr' : Correlation between x and y
- 'covar' : Covariance between x and y
- interp : boolean
- If True, a cubic interpolation is performed to ensure that the output
- has the same size as the input.
-
- Returns
- -------
- t : np.array
- Time vector
- out : np.array
- Transformed signal
-
- Notes
- -----
- This function was inspired by the `transform_signal` function of the
- Wonambi package (https://github.com/wonambi-python/wonambi).
- """
- # Safety checks
- assertmethodin['mean','min','max','ptp','rms',
- 'prop_above_zero','slope','covar','corr']
- x=np.asarray(x,dtype=np.float64)
- ifyisnotNone:
- y=np.asarray(y,dtype=np.float64)
- assertx.size==y.size
-
- ifstep==0:
- step=1/sf
-
- halfdur=window/2
- n=x.size
- total_dur=n/sf
- last=n-1
- idx=np.arange(0,total_dur,step)
- out=np.zeros(idx.size)
-
- # Define beginning, end and time (centered) vector
- beg=((idx-halfdur)*sf).astype(int)
- end=((idx+halfdur)*sf).astype(int)
- beg[beg<0]=0
- end[end>last]=last
- # Alternatively, to cut off incomplete windows (comment the 2 lines above)
- # mask = ~((beg < 0) | (end > last))
- # beg, end = beg[mask], end[mask]
- t=np.column_stack((beg,end)).mean(1)/sf
-
- ifmethod=='mean':
- deffunc(x):
- returnnp.mean(x)
-
- elifmethod=='min':
- deffunc(x):
- returnnp.min(x)
-
- elifmethod=='max':
- deffunc(x):
- returnnp.max(x)
-
- elifmethod=='ptp':
- deffunc(x):
- returnnp.ptp(x)
-
- elifmethod=='prop_above_zero':
- deffunc(x):
- returnnp.count_nonzero(x>=0)/x.size
-
- elifmethod=='slope':
- deffunc(x):
- times=np.arange(x.size,dtype=np.float64)/sf
- return_slope_lstsq(times,x)
-
- elifmethod=='covar':
- deffunc(x,y):
- return_covar(x,y)
-
- elifmethod=='corr':
- deffunc(x,y):
- return_corr(x,y)
-
- else:
- deffunc(x):
- return_rms(x)
-
- # Now loop over successive epochs
- ifmethodin['covar','corr']:
- foriinrange(idx.size):
- out[i]=func(x[beg[i]:end[i]],y[beg[i]:end[i]])
- else:
- foriinrange(idx.size):
- out[i]=func(x[beg[i]:end[i]])
-
- # Finally interpolate
- ifinterpandstep!=1/sf:
- f=interp1d(t,out,kind='cubic',bounds_error=False,
- fill_value=0,assume_sorted=True)
- t=np.arange(n)/sf
- out=f(t)
-
- returnt,out
-
-
-def_zerocrossings(x):
- """Find indices of zero-crossings in a 1D array.
-
- Parameters
- ----------
- x : np.array
- One dimensional data vector.
-
- Returns
- -------
- idx_zc : np.array
- Indices of zero-crossings
-
- Examples
- --------
-
- >>> import numpy as np
- >>> from yasa.main import _zerocrossings
- >>> a = np.array([4, 2, -1, -3, 1, 2, 3, -2, -5])
- >>> _zerocrossings(a)
- array([1, 3, 6], dtype=int64)
- """
- pos=x>0
- npos=~pos
- return((pos[:-1]&npos[1:])|(npos[:-1]&pos[1:])).nonzero()[0]
-
-
-
[docs]deftrimbothstd(x,cut=0.10):
- """
- Slices off a proportion of items from both ends of an array and then
- compute the sample standard deviation.
-
- Slices off the passed proportion of items from both ends of the passed
- array (i.e., with ``cut`` = 0.1, slices leftmost 10% **and**
- rightmost 10% of scores). The trimmed values are the lowest and
- highest ones.
- Slices off less if proportion results in a non-integer slice index.
-
- Parameters
- ----------
- x : 1D np.array
- Input array.
- cut : float
- Proportion (in range 0-1) of total data to trim of each end.
- Default is 0.10, i.e. 10% lowest and 10% highest values are removed.
-
- Returns
- -------
- trimmed_std : float
- Sample standard deviation of the trimmed array.
- """
- x=np.asarray(x)
- n=x.size
- lowercut=int(cut*n)
- uppercut=n-lowercut
- atmp=np.partition(x,(lowercut,uppercut-1))
- sl=slice(lowercut,uppercut)
- returnatmp[sl].std(ddof=1)
-
-
def_merge_close(index,min_distance_ms,sf):"""Merge events that are too close in time.
diff --git a/docs/build/html/_modules/yasa/others.html b/docs/build/html/_modules/yasa/others.html
new file mode 100644
index 0000000..2a821ca
--- /dev/null
+++ b/docs/build/html/_modules/yasa/others.html
@@ -0,0 +1,387 @@
+
+
+
+
+
+ yasa.others — yasa 0.1.7 documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+"""
+This file contains several helper functions to manipulate 1D and 2D EEG data.
+"""
+importnumpyasnp
+fromscipy.interpolateimportinterp1d
+from.numbaimport_slope_lstsq,_covar,_corr,_rms
+
+__all__=['moving_transform','trimbothstd','sliding_window']
+
+
+
[docs]defmoving_transform(x,y=None,sf=100,window=.3,step=.1,method='corr',
+ interp=False):
+ """Moving transformation of one or two time-series.
+
+ Parameters
+ ----------
+ x : array_like
+ Single-channel data
+ y : array_like, optional
+ Second single-channel data (only used if method in ['corr', 'covar']).
+ sf : float
+ Sampling frequency.
+ window : int
+ Window size in seconds.
+ step : int
+ Step in seconds.
+ A step of 0.1 second (100 ms) is usually a good default.
+ If step == 0, overlap at every sample (slowest)
+ If step == nperseg, no overlap (fastest)
+ Higher values = higher precision = slower computation.
+ method : str
+ Transformation to use.
+ Available methods are::
+
+ 'mean' : arithmetic mean of x
+ 'min' : minimum value of x
+ 'max' : maximum value of x
+ 'ptp' : peak-to-peak amplitude of x
+ 'prop_above_zero' : proportion of values of x that are above zero
+ 'rms' : root mean square of x
+ 'slope' : slope of the least-square regression of x (in a.u / sec)
+ 'corr' : Correlation between x and y
+ 'covar' : Covariance between x and y
+ interp : boolean
+ If True, a cubic interpolation is performed to ensure that the output
+ has the same size as the input.
+
+ Returns
+ -------
+ t : np.array
+ Time vector, in seconds, corresponding to the MIDDLE of each epoch.
+ out : np.array
+ Transformed signal
+
+ Notes
+ -----
+ This function was inspired by the `transform_signal` function of the
+ Wonambi package (https://github.com/wonambi-python/wonambi).
+ """
+ # Safety checks
+ assertmethodin['mean','min','max','ptp','rms',
+ 'prop_above_zero','slope','covar','corr']
+ x=np.asarray(x,dtype=np.float64)
+ ifyisnotNone:
+ y=np.asarray(y,dtype=np.float64)
+ assertx.size==y.size
+
+ ifstep==0:
+ step=1/sf
+
+ halfdur=window/2
+ n=x.size
+ total_dur=n/sf
+ last=n-1
+ idx=np.arange(0,total_dur,step)
+ out=np.zeros(idx.size)
+
+ # Define beginning, end and time (centered) vector
+ beg=((idx-halfdur)*sf).astype(int)
+ end=((idx+halfdur)*sf).astype(int)
+ beg[beg<0]=0
+ end[end>last]=last
+ # Alternatively, to cut off incomplete windows (comment the 2 lines above)
+ # mask = ~((beg < 0) | (end > last))
+ # beg, end = beg[mask], end[mask]
+ t=np.column_stack((beg,end)).mean(1)/sf
+
+ ifmethod=='mean':
+ deffunc(x):
+ returnnp.mean(x)
+
+ elifmethod=='min':
+ deffunc(x):
+ returnnp.min(x)
+
+ elifmethod=='max':
+ deffunc(x):
+ returnnp.max(x)
+
+ elifmethod=='ptp':
+ deffunc(x):
+ returnnp.ptp(x)
+
+ elifmethod=='prop_above_zero':
+ deffunc(x):
+ returnnp.count_nonzero(x>=0)/x.size
+
+ elifmethod=='slope':
+ deffunc(x):
+ times=np.arange(x.size,dtype=np.float64)/sf
+ return_slope_lstsq(times,x)
+
+ elifmethod=='covar':
+ deffunc(x,y):
+ return_covar(x,y)
+
+ elifmethod=='corr':
+ deffunc(x,y):
+ return_corr(x,y)
+
+ else:
+ deffunc(x):
+ return_rms(x)
+
+ # Now loop over successive epochs
+ ifmethodin['covar','corr']:
+ foriinrange(idx.size):
+ out[i]=func(x[beg[i]:end[i]],y[beg[i]:end[i]])
+ else:
+ foriinrange(idx.size):
+ out[i]=func(x[beg[i]:end[i]])
+
+ # Finally interpolate
+ ifinterpandstep!=1/sf:
+ f=interp1d(t,out,kind='cubic',bounds_error=False,
+ fill_value=0,assume_sorted=True)
+ t=np.arange(n)/sf
+ out=f(t)
+
+ returnt,out
+
+
+def_zerocrossings(x):
+ """Find indices of zero-crossings in a 1D array.
+
+ Parameters
+ ----------
+ x : np.array
+ One dimensional data vector.
+
+ Returns
+ -------
+ idx_zc : np.array
+ Indices of zero-crossings
+
+ Examples
+ --------
+
+ >>> import numpy as np
+ >>> from yasa.main import _zerocrossings
+ >>> a = np.array([4, 2, -1, -3, 1, 2, 3, -2, -5])
+ >>> _zerocrossings(a)
+ array([1, 3, 6], dtype=int64)
+ """
+ pos=x>0
+ npos=~pos
+ return((pos[:-1]&npos[1:])|(npos[:-1]&pos[1:])).nonzero()[0]
+
+
+
[docs]deftrimbothstd(x,cut=0.10):
+ """
+ Slices off a proportion of items from both ends of an array and then
+ compute the sample standard deviation.
+
+ Slices off the passed proportion of items from both ends of the passed
+ array (i.e., with ``cut`` = 0.1, slices leftmost 10% **and**
+ rightmost 10% of scores). The trimmed values are the lowest and
+ highest ones.
+ Slices off less if proportion results in a non-integer slice index.
+
+ Parameters
+ ----------
+ x : 1D np.array
+ Input array.
+ cut : float
+ Proportion (in range 0-1) of total data to trim of each end.
+ Default is 0.10, i.e. 10% lowest and 10% highest values are removed.
+
+ Returns
+ -------
+ trimmed_std : float
+ Sample standard deviation of the trimmed array.
+ """
+ x=np.asarray(x)
+ n=x.size
+ lowercut=int(cut*n)
+ uppercut=n-lowercut
+ atmp=np.partition(x,(lowercut,uppercut-1))
+ sl=slice(lowercut,uppercut)
+ returnatmp[sl].std(ddof=1)
+
+
+
[docs]defsliding_window(data,sf,window,step=None,axis=-1):
+ """
+ Calculate a sliding window of a 1D or 2D EEG signal.
+
+ .. versionadded:: 0.1.7
+
+ Parameters
+ ----------
+ data : numpy array
+ The 1D or 2D EEG data.
+ sf : float
+ The sampling frequency of ``data``.
+ window : int
+ The sliding window length, in seconds.
+ step : int
+ The sliding window step length, in seconds.
+ If None (default), ``step`` is set to ``window``,
+ which results in no overlap between the sliding windows.
+ axis : int
+ The axis to slide over. Defaults to the last axis.
+
+ Returns
+ -------
+ times : numpy array
+ Time vector, in seconds, corresponding to the START of each sliding
+ epoch in ``strided``.
+ strided : numpy array
+ A matrix where row in last dimension consists of one instance
+ of the sliding window.
+
+ Notes
+ -----
+ This is a wrapper around the
+ :py:func:`numpy.lib.stride_tricks.as_strided` function.
+ """
+ fromnumpy.lib.stride_tricksimportas_strided
+ assertaxis<=data.ndim,"Axis value out of range."
+ assertisinstance(sf,(int,float)),'sf must be int or float'
+ assertisinstance(window,(int,float)),'window must be int or float'
+ assertisinstance(step,(int,float,type(None))),('step must be int, '
+ 'float or None.')
+ ifisinstance(sf,float):
+ assertsf.is_integer(),'sf must be a whole number.'
+ sf=int(sf)
+ assertisinstance(axis,int),'axis must be int.'
+
+ # window and step in samples instead of points
+ window*=sf
+ step=windowifstepisNoneelsestep*sf
+
+ ifisinstance(window,float):
+ assertwindow.is_integer(),'window * sf must be a whole number.'
+ window=int(window)
+
+ ifisinstance(step,float):
+ assertstep.is_integer(),'step * sf must be a whole number.'
+ step=int(step)
+
+ assertstep>=1,"Stepsize may not be zero or negative."
+ assertwindow<data.shape[axis],("Sliding window size may not exceed "
+ "size of selected axis")
+
+ shape=list(data.shape)
+ shape[axis]=np.floor(data.shape[axis]/step-window/step+1
+ ).astype(int)
+ shape.append(window)
+
+ strides=list(data.strides)
+ strides[axis]*=step
+ strides.append(data.strides[axis])
+
+ strided=as_strided(data,shape=shape,strides=strides)
+ t=np.arange(strided.shape[-2])*(step/sf)
+ returnt,strided
Values in ``hypno`` that will be included in the mask. The default is (2, 3), meaning that the bandpower are sequentially calculated for N2 and N3 sleep. This has no effect when ``hypno`` is None.
+ win_sec : int or float
+ The length of the sliding window, in seconds, used for the Welch PSD
+ calculation. Ideally, this should be at least two times the inverse of
+ the lower frequency of interest (e.g. for a lower frequency of interest
+ of 0.5 Hz, the window length should be at least 2 * 1 / 0.5 =
+ 4 seconds). relative : boolean If True, bandpower is divided by the total power between the min and max frequencies defined in ``band``.
@@ -285,10 +292,7 @@
[docs]defirasa(data,sf=None,ch_names=None,band=(1,30),
+ hset=np.arange(1.1,1.95,0.05),return_fit=True,win_sec=4,
+ kwargs_welch=dict(average='median',window='hamming')):
+ """
+ Separate the aperiodic (= fractal, or 1/f) and oscillatory component of the
+ power spectra of EEG data using the IRASA method.
+
+ .. versionadded:: 0.1.7
+
+ Parameters
+ ----------
+ data : :py:class:`numpy.ndarray` or :py:class:`mne.io.BaseRaw`
+ 1D or 2D EEG data. Can also be a :py:class:`mne.io.BaseRaw`, in which
+ case ``data``, ``sf``, and ``ch_names`` will be automatically
+ extracted, and ``data`` will also be converted from Volts (MNE default)
+ to micro-Volts (YASA).
+ sf : float
+ The sampling frequency of data AND the hypnogram.
+ Can be omitted if ``data`` is a :py:class:`mne.io.BaseRaw`.
+ ch_names : list
+ List of channel names, e.g. ['Cz', 'F3', 'F4', ...]. If None,
+ channels will be labelled ['CHAN001', 'CHAN002', ...].
+ Can be omitted if ``data`` is a :py:class:`mne.io.BaseRaw`.
+ band : tuple or None
+ Broad band frequency range.
+ Default is 1 to 30 Hz.
+ hset : :py:class:`numpy.ndarray`
+ Resampling factors used in IRASA calculation. Default is to use a range
+ of values from 1.1 to 1.9 with an increment of 0.05.
+ return_fit : boolean
+ If True (default), fit an exponential function to the aperiodic PSD
+ and return the fit parameters (intercept, slope) and :math:`R^2` of
+ the fit.
+
+ The aperiodic signal, :math:`L`, is modeled using an exponential
+ function in semilog-power space (linear frequencies and log PSD) as:
+
+ .. math:: L = a + \\text{log}(F^b)
+
+ where :math:`a` is the intercept, :math:`b` is the slope, and
+ :math:`F` the vector of input frequencies.
+ win_sec : int or float
+ The length of the sliding window, in seconds, used for the Welch PSD
+ calculation. Ideally, this should be at least two times the inverse of
+ the lower frequency of interest (e.g. for a lower frequency of interest
+ of 0.5 Hz, the window length should be at least 2 * 1 / 0.5 =
+ 4 seconds).
+ kwargs_welch : dict
+ Optional keywords arguments that are passed to the
+ :py:func:`scipy.signal.welch` function.
+
+ Returns
+ -------
+ freqs : :py:class:`numpy.ndarray`
+ Frequency vector.
+ psd_aperiodic : :py:class:`numpy.ndarray`
+ The fractal (= aperiodic) component of the PSD.
+ psd_oscillatory : :py:class:`numpy.ndarray`
+ The oscillatory (= periodic) component of the PSD.
+ fit_params : :py:class:`pandas.DataFrame` (optional)
+ Dataframe of fit parameters. Only if ``return_fit=True``.
+
+ Notes
+ -----
+ The Irregular-Resampling Auto-Spectral Analysis (IRASA) method is
+ described in Wen & Liu (2016). In a nutshell, the goal is to separate the
+ fractal and oscillatory components in the power spectrum of EEG signals.
+
+ The steps are:
+
+ 1. Compute the original power spectral density (PSD) using Welch's method.
+ 2. Resample the EEG data by multiple non-integer factors and their
+ reciprocals (:math:`h` and :math:`1/h`).
+ 3. For every pair of resampled signals, calculate the PSD and take the
+ geometric mean of both. In the resulting PSD, the power associated with
+ the oscillatory component is redistributed away from its original
+ (fundamental and harmonic) frequencies by a frequency offset that varies
+ with the resampling factor, whereas the power solely attributed to the
+ fractal component remains the same power-law statistical distribution
+ independent of the resampling factor.
+ 4. It follows that taking the median of the PSD of the variously
+ resampled signals can extract the power spectrum of the fractal
+ component, and the difference between the original power spectrum and
+ the extracted fractal spectrum offers an approximate estimate of the
+ power spectrum of the oscillatory component.
+
+ Note that an estimate of the original PSD can be calculated by simply
+ adding ``psd = psd_aperiodic + psd_oscillatory``.
+
+ References
+ ----------
+ .. [1] Wen, H., & Liu, Z. (2016). Separating Fractal and Oscillatory
+ Components in the Power Spectrum of Neurophysiological Signal.
+ Brain Topography, 29(1), 13–26.
+ https://doi.org/10.1007/s10548-015-0448-0
+
+ .. [2] https://github.com/fieldtrip/fieldtrip/blob/master/specest/
+
+ .. [3] https://github.com/fooof-tools/fooof
+
+ .. [4] https://www.biorxiv.org/content/10.1101/299859v1
+ """
+ importfractions
+ # Check if input data is a MNE Raw object
+ ifisinstance(data,mne.io.BaseRaw):
+ sf=data.info['sfreq']# Extract sampling frequency
+ ch_names=data.ch_names# Extract channel names
+ data=data.get_data()*1e6# Convert from V to uV
+ else:
+ # Safety checks
+ assertisinstance(data,np.ndarray),'Data must be a numpy array.'
+ data=np.atleast_2d(data)
+ assertdata.ndim==2,'Data must be of shape (nchan, n_samples).'
+ nchan,npts=data.shape
+ assertnchan<npts,'Data must be of shape (nchan, n_samples).'
+ assertsfisnotNone,'sf must be specified if passing a numpy array.'
+ assertisinstance(sf,(int,float))
+ ifch_namesisNone:
+ ch_names=['CHAN'+str(i+1).zfill(3)foriinrange(nchan)]
+ else:
+ ch_names=np.atleast_1d(np.asarray(ch_names,dtype=str))
+ assertch_names.ndim==1,'ch_names must be 1D.'
+ assertlen(ch_names)==nchan,'ch_names must match data.shape[0].'
+
+ # Check the other arguments
+ hset=np.asarray(hset)
+ asserthset.ndim==1,'hset must be 1D.'
+ asserthset.size>1,'2 or more resampling fators are required.'
+ hset=np.round(hset,4)# avoid float precision error with np.arange.
+ band=sorted(band)
+ assertband[0]>0,'first element of band must be > 0.'
+ assertband[1]<(sf/2),'second element of band must be < (sf / 2).'
+ win=int(win_sec*sf)# nperseg
+
+ # Calculate the original PSD over the whole data
+ freqs,psd=signal.welch(data,sf,nperseg=win,**kwargs_welch)
+
+ # Start the IRASA procedure
+ psds=np.zeros((len(hset),*psd.shape))
+
+ fori,hinenumerate(hset):
+ # Get the upsampling/downsampling (h, 1/h) factors as integer
+ rat=fractions.Fraction(str(h))
+ up,down=rat.numerator,rat.denominator
+ # Much faster than FFT-based resampling
+ data_up=signal.resample_poly(data,up,down,axis=-1)
+ data_down=signal.resample_poly(data,down,up,axis=-1)
+ # Calculate the PSD using same params as original
+ freqs_up,psd_up=signal.welch(data_up,h*sf,nperseg=win,
+ **kwargs_welch)
+ freqs_dw,psd_dw=signal.welch(data_down,sf/h,nperseg=win,
+ **kwargs_welch)
+ # Geometric mean of h and 1/h
+ psds[i,:]=np.sqrt(psd_up*psd_dw)
+
+ # Now we take the median PSD of all the resampling factors, which gives
+ # a good estimate of the aperiodic component of the PSD.
+ psd_aperiodic=np.median(psds,axis=0)
+
+ # We can now calculate the oscillations (= periodic) component.
+ psd_osc=psd-psd_aperiodic
+
+ # Let's crop to the frequencies defined in band
+ mask_freqs=np.ma.masked_outside(freqs,*band).mask
+ freqs=freqs[~mask_freqs]
+ psd_aperiodic=np.compress(~mask_freqs,psd_aperiodic,axis=-1)
+ psd_osc=np.compress(~mask_freqs,psd_osc,axis=-1)
+
+ ifreturn_fit:
+ # Aperiodic fit in semilog space for each channel
+ fromscipy.optimizeimportcurve_fit
+ intercepts,slopes,r_squared=[],[],[]
+
+ deffunc(t,a,b):
+ # See https://github.com/fooof-tools/fooof
+ returna+np.log(t**b)
+
+ foryinnp.atleast_2d(psd_aperiodic):
+ y_log=np.log(y)
+ # Note that here we define bounds for the slope but not for the
+ # intercept.
+ popt,pcov=curve_fit(func,freqs,y_log,p0=(2,-1),
+ bounds=((-np.inf,-10),(np.inf,2)))
+ intercepts.append(popt[0])
+ slopes.append(popt[1])
+ # Calculate R^2: https://stackoverflow.com/q/19189362/10581531
+ residuals=y_log-func(freqs,*popt)
+ ss_res=np.sum(residuals**2)
+ ss_tot=np.sum((y_log-np.mean(y_log))**2)
+ r_squared.append(1-(ss_res/ss_tot))
+
+ # Create fit parameters dataframe
+ fit_params={'Chan':ch_names,'Intercept':intercepts,
+ 'Slope':slopes,'R^2':r_squared,
+ 'std(osc)':np.std(psd_osc,axis=-1,ddof=1)}
+ returnfreqs,psd_aperiodic,psd_osc,pd.DataFrame(fit_params)
+ else:
+ returnfreqs,psd_aperiodic,psd_osc
+
+
[docs]defstft_power(data,sf,window=2,step=.2,band=(1,30),interp=True,norm=False):"""Compute the pointwise power via STFT and interpolation.
@@ -339,11 +543,11 @@
Source code for yasa.spectral
Returns -------
- f : ndarray
+ f : :py:class:`numpy.ndarray` Frequency vector
- t : ndarray
+ t : :py:class:`numpy.ndarray` Time vector
- Sxx : ndarray
+ Sxx : :py:class:`numpy.ndarray` Power in the specified frequency bins of shape (f, t) Notes
diff --git a/docs/build/html/_static/documentation_options.js b/docs/build/html/_static/documentation_options.js
index fee47dc..cfcf13a 100644
--- a/docs/build/html/_static/documentation_options.js
+++ b/docs/build/html/_static/documentation_options.js
@@ -1,6 +1,6 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
- VERSION: '0.1.6',
+ VERSION: '0.1.7',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
diff --git a/docs/build/html/api.html b/docs/build/html/api.html
index cfb85f4..b98336c 100644
--- a/docs/build/html/api.html
+++ b/docs/build/html/api.html
@@ -3,7 +3,7 @@
- API reference — yasa 0.1.6 documentation
+ API reference — yasa 0.1.7 documentation
@@ -12,6 +12,7 @@
+
@@ -37,7 +38,7 @@
yasa
- 0.1.6
+ 0.1.7
(2, 3), meaning that the bandpower are sequentially calculated
for N2 and N3 sleep. This has no effect when hypno is None.
+
win_secint or float
The length of the sliding window, in seconds, used for the Welch PSD
+calculation. Ideally, this should be at least two times the inverse of
+the lower frequency of interest (e.g. for a lower frequency of interest
+of 0.5 Hz, the window length should be at least 2 * 1 / 0.5 =
+4 seconds).
+
relativeboolean
If True, bandpower is divided by the total power between the min and
max frequencies defined in band.
1D or 2D EEG data. Can also be a mne.io.BaseRaw, in which
+case data, sf, and ch_names will be automatically
+extracted, and data will also be converted from Volts (MNE default)
+to micro-Volts (YASA).
+
+
sffloat
The sampling frequency of data AND the hypnogram.
+Can be omitted if data is a mne.io.BaseRaw.
+
+
ch_nameslist
List of channel names, e.g. [‘Cz’, ‘F3’, ‘F4’, …]. If None,
+channels will be labelled [‘CHAN001’, ‘CHAN002’, …].
+Can be omitted if data is a mne.io.BaseRaw.
+
+
bandtuple or None
Broad band frequency range.
+Default is 1 to 30 Hz.
Resampling factors used in IRASA calculation. Default is to use a range
+of values from 1.1 to 1.9 with an increment of 0.05.
+
+
return_fitboolean
If True (default), fit an exponential function to the aperiodic PSD
+and return the fit parameters (intercept, slope) and \(R^2\) of
+the fit.
+
The aperiodic signal, \(L\), is modeled using an exponential
+function in semilog-power space (linear frequencies and log PSD) as:
+
+\[L = a + \text{log}(F^b)\]
+
where \(a\) is the intercept, \(b\) is the slope, and
+\(F\) the vector of input frequencies.
+
+
win_secint or float
The length of the sliding window, in seconds, used for the Welch PSD
+calculation. Ideally, this should be at least two times the inverse of
+the lower frequency of interest (e.g. for a lower frequency of interest
+of 0.5 Hz, the window length should be at least 2 * 1 / 0.5 =
+4 seconds).
+
+
kwargs_welchdict
Optional keywords arguments that are passed to the
+scipy.signal.welch() function.
Dataframe of fit parameters. Only if return_fit=True.
+
+
+
+
+
Notes
+
The Irregular-Resampling Auto-Spectral Analysis (IRASA) method is
+described in Wen & Liu (2016). In a nutshell, the goal is to separate the
+fractal and oscillatory components in the power spectrum of EEG signals.
+
The steps are:
+
+
Compute the original power spectral density (PSD) using Welch’s method.
+
Resample the EEG data by multiple non-integer factors and their
+reciprocals (\(h\) and \(1/h\)).
+
For every pair of resampled signals, calculate the PSD and take the
+geometric mean of both. In the resulting PSD, the power associated with
+the oscillatory component is redistributed away from its original
+(fundamental and harmonic) frequencies by a frequency offset that varies
+with the resampling factor, whereas the power solely attributed to the
+fractal component remains the same power-law statistical distribution
+independent of the resampling factor.
+
It follows that taking the median of the PSD of the variously
+resampled signals can extract the power spectrum of the fractal
+component, and the difference between the original power spectrum and
+the extracted fractal spectrum offers an approximate estimate of the
+power spectrum of the oscillatory component.
+
+
Note that an estimate of the original PSD can be calculated by simply
+adding psd=psd_aperiodic+psd_oscillatory.
Wen, H., & Liu, Z. (2016). Separating Fractal and Oscillatory
+Components in the Power Spectrum of Neurophysiological Signal.
+Brain Topography, 29(1), 13–26.
+https://doi.org/10.1007/s10548-015-0448-0
Slices off a proportion of items from both ends of an array and then
compute the sample standard deviation.
Slices off the passed proportion of items from both ends of the passed
diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html
index 7daf96a..e52c781 100644
--- a/docs/build/html/genindex.html
+++ b/docs/build/html/genindex.html
@@ -4,7 +4,7 @@
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js
index 4e7f971..64a4af6 100644
--- a/docs/build/html/searchindex.js
+++ b/docs/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["api","changelog","contributing","generated/yasa.bandpower","generated/yasa.bandpower_from_psd","generated/yasa.get_bool_vector","generated/yasa.get_sync_sw","generated/yasa.hypno_int_to_str","generated/yasa.hypno_str_to_int","generated/yasa.hypno_upsample_to_data","generated/yasa.hypno_upsample_to_sf","generated/yasa.moving_transform","generated/yasa.rem_detect","generated/yasa.spindles_detect","generated/yasa.spindles_detect_multi","generated/yasa.stft_power","generated/yasa.sw_detect","generated/yasa.sw_detect_multi","generated/yasa.trimbothstd","index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["api.rst","changelog.rst","contributing.rst","generated\\yasa.bandpower.rst","generated\\yasa.bandpower_from_psd.rst","generated\\yasa.get_bool_vector.rst","generated\\yasa.get_sync_sw.rst","generated\\yasa.hypno_int_to_str.rst","generated\\yasa.hypno_str_to_int.rst","generated\\yasa.hypno_upsample_to_data.rst","generated\\yasa.hypno_upsample_to_sf.rst","generated\\yasa.moving_transform.rst","generated\\yasa.rem_detect.rst","generated\\yasa.spindles_detect.rst","generated\\yasa.spindles_detect_multi.rst","generated\\yasa.stft_power.rst","generated\\yasa.sw_detect.rst","generated\\yasa.sw_detect_multi.rst","generated\\yasa.trimbothstd.rst","index.rst"],objects:{yasa:{bandpower:[3,0,1,""],bandpower_from_psd:[4,0,1,""],get_bool_vector:[5,0,1,""],get_sync_sw:[6,0,1,""],hypno_int_to_str:[7,0,1,""],hypno_str_to_int:[8,0,1,""],hypno_upsample_to_data:[9,0,1,""],hypno_upsample_to_sf:[10,0,1,""],moving_transform:[11,0,1,""],rem_detect:[12,0,1,""],spindles_detect:[13,0,1,""],spindles_detect_multi:[14,0,1,""],stft_power:[15,0,1,""],sw_detect:[16,0,1,""],sw_detect_multi:[17,0,1,""],trimbothstd:[18,0,1,""]}},objnames:{"0":["py","function","Python function"]},objtypes:{"0":"py:function"},terms:{"01_spindles_detect":19,"02_spindles_detection_multi":19,"03_spindles_detection_nrem_onli":19,"04_spindles_slow_fast":19,"05_run_visbrain":19,"06_sw_detect":19,"07_sw_detection_multi":19,"08_sw_averag":19,"09_rems_detect":19,"10_bandpow":[1,19],"1e6":[12,13,16],"2hz":16,"5hz":13,"boolean":[3,4,5,11,12,13,14,15,16],"case":[3,5,6,9,14,17],"default":[1,3,4,6,11,12,13,14,15,16,18,19],"float":[3,5,6,9,10,11,12,13,14,15,16,17,18],"function":[1,2,3,5,6,7,8,11,14,17,19],"import":19,"int":[3,11,12,13,15,16,19],"new":[2,3,4,7,8,9,10,12],"return":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],"true":[3,4,5,11,12,13,14,15,16,19],AND:3,Added:1,EYE:19,Eye:[12,19],For:[12,13,16,17],One:1,RMS:[13,14,19],The:[2,3,5,6,7,8,9,10,12,13,15,16,18,19],Then:19,There:2,Use:2,aberr:19,about:2,abov:11,absolut:[12,13,14,16],abspow:[13,14,19],accompani:2,activ:19,adapt:19,added:1,adding:2,addit:19,after:[2,6],agarw:19,algorithm:[12,19],all:[2,12,13,15,16,19],allow:19,alpha:[3,4],also:[2,3,5,6,9,14,17,19],amp_neg:[16,19],amp_po:[16,19],amp_ptp:[16,19],amplitud:[6,11,12,13,14,16,17,19],analysi:19,analyz:19,ani:19,anoth:19,api:[1,19],appli:[12,13,14,16,17,19],approach:19,appveyor:1,argument:[1,3,14,17],arithmet:11,around:[7,8],arrai:[4,5,7,8,9,10,11,18,19],array_lik:[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],art:[7,8],artefact:[3,12,13,16,17,19],astyp:19,automat:[1,3,5,6,9,12,13,14,16,17,19],avail:11,averag:[1,3,4,6,19],band:[1,3,4,13,15,16],bandpow:[1,4,19],bandpower_from_psd:1,bandwis:15,base:[12,19],baseraw:[3,5,6,9,12,13,14,16,17],basic:[1,19],befor:[2,6],behavior:[1,14],best:[2,19],bet:2,beta:[3,4],better:[12,13,16,17],between:[3,4,11,16,17],bin:15,biomed:19,bivari:15,bool:[5,15],bool_vector:5,both:[12,18,19],broad:[13,15],bug:[2,19],bui:2,built:19,calcul:[1,3],can:[1,2,3,5,6,9,14,17,19],canthi:12,carrier:19,ch_name:[1,3,4,14,17,19],chan001:[3,4],chan002:[3,4],chan:6,chang:[1,2,19],channel:[1,3,4,6,11,12,13,14,15,16,17,19],check:19,cite:19,click:19,closer:13,code:19,codebas:2,coeffici:13,coffe:2,column:[3,4,13,19],com:11,combin:[1,19],command:19,compil:19,compli:2,comput:[1,4,11,12,15,16,17,18,19],concaten:14,consid:2,contact:19,contain:[3,4],continu:[12,13,16],contribut:19,conveni:19,convert:[1,3,7,8,12,13,14,16,17],corr:[11,13,19],correctli:2,correl:[11,13],correspond:[7,8,9],covar:11,covari:11,creat:19,crop:9,cross:[16,17],cubic:[11,15],current:[9,10],custom:19,cut:18,data:[1,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19],datafram:[3,4,5,6,12,13,14,16,17],def:19,defin:[3,4,12,13,14,16],deflect:16,degre:15,delta:[3,4],densiti:4,depend:[12,13,16,19],describ:19,descript:19,desir:[10,19],detail:[4,19],detect:[1,5,6,12,13,14,16,17,19],detrend:1,deviat:18,df_rem:12,df_sw:6,dict:[3,7,8,13],dictionnari:[7,8],dimension:19,directli:1,directori:2,discuss:2,displai:19,divid:[3,4],doc:2,docstr:2,doi:19,done:[2,15],downsampl:[12,13,16,19],dur_neg:[16,19],dur_po:[16,19],durat:[12,13,14,16,17,19],dure:19,each:[3,4,5,9,10,12,13,14,15,16,17,18,19],easili:19,edf:19,edit:2,editor:19,eeg:[3,4,5,6,9,10,13,16,19],eegfil:19,effect:[3,12,13,16],either:19,emul:19,end:[12,13,14,16,17,18,19],engin:19,ensembl:[12,13,16],ensur:[2,11,12,13,15,16],eog:[1,12,19],equal:15,especi:19,essenti:[7,8],etc:[2,19],eur:19,event:[5,6,19],everi:[11,15],exact:[3,9],exampl:[1,2],except:13,exist:2,expert:19,extens:19,extract:[1,3,5,6,9,14,17],eye:19,facilit:19,fake:19,fall:12,fals:[5,11,12,13,14,15,16,19],fast:19,faster:[1,15],fastest:[11,15],fcn_spindl:19,featur:19,feel:19,few:19,file:[1,19],filipini:19,filter:[12,13,16,17],fir:[13,16],first:[12,13,16],fit:9,flake8:2,follow:[2,19],forest:[1,19],format:[2,3,12,13,16,19],fortun:19,found:1,free:[12,13,16,17,19],freq:4,freq_broad:[13,19],freq_rem:[12,19],freq_sp:[13,19],freq_sw:[16,19],frequenc:[1,3,4,5,6,9,10,11,12,13,14,15,16,17,19],from:[1,3,12,13,14,16,17,18,19],full:[1,19],gamma:[3,4],generaliz:2,get:1,get_data:[12,13,16],get_sync_sw:1,github:[2,11,19],given:[4,5,9,10],good:[11,15],gotman:19,graphic:19,great:19,greatli:19,grid:15,gui:19,guidanc:2,ham:3,has:[3,11,12,13,16],have:[3,9,12,13,16,19],higher:[11,15],highest:18,highli:2,how:19,html:[1,2,19],http:[11,19],human:19,hypno:[1,3,7,8,9,10,12,13,14,16,17,19],hypno_upsample_to_data:[3,12,13,16],hypnogram:[1,3,7,8,9,10,12,13,16,19],identifi:19,idxchannel:[14,17],ieee:19,implement:[13,16,19],implicit:19,improv:[1,2],includ:[1,2,3,12,13,16,19],incorpor:19,index:[13,14,17,18,19],indic:5,initi:1,input:[11,15,18,19],inspir:[11,19],instal:2,instanc:19,instead:1,integ:[3,7,8,12,13,14,16,17,18,19],interest:[3,4,13],interfac:19,interp2d:15,interp:[11,15],interpol:[11,15],ipynb:[1,19],isol:[1,19],isolationforest:[12,13,16],issu:[2,19],item:18,journal:19,jupyt:[1,19],just:[14,19],kept:14,keyword:[3,14,17],kind:19,knowledg:19,kwarg:[14,17],kwargs_welch:3,lab:19,label:[3,4],lacours:19,landmark:[1,6],larg:19,learn:[2,19],least:[11,14],left:12,leftmost:18,less:18,librari:19,life:19,like:2,lineplot:1,list:[3,4,12,13,14,16,17],load:[1,3,12,13,16,19],loc:[1,12,19],locabsfallslop:12,locabsriseslop:12,locabsvalpeak:12,local:2,locat:[12,13,16,17],log10:[13,14],longer:9,lower:[3,4,15],lowercas:8,lowest:18,machin:19,main:19,maintain:19,make:[2,12,13,16,19],mani:2,manipul:19,manual:1,map:[7,8],mapping_dict:[7,8],mask:[1,3,12,13,16,19],massimini:19,max:[3,4,9,11],maximum:[11,12,13,16],mean:[3,11,12,13,14,16],median:[3,13,14],mednick:19,merg:13,method:[11,19],micro:[3,12,13,14,16,17],microstructur:19,midcross:[16,17],middl:19,min:[3,4,11],min_dist:[13,19],minimum:[11,12,13,16],minor:1,mne:[1,3,5,6,9,12,13,14,16,17,19],modul:19,more:[2,4,12,13,16,19],move:11,movement:[3,12,13,16,19],much:15,multi:[1,6,14,17,19],multi_onli:14,multipl:[12,13,16],multipli:[12,13,16],must:[2,3,4,12,13,14,16,17,19],n_chan:[14,17],n_channel:4,n_freq:4,n_sampl:[14,17],name:[1,3,4,14,17],navig:19,ndarrai:[5,15],need:[2,9,12,13,16,19],neg:[6,12,16,17],negpeak:[6,16,17],neurosci:19,night:[1,19],non:18,none:[3,4,5,6,9,11,12,13,14,15,16,17,19],norm:15,normal:15,note:[7,8,11,12,13,15,16,17,19],notebook:1,now:1,nperseg:[11,15],nrem:[13,16,17,19],numba:19,number:[3,6,9,12,13,14,16,19],numpi:[2,5,19],numpydoc:2,object:[1,19],ocular:12,off:18,omit:[3,5,6,9,14,17],one:[11,19],ones:18,onli:[6,11,12,13,14,16,17,19],open:[2,19],oper:19,optim:1,option:[3,11,19],order:19,org:19,origin:[5,12,13,16],oscil:[13,14,19],ouput:[6,12,13,14,16,17],out:[11,19],outlier:[12,13,16],output:[11,12,14,15],overlap:[11,15],own:19,packag:[2,11,19],pad:9,panda:[3,4,5,6,7,8,12,13,14,16,17,19],paramet:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19],part:5,pass:[1,2,3,12,13,14,16,17,18],path:19,peak:[6,11,12,13,14,16,17],pearson:13,pep8:2,per:[1,9,10,19],perform:[1,11,13,15,16,19],pip:[2,19],place:[12,13,16],pleas:[2,3,12,13,16,19],plot:[1,6,19],point:[13,15,16],pointwis:15,posit:[16,17],pospeak:[16,17],post:[1,19],potenti:2,power:[1,3,4,13,14,15],pre:[1,4],precis:[11,15],prerequisit:19,present:14,process:[1,19],product:12,program:19,prop_above_zero:11,properli:2,proport:[11,18],provid:[12,13,14,16,17,19],psd:[1,4],pseudo:19,ptp:[11,16,17],pull:19,pytest:2,python:[1,2,11,19],random:[12,13,16],rang:[12,13,14,15,16,18],raphael:19,rapid:[12,19],ratio:13,raw:[1,6,12,13,16,19],read_raw_edf:19,readm:1,realli:19,recommend:2,record:19,rectangular:15,rectbivariatesplin:15,refer:[3,12,13,16,19],regress:11,rel:[3,4,13,14],rel_pow:[13,19],releas:1,relpow:[13,14,19],rem:[1,3,8,12,13,16,19],rem_detect:[1,5,19],remov:[12,13,16,18,19],remove_outli:[12,13,16,19],render:2,replac:19,replace_detect:19,report:[2,19],repositori:19,reproduc:[12,13,16],request:19,requir:[12,19],resolut:15,respect:[9,12,13,16],restructuredtext:2,result:[9,12,13,16,17,18,19],right:12,rightmost:18,rise:12,rms:[11,13,19],robust:19,roc:[1,12,19],rocabsfallslop:12,rocabsriseslop:12,rocabsvalpeak:12,root:[11,13,14],row:[3,4,19],run:[2,19],same:[3,9,11,12,13,15,16,19],sampl:[1,3,5,6,9,10,11,12,13,14,15,16,17,18,19],scikit:19,scipi:[3,4,15,19],score:[18,19],seaborn:1,sec:[11,16,17],second:[6,9,10,11,12,13,14,15,16,17,19],see:[1,2,4,19],seed:[12,13,16],select:[1,14],sequenti:3,seri:[7,8,11],sever:[1,19],sf_data:[9,10],sf_hypno:[9,10],shape:[4,9,14,15,17,19],shorter:9,should:1,show:19,signal:[3,4,11,12,16,17],simplest:2,simpli:19,singl:[1,11,13,14,15,16,19],situat:2,size:[11,15],sklearn:[12,13,16],sleep:[1,3,7,8,9,10,12,13,14,16,17,19],slice:18,slope:[11,12,16,17],slow:[1,6,16,17,19],slower:[11,15],slowest:[11,15],snippet:19,some:[1,19],sourc:[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],sp_param:[13,14],specif:[6,19],specifi:[1,3,4,15,19],spectral:[1,3,4,19],speed:19,sphinx:2,sphinx_bootstrap_them:2,spindl:[1,13,14,19],spindles_detect:[5,14,19],spindles_detect_multi:[1,19],spline:15,squar:[11,13,14],stage:[1,3,7,8,9,10,12,13,14,16,17,19],standard:[2,18],start:[2,12,13,14,16,17,19],std:13,step:[11,12,13,15,16,19],stft:15,str:[6,11,14,17],string:[7,8],studi:19,style:2,submit:19,sum:15,support:1,sure:[2,12,13,16,19],sw_detect:[5,6,17,19],sw_detect_multi:[6,19],sw_param:[16,17],sxx:15,symmetri:[13,14,19],synchron:[1,6],tab:19,templat:[1,6,19],test:[1,2],than:[9,12,13,15,16,19],thei:[2,13,19],them:2,therefor:[9,12,13,16],theta:[3,4],thi:[1,2,3,5,6,7,8,11,12,13,16,17,19],those:2,thresh:[13,19],threshold:[12,13],time:[1,6,11,12,13,14,15,16,17,19],time_aft:6,time_befor:6,timepoint:[1,6],timestamp:19,tononi:19,toolbox:19,total:[3,4,18],transact:19,transform:11,transform_sign:11,transit:[13,16],travel:19,travi:1,trim:18,trimmed_std:18,trough:16,tupl:[3,4,12,13,15,16],turn:19,two:[11,13,14],uniqu:19,unit:[12,13,14,16,17,19],updat:[1,2,19],upgrad:[2,19],upper:[3,4],upsampl:[1,3,9,10,12,13,16,19],use:[2,6,11,15,19],used:[1,6,11,19],useful:19,user:19,userwarn:9,uses:[2,12,13,16],using:[12,13,15,16,19],usual:[11,15],vallat:19,valnegpeak:[16,17],valpospeak:[16,17],valu:[1,3,9,10,11,12,13,15,16,18,19],variou:2,vector:[1,3,5,11,12,13,15,16,19],version:[3,4,7,8,9,10,12],via:[1,15],visbrain:1,visit:19,volt:[1,3,12,13,14,16,17],wai:2,wake:[3,8,12,13,16,19],want:2,warbi:19,warn:9,warranti:19,wave:[1,6,16,17,19],web:19,welch:[3,4],welcom:19,well:[3,4,19],what:19,when:[2,3,12,13,16],where:[3,12,13,16,19],whether:[12,13,16],which:[1,3,4,5,6,9,13,14,15,16,17,19],win_sec:3,window:[3,11,15],within:2,wonambi:11,work:19,wrapper:[7,8],written:19,yasa:[1,19],year:19,yet:19,yetton:19,you:[2,12,13,16,19],your:[2,3,12,13,16,19],zenodo:19,zero:[11,16,17]},titles:["API reference","What\u2019s new","Contribute to YASA","yasa.bandpower","yasa.bandpower_from_psd","yasa.get_bool_vector","yasa.get_sync_sw","yasa.hypno_int_to_str","yasa.hypno_str_to_int","yasa.hypno_upsample_to_data","yasa.hypno_upsample_to_sf","yasa.moving_transform","yasa.rem_detect","yasa.spindles_detect","yasa.spindles_detect_multi","yasa.stft_power","yasa.sw_detect","yasa.sw_detect_multi","yasa.trimbothstd","Installation"],titleterms:{"new":1,api:0,august:1,bandpow:[0,3],bandpower_from_psd:4,build:2,check:2,citat:19,code:2,contribut:2,datafram:19,decemb:1,detect:0,develop:19,document:2,exampl:19,februari:1,get_bool_vector:5,get_sync_sw:6,guidelin:2,hypno_int_to_str:7,hypno_str_to_int:8,hypno_upsample_to_data:9,hypno_upsample_to_sf:10,hypnogram:0,instal:19,interact:19,januari:1,mai:1,march:1,moving_transform:11,notebook:19,other:0,outlier:19,output:19,refer:0,reject:19,rem_detect:12,spindles_detect:13,spindles_detect_multi:14,stft_power:15,sw_detect:16,sw_detect_multi:17,trimbothstd:18,typic:19,uses:19,visbrain:19,visual:19,what:1,yasa:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}})
\ No newline at end of file
+Search.setIndex({docnames:["api","changelog","contributing","generated/yasa.bandpower","generated/yasa.bandpower_from_psd","generated/yasa.get_bool_vector","generated/yasa.get_sync_sw","generated/yasa.hypno_int_to_str","generated/yasa.hypno_str_to_int","generated/yasa.hypno_upsample_to_data","generated/yasa.hypno_upsample_to_sf","generated/yasa.irasa","generated/yasa.moving_transform","generated/yasa.rem_detect","generated/yasa.sliding_window","generated/yasa.spindles_detect","generated/yasa.spindles_detect_multi","generated/yasa.stft_power","generated/yasa.sw_detect","generated/yasa.sw_detect_multi","generated/yasa.trimbothstd","index"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["api.rst","changelog.rst","contributing.rst","generated\\yasa.bandpower.rst","generated\\yasa.bandpower_from_psd.rst","generated\\yasa.get_bool_vector.rst","generated\\yasa.get_sync_sw.rst","generated\\yasa.hypno_int_to_str.rst","generated\\yasa.hypno_str_to_int.rst","generated\\yasa.hypno_upsample_to_data.rst","generated\\yasa.hypno_upsample_to_sf.rst","generated\\yasa.irasa.rst","generated\\yasa.moving_transform.rst","generated\\yasa.rem_detect.rst","generated\\yasa.sliding_window.rst","generated\\yasa.spindles_detect.rst","generated\\yasa.spindles_detect_multi.rst","generated\\yasa.stft_power.rst","generated\\yasa.sw_detect.rst","generated\\yasa.sw_detect_multi.rst","generated\\yasa.trimbothstd.rst","index.rst"],objects:{yasa:{bandpower:[3,0,1,""],bandpower_from_psd:[4,0,1,""],get_bool_vector:[5,0,1,""],get_sync_sw:[6,0,1,""],hypno_int_to_str:[7,0,1,""],hypno_str_to_int:[8,0,1,""],hypno_upsample_to_data:[9,0,1,""],hypno_upsample_to_sf:[10,0,1,""],irasa:[11,0,1,""],moving_transform:[12,0,1,""],rem_detect:[13,0,1,""],sliding_window:[14,0,1,""],spindles_detect:[15,0,1,""],spindles_detect_multi:[16,0,1,""],stft_power:[17,0,1,""],sw_detect:[18,0,1,""],sw_detect_multi:[19,0,1,""],trimbothstd:[20,0,1,""]}},objnames:{"0":["py","function","Python function"]},objtypes:{"0":"py:function"},terms:{"01_spindles_detect":21,"02_spindles_detection_multi":21,"03_spindles_detection_nrem_onli":21,"04_spindles_slow_fast":21,"05_run_visbrain":21,"06_sw_detect":21,"07_sw_detection_multi":21,"08_sw_averag":21,"09_rems_detect":21,"10_bandpow":[1,21],"11_irasa":21,"1e6":[13,15,18],"299859v1":11,"2hz":18,"5hz":15,"boolean":[3,4,5,11,12,13,15,16,17,18],"case":[3,5,6,9,11,16,19],"default":[1,3,4,6,11,12,13,14,15,16,17,18,20,21],"float":[3,5,6,9,10,11,12,13,14,15,16,17,18,19,20],"function":[1,2,3,5,6,7,8,11,12,14,16,19,21],"import":21,"int":[3,11,12,13,14,15,17,18,21],"new":[2,3,4,7,8,9,10,11,13,14],"return":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"true":[3,4,5,11,12,13,15,16,17,18,21],AND:[3,11],Added:1,EYE:21,Eye:[13,21],For:[11,13,15,18,19],One:1,RMS:[15,16,21],The:[2,3,5,6,7,8,9,10,11,13,14,15,17,18,20,21],Then:21,There:2,Use:2,aberr:21,about:2,abov:12,absolut:[13,15,16,18],abspow:[15,16,21],accompani:2,activ:21,adapt:21,added:1,adding:[2,11],addit:21,after:[2,6],agarw:21,algorithm:[13,21],all:[2,13,15,17,18,21],allow:21,alpha:[3,4],also:[2,3,5,6,9,11,16,19,21],amp_neg:[18,21],amp_po:[18,21],amp_ptp:[18,21],amplitud:[6,12,13,15,16,18,19,21],analysi:[11,21],analyz:21,ani:21,anoth:21,aperiod:[11,21],api:[1,21],appli:[13,15,16,18,19,21],approach:21,approxim:11,appveyor:1,argument:[1,3,11,16,19],arithmet:12,around:[7,8,14],arrai:[4,5,7,8,9,10,11,12,14,20,21],array_lik:[3,4,5,6,7,8,9,10,12,13,15,16,17,18,19],art:[7,8],artefact:[3,13,15,18,19,21],as_strid:14,associ:11,astyp:21,attribut:11,auto:11,automat:[1,3,5,6,9,11,13,15,16,18,19,21],avail:12,averag:[1,3,4,6,11,21],awai:11,axi:14,band:[1,3,4,11,15,17,18],bandpow:[1,4,21],bandpower_from_psd:1,bandwis:17,base:[13,21],baseraw:[3,5,6,9,11,13,15,16,18,19],basic:[1,21],befor:[2,6],behavior:[1,16],best:[2,21],bet:2,beta:[3,4],better:[13,15,18,19],between:[3,4,11,12,14,18,19],bin:17,biomed:21,biorxiv:11,bivari:17,blob:11,bool:[5,17],bool_vector:5,both:[11,13,20,21],brain:11,broad:[11,15,17],bug:[2,21],bui:2,built:21,calcul:[1,3,11,14],can:[1,2,3,5,6,9,11,16,19,21],canthi:13,carrier:21,ch_name:[1,3,4,11,16,19,21],chan001:[3,4,11],chan002:[3,4,11],chan:6,chang:[1,2,21],channel:[1,3,4,6,11,12,13,15,16,17,18,19,21],check:21,cite:21,click:21,closer:15,code:[1,21],codebas:2,coeffici:15,coffe:2,column:[3,4,15,21],com:[11,12],combin:[1,21],command:21,compil:21,compli:2,compon:[11,21],comput:[1,4,11,12,13,17,18,19,20,21],concaten:16,consid:2,consist:14,contact:21,contain:[3,4],content:11,continu:[13,15,18],contribut:21,conveni:21,convert:[1,3,7,8,11,13,15,16,18,19],corr:[12,15,21],correctli:2,correl:[12,15],correspond:[7,8,9,12,14],covar:12,covari:12,creat:21,crop:9,cross:[18,19],cubic:[12,17],current:[9,10],custom:21,cut:20,data:[1,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21],datafram:[3,4,5,6,11,13,15,16,18,19],def:21,defin:[3,4,13,15,16,18],deflect:18,degre:17,delta:[3,4],densiti:[4,11],depend:[13,15,18,21],describ:[11,21],descript:21,desir:[10,21],detail:[4,21],detect:[1,5,6,13,15,16,18,19,21],detrend:1,deviat:20,df_rem:13,df_sw:6,dict:[3,7,8,11,15],dictionnari:[7,8],differ:11,dimens:14,dimension:21,directli:1,directori:2,discuss:2,displai:21,distribut:11,divid:[3,4],doc:2,docstr:2,doi:[11,21],done:[2,17],downsampl:[13,15,18,21],dur_neg:[18,21],dur_po:[18,21],durat:[13,15,16,18,19,21],dure:21,each:[3,4,5,9,10,12,13,14,15,16,17,18,19,20,21],easili:21,edf:21,edit:2,editor:21,eeg:[3,4,5,6,9,10,11,14,15,18,21],eegfil:21,effect:[1,3,13,15,18],either:21,emul:21,end:[13,15,16,18,19,20,21],engin:21,ensembl:[13,15,18],ensur:[2,12,13,15,17,18],eog:[1,13,21],epoch:[12,14],equal:17,especi:21,essenti:[7,8],estim:11,etc:[2,21],eur:21,event:[5,6,21],everi:[11,12,17],exact:[3,9],exampl:[1,2],except:15,exist:2,experi:1,expert:21,exponenti:11,extens:21,extract:[1,3,5,6,9,11,16,19],eye:21,facilit:21,factor:11,fake:21,fall:13,fals:[5,12,13,15,16,17,18,21],fast:21,faster:[1,17],fastest:[12,17],fcn_spindl:21,featur:21,feel:21,few:21,fieldtrip:11,file:[1,21],filipini:21,filter:[13,15,18,19],fir:[15,18],first:[13,15,18],fit:[9,11],fit_param:11,flake8:2,follow:[2,11,21],fooof:11,forest:[1,21],format:[2,3,13,15,18,21],fortun:21,found:1,fractal:[11,21],free:[13,15,18,19,21],freq:[4,11],freq_broad:[15,21],freq_rem:[13,21],freq_sp:[15,21],freq_sw:[18,21],frequenc:[1,3,4,5,6,9,10,11,12,13,14,15,16,17,18,19,21],from:[1,3,11,13,15,16,18,19,20,21],full:[1,21],fundament:11,gamma:[3,4],generaliz:2,geometr:11,get:1,get_data:[13,15,18],get_sync_sw:1,github:[2,11,12,21],given:[4,5,9,10],goal:11,good:[12,17],gotman:21,graphic:21,great:21,greatli:21,grid:17,gui:21,guidanc:2,ham:[3,11],harmon:11,has:[3,12,13,15,18],have:[3,9,13,15,18,21],higher:[12,17],highest:20,highli:2,how:21,hset:11,html:[1,2,21],http:[11,12,21],human:21,hypno:[1,3,7,8,9,10,13,15,16,18,19,21],hypno_upsample_to_data:[3,13,15,18],hypnogram:[1,3,7,8,9,10,11,13,15,18,21],ideal:[3,11],identifi:21,idxchannel:[16,19],ieee:21,implement:[15,18,21],implicit:21,improv:[1,2],includ:[1,2,3,13,15,18,21],incorpor:21,increment:11,independ:11,index:[15,16,19,20,21],indic:5,initi:1,input:[11,12,17,20,21],inspir:[12,21],instal:2,instanc:[14,21],instead:1,integ:[3,7,8,11,13,15,16,18,19,20,21],intercept:11,interest:[3,4,11,15],interfac:21,intern:1,interp2d:17,interp:[12,17],interpol:[12,17],invers:[3,11],ipynb:[1,21],irasa:[1,21],irregular:11,isol:[1,21],isolationforest:[13,15,18],issu:[2,21],item:20,its:11,journal:21,jupyt:[1,21],just:[16,21],kept:16,keyword:[3,11,16,19],kind:21,knowledg:21,kwarg:[16,19],kwargs_welch:[3,11],lab:21,label:[3,4,11],lacours:21,landmark:[1,6],larg:21,last:14,law:11,learn:[2,21],least:[3,11,12,16],left:13,leftmost:20,length:[3,11,14],less:20,lib:14,librari:21,life:21,like:2,linear:11,lineplot:1,list:[3,4,11,13,15,16,18,19],liu:11,load:[1,3,13,15,18,21],loc:[1,13,21],locabsfallslop:13,locabsriseslop:13,locabsvalpeak:13,local:2,locat:[13,15,18,19],log10:[15,16],log:11,longer:9,lower:[3,4,11,17],lowercas:8,lowest:20,machin:21,main:21,maintain:21,make:[2,13,15,18,21],mani:2,manipul:21,manual:1,map:[7,8],mapping_dict:[7,8],mask:[1,3,13,15,18,21],massimini:21,master:11,matrix:14,max:[3,4,9,12],maximum:[12,13,15,18],mean:[3,11,12,13,15,16,18],median:[3,11,15,16],mednick:21,merg:15,method:[11,12,21],micro:[3,11,13,15,16,18,19],microstructur:21,midcross:[18,19],middl:[12,21],min:[3,4,12],min_dist:[15,21],minimum:[12,13,15,18],minor:1,mne:[1,3,5,6,9,11,13,15,16,18,19,21],model:11,modul:21,more:[2,4,13,15,18,21],move:12,movement:[3,13,15,18,21],much:17,multi:[1,6,16,19,21],multi_onli:16,multipl:[11,13,15,18],multipli:[13,15,18],must:[2,3,4,13,15,16,18,19,21],n_chan:[16,19],n_channel:4,n_freq:4,n_sampl:[16,19],name:[1,3,4,11,16,19],navig:21,ndarrai:[5,11,17],need:[2,9,13,15,18,21],neg:[6,13,18,19],negpeak:[6,18,19],neurophysiolog:11,neurosci:21,night:[1,21],non:[11,20],none:[3,4,5,6,9,11,12,13,14,15,16,17,18,19,21],norm:17,normal:17,note:[7,8,11,12,13,14,15,17,18,19,21],notebook:1,now:1,nperseg:[12,17],nrem:[15,18,19,21],numba:21,number:[3,6,9,13,15,16,18,21],numpi:[2,5,11,14,17,21],numpydoc:2,nutshel:11,object:[1,21],ocular:13,off:20,offer:11,offset:11,omit:[3,5,6,9,11,16,19],one:[12,14,21],ones:20,onli:[6,11,12,13,15,16,18,19,21],open:[2,21],oper:21,optim:1,option:[3,11,12,21],order:21,org:[11,21],origin:[5,11,13,15,18],oscil:[15,16,21],oscillatori:11,ouput:[6,13,15,16,18,19],out:[12,21],outlier:[13,15,18],output:[12,13,16,17],over:14,overlap:[12,14,17],own:21,packag:[2,12,21],pad:9,pair:11,panda:[3,4,5,6,7,8,11,13,15,16,18,19,21],paramet:[1,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],part:5,pass:[1,2,3,11,13,15,16,18,19,20],path:21,peak:[6,12,13,15,16,18,19],pearson:15,pep8:2,per:[1,9,10,21],perform:[1,12,15,17,18,21],period:11,pip:[2,21],place:[13,15,18],pleas:[2,3,13,15,18,21],plot:[1,6,21],point:[15,17,18],pointwis:17,posit:[18,19],pospeak:[18,19],post:[1,21],potenti:2,power:[1,3,4,11,15,16,17,21],pre:[1,4],precis:[12,17],prerequisit:21,present:16,process:[1,21],product:13,program:21,prop_above_zero:12,properli:2,proport:[12,20],provid:[13,15,16,18,19,21],psd:[1,3,4,11],psd_aperiod:11,psd_oscillatori:11,pseudo:21,ptp:[12,18,19],pull:21,pytest:2,python:[1,2,12,21],random:[13,15,18],rang:[11,13,15,16,17,18,20],raphael:21,rapid:[13,21],ratio:15,raw:[1,6,13,15,18,21],read_raw_edf:21,readabl:1,readm:1,realli:21,reciproc:11,recommend:2,record:21,rectangular:17,rectbivariatesplin:17,redistribut:11,refer:[3,11,13,15,18,21],regress:12,rel:[3,4,15,16],rel_pow:[15,21],releas:1,relpow:[15,16,21],rem:[1,3,8,13,15,18,21],rem_detect:[1,5,21],remain:11,remov:[13,15,18,20,21],remove_outli:[13,15,18,21],render:2,reorgan:1,replac:21,replace_detect:21,report:[2,21],repositori:21,reproduc:[13,15,18],request:21,requir:[13,21],resampl:11,resolut:17,respect:[9,13,15,18],restructuredtext:2,result:[9,11,13,14,15,18,19,20,21],return_fit:11,right:13,rightmost:20,rise:13,rms:[12,15,21],robust:21,roc:[1,13,21],rocabsfallslop:13,rocabsriseslop:13,rocabsvalpeak:13,root:[12,15,16],row:[3,4,14,21],run:[2,21],s10548:11,same:[3,9,11,12,13,15,17,18,21],sampl:[1,3,5,6,9,10,11,12,13,14,15,16,17,18,19,20,21],scikit:21,scipi:[3,4,11,17,21],score:[20,21],seaborn:1,sec:[12,18,19],second:[3,6,9,10,11,12,13,14,15,16,17,18,19,21],see:[1,2,4,21],seed:[13,15,18],select:[1,16],semilog:11,separ:[11,21],sequenti:3,seri:[7,8,12],set:14,sever:[1,21],sf_data:[9,10],sf_hypno:[9,10],shape:[4,9,16,17,19,21],shorter:9,should:[1,3,11],show:21,signal:[3,4,11,12,13,14,18,19],simplest:2,simpli:[11,21],singl:[1,12,15,16,17,18,21],situat:2,size:[12,17],sklearn:[13,15,18],sleep:[1,3,7,8,9,10,13,15,16,18,19,21],slice:20,slide:[3,11,14],sliding_window:1,slope:[11,12,13,18,19],slow:[1,6,18,19,21],slower:[12,17],slowest:[12,17],snippet:21,sole:11,some:[1,21],sourc:[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],sp_param:[15,16],space:11,specest:11,specif:[6,21],specifi:[1,3,4,17,21],spectra:[11,21],spectral:[1,3,4,11,21],spectrum:11,speed:21,sphinx:2,sphinx_bootstrap_them:2,spindl:[1,15,16,21],spindles_detect:[5,16,21],spindles_detect_multi:[1,21],spline:17,squar:[12,15,16],stage:[1,3,7,8,9,10,13,15,16,18,19,21],standard:[2,20],start:[2,13,14,15,16,18,19,21],statist:11,std:15,step:[11,12,13,14,15,17,18,21],stft:17,str:[6,12,16,19],stride:14,stride_trick:14,string:[7,8],studi:21,style:2,sub:1,submit:21,sum:17,support:1,sure:[2,13,15,18,21],sw_detect:[5,6,19,21],sw_detect_multi:[6,21],sw_param:[18,19],sxx:17,symmetri:[15,16,21],synchron:[1,6],tab:21,take:11,templat:[1,6,21],test:[1,2],text:11,than:[9,13,15,17,18,21],thei:[2,15,21],them:2,therefor:[9,13,15,18],theta:[3,4],thi:[1,2,3,5,6,7,8,11,12,13,14,15,18,19,21],those:2,thresh:[15,21],threshold:[13,15],time:[1,3,6,11,12,13,14,15,16,17,18,19,21],time_aft:6,time_befor:6,timepoint:[1,6],timestamp:21,tononi:21,tool:11,toolbox:21,topographi:11,total:[3,4,20],transact:21,transform:12,transform_sign:12,transit:[15,18],travel:21,travi:1,trim:20,trimmed_std:20,trough:18,tupl:[3,4,11,13,15,17,18],turn:21,two:[3,11,12,15,16],uniqu:21,unit:[13,15,16,18,19,21],updat:[1,2,21],upgrad:[2,21],upper:[3,4],upsampl:[1,3,9,10,13,15,18,21],use:[2,6,11,12,17,21],used:[1,3,6,11,12,21],useful:21,user:[1,21],userwarn:9,uses:[2,13,15,18],using:[11,13,15,17,18,21],usual:[12,17],vallat:21,valnegpeak:[18,19],valpospeak:[18,19],valu:[1,3,9,10,11,12,13,15,17,18,20,21],vari:11,variou:2,various:11,vector:[1,3,5,11,12,13,14,15,17,18,21],version:[3,4,7,8,9,10,11,13,14],via:[1,17],visbrain:1,visit:21,volt:[1,3,11,13,15,16,18,19],wai:2,wake:[3,8,13,15,18,21],want:2,warbi:21,warn:9,warranti:21,wave:[1,6,18,19,21],web:21,welch:[3,4,11],welcom:21,well:[3,4,21],wen:11,what:21,when:[2,3,13,15,18],where:[3,11,13,14,15,18,21],wherea:11,whether:[13,15,18],which:[1,3,4,5,6,9,11,14,15,16,17,18,19,21],win_sec:[3,11],window:[3,11,12,14,17],within:2,wonambi:12,work:21,wrapper:[7,8,14],written:21,www:11,yasa:[1,21],year:21,yet:21,yetton:21,you:[2,13,15,18,21],your:[2,3,13,15,18,21],zenodo:21,zero:[12,18,19]},titles:["API reference","What\u2019s new","Contribute to YASA","yasa.bandpower","yasa.bandpower_from_psd","yasa.get_bool_vector","yasa.get_sync_sw","yasa.hypno_int_to_str","yasa.hypno_str_to_int","yasa.hypno_upsample_to_data","yasa.hypno_upsample_to_sf","yasa.irasa","yasa.moving_transform","yasa.rem_detect","yasa.sliding_window","yasa.spindles_detect","yasa.spindles_detect_multi","yasa.stft_power","yasa.sw_detect","yasa.sw_detect_multi","yasa.trimbothstd","Installation"],titleterms:{"new":1,analys:0,api:0,august:1,bandpow:3,bandpower_from_psd:4,build:2,check:2,citat:21,code:2,contribut:2,datafram:21,decemb:1,detect:0,develop:21,document:2,exampl:21,februari:1,get_bool_vector:5,get_sync_sw:6,guidelin:2,hypno_int_to_str:7,hypno_str_to_int:8,hypno_upsample_to_data:9,hypno_upsample_to_sf:10,hypnogram:0,instal:21,interact:21,irasa:11,januari:1,mai:1,march:1,moving_transform:12,notebook:21,other:[],outlier:21,output:21,process:0,refer:0,reject:21,rem_detect:13,signal:0,sliding_window:14,spectral:0,spindles_detect:15,spindles_detect_multi:16,stft_power:17,sw_detect:18,sw_detect_multi:19,trimbothstd:20,typic:21,uses:21,visbrain:21,visual:21,what:1,yasa:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]}})
\ No newline at end of file
diff --git a/docs/changelog.rst b/docs/changelog.rst
index 72056fe..df8e0de 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -3,12 +3,12 @@
What's new
##########
-v0.1.7
-------
+v0.1.7 (August 2019)
+--------------------
a. Added :py:func:`yasa.sliding_window` function.
b. Added :py:func:`yasa.irasa` function.
-b. Reorganized code into several sub-files for readability (internal changes with no effect on user experience).
+c. Reorganized code into several sub-files for readability (internal changes with no effect on user experience).
v0.1.6 (August 2019)
--------------------
diff --git a/notebooks/11_IRASA.ipynb b/notebooks/11_IRASA.ipynb
index ac6f7b3..ab29d14 100644
--- a/notebooks/11_IRASA.ipynb
+++ b/notebooks/11_IRASA.ipynb
@@ -6,7 +6,7 @@
"source": [
"# Aperiodic and oscillatory components of the power spectrum\n",
"\n",
- "This notebook demonstrates how to use YASA to separate the aperiodic (= fractal = $1/f$) components of the EEG power spectra.\n",
+ "This notebook demonstrates how to use YASA to separate the aperiodic (= fractal = $1/f$) components of the EEG power spectra using the IRASA method.\n",
"\n",
"Please make sure to install YASA first by typing the following line in your terminal or command prompt:\n",
"\n",
@@ -95,7 +95,7 @@
},
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAaIAAAEgCAYAAAD2c3e8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd3xV9f3H8dfNJAMIEEJYMuWDIOBCxN26itu6q62z1lFx1J+1w1XXT61UxYGLVuvPWUWsaIsV9yiiAuL4yFBk751A1v39cS54CQGSm5uc3PB+Ph55JPmec8/3cwLJ537P+Z7PNxKNRhEREQlLWtgBiIjIjk2JSEREQqVEJCIioVIiEhGRUCkRiYhIqJSIREQkVBlhByCyozCzPOAa4FSgK7AQeBG4yd1XmtlbwEFbefnj7n72do5/EPAW8JC7X1jD9qOBPwF9gDnAne4+OqGTEUkijYhEGoGZtQI+Ag4FhgP9gAuBI4DxZpYD/BToWO3j17FDvFKLbs4EpgOnx44X3/9eBEnvCWAQcCvwgJmdUL8zE6k/jYhEGsf/Erzx+7G7l8bavjWzL4EZwDnu/kD8C8zMYq97zN3/sa2Dm1k2cBJwOTAq9vXf43Y5G3jD3e+OfT/TzA4EfgGMqc+JidSXRkQiDSyWJM4ARsYlIQDcfQ7wI+DZaq/JAp4C5gGX1aKbo4FWwKvAeODcattHEVwWjBcFchAJmRKRSMPrSZAkPq5po7t/4O7LqjXfCuwKnO7u62rRx5nA++6+hGCEc5CZ9YzrY5q7T9n4vZl1BE4D3q3TmYg0ACUikYbXJvZ5VW12NrNDgSuB37n7Z7XYvw1wJME9IICXgUrgnK3s3xJ4CVgM3FubmEQakhKRSMNbGvvcZpt7AWZWSDChYDzwl2rbzjCztXEfv49tOgXIIpaI3H05wey5s80srdox2gH/AXYChrn7moTPSiRJNFlBpOHNAJYBg6nh8pyZjQAWuPudwGNAOnCWu1cvjf8y8N+475fHPp8Z+zwrmN8ABG8yI8DhwL9i/XQiSEJ5wIHuPr1+pyWSHBEtAyHS8MzsL8BPgN3dfX1ce3fgC+B3QAVwH3CUu79Wy+N2A74FbgReiNuUCbwN/MvdT4ldjvsIyCaYufd9vU9KJEmUiEQagZm1JUgEy4DrCZ73GQTcEWu7EPgQeBr4Qw2HKItdcqt+3D/E9u/k7iurbRsJXAB0iu1zEXAIMCtut/IaJkqINCrdIxJpBLEksj8wCXgI+BK4i2DSwE+A3QmmUp8LLKjh48UtjwoE08KfrZ6EYu4jGBmdQXAfqQXwfrXj/rv+ZydSPxoRiYhIqJrlZIXYdNanCN5hlgJn1HRZQ0REwtdcL81dArzg7gcT3MC9ONxwRERka5rliAgYCWyIfZ0BlIcYi4iIbEOzvkdkZrsC/wcc7O4rwo5HRES21FxHRJjZPsDDwMl1SUJmlgF0Aea6e0VDxSciIoFmmYjMrB/BFNlj3H12HV/eBfj2jTfeSH5gIiLNWySRFzXXyQrXEZQxedzM3jKzK8MOSEREatYsR0TuflrYMYiISO2kTCIys72BV9y9KK5tEMGCXwMJypac6+41rvkiIiJNU5O/NGdmETM7n6AsflZcexYwlmBlywLgFmC8mbUKJVAREUlIk09EBFWFLwJurtZ+MJDp7ne7e7m7P0NQxfjURo5PRETqIRUS0Sh335OgWGS8fsBX1dq+BgY0SlQiIpIUTT4Rufv8rWzKB0qqtZUAuQ0bkYiIJFOTT0TbsI6gqGm8XGBtCLGIiEiCUjkRfQlYtba+sXYREUkRKTN9uwZvAhEzu4JgAbATCaZxjwk1KhERqZOUHRG5exkwjCABLSdYCvl4d18SamAiIlInKTMicve3CJ4Xim+bRrD8soiIpKiUHRGJiEjzoEQkIiKhUiISEZFQpcw9IpHqXnjhBaZMmUJhYSFFRUXst99+dO3aNeywRKSOlIgkJX3//fdcdtllxC91X1xczPvvv0+LFi1CjExE6kqX5iQlPf3000SjUQqKd6Zjv8Np1aYDCxcu5Jlnngk7NBGpIyUiSTkVFRU8++yzALTvdzQdBx5Pu37HAHD//fdTVlYWZngiUkdKRJJy3njjDRYtWkRBYWfy2/cGoKDLbhS078L8+fN5/vnnQ45QROpCiUhSzpNPPglAftd9iEQiAEQiaRT0PgyA++67j/Ly8tDiE5G6USKSlDJv3jzefPNN0jMyadt9yGbb2nTdk9btOvH9998zZoxKDoqkCiUiSSnPPPMM0WiU9t33ICM7f7NtkbQ0CnofCsCIESMoLS0NI0QRqSMlIkkZ5eXlPPXUUwC07LpPjfu07TaYNkU7MWfOHB566KHGDE9EEqREJCnj1VdfZeHChcEkhaI+Ne4TSUunsP8JQHCvaP78rS3wKyJNhRKRpIzRo0cD0Kr7AZsmKdSkZQejQ8+9KC0t5ZZbbmms8EQkQUpEWxH/xL6Eb8qUKUyaNInsnDzadNt7u/sX9juOzMwsXnrpJSZOnNgIEYpIopSItuLdd98NOwSJ89hjjwFQ2HNf0jO3X8InO78dRbv8MJ1bRJouJaKtGD16tEZFTcTixYt5+eWXg1lxPQ6o9eva9jyQSCTCu+++y5o1axowQhGpDyWirfj666+ZMGFC2GEIwQOs5eXlFHXfjez8wlq/LrNFS9p3McrKynjjjTcaMEIRqQ8lom34y1/+olFRyJYtW8YjjzwCQKtutR8NbZTVflcgmHEnIk2TEtFW5OS15LPPPuPtt98OO5Qd2u23387q1asp6jZwq1O2t6Wg824ATJgwQQ+4ijRRzT4RmdnlZnZVXV9X0G1fIHhCv7KyMulxyfZNnTqVp556irT0dAr7H7/NKdtbk5XXlsKOvSgtLeWdd95pgChFpL6adSIysweBXyfy2oJug8nJa8Unn3zC8OHDVUSzkUWjUa699lqi0Sgd+/6YFq2KEz5WdpEuz4k0Zc06EQH/Bm5O5IXpGdl0GXIuWdk5vPTSS5x77rm6tNOIxowZw6RJk8hrWUBh35/U61itY5fnXn/9db2hEGmCmnUicveX6vP6lkV96HHQcHLyWjFhwgR+/vOfs379+mSFJ1tRWVnJiBEjACjc5WjSM3PqdbwWrTrQpqgrq1at4sMPP0xGiCKSRM06ESVDXttudD/wMvJateXDDz/kqquu0ky6Bvbaa6/x7bff0qpNhy2WekhUbocBADzyyCP69xNpYpSIaiGndUe6Dr2QrOwcxowZw1/+8pewQ2q2otEoDzzwAAAFPQ8mkpaelOO27XkA2S1ymTBhAuPHj0/KMUUkOZSIaim3TRe6DjmbSFoad911Fy+++GLYITVL77//PlOmTCE3vzVtewxN2nEzc1rTof9RAFx33XW63yfShDT7ROTuf3P3PyfjWK07DaDrHicBcPXVVzNz5sxkHFbi3H///QC07XUQaRlZST12u14H0qaoG3PnzmXkyJFJPbaIJC6lEpGZ7W1mi6u1DTKzD81snZl9bmaDGzKGwt4HU9x7KKWlpZrWnWSff/4577zzDlnZLWjbs+5VFLYnkpZO+wHBG4kHH3yQGTNmJL0PEam7lEhEZhYxs/OB8UBWXHsWMBZ4FigAbgHGm1mrhoynw8CTaFnQnsmTJ3PPPfc0ZFc7lD//ORi4tu+1PxnZeQ3SR377XhT32Y+ysjIuv/xyvZEQaQJSIhEBNwIXseUzQQcDme5+t7uXu/szwBfAqQ0ZTHpWDsV7nEEkEuHee+/lk08+acjudggffPAB//nPf8jKzqFtn0MbtK+iXU8gv3Uhn332GXfffXeD9iUi25cqiWiUu+8JTKrW3g/4qlrb18CAhg6oZVEfOvU/jMrKSi666CKWLVvW0F02W1VVVdx0000AFPU9jMwWDTqgJSMrl457nrnpjYQWzhMJV0okInefv5VN+UBJtbYSILdhIwq03+Uo2nbszbx587jgggt0mSdBY8eOZerUqeS3akvhzj9ulD6DNxJHUFVVxaWXXsqqVasapV8R2VJKJKJtWAdUf+w+F1jbGJ2npWfSae9zyWvZlo8++ojrr7++MbptVtavX89tt90GQLu+RyZ9pty2tN/lSNoW92Du3LlceumlVFVVNVrfIvKDVE9EXwJWra1vrL1RZOUU0GWf88jIyOTxxx/nj3/8IwsWLGis7lPeiBEjmDdvHm2KdqJt930ate+09Aw67nUOLXLzeeONNzZNlhCRxpXqiehNIGJmV5hZppmdBgwExjRmEHntetBlz9MB+Otf/8rQoUO58sorGTt2LF9//TVlZWWNGU7K+M9//sP9999PJC2N9rueRCSt8f87ZucX0mXvc4ikpXHPPfcwbty4Ro9BZEeX0onI3cuAYcCJwHLgD8Dx7r6ksWNp22Mf+h5+DcW9BlNRWcmzzz7LxRdfzCGHHMKAAQN47bXXGjukJm3u3LkMHz4cgC4DjyW/qHdosbQq3oUuu50AwOWXX86sWbNCi0VkRxRRAcjNmVl34NseP76GzNy2CR1j/ZrFrPz+Y6IlCylZMY9VyxeSlZ3NM08/zZAhySnimQoqKyt55ZVXKCkpYZ999qF79+6Ul5czZcoUbrjhBiZPnkxR993oPOR8IpFw3xNFo1Hmf/w4i2ZNZM8992TMmDGkpyenzp3IDqTuq1cCGcmOQqBFyyKKY3XNotEoi6Y8z/yv3+Lss89hzJgX6du3b8gRNrwpU6bw29/+ls8//3xTW3FxMStXrty0lEZ+QXuKdz8j9CQEEIlE6LDbKaxdOoNPPvmERx55hAsvvDDssER2COH/BWjmIpEIHQaeRFGPPVi9ehVnnHEG06dPDzusBhONRrnttts46qij+Pzzz8lvXUjHXnuRk9eKhQsXsn79etoUdaVT34Pptt+vG6yCQiIysnIp3u00AG6/4w6++eabkCMS2TFoRNQIImlpdNrzF1SWrWPhPOfoo49m5MiRHH744WGHlnSPPvoo9913H2lp6XTqdwiFfX9CemYLiqNVbFizmPSsPDJbtAw7zK1q3WlXOvbZnwXfvMcVV1zByy+/rEt0Ig1MI6JGkpaRRZehF1LcazBr167lnHPOYcSIEc3q2ZV33313U4WE7kPPocOA40nPbAFAJJJGi1bFTToJbVQ0ICgBNHnyZF599dWwwxFp9hKerGBmaQTP7BQBlcBCYIa7p/Tsh2RMVtiWaDTKsun/Yc5nLxGNRjniiCO45557aNmy6f+B3pbvvvuOo446ipUrV9JlwDCK+h8Tdkj1smzmu8z++Gl22WUXxo8fT1oIU8tFUlBCkxXqnIjM7EDgMuBQIP6vZxRYAfwLeMDdP0gkoLA1dCLaaPWCL5n78d9YX7KW3r17c+edd5Kbm8uGDRvYaaedaN++fYP1nSwTJ07k//7v/5gyZQozZswgGo1S1G0Qnff5ZZOYgFAfVZXlzBj/J9auWsZf//rXZnkZVaQBNGwiMrOdgYeAnQgeGP0XQQWDZQSX+NoDg4ADgdOAmcCv3D2l7vg2ViKCYJr3/ImPsXLJnM3aMzMzOfnkk7n44ovp0aNHg8aQiMrKSkaOHMldd9216dJiWno67bv2p3iPs0jPql51KTUtmf4mcz55nkGDBjFu3DgikYR+x0R2JA2eiP4L/Mndt/vouZlFgOOB37n73okEFpbGTEQAleXrWfLFS5Qum0laeiaRSBrLFn5LNBolLS2NSy+9lKuvvrrB46itRYsWcfnll/POO+8QiUTo2O8wWnbajZyCzqSlZ4YdXlJVVZTxzb9uoGTtSp588kl+9KMfhR2SSFPX4IkoUtf7P4m8JmyNnYhqsn71IlbMnMCi6R9QVVXJc889x3777bdpe0VFBRs2bKCiooLMzExycxum2Pi6devIzMwkKyuL0tJSRo0axQMPPEBJSQm5+a3ptNcvaFW8S4P03VQs8deZ89kYunTpwtFHH82gQYM48MADKSgoCDs0kaaoce4RAZjZY8Dd7v55tfZCYKK790wkmKagKSSijRZ/+Rpzp/6Tnj178vrrr9OiRQvGjBnDNddcw9q1QYHxrKwsbrjhBs4666yk9RuNRjddequsrKRDhw6Ul5dvWnOpQ/fdaT/oZLJymv8f48ry9Xw74XZWr1i0qa2oqIjRo0ez++67hxiZSJOUUCJK9I7yOcCHZnZ6tfZ0oFuCx5RqCu1QCgo7M2vWLO677z6eeeYZLr30UtauXUtmVjbZOXmUlZVx3XXX8fHHHwNBErnrrrs48sgjGTt2LHV9o1FZWckf/vAHbr/9dioqKoAICxcuZNmyZbTp0J2df3Q5nff55Q6RhADSM1vQ48dX0+uAi+g04CjaFvdk8eLFnHjiiYwdO3aL/SsqKpg1a1bsZycitZHoiKgKuAK4BXgYuMrdq8ysAzDf3VP2CcCmNCICWLN4OtMn/IWMjIxNf9y67nY87fsGs7gWfT6GeV+8TseOHRk3bhy33nor//jHPza9fq+99uLGG29kt912225fJSUlXHbZZbz66qtkZGax096/oHXnQZSVrKSyvJScgk4pPxuuvqJVlSyc8jwL/B0Ahg0bxn777Uf//v2ZMGECzz33HIsWLaJbt25ccMEFnHrqqeTkNI/JGyK10KiX5qqAYqATwQy6b4FTCEZYC5SIkmvBp0+x4Jv3ANhpz5Mp3PmHm+bRqkq+f/deli2YTn5+fmy01IJ2vQ9i9ff/pWTtSgBOOukkrrnmGgoLC/nnP//Jk08+SV5eHsOHD2fw4MF8+eWXXHTRRcyYMYMWOXl0HXoBLYt2DuV8m7poNMqyGW8x59MXiEa3fCA5Myub8rINALRp04Zhw4Zx2GGHccABBygpSXPXqImoEujo7otj94WeA3oDZwOvKxElV0VZCcu+epnsNr0o2GnwFtvL1i1n5oQ7KF23mpy8Vuy074XktetOZXkpy755nYVfvUFFRTk5OTkUFBRssXDf0KFD+eTTTynbsIGCwi50HHwOOa07NtbppawNa5eyZtHXlK+cxYZV88gu6Ep+lyHkF/Zk5byprJ41gWULZm7av1Xr1ox+7DGGDh0aYtQiDarxR0Tuvjj2fTowArgAyFIianzrln7Lmrn/paDnj2jRqsNm2zasXcqyr15m4cxJABQUdqZVj4OoXL+SJd9MoGxDUA27ox1IhwE/bdTlupuzaDRK6cp5rFnwOaWLP2f5wu/Iy8vj2Wef1UQHaa4aNRFdD9zp7iXV2s8Cznb3lH3gIlUTUW2UrJhDZXkp+e17b7rXU75+DctmvkeL1p0o6DIo5Aibr2hVFQs+fZKFMz6idevWjB49mkWLFvHBBx/Qtm1bLr300gabhi/SiBr8OaJ+tT2ou3+ZSDBNQXNORBKuaFUl8yaOZvF3n22xzcx4+OGH6d07WKk2Go2qkoOkogZfGG8aQT25SLXP1TuPEkzjFpE4kbR0Og0+G6JVLJ//Fe069SG9dQ/WzfsUd+fII49k2LBhTJ8+HXdn6NChPPzwwxopSbNXlxFR9eeDIgTJ6UhgdvwGd59NitKISBraxt+5jSOeyvL1LJz8DItmTtxi36FDh/L444+Tl9d0FhAU2YbGu0e0kZmtAQa5+6yED9LEKBFJGKLRKKvmTaGsZEVQty8jm7kfPcK61cvZe++9+fvf/05+fn7YYYpsT4NfmksZZpYBPE5QKXwB8At3Xx9uVCJbF4lEKOiy+UPH3Q4YzvfvjWTixIkce+yxjBw5kv79+4cUoUjDaa6PyZ8IzHX3A4CJwJkhxyNSZy1aFtHtgMto1a4j7sES86NGjWpWq/qKQPNNRPsA42Nfvw4cFGIsIgnLzi+kx4+uplPfgygrK+Omm25i//3358EHH2T58uVhhyeSFLW+NGdmF2/l9Wea2dL4Rnd/oL6B1VMrYHXs6zVsvpKsSEpJz8imeLdTySnqx+Kp/2D27NncfPPN3H777fTv35+BAwcyZMgQjjnmGNLTNWFVUk9d7hH9Tw1tCwkqcceLAmEnotX8kHxaEiQjkZTWutMAWhX3Z/WCL1g75wMWz57K5MmTmTx5Mk888QSfffYZN954Y9hhitRZrRORuze9Nau3biJwODABOAz4KNxwRJIjkpZG684DaN15AB32KKF0xRzWLfuWRV+M49FHH2XIkCEceeSRYYcpUid1uTQ3neC+y+vAG+7elEcZzwNHmdn7wFLgtJDjEUm6jKxcWnYwWnYwMjKz+f6T57nyyivp168f3bt332zf77//ni+++IK8vDxatmxJ3759VQlcmoy6PNDah2B0cThwAPAVPySmj9y9WUzl0XNEkoqi0WhQPujbT+jfvz9PPvkkRUVFALz44ov85jdXURZbmgKgqKgDTzzxOAMGDAgr5K164oknePbZZznzzDM5+eSTycholk+ZNFeNWvQ0HRjKD4lpZ+BdYonJ3WckEsx2+twbeMXdi+LaBgGjgIHALOBcd/+4nv10R4lIUlBlWSmz3ryDNSsWkZ+fz/Dhw1mzZg0jR44EoH2XvqSnp1OyZimrly8iNzeXUaNGccghh2z1mGPHjmX06NGcdtppnHrqqaSlNexE26effpqrrrpq0/e9evXimmuuYdiwYaq9lxoav7LCRmbWGjiEIDEd6u5JW1HNzCLAecCfAdy9INaeBXwD3A3cT/Ds0INAN3dfXfPRatVfd5SIJEVtWLeMJZ+/wOLvJm9qS0tLp+seJ9Gud/AUQ1VlOQs/e5qFMz4iLS2NSy65hNNPP51u3X6o4lVRUcEtt9zCww8/vKltyJAh3H777ey88+a/3mPHjuXVV1+lVatWtG7dmj59+nD00UeTm5tLVVUVzz//PKNGjSIzM5OhQ4ey7777sv/++29RtmjcuHFceOGFVFVVUbTzgaxf9g2rly8E4LjjjuO2226jdevWSf+ZSVKFl4gakpn9CTgKeBr4Y1wiOhz4q7t3jtv3PeBxd3+kHv11R4lIUtzqBV+y7KuxlK5dSZfBZ9Gq4+bF86PRKEu+HMfcz1/d1DZ48GB23nlnsrKy+OKLL/j4449JT0+nsPeBrJn3GSVrV5KZmcm9997LscceC8A///lPLrzwwi36b9myJccffzyfffYZ06ZN22J7Tk4Ow4YN4+ijj2bp0qVMmTKF559/nrKyMroMOoaiXYZRVVnB8lnvs3DaWMo2rKdLly6MHDmSvffeO8k/LUmihktEZmZAF2Bi/CQFMzva3V9JpOPaMrNO7j7fzA4GXopLRJcDR7v7oXH7PgqUuPvwevTXHSUiaQai0ShEq4ikbf3ZojWLvmHt3I9YOnsy5WWbV8HKbVlAl73PJb99byrKSlgy7SUWfPMeaWlpjBw5kt69e3Pcccexfv16inc5lKy8Iio2rKVs+VcsnTd903HyW7ejcJejycwpYN3SGZQvn86Sed/UGE+nfofSYcAJm12GW79mMQs/eYLlC2eRkZHB7bffzmmnaf5RE9UwtebM7BLgUsCB3c3sMncfE9v8J6BBE5G7z9/KpnygpFpbCaCa+SLEqntHtv2Aa8sOfWjZoQ9FA09h9cKvqNywjqqqciKRNAq67EZmTnApLCMrl+LdTye9RWvmTh3HpZdeSps2bYIk1Gc/Og6MTx4/oXDlXNbO/ZRIVj7teu6/adXflh0MgKK1S1n5/ceUr/iG9BZtSMvrTH5hT3Lbdd/iXlCLlkV0O/AKWkx7mflfvs5vfvMbZs+ezdVXX637Rs1Ebaaj/ArY093XmVkP4B9m1sPdR5Bg9kuSdUD1+ae5wNoQYhFJaemZLWjTddvLl0ciEYr6HQWRCHOnvMKyZcto13FnigedskVCyC3oQm5Bl60eKzu/kA79hgHDahVfJC2d4oEnkJnfnjmTnuXee+9l+vTp/P73v6dnz561OoY0XbVJRBnuvg7A3b+NXSL7h5l1IdxE9CVwRbW2vsATIcQissMo2uVIMrLy2LB8JoW7nkhaemaj9d2u5/5ktGjDnP+O5rXXXuPf//43J5xwAt27d2fSpElMnTqVHj168LOf/Yxjjz1W6ziliO3eIzKzCcCV7j45ri0DGA2c4e6NUtyqhntEWcBMYARwH8GsuYeBXu6+pB79dEf3iESatA1rl7L8m9dZNPMDqiora9wnLy+P4cOHc/HFF2932vknn3zCm2++SUFBAe3bt2f33Xdnp512aojQm7sGW4/oF0BFfIO7VwC/MLOHEuk0Gdy9zMyGETxH9CfgO+D4+iQhEUkN2fmFdNzjdNr2OZyV371LVWUlLdr2ILfNTqxdPJ2S+RNZMte57bbb+OCDD7j33nspLCys8VhPPvkkv//976mMS2hZWVk899xzDB48uLFOaYdWp+nbZnaWuz/egPGETiMikeZh1fwvmP/J3yldt5qiog7cc8/dHHjggZu2V1VVccsttzBq1CgAinoNJSOrBWWrF7B03te0b9+eV199lU6dOhGNRpk0aRIdO3akS5et3/vammg0SklJCStWrCA3N5e2bZvt35aERkR1fUz6ETN7x8x2TaQzEZHG0rpTf3odcg3tOhuLFy/i9NNP59prr2XdunWMGzdu00KD6enpdB/yc7oM/jnFg06m636XUNilH0uWLOH888/n008/5bTTTuP444/n4IMP5tlnn6W2b+BLS0v57W9/S+/evenTpw9Dhgxh991355ZbbqGkpPqk3x1XXUdEuwIjgf1in69392Y1S00jIpHmJVpVyVJ/nfnTxlFZWUl2djYbNgR193LyWtN58Fm0Ku672WsqNqzl2zf/zJqVize1ZWRmUVFeBsAJJ5zA9ddfT/v27TdtX7VqFTNmzKC4uJiOHTsyffp0LrzwQr755ptNr8/Ja8XaVcuIRqN06tSJm2++mSOOOKKhfwSNqVFrzZ0G3EEworrS3Z9LpPOmSIlIpHkqWTGHhZ8+ycolc2jVpoiCnj+ibY+hm55x2mL/lXOZ9eYIKirKKbaDKbQjWD1/GvM+e27Tw79du3Zll1124bvvvtuUcABatGhBVVUVZWVltG7XmY6Dz9o0nX3dsu9Y8vnzLF/4LRAktZtuuok2bdo08E+gUTRuiR8zywWuJZhC/S5wibvX/Lh0ClEiEmm+qirLKV05l9w2O22z4rVnlcIAABbgSURBVMRGZSUrAcjKLdjUtn71IpZ9OYYVC76hbMMP1SjSMzIpaNeJ0nWrKFkbvK64z350GHgS6RnZmx03WlXFsplvs/Dzf1JWtp6ioiLOO+88WrZsSU5ODvvuu29C96KagHBqzZnZzsA9wI+Bu4Cb3b20XgcNkRKRiNRGtKqK9asXUrpqHll57cht03XTM1UVZSVUVZRtlsBqsn7NYhZNfppl83yz9pycHG699VZOOeWUpMVbWlrK6NGjmT9/PoWFhbRr147ly5czc+ZMvv/+e7p168Z+++3H/vvvT+fOnbd7vEmTJjFy5EhWrFjBWWedxXHHHUdGRka4RU/N7BiChBRJsdVcN6NEJCKNKVpVxfLZ/6V8zXyoqqC8ZBlLvg8KxZ500knceuut230wt6KigqlTp7JkyRL23XdfWrZsudn2Dz74gKuuuorZs2fXKqaBAwfy05/+lOOOO27TulYAS5YsYeLEiTz11FO89dZbm72mR48evPfee41+aa4HwTpAA+I+70yQiBrlIdeGoEQkImGKRqOs+O6j2L2oDfTq1YtRo0bRr9/mFdSXL1/Oa6+9xvjx4/noo49YuzaYN5adnc0hhxzC7rvvzoIFC5g5cyZvv/02AG2KdiK302CqytcSqSghmt6CzLwisvLasX71fCpWzmLF/K/ZsP6HGX15eXmbnsGKT2RZ2Tm073MwGTltWTHjDVYvX8i8efMaPhGZ2cZF6HYFNqbob4HJwJSNH+5eu7TbBCkRiUhTULpqPgsmPc7KJXPIys7m+uuuo3v37kydOpWJEyfy7rvvUlHxQ62BgsJOZGbn11jZPD09g467DqOwz2GkpW+7jkFVRRmr5k+jdMEnLJ0zjYqK8k3bsrJb0Ka4N5kFPWnbc38ysvOBYGbi8m8/4IOX/twoiegjNk86UzV9W0SkYVRVlLH48xeZ7+9ssS0tLZ32XfuRXTSQVsW7kJUX/L0qK1nByjmfUrV+JZHs1mTltSOvbbdN2+siGo1SWV5KxYa1RCsraNGqwzYnefzzruMarMTPJu6+TyKdiIhI3aVlZFG8+2lkt+vNqpn/ISMrl4z8zmS26kKrjv3IbNFyi9dk5bahyLa+/HtdRCKRoM+shl1dp06JaCMz+znwKfC1u9dccVBERJKizU570WanvcIOo8EklIiAO4H2QJmZTSO4XPdZ7POUjctGiIiIbE9Cicjdi82sM7BH7GMI8HMgE4gmelwREdnxJJww3H0eMA/4J4CZdQKeAZ5MTmgiIrIjqGv17a1y9/nAecBRyTqmiIg0fwklIjOrcYUpd59OcKlORESkVhK9NLfYzOYRTFDY+PEVsDdQcylbERGRGiSaiPYBdicY/RwJXA1kA5XAb5ITmoiI7AgSnTU3EZi48XszSwe6A8vdfUVyQhMRkR1Bre8RmdlW65m7e6W7z6yehMysSaz0ZGaXm9lVYcchIiJbqstkhbfN7Ldm1np7O5pZoZn9EdiyQFIjM7MHgV+HHYeIiNSsLpfm9gNuBuaa2fvAv4AvgKUEq/K1BwYBBwEHAI/HXhO2fwP/BWqc6SciIuGqdSKKVdm+3Mz+F/gV8DOCCQsbS7GWE8yeGwf8MvZcUaMws3OBi+Oa5rv7sbG4XzKzsxsrFhERqZs6T1Zw94XAjcCNZpYGtAOq3H1ZsoOrQ0yjgdFh9S8iIomrV004d68CliQpFhER2QElugxEFUFx05qUEdSgexq4QctEiIjItiQ6IvoVcBNwPfBhrG1vgkt2jwDTgBsIZuX9oX4h1p+7/y3sGEREpGaJJqKrgPPcfVxc21QzmwPc4+59zWwBQTXuhBKRme0NvOLuRXFtg4BRwEBgFnCuu3+c4DmIiEgTkGj17c4EiaC6ucBOcV/XeZF0M4uY2fnAeOLq1plZFjAWeBYoAG4BxptZq7r2ISIiTUeiieg94A4z25RozKwd8L/A+7GmE4FvEjj2jcBFBM8sxTsYyHT3u9293N2fIXiO6dQE+hARkSYi0UT0S6AHMM/MvjIzJxgBdQYuMLOjCEYsiVyWG+XuewKTqrX3I6jwHe9rYEACfYiISBORaNHTObH7NT8muF9TDkxz9wkAZrYW6OruSxM49tYehM0HSqq1lQC5de1DRESajoRXaI1Ny64iSEJpQJaZZcS2LUkkCW3HOiCnWlsusDbJ/YiISCNK9DmiYuAlgvWIviOoNdcN+NrMDnX3xUmL8AdfAldUa+sLPNEAfYmISCNJdPr2PUAF0MPd5wGYWSfgKWAEcGZywtvMm0DEzK4A7iOYDDEQGNMAfYmISCNJ9NLcT4DhG5MQbLq38xuCFVuTzt3LgGEECWg5wUSI491dJYZERFJYoiOi9dRc4ifKD9W468Xd3yJ4Xii+bRqwfzKOLyIiTUOiI6LxwAgz67CxIfb1XQTr/4iIiNRKoiOi/wEmALPNbHasrRswlWCdIhERkVpJ9DmihWY2kOBeUT+gFPjK3f+TzOBERKT5q3UiMrN+NTTPIq7m3MZ93P3L+ocmIiI7grqMiKYRTEaIxLVVn7AQIYkTFkREpPmrSyLq0WBRiIjIDqvWicjdZ29/LxERkbpJuNaciIhIMigRiYhIqJSIREQkVHV+jsjMCoGjgf5AK2AVMBl41d1XJjc8ERFp7uo0IjKzK4HZBNWvNz7MegQwGphjZsOTHqGIiDRrdXmg9RzgJuAq4G/uXhq3rQVwNnCnmc1z9xeSHaiIiDRPdbk0Nxz4rbs/WH2Du68HRplZPnAZoEQkIiK1UpdLc33YfmXtl4FdEg9HRER2NHVJRDnA6u3sswpom3g4IiKyo6nr9O2aFsMTERFJWF2nb59tZmu3sb1lfYIREZEdT10S0ffARbXcT0REpFbqUvS0ewPGISIiO6hElwpv8sysDfAUwSSLUuAMd18eblQiIlJdnRKRmbUCjgfGuPsaM4sA/0NQZWEJcJe7T0x+mAm5BHjB3R81s/OBi4GbQ45JRESqqfWsOTPrBXxFUN6nfax5BHAbsAhYCbxhZvsmO8gEjQSejH2dAZSHGIuIiGxFXUZENwGfAqe4e6mZtSMYdTzv7qcDmNl04Abg8GQHujVmdi7BaGej+e5+rLuvim3flWCSxcGNFZOIiNReXRLRIcBRcTXmjgDSgSfi9nkduDZJsdWKu48mKLq6BTPbB3gYONndVzRmXCIiUjt1SUStgcVx3/+Y4HLXW3FtawiSU+jMrB/wEHCMljkXEWm66lJZ4TuCZR8ws3TgSOAddy+J2+dHwKykRVc/1wF5wONm9lZsCQsREWli6jIi+hsw0sxuIBgNFRPcIwLAzA4AbgHuTWJ8CXP308KOQUREtq8uiehOgoKm9wBVwO/cfQyAmY0kNl06tl+9mNnewCvuXhTXNggYBQwkGHWd6+4f17cvEREJV10qK1QCV8c+qnsYeMzdJ9cnmNhzSecBf67WngWMBe4GDgROBMabWTd3315FcBERacLqskJrLkEiOAnYAIwBrnH31e7+eZLiuRE4iuDB0z/GtR8MZLr73bHvnzGzXwOnAo8kqW8REQlBXSYr3AgcA9xB8CDrUSQ/CYxy9z2BSdXa+xE8TBvva2BAkvsXEZFGVpd7RCcBP3P3NwHM7G3gHTPLdPekVC1w9/lb2ZQPlFRrKwFyk9GviIiEpy4joi4Eo5CNPo69vkNSI6rZOoLipfFygW2tjSQiIimgLokoHajc+I27RwnuFWUlO6gafAlYtba+sXYREUlhqbIMxJtAxMyuICi6eiLBNO4xoUYlIiL1Vt+lwjOAM81safxO7v5AvSPb/HhlZjaM4DmiPxFUeTje3Zcksx8REWl89V0qfCFwTrW2KFCvROTubwEF1dqmAfvX57giItL0aKlwEREJVV0mK4iIiCSdEpGIiIRKiUhEREKlRCQiIqFSIhIRkVApEYmISKiUiEREJFRKRCIiEiolIhERCZUSkYiIhEqJSEREQqVEJCIioVIiEhGRUCkRiYhIqJSIREQkVEpEIiISKiUiEREJlRKRiIiESolIRERClRF2AA3FzFoBzwItgc+A4e4eDTcqERGprjmPiM4HXnH3/YE8YEjI8YiISA2abSJy9xHAKDPLAIqA1SGHJCIiNUj5S3Nmdi5wcVzTfHc/NvZ1GjANWAHMaezYRERk+1I+Ebn7aGD0VraVA2ZmlwDXAH9ozNhERGT7mu2lOTP7nZkdE/t2HVAZZjwiIlKzlB8RbcMTwONmdiXB/aGzQo5HRERq0GwTkbvPAw4NOw4REdm2JpmIzGxvgqnXRXFtg4BRwEBgFnCuu38cUogiIpIkTeoekZlFzOx8YDyQFdeeBYwleEC1ALgFGB97aFVERFJYk0pEwI3ARcDN1doPBjLd/W53L3f3Z4AvgFMbOT4REUmyppaIRrn7nsCkau39gK+qtX0NDGiUqEREpME0qUTk7vO3sikfKKnWVgLkNmxEIiLS0JpUItqGdUBOtbZcYG0IsYiISBKlSiL6ErBqbX1j7SIiksKa5PTtGrwJRMzsCuA+4ESCadxjQo1KRETqLSVGRO5eBgwjSEDLCWrGHe/uS0INTERE6q1Jjojc/S2C54Xi26YB+4cSkIiINJiUGBGJiEjzpUQkIiKhUiISEZFQKRGJiEiolIhERCRUSkQiIhIqJSIREQmVEpGIiIRKiUhEREKlRCQiIqFSIhIRkVApEYmISKiUiEREJFRKRCIiEqomuQxEyNIByktXhh2HiEhKMbPuwFx3r6jL65SIttQRYO6Ho8KOQ0Qk1XwL9AC+q8uLlIi29DFwALAAqAw5FhGRVDO3ri+IRKPRhghERESkVjRZQUREQqVEJCIioVIiEhGRUCkRiYhIqJSIREQkVEpEIiISKiUiEREJlR5obQbM7FzgIWBDXPMl7v54SCEllZntDbzi7kWx77OA+4CTCB46HuHut4UYYlLUcJ7ZwBqgLG63D9z98DDiqy8zOwz4X2BnYDFwp7s/ZGYFwKPAYcBa4I/u/tfwIk3cNs6xJzADKInb/Rl3Pz+EMOvNzI4GbiWoorAYuCN2ngn9bioRNQ97AHe5+zVhB5JMZhYBzgP+XG3TjYABvYDWwL/MbJ67P9HIISbFNs5zALDc3YsbP6rkMrOuwAvAWcBYYE/g32b2HXA2wR+tjkCfWPssd387lGATtJ1zbAlMdPd9QgswScysI/AP4AR3f83M9gDeN7OPgZNJ4HdTl+aahz2ByWEH0QBuBC4Cbq7WfhZwi7uvcPfvCP6A/6qRY0umrZ1nc/p37Q485e5j3L3K3T8G3gIOIXj3fK27l7j7ZOAR4ILQIk1cd2o+x/1oRv+W7r4AaB9LQmlAO6CCYPSe0O+mRkQpzszSgYHAz81sBMHQ/1HgdndP9fpNo9z9OjM7eGND7DJOR+DLuP2+Jhg9pKotzjNmD6DIzKYCHYB3gMvdfV5jB1hf7v4u8O7G782sLUFNx3eBKDA9bvevgWMbNcAk2MY5/h24EMgzs2+AfOBV4Cp3T8ky/+6+xsxygVUEeeR2YAkJ/m5qRJT62gOTgMcJrteeRPDu+qIwg0oGd59fQ3N+7HP8tfYSILfhI2oYWzlPgHXA+wSjBgNKgTGNFVdDMbPWwMvAf4FPgPXV3jSl9L8nbHGOY4EVwOvAYII3GDsBD4cWYHKsB/IIzulc4LJYe51/NzUiSnHuvhA4KK5pspmNBE4EHggnqga1LvY5J64tl+Amd7Pi7lfGf29mVwJLzKyru88JKax6MbM+BH+YvwTOAHYBWphZJC4ZpfS/Z/VzdPcq4LS4XVaZ2e+B98wso65r9zQVsfMqAyaZ2cPAXrFNdf7d1IgoxZlZfzO7sVpzFsG7lWbH3VcACwlGCBv1ZfPLAc2Cmf3JzHaJa8qKfU7Jf1szO5BghPAScJK7rye4JBchGM1vlLL/njWdo5nlmtkdZtYhbtcsgvsqKbfUjJkdZGafVGvOJhj1JfS7qRFR6lsJ/MbM5gKPAbsDw4FfhxpVw/o7cH3s3kk+cBVwT7ghNYiBwF5m9rPY9/cA49x9SYgxJcTMegGvAH9w95Eb2919rZmNAW4zs/MIZlv9kmAmXUrZxjmWxKZ1tzOzXwMFBFO8/5ai93EnA51jI/R7gCEEsz5PIEhEdf7d1IgoxcVuXB9LMDNlNcH00Zvc/R+hBtawrgOmAV8QLGT4AtAcl9Q9j+Bd5gyCFS/LgJ+HGVA9XEIwhfk2M1sb93E7wf/dKmA2wU38W9z9tRBjTdS2zvEEoAiYD3wOTCX4I51y3H0VcCTwU2A5wb2u82PT7RP63dTCeCIiEiqNiEREJFRKRCIiEiolIhERCZUSkYiIhEqJSEREQqVEJCIiodIDrbLDiZXl77aVzZmpWnIlGWKFV9+MfXs/QfXkb4EB7j6t2r5nA39298LtHPN/gd/Gvj3G3V9JZsyS+jQikh3V7wkqBW/2sSMnoWp6Ab9L0rFuJvj5itRIIyLZUa2JFYyVmi2Old9pV98DuftaYK2ZbXdf2TEpEYlUY2Y3ENTPSgP2AYa7++NmdhVwKcFCYJMJ1pP5KPaaDOA2ghppEeBOgtUq73P3v5nZW8Akd78qrp8ocZeqtnP8vxGU1M8hWOpjGfCou98c255OMMr7JdCWoLzKrwlKsMwBjnD3N+L6nkFQSicpS3LHLtPVdKy33P1HyehDmi9dmhOp2U8IFqLbB3jVzH5FsN7KxQSFZV8FJpjZxqrRNwC/iH0cSlD/b9fadlaL4wOcD8wlKLf/KHCTme0Z23YdQbHby2OvnwOMAxYDE4DT4/raB+gMvFjb+GrhWTa/zHkKQXXpO5LYhzRTGhHJjuqu2E30eEe7+1uxr0uB22JrrhBbP+Yadx8X235r7Mb+JWb2PwRLW9+0sVinmZ1BUKy0trZ6fH4ojjnT3a+NfX2zmV0B7GlmnxJbatzdX4z1fwlBcmwDPAncbWYXuXs58DPglVjxytqaaGZV1doyiK014+6lBD8zzKwrcB9wY4oWL5VGpkQkO6rbCP5Ax4tfgvvbuCSUT7Ci5iNm9lDcPtnABoJVctsTrDYKgLt/Z2a1WryuFsffaDqbWwNkAoWx/j+O638N8JvY8V8EHgSOMLPXCEYrF9Ymtjgn1tD/T4Grq51LC4KR1ofALXXsQ3ZQSkSyo1rq7tsasZTGfZ0e+3wW8FkN+5VQs/gkslmZ+9g9pdoef6OyGvqIxLXXWEo/NungJeDUWEzZBJf+6mJO9Z+XmS2uYb+HCZZC+EWKrrUjIdA9IpHtiF3CWgh0dvcZGz8IJgMcEZsVNhsYuvE1sdlm3eMOUwa0jvu+Z22PX8v4FgN7xPWfY2aLzGxIrOlJgjVkjgeed/eaklq9xC4VHg+c4O6rk318ab40IhKpnTuA68xsAcElsJ8RJIqDYttvI1gQbRbgwO0EI4+NPgYuM7MngFXACDYfMW3v+NvzF+Da2MO63wB/iPWzcYQ1HigHziWYiJFUZvZjgnM+B1hmZsUbt2mavGyPEpFI7dxDMHX6DqADwR/7k9z9fQB3fyg2CnoQaEEwfXto3OvvAnYB/g0sJZjl1r22x6+FOwkuiT0a+/w+cNTGkY+7V5rZcwQrhb5TlxOvpV8Q3K+qft8NgsuHIlulFVpFGoiZLSV4FuhvYccCYGbPAzPcfasVE+JK/LSMXXJMZv+bPTclspFGRCLNnJkdRPBs0VHU/tmmIjOLxGbf1bf/fCC/vseR5kuTFUSav9OAPwFXu/usWr5mJsF9r2T4I7AgSceSZkiX5kREJFQaEYmISKiUiEREJFRKRCIiEiolIhERCZUSkYiIhEqJSEREQvX/VPg+sJqH2MEAAAAASUVORK5CYII=\n",
+ "image/png": "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\n",
"text/plain": [
"