def _cfcFiltSuro(xPha, xAmp, surJob, self): """SUP: Get the cfc and surrogates The function return: - The unormalized cfc - All the surrogates (for pvalue) - The mean of surrogates (for normalization) - The deviation of surrogates (for normalization) """ # Check input variables : npts, ntrial = xPha.shape W = self._window nwin = len(W) # Get the filter for phase/amplitude properties : phaMeth = self._pha.get(self._sf, self._pha.f, self._npts) ampMeth = self._amp.get(self._sf, self._amp.f, self._npts) # Filt the phase and amplitude : xPha = self._pha.apply(xPha, phaMeth) xAmp = self._amp.apply(xAmp, ampMeth) # Extract phase of amplitude for PLV method: if self.Id[0] in ['4']: for a in range(xAmp.shape[0]): for t in range(xAmp.shape[2]): xAmp[a, :, t] = np.angle(hilbert(np.ravel(xAmp[a, :, t]))) # 2D loop trick : claIdx, listWin, listTrial = list2index(nwin, ntrial) # Get the unormalized cfc : uCfc = [ _cfcGet(np.squeeze(xPha[:, W[k[0]][0]:W[k[0]][1], k[1]]), np.squeeze(xAmp[:, W[k[0]][0]:W[k[0]][1], k[1]]), self.Id, self._nbins) for k in claIdx ] uCfc = np.array(groupInList(uCfc, listWin)) # Run surogates on each window : if (self.n_perm != 0) and (self.Id[0] is not '5') and (self.Id[1] is not '0'): Suro = Parallel(n_jobs=surJob)( delayed(_cfcGetSuro)(xPha[:, k[0]:k[1], :], xAmp[:, k[0]:k[1], :], self. Id, self.n_perm, self._nbins, self._matricial) for k in self._window) mSuro = [np.mean(k, 3) for k in Suro] stdSuro = [np.std(k, 3) for k in Suro] else: Suro, mSuro, stdSuro = None, None, None return uCfc, Suro, mSuro, stdSuro
def _fit(x, y, clf, cv, mf, grp, center, n_jobs): """Sub function for fitting """ # Check the inputs size : x, y = checkXY(x, y, mf, grp, center) rep, nfeat = len(cv), len(x) # Tricks : construct a list of tuple containing the index of # (repetitions,features) & loop on it. Optimal for parallel computing : claIdx, listRep, listFeat = list2index(rep, nfeat) # Run the classification : cvs = Parallel(n_jobs=n_jobs)( delayed(_cvscore)(x[k[1]], y, clone(clf), cv[k[0]]) for k in claIdx) da, y_true, y_pred = zip(*cvs) # Reconstruct elements : da = np.array(groupInList(da, listFeat)) y_true = groupInList(y_true, listFeat) y_pred = groupInList(y_pred, listFeat) return da, x, y, y_true, y_pred
def _fit(x, y, clf, cv, mf, grp, center, n_jobs): """Sub function for fitting """ # Check the inputs size : x, y = checkXY(x, y, mf, grp, center) rep, nfeat = len(cv), len(x) # Tricks : construct a list of tuple containing the index of # (repetitions,features) & loop on it. Optimal for parallel computing : claIdx, listRep, listFeat = list2index(rep, nfeat) # Run the classification : cvs = Parallel(n_jobs=n_jobs)(delayed(_cvscore)( x[k[1]], y, clone(clf), cv[k[0]]) for k in claIdx) da, y_true, y_pred = zip(*cvs) # Reconstruct elements : da = np.array(groupInList(da, listFeat)) y_true = groupInList(y_true, listFeat) y_pred = groupInList(y_pred, listFeat) return da, x, y, y_true, y_pred
def _cfcFiltSuro(xPha, xAmp, surJob, self): """SUP: Get the cfc and surrogates The function return: - The unormalized cfc - All the surrogates (for pvalue) - The mean of surrogates (for normalization) - The deviation of surrogates (for normalization) """ # Check input variables : npts, ntrial = xPha.shape W = self._window nwin = len(W) # Get the filter for phase/amplitude properties : phaMeth = self._pha.get(self._sf, self._pha.f, self._npts) ampMeth = self._amp.get(self._sf, self._amp.f, self._npts) # Filt the phase and amplitude : xPha = self._pha.apply(xPha, phaMeth) xAmp = self._amp.apply(xAmp, ampMeth) # Extract phase of amplitude for PLV method: if self.Id[0] in ['4']: for a in range(xAmp.shape[0]): for t in range(xAmp.shape[2]): xAmp[a, :, t] = np.angle(hilbert(np.ravel(xAmp[a, :, t]))) # 2D loop trick : claIdx, listWin, listTrial = list2index(nwin, ntrial) # Get the unormalized cfc : uCfc = [_cfcGet(np.squeeze(xPha[:, W[k[0]][0]:W[k[0]][1], k[1]]), np.squeeze(xAmp[:, W[k[0]][0]:W[k[0]][1], k[1]]), self.Id, self._nbins) for k in claIdx] uCfc = np.array(groupInList(uCfc, listWin)) # Run surogates on each window : if (self.n_perm != 0) and (self.Id[0] is not '5') and (self.Id[1] is not '0'): Suro = Parallel(n_jobs=surJob)(delayed(_cfcGetSuro)( xPha[:, k[0]:k[1], :], xAmp[:, k[0]:k[1], :], self.Id, self.n_perm, self._nbins, self._matricial) for k in self._window) mSuro = [np.mean(k, 3) for k in Suro] stdSuro = [np.std(k, 3) for k in Suro] else: Suro, mSuro, stdSuro = None, None, None return uCfc, Suro, mSuro, stdSuro