Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
FragmentClaimer.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 TopologyBroker
11 /// @brief top-class (Organizer) of the TopologyBroker mechanism
12 /// @detailed responsibilities:
13 /// @author Oliver Lange
14 
15 // Unit Headers
17 
18 // Package Headers
22 
23 // Project Headers
24 #include <core/pose/Pose.hh>
26 #include <core/kinematics/util.hh> //visualize
27 #include <utility/exit.hh>
28 
29 #include <core/fragment/FragSet.hh>
31 
32 #include <protocols/loops/Loop.hh>
34 
35 // ObjexxFCL Headers
36 
37 // Utility headers
38 //#include <utility/io/izstream.hh>
39 //#include <utility/io/ozstream.hh>
40 //#include <utility/io/util.hh>
41 #include <basic/Tracer.hh>
42 
43 #include <utility/vector1.hh>
44 
45 
46 //#include <basic/options/option.hh>
47 
48 //// C++ headers
49 
50 // option key includes
51 
52 
53 static basic::Tracer tr("protocols.topo_broker",basic::t_info);
54 //static numeric::random::RandomGenerator RG(181134);
55 
56 namespace protocols {
57 namespace topology_broker {
58 
59 using namespace core;
60 
62  mover_( NULL ),
63  mover_tag_( "NoTag" ),
64  bInitDofs_( false ),
65  claim_right_( DofClaim::CAN_INIT )
66 {
68 }
69 
71  TopologyClaimer( weight ),
72  mover_( mover ),
73  mover_tag_( tag ),
74  bInitDofs_( false ),
75  claim_right_( DofClaim::CAN_INIT )
76 {
78 }
79 
81  mover_( mover )
82 {
83  if ( mover_) mover_tag_ = mover_->type();
85 }
86 
87 
88 /// @details SHALLOW COPY to duplicate the pre-9/7/2009 behavior provided
89 /// by the compiler.
91  Parent( src )
92 {
93  movemap_ = src.movemap_;
94  mover_ = src.mover_;
95  mover_tag_ = src.mover_tag_;
96  bInitDofs_ = src.bInitDofs_;
98  region_ = src.region_;
99 }
100 
101 
103 
104 void FragmentClaimer::get_sequence_region( std::set< Size >& start_region ) const {
105  start_region.clear();
106  tr.Trace << "FragmentClaimer::get_sequence_region" << std::endl;
107  for ( core::Size i = 1; i<= active_sequence_labels_.size(); ++i ) {
108  tr.Trace << " look for label : " << active_sequence_labels_[ i ] << std::endl;
110  for ( core::Size pos = seq_claim.offset(); pos <= seq_claim.last_residue(); ++pos ) {
111  start_region.insert( pos );
112  }
113  }
114 }
115 
116 
118 
119  if ( region_.size() ) {
121  } else {
122  movemap_->set_bb( true ); //Support only BB Claims right now
123  }
124  movemap_->set_jump( true );
125 
126  core::fragment::InsertMap insert_map;
127  core::fragment::InsertSize insert_size;
128  if ( !mover_ || !mover_->fragments() ) return;
129 
130  mover_->fragments()->generate_insert_map( *movemap_, insert_map, insert_size );
131 
132  if ( insert_size.size() == 0 ){
133  std::cerr << "Insert Size is 0 in FragmentClaimer::generate_claims( .. ). File: " << __FILE__ << " Line: " << __LINE__ << std::endl;
134  utility_exit_with_message("Cannot continue - Error generating insert map" );
135  }
136 
137  Size last_insert( insert_size.back() );
138  for ( Size i = 1; i<=last_insert; ++i ) {
139  insert_size.push_back( 0 );
140  }
141 
142  Size const total_insert ( insert_map.size() );
143  tr.Trace << "insert_size: ";
144  if ( tr.Trace.visible() && total_insert ) for ( Size i = 1; i<=insert_map[ total_insert ]; i++ ) tr.Trace << " " << insert_size[ i ];
145 
146  for ( core::fragment::InsertMap::const_iterator it = insert_map.begin(), eit = insert_map.end();
147  it != eit; ++it ) {
148  Size const start ( *it );
149  Size const length( insert_size[ start ] );
150  new_claims.push_back( new BBClaim( this, *it, claim_right_ ) );
151  for ( Size i = start + 1; i < start+length && insert_size[ i ] == 0; i++ ) {
152  new_claims.push_back( new BBClaim( this, i, claim_right_ ) );
153  }
154  }
155  tr.Trace << std::endl;
156 }
157 
159  was_declined.toggle( *movemap_, false ); //this could even be BaseClass --- or BaseClass with MoveMap...
160  tr.Debug << "OK: FragmentClaimer couldn't get " << was_declined << std::endl;
161  return true; // full tolerance here ---
162 }
163 
165  mover_ = mover;
166 }
167 
169  mover_tag_ = str;
170  if ( mover_ ) mover_->type( str );
171 }
172 
173 
175  return mover_;
176 }
177 
178 
179 void FragmentClaimer::initialize_dofs( core::pose::Pose& pose, DofClaims const& init_dofs, DofClaims& /*failed_to_init*/ ) {
180  //need to copy coords and jumps --- if chunks were idealized no problem .... but non-idealized stuff ?
181  //also take care of fullatom vs centroid...
182 
183  core::fragment::InsertMap insert_map;
184  core::fragment::InsertSize insert_size;
185  kinematics::MoveMap test_map;
186  test_map.set_bb( true );
187  test_map.set_jump( true );
188  if ( mover_ ) {
189  mover_->fragments()->generate_insert_map( test_map, insert_map, insert_size );
190  }
191 
192  Size const total_insert ( insert_map.size() );
193  tr.Trace << "size of insertmap: " << total_insert << " -- ";
194  for ( Size i = 1; i<=total_insert; i++ ) tr.Trace << " " << insert_map[ i ];
195  tr.Trace << "insert_size: ";
196  if ( total_insert ) for ( Size i = 1; i<=insert_map[ total_insert ]; i++ ) tr.Trace << " " << insert_size[ i ];
197  tr.Trace << std::endl;
198 
200  init_map->set_bb( false );
201  init_map->set_jump( false );
202 
203  for ( DofClaims::const_iterator it = init_dofs.begin(), eit = init_dofs.end();
204  it != eit; ++it ) {
205  if ( (*it)->owner()==this ) {
206  (*it)->toggle( *init_map, true );
207  //don't really know how this looks for jumps
208  // Size pos( (*it)->pos( 1 ) );
209  //if ( pos >= insert_size.size() + insert_size.back() || ( pos<= insert_size.size() && !insert_size[ pos ] ) ) {
210  // failed_to_init.push_back( *it );
211  //}
212  }
213  }
214 
215  if ( mover_ && bInitDofs_ ) {
216  mover_->set_movemap( init_map );
217  mover_->apply_at_all_positions( pose );
218  tr.Info << type() << " " << label() << " init-dof-map: ";
220  tr.Info << std::endl;
221  }
222  if ( mover_ ) mover_->set_movemap( movemap_ );
223  tr.Info << type() << " " << label() << " movemap: ";
225  tr.Info << std::endl;
226 
227 }//initialize dofs
228 
229 bool FragmentClaimer::read_tag( std::string tag, std::istream& is ) {
230  loops::PoseNumberedLoopFileReader loop_file_reader;
231  loop_file_reader.hijack_loop_reading_code_set_loop_line_begin_token( "RIGID" );
232  if ( tag == "REGION" ) {
233  loops::SerializedLoopList loops = loop_file_reader.read_pose_numbered_loops_file( is, type(), false /*no strict checking */ );
234  region_ = loops::Loops( loops );
235  } else if ( tag == "region_file" || tag == "REGION_FILE" ) {
236  std::string file;
237  is >> file;
238  std::ifstream infile( file.c_str() );
239 
240  if (!infile.good()) {
241  utility_exit_with_message( "[ERROR] Error opening RBSeg file '" + file + "'" );
242  }
243  loops::SerializedLoopList loops = loop_file_reader.read_pose_numbered_loops_file( infile, file, false /*no strict checking */ );
244  region_ = loops::Loops( loops ); // <==
245  } else if ( tag == "SEQUENCE_REGION" ) {
247  is >> label;
248  active_sequence_labels_.push_back( label );
249  tr.Trace << type() << " reads SEQUENCE_REGION with label " << label;
250  } else return Parent::read_tag( tag, is );
251  return true;
252 }
253 
255  if ( active_sequence_labels_.size() == 0 ) {
256  active_sequence_labels_.push_back("main");
257  }
258 }
259 
261  return mover_;
262 }
263 
264 } //topology_broker
265 } //protocols