Rosetta
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
homodimer_maker.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/scenarios/beta_strand_homodimer_design/homodimer_maker.cc
11 /// @brief Takes a found exposed beta strand and tries to make the starting file for a symmetric homodimer
12 /// @author Ben Stranges
13 
14 // Unit headers
15 #include <devel/init.hh>
16 
17 // Project Headers
18 //#include <core/chemical/AA.hh>
19 #include <core/io/pdb/pose_io.hh>
20 #include <numeric/xyzVector.io.hh>
21 #include <numeric/xyzVector.hh>
22 //#include <core/kinematics/MoveMap.hh>
23 #include <core/pose/Pose.hh>
24 #include <core/conformation/Residue.hh>
25 #include <core/conformation/Atom.hh>
26 #include <core/pose/PDBPoseMap.hh>
27 #include <core/pose/PDBInfo.hh>
28 //#include <core/pose/metrics/CalculatorFactory.hh>
29 //#include <core/pose/metrics/PoseMetricCalculatorBase.hh>
30 #include <core/scoring/ScoreFunction.hh>
31 #include <core/scoring/ScoreFunctionFactory.hh>
32 #include <core/scoring/hbonds/HBondSet.hh>
33 #include <core/scoring/hbonds/hbonds.hh>
34 
35 #include <core/conformation/Conformation.hh>
36 
37 
38 //#include <core/scoring/rms_util.tmpl.hh>
39 //#include <core/scoring/ScoreType.hh>
40 //#include <core/scoring/TenANeighborGraph.hh>
41 
42 #include <core/id/AtomID_Map.hh>
43 //#include <core/id/AtomID_Map.Pose.hh>
44 
45 #include <core/scoring/ScoringManager.hh>
46 #include <core/scoring/methods/EnergyMethodOptions.hh>
47 #include <core/scoring/methods/EnergyMethod.hh>
48 
49 #include <core/scoring/EnergyMap.hh>
50 //#include <core/scoring/etable/BaseEtableEnergy.tmpl.hh>
51 //#include <core/scoring/etable/BaseEtableEnergy.hh>
52 #include <core/scoring/etable/EtableEnergy.hh>
53 //#include <core/scoring/etable/CoarseEtableEnergy.hh>
54 
55 //protocols
56 #include <protocols/rigid/RigidBodyMover.hh>
57 #include <protocols/rigid/RollMover.hh>
58 #include <protocols/moves/Mover.hh>
59 #include <protocols/moves/StructureRestrictor.hh>
60 
61 //options
62 #include <basic/options/option.hh>
63 #include <basic/options/keys/run.OptionKeys.gen.hh>
64 #include <basic/options/keys/jd2.OptionKeys.gen.hh>
65 #include <basic/options/keys/score.OptionKeys.gen.hh>
66 
67 // Job distributor
68 #include <protocols/jd2/JobDistributor.hh>
69 #include <protocols/jd2/Job.hh>
70 
71 
72 // Utility Headers
73 #include <basic/Tracer.hh>
74 #include <utility/file/FileName.hh>
75 
76 
77 // C++ headers
78 #include <sstream>
79 #include <iostream>
80 #include <string>
81 
82 //Auto Headers
83 #include <utility/vector0.hh>
84 #include <utility/vector1.hh>
85 
87 
88 static THREAD_LOCAL basic::Tracer TR( "apps.public.beta_strand_homodimer_design.homodimer_maker" );
89 
90 
91 using namespace core;
92 using namespace utility;
93 using namespace protocols;
94 using namespace protocols::moves;
95 using namespace basic::options;
96 using namespace basic::options::OptionKeys;
97 
98 //specific options
99 
100 IntegerOptionKey const window_size( "window_size" );
101 IntegerOptionKey const sheet_start( "sheet_start" );
102 IntegerOptionKey const sheet_stop( "sheet_stop" );
103 RealOptionKey const E_cutoff( "E_cutoff" );
104 StringOptionKey const struct_file( "struct_file" ); //filename of structure restrictor
105 
106 //helper function because friend functions from numeric/xyzVector.hh are bad.
109 {
111  0.5 * ( a.x() + b.x() ),
112  0.5 * ( a.y() + b.y() ),
113  0.5 * ( a.z() + b.z() )
114  );
115 }
116 
117 // mover deffinition
118 class HDmakerMover : public Mover {
119 public:
120 
121  HDmakerMover();
122 
123  virtual void apply( core::pose::Pose& pose );
124 
125  virtual std::string get_name() const{
126  return "HDmakerMover";
127  }
128 
129  virtual numeric::xyzVector <core::Real> find_midpoint( numeric::xyzVector<core::Real> & xpoints,
130  numeric::xyzVector<core::Real> & ypoints );
131 
132  virtual Real bb_score(pose::Pose & pose, core::Size aligned_chain_num, core::scoring::ScoreFunctionOP & scorefxn);
133 
134 
135  virtual MoverOP clone() const {
136  return MoverOP( new HDmakerMover( *this ) );
137  }
138 
139  virtual MoverOP fresh_instance() const {
140  return clone();
141  }
142 
143 private:
144  core::scoring::ScoreFunctionOP scorefxn_;
145  int sheet_start_, sheet_stop_;
146  std::string pdb_chain_;
148 
149 };
150 
152  // variable definitions
153  scorefxn_ = core::scoring::get_score_function();
154  sheet_start_ = option[ sheet_start ];
155  sheet_stop_ = option[ sheet_stop ];
156  pdb_chain_ = option[run::chain].def( "A");
157  maxE_=option[ E_cutoff ].def(30.0);
158  //window_size_= option[ window_size ].def(5)
159 }
160 
161 
162 //helper function to find midpoint
166  midpoint = (xpoints+ypoints);
167  midpoint /= 2;
168  return midpoint;
169 }
170 
171 
172 ///////////////////////////////////////
173 // bb score
174 ///////////////////////////////////////
176 HDmakerMover::bb_score(pose::Pose & pose, core::Size aligned_chain_num, core::scoring::ScoreFunctionOP & scorefxn){
177 
178  // score the bb-bb energy between chains
179  // This part written by P.Doug Renfrew
180  // make vectors of bb atoms in each chain individually
181  // the master pose will always be chain 1.
182  // need to make a vector of all atoms in the chain you are comparing too
183 
187 
188  for ( Size j = 1; j <= pose.total_residue(); ++j ) {
189  core::conformation::Residue const & res( pose.residue(j) );
190  core::chemical::AtomIndices bb_ai( res.mainchain_atoms() );
191  //assert( bb_ai.size() == 4 );
192  core::Size chain_num( res.chain() );
193  for ( Size jj = 1; jj <= bb_ai.size(); ++jj ) {
194  if ( chain_num == 1 ) {
195  chain1_bb_atoms.push_back( res.atom(jj) );
196  } else if ( chain_num == aligned_chain_num ) {
197  chain2_bb_atoms.push_back( res.atom(jj) );
198  }
199  //optional get all the atoms not in allinged chain,
200  //only need to do if more than two chains in pose
201  if ( pose.conformation().num_chains() >= 3 && chain_num != 1 ) {
202  all_bb_atoms.push_back( res.atom(jj) );
203  }
204  //end optional
205  }
206  }
207 
208  //NOW SCORE!
209  // get instance of etable energy method
210  core::scoring::methods::EnergyMethodOptions const & emo(scorefxn->energy_method_options());
211  core::scoring::etable::Etable const & et(*(core::scoring::ScoringManager::get_instance()->etable(emo).lock()));
212 
213  if ( basic::options::option[ basic::options::OptionKeys::score::analytic_etable_evaluation ] || emo.analytic_etable_evaluation() ) {
214  utility_exit_with_message("homodimer_maker is incompatible with analytic_etable_evaluation. Please either fix the code or add '-analytic_etable_evalution 0' to the command line.");
215  }
216  core::scoring::etable::TableLookupEtableEnergy ete( et, emo );
217 
218  // iterate over both sets of atom and add into one emapvector
219  //core::scoring::TwoBodyEMapVector tbemv;
220  core::scoring::EMapVector tbemv;
221  core::Real atr_wt( (*scorefxn).get_weight(core::scoring::fa_atr) );
222  core::Real rep_wt( (*scorefxn).get_weight(core::scoring::fa_rep) );
223  for ( Size ii = 1; ii <= chain1_bb_atoms.size(); ++ii ) {
224  for ( Size jj = 1; jj <= chain2_bb_atoms.size(); ++jj ) {
225  //calc distr squared
226  Real d2( chain1_bb_atoms[ii].xyz().distance_squared( chain2_bb_atoms[jj].xyz() ) );
227  ete.atom_pair_energy( chain1_bb_atoms[ii], chain2_bb_atoms[jj], 1, tbemv, d2 );
228  }
229  }
230  core::Real bb_energy (rep_wt * tbemv[core::scoring::fa_rep] + atr_wt * tbemv[core::scoring::fa_atr] );
231 
232  // begin optional ie skip if not needed
233  core::Real all_energy;
234  if ( pose.conformation().num_chains() >= 3 ) {
235  //core::scoring::TwoBodyEMapVector tbemv_all;
236  core::scoring::EMapVector tbemv_all;
237  core::scoring::etable::TableLookupEtableEnergy ete_all( et, emo );
238  for ( Size ii = 1; ii <= chain1_bb_atoms.size(); ++ii ) {
239  for ( Size jj = 1; jj <= all_bb_atoms.size(); ++jj ) {
240  //calc distr squared
241  Real d2_all( chain1_bb_atoms[ii].xyz().distance_squared( all_bb_atoms[jj].xyz() ) );
242  ete.atom_pair_energy( chain1_bb_atoms[ii], all_bb_atoms[jj], 1, tbemv_all, d2_all );
243  }
244  }
245  all_energy = (rep_wt * tbemv_all[core::scoring::fa_rep] + atr_wt * tbemv_all[core::scoring::fa_atr] );
246  } else { //end optional for many chains
247  all_energy = bb_energy ;
248  }
249  TR<< "Number of chains: " <<pose.conformation().num_chains()
250  <<" Backbone-backbone score: " << all_energy << std::endl;
251  return all_energy;
252  //return bb_energy;
253 }//end bb_score
254 
255 /////////////////////////////////////////////////
256 // Actual mover apply
257 /////////////////////////////////////////////////
259 
260  //job info
261  protocols::jd2::JobOP const job_me( protocols::jd2::JobDistributor::get_instance()->current_job() );
262  utility::file::FileName pdb_file_name (pose.pdb_info()->name());
263 
264  //restrict structures if needed
265  if ( basic::options::option[ struct_file ].active() ) {
266  std::string struct_filename = option[ struct_file ];
267  TR << "Deleting according to structure file..."<< std::endl;
268  moves::StructureRestrictorOP restrictor( new moves::StructureRestrictor( struct_filename ) );
269  restrictor->apply(pose);
270  }
271 
272  if ( pose.conformation().num_chains() > 1 ) {
273  TR << "pose is not a monomer, skipping..."<< std::endl;
274  set_last_move_status(protocols::moves::FAIL_BAD_INPUT);
275  return;
276  }
277  //score this pose & fill hbond set
278  (*scorefxn_)( pose );
279  core::scoring::hbonds::HBondSet hbond_set;
280  core::scoring::hbonds::fill_hbond_set(
281  pose,
282  false /*calc_deriv*/,
283  hbond_set,
284  false /*bb only*/ );
285  //call to try to resize bb_don/accept arrays
286  //need this for everything to work right
287  hbond_set.setup_for_residue_pair_energies(pose);
288 
289  //translate pdb numbering to pose numbering
290  char chain( pdb_chain_[0] );
291  Size sheet_start( pose.pdb_info()->pdb2pose(chain, sheet_start_) );
292  Size sheet_end( pose.pdb_info()->pdb2pose(chain, sheet_stop_) );
293 
294  //get some info about the pose
295  Size n_residues (pose.total_residue());
296 
297  //dirty pose dupication
298  pose::Pose copy_pose (pose);
299  pose.append_residue_by_jump(copy_pose.residue( 1 ), pose.total_residue(), "" , "", true /*start new chain*/);
300  for ( Size n = 2; n <= copy_pose.total_residue(); ++n ) {
301  pose.append_residue_by_bond( copy_pose.residue ( n ) );
302  }
303 
304  //decision if to use the WHOLE defined sheet or a sliding window
305  //assume that a sheet is locally linear and itterate through it based on some window size
306  Size sheet_length = sheet_end - sheet_start + 1;
307  TR << "Sheet Length: " << sheet_length;
308  int window;
309  if ( !option[ window_size ].active() ) {
310  window = sheet_length;
311  } else {
312  window = option[ window_size ] ;
313  }
314  TR << " Window size: "<< window << std::endl;
315  Size last_start( sheet_end - window + 1 );
316  Size window_num (1);
317  pose::Pose const saved_pose (pose);
318  for ( Size jj = sheet_start; jj <= last_start; ++jj ) {
319 
320  //skip this itteration if it is in a bb/bb hbond already
321  if ( hbond_set.acc_bbg_in_bb_bb_hbond(jj) && hbond_set.don_bbg_in_bb_bb_hbond(jj) ) {
322  continue;
323  }
324 
325  Size this_end( jj + window -1 );
326  //find center of the sheet
327  Size center_residue(0); //should fail if nothing changes about this residue
328  if ( window % 2 == 0 ) {
329  center_residue = jj + (window / 2);
330  } else { center_residue = jj + ((window - 1) / 2); }
331  TR << "Sheet from: "<< jj << " to "<< this_end << " Window: " << window_num
332  << " Center residue: " << center_residue <<std::endl;
333 
334  //make axis for parallel sheet making
335  std::string const atom_to_use( "CA" );
336  numeric::xyzVector< core::Real > start_xyz ( pose.residue(jj).atom(atom_to_use).xyz() );
337  numeric::xyzVector< core::Real > end_xyz ( pose.residue(this_end).atom(atom_to_use).xyz() );
338  numeric::xyzVector< core::Real > center_xyz ( pose.residue(center_residue).atom(atom_to_use).xyz() );
339  numeric::xyzVector<core::Real> const zero_vector (0,0,0);
341  numeric::xyzVector< core::Real > parl_vector( end_xyz - start_xyz );
342 
343 #ifndef NDEBUG
344  TR << "Parl axis is from pose residue: " <<jj << " to " << this_end <<"\n"
345  << "The vector between these two residues is: " << parl_vector << "\n"
346  << "The midpoint is : "<< midpoint << std::endl;
347 #endif
348 
349  //make axis for antiparallel sheet making
350  //need another vector to define the plane that that sheet is on
351  //choose the C=O on the center residue
352  numeric::xyzVector<core::Real> center_C_xyz ( pose.residue(center_residue).atom( "C" ).xyz() );
353  numeric::xyzVector<core::Real> center_O_xyz ( pose.residue(center_residue).atom( "O" ).xyz() );
354  numeric::xyzVector<core::Real> CO_plane_vector = center_O_xyz - center_C_xyz;
355  numeric::xyzVector<core::Real> anti_vector = cross( CO_plane_vector, parl_vector );
356 
357 #ifndef NDEBUG
358  TR << "Anti axis is from pose residue: " <<jj << " to " << this_end <<"\n"
359  << "The normal to these two residues is: " << anti_vector << "\n"
360  << "The midpoint is : "<< midpoint << std::endl;
361 #endif
362 
363  //define some movers
364  Real const min_angle (180.0);
365  Real const max_angle(180.0);
366  //moves the input pose, not the copy
367  pose::Pose anti_pose (pose), parl_pose (pose);
368  rigid::RollMoverOP parl_roll_mover( new rigid::RollMover(1 /*start_res*/, n_residues /*stop*/, min_angle, max_angle, parl_vector, center_xyz ) );
369  rigid::RollMoverOP anti_roll_mover( new rigid::RollMover(1 /*start_res*/, n_residues /*stop*/, min_angle, max_angle, anti_vector, center_xyz ) );
370 
371  //apply to pose and output
372  anti_roll_mover->apply( anti_pose );
373  parl_roll_mover->apply( parl_pose );
374  //std::string anti_string = pdb_file_name.base() + "_anti_complex.pdb" ;
375  //std::string parl_string = pdb_file_name.base() + "_parl_complex.pdb" ;
376 
377  //now move chains apart
378  Real anti_dist (6.0); //distance to move 2 CA atoms apart (largest for antiparallel seen)
379  Real parl_dist (5.5); //similar number for parallel sheetsm
380 
381  rigid::RigidBodyTransMoverOP push_apart_mover( new rigid::RigidBodyTransMover );
382  //figure out which way to push
383  //check if the center residue is in bb:bb hbonds (lame way but will do for now)
384  TR << "C-O vector on center res is" << CO_plane_vector << ", ";
385  Real scaler (-1); //will define direction
386  if ( hbond_set.acc_bbg_in_bb_bb_hbond(center_residue) && hbond_set.don_bbg_in_bb_bb_hbond(center_residue) ) {
387  scaler = 1;
388  }
389  CO_plane_vector *= scaler;
390  TR << "Direction of translation is: " << CO_plane_vector << std::endl;
391  push_apart_mover->trans_axis(CO_plane_vector);
392  //now do push
393  push_apart_mover->step_size(anti_dist);
394  push_apart_mover->apply(anti_pose);
395  push_apart_mover->step_size(parl_dist);
396  push_apart_mover->apply(parl_pose);
397 
398  //chains are now apart
399  //now explore space along the sheet
400  //need to figure out how far along to move along the sheet.
401  //Figure we need at LEAST two bb hbonding residues (4 total hbonds)
402 
403  //first recalculate the vector along the sheet as it has moved
404  start_xyz = pose.residue(jj).atom(atom_to_use).xyz() ;
405  end_xyz = pose.residue(this_end).atom(atom_to_use).xyz() ;
406  parl_vector = end_xyz - start_xyz;
407 
408  //figure out how many steps are possible given the lenght of the sheet
409  //doubt that sheet definition will ever be greater than 12
410  int numsteps (0);
411  if ( window <=4 ) {
412  numsteps = 0;
413  } else if ( window <= 6 ) {
414  numsteps = 1;
415  } else if ( window <= 8 ) {
416  numsteps = 2;
417  } else if ( window <= 10 ) {
418  numsteps = 3;
419  } else if ( window <= 12 ) {
420  numsteps = 4;
421  } else numsteps = 5;
422 
423  TR<<"Number of RB steps to search: "<< numsteps << std::endl;
424 
425  //now set up for searching along strand
426  rigid::RigidBodyTransMoverOP sheet_trans_mover( new rigid::RigidBodyTransMover );
427  //quick bump to line up parallel sheet
428  sheet_trans_mover->trans_axis(parl_vector * (-1));
429  sheet_trans_mover->step_size(3.6); //aprox only
430  sheet_trans_mover->apply(parl_pose);
431 
432  //save poses
433  pose::Pose saved_anti( anti_pose );
434  pose::Pose saved_parl( parl_pose );
435  //now do searching
436  sheet_trans_mover->trans_axis(parl_vector);
437  for ( int ii = (-1)*numsteps ; ii <= numsteps; ++ii ) {
438  Real trans_dist (7.0); //aprox dist of CA from i to i+2 in sheet
439  sheet_trans_mover->step_size(trans_dist*ii);
440  sheet_trans_mover->apply(anti_pose);
441  sheet_trans_mover->apply(parl_pose);
442  TR<< "Translate step: "<< ii << " distance: " << trans_dist * ii << std::endl;
443 
444  //bb score the complex
445  Real const anti_bb_score (bb_score(anti_pose,2/*assumtiuon!!!*/, scorefxn_));
446  Real const parl_bb_score (bb_score(parl_pose,2/*assumtiuon!!!*/, scorefxn_));
447 
448  //naming for output
449  std::stringstream anti_ss;
450  std::stringstream parl_ss;
451  int pdb_res( pose.pdb_info()->number(jj) );
452  char pdb_chain( pose.pdb_info()->chain(jj) );
453  anti_ss << pdb_file_name.base() <<"_"<< pdb_chain << pdb_res <<"_anti_wind_"<< window_num << "_step_" << ii << ".pdb";
454  parl_ss << pdb_file_name.base() <<"_"<< pdb_chain << pdb_res <<"_parl_wind_" << window_num << "_step_" << ii << ".pdb";
455  std::string anti_filename (anti_ss.str());
456  std::string parl_filename (parl_ss.str());
457 
458  std::cout << "FILE: "<< anti_filename << " bb_score: " << anti_bb_score << std::endl;
459  std::cout << "FILE: "<< parl_filename << " bb_score: " << parl_bb_score << std::endl;
460 
461  //dump pdbs only if score is good enough...
462  if ( anti_bb_score < maxE_ ) {
463  anti_pose.dump_pdb(anti_filename);
464  }
465  if ( parl_bb_score < maxE_ ) {
466  parl_pose.dump_pdb(parl_filename);
467  }
468 
469  //reverts to original
470  anti_pose = saved_anti;
471  parl_pose = saved_parl;
472  }
473 
474  // anti_pose.dump_scored_pdb(anti_string, *(scorefxn_));
475  // parl_pose.dump_scored_pdb(parl_string, *(scorefxn_));
476 
477  //set up for next itteration
478  ++window_num;
479  pose = saved_pose;
480  }//end window loop
481 }//end apply
482 
483 //begin main
484 int
485 main( int argc, char* argv[] ) {
486  try {
487  //options
488  option.add(sheet_start, "Start of beta sheet (PDBNum) to do rolls and translates about");
489  option.add(sheet_stop, "End of beta sheet (PDBNum) to do rolls and translates about");
490  option.add(E_cutoff, "Max E for output" );
491  option.add( struct_file, "file with info about chains and such");
492  option.add( window_size, "file with info about chains and such");
493 
494  //init
495  devel::init( argc, argv );
496  //making our own output
497  basic::options::option[ OptionKeys::jd2::no_output ].def(true);
498 
499  protocols::jd2::JobDistributor::get_instance()->go( protocols::moves::MoverOP( new HDmakerMover ) );
500 
501  TR<< "Complete." << std::endl;
502  } catch ( utility::excn::EXCN_Base const & e ) {
503  std::cout << "caught exception " << e.msg() << std::endl;
504  return -1;
505  }
506  return 0;
507 }//main
#define utility_exit_with_message(m)
Exit with file + line + message.
Definition: exit.hh:47
virtual numeric::xyzVector< core::Real > find_midpoint(numeric::xyzVector< core::Real > &xpoints, numeric::xyzVector< core::Real > &ypoints)
#define THREAD_LOCAL
virtual std::string const msg() const
Definition: EXCN_Base.hh:70
Automatic hidden index key for integer options.
virtual void apply(core::pose::Pose &pose)
RealOptionKey const E_cutoff("E_cutoff")
virtual std::string get_name() const
vector0: std::vector with assert-checked bounds
std::string pdb_chain_
numeric::xyzVector< core::Real > xyz_center_vector(numeric::xyzVector< core::Real > const &a, numeric::xyzVector< core::Real > const &b)
void init(int argc, char *argv[])
Command line init() version.
Definition: init.cc:23
core::pose::Pose Pose
Definition: supercharge.cc:101
Value const & z() const
Value z const.
Definition: xyzVector.hh:1620
core::scoring::ScoreFunctionOP scorefxn_
Automatic hidden index key for real options.
Automatic hidden index key for string options.
xyzVector input/output functions
File name class supporting Windows and UN*X/Linux format names.
Definition: FileName.hh:37
xyzVector< Real > xyz(Real const &r1, Real const &omega1, Real const &t, Real const &dz1, Real const &delta_omega1, Real const &delta_z1)
Returns the x-, y-, and z-coordinates of a point on a helix given r1, omega1, and t...
Definition: HelixParams.cc:67
T distance_squared(xyzTriple< T > const &a, xyzTriple< T > const &b)
Distance squared.
common derived classes for thrown exceptions
xyzTriple< T > midpoint(xyzTriple< T > const &a, xyzTriple< T > const &b)
Midpoint of 2 xyzTriples.
tuple scorefxn
Definition: PyMOL_demo.py:63
Value const & y() const
Value y const.
Definition: xyzVector.hh:1602
Tracer IO system.
std::vector with 1-based indexing
Definition: vector1.fwd.hh:44
File name class supporting Windows and UN*X/Linux format names.
rule< Scanner, options_closure::context_t > options
Definition: Tag.cc:377
IntegerOptionKey const sheet_start("sheet_start")
utility::options::OptionCollection option
OptionCollection global.
Definition: option.cc:45
double Real
Definition: types.hh:39
Value const & x() const
Value x const.
Definition: xyzVector.hh:1584
ocstream cout(std::cout)
Wrapper around std::cout.
Definition: ocstream.hh:287
vector1: std::vector with 1-based indexing
virtual Real bb_score(pose::Pose &pose, core::Size aligned_chain_num, core::scoring::ScoreFunctionOP &scorefxn)
StringOptionKey const struct_file("struct_file")
Class for handling user debug/warnings/errors. Use instance of this class instead of 'std::cout' for ...
Definition: Tracer.hh:134
IntegerOptionKey const window_size("window_size")
void cross(const utility::vector1< Real > &L, const utility::vector1< Real > &r0, utility::vector1< Real > &r)
int main(int argc, char *argv[])
virtual MoverOP clone() const
Program options global and initialization function.
Fast (x,y,z)-coordinate numeric vector.
static void clone(T *&dst, S *src, int n)
Definition: Svm.cc:22
platform::Size Size
Definition: random.fwd.hh:30
static THREAD_LOCAL basic::Tracer TR("apps.public.beta_strand_homodimer_design.homodimer_maker")
rule< Scanner, option_closure::context_t > option
Definition: Tag.cc:378
IntegerOptionKey const sheet_stop("sheet_stop")
virtual MoverOP fresh_instance() const