def display(self, array, site=None): if site is not None: self.im.putpixel(site, self.grayscale(array[site])) else: scaleddata = self.simpgrayscale(array.transpose().flatten()) self.im.putdata(scaleddata) self.displayIm = self.im.resize(self.size) self.tkimage.paste(self.displayIm) self.canvas.update()
def _crossCorrelations(queue, n_atoms, array, variances, indices): """Calculate covariance-matrix for a subset of modes.""" n_modes = len(indices) arvar = (array[:, indices] * variances[indices]).T.reshape( (n_modes, n_atoms, 3)) array = array[:, indices].T.reshape((n_modes, n_atoms, 3)) covariance = np.tensordot(array.transpose(2, 0, 1), arvar.transpose(0, 2, 1), axes=([0, 1], [1, 0])) queue.put(covariance)
def _crossCorrelations(queue, n_atoms, array, variances, indices): """Calculate covariance-matrix for a subset of modes.""" n_modes = len(indices) arvar = (array[:, indices] * variances[indices]).T.reshape((n_modes, n_atoms, 3)) array = array[:, indices].T.reshape((n_modes, n_atoms, 3)) covariance = np.tensordot(array.transpose(2, 0, 1), arvar.transpose(0, 2, 1), axes=([0, 1], [1, 0])) queue.put(covariance)
file_size = f.tell() progress.text_file_size(file_size) progress.close_on_cancel(f) f.seek(byte_offset) try: read_float_lines(f, array, line_format, progress) except SyntaxError, msg: f.close() raise f.close() if transpose: array = array.transpose() if progress: progress.done() return array # ----------------------------------------------------------------------------- # def read_float_lines(f, array, line_format, progress=None): a_1d = array.ravel() count = len(a_1d) c = 0
def calcCrossCorr(modes, n_cpu=1, norm=True): """Returns cross-correlations matrix. For a 3-d model, cross-correlations matrix is an NxN matrix, where N is the number of atoms. Each element of this matrix is the trace of the submatrix corresponding to a pair of atoms. Covariance matrix may be calculated using all modes or a subset of modes of an NMA instance. For large systems, calculation of cross-correlations matrix may be time consuming. Optionally, multiple processors may be employed to perform calculations by passing ``n_cpu=2`` or more.""" if not isinstance(n_cpu, int): raise TypeError('n_cpu must be an integer') elif n_cpu < 1: raise ValueError('n_cpu must be equal to or greater than 1') if not isinstance(modes, (Mode, NMA, ModeSet)): raise TypeError('modes must be a Mode, NMA, or ModeSet instance, ' 'not {0}'.format(type(modes))) if modes.is3d(): model = modes if isinstance(modes, (Mode, ModeSet)): model = modes._model if isinstance(modes, (Mode)): indices = [modes.getIndex()] n_modes = 1 else: indices = modes.getIndices() n_modes = len(modes) else: n_modes = len(modes) indices = np.arange(n_modes) array = model._getArray() n_atoms = model._n_atoms variances = model._vars if n_cpu == 1: s = (n_modes, n_atoms, 3) arvar = (array[:, indices] * variances[indices]).T.reshape(s) array = array[:, indices].T.reshape(s) covariance = np.tensordot(array.transpose(2, 0, 1), arvar.transpose(0, 2, 1), axes=([0, 1], [1, 0])) else: import multiprocessing n_cpu = min(multiprocessing.cpu_count(), n_cpu) queue = multiprocessing.Queue() size = n_modes / n_cpu for i in range(n_cpu): if n_cpu - i == 1: indices = modes.indices[i * size:] else: indices = modes.indices[i * size:(i + 1) * size] process = multiprocessing.Process(target=_crossCorrelations, args=(queue, n_atoms, array, variances, indices)) process.start() while queue.qsize() < n_cpu: time.sleep(0.05) covariance = queue.get() while queue.qsize() > 0: covariance += queue.get() else: covariance = calcCovariance(modes) if norm: diag = np.power(covariance.diagonal(), 0.5) covariance /= np.outer(diag, diag) return covariance
def calcCrossCorr(modes, n_cpu=1, norm=True): """Returns cross-correlations matrix. For a 3-d model, cross-correlations matrix is an NxN matrix, where N is the number of atoms. Each element of this matrix is the trace of the submatrix corresponding to a pair of atoms. Covariance matrix may be calculated using all modes or a subset of modes of an NMA instance. For large systems, calculation of cross-correlations matrix may be time consuming. Optionally, multiple processors may be employed to perform calculations by passing ``n_cpu=2`` or more.""" if not isinstance(n_cpu, int): raise TypeError('n_cpu must be an integer') elif n_cpu < 1: raise ValueError('n_cpu must be equal to or greater than 1') if not isinstance(modes, (Mode, NMA, ModeSet)): if isinstance(modes, list): try: is3d = modes[0].is3d() except: raise TypeError('modes must be a list of Mode or Vector instances, ' 'not {0}'.format(type(modes))) else: raise TypeError('modes must be a Mode, NMA, or ModeSet instance, ' 'not {0}'.format(type(modes))) else: is3d = modes.is3d() if is3d: model = modes if isinstance(modes, (Mode, ModeSet)): model = modes._model if isinstance(modes, (Mode)): indices = [modes.getIndex()] n_modes = 1 else: indices = modes.getIndices() n_modes = len(modes) else: n_modes = len(modes) indices = np.arange(n_modes) array = model._getArray() n_atoms = model._n_atoms variances = model._vars if n_cpu == 1: s = (n_modes, n_atoms, 3) arvar = (array[:, indices]*variances[indices]).T.reshape(s) array = array[:, indices].T.reshape(s) covariance = np.tensordot(array.transpose(2, 0, 1), arvar.transpose(0, 2, 1), axes=([0, 1], [1, 0])) else: import multiprocessing n_cpu = min(multiprocessing.cpu_count(), n_cpu) queue = multiprocessing.Queue() size = n_modes / n_cpu for i in range(n_cpu): if n_cpu - i == 1: indices = modes.indices[i*size:] else: indices = modes.indices[i*size:(i+1)*size] process = multiprocessing.Process( target=_crossCorrelations, args=(queue, n_atoms, array, variances, indices)) process.start() while queue.qsize() < n_cpu: time.sleep(0.05) covariance = queue.get() while queue.qsize() > 0: covariance += queue.get() else: covariance = calcCovariance(modes) if norm: diag = np.power(covariance.diagonal(), 0.5) D = np.outer(diag, diag) covariance = div0(covariance, D) return covariance
file_size = f.tell() progress.text_file_size(file_size) progress.close_on_cancel(f) f.seek(byte_offset) try: read_float_lines(f, array, line_format, progress) except SyntaxError, msg: f.close() raise f.close() if transpose: array = array.transpose() if progress: progress.done() return array # ----------------------------------------------------------------------------- # def read_float_lines(f, array, line_format, progress = None): a_1d = array.ravel() count = len(a_1d) c = 0 while c < count: