Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
StepWiseScreener.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 StepWiseScreener
11 /// @brief Makes a list of (phi, psi, omega) at moving_residues that
12 /// could be useful for full-atom packing
13 /// @detailed
14 /// @author Rhiju Das
15 
16 
17 //////////////////////////////////
21 
22 //////////////////////////////////
23 #include <core/types.hh>
24 
26 
27 #include <core/id/AtomID.hh>
31 #include <core/pose/Pose.hh>
32 
34 #include <core/scoring/Energies.hh>
40 #include <basic/Tracer.hh>
41 #include <core/kinematics/Jump.hh>
42 
44 
45 // AUTO-REMOVED #include <ObjexxFCL/format.hh>
46 #include <ObjexxFCL/string.functions.hh>
47 #include <ObjexxFCL/FArray1D.hh>
48 
49 #include <utility/exit.hh>
50 // AUTO-REMOVED #include <time.h>
51 
52 #include <string>
53 
55 #include <core/pose/util.hh>
57 #include <utility/vector1.hh>
58 #include <utility/io/mpistream.hh>
59 
60 //Auto Headers
61 
62 
63 
64 using namespace core;
65 using core::Real;
66 
67 //////////////////////////////////////////////////////////////////////////
68 //////////////////////////////////////////////////////////////////////////
69 // Core routine for stepwise sampling of proteins (and probably other
70 // biopolymers soon). Take a starting pose and a list of residues to sample,
71 // and comprehensively sample all backbone torsion angles by recursion.
72 //////////////////////////////////////////////////////////////////////////
73 //////////////////////////////////////////////////////////////////////////
74 //////////////////////////////////////////////////////////////////////////
75 
76 static basic::Tracer TR( "protocols.swa.stepwise_residue_sampler" ) ;
77 
78 namespace protocols {
79 namespace swa {
80 
81 
82 
83  //////////////////////////////////////////////////////////////////////////
84  //constructor!
85  StepWiseScreener::StepWiseScreener(
86  utility::vector1< Size > const & moving_residues
87  ):
88  moving_residues_( moving_residues ),
89  n_sample_( 18 /* Corresponds to 20 degree bins */ ),
90  rmsd_cutoff_( -1.0 ),
91  centroid_scorefxn_( core::scoring::ScoreFunctionFactory::create_score_function( "score3.wts" )/* score3 */ ),
92  silent_file_( "" ),
93  filter_native_big_bins_( false ),
94  centroid_screen_( false ),
95  centroid_score_ref_( 999999999999999.99),
96  centroid_score_diff_cut_( 20.0 ),
97  apply_vdw_cut_( false ),
98  centroid_vdw_ref_( 9999999999999999.999 ),
99  nstruct_centroid_( 0 ),
100  ghost_loops_( false )
101  {
102  for ( Size n = 1; n <= moving_residues.size(); n++ ) {
104  }
105 
106  }
107 
108  //////////////////////////////////////////////////////////////////////////
109  //destructor
111  {}
112 
113  //////////////////////////////////////////////////////////////////////////
114  //////////////////////////////////////////////////////////////////////
115  void
117  {
118 
119  Size which_res( 1 );
120  Size count( 1 );
121 
122  clock_t const time_start( clock() );
123 
125  centroid_scores_.clear();
126 
127  // convert to centroid
128  pose::Pose pose_save = pose;
129  if ( centroid_screen_ ) convert_to_centroid( pose );
130  if ( ghost_loops_ ) prepare_ghost_pose( pose ); // pose with loops excised
131 
132  sample_residues_recursively( which_res, count, pose );
133 
134  std::cout << "Total time in StepWiseScreener: " <<
135  static_cast<Real>(clock() - time_start) / CLOCKS_PER_SEC << std::endl;
136 
137  pose = pose_save;
138 
140 
141  }
142 
145  return "StepWiseScreener";
146  }
147 
148  ///////////////////////////////////////////////////////////////////////////
149  // pose with loops excised. centroid level.
150  void
152 
153  using namespace core::kinematics;
154  using namespace core::scoring;
155 
156  // Figure out sequence of a pose without the loops (i.e., the "moving residues" );
157  std::string const full_sequence = pose.sequence();
158  ObjexxFCL::FArray1D<bool> moving_array( full_sequence.size(), false );
159  for ( Size n = 1; n <= moving_residues_.size(); n++ ) moving_array( moving_residues_[n] ) = true;
160 
161  ghost_map_.clear();
162  Size count( 0 );
163  std::string desired_sequence = "";
164  for ( Size n = 1; n <= full_sequence.size(); n++ ){
165  if ( moving_array(n) ) continue;
166  count++;
167  desired_sequence += full_sequence[n-1];
168  ghost_map_[ count ] = n;
169  }
170 
171  FoldTree f = figure_out_fold_tree( ghost_map_ ); //chainbreaks, etc.
172 
173  std::cout << "FULL SEQUENCE " << full_sequence << std::endl;
174  std::cout << "DESIRED SEQUENCE " << desired_sequence << std::endl;
175 
176  initialize_ghost_pose( ghost_pose_, desired_sequence, pose, ghost_map_, f);
177  ghost_pose_->dump_pdb( "GHOST_START.pdb" );
178 
179  if ( get_native_pose() ) {
180  Pose native_centroid_pose = *get_native_pose();
181  convert_to_centroid( native_centroid_pose );
182  initialize_ghost_pose( ghost_native_pose_, desired_sequence, native_centroid_pose, ghost_map_, f);
183  ghost_native_pose_->dump_pdb( "GHOST_NATIVE_START.pdb" );
184  }
185 
186  // Also need to figure out reference energy.
187  Pose ghost_pose_blowup = *ghost_pose_;
188  for ( Size n = 1; n <= ghost_pose_blowup.num_jump(); n++ ) {
189  Jump jump( ghost_pose_blowup.jump( n ) );
190  jump.set_translation( Vector( 100.0, 0.0, 0.0 ) ); //This is a little dangerous.
191  ghost_pose_blowup.set_jump( n, jump );
192  }
193  ghost_pose_blowup.dump_pdb( "GHOST_BLOWUP.pdb" );
194  centroid_score_ref_ = (*centroid_scorefxn_)( ghost_pose_blowup );
195  centroid_vdw_ref_ = ghost_pose_blowup.energies().total_energies()[ vdw ];
196 
197  centroid_scorefxn_->show( std::cout, ghost_pose_blowup );
198  std::cout << " REFERENCE SCORES " << centroid_score_ref_ << " " << centroid_vdw_ref_ << std::endl;
199 
200  }
201 
202  ///////////////////////////////////////////////////////////////////////////
203  void
205  core::pose::PoseOP & ghost_pose,
206  std::string const & desired_sequence,
207  core::pose::Pose const & template_pose,
208  ResMap const & ghost_map,
210  {
211  using namespace core::chemical;
212  using namespace core::pose;
214 
215  ghost_pose = new Pose;
216  core::pose::make_pose_from_sequence( *ghost_pose, desired_sequence, *rsd_set );
217  copy_coords( *ghost_pose, template_pose, ghost_map );
218  ghost_pose->fold_tree( f );
219  }
220 
221  ///////////////////////////////////////////////////////////////////////////
222  void
223  StepWiseScreener::copy_coords( pose::Pose & pose, pose::Pose const & template_pose, ResMap const & ghost_map ) const
224  {
225  using namespace core::id;
226 
227  template_pose.residue( 1 ); // force a refold.
228 
229  for ( ResMap::const_iterator it=ghost_map.begin(); it != ghost_map.end(); it++ ) {
230  Size const & res( it->first );
231  Size const & template_res( it->second );
232 
233  for( Size j = 1; j <= pose.residue_type( res ).natoms(); j++ ) {
234 
235  if ( pose.residue_type( res ).atom_name( j ) !=
236  template_pose.residue_type( template_res ).atom_name( j ) ) {
237  std::cout << "PROBLEM! " << res << " " << pose.residue( res ).atom_name( j ) << " != " <<
238  template_res << " " << template_pose.residue( template_res ).atom_name( j ) << std::endl;
239  utility_exit_with_message( "mismatch in ghost pose" );
240  }
241 
242  pose.set_xyz( AtomID( j, res ), template_pose.xyz( AtomID( j, template_res ) ) );
243 
244  }
245 
246  }
247 
248  pose.residue( 1 ); // force a refold.
249  }
250 
251  ///////////////////////////////////////////////////////////////////////////
253  StepWiseScreener::figure_out_fold_tree( ResMap const & ghost_map ) const {
254 
255  Size prev_res( 0 ), total_res( 0 );
256  utility::vector1< Size > cutpoints;
257 
258  for ( ResMap::const_iterator it=ghost_map.begin(); it != ghost_map.end(); it++ ) {
259  Size const & res( it->first );
260  Size const & template_res( it->second );
261 
262  std::cout << "MAPPING " << res << " --> " << template_res << std::endl;
263 
264  if ( (template_res-1) != prev_res ) cutpoints.push_back( res-1 );
265  prev_res = template_res;
266 
267  total_res = res;
268  }
269 
270  core::kinematics::FoldTree f( total_res );
271 
272  for ( Size n = 1; n <= cutpoints.size(); n++ ) {
273  std::cout << "Adding jump across: " << cutpoints[ n ] << std::endl;
274  f.new_jump( cutpoints[ n ], cutpoints[ n ] +1, cutpoints[ n ] );
275  }
276 
277  return f;
278 
279  }
280 
281 
282  ///////////////////////////////////////////////////////////////////////////
283  void
285 
286  core::pose::remove_variant_type_from_pose_residue( pose, "N_ACETYLATION", 1 );
287  core::pose::add_variant_type_to_pose_residue( pose, "LOWER_TERMINUS", 1 );
288 
289  core::pose::remove_variant_type_from_pose_residue( pose, "C_METHYLAMIDATION", pose.total_residue() );
290  core::pose::add_variant_type_to_pose_residue( pose, "UPPER_TERMINUS", pose.total_residue() );
291 
293 
294  // get DSSP, assign secondary structure
295  core::scoring::dssp::Dssp dssp_obj( pose );
296  dssp_obj.insert_ss_into_pose( pose );
297  //pose.dump_pdb( "CENTROID.pdb" );
298 
299  }
300 
301  ////////////////////////////////////////////////////////////////////////////
302  void
304  Size const which_res,
305  Size & count,
306  core::pose::Pose & pose )
307  {
308 
309  using namespace core::chemical;
310  using namespace core::scoring;
311 
312  Size const n = moving_residues_[ which_res ];
313 
314  MainChainTorsionSetList main_chain_torsion_set_list;
315  get_main_chain_torsion_set_list( n, pose, main_chain_torsion_set_list );
316 
317  for ( Size k = 1; k <= main_chain_torsion_set_list.size(); k++ ) {
318 
319  MainChainTorsionSet const & main_chain_torsion_set( main_chain_torsion_set_list[ k ] );
320 
321  pose.set_phi( n, main_chain_torsion_set.phi() );
322  pose.set_psi( n, main_chain_torsion_set.psi() );
323  pose.set_omega( n, main_chain_torsion_set.omega() );
324 
325  main_chain_torsion_set_for_moving_residues_[ which_res ] = main_chain_torsion_set;
326 
327  if ( which_res == moving_residues_.size() ) {
328 
329  count++;
330  std::string const tag = "S_"+ ObjexxFCL::lead_zero_string_of( count, 5 );
331  filter_and_output( pose, tag );
332 
333  } else {
334  sample_residues_recursively( which_res+1, count, pose );
335  }
336 
337  }
338 
339  }
340 
341  ///////////////////////////////////////////////////////////////////////////////
342  void
344  std::string const & tag )
345  {
346  using namespace core::scoring;
347  using namespace core::chemical;
348  using namespace core::pose;
349 
350  if ( get_native_pose() && rmsd_cutoff_ > 0.0 ) {
352  TR << "CHECKING: decoy " << tag << ": " << rmsd << " vs. filter " << rmsd_cutoff_ << std::endl;
353  if ( rmsd > rmsd_cutoff_ ) return;
354  }
355 
356  Real centroid_score( 0.0 );
357  if ( centroid_screen_ ) {
358 
359  if ( ghost_loops_ ) {
360  //this may be a little inefficient, since all internal dofs needs to be recalculated. Its safe, though, I think.
362 
363  centroid_score = (*centroid_scorefxn_)( *ghost_pose_ ); // pose with loops excised
364 
365  Real const centroid_vdw = ghost_pose_->energies().total_energies()[ vdw ];
366  if ( apply_vdw_cut_ && centroid_vdw > centroid_vdw_ref_ ) return;
367 
368  } else {
369 
370  centroid_score = (*centroid_scorefxn_)( pose );
371  // Keep running tabs on best score seen so far.
372  if ( centroid_score < centroid_score_ref_ ) centroid_score_ref_ = centroid_score;
373  }
374 
375  Real const centroid_score_diff = centroid_score - centroid_score_ref_;
376 
377  if ( centroid_score_diff > centroid_score_diff_cut_ ) return;
378 
379  //std::cout << "COMPARING " << centroid_score << " " << centroid_score_ref_ << std::endl;
380 
381  }
382 
384  centroid_scores_.push_back( centroid_score );
385 
386  if ( silent_file_.size() > 0 ) {
387 
388  if ( ghost_loops_ ) {
390  } else {
392  }
393 
394  }
395 
396 
397  }
398 
399 
400  //////////////////////////////////////////////////////////////////////
401  // This could even be its own class...
402  void
404  Size const & n,
405  pose::Pose const & pose,
406  MainChainTorsionSetList & main_chain_torsion_set_list )
407  {
408  using namespace core::chemical;
409 
410  main_chain_torsion_set_list.clear();
411 
412  // following is totally hacky... would be much better to
413  // figure out which bins would sum to give probability > 99%, or something like that.
414  Real best_energy_cutoff = 0.8;
415  // Not really necessary...
416  // if ( pose.aa( n ) == aa_gly ) best_energy_cutoff = 0.8;
417  // if ( pose.aa( n ) == aa_pro ) best_energy_cutoff = 0.0;
418 
419  // A few special cases first.
420  if ( n == 1 && !pose.residue( 1 ).has_variant_type( "N_ACETYLATION" ) ){
421 
422  // If we're at the N-terminal, there's no point in sampling phi -- just a dinky hydrogen.
423  // basically slave the phi to the psi.
424  get_main_chain_torsion_set_list_n_terminus( n, pose, best_energy_cutoff, main_chain_torsion_set_list );
425 
426  } else if ( n == pose.total_residue() && !pose.residue( n ).has_variant_type( "C_METHYLAMIDATION" ) ){
427 
428  // If we're at the C-terminal, there's no point in sampling psi -- just an oxygen.
429  // basically slave the psi to the phi.
430  get_main_chain_torsion_set_list_c_terminus( n, pose, best_energy_cutoff, main_chain_torsion_set_list );
431 
432  } else if ( n > moving_residues_[ 1 ] &&
433  n < moving_residues_[ moving_residues_.size() ] ) {
434 
435  // Trying coarse sample for internal residues -- otherwise number of conformations really blows up.
436 
437  get_main_chain_torsion_set_list_coarse( n, pose, main_chain_torsion_set_list );
438 
439  //get_main_chain_torsion_set_list_full( n, pose, best_energy_cutoff, main_chain_torsion_set_list );
440 
441  } else {
442 
443  /////////////////
444  // General case.
445  /////////////////
446  get_main_chain_torsion_set_list_full( n, pose, best_energy_cutoff, main_chain_torsion_set_list );
447 
448  }
449 
450  // CHEAT -- later can use secondary structure.
451  if ( filter_native_big_bins_ ) filter_native_BIG_BINS( n, main_chain_torsion_set_list );
452 
453  }
454 
455  /////////////////////////////////////////////////////////////////////////////////////
456  void
458  Size const & n,
459  pose::Pose const & pose,
460  MainChainTorsionSetList & main_chain_torsion_set_list )
461  {
462  using namespace core::chemical;
463 
464  // Later, can individually dial in cluster centers based on careful
465  // inspection of residue-specific rama plots. For now, this is basically a quick hack.
466  if ( pose.aa( n ) == aa_pro ) {
467 
468  main_chain_torsion_set_list.push_back( MainChainTorsionSet( -70.0, -30.0 ) );
469  main_chain_torsion_set_list.push_back( MainChainTorsionSet( 60.0, 140.0 ) );
470 
471  } else if ( pose.aa( n ) == aa_gly ) {
472 
473  main_chain_torsion_set_list.push_back( MainChainTorsionSet( -80.0, -10.0 ) );
474  main_chain_torsion_set_list.push_back( MainChainTorsionSet( -70.0, 160.0 ) );
475  main_chain_torsion_set_list.push_back( MainChainTorsionSet( 90.0, 10.0 ) );
476  main_chain_torsion_set_list.push_back( MainChainTorsionSet( 100.0, 180.0 ) );
477 
478  } else {
479 
480  main_chain_torsion_set_list.push_back( MainChainTorsionSet( -70.0, -30.0 ) );
481  main_chain_torsion_set_list.push_back( MainChainTorsionSet( -70.0, 140.0 ) );
482  main_chain_torsion_set_list.push_back( MainChainTorsionSet( 50.0, 50.0 ) );
483 
484  }
485 
486  }
487 
488 
489  /////////////////////////////////////////////////////////////////////////////////////
490  void
492  MainChainTorsionSetList & main_chain_torsion_set_list )
493 
494  {
495  //generic -- a residue in the middle of the loop
496  for (Size i = 1; i <= n_sample_; i++ ) {
497  for (Size j = 1; j <= n_sample_; j++ ) {
498  Real const phi = get_rotamer_angle( i, n_sample_ );
499  Real const psi = get_rotamer_angle( j, n_sample_ );
500 
501  if ( ramachandran_.eval_rama_score_residue( pose.aa( n ), phi, psi ) > best_energy_cutoff ) {
502  continue;
503  }
504 
505  main_chain_torsion_set_list.push_back( MainChainTorsionSet( phi, psi ) );
506 
507  }
508  }
509  }
510 
511  /////////////////////////////////////////////////////////////////////////////////////
512  void
514  MainChainTorsionSetList & main_chain_torsion_set_list )
515  {
516  assert( n == 1);
517  for (Size j = 1; j <= n_sample_; j++ ) {
518  Real const psi = get_rotamer_angle( j, n_sample_ );
519  Real best_phi = 0.0;
520  Real best_energy = 999999.9999;
521  for (Size i = 1; i <= n_sample_; i++ ) {
522  Real const phi = get_rotamer_angle( i, n_sample_ );
523  Real temp_rama = ramachandran_.eval_rama_score_residue( pose.aa( n ), phi, psi );
524  if ( temp_rama < best_energy ) {
525  best_energy = temp_rama;
526  best_phi = phi;
527  }
528  }
529  if ( best_energy < best_energy_cutoff ){
530  main_chain_torsion_set_list.push_back( MainChainTorsionSet( best_phi, psi ) );
531  }
532  }
533  }
534 
535  /////////////////////////////////////////////////////////////////////////////////////
536  void
538  MainChainTorsionSetList & main_chain_torsion_set_list )
539  {
540  for (Size i = 1; i <= n_sample_; i++ ) {
541  Real const phi = get_rotamer_angle( i, n_sample_ );
542 
543  Real best_psi = 0.0;
544  Real best_energy = 999999.9999;
545  for (Size j = 1; j <= n_sample_; j++ ) {
546  Real const psi = get_rotamer_angle( j, n_sample_ );
547  Real temp_rama = ramachandran_.eval_rama_score_residue( pose.aa( n ), phi, psi );
548  if ( temp_rama < best_energy ) {
549  best_energy = temp_rama;
550  best_psi = psi;
551  }
552  }
553  if ( best_energy < best_energy_cutoff ){
554  main_chain_torsion_set_list.push_back( MainChainTorsionSet( phi, best_psi ) );
555  }
556  }
557  }
558 
559 
560  /////////////////////////////////////////////////////////////////////////////////////
561  void
563  MainChainTorsionSetList & main_chain_torsion_set_list )
564  {
565  TR << "JUNCTION RESIDUE --> PREPEND " << n << std::endl;
566 
567  // we are prepending and this is the junction residue. sample phi only!
568  Real const psi = pose.psi( n );
569  for (Size i = 1; i <= n_sample_; i++ ) {
570  Real const phi = get_rotamer_angle( i, n_sample_ );
571  if ( ramachandran_.eval_rama_score_residue( pose.aa( n ), phi, psi ) > best_energy_cutoff ) {
572  continue;
573  }
574  main_chain_torsion_set_list.push_back( MainChainTorsionSet( phi, psi ) );
575  }
576  }
577 
578  /////////////////////////////////////////////////////////////////////////////////////
579  void
581  MainChainTorsionSetList & main_chain_torsion_set_list )
582  {
583  TR << "JUNCTION RESIDUE --> APPEND " << n << std::endl;
584 
585  // we are appending and this is the junction residue. sample psi only!
586  Real const phi = pose.phi( n );
587  for (Size j = 1; j <= n_sample_; j++ ) {
588  Real const psi = get_rotamer_angle( j, n_sample_ );
589  if ( ramachandran_.eval_rama_score_residue( pose.aa( n ), phi, psi ) > best_energy_cutoff ) {
590  continue;
591  }
592  main_chain_torsion_set_list.push_back( MainChainTorsionSet( phi, psi ) );
593  }
594 
595  }
596 
597  //////////////////////////////////////////////////////////////////////////////
598  // Coarse -- see set_ss_from_phipsi in core/pose/util.cc.
599  //////////////////////////////////////////////////////////////////////////////
600  Size
602  {
603  if ( phi < -20.0 && psi > -90.0 && psi < -10.0 ) {
604  return 1;
605  } else if ( phi < -20.0 && (psi > 20.0 || psi < -170.0) ) {
606  return 2;
607  }
608  return 3;
609  }
610 
611 
612  ///////////////////////////////////////////////////////////////
613  // Check set_ss_from_phipsi -- pretty coarse. Could
614  // later use some guess for strand/helix propensity as an
615  // energy term or something.
616  ///////////////////////////////////////////////////////////////
617  void
619  Size const & n,
620  MainChainTorsionSetList & main_chain_torsion_set_list )
621  {
622 
623  if ( get_native_pose() == 0 ) {
624  utility_exit_with_message( "Filter based on native big bins, but not native specified?" );
625  }
626 
627  //big bin not really specified for end residues...
628  pose::Pose const & native_pose( *get_native_pose() );
629 
630  if ( n == 1 ) return;
631  if ( n == native_pose.total_residue() ) return;
632 
633  Size const big_bin = get_big_bin( native_pose.phi(n), native_pose.psi(n) );
634  if ( big_bin == 3 ) return; // If loop, no constraints.
635 
636  MainChainTorsionSetList main_chain_torsion_set_list_new;
637 
638  for ( Size n = 1; n <= main_chain_torsion_set_list.size(); n++ ) {
639  Real const phi = main_chain_torsion_set_list[ n ].phi();
640  Real const psi = main_chain_torsion_set_list[ n ].psi();
641  if ( ( big_bin == 1 && get_big_bin( phi, psi ) == 1 ) ||
642  ( big_bin == 2 && get_big_bin( phi, psi ) == 2 ) ) {
643  main_chain_torsion_set_list_new.push_back( main_chain_torsion_set_list[ n ] );
644  }
645  }
646 
647  main_chain_torsion_set_list = main_chain_torsion_set_list_new;
648 
649  }
650 
651  ///////////////////////////////////////////////////////////////////
652  void
654 
655  std::list< std::pair< Real, Size > > energy_index_list;
656  for (Size n = 1; n <= centroid_scores_.size(); n++ ) {
657  energy_index_list.push_back( std::make_pair( centroid_scores_[n], n ) ) ;
658  }
659  energy_index_list.sort();
660 
661  utility::vector1< MainChainTorsionSetList > main_chain_torsion_sets_for_moving_residues_new;
662 
663  for (Size n = 1; n <= centroid_scores_.size(); n++ ) {
664  if ( n > nstruct_centroid_ ) break;
665  main_chain_torsion_sets_for_moving_residues_new.push_back(
667  }
668 
669  main_chain_torsion_sets_for_moving_residues_ = main_chain_torsion_sets_for_moving_residues_new;
670  }
671 
672 
673  //////////////////////////////////////////////////////////////////////////
674  void
676  silent_file_ = silent_file;
677  }
678 
679  //////////////////////////////////////////////////////////////////////////
680  void
682  rmsd_cutoff_ = setting;
683  }
684 
685  //////////////////////////////////////////////////////////////////////////
686  void
688  n_sample_ = setting;
689  }
690 
691  //////////////////////////////////////////////////////////////////////////
692  void
694  nstruct_centroid_ = setting;
695  }
696 
697  //////////////////////////////////////////////////////////////////////////
698  void
700  centroid_scorefxn_ = scorefxn;
701  }
702 
703 
704  //////////////////////////////////////////////////////////////////////////
705  void
707  filter_native_big_bins_ = setting;
708  }
709 
710  //////////////////////////////////////////////////////////////////////////
711  void
712  StepWiseScreener::set_centroid_screen( bool const & setting ){
713  centroid_screen_ = setting;
714  }
715 
716  //////////////////////////////////////////////////////////////////////////
717  void
718  StepWiseScreener::set_ghost_loops( bool const & setting ){
719  ghost_loops_ = setting;
720  }
721 
722  //////////////////////////////////////////////////////////////////////////
723  void
724  StepWiseScreener::set_apply_vdw_cut( bool const & setting ){
725  apply_vdw_cut_ = setting;
726  }
727 
728  //////////////////////////////////////////////////////////////////////////
729  void
731  centroid_score_diff_cut_ = setting;
732  }
733 
734  //////////////////////////////////////////////////////////////////////////
737  {
739  }
740 
741 
742 
743 }
744 }