Rosetta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
fixbb.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file /src/apps/public/design/fixbb.cc
11 /// @brief Fixed backbone design. Can do side chain minimization after PackRotamers by using the flag -minimize_sidechains. This is SLOW.
12 
13 //core library
14 #include <core/scoring/ScoreFunction.hh>
15 #include <core/scoring/ScoreFunctionFactory.hh>
16 
17 // TEMP
18 #include <core/scoring/hbonds/HBondOptions.hh>
19 #include <core/scoring/methods/EnergyMethodOptions.hh>
20 
21 #include <core/pack/task/operation/TaskOperations.hh>
22 #include <core/pack/task/TaskFactory.hh>
23 
24 #include <basic/options/option.hh>
25 
26 #include <core/kinematics/MoveMap.hh>
27 
28 //protocols library (Movers)
29 #include <protocols/simple_moves/MinPackMover.hh>
30 #include <protocols/simple_moves/PackRotamersMover.hh>
31 #include <protocols/simple_moves/symmetry/SymPackRotamersMover.hh>
32 #include <protocols/simple_moves/MinMover.hh>
33 #include <protocols/simple_moves/symmetry/SymMinMover.hh>
34 #include <protocols/simple_moves/TaskAwareMinMover.hh>
35 #include <protocols/moves/MoverContainer.hh>
36 #include <protocols/simple_moves/symmetry/SetupForSymmetryMover.hh>
37 
38 //utilities
39 #include <protocols/jd2/JobDistributor.hh>
40 #include <devel/init.hh>
41 
42 // option key includes
43 #include <basic/options/keys/run.OptionKeys.gen.hh>
44 #include <basic/options/keys/packing.OptionKeys.gen.hh>
45 #include <basic/options/keys/symmetry.OptionKeys.gen.hh>
46 
47 #include <utility/vector0.hh>
48 #include <utility/vector1.hh>
50 
51 
52 //local options
53 namespace basic { namespace options { namespace OptionKeys {
54 basic::options::BooleanOptionKey const minimize_sidechains("minimize_sidechains");
56 basic::options::BooleanOptionKey const off_rotamer_pack("off_rotamer_pack");
57 }}}//basic::options::OptionKeys
58 
59 ///////////////////////////////////////////////////////////////////////////////
60 int
61 main( int argc, char * argv [] )
62 {
63  try {
64 
65  using namespace basic::options;
66  using namespace basic::options::OptionKeys;
67 
68  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
69  // setup
70  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
71 
72  option.add( minimize_sidechains, "Do minimization of side chains after rotamer packing").def(false);
73  option.add( min_pack, "Pack and minimize sidechains simultaneously").def(false);
74  option.add( off_rotamer_pack, "Pack using a continuous sidechains rotamer library").def(false);
75 
76  devel::init(argc, argv);
77 
78  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
79  // end of setup
80  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
81 
82  //create a task factory: this will create a new PackerTask for each input pose
83  using core::pack::task::operation::TaskOperationCOP;
84  core::pack::task::TaskFactoryOP main_task_factory( new core::pack::task::TaskFactory );
85  main_task_factory->push_back( TaskOperationCOP( new core::pack::task::operation::InitializeFromCommandline ) );
86 
87  /// As of 2010/07/16, the ReadResfile operation is a no-op unless a resfile has been
88  /// supplied on the command line, through the ResourceManager, or programmatically.
89  /// Therefore, it is safe to add it without first checking to see if something has been
90  /// provided on the command line. If that check were here, then a resfile provided
91  /// through the ResourceManager would not get read.
92  main_task_factory->push_back( TaskOperationCOP( new core::pack::task::operation::ReadResfile ) );
93 
94  //create a ScoreFunction from commandline options
95  core::scoring::ScoreFunctionOP score_fxn = core::scoring::get_score_function();
96 
97  /// TEMP!
98  if ( false ) {
99  using namespace core;
100  scoring::methods::EnergyMethodOptionsOP emopts( new scoring::methods::EnergyMethodOptions( score_fxn->energy_method_options() ) );
101  emopts->hbond_options().use_hb_env_dep( false );
102  emopts->hbond_options().decompose_bb_hb_into_pair_energies( true );
103  score_fxn->set_energy_method_options( *emopts );
104  score_fxn->set_weight( scoring::fa_pair, 0.0 );
105  }
106 
107 
108  //create the PackRotamersMover which will do the packing
109  protocols::simple_moves::PackRotamersMoverOP pack_mover( new protocols::simple_moves::PackRotamersMover );
110 
111  // Use the symmetric packer if necessary
112  if ( option[ symmetry::symmetry_definition ].user() ) {
113  pack_mover = protocols::simple_moves::PackRotamersMoverOP( new protocols::simple_moves::symmetry::SymPackRotamersMover );
114  }
115 
116  pack_mover->task_factory( main_task_factory );
117  pack_mover->score_function( score_fxn );
118 
119  //This sequence mover will contain packing for sure, and may contain minimization
120  protocols::moves::SequenceMoverOP seq_mover( new protocols::moves::SequenceMover );
121 
122  // make symmetric pose if necessary
123  if ( option[ symmetry::symmetry_definition ].user() ) {
124  using protocols::moves::MoverOP;
125  seq_mover->add_mover( MoverOP( new protocols::simple_moves::symmetry::SetupForSymmetryMover ) );
126  }
127 
128  if ( option[ min_pack ] || option[ off_rotamer_pack ] ) {
129  protocols::simple_moves::MinPackMoverOP minpack_mover( new protocols::simple_moves::MinPackMover );
130  minpack_mover->task_factory( main_task_factory );
131  minpack_mover->score_function( score_fxn );
132  if ( option[ off_rotamer_pack ] ) minpack_mover->off_rotamer_pack( true );
133  seq_mover->add_mover( minpack_mover );
134  } else {
135  seq_mover->add_mover( pack_mover );
136  }
137 
138  //If sidechain minimization is requested, include that too
139  if ( option[ minimize_sidechains ] ) {
140  core::kinematics::MoveMapOP movemap( new core::kinematics::MoveMap );
141  protocols::simple_moves::MinMoverOP min_mover;
142  if ( option [ symmetry::symmetry_definition ].user() ) {
143  min_mover = protocols::simple_moves::MinMoverOP( new protocols::simple_moves::symmetry::SymMinMover(
144  movemap,
145  score_fxn,
147  0.01,
148  true
149  ) );
150  } else {
151  min_mover = protocols::simple_moves::MinMoverOP( new protocols::simple_moves::MinMover(
152  movemap,
153  score_fxn,
155  0.01,
156  true
157  ));
158  }
159  protocols::simple_moves::TaskAwareMinMoverOP TAmin_mover( new protocols::simple_moves::TaskAwareMinMover(min_mover, main_task_factory) );
160  seq_mover->add_mover( TAmin_mover );
161  } // end optional side chain minimization
162 
163  protocols::jd2::JobDistributor::get_instance()->go(seq_mover);
164  } catch ( utility::excn::EXCN_Base const & e ) {
165  std::cout << "caught exception " << e.msg() << std::endl;
166  return -1;
167  }
168 }
virtual std::string const msg() const
Definition: EXCN_Base.hh:70
vector0: std::vector with assert-checked bounds
int main(int argc, char *argv[])
Definition: fixbb.cc:61
basic::options::BooleanOptionKey const min_pack("min_pack")
void init(int argc, char *argv[])
Command line init() version.
Definition: init.cc:23
BooleanOptionKey const user("options:user")
Definition: OptionKeys.hh:40
basic::options::BooleanOptionKey const off_rotamer_pack("off_rotamer_pack")
virtual ScalarOption_T_ & def(Value const &value_a)
Default value assignment.
common derived classes for thrown exceptions
BooleanOption & add(BooleanOptionKey const &key, std::string const &description)
Add a BooleanOption.
member1 value
Definition: Tag.cc:296
Automatic hidden index key for boolean options.
rule< Scanner, options_closure::context_t > options
Definition: Tag.cc:377
string min_type
Definition: loops_kic.py:76
utility::options::OptionCollection option
OptionCollection global.
Definition: option.cc:45
basic::options::BooleanOptionKey const minimize_sidechains("minimize_sidechains")
ocstream cout(std::cout)
Wrapper around std::cout.
Definition: ocstream.hh:287
vector1: std::vector with 1-based indexing
tuple movemap
Definition: loops.py:29
Program options global and initialization function.