Esempio n. 1
0
 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')
Esempio n. 2
0
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
Esempio n. 3
0
    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')
Esempio n. 4
0
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