andrew leaver-fay, phd baker lab university of washington

39
Andrew Leaver-Fay, PhD Baker Lab University of Washington

Upload: vernon-todd

Post on 13-Dec-2015

215 views

Category:

Documents


1 download

TRANSCRIPT

Andrew Leaver-Fay, PhDBaker LabUniversity of Washington

mini

Speed. Flexibility. Usability.

O(N2)

O(N) & O(Nlg N)

O(k)

Past

Present

Future

Speed. Flexibility. Usability.Speed vs. Flexibility

Hard coded parameters (e.g. pair_cutoffs, count_pair)

R++: Score terms responsible for entire structure (e.g. constraints)

All scorers (score function, packer, minimizer) know what score terms exist

Mini: Score terms responsible for entire residue pairs

Communication through global variables instead of input parameters

Context is not tracked

Packer’s sparse matrix for RPEs assumes AA’s being packed

Speed. Flexibility. Usability.Speed vs. UsabilityRefold by hand from carefully chosen starting points

Lazy refold

Plan and optimize for a single mode of interaction

Design-in efficiency for all possible future uses

Hidden assumptions (e.g. refold assumes ideal bond geometry)

Track old scores in global arrays (e.g. best_bumps)

Speed. Flexibility. Usability.Flexibility vs. UsabilityComplete Generality: C, Unix Specific, reliable, understandable

functionality that can’t be modified

Job Distributor generalized for arbitrary movers

Flag report (“What flags are used in this protocol?” ~ halting problem)

Thread Safety

Speed. Flexibility. Usability.

O(N2)

O(N) & O(Nlg N)

O(k)

Past

Present

Future

Model Protocol

Pose pose;

ScoreFunction * sfxn;

Mover * mover;

MonteCarlo MC( sfxn );

for i = 1 to X

mover->apply( pose );

MC.boltzman( pose ); // 1 sfxn call, 1 pose copy

Model Protocol

Pose pose;

ScoreFunctionOP sfxn;

MoverOP mover;

MonteCarlo MC( sfxn );

for i = 1 to X

mover->apply( pose );

MC.boltzman( pose ); // 1 sfxn call, 1 pose copy

O(N2) O(NlgN) Scoring

• Neighbor detection: O(N2) O(N lg N)• NxN tables sparse graph• Score terms left to themselves

ScoreFunction evaluates terms for neighboring residue pairs*

• O(N2) terms replaced with O(N) equivalents

O(NlgN)O(N)

O(N + k)

O(N)

a b

ab

EnergyMethod Hierarchy

Context Dependcy

Range

Count

ScoringRealScoreFunction::operator()( Pose & pose) const pose.update_residue_neighbors( info_ ); setup_for_scoring( pose ); for e = {u,v } pose.energy_graph() eval_cd_2b( pose.res(u), pose.res(v) ); if ( pose.moved_relative( u, v ) ) total += eval_ci_2b( pose.res(u), pose.res(v), e); else

total += e; total += eval_cd_1b( pose ); total += eval_ci_1b( pose ); finalize( total ); return total;

• Holds EnergyMethods that the user wants evaluated

• Input to – minimizer – pack_rotamers– rotamer_trials

ScoreFunction as a Container

• Holds EnergyMethods that the user wants evaluated

• Input to – minimizer – pack_rotamers– rotamer_trials

ScoreFunction as a Container

• Holds EnergyMethods that the user wants evaluated

• Input to – minimizer – pack_rotamers– rotamer_trials– OnTheFlyInteractionGraph– GreenPacker

ScoreFunction as a Container

GreenPacker

Reuses RPEs for groups of residues that aren’t moving wrt each other.

For Example:

Fixed-backbone ligand docking

Fixed backbone protein docking

GreenPacker

Reuses RPEs for groups of residues that aren’t moving wrt each other.

Prot/Prot CI 2B energies reusedProt/Prot CI 2B energies reused

Prot/Prot CD 2B energies freshly calculatedProt/Prot CD 2B energies freshly calculated

All Prot/Prot 2B energies freshly calculated

GreenPacker

Reuses RPEs for groups of residues that aren’t moving wrt each other.

Prot/Prot CI 2B energies reusedProt/Prot CI 2B energies reused

Prot/Prot CD 2B energies freshly calculatedProt/Prot CD 2B energies freshly calculated

All Prot/Prot 2B energies freshly calculated

GreenPacker

Reuses RPEs for groups of residues that aren’t moving wrt each other.

GreenPacker

Reuses RPEs for groups of residues that aren’t moving wrt each other.

GreenPacker

Reuses RPEs for groups of residues that aren’t moving wrt each other.

GreenPacker

• User identifies residue groups that remain fixed wrt each other• 1st packing:

– save rotamer internal geometry– save CI 2B energies

• Subsequent packings: – Find correspondence between original rotamers and new rotamers based

on internal geometry– Intra-group:

• Reuse saved CI 2B energies for rotamers that have a correspondence• Compute fresh CI 2B energies for those that don’t• Compute CD 2B energies

– Inter-group:• Compute all 2B energies

• Holds EnergyMethods that the user wants evaluated• Input to

– minimizer – pack_rotamers– rotamer_trials– OnTheFlyInteractionGraph– GreenPacker

ScoreFunction as a Container

• Holds EnergyMethods that the user wants evaluated• Input to

– minimizer – pack_rotamers– rotamer_trials– OnTheFlyInteractionGraph– GreenPacker– Enzyme Multi State Interaction Graph*– LoopScoreFunction*– LoopPacker*– Sidechain Minimizer*

ScoreFunction as a Container

Minimization

• update_domain_map: O(N)• setup_for_derivatives: O(N)• set_DOF + refold: O(N)• eval_atom_derivative: O(k) -- (Phil?)• score: O(N + k)

Efficient to minimize all residues, inefficient to minimize one residue

Output Sensitive Refold

set_chi Problem: after m updates to the DOFs of an atom tree, refold.

k = # atoms that move

1) O(N+m): refold from root

2) O(m2+k) (complicated)

3) O(k+m): DFS -- Snoeyink

Output Sensitive RefoldDFS:

Record each atom with a DOF change -- O(m)

Mark each atom with a DOF change as “unreached”

Start a DFS from each unvisited atom, stopping at atoms that have already been visited in the DFS. Mark reached atoms -- O(k)

Refold from unreached atoms with DOF changes

Output Sensitive RefoldDFS:

Record each atom with a DOF change -- O(m)

Mark each atom with a DOF change as “unreached”

Start a DFS from each unvisited atom, stopping at atoms that have already been visited in the DFS. Mark reached atoms -- O(k)

Refold from unreached atoms with DOF changes

Output Sensitive RefoldDFS:

Record each atom with a DOF change -- O(m)

Mark each atom with a DOF change as “unreached”

Start a DFS from each unvisited atom, stopping at atoms that have already been visited in the DFS. Mark reached atoms -- O(k)

Refold from unreached atoms with DOF changes

Output Sensitive RefoldDFS:

Record each atom with a DOF change -- O(m)

Mark each atom with a DOF change as “unreached”

Start a DFS from each unvisited atom, stopping at atoms that have already been visited in the DFS. Mark reached atoms -- O(k)

Refold from unreached atoms with DOF changes

Loop Modeling Example

Step 33 Step 34

O(k) minimization

• “Sidechain minimizer”– Rotamer trials w/ minimization– Pre-minimize rotamers– Pre-minimize rotamer pairs*

• Without modifying core::pack!– class RotamerOperation– class RotamerSetOperation

When is mini done?

• R++ functionality mini functionality

• Release?

Plug for Roland Dunbrack’s Talk Tomorrow

0 0.4-0.2

Acknowledgementsashworth dmandell johnk pbradley shefflerbblum ekellogg kaufmann renfrew sidchu flo kevin rhiju smlewisCruiseControl gktaylor leaverfa ronj sramancsmith glemmon momeara rvernon stuartmcyanover havranek monica rwalton texdavis ion mtyka sarel treuilledekim jecorn murphp scooper yabdimaio jeff olange sergey yiliu

Mini Community

David Baker

Brian Kuhlman

Jeff Gray