def __getitem__(self, index): if self._closed: raise ValueError('I/O operation on closed file') if isinstance(index, int): return self.getFrame(index) elif isinstance(index, (slice, list, np.ndarray)): if isinstance(index, slice): ens = Ensemble('{0:s} ({1[0]:d}:{1[1]:d}:{1[2]:d})'.format( self._title, index.indices(len(self)))) else: ens = Ensemble('{0:s} slice'.format(self._title)) ens.setCoords(self.getCoords()) if self._weights is not None: ens.setWeights(self._weights.copy()) ens.addCoordset(self.getCoordsets(index)) return ens else: raise IndexError('invalid index')
def calcOneWayAdaptiveANM(a, b, n_steps, **kwargs): """Runs one-way adaptivate ANM. """ n_modes = kwargs.pop('n_modes', 20) coordsA, coordsB, title, atoms, weights, maskA, maskB, rmsd = checkInput( a, b, **kwargs) coordsA = coordsA.copy() LOGGER.timeit('_prody_calcAdaptiveANM') n = 0 resetFmin = True defvecs = [] rmsds = [rmsd] ensemble = Ensemble(title + '_aANM') ensemble.setAtoms(atoms) ensemble.setCoords(coordsB) ensemble.setWeights(weights) ensemble.addCoordset(coordsA.copy()) while n < n_steps: LOGGER.info('\nStarting cycle {0} with initial structure {1}'.format( n + 1, title)) n_modes = calcStep(coordsA, coordsB, n_modes, ensemble, defvecs, rmsds, mask=maskA, resetFmin=resetFmin, **kwargs) n += 1 resetFmin = False if n_modes == 0: LOGGER.report('One-way Adaptive ANM converged in %.2fs.', '_prody_calcAdaptiveANM') break return ensemble
def __getitem__(self, index): if self._closed: raise ValueError('I/O operation on closed file') if isinstance(index, int): return self.getFrame(index) elif isinstance(index, (slice, list, ndarray)): if isinstance(index, slice): ens = Ensemble('{0} ({1[0]}:{1[1]}:{1[2]})'.format( self._title, index.indices(len(self)))) else: ens = Ensemble('{0} slice'.format(self._title)) ens.setCoords(self.getCoords()) if self._weights is not None: ens.setWeights(self._weights.copy()) ens.addCoordset(self.getCoordsets(index)) ens.setAtoms(self._atoms) return ens else: raise IndexError('invalid index')
def calcBothWaysAdaptiveANM(a, b, n_steps, **kwargs): """Runs both-way adaptivate ANM. """ n_modes0 = n_modes = kwargs.pop('n_modes', 20) coordsA, coordsB, title, atoms, weights, maskA, maskB, rmsd = checkInput( a, b, **kwargs) coordsA = coordsA.copy() coordsB = coordsB.copy() LOGGER.timeit('_prody_calcAdaptiveANM') n = 0 resetFmin = True defvecs = [] rmsds = [rmsd] ensA = Ensemble('A') ensA.setCoords(coordsA) ensA.setWeights(weights) ensA.addCoordset(coordsA.copy()) ensB = Ensemble('B') ensB.setCoords(coordsB.copy()) ensB.setWeights(weights) ensB.addCoordset(coordsB.copy()) while n < n_steps: LOGGER.info('\nStarting cycle {0} with {1}'.format( n + 1, getTitle(a, 'structure A'))) n_modes = calcStep(coordsA, coordsB, n_modes, ensA, defvecs, rmsds, mask=maskA, resetFmin=resetFmin, **kwargs) n += 1 resetFmin = False if n_modes == 0: break n = 0 n_modes = n_modes0 resetFmin = True while n < n_steps: LOGGER.info('\nStarting cycle {0} with structure {1}'.format( n + 1, getTitle(b, 'structure B'))) n_modes = calcStep(coordsB, coordsA, n_modes, ensB, defvecs, rmsds, mask=maskB, resetFmin=resetFmin, **kwargs) n += 1 resetFmin = False if n_modes == 0: LOGGER.report('Alternating Adaptive ANM converged in %.2fs.', '_prody_calcAdaptiveANM') break ensemble = ensA + ensB[::-1] ensemble.setTitle(title + '_aANM') ensemble.setAtoms(atoms) ensemble.setCoords(ensB.getCoords()) LOGGER.report('Both-way Adaptive ANM converged in %.2fs.', '_prody_calcAdaptiveANM') return ensemble