Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FASelectSlidingWindowLoopClosure.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
11 /// @brief
12 /// @detailed
13 /// @author Oliver Lange
14 ///
15 
16 
17 // Unit Headers
19 
20 // Package Headers
23 #include <protocols/loops/util.hh>
24 
25 // Project Headers
26 #include <core/pose/Pose.hh>
27 #include <core/pose/util.hh>
28 
30 // AUTO-REMOVED #include <core/kinematics/FoldTree.hh>
31 
33 // AUTO-REMOVED #include <core/scoring/rms_util.hh>
35 
37 #include <core/fragment/Frame.hh>
40 #include <core/fragment/FragSet.hh>
41 #include <core/fragment/FragCache.hh> // for FragStore
42 
43 // AUTO-REMOVED #include <protocols/relax_protocols.hh>
44 //
45 //#include <protocols/jumping/SecondaryStructure.hh>
46 
47 #include <basic/options/option.hh>
48 //#include <basic/options/keys/run.OptionKeys.gen.hh>
49 #include <basic/options/keys/fast_loops.OptionKeys.gen.hh>
50 
51 // ObjexxFCL Headers
52 
53 // Utility headers
54 #include <basic/Tracer.hh>
55 // AUTO-REMOVED #include <numeric/random/random.hh>
56 #include <basic/options/keys/out.OptionKeys.gen.hh>
57 #include <basic/options/keys/loops.OptionKeys.gen.hh>
58 #include <utility/io/ozstream.hh>
59 //numeric headers
60 
61 #include <basic/options/option_macros.hh>
62 
65 #include <protocols/loops/Loops.hh>
66 // AUTO-REMOVED #include <protocols/moves/MoverStatistics.hh>
68 #include <utility/vector1.hh>
69 #include <ObjexxFCL/format.hh>
70 
71 //Auto Headers
72 
73 
74 //Auto using namespaces
75 namespace ObjexxFCL { namespace fmt { } } using namespace ObjexxFCL::fmt; // AUTO USING NS
76 //Auto using namespaces end
77 
78 
79 OPT_1GRP_KEY( Real, fast_loops, rmsd_dump )
80 
81 namespace protocols {
82 namespace loops {
83 namespace loop_closure {
84 namespace ccd {
85 
86 using namespace core;
87 using namespace pose;
88 
89 //static numeric::random::RandomGenerator RG(4189); // <- Magic number, do not change it!
90 static basic::Tracer tr("protocols.loops.loop_closure.ccd.FASelectSlidingWindowLoopClosure");
91 
92 const Real REALLY_BAD_SCORE ( 1000000000.0 );
93 
94 FASelectSlidingWindowLoopClosure::FASelectSlidingWindowLoopClosure(
95  fragment::FragSetCOP fragset,
96  scoring::ScoreFunctionOP scorefxn,
98 ) : WidthFirstSlidingWindowLoopClosure( fragset, scorefxn, movemap )
99 {
100  set_defaults();
101 }
102 
105 {
106  set_defaults();
107 }
108 
110 
113  return "FASelectSlidingWindowLoopClosure";
114 }
115 
116 void
119  keep_fragments(); //we need this... not only for debug
120 }
121 
123  using namespace basic::options;
124  using namespace basic::options::OptionKeys;
125  NEW_OPT( fast_loops::rmsd_dump, "dump all pdbs for loops that are below in rmsd", 2.0 );
126 }
127 
128 
129 void
131  using namespace fragment;
132  runtime_assert( closure_fragments() );
133  // in case that we jump out... add extra scrores
134  core::pose::setPoseExtraScores( more_cut, "post_relax_looprms", -1 );
135  core::pose::setPoseExtraScores( more_cut, "fa_score", -1 );
136 
137  Loops loops;
138  loops.add_loop( loop_ ); //for looprms
139 
140 
141  //sort list of fragments by score
142  typedef std::list< std::pair< core::Real, FragID > > FragList;
143  FragList scored_frags;
144 
145  FragStore< Real > score_store(SCORE_FRAG_STORE);
146  FragStore< Real > rms_store("loop_rms");
147  FragStore< Real > fascore_store("fa_score");
148  FragStore< Real > post_relax_rms_store("post_relax_looprms");
149  FragStore< Real > vdw_store(VDW_FRAG_STORE);
150  FragStore< Real > chainbreak_store("chainbreak");
151  FragStore< Real > overlap_store("overlap");
152 
153 
154  for ( FragID_Iterator it = closure_fragments()->begin(),
155  eit = closure_fragments()->end(); it != eit; ++it ) {
156  scored_frags.push_back( std::make_pair( score_store.retrieve( *it ), *it ) );
157  }
158  scored_frags.sort();
159  scored_frags.reverse();
160  core::Size const Ntot( scored_frags.size() );
161  core::Size const Ntest( Ntot ); //0.1*Ntot+0.5 );
162  tr.Debug << "try " << Ntest << " of " << Ntot << " fragments in full-atom mode" << std::endl;
163 
165  FragID best_fragment_;
166 
167  ///* score 10% frags with full-atom
168  std::string frag_file=basic::options::option[ basic::options::OptionKeys::out::file::silent ]()+"_best_frags";
169 
170  FragList::iterator frag_list_it = scored_frags.begin();
171  for ( Size ct = 1; ct <= Ntest; ct ++, ++frag_list_it ) {
172  FragID const& frag( frag_list_it->second );
173 
174  Pose centroid_pose( more_cut );
175  //fragments are smaller than the full loop region ...
176  // apply to more_cut and steal full loop region to transfer to fa_pose
177  frag.apply( movemap(), centroid_pose );
178 
179  Pose fa_pose( *fa_pose_ );
180  fa_pose.fold_tree( more_cut.fold_tree() );
183 
184  if ( tr.Trace.visible() ) fa_pose.dump_pdb("set_fold_tree_fa_pose.pdb");
185 
186 
187  FrameOP fa_frame_ = new Frame( loop_.start(), new FragData( new BBTorsionSRFD, loop_.size() ) );
188  fa_frame_->steal( centroid_pose );
189  fa_frame_->apply( 1, fa_pose );
190 
191  if ( tr.Trace.visible() ) fa_pose.dump_pdb("fa_pose.pdb");
192  if ( tr.Trace.visible() ) centroid_pose.dump_pdb( "centroid.pdb" );
193 
194  if ( rms_store.retrieve( frag ) < basic::options::option[ basic::options::OptionKeys::fast_loops::rmsd_dump ]() ) {
195  output_debug_structure( centroid_pose, "_centroid");
196  output_debug_structure( fa_pose, "_fa_pre_relax");
197  }
198 
199  // full-atom relax
200  Real fa_score( fascore( fa_pose ) );
201 
202  if ( rms_store.retrieve( frag ) < basic::options::option[ basic::options::OptionKeys::fast_loops::rmsd_dump ]() ) {
203  output_debug_structure( fa_pose, "_fa_post_relax");
204  }
205 
206  Real post_relax_looprms( get_native_pose() ? loops::loop_rmsd( *get_native_pose(), fa_pose, loops, true /*CA*/ ) : -1.0 );
207  if ( tr.Trace.visible() ) fa_pose.dump_pdb("fa_relaxed_pose.pdb");
208 
209  if ( fa_score < best_score_ ) {
210  best_score_ = fa_score;
211  best_fragment_ = frag;
212  }
213 
214  fascore_store.store( frag, fa_score );
215  post_relax_rms_store.store( frag, post_relax_looprms );
216 
217  utility::io::ozstream frag_stream;
218  frag_stream.open_append( frag_file );
219 
220  Real const size_fraction( 1.0*frag.frame().length() / loop_.size());
221  frag_stream << RJ( 10, vdw_store.retrieve( frag ) )<< " "
222  << RJ( 10, score_store.retrieve( frag ) )<< " "
223  << RJ( 10, chainbreak_store.retrieve( frag) )<< " "
224  << RJ( 10, overlap_store.retrieve( frag ) )<< " "
225  << RJ( 10, rms_store.retrieve( frag ) )<< " "
226  << RJ( 10, fascore_store.retrieve( frag ) )<< " "
227  << RJ( 10, post_relax_rms_store.retrieve( frag ) )<< " "
228  << RJ( 10, size_fraction ) << " "
229  << get_current_tag() << std::endl;
230  }
231 
232 
233  if ( ! best_fragment_.frame().is_valid() ) {
234  throw( loops::EXCN_Loop_not_closed() );
235  }
236  //* apply winner and generate output, --- essentially copy from Parent class
237  best_fragment_.apply( movemap(), less_cut );
238  best_fragment_.apply( movemap(), more_cut );
239 
240  core::pose::setPoseExtraScores( more_cut, "loop_vdw_score", vdw_store.retrieve( best_fragment_ ));
241  core::pose::setPoseExtraScores( more_cut, "loop_chain_score", chainbreak_store.retrieve( best_fragment_ ));
242  core::pose::setPoseExtraScores( more_cut, "loop_total_score", score_store.retrieve( best_fragment_ ));
243  core::pose::setPoseExtraScores( more_cut, "loop_overlap_score", overlap_store.retrieve( best_fragment_ ));
244  core::pose::setPoseExtraScores( more_cut, "looprms", rms_store.retrieve( best_fragment_ ));
245  core::pose::setPoseExtraScores( more_cut, "post_relax_looprms", post_relax_rms_store.retrieve( best_fragment_ ));
246  core::pose::setPoseExtraScores( more_cut, "fa_score", fascore_store.retrieve( best_fragment_ ));
247 
248 
249 }
250  //select_final_loop
251 
253  using namespace basic::options;
254  Loops loops;
255  loops.add_loop( loop_ ); //for looprms
256 
258  scorefxn->show( std::cout, pose );
259  std::cout << std::endl;
260  // default move map
261  (*scorefxn)( pose ); //score to update tenAneighbour graph
262  bool const fix_natsc = basic::options::option[ basic::options::OptionKeys::loops::fix_natsc ];
263  kinematics::MoveMapOP mm_all_loops = new kinematics::MoveMap; // DJM tmp
264  loops_set_move_map( pose, loops, fix_natsc, *mm_all_loops); // DJM tmp
265 
266  // scorefxn->set_weight( scoring::chainbreak, 10 );
267  relax::FastRelax fast_relax( scorefxn, option[ OptionKeys::fast_loops::fast_relax_sequence_file ]() );
268  fast_relax.set_movemap( mm_all_loops );
269  fast_relax.apply( pose );
270  return (*scorefxn)( pose );
271 }
272 
274  fa_pose_ = new core::pose::Pose( fa_pose );
275 }
276 
277 } // namespace ccd
278 } // namespace loop_closure
279 } // namespace loops
280 } // namespace protocols