25 #include <basic/Tracer.hh>
27 #include <basic/options/option.hh>
29 #include <basic/options/keys/loops.OptionKeys.gen.hh>
39 #include <numeric/xyzVector.hh>
40 #include <numeric/xyz.functions.hh>
41 #include <numeric/random/random.hh>
43 #include <utility/pointer/ReferenceCount.hh>
52 #include <utility/vector1.hh>
56 namespace rbsegment_relax {
60 static numeric::random::RandomGenerator
rbseg_RG(18633);
61 static basic::Tracer
TR(
"FragInsertAndAlignMover");
72 initialize_rb_fragments(rbsegs,ref_pose,randomness );
84 using namespace basic::options;
86 if ( !option[ OptionKeys::loops::vall_file ].user() ) {
87 TR.Error <<
"FragInsertAndAlignMover::initialize_rb_fragments() with no vall! Specify location with -loops::vall" << std::endl;
91 if ( rbsegs.size() == 0 ) {
92 TR.Error <<
"FragInsertAndAlignMover::initialize_rb_fragments() called with empty RBSeglist! continuing ..." << std::endl;
105 for (
int i = 1; i <= (
int)rbsegs.size(); ++i) {
106 if (rbsegs[i].isCompound()) {
107 TR.Warning <<
"[ WARNING ] FragInsertAndAlignMover::initialize_rb_fragments() undefined for compound segments! continuing..." << std::endl;
111 int frag_start = rbsegs[i][1].start();
112 int frag_size = rbsegs[i][1].end() - frag_start + 1;
118 for (
int k=0; k<frag_size; ++k)
121 std::string frag_seq = input_seq.substr( rbsegs[i][1].
start()-1, frag_size );
123 200, cas, frag_seq, rbsegs[i][1].char_type(), frames_[frames_.size()], randomness
126 TR.Debug <<
"Read " << frames_.size() <<
" frames" << std::endl;
131 if (frames_.size() == 0) {
132 TR.Warning <<
"[ WARNING ] FragInsertAndAlignMover::apply()called with no frames defined! continuing..." << std::endl;
137 int idx = numeric::random::random_range( 1, frames_.size() );
143 return "FragInsertAndAlignMover";
150 TR.Debug <<
"FragInsertAndAlignMover::apply() called [" << start <<
" , " << start+len-1 <<
"]" << std::endl;
153 ObjexxFCL::FArray2D< core::Real > init_coords( 3, len );
155 for (
int i=0; i<(
int)len; ++i) {
158 for (
int j=0; j<3; ++j)
159 init_coords(j+1,i+1) = x_i[j];
162 for (
int i=0; i<(
int)len; ++i)
163 for (
int j=0; j<3; ++j )
164 init_coords(j+1,i+1) -= com1[j];
169 for (
int i=0; i<(
int)len; ++i) {
175 core::Size toget = numeric::random::random_range( 1, frames_[idx]->nr_frags() );
176 frames_[idx]->apply( toget, pose );
179 ObjexxFCL::FArray2D< core::Real > final_coords( 3, len );
181 for (
int i=0; i<(
int)len; ++i) {
184 for (
int j=0; j<3; ++j)
185 final_coords(j+1,i+1) = x_i[j];
188 for (
int i=0; i<(
int)len; ++i)
189 for (
int j=0; j<3; ++j )
190 final_coords(j+1,i+1) -= com2[j];
194 ObjexxFCL::FArray1D< numeric::Real > ww( len, 1.0 );
195 ObjexxFCL::FArray2D< numeric::Real > uu( 3, 3, 0.0 );
198 numeric::model_quality::findUU( final_coords, init_coords, ww, len, uu, ctx );
200 R.xx( uu(1,1) ); R.xy( uu(2,1) ); R.xz( uu(3,1) );
201 R.yx( uu(1,2) ); R.yy( uu(2,2) ); R.yz( uu(3,2) );
202 R.zx( uu(1,3) ); R.zy( uu(2,3) ); R.zz( uu(3,3) );
208 for (
Size i = 0; i < len; ++i ) {
212 pose.
set_xyz(
id, R * ( pose.
xyz(
id) - com2) + com1 );
219 for (
int i=1; i<=(
int)frames_.size(); ++i) {
220 apply( start_pose , i ,
true);