21 #include <core/pose/Pose.hh>
22 #include <core/import_pose/import_pose.hh>
23 #include <core/pose/metrics/CalculatorFactory.hh>
24 #include <core/conformation/Conformation.hh>
25 #include <core/kinematics/MoveMap.hh>
26 #include <core/kinematics/FoldTree.hh>
27 #include <core/pack/task/operation/TaskOperations.hh>
28 #include <core/pack/task/PackerTask.hh>
29 #include <core/pack/task/TaskFactory.hh>
31 #include <core/scoring/ScoreFunction.hh>
32 #include <core/scoring/ScoreFunctionFactory.hh>
33 #include <core/scoring/methods/EnergyMethodOptions.hh>
34 #include <core/scoring/rms_util.tmpl.hh>
35 #include <core/scoring/rms_util.hh>
36 #include <core/scoring/hbonds/HBondOptions.hh>
37 #include <core/scoring/hbonds/hbonds.hh>
38 #include <core/scoring/hbonds/HBondSet.hh>
39 #include <core/scoring/dssp/Dssp.hh>
40 #include <core/scoring/constraints/Constraint.hh>
41 #include <core/scoring/constraints/ResidueTypeConstraint.hh>
42 #include <core/scoring/ScoreType.hh>
50 #include <protocols/moves/Mover.hh>
51 #include <core/pose/metrics/simple_calculators/InterfaceNeighborDefinitionCalculator.hh>
52 #include <protocols/toolbox/task_operations/RestrictToInterfaceOperation.hh>
53 #include <protocols/protein_interface_design/movers/BuildAlaPose.hh>
54 #include <protocols/protein_interface_design/movers/SaveAndRetrieveSidechains.hh>
55 #include <protocols/simple_moves/ddG.hh>
58 #include <protocols/symmetric_docking/SymDockProtocol.hh>
59 #include <protocols/simple_moves/symmetry/SetupForSymmetryMover.hh>
60 #include <protocols/simple_moves/symmetry/SymMinMover.hh>
61 #include <protocols/simple_moves/symmetry/SymPackRotamersMover.hh>
62 #include <core/scoring/symmetry/SymmetricScoreFunction.hh>
65 #include <protocols/jd2/JobDistributor.hh>
66 #include <protocols/jd2/Job.hh>
70 #include <basic/options/keys/run.OptionKeys.gen.hh>
72 #include <basic/options/keys/packing.OptionKeys.gen.hh>
73 #include <basic/options/keys/in.OptionKeys.gen.hh>
74 #include <basic/options/keys/symmetry.OptionKeys.gen.hh>
75 #include <basic/options/keys/enzdes.OptionKeys.gen.hh>
94 using namespace utility;
95 using namespace protocols;
96 using namespace protocols::moves;
98 using namespace core::pack::task::operation;
100 using namespace basic::options::OptionKeys;
101 using namespace protocols::jd2;
102 using namespace core::pose::metrics;
134 void register_calculators();
139 core::scoring::symmetry::SymmetricScoreFunctionOP
scorefxn);
151 return "HDdesignMover";
158 core::scoring::symmetry::SymmetricScoreFunctionOP
scorefxn_;
181 scorefxn_a = core::scoring::get_score_function();
182 scorefxn_ = core::scoring::symmetry::symmetrize_scorefunction( *scorefxn_a );
183 tf_design_ = TaskFactoryOP(
new TaskFactory() );
204 TR<<
"Cloaking option[ OptionKeys::symmetry::perturb_rigid_body_dofs ] before setup." <<std::endl;
206 TR <<
"Input symmetry::perturb_rigid_body_dofs rot=" << pert_mags[
rot] <<
" trans=" << pert_mags[
trans] << std::endl;
208 zero_vector.push_back(0.0);
209 zero_vector.push_back(0.0);
212 protocols::simple_moves::symmetry::SetupForSymmetryMoverOP setup_mover(
new protocols::simple_moves::symmetry::SetupForSymmetryMover );
213 setup_mover->apply(pose);
218 protocols::simple_moves::symmetry::SetupForSymmetryMoverOP setup_mover(
new protocols::simple_moves::symmetry::SetupForSymmetryMover );
219 setup_mover->apply(pose);
226 Size const chain1(1), chain2(2);
228 InterfaceNeighborDefinition_ =
"InterfaceNeighborCalc";
229 if ( CalculatorFactory::Instance().check_calculator_exists( InterfaceNeighborDefinition_ ) ) {
230 TR <<
"In InterfaceNeighborCalc, calculator " << InterfaceNeighborDefinition_
231 <<
" already exists." << std::endl;
233 CalculatorFactory::Instance().register_calculator(
234 InterfaceNeighborDefinition_,
235 PoseMetricCalculatorOP(
new core::pose::metrics::simple_calculators::InterfaceNeighborDefinitionCalculator(chain1, chain2) ));
245 tf_design_->push_back( TaskOperationCOP(
new InitializeFromCommandline() ) );
246 tf_design_->push_back( TaskOperationCOP(
new operation::IncludeCurrent ) );
249 TR <<
"Using resfile, ignoring all other task info" << std::endl;
250 tf_design_->push_back( TaskOperationCOP(
new operation::ReadResfile() ) );
253 TR <<
"Not allowing residues: " << disallow_res_ <<
" unless native" << std::endl;
254 DisallowIfNonnativeOP disallow_op(
new DisallowIfNonnative() );
255 disallow_op->disallow_aas(disallow_res_);
256 tf_design_->push_back(disallow_op);
260 tf_design_->push_back( TaskOperationCOP(
new protocols::toolbox::task_operations::RestrictToInterfaceOperation( InterfaceNeighborDefinition_ ) ) );
265 if (
option[OptionKeys::enzdes::favor_native_res].
user() ) {
269 TR <<
"favor_native_res: adding a bonus of " << bonus <<
" for native residues to pose." << std::endl;
275 for (
core::Size i = 1; i <= pose.total_residue(); ++i ) {
276 ConstraintOP resconstraint(
new ResidueTypeConstraint( pose, i, bonus ) );
277 favor_native_constraints.push_back( resconstraint );
280 pose.add_constraints( favor_native_constraints );
281 scorefxn_->set_weight( core::scoring::res_type_constraint, 1.0 );
295 pose.metric( InterfaceNeighborDefinition_,
"interface_residues", interface_mv);
298 std::set< Size > interface_set = ( interface_mv.
value() );
299 TR<<
"Interface residues are: \n";
305 TR<<
"Fold tree for pose: \n" << pose.fold_tree() << std::endl;
309 kinematics::MoveMapOP
mm(
new kinematics::MoveMap );
310 mm->set_bb(
true ); mm->set_chi(
true ); mm->set_jump(
true );
335 protocols::simple_moves::symmetry::SymMinMoverOP sym_minmover(
new protocols::simple_moves::symmetry::SymMinMover(mm, scorefxn_,
option[
OptionKeys::run::min_type ].
value(), 0.001,
true ) );
337 task_design_ = tf_design_->create_task_and_apply_taskoperations( pose );
338 protocols::simple_moves::symmetry::SymPackRotamersMoverOP sym_pack_design(
new protocols::simple_moves::symmetry::SymPackRotamersMover(scorefxn_, task_design_) );
340 TR<<
"Monomer total residues: "<< monomer_nres_ <<
" Repacked/Designed residues: "
341 << task_design_->num_to_be_packed() / 2 << std::endl;
344 TR<<
"DESIGN Packer Task after setup: " << *(task_design_) <<std::endl;
347 TR<<
"Number of repack/minimize runs to do: " << n_pack_min_runs_ << std::endl;
349 for (
int ii = 1;
ii<= n_pack_min_runs_; ++
ii ) {
350 sym_pack_design->apply(pose);
351 sym_minmover->apply(pose);
352 TR <<
"Run " <<
ii <<
" of " << n_pack_min_runs_ <<
" SCORE:"
353 << (* scorefxn_ )(
pose) << std::endl;
359 build_ala_mover_ = protocols::protein_interface_design::movers::BuildAlaPoseOP(
new protocols::protein_interface_design::movers::BuildAlaPose(
true,
true, 8.0) ) ;
360 get_sidechains_mover_ = protocols::protein_interface_design::movers::SaveAndRetrieveSidechainsOP(
new protocols::protein_interface_design::movers::SaveAndRetrieveSidechains(pose) );
361 build_ala_mover_->apply( pose );
367 core::scoring::symmetry::SymmetricScoreFunctionOP
scorefxn){
369 using namespace core::scoring::hbonds;
373 core::scoring::symmetry::SymmetricScoreFunctionOP scorefxn_copy (scorefxn);
375 core::scoring::dssp::Dssp dssp( pose_copy );
376 dssp.insert_ss_into_pose( pose_copy );
379 scoring::methods::EnergyMethodOptions energymethodoptions( scorefxn_copy->energy_method_options() );
380 energymethodoptions.hbond_options().decompose_bb_hb_into_pair_energies(
true);
381 scorefxn_copy->set_energy_method_options( energymethodoptions );
384 (*scorefxn_copy)(pose_copy);
387 core::scoring::hbonds::HBondSet
hbond_set;
392 pose_copy.update_residue_neighbors();
393 fill_hbond_set( pose_copy,
399 hbond_set.setup_for_residue_pair_energies(pose_copy);
405 if ( hbond.don_hatm_is_backbone() && hbond.acc_atm_is_backbone() ) {
406 if ( pose_copy.chain( hbond.don_res() ) != pose_copy.chain( hbond.acc_res() ) ) {
407 if ( pose_copy.secstruct( hbond.don_res() ) ==
'E' && pose_copy.secstruct( hbond.acc_res() ) ==
'E' ) {
408 bb_score += ( hbond.weight() * hbond.energy() );
414 TR <<
"Design has: "<< n_hbonds <<
" bb-bb hbonds with total evergy: " << bb_score << std::endl;
417 energymethodoptions.hbond_options().decompose_bb_hb_into_pair_energies(
false);
418 scorefxn->set_energy_method_options( energymethodoptions );
433 TR <<
"Homodimer Design start."<<std::endl;
435 protocols::jd2::JobOP
const job_me( JobDistributor::get_instance()->current_job() );
438 monomer_nres_ = pose.total_residue();
442 cloak_and_setup( pose );
445 register_calculators();
446 task_constraint_setup(pose);
452 if ( ala_interface_ ) {
453 TR <<
"Building Alanine at interface" <<std::endl;
467 if ( !skip_hd_docking_ ) {
469 symmetric_docking::SymDockProtocolOP dock_mover(
new symmetric_docking::SymDockProtocol );
470 dock_mover->apply(pose);
471 scoring::ScoreFunctionOP dock_score_apple = scoring::ScoreFunctionFactory::create_score_function(
"docking",
"docking_min" );
472 core::scoring::symmetry::SymmetricScoreFunctionOP sym_dock_score = core::scoring::symmetry::symmetrize_scorefunction( *dock_score_apple );
473 TR <<
"Docking SCORE final: " << (*sym_dock_score)(
pose) << std::endl;
474 TR <<
"Default SCORE after docking: " << (*scorefxn_)(
pose) << std::endl;
480 TaskFactoryOP tf_nataa(
new TaskFactory() );
481 tf_nataa->push_back( TaskOperationCOP(
new InitializeFromCommandline() ) );
482 tf_nataa->push_back( TaskOperationCOP(
new operation::IncludeCurrent ) );
484 RestrictResidueToRepackingOP repack_op(
new RestrictResidueToRepacking() );
485 for (
Size ii = 1;
ii<= pose.n_residue(); ++
ii ) {
486 repack_op->include_residue(
ii );
489 tf_nataa->push_back( repack_op );
490 PackerTaskOP task_nataa = tf_nataa->create_task_and_apply_taskoperations( pose );
491 protocols::simple_moves::symmetry::SymPackRotamersMoverOP sym_pack_nataa(
new protocols::simple_moves::symmetry::SymPackRotamersMover(scorefxn_, task_nataa) );
492 sym_pack_nataa->apply( pose );
493 TR <<
"Default SCORE after all NATAA repack: " << (*scorefxn_)(
pose) << std::endl;
499 if ( ala_interface_ ) {
502 TR<<
"Replacing native sidechains." << std::endl;
503 get_sidechains_mover_->apply(pose);
508 sym_repack_minimize(pose);
513 kinematics::MoveMapOP
mm(
new kinematics::MoveMap );
514 mm->set_bb(
true ); mm->set_chi(
true ); mm->set_jump(
true );
515 protocols::simple_moves::symmetry::SymMinMoverOP sym_minmover_final(
new protocols::simple_moves::symmetry::SymMinMover( mm, scorefxn_,
option[
OptionKeys::run::min_type ].
value(), 0.01,
true ) );
516 sym_minmover_final->apply(pose);
517 TR <<
"Final minimization SCORE:" << (* scorefxn_ )(
pose) << std::endl;
525 rms = scoring::CA_rmsd( native_pose, pose ) ;
526 job_me->add_string_real_pair(
"rms_sym", rms );
530 protocols::simple_moves::ddGOP ddG_mover(
new protocols::simple_moves::ddG( scorefxn_, 1 ) );
531 ddG_mover->calculate(pose);
534 if ( ddgvalue >= 0 ) {
535 set_last_move_status(protocols::moves::FAIL_RETRY);
537 job_me->add_string_real_pair(
"dGbind", ddgvalue);
542 if ( find_bb_binding_E_ ) {
543 Real bb_score (calc_bb_E( pose,scorefxn_));
544 job_me->add_string_real_pair(
"beta_int_E", bb_score );
552 (* scorefxn_ )(
pose);
560 main(
int argc,
char * argv [] )
573 protocols::jd2::JobDistributor::get_instance()->go( protocols::moves::MoverOP(
new HDdesignMover ) );
575 std::cout <<
"Done! -------------------------------"<< std::endl;
577 std::cout <<
"caught exception " << e.
msg() << std::endl;
std::string disallow_res_
utility::pointer::shared_ptr< Constraint > ConstraintOP
basic::options::BooleanOptionKey const skip_hd_docking("skip_hd_docking")
virtual std::string const msg() const
Automatic hidden index key for integer options.
utility::keys::KeyLookup< KeyType >::const_iterator const_iterator
Key collection iterators.
vector0: std::vector with assert-checked bounds
virtual MoverOP clone() const
void init(int argc, char *argv[])
Command line init() version.
basic::options::StringOptionKey const disallow_res("disallow_res")
BooleanOptionKey const user("options:user")
utility::keys::lookup::end< KeyType > const end
Automatic hidden index key for string options.
static THREAD_LOCAL basic::Tracer TR("apps.public.beta_strand_homodimer_design.homodimer_design")
void cloak_and_setup(core::pose::Pose &pose)
std::string InterfaceNeighborDefinition_
InterfaceNeighborDefinition calculator name string.
common derived classes for thrown exceptions
Tracer & Error(TracerPriority priority=t_error)
Predefined Error tracer.
virtual std::string get_name() const
protocols::protein_interface_design::movers::SaveAndRetrieveSidechainsOP get_sidechains_mover_
basic::options::BooleanOptionKey const make_ala_interface("make_ala_interface")
void sym_repack_minimize(core::pose::Pose &pose)
Automatic hidden index key for boolean options.
rule< Scanner, options_closure::context_t > options
basic::options::BooleanOptionKey const find_bb_hbond_E("find_bb_hbond_E")
Tracer & Warning(TracerPriority priority=t_warning)
Predefined Warning tracer.
utility::options::OptionCollection option
OptionCollection global.
core::scoring::ScoreFunctionOP scorefxn_a
basic::options::IntegerOptionKey const pack_min_runs("pack_min_runs")
protocols::protein_interface_design::movers::BuildAlaPoseOP build_ala_mover_
core::Real calc_bb_E(core::pose::Pose &pose, core::scoring::symmetry::SymmetricScoreFunctionOP scorefxn)
void register_calculators()
ocstream cout(std::cout)
Wrapper around std::cout.
vector1: std::vector with 1-based indexing
Class for handling user debug/warnings/errors. Use instance of this class instead of 'std::cout' for ...
void ala_interface(core::pose::Pose &pose)
pack::task::PackerTaskOP task_design_
virtual void apply(core::pose::Pose &pose)
Program options global and initialization function.
int main(int argc, char *argv[])
virtual MoverOP fresh_instance() const
core::scoring::symmetry::SymmetricScoreFunctionOP scorefxn_
rule< Scanner, option_closure::context_t > option
void task_constraint_setup(core::pose::Pose &pose)