Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
StepWiseResidueSampler.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 StepWiseResidueSampler
11 /// @brief Not particularly fancy, just minimizes a list of poses.
12 /// @detailed
13 /// @author Rhiju Das
14 
15 
16 //////////////////////////////////
19 
20 //////////////////////////////////
21 #include <core/types.hh>
22 // AUTO-REMOVED #include <core/pack/task/PackerTask.hh>
25 #include <core/pose/Pose.hh>
29 // AUTO-REMOVED #include <core/scoring/Ramachandran.hh>
30 #include <basic/Tracer.hh>
33 
34 //GreenPacker
37 
38 // AUTO-REMOVED #include <numeric/angle.functions.hh>
39 
40 // AUTO-REMOVED #include <ObjexxFCL/format.hh>
41 #include <ObjexxFCL/string.functions.hh>
42 #include <ObjexxFCL/FArray1D.hh>
43 
44 #include <utility/exit.hh>
45 // AUTO-REMOVED #include <time.h>
46 
47 #include <string>
48 
49 #include <utility/vector1.hh>
50 
51 //Auto Headers
52 
53 
54 
55 using namespace core;
56 using core::Real;
57 
58 //////////////////////////////////////////////////////////////////////////
59 //////////////////////////////////////////////////////////////////////////
60 // Core routine for stepwise sampling of proteins (and probably other
61 // biopolymers soon). Take a starting pose and a list of residues to sample,
62 // and comprehensively sample all backbone torsion angles by recursion.
63 //////////////////////////////////////////////////////////////////////////
64 //////////////////////////////////////////////////////////////////////////
65 //////////////////////////////////////////////////////////////////////////
66 
67 static basic::Tracer TR( "protocols.swa.stepwise_residue_sampler" ) ;
68 
69 namespace protocols {
70 namespace swa {
71 
72  //////////////////////////////////////////////////////////////////////////
73  //constructor!
74  StepWiseResidueSampler::StepWiseResidueSampler(
75  utility::vector1< Size > const & moving_residues,
76  utility::vector1< MainChainTorsionSetList > const & main_chain_torsion_set_lists ):
77  moving_residues_( moving_residues ),
78  main_chain_torsion_set_lists_( main_chain_torsion_set_lists ),
79  scorefxn_( core::scoring::getScoreFunction() ),
80  green_packer_( new protocols::simple_moves::GreenPacker ),
81  silent_file_( "" ),
82  sfd_( new core::io::silent::SilentFileData)
83  {
84  }
85 
86  //////////////////////////////////////////////////////////////////////////
87  //destructor
89  {}
90 
91  //////////////////////////////////////////////////////////////////////////
92  //////////////////////////////////////////////////////////////////////
93  void
95  {
96 
97  //Size which_res( 1 );
98  // Size count( 1 );
99 
100  clock_t const time_start( clock() );
101 
103 
104  sample_residues( pose );
105 
106  std::cout << "Total time in StepWiseResidueSampler: " << clock() - time_start / CLOCKS_PER_SEC
107  << std::endl;
108 
109  }
110 
111 
114  return "StepWiseResidueSampler";
115  }
116 
117  ////////////////////////////////////////////////////////////////////////////
118  void
120  {
121 
122  using namespace core::chemical;
123  using namespace core::scoring;
124  using namespace core::pose;
125 
126  for ( Size k = 1; k <= main_chain_torsion_set_lists_.size(); k++ ) {
127 
128  MainChainTorsionSetList const & main_chain_torsion_set_list( main_chain_torsion_set_lists_[ k ] );
129 
130  for ( Size i = 1; i <= moving_residues_.size(); i++ ) {
131 
132  MainChainTorsionSet const & main_chain_torsion_set( main_chain_torsion_set_list[ i ] );
133 
134  Size const n = moving_residues_[ i ];
135  pose.set_phi( n, main_chain_torsion_set.phi() );
136  pose.set_psi( n, main_chain_torsion_set.psi() );
137  //Probably need to sample omega=0.0 for proline... easy fix, do it later.
138  pose.set_omega( n, main_chain_torsion_set.omega() );
139 
140  }
141 
142  std::string const tag = "S_"+ lead_zero_string_of( k-1, 5 );
143  TR << " Decoy " << tag << " : " << k << " out of " << main_chain_torsion_set_lists_.size() << std::endl;
144 
145  green_packer_->apply( pose );
146  (*scorefxn_)( pose );
147 
149 
150  }
151 
152  }
153 
154 
155  ////////////////////////////////////////////////////////////////////////////////
156  void
158  {
159  using namespace protocols::moves;
160  using namespace core::pack;
161  using namespace core::pack::task;
162  using namespace core::pack::task::operation;
163 
164  protocols::simple_moves::UserDefinedGroupDiscriminatorOP user_defined_group_discriminator( new UserDefinedGroupDiscriminator);
165  utility::vector1< Size > group_ids;
166 
167  Size current_group = 0;
168  Size spectator_group = 0;
169  for (Size i = 1; i <= nres; i++ ) {
170  bool found_it( false );
171  for (Size k = 1; k <= moving_residues_.size(); k++ ) {
172  if ( i == moving_residues_[k] ) {
173  found_it = true;
174  break;
175  }
176  }
177  if (found_it ) {
178  current_group = 0;
179  TR << "GREENPACKER SAMPLER " << i << std::endl;
180  } else {
181  if ( current_group == 0 ) spectator_group++;
182  current_group = spectator_group;
183  TR << "GREENPACKER SPECTATOR " << i << " --> group " << spectator_group << std::endl;
184  }
185  group_ids.push_back( current_group );
186  }
187 
188  user_defined_group_discriminator->set_group_ids( group_ids );
189  green_packer_->set_scorefunction( *scorefxn_ );
190  green_packer_->set_group_discriminator( user_defined_group_discriminator );
191 
192  TaskFactoryOP initial_task_factory( new TaskFactory );
193  initial_task_factory->push_back( new InitializeFromCommandline );
194  initial_task_factory->push_back( new RestrictToRepacking );
195  green_packer_->set_reference_round_task_factory( initial_task_factory );
196 
197  TaskFactoryOP general_task_factory( new TaskFactory );
198  general_task_factory->push_back( new InitializeFromCommandline );
199  general_task_factory->push_back( new RestrictToRepacking );
200  green_packer_->set_task_factory( general_task_factory );
201 
202  //green_packer_->reset();
203  }
204 
205 
206  //////////////////////////////////////////////////////////////////////////
207  void
209  silent_file_ = silent_file;
210  }
211 
212  //////////////////////////////////////////////////////////////////////////
213  void
215  scorefxn_ = scorefxn;
216  }
217 
218  //////////////////////////////////////////////////////////////////////////
221  return sfd_;
222  }
223 
224 
225 }
226 }