Rosetta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
coupled_moves.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 #include <devel/init.hh>
11 
12 #include <basic/Tracer.hh>
13 #include <basic/basic.hh>
14 
15 #include <protocols/moves/Mover.hh>
16 #include <protocols/moves/MonteCarlo.hh>
17 #include <protocols/simple_moves/PackRotamersMover.hh>
18 #include <protocols/simple_moves/CoupledMover.hh>
19 #include <protocols/simple_moves/MinPackMover.hh>
20 #include <protocols/viewer/viewers.hh>
21 #include <protocols/canonical_sampling/PDBTrajectoryRecorder.hh>
22 #include <protocols/jd2/util.hh>
23 #include <protocols/jd2/JobDistributor.hh>
24 #include <protocols/jd2/Job.hh>
25 #include <protocols/jd2/InnerJob.hh>
26 #include <protocols/toolbox/IGEdgeReweighters.hh>
27 #include <core/scoring/ScoreFunction.hh>
28 #include <core/scoring/ScoreFunctionFactory.hh>
29 #include <core/scoring/Energies.hh>
30 #include <core/scoring/methods/EnergyMethodOptions.hh>
31 #include <core/scoring/hbonds/HBondOptions.hh>
32 #include <core/scoring/EnergyGraph.hh>
33 #include <core/scoring/constraints/util.hh>
34 #include <core/import_pose/import_pose.hh>
35 #include <core/pack/task/TaskFactory.hh>
36 #include <core/pack/task/PackerTask.hh>
37 #include <core/pack/task/operation/TaskOperations.hh>
38 #include <core/pack/task/residue_selector/ClashBasedRepackShellSelector.hh>
39 #include <core/pose/Pose.hh>
40 #include <core/pose/PDBInfo.hh>
41 #include <core/chemical/ResidueType.hh>
42 #include <core/chemical/AtomType.hh>
43 #include <core/conformation/Conformation.hh>
44 #include <core/kinematics/FoldTree.hh>
45 #include <numeric/random/random.hh>
47 #include <numeric/conversions.hh>
48 #include <numeric/xyzVector.hh>
49 #include <numeric/NumericTraits.hh>
50 #include <numeric/xyz.functions.hh>
51 
52 
53 // option key includes
55 #include <basic/options/keys/constraints.OptionKeys.gen.hh>
56 #include <basic/options/keys/in.OptionKeys.gen.hh>
57 #include <basic/options/keys/out.OptionKeys.gen.hh>
58 #include <basic/options/keys/backrub.OptionKeys.gen.hh>
59 #include <basic/options/keys/packing.OptionKeys.gen.hh>
60 
61 static THREAD_LOCAL basic::Tracer TR( "apps.coupled_moves" );
62 
63 OPT_1GRP_KEY(Integer, coupled_moves, ntrials)
64 OPT_1GRP_KEY(Real, coupled_moves, mc_kt)
65 OPT_1GRP_KEY(Real, coupled_moves, boltzmann_kt)
66 OPT_1GRP_KEY(Real, coupled_moves, mm_bend_weight)
67 OPT_1GRP_KEY(Boolean, coupled_moves, trajectory)
68 OPT_1GRP_KEY(Boolean, coupled_moves, trajectory_gz)
69 OPT_1GRP_KEY(Integer, coupled_moves, trajectory_stride)
70 OPT_1GRP_KEY(String, coupled_moves, trajectory_file)
71 OPT_1GRP_KEY(String, coupled_moves, output_fasta)
72 OPT_1GRP_KEY(String, coupled_moves, output_stats)
73 OPT_1GRP_KEY(Boolean, coupled_moves, ligand_mode)
74 OPT_1GRP_KEY(Boolean, coupled_moves, initial_repack)
75 OPT_1GRP_KEY(Boolean, coupled_moves, min_pack)
76 OPT_1GRP_KEY(Boolean, coupled_moves, save_sequences)
77 OPT_1GRP_KEY(Boolean, coupled_moves, save_structures)
78 OPT_1GRP_KEY(Real, coupled_moves, ligand_prob)
79 OPT_1GRP_KEY(Boolean, coupled_moves, fix_backbone)
80 OPT_1GRP_KEY(Boolean, coupled_moves, uniform_backrub)
81 OPT_1GRP_KEY(Boolean, coupled_moves, bias_sampling)
82 OPT_1GRP_KEY(Boolean, coupled_moves, bump_check)
83 OPT_1GRP_KEY(Real, coupled_moves, ligand_weight)
84 OPT_1GRP_KEY(String, coupled_moves, output_prefix)
85 
86 void *
87 my_main( void* );
88 
89 int
90 main( int argc, char * argv [] )
91 {
92  try {
93 
95  OPT(in::ignore_unrecognized_res);
97  OPT(packing::resfile);
99  OPT(constraints::cst_fa_weight);
100  OPT(constraints::cst_fa_file);
101  OPT(out::pdb_gz);
102  NEW_OPT(coupled_moves::ntrials, "number of Monte Carlo trials to run", 1000);
103  NEW_OPT(coupled_moves::mc_kt, "value of kT for Monte Carlo", 0.6);
104  NEW_OPT(coupled_moves::boltzmann_kt, "value of kT for Boltzmann weighted moves", 0.6);
105  NEW_OPT(coupled_moves::mm_bend_weight, "weight of mm_bend bond angle energy term", 1.0);
106  NEW_OPT(coupled_moves::trajectory, "record a trajectory", false);
107  NEW_OPT(coupled_moves::trajectory_gz, "gzip the trajectory", false);
108  NEW_OPT(coupled_moves::trajectory_stride, "write out a trajectory frame every N steps", 100);
109  NEW_OPT(coupled_moves::trajectory_file, "name of trajectory file", "traj.pdb");
110  NEW_OPT(coupled_moves::output_fasta, "name of FASTA output file", "sequences.fasta");
111  NEW_OPT(coupled_moves::output_stats, "name of stats output file", "sequences.stats");
112  NEW_OPT(coupled_moves::ligand_mode, "if true, model protein ligand interaction", false);
113  NEW_OPT(coupled_moves::initial_repack, "start simulation with repack and design step", true);
114  NEW_OPT(coupled_moves::min_pack, "use min_pack for initial repack and design step", false);
115  NEW_OPT(coupled_moves::save_sequences, "save all unique sequences", true);
116  NEW_OPT(coupled_moves::save_structures, "save structures for all unique sequences", false);
117  NEW_OPT(coupled_moves::ligand_prob, "probability of making a ligand move", 0.1);
118  NEW_OPT(coupled_moves::fix_backbone, "do not make any backbone moves", false);
119  NEW_OPT(coupled_moves::uniform_backrub, "select backrub rotation angle from uniform distribution", false);
120  NEW_OPT(coupled_moves::bias_sampling, "if true, bias rotamer selection based on energy", true);
121  NEW_OPT(coupled_moves::bump_check, "if true, use bump check in generating rotamers", true);
122  NEW_OPT(coupled_moves::ligand_weight, "weight for residue - ligand interactions", 1.0);
123  NEW_OPT(coupled_moves::output_prefix, "prefix for output files", "");
124 
125  // initialize Rosetta
126  devel::init(argc, argv);
127 
128  protocols::viewer::viewer_main( my_main );
129 
130  } catch ( utility::excn::EXCN_Base const & e ) {
131  std::cout << "caught exception " << e.msg() << std::endl;
132  return -1;
133  }
134 
135  return 0;
136 }
137 
139 public:
142 
143  virtual void apply( core::pose::Pose& pose );
144  std::string get_name() const { return "CoupledMovesProtocol"; }
145 
146  virtual protocols::moves::MoverOP clone() const {
147  return protocols::moves::MoverOP( new CoupledMovesProtocol( *this ) );
148  }
149 
150  virtual protocols::moves::MoverOP fresh_instance() const {
151  return protocols::moves::MoverOP( new CoupledMovesProtocol );
152  }
153 
155  core::pose::PoseOP pose,
156  core::Size ligand_resnum,
157  core::Real ligand_weight);
158 
159 private:
160  core::scoring::ScoreFunctionOP score_fxn_;
161  core::pack::task::TaskFactoryOP main_task_factory_;
162 
163 };
164 
166  score_fxn_(core::scoring::ScoreFunctionOP( new core::scoring::ScoreFunction() )),
167  main_task_factory_(core::pack::task::TaskFactoryOP( new core::pack::task::TaskFactory() ))
168 {
169 
170  using namespace basic::options;
171  using namespace basic::options::OptionKeys;
172 
173  using namespace core::pack::task;
174  using namespace core::pack::task::operation;
175 
176  main_task_factory_->push_back( TaskOperationCOP( new operation::InitializeFromCommandline ) );
177  if ( option[ packing::resfile ].user() ) {
178  main_task_factory_->push_back( TaskOperationCOP( new operation::ReadResfile ) );
179  } else {
180  operation::RestrictToRepackingOP rtrop( new operation::RestrictToRepacking );
181  main_task_factory_->push_back( rtrop );
182  }
183 
184  // C-beta atoms should not be altered during packing because branching atoms are optimized
185  //main_task_factory_->push_back( new operation::PreserveCBeta );
186 
187  // set up the score function and add the bond angle energy term
188  score_fxn_ = core::scoring::get_score_function();
189  score_fxn_->set_weight(core::scoring::mm_bend, option[ coupled_moves::mm_bend_weight ]);
190  core::scoring::constraints::add_fa_constraints_from_cmdline_to_scorefxn(*score_fxn_);
191  core::scoring::methods::EnergyMethodOptions energymethodoptions(score_fxn_->energy_method_options());
192  energymethodoptions.hbond_options().decompose_bb_hb_into_pair_energies(true);
193  energymethodoptions.bond_angle_central_atoms_to_score(option[ backrub::pivot_atoms ]);
194  score_fxn_->set_energy_method_options(energymethodoptions);
195 }
196 
198  score_fxn_(cmp.score_fxn_),
200 {}
201 
203  core::pose::PoseOP pose,
204  core::Size ligand_resnum,
205  core::Real ligand_weight) {
206 
207  core::scoring::EnergyMap weights = pose->energies().weights();
208  core::scoring::EnergyGraph const & energy_graph( pose->energies().energy_graph() );
209  core::scoring::EnergyMap ligand_two_body_energies;
210 
211  for ( core::Size i = 1; i <= pose->total_residue(); i++ ) {
212  for ( core::graph::Graph::EdgeListConstIter
213  iru = energy_graph.get_node(i)->const_edge_list_begin(),
214  irue = energy_graph.get_node(i)->const_edge_list_end();
215  iru != irue; ++iru ) {
216  const core::scoring::EnergyEdge * edge( static_cast< const core::scoring::EnergyEdge *> (*iru) );
217  core::Size const j( edge->get_first_node_ind() );
218  core::Size const k( edge->get_second_node_ind() );
219  if ( j == ligand_resnum || k == ligand_resnum ) {
220  ligand_two_body_energies += edge->fill_energy_map();
221  }
222  }
223  }
224 
225  core::Real ligand_score_bonus = ligand_two_body_energies.dot(weights) * (ligand_weight - 1.0);
226 
227  return ligand_score_bonus;
228 }
229 
231  using namespace basic::options;
232  using namespace basic::options::OptionKeys;
233 
234  TR << "Initial Score:" << std::endl;
235  score_fxn_->show(TR, pose);
236  TR.flush();
237 
238  protocols::moves::MonteCarlo mc(pose, *score_fxn_, option[ coupled_moves::mc_kt ]);
239 
240  protocols::viewer::add_monte_carlo_viewer(mc, "CoupledMoves", 600, 600);
241 
242  ////////////////// Material above is scheduled for constructor //////////////////
243 
244  std::string output_tag(protocols::jd2::current_output_name());
245  output_tag += option[coupled_moves::output_prefix];
246 
247  // start with a fresh copy of the optimized pose
248  core::pose::PoseOP pose_copy( new core::pose::Pose(pose) );
249 
250  // add constraints if supplied by via constraints::cst_file option
251  core::scoring::constraints::add_fa_constraints_from_cmdline_to_pose(*pose_copy);
252 
253  core::pack::task::PackerTaskOP task( main_task_factory_->create_task_and_apply_taskoperations( *pose_copy ) );
254 
255  utility::vector1<core::Size> move_positions;
256  utility::vector1<core::Size> design_positions;
257 
258  // using ClashBasedRepackShellSelector to define repack shell
259  core::pack::task::residue_selector::ClashBasedRepackShellSelectorOP rs( new core::pack::task::residue_selector::ClashBasedRepackShellSelector(task, score_fxn_) );
260  utility::vector1< bool > to_repack = rs->apply( *pose_copy );
261 
262  for ( core::Size i = 1; i <= to_repack.size(); ++i ) {
263  if ( task->residue_task(i).has_behavior("AUTO") ) {
264  if ( to_repack[i] ) {
265  task->nonconst_residue_task(i).restrict_to_repacking();
266  } else {
267  task->nonconst_residue_task(i).prevent_repacking();
268  }
269  }
270  }
271 
272  for ( core::Size i = 1; i <= to_repack.size(); ++i ) {
273  if ( task->design_residue(i) ) {
274  design_positions.push_back(i);
275  move_positions.push_back(i);
276  } else if ( task->pack_residue(i) ) {
277  move_positions.push_back(i);
278  }
279  }
280 
281  TR << std::endl;
282 
283  // ASSUMPTION: the ligand is the last residue in the given PDB
284  core::Size ligand_resnum = pose_copy->total_residue();
285  core::Real ligand_weight = option[coupled_moves::ligand_weight];
286  protocols::simple_moves::CoupledMoverOP coupled_mover;
287 
288  if ( option[coupled_moves::ligand_mode] ) {
289  coupled_mover = protocols::simple_moves::CoupledMoverOP(new protocols::simple_moves::CoupledMover(pose_copy, score_fxn_, task, ligand_resnum));
290  coupled_mover->set_ligand_resnum( ligand_resnum );
291  coupled_mover->set_ligand_weight( ligand_weight );
292  core::pack::task::IGEdgeReweighterOP reweight_ligand( new protocols::toolbox::IGLigandDesignEdgeUpweighter( ligand_weight ) );
293  task->set_IGEdgeReweights()->add_reweighter( reweight_ligand );
294  } else {
295  coupled_mover = protocols::simple_moves::CoupledMoverOP( new protocols::simple_moves::CoupledMover(pose_copy, score_fxn_, task) );
296  }
297 
298  coupled_mover->set_fix_backbone( option[coupled_moves::fix_backbone] );
299  coupled_mover->set_bias_sampling( option[coupled_moves::bias_sampling] );
300  coupled_mover->set_temperature( option[coupled_moves::boltzmann_kt] );
301  coupled_mover->set_bump_check( option[coupled_moves::bump_check] );
302  coupled_mover->set_uniform_backrub( option[coupled_moves::uniform_backrub] );
303 
304  protocols::simple_moves::PackRotamersMoverOP pack( new protocols::simple_moves::PackRotamersMover( score_fxn_, task, 1 ) );
305  protocols::simple_moves::MinPackMoverOP minpack(new protocols::simple_moves::MinPackMover( score_fxn_, task ));
306 
307  if ( option[coupled_moves::initial_repack] ) {
309  minpack->apply(*pose_copy);
310  } else {
311  pack->apply(*pose_copy);
312  }
313  }
314 
315  // reset the Monte Carlo object
316  mc.reset(*pose_copy);
317 
318  protocols::canonical_sampling::PDBTrajectoryRecorder trajectory;
319  if ( option[ coupled_moves::trajectory ] ) {
320  trajectory.file_name(output_tag + "_traj.pdb" + (option[ coupled_moves::trajectory_gz ] ? ".gz" : ""));
321  trajectory.stride(option[ coupled_moves::trajectory_stride ]);
322  trajectory.reset(mc);
323  }
324 
325  TR << "Design Positions: ";
326  for ( core::Size i = 1; i <= design_positions.size(); i++ ) {
327  TR << pose_copy->pdb_info()->number(design_positions[i]) << " ";
328  }
329 
330  std::string initial_sequence = "";
331  for ( core::Size index = 1; index <= design_positions.size(); index++ ) {
332  initial_sequence += pose_copy->residue(design_positions[index]).name1();
333  }
334  TR << "Starting Sequence: " << initial_sequence << std::endl;
335 
336  TR << "Starting Score:" << std::endl;
337  score_fxn_->show(TR, pose);
338  TR.flush();
339 
340  TR << "Running " << option[ coupled_moves::ntrials ] << " trials..." << std::endl;
341 
342  std::map<std::string,core::Real> unique_sequences;
343  std::map<std::string,core::pose::Pose> unique_structures;
344  std::map<std::string,core::scoring::EnergyMap> unique_scores;
345 
346  core::Size ntrials = option[ coupled_moves::ntrials ];
347 
348  //std::string resfile_name = option[packing::resfile]()[1];
349 
350  (*score_fxn_)(*pose_copy);
351  core::Real current_score = pose_copy->energies().total_energy();
352 
353  if ( option[coupled_moves::ligand_mode] ) {
354  core::Real ligand_score_bonus = compute_ligand_score_bonus(pose_copy, ligand_resnum, ligand_weight);
355  current_score += ligand_score_bonus;
356  mc.set_last_accepted_pose(*pose_copy, current_score);
357  }
358 
359  for ( core::Size i = 1; i <= ntrials; ++i ) {
360  core::Size random = numeric::random::random_range(1, move_positions.size());
361  core::Size resnum = move_positions[random];
362  std::string move_type;
363  core::Real move_prob = numeric::random::uniform();
364  if ( move_prob < option[coupled_moves::ligand_prob] ) {
365  resnum = ligand_resnum;
366  move_type = "LIGAND";
367  } else {
368  move_type = "RESIDUE";
369  }
370 
371  coupled_mover->set_resnum(resnum);
372  coupled_mover->apply(*pose_copy);
373 
374  (*score_fxn_)(*pose_copy);
375  current_score = pose_copy->energies().total_energy();
376  core::Real ligand_score_bonus = 0.0;
377 
378  if ( option[coupled_moves::ligand_mode] ) {
379  ligand_score_bonus = compute_ligand_score_bonus(pose_copy, ligand_resnum, ligand_weight);
380  }
381 
382  current_score += ligand_score_bonus;
383  core::Real lowest_score = mc.lowest_score();
384  bool accepted = mc.boltzmann(current_score, move_type);
385 
386  if ( accepted ) {
387  if ( current_score < lowest_score ) {
388  mc.set_lowest_score_pose(*pose_copy, current_score);
389  }
390  mc.set_last_accepted_pose(*pose_copy, current_score);
391  std::string sequence = "";
392  for ( core::Size index = 1; index <= design_positions.size(); index++ ) {
393  sequence += pose_copy->residue(design_positions[index]).name1();
394  }
395  TR << i << " " << sequence << " " << current_score << std::endl;
396  if ( option[coupled_moves::save_sequences] ) {
397  if ( unique_sequences.find(sequence) == unique_sequences.end() ) {
398  unique_sequences.insert(std::make_pair(sequence,current_score));
399  unique_scores.insert(std::make_pair(sequence,pose_copy->energies().total_energies()));
400  if ( option[coupled_moves::save_structures] ) {
401  unique_structures.insert(std::make_pair(sequence,*pose_copy));
402  }
403  } else {
404  if ( unique_sequences[sequence] > current_score ) {
405  unique_sequences[sequence] = current_score;
406  unique_scores[sequence] = pose_copy->energies().total_energies();
407  if ( option[coupled_moves::save_structures] ) {
408  unique_structures[sequence] = *pose_copy;
409  }
410  }
411  }
412  }
413  } else {
414  (*pose_copy) = mc.last_accepted_pose();
415  }
416 
417  if ( option[ coupled_moves::trajectory ] ) trajectory.update_after_boltzmann(mc);
418 
419  }
420 
421  mc.show_counters();
422 
423  // dump out the low score and last accepted poses
424 
425  TR << "Last Score:" << std::endl;
426  score_fxn_->show(TR, *pose_copy);
427  TR.flush();
428 
429  if ( option[out::pdb_gz] ) {
430  pose_copy->dump_pdb(output_tag + "_last.pdb.gz");
431  } else {
432  pose_copy->dump_scored_pdb(output_tag + "_last.pdb", *score_fxn_);
433  }
434 
435  *pose_copy = mc.lowest_score_pose();
436 
437  TR << "Low Score:" << std::endl;
438  score_fxn_->show(TR, *pose_copy);
439  TR.flush();
440 
441  if ( option[out::pdb_gz] ) {
442  pose_copy->dump_pdb(output_tag + "_low.pdb.gz");
443  } else {
444  pose_copy->dump_scored_pdb(output_tag + "_low.pdb", *score_fxn_);
445  }
446 
447  pose = mc.lowest_score_pose();
448 
449  if ( option[coupled_moves::save_sequences] ) {
450  std::ofstream out_fasta( (output_tag + ".fasta").c_str() );
451  core::Size count = 1;
452  for ( std::map<std::string,core::Real>::iterator it = unique_sequences.begin(), end = unique_sequences.end(); it != end; ++it ) {
453  out_fasta << ">Sequence" << count << " " << it->second << std::endl;
454  out_fasta << it->first << std::endl;
455  count++;
456  }
457  out_fasta.close();
458 
459  std::ofstream out_stats( (output_tag + ".stats").c_str() );
460  count = 1;
461  for ( std::map<std::string,core::Real>::iterator it = unique_sequences.begin(), end = unique_sequences.end(); it != end; ++it ) {
462  out_stats << "Sequence" << count << "\t" << it->second << "\tsequence:\t" << it->first << "\t" << unique_scores[it->first].weighted_string_of(score_fxn_->weights()) << std::endl;
463  count++;
464  }
465  out_stats.close();
466 
467  if ( option[coupled_moves::save_structures] ) {
468  for ( std::map<std::string,core::pose::Pose>::iterator it = unique_structures.begin(), end = unique_structures.end(); it != end; ++it ) {
469  if ( option[out::pdb_gz] ) {
470  it->second.dump_pdb(output_tag + "_" + it->first + "_low.pdb.gz");
471  } else {
472  it->second.dump_scored_pdb(output_tag + "_" + it->first + "_low.pdb", *score_fxn_);
473  }
474  }
475  }
476  }
477 
478 }
479 
480 typedef utility::pointer::shared_ptr<CoupledMovesProtocol> CoupledMovesProtocolOP;
481 
482 void *
483 my_main( void* )
484 {
485 
486  CoupledMovesProtocolOP coupled_moves( new CoupledMovesProtocol );
487  protocols::jd2::JobDistributor::get_instance()->go( coupled_moves );
488 
489  return 0;
490 }
static THREAD_LOCAL basic::Tracer TR("apps.coupled_moves")
Numeric type traits.
#define THREAD_LOCAL
virtual std::string const msg() const
Definition: EXCN_Base.hh:70
utility::pointer::shared_ptr< CoupledMovesProtocol > CoupledMovesProtocolOP
std::string String
Definition: remodel.cc:69
virtual protocols::moves::MoverOP fresh_instance() const
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
core::pose::Pose Pose
Definition: supercharge.cc:101
int main(int argc, char *argv[])
utility::keys::lookup::end< KeyType > const end
Conversions between degrees and radians.
core::scoring::ScoreFunctionOP score_fxn_
Random number generator system.
int random_range(int low, int high)
Return a number uniformly drawn from the inclusive range between low and high. Threadsafe since each ...
Definition: random.cc:58
core::pack::task::TaskFactoryOP main_task_factory_
virtual void apply(core::pose::Pose &pose)
Fstring::size_type index(Fstring const &s, Fstring const &ss)
First Index Position of a Substring in an Fstring.
Definition: Fstring.hh:2180
tuple database
Tracer IO system.
Trigonometric functions.
basic::options::IntegerOptionKey const nstruct("nstruct")
rule< Scanner, options_closure::context_t > options
Definition: Tag.cc:377
list resnum
if line_edit[13:14]=='P': #Nucleic acid? Skip.
list native
Definition: ContactMap.py:108
double Real
Definition: types.hh:39
#define NEW_OPT(akey, help, adef)
void * my_main(void *)
tuple pack
Definition: loops.py:50
ocstream cout(std::cout)
Wrapper around std::cout.
Definition: ocstream.hh:287
Class for handling user debug/warnings/errors. Use instance of this class instead of 'std::cout' for ...
Definition: Tracer.hh:134
double uniform()
Generate a random number between 0 and 1. Threadsafe since each thread uses its own random generator...
Definition: random.cc:56
#define OPT_1GRP_KEY(type, grp, key)
xyzVector and xyzMatrix functions
core::Real compute_ligand_score_bonus(core::pose::PoseOP pose, core::Size ligand_resnum, core::Real ligand_weight)
#define OPT(akey)
Fast (x,y,z)-coordinate numeric vector.
platform::Size Size
Definition: random.fwd.hh:30
std::string get_name() const
virtual protocols::moves::MoverOP clone() const
rule< Scanner, option_closure::context_t > option
Definition: Tag.cc:378