def parse(self, **kwargs):
        pbmol = next(pybel.readfile('cif', self.filename))
        unpack_symmetry(pbmol)

        natoms = len(pbmol.atoms)

        names = np.zeros(natoms, dtype=object)
        charges = np.zeros(natoms, dtype=np.float32)
        masses = np.zeros(natoms, dtype=np.float64)

        for i, atom in enumerate(pbmol.atoms):
            names[i] = atom.type
            masses[i] = atom.exactmass
            charges[i] = atom.partialcharge

        attrs = [
            Atomnames(names),
            Charges(charges),
            Masses(masses),
            Resids(np.array([1])),
            Resnums(np.array([1])),
            Segids(np.array(['SYSTEM'], dtype=object)),
        ]

        return Topology(natoms, 1, 1, attrs=attrs)
Esempio n. 2
0
    def parse(self):
        """
        Access ESPResSo data and return the topology object

        Returns
        -------

        top : :class:`MDAnalysis.core.topology.Topology`
            a topology object

        """
        espresso = self.kwargs['espresso']

        names = []
        atomtypes = []
        masses = []
        charges = []

        for p in espresso.part:
            names.append("A" + repr(p.type))
            atomtypes.append("T" + repr(p.type))
            masses.append(p.mass)
            charges.append(p.q)
        natoms = len(espresso.part)
        attrs = [
            Atomnames(np.array(names, dtype=object)),
            Atomids(np.arange(natoms) + 1),
            Atomtypes(np.array(atomtypes, dtype=object)),
            Masses(masses),
            Resids(np.array([1])),
            Resnums(np.array([1])),
            Segids(np.array(['System'], dtype=object)),
            AltLocs(np.array([' '] * natoms, dtype=object)),
            Resnames(np.array(['R'], dtype=object)),
            Occupancies(np.zeros(natoms)),
            Tempfactors(np.zeros(natoms)),
            ICodes(np.array([' '], dtype=object)),
            Charges(np.array(charges)),
        ]

        top = Topology(natoms, 1, 1, attrs=attrs)

        return top
Esempio n. 3
0
    def parse(self):
        """
        Access ESPResSo data and return the topology object.

        Returns
        -------

        top : :class:`MDAnalysis.core.topology.Topology`
            a topology object

        """
        espresso = self.kwargs['espresso']

        names = []
        atomtypes = []
        masses = []
        charges = []
        bonds = []
        angles = []
        dihedrals = []

        for p in espresso.part:
            names.append("A" + repr(p.type))
            atomtypes.append("T" + repr(p.type))
            masses.append(p.mass)
            charges.append(p.q)
            for bond in p.bonds:
                partner_ids = bond[1:]
                n_partner = len(partner_ids)
                if n_partner == 1:
                    bonds.append((p.id, partner_ids[0]))
                elif n_partner == 2:
                    angles.append((partner_ids[0], p.id, partner_ids[1]))
                elif n_partner == 3:
                    dihedrals.append(
                        (partner_ids[0], p.id, partner_ids[1], partner_ids[2]))
                else:
                    continue
        natoms = len(espresso.part)
        attrs = [
            Atomnames(np.array(names, dtype=object)),
            Atomids(np.arange(natoms) + 1),
            Atomtypes(np.array(atomtypes, dtype=object)),
            Masses(masses),
            Resids(np.array([1])),
            Resnums(np.array([1])),
            Segids(np.array(['System'], dtype=object)),
            AltLocs(np.array([' '] * natoms, dtype=object)),
            Resnames(np.array(['R'], dtype=object)),
            Occupancies(np.zeros(natoms)),
            Tempfactors(np.zeros(natoms)),
            ICodes(np.array([' '], dtype=object)),
            Charges(np.array(charges)),
            Bonds(bonds),
            Angles(angles),
            Dihedrals(dihedrals)
        ]

        top = Topology(natoms, 1, 1, attrs=attrs)

        return top