43 #include <basic/options/keys/symmetry.OptionKeys.gen.hh>
48 #include <basic/options/option.hh>
49 #include <basic/options/keys/relax.OptionKeys.gen.hh>
50 #include <basic/options/keys/in.OptionKeys.gen.hh>
59 #include <basic/options/keys/out.OptionKeys.gen.hh>
60 #include <basic/options/keys/run.OptionKeys.gen.hh>
63 #include <ObjexxFCL/string.functions.hh>
69 #include <basic/Tracer.hh>
76 #include <utility/vector0.hh>
77 #include <utility/vector1.hh>
83 static basic::Tracer
TR(
"protocols.relax.ClassicRelax");
96 min_type_(
"dfpmin_armijo_nonmonotone"),
104 min_type_(
"dfpmin_armijo_nonmonotone"),
112 min_type_(
"dfpmin_armijo_nonmonotone"),
126 using namespace core::id;
138 for (
Size jj = 1; jj <= ii_mainchain_atoms.size(); ++jj ) {
151 for (
Size jj = 1; jj <= res_i.
natoms(); ++jj ) {
182 for (
Size jj = 1; jj <= ii_mainchain_atoms.size(); ++jj ) {
195 for (
Size jj = 1; jj <= res_i.
natoms(); ++jj ) {
235 using namespace basic::options;
236 using namespace basic::options::OptionKeys;
237 dry_run_ = basic::options::option[ OptionKeys::run::dry_run ]();
241 using namespace basic::options;
242 using namespace basic::options::OptionKeys;
249 cartesian_ = option[ OptionKeys::relax::cartesian ]();
250 if ( option[ OptionKeys::relax::min_type ].user() )
251 min_type_ = option[ OptionKeys::relax::min_type ]();
257 using namespace basic::options;
258 using namespace basic::options::OptionKeys;
264 utility_exit_with_message(
"Option -relax:coord_constrain_sidechains also requires either -relax:constrain_relax_to_start_coords or -relax:constrain_relax_to_native_coords");
273 using namespace basic::options;
274 using namespace basic::options::OptionKeys;
276 movemap_->set_jump( option[ OptionKeys::relax::jump_move ]() );
277 movemap_->set_bb( option[ OptionKeys::relax::bb_move ]() );
278 movemap_->set_chi( option[ OptionKeys::relax::chi_move ]() );
279 if (option[ OptionKeys::in::file::movemap ].user()) {
280 movemap_->init_from_file(option[ OptionKeys::in::file::movemap ]() );
308 using namespace basic::options;
309 using namespace basic::options::OptionKeys;
311 static bool runonce(
false );
312 if ( runonce )
return;
316 option.add_relevant( OptionKeys::relax::minimize_bond_lengths );
317 option.add_relevant( OptionKeys::relax::minimize_bond_angles );
318 option.add_relevant( OptionKeys::relax::minimize_bondlength_subset );
319 option.add_relevant( OptionKeys::relax::minimize_bondlength_subset );
349 using namespace moves;
350 using namespace scoring;
351 using namespace core::pose::datacache;
354 if ( ( basic::options::option[ basic::options::OptionKeys::in::fix_disulf ].user() ) ||
355 ( basic::options::option[ basic::options::OptionKeys::in::detect_disulf ].user() ) ) {
362 task = pack::task::TaskFactory::create_packer_task( pose );
367 allow_repack[i] =
movemap_->get_chi(i);
370 if (basic::options::option[ basic::options::OptionKeys::relax::chi_move].user() ){
371 bool const repack = basic::options::option[ basic::options::OptionKeys::relax::chi_move]();
375 task->initialize_from_command_line().restrict_to_repacking().restrict_to_residues(allow_repack);
376 task->or_include_current(
true );
377 if ( basic::options::option[ basic::options::OptionKeys::symmetry::symmetry_definition ].user() ) {
383 ( *disulf_score_only )( pose );
385 full_repack->apply(pose);
391 using namespace conformation;
392 using namespace core;
393 using namespace basic::options;
394 using namespace basic::options::OptionKeys;
395 using namespace core::pose::datacache;
396 using namespace core::scoring;
397 using namespace core::scoring::constraints;
398 using namespace core::id;
399 using namespace protocols::moves;
400 using namespace core::scoring;
407 if (
constrain_coords_ && !option[ OptionKeys::relax::ramp_constraints ].user() ) {
415 utility_exit_with_message(
"Native pose needed for OptionKeys::relax::constrain_relax_to_native_coords");
418 if ( pose.
total_residue() == constraint_target_pose.total_residue() &&
425 "of input structure and native don't match - aligning on PDB identity or sequence." << std::endl;
443 coordconstraint_segments_ =
protocols::loops::Loops( option[ OptionKeys::relax::constrain_relax_segments ]() );
451 Real const coord_sdev( option[ OptionKeys::relax::coord_cst_stdev ] );
452 bool bounded( option[ OptionKeys::relax::coord_cst_width ].user() );
453 Real const cst_width( option[ OptionKeys::relax::coord_cst_width ]() );
462 for (
Size i = 1; i<= nres; ++i ) {
465 if ( coordconstraint_segments_.is_loop_residue( i ) ) {
467 if( j == 0 )
continue;
468 assert( j <= constraint_target_pose.total_residue() );
471 Residue const & targ_j_rsd( constraint_target_pose.residue(j) );
472 core::Size last_atom( pose_i_rsd.last_backbone_atom() );
473 core::Size last_targ_atom( targ_j_rsd.last_backbone_atom() );
474 bool use_atom_names(
false);
476 last_atom = pose_i_rsd.nheavyatoms();
477 last_targ_atom = targ_j_rsd.nheavyatoms();
478 use_atom_names = pose_i_rsd.name() != targ_j_rsd.name();
480 if ( !use_atom_names && last_atom != last_targ_atom ) {
481 TR.Warning <<
"Warning: Coordinate constraint reference residue has different number of " << (
coord_constrain_sidechains_?
"heavy":
"backbone") <<
" atoms: ref. "
482 << targ_j_rsd.name() <<
" (res " << j <<
") versus " << pose_i_rsd.name() <<
" (res " << i <<
"). - skipping." << std::endl;
485 for (
Size ii = 1; ii<= last_atom; ++ii ) {
487 if ( use_atom_names ) {
489 if ( ! targ_j_rsd.has(atomname) ) {
490 TR.Debug <<
"Skip adding coordinate constraints for atom " << atomname <<
" of residue " << i <<
" (" << pose_i_rsd.name() <<
491 ") - not found in residue " << j <<
" (" << targ_j_rsd.name() <<
") of reference structure." << std::endl;
494 jj = targ_j_rsd.atom_index( atomname );
498 function =
new BoundFunc( 0, cst_width, coord_sdev,
"xyz" );
503 AtomID(ii,i),
AtomID(1,nres), targ_j_rsd.xyz( jj ), function ) );
516 if ( option[ OptionKeys::relax::sc_cst_maxdist ].user() && option[ OptionKeys::relax::sc_cst_maxdist ]() > 0 ) {
518 Real const upper_dist_cutoff( option[ OptionKeys::relax::sc_cst_maxdist ]() );
530 using namespace core::io::silent;
531 using namespace basic::options;
532 if ( option[ basic::options::OptionKeys::out::file::silent ].user() ) {
535 if ( output_file_name !=
"" ) {
536 silent_file = output_file_name + silent_file;
537 }
else silent_file =
"bla"+silent_file;