Presentation is loading. Please wait.

Presentation is loading. Please wait.

Rotamer Trie: Storing & evaluating sets of rotamers Andrew Leaver-Fay, UNC Comp Sci Brian Kuhlman, UNC Biochem Jack Snoeyink, UNC Comp Sci.

Similar presentations


Presentation on theme: "Rotamer Trie: Storing & evaluating sets of rotamers Andrew Leaver-Fay, UNC Comp Sci Brian Kuhlman, UNC Biochem Jack Snoeyink, UNC Comp Sci."— Presentation transcript:

1 Rotamer Trie: Storing & evaluating sets of rotamers Andrew Leaver-Fay, UNC Comp Sci Brian Kuhlman, UNC Biochem Jack Snoeyink, UNC Comp Sci

2 Outline Motivation Trie Data Structure  Rotamer Trie Trie vs. Trie Subtree Pruning Results

3 Graphs & Trees G = {V,E} Tree –Connected –|E| = |V| - 1 Rooted Tree –Edges have direction –Point away from “root” Subtree

4

5 Trie Rooted Tree Vertices hold objects Each root-to-leaf path describes a string of objects

6 Dictionary Trie Rooted Tree Vertices hold letters Each root-to-leaf path describes a word ex. ‘Apple,’ ‘Apply,’ and ‘Appear’ “Shared Prefix” A P P E A R L EY

7 Rotamer Trie Rooted Tree Vertices hold atoms Each root-to-leaf path describes a rotamer

8 C O N H CA HA CB 1HB 2HB CG HG CD1 1HD1 2HD1 3HD1 CD2 1HD2 2HD2 3HD2  1 = 180°  1 = 60°  1 = -60° Nine Leucine Rotamers

9 Outline Motivation Trie Data Structure Rotamer Trie Trie vs. Trie  Subtree Pruning Results

10 Trie vs Trie Input: –Two rotamer tries, R and S Output –Rotamer pair energies

11 Trie vs. Trie Algorithm uses two recursive functions –Atom vs Trie –Trie vs Trie Algorithm uses three global variables –ARStackTop –AREnergies –RREnergies

12 Trie vs Trie Tries R and S; trie_vs_trie(R.root, S) atom_vs_trie(r, s*, ancestral_E) ancestral_E += atom_atom_energy(r, s); … for (int i = 0; i < s.num_children; i++) atom_vs_trie(r, s.child[i], ancestral_E); return; trie_vs_trie(r*, S) atom_vs_trie(r, S.root, 0); … for (int i = 0; i < r.num_children, i++) … trie_vs_trie(r.child[i], S); return;

13 Trie vs Trie Global Variables –ARStackTop –AREnergies: Atom/Rotamer energies Stack 4 x S.num_rotamers (Why 4?) –RREnergies Rotamer/Rotamer energies R.num_rotamers x S.num_rotamers

14 Trie vs Trie Tries R and S; trie_vs_trie(R.root, S) atom_vs_trie(r, s*, ancestral_E) ancestral_E += atom_atom_energy(r, s); if (s.terminal_rotamer_id != -1) AREnergies[ARStackTop] [s.terminal_rotamer_id] += ancestral_E; for (int i = 0; i < s.num_children; i++) atom_vs_trie(r, s.child[i], ancestral_E); return; trie_vs_trie(r*, S) atom_vs_trie(r, S.root, 0); if (r.terminal_rotamer_id != -1) RREnergies[r.terminal_rotamer_id] = AREnergies[ARStackTop]; if (r.num_children > 0) ARStackTop++; for (int i = 0; i < r.num_children-1, i++) AREnergies[ARStackTop] = AREnergies[ARStackTop - 1]; trie_vs_trie(r.child[i], S); ARStackTop--; trie_vs_trie(r.child[++ii], S); return;

15 Atom vs Trie atom_vs_trie(r, s*, ancestral_E) ancestral_E += atom_atom_energy(r, s); if (s.terminal_rotamer_id != -1) AREnergies[ARStackTop] [s.terminal_rotamer_id] += ancestral_E; for (int i = 0; i < s.num_children; i++) { atom_vs_trie(r, s.child[i], ancestral_E); } return;

16 Trie vs Trie trie_vs_trie(r*, S) atom_vs_trie(r, S.root, 0); if (r.terminal_rotamer_id != -1) RREnergies[r.terminal_rotamer_id] = AREnergies[ARStackTop]; if (r.num_children > 0) ARStackTop++; for (int i = 0; i < r.num_children-1, i++) { AREnergies[ARStackTop] = AREnergies[ARStackTop - 1]; trie_vs_trie(r.child[i], S); } ARStackTop--; trie_vs_trie(r.child[++ii], S); return;

17 Iterative Implementation Trie_vs_Trie(R, S) for r  R for s  S … atom_atom_energy(r, s); … return;

18 Outline Motivation Trie Data Structure Rotamer Trie Trie vs. Trie Pruning  5.5 Å Results

19 Types Of Prunes Heavy Atom / Subtree Prune Subtree / Subtree Prune –Collision Prune optional 20 kcal/mol collision threshold

20 Outline Motivation Trie Data Structure Rotamer Trie Trie vs. Trie Subtree Pruning Results 

21 Results Rotamer / Rotamer energies: 4x Speedup Experiment: 55 complete protein redesign tasks: Command line: rosetta.gcc -l pdb_list -design -fixbb -ex1 -ex2aro_only -chain_inc -sqc seqcompare

22 Results

23 Rotamer / Background energies: 2.4x Speedup Experiment: Single protein relaxation task Command line: rosetta.mac aa h008 _ -relax -farlx silent_input -s start.out -all -nstruct 3 -ex1 -ex2 -overwrite -constant_seed

24 Results Rotamer Trials: 2.406x Speedup –Test case: 1225 calls to fullatom_rotamer_trials() –Original running time average: 0.2406 sec –Trie running time average: 0.1006 sec Beginning to end: 1.524x Speedup –Original running time: 16:03 –With trie: 10:21 Includes trie_vs_trie as well as trie_vs_background

25 June 24 th, 2005 August 20 th, 2005

26 Trie algorithms speed protein structure prediction by 2.2x. Original (seconds)Trie vs Trie (seconds) Trie vs Trie, Trie vs Background (seconds) 1utg_11.975.335.77 1tig_25.9813.2312.19 1erv_25.6914.3313.33 1tif_12.456.835.71 1aa3_15.36.715.8 1ail_17.298.367.41 1ig5_14.827.676.76 1b72_11.175.294.59 1pgx_10.674.874.52 1r69_11.56.145.21 1acp_15.257.646.79 Speedup1.9917822.204022 Data Courtesy of Lars Malmstroem (U.Wash)


Download ppt "Rotamer Trie: Storing & evaluating sets of rotamers Andrew Leaver-Fay, UNC Comp Sci Brian Kuhlman, UNC Biochem Jack Snoeyink, UNC Comp Sci."

Similar presentations


Ads by Google