49 #include <basic/options/option.hh>
50 #include <basic/options/keys/packing.OptionKeys.gen.hh>
55 #include <basic/Tracer.hh>
60 #include <utility/tag/Tag.hh>
64 #include <boost/foreach.hpp>
65 #define foreach BOOST_FOREACH
74 #include <utility/vector0.hh>
75 #include <utility/excn/Exceptions.hh>
76 #include <utility/vector1.hh>
79 namespace ligand_docking {
81 static basic::Tracer
high_res_docker_tracer(
"protocols.ligand_docking.ligand_options.Protocol", basic::t_debug);
97 return "HighResDocker";
102 Mover(
"HighResDocker"),
104 repack_every_Nth_(0),
106 movemap_builder_(NULL),
118 protocols::moves::Mover( that ),
119 num_cycles_(that.num_cycles_),
120 repack_every_Nth_(that.repack_every_Nth_),
122 score_fxn_(that.score_fxn_),
123 movemap_builder_(that.movemap_builder_)
137 return "HighResDocker";
150 if ( tag->getName() !=
"HighResDocker" ){
151 throw utility::excn::EXCN_RosettaScriptsOption(
"This should be impossible");
155 if ( ! tag->hasOption(
"cycles") )
throw utility::excn::EXCN_RosettaScriptsOption(
"'HighResDocker' mover requires cycles tag");
156 if ( ! tag->hasOption(
"repack_every_Nth") )
throw utility::excn::EXCN_RosettaScriptsOption(
"'HighResDocker' mover requires repack_every_Nth tag");
161 if ( ! tag->hasOption(
"scorefxn") )
throw utility::excn::EXCN_RosettaScriptsOption(
"'HighResDocker' requires 'scorefxn' tag");
166 if ( ! tag->hasOption(
"movemap_builder") )
throw utility::excn::EXCN_RosettaScriptsOption(
"'HighResDocker' requires 'movemap_builder' tag");
171 if ( tag->hasOption(
"resfile") ){
182 LigandAreas::const_iterator ligand_area_itr= ligand_areas.begin();
183 LigandAreas::const_iterator
const ligand_area_end= ligand_areas.end();
185 for(; ligand_area_itr != ligand_area_end; ++ligand_area_itr){
186 char const & chain= ligand_area_itr->first;
187 LigandAreaOP const ligand_area = ligand_area_itr->second;
188 core::Real const & degrees = ligand_area->minimize_ligand_;
191 minimize_ligand->apply(pose);
192 minimize_ligands.push_back(minimize_ligand);
195 return minimize_ligands;
204 LigandAreas::const_iterator ligand_area_itr= ligand_areas.begin();
205 LigandAreas::const_iterator
const ligand_area_end= ligand_areas.end();
207 for(; ligand_area_itr != ligand_area_end; ++ligand_area_itr){
208 char const & chain= ligand_area_itr->first;
209 LigandAreaOP const ligand_area = ligand_area_itr->second;
210 core::Real const & tether_size = ligand_area->tether_ligand_;
213 tether_ligand->apply(pose);
214 ligand_tethers.push_back(tether_ligand);
217 return ligand_tethers;
226 ligand_tether->release(pose);
253 high_res_docker_tracer.Debug <<
"making PackRotamersMover" << std::endl;
257 high_res_docker_tracer.Debug <<
"making RotamerTrialsMover" << std::endl;
265 min_mover->min_options()->nblist_auto_update(
true);
267 core::Real const score1 = (*score_fxn_)( pose );
269 pack_mover->apply(pose);
271 core::Real const score2 = (*score_fxn_)( pose );
272 if(score2 - score1 < 15.0) {
273 min_mover->apply(pose);
276 monteCarlo->boltzmann( pose );
282 monteCarlo->show_scores();
283 monteCarlo->recover_low(pose);
291 static bool pose_already_packed=
false;
293 pack_task->initialize_from_command_line();
296 unboundrot_->initialize_from_command_line();
297 pack_task->append_rotamerset_operation( unboundrot_ );
303 high_res_docker_tracer.Debug<<
"enabling packing for ligand residue "<< i << std::endl;
308 bool const use_resfile= basic::options::option[ basic::options::OptionKeys::packing::resfile ].user() ;
310 high_res_docker_tracer<<
"using OPTIONS resfile"<< std::endl;
314 high_res_docker_tracer<<
"restricting to repack"<< std::endl;
318 pack_task->nonconst_residue_task( i ).restrict_to_repacking();
324 high_res_docker_tracer<<
"using XML resfile"<< std::endl;
331 pack_task->nonconst_residue_task( i ).prevent_repacking();
337 if( pose_already_packed ){
338 pack_task->or_include_current(
true);
340 pose_already_packed=
true;
371 assert(allowed_types.size() > 0);
373 if( allowed_types.size() == 1){
374 pack_task->nonconst_residue_task( ligand_residue_id ).restrict_to_repacking();
378 for(
core::Size j = 1; j <= allowed_types.size(); ++j ) {
379 if( allowed_types[j]->
name() == this_residue.
name() )
continue;
381 pack_task->nonconst_residue_task( ligand_residue_id ).allow_noncanonical_aa( allowed_types[j]->
name() );
392 foreach(LigandAreas::value_type ligand_area_pair, ligand_areas){
393 char const & chain= ligand_area_pair.first;
396 LigandAreaOP const ligand_area = ligand_area_pair.second;
397 core::Real const & angstroms= ligand_area->high_res_angstroms_;
398 core::Real const & degrees= ligand_area->high_res_degrees_;
400 rigid_body_movers.push_back(rigid_body_mover);
404 return rigid_body_movers;
413 rigid_body_mover->apply(pose);