def extendModel(model, nodes, atoms, norm=False): """Extend a coarse grained *model* built for *nodes* to *atoms*. *model* may be :class:`.ANM`, :class:`.GNM`, :class:`.PCA`, or :class:`.NMA` instance. This function will take part of the normal modes for each node (i.e. Cα atoms) and extend it to all other atoms in the same residue. For each atom in *nodes* argument *atoms* argument must contain a corresponding residue. If *norm* is **True**, extended modes are normalized.""" try: evecs = model._getArray() evals = model.getEigvals() except AttributeError: raise ValueError('model must be an NMA instance') if model.numAtoms() != nodes.numAtoms(): raise ValueError('atom numbers must be the same') indices, atommap = extendAtoms(nodes, atoms, model.is3d()) evecs = evecs[indices, :] if norm: evecs /= np.array([((evecs[:, i])**2).sum()**0.5 for i in range(evecs.shape[1])]) if model.is3d(): extended = NMA('Extended ' + str(model)) else: extended = GNM('Extended ' + str(model)) extended.setEigens(evecs, evals) return extended, atommap
def extendModel(model, nodes, atoms, norm=False): """Extend a coarse grained *model* built for *nodes* to *atoms*. *model* may be :class:`.ANM`, :class:`.GNM`, :class:`.PCA`, or :class:`.NMA` instance. This function will take part of the normal modes for each node (i.e. Cα atoms) and extend it to all other atoms in the same residue. For each atom in *nodes* argument *atoms* argument must contain a corresponding residue. If *norm* is **True**, extended modes are normalized.""" try: evecs = model._getArray() evals = model.getEigvals() except AttributeError: raise ValueError('model must be an NMA instance') if model.numAtoms() != nodes.numAtoms(): raise ValueError('atom numbers must be the same') indices, atommap = extendAtoms(nodes, atoms, model.is3d()) evecs = evecs[indices, :] if norm: evecs /= np.array([((evecs[:, i]) ** 2).sum() ** 0.5 for i in range(evecs.shape[1])]) if model.is3d(): extended = NMA('Extended ' + str(model)) else: extended = GNM('Extended ' + str(model)) extended.setEigens(evecs, evals) return extended, atommap
def extendVector(vector, nodes, atoms): """Extend a coarse grained *vector* for *nodes* to *atoms*. This function will take part of the normal modes for each node (i.e. Cα atoms) and extend it to all other atoms in the same residue. For each atom in *nodes*, *atoms* argument must contain a corresponding residue.""" try: vec = vector._getArray() except AttributeError: raise ValueError('vector must be a Vector instance') if vector.numAtoms() != nodes.numAtoms(): raise ValueError('atom numbers must be the same') indices, atommap = extendAtoms(nodes, atoms, vector.is3d()) extended = Vector(vec[indices], 'Extended ' + str(vector), vector.is3d()) return extended, atommap
def extendVector(vector, nodes, atoms): """Extend a coarse grained *vector* for *nodes* to *atoms*. This function will take part of the normal modes for each node (i.e. Cα atoms) and extend it to all other atoms in the same residue. For each atom in *nodes*, *atoms* argument must contain a corresponding residue.""" try: vec = vector._getArray() except AttributeError: raise ValueError('vector must be a Vector instance') if vector.numAtoms() != nodes.numAtoms(): raise ValueError('atom numbers must be the same') indices, atommap = extendAtoms(nodes, atoms, vector.is3d()) extended = Vector(vec[indices], 'Extended ' + str(vector), vector.is3d()) return extended, atommap
def extendMode(mode, nodes, atoms, norm=False): """Extend a coarse grained normal *mode* built for *nodes* to *atoms*. This function will take part of the normal modes for each node (i.e. Cα atoms) and extend it to all other atoms in the same residue. For each atom in *nodes* argument *atoms* argument must contain a corresponding residue. Extended mode is multiplied by the square root of variance of the mode. If *norm* is **True**, extended mode is normalized.""" try: vec = mode._getArray() std = mode.getVariance()**0.5 except AttributeError: raise ValueError('mode must be a normal Mode instance') indices, atommap = extendAtoms(nodes, atoms, mode.is3d()) vec = vec[indices] if norm: vec /= ((vec)**2).sum()**0.5 else: vec *= std extended = Vector(vec, 'Extended ' + str(mode), mode.is3d()) return extended, atommap
def extendMode(mode, nodes, atoms, norm=False): """Extend a coarse grained normal *mode* built for *nodes* to *atoms*. This function will take part of the normal modes for each node (i.e. Cα atoms) and extend it to all other atoms in the same residue. For each atom in *nodes* argument *atoms* argument must contain a corresponding residue. Extended mode is multiplied by the square root of variance of the mode. If *norm* is **True**, extended mode is normalized.""" try: vec = mode._getArray() std = mode.getVariance() ** 0.5 except AttributeError: raise ValueError('mode must be a normal Mode instance') indices, atommap = extendAtoms(nodes, atoms, mode.is3d()) vec = vec[indices] if norm: vec /= ((vec) ** 2).sum() ** 0.5 else: vec *= std extended = Vector(vec, 'Extended ' + str(mode), mode.is3d()) return extended, atommap