Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DockingEnsemblePrepackProtocol.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;
2 // rm-trailing-spaces:t -*-
3 // vi: set ts=2 noet:
4 //
5 // (c) Copyright Rosetta Commons Member Institutions.
6 // (c) This file is part of the Rosetta software suite and is made available
7 // under license.
8 // (c) The Rosetta software is developed by the contributing members of the
9 // Rosetta Commons.
10 // (c) For more information, see http://www.rosettacommons.org.
11 // Questions about this can be
12 // (c) addressed to University of Washington UW TechTransfer,
13 // email: license@u.washington.edu.
14 
15 /// @file DockingEnsemblePrepackProtocol.cc
16 /// @brief Prepacking of the bound structure before docking with ensembles
17 /// @author Monica Berrondo
18 
19 // Unit Headers
21 
22 // Package headers
27 
28 // Project headers
29 // AUTO-REMOVED #include <core/chemical/ChemicalManager.hh>
32 // AUTO-REMOVED #include <core/pack/task/PackerTask.hh>
33 #include <core/pose/Pose.hh>
36 
37 // AUTO-REMOVED #include <protocols/jd2/JobOutputter.hh>
38 // AUTO-REMOVED #include <protocols/jd2/JobDistributor.hh>
39 
46 
47 #include <basic/options/option.hh>
48 #include <basic/options/keys/docking.OptionKeys.gen.hh>
49 
50 // Utility Headers
51 #include <basic/Tracer.hh>
52 
53 // AUTO-REMOVED #include <core/pack/task/operation/TaskOperation.hh>
54 
55 #include <utility/vector0.hh>
56 #include <utility/vector1.hh>
57 
58 //Auto Headers
61 
62 
63 
64 using basic::T;
65 using namespace protocols::moves;
66 using namespace core;
67 using namespace pack::task;
69 
70 static basic::Tracer TR("protocols.docking.DockingEnsemblePrepackProtocol");
71 
72 namespace protocols{
73 namespace docking{
74 
75 DockingEnsemblePrepackProtocol::DockingEnsemblePrepackProtocol(): DockingHighRes()
76 {
77  Mover::type( "DockingEnsemblePrepackProtocol" );
81 }
82 
83 
85 {
86  trans_magnitude_ = 1000.0;
88 
89  ensemble1_ = NULL;
90  ensemble2_ = NULL;
93 }
94 
96 }
97 
99 {
100  using namespace basic::options;
101  if( option[ OptionKeys::docking::dock_rtmin ].user() )
102  set_rt_min(option[ OptionKeys::docking::dock_rtmin ]());
103 
104  if( option[ OptionKeys::docking::sc_min ].user() )
105  set_sc_min(option[ OptionKeys::docking::sc_min ]());
106 
107  if( option[ OptionKeys::docking::partners ].user() )
108  set_partners(option[ OptionKeys::docking::partners ]());
109 
110  if ( option[ OptionKeys::docking::ensemble1 ].user() )
111  set_ensemble1(option[ OptionKeys::docking::ensemble1 ]());
112 
113  if ( option[ OptionKeys::docking::ensemble2 ].user() )
114  set_ensemble2(option[ OptionKeys::docking::ensemble2 ]());
115 }
116 
118 {
119  using namespace basic::options;
120 
121  option.add_relevant( OptionKeys::docking::dock_rtmin );
122  option.add_relevant( OptionKeys::docking::sc_min );
123  option.add_relevant( OptionKeys::docking::partners );
124  option.add_relevant( OptionKeys::docking::ensemble1 );
125  option.add_relevant( OptionKeys::docking::ensemble2 );
126 }
127 
129 {
131  prepack_full_repack_->score_function( scorefxn_pack() );
132  prepack_full_repack_->task_factory( task_factory() );
134 
135  if ( rt_min() ){
137  rtmin_mover_->score_function( scorefxn_pack() );
138  rtmin_mover_->task_factory( task_factory() );
139  pack_operations_->add_mover( rtmin_mover_ );
140  }
141  if ( sc_min() ){
143  scmin_mover_->set_scorefxn( scorefxn_pack() );
144  scmin_mover_->set_task_factory( task_factory() );
145  pack_operations_->add_mover( scmin_mover_ );
146  }
147 
148 }
149 
151  setup_foldtree( pose, partners(), movable_jumps() );
152  tf2()->set_prepack_only(true);
153  tf2()->create_and_attach_task_factory( this, pose );
155 
157 
158  if ( ensemble1_filename_ == "" || ensemble2_filename_ == "" ) utility_exit_with_message( "Must define ensemble file for both partners");
159  runtime_assert( movable_jumps().size() == 1 ); // ensemble mode is only allowed for traditional docking
160  core::Size const rb_jump = movable_jumps()[1];
161  Size start_res(1), end_res(1), cutpoint(pose.fold_tree().cutpoint_by_jump( rb_jump ));
162 
163  TR << "Ensemble 1: " << ensemble1_filename_ << std::endl;
164  start_res = 1;
165  end_res = cutpoint;
166 
167  ensemble1_ = new DockingEnsemble( start_res, end_res, rb_jump, ensemble1_filename_, "dock_ens_conf1", scorefxn_low, scorefxn() );
168 
169  TR << "Ensemble 2: " << ensemble2_filename_ << std::endl;
170  start_res = cutpoint + 1;
171  end_res = pose.total_residue();
172 
173  ensemble2_ = new DockingEnsemble( start_res, end_res, rb_jump, ensemble2_filename_, "dock_ens_conf2", scorefxn_low, scorefxn() );
174 }
175 
177 {
178  finalize_setup(pose);
180  core::pose::Pose starting_pose;
181 
182  starting_pose = pose;
183 
185  for ( Size i=1; i<=ensemble1_->size(); ++i ) {
187  to_centroid.apply( pose );
188  switch_mover->switch_conformer( pose, i );
189 
190  //Move each partners away from the others
191  for( DockJumps::const_iterator jump = movable_jumps().begin() ; jump != movable_jumps().end() ; ++jump ) {
192  rigid::RigidBodyTransMoverOP translate_away( new rigid::RigidBodyTransMover(pose, *jump) );
193  translate_away->step_size( trans_magnitude_ );
194  translate_away->apply(pose);
195  }
196  ensemble1_->calculate_lowres_ref_energy( pose );
197  //bringing the packed structures together
198  for( DockJumps::const_iterator jump= movable_jumps().begin() ; jump != movable_jumps().end(); ++jump ) {
199  rigid::RigidBodyTransMoverOP translate_back ( new rigid::RigidBodyTransMover(pose, *jump) );
200  translate_back->step_size( trans_magnitude_ );
201  translate_back->trans_axis().negate();
202  translate_back->apply(pose);
203  }
204 
205  ensemble1_->set_packer( pack_operations_ );
206 
207  ensemble1_->calculate_highres_ref_energy( i ); // also does the dump_pdb
208  }
209  ensemble1_->update_pdblist_file();
210 
211  // reset to starting pose
212  pose = starting_pose;
214  for ( Size i=1; i<=ensemble2_->size(); ++i ) {
216  to_centroid.apply( pose );
217 
218  switch_mover->switch_conformer( pose, i );
219 
220  //Move each partners away from the others
221  for( DockJumps::const_iterator jump = movable_jumps().begin() ; jump != movable_jumps().end() ; ++jump ) {
222  rigid::RigidBodyTransMoverOP translate_away( new rigid::RigidBodyTransMover(pose, *jump) );
223  translate_away->step_size( trans_magnitude_ );
224  translate_away->apply(pose);
225  }
226  ensemble2_->calculate_lowres_ref_energy( pose );
227  //bringing the packed structures together
228  for( DockJumps::const_iterator jump= movable_jumps().begin() ; jump != movable_jumps().end(); ++jump ) {
229  rigid::RigidBodyTransMoverOP translate_back ( new rigid::RigidBodyTransMover(pose, *jump) );
230  translate_back->step_size( trans_magnitude_ );
231  translate_back->trans_axis().negate();
232  translate_back->apply(pose);
233  }
234 
235  ensemble2_->set_packer( pack_operations_ );
236 
237  ensemble2_->calculate_highres_ref_energy( i ); // also does the dump_pdb
238  }
239  ensemble2_->update_pdblist_file();
240 }
241 
243  return "DockingEnsemblePrepackProtocol";
244 }
245 
246 }
247 }