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
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