Example #1
0
    def to_xyz(self, fn=None):
        '''
            Method to write the given trajectory to an XYZ file. This method
            assumes that the coords attribute has been assigned.

            **Optional Arguments**

            fn
                a string defining the name of the output file
        '''
        if 'active' in list(self.__dict__.keys()) and not self.active: return
        if fn is None:
            fn = 'trajectory-%s-%i.xyz' %(self.term.basename.replace('/', '-'),self.term.index)
        f = open(fn, 'w')
        xyz = XYZWriter(f, [pt[Z].symbol for Z in self.numbers])
        for frame, coord in enumerate(self.coords):
            xyz.dump('frame %i' %frame, coord)
        f.close()
Example #2
0
    def to_xyz(self, fn=None):
        '''
            Method to write the given trajectory to an XYZ file. This method
            assumes that the coords attribute has been assigned.

            **Optional Arguments**

            fn
                a string defining the name of the output file
        '''
        if 'active' in list(self.__dict__.keys()) and not self.active: return
        if fn is None:
            fn = 'trajectory-%s-%i.xyz' %(self.term.basename.replace('/', '-'),self.term.index)
        f = open(fn, 'w')
        xyz = XYZWriter(f, [pt[Z].symbol for Z in self.numbers])
        for frame, coord in enumerate(self.coords):
            xyz.dump('frame %i' %frame, coord)
        f.close()
Example #3
0
    def write(self, trajectory, filename):
        '''
            Method to write the given trajectory to a file

            **Arguments**

            trajectory
                a (F,N,3) numpy array defining the perturbation trajectory.
                It contains F frames of (N,3)-dimensional geometry arrays.

            filename
                a string defining the name of the output file
        '''
        _f = open(filename, 'w')
        xyz = XYZWriter(_f, [pt[Z].symbol for Z in self.system.numbers])
        for idx, dx in enumerate(trajectory):
            coords = self.system.ref.coords + dx
            xyz.dump('frame %i' %idx, coords)
        _f.close()
Example #4
0
File: pca.py Project: molmod/yaff
def write_principal_mode(f, f_pca, index, n_frames=100, select=None, mw=True, scaling=1.):
    """
        Writes out one xyz file per principal mode given in index

        **Arguments:**

        f
            Path to an h5.File instance containing the original data.

        f_pca
            Path to an h5.File instance containing the PCA, with reference structure, eigenvalues
            and principal modes.

        index
            An array containing the principal modes which need to be written out.

        **Optional arguments:**

        n_frames
            The number of frames in each xyz file.

        select
            A list of atom indexes that are considered for the computation
            of the spectrum. If not given, all atoms are used.

        mw
            If mass_weighted is True, the covariance matrix is assumed to be mass-weighted.

        scaling
            Scaling factor applied to the maximum deviation of the principal mode (i.e. the maximum
            principal component for that mode)
    """

    # Load in the relevant data
    # Atom numbers, masses and initial frame
    numbers = f['system/numbers']
    masses = f['system/masses']
    pos = f['trajectory/pos']
    if select is not None:
        numbers = numbers[select]
        masses = masses[select]
        pos = pos[:,select,:]
    masses = np.repeat(masses,3)
    # Data from the PC analysis
    grp = f_pca['pca']
    # The selected principal modes
    pm = grp['pm'][:,index]
    # The corresponding eigenvalues
    eigval = grp['eigvals'][index]
    # And the principal components
    pc = grp['pc'][:,index]

    with log.section('PCA'):
        for i in range(len(index)):
            log('Writing out principal mode %s' %index[i])
            if eigval[i] < 0:
                Warning('Negative eigenvalue encountered, skipping this entry')
                break
            # Determine maximum fluctuation (in units of meter*sqrt(kilogram))
            max_fluct = np.max(np.abs(pc[:,i]))
            # Initialize XYZWriter from molmod package
            xw = XYZWriter('pm_%s.xyz' %index[i], [pd[number].symbol for number in numbers])
            # Determine index in trajectory closest to rest state, and the corresponding positions
            ind_min = np.argmin(np.abs(pc[:,i]))
            r_ref = pos[ind_min,:,:]
            for j in range(n_frames):
                q_var = scaling*pm[:,i]*max_fluct*(2.*j-n_frames)/n_frames
                if mw:
                    q_var /= np.sqrt(masses)
                r = r_ref + q_var.reshape(-1,3)
                xw.dump('Frame%s' %j, r)
            del xw
Example #5
0
File: pca.py Project: boegel/yaff
def write_principal_mode(f,
                         f_pca,
                         index,
                         n_frames=100,
                         select=None,
                         mw=True,
                         scaling=1.):
    """
        Writes out one xyz file per principal mode given in index

        **Arguments:**

        f
            Path to an h5.File instance containing the original data.

        f_pca
            Path to an h5.File instance containing the PCA, with reference structure, eigenvalues
            and principal modes.

        index
            An array containing the principal modes which need to be written out.

        **Optional arguments:**

        n_frames
            The number of frames in each xyz file.

        select
            A list of atom indexes that are considered for the computation
            of the spectrum. If not given, all atoms are used.

        mw
            If mass_weighted is True, the covariance matrix is assumed to be mass-weighted.

        scaling
            Scaling factor applied to the maximum deviation of the principal mode (i.e. the maximum
            principal component for that mode)
    """

    # Load in the relevant data
    # Atom numbers, masses and initial frame
    numbers = f['system/numbers']
    masses = f['system/masses']
    pos = f['trajectory/pos']
    if select is not None:
        numbers = numbers[select]
        masses = masses[select]
        pos = pos[:, select, :]
    masses = np.repeat(masses, 3)
    # Data from the PC analysis
    grp = f_pca['pca']
    # The selected principal modes
    pm = grp['pm'][:, index]
    # The corresponding eigenvalues
    eigval = grp['eigvals'][index]
    # And the principal components
    pc = grp['pc'][:, index]

    with log.section('PCA'):
        for i in xrange(len(index)):
            log('Writing out principal mode %s' % index[i])
            if eigval[i] < 0:
                Warning('Negative eigenvalue encountered, skipping this entry')
                break
            # Determine maximum fluctuation (in units of meter*sqrt(kilogram))
            max_fluct = np.max(np.abs(pc[:, i]))
            # Initialize XYZWriter from molmod package
            xw = XYZWriter('pm_%s.xyz' % index[i],
                           [pd[number].symbol for number in numbers])
            # Determine index in trajectory closest to rest state, and the corresponding positions
            ind_min = np.argmin(np.abs(pc[:, i]))
            r_ref = pos[ind_min, :, :]
            for j in xrange(n_frames):
                q_var = scaling * pm[:, i] * max_fluct * (2. * j -
                                                          n_frames) / n_frames
                if mw:
                    q_var /= np.sqrt(masses)
                r = r_ref + q_var.reshape(-1, 3)
                xw.dump('Frame%s' % j, r)
            del xw