コード例 #1
0
ファイル: builder.py プロジェクト: sergiomsantos/protosyn
    def load_fragments():
        from residue import Residue
        import os

        ref = Residue('REF')
        ref.append_atom(Atom( 'N', [0.000,  0.300, 0.000]))
        ref.append_atom(Atom('CA', [1.181, -0.540, 0.000]))
        ref.append_atom(Atom( 'C', [2.440,  0.300, 0.000]))
        
        # load all residues
        this_dir, this_filename = os.path.split(__file__)
        DATA_PATH = os.path.join(this_dir, "static", "residues.pdb")
        
        residue_container = Molecule.LoadFromFile(DATA_PATH)
        for fragment in residue_container.iter_residues():
            fit(ref, ('N','CA','C'), fragment, ('N','CA','C'))
            FragmentProvider.FRAGMENTS[fragment.name] = fragment
コード例 #2
0
    def LoadFromFile(fname):
        from residue import Residue
        from atom import Atom

        def parse_pdb_line(s):
            # atname, resname, resid, xyz
            return s[12:16].strip(), \
                   s[17:21].strip(), \
                   int(s[22:26]), \
                   np.array([s[i:i+8] for i in (30,38,46)], dtype=float)
        rindex = 0
        pivot = None
        atoms = [None]
        is_head = True
        molecule = Molecule('mol')
        with open(fname, 'r') as fin:
            for line in fin:
                if line.startswith('TITLE'):
                    molecule.name = line[5:].strip()
                elif line.startswith('ATOM'):
                    atname,resname,resid,xyz = parse_pdb_line(line)
                    if is_head or (resid != rindex):
                        residue = Residue(resname)
                        molecule.append_residue(residue, is_head)
                        is_head = False
                        rindex = resid
                    atom = Atom(atname, xyz)
                    atoms.append(atom)
                    residue.append_atom(atom)
                elif line.startswith('TER'):
                    is_head = True
                elif line.startswith('CONECT'):
                    idxs = map(int, line[6:].split())
                    pivot = atoms[idxs[0]]
                    for i in idxs[1:]:
                        pivot.connect_to(atoms[i])
        auto_setup = pivot is None
        molecule.compile(auto_setup=auto_setup)
        return molecule