37 #include <basic/Tracer.hh>
43 #include <ObjexxFCL/FArray2D.hh>
46 #include <utility/io/izstream.hh>
49 #include <utility/vector1.hh>
50 #include <numeric/random/random.fwd.hh>
62 using namespace fragment;
64 static basic::Tracer
tr(
"protocols.jumping");
71 utility::io::izstream data( fname.c_str() );
72 tr.Info <<
"read ResiduePair jump-definitions from " << fname << std::endl;
74 utility_exit_with_message(
"Unable to open constraints file: " + fname +
"\n");
84 while ( getline(data, line ) ) {
85 std::istringstream in( line );
87 if ( tag ==
"BEGIN" ) {
90 }
else if ( tag ==
"END" ) {
91 residue_pair_jump->init_mini_pose();
92 add_residue_pair_jump( residue_pair_jump );
93 residue_pair_jump = NULL;
95 }
else if ( tag ==
"ROOT" ) {
99 if ( ! residue_pair_jump )
continue;
101 if ( tag ==
"jump_def:" ) {
104 add_jump( jump, cuts );
105 }
else if ( tag ==
"aa:" ) {
106 for (
int i = 1; i <= 2; ++i ) {
109 if ( residue_type_set->name_map(name).is_protein() )
110 name = name +
"_p:CtermProteinFull_p:NtermProteinFull";
112 residue_pair_jump->add_residue_single( res_type );
114 }
else if ( tag ==
"cst_atoms:" ) {
115 for (
int i = 1; i <= 2; ++i ) {
117 for (
int j = 1; j <= 3; ++j ) {
119 residue_pair_jump->set_cstAtoms(i,j,name);
122 }
else if ( tag ==
"jump_atoms:" ) {
123 for (
int i = 1; i <= 2; ++i ) {
125 for (
int j = 1; j <= 3; ++j ) {
127 residue_pair_jump->set_jumpAtoms(i,j,name);
130 }
else if ( tag ==
"disAB:" ) {
132 while (in >> value) {
133 residue_pair_jump->set_cstInfo(
disAB, value );
135 }
else if ( tag ==
"angleA:" ) {
137 while (in >> value) {
138 residue_pair_jump->set_cstInfo(
angleA, value );
140 }
else if ( tag ==
"angleB:" ) {
142 while (in >> value) {
143 residue_pair_jump->set_cstInfo(
angleB, value );
145 }
else if ( tag ==
"dihedralA:" ) {
147 while (in >> value) {
148 residue_pair_jump->set_cstInfo(
dihedralA, value );
150 }
else if ( tag ==
"dihedralB:" ) {
152 while (in >> value) {
153 residue_pair_jump->set_cstInfo(
dihedralB, value );
155 }
else if ( tag ==
"dihedralAB:" ) {
157 while (in >> value) {
158 residue_pair_jump->set_cstInfo(
dihedralAB, value );
168 FrameList jump_geometries;
170 ObjexxFCL::FArray2D_int
const & in_jumps ( jumps.
jumps() );
173 Size jump_number = 0;
174 for (
Size i = 1; i <= jumps.
size(); ++i ) {
175 if ( ( in_jumps( 1, i ) ==
int( it->jump_.start_) ) && ( in_jumps( 2, i ) ==
int( it->jump_.end_ ) ) ){
181 if ( jump_number == 0 )
continue;
183 if ( ! mm.
get_jump(jump_number) )
continue;
185 FrameOP jump_frame = ResiduePairJumps_[ct]->generate_frame();
186 jump_frame->show(
tr.Info );
192 jump_frame->align( map );
194 jump_geometries.push_back( jump_frame);
197 frags->add( jump_geometries );
205 ObjexxFCL::FArray2D_int jumps( 2, jumps_.size() );
206 ObjexxFCL::FArray1D_int cuts( jumps_.size() );
207 ObjexxFCL::FArray2D<std::string> jump_atoms(2, jumps_.size(),
"");
210 Size total_residue = total_residue_;
212 jumps( 1, ct ) = it->jump_.start_;
213 jumps( 2, ct ) = it->jump_.end_;
214 Size const crs ( it->cut_reg_.start_ );
215 Size const cre ( it->cut_reg_.end_ );
216 if ( crs > total_residue ) total_residue = crs;
217 if ( cre > total_residue ) total_residue = cre;
218 if ( it->jump_.end_ > total_residue ) total_residue = it->jump_.end_;
219 if ( it->jump_.start_ > total_residue ) total_residue = it->jump_.start_;
220 cuts( ct ) = crs+
int( numeric::random::uniform()*( cre-crs ) + 0.5 );
221 jump_atoms(1, ct) = ResiduePairJumps_[ct]->jumpAtoms(1)[1];
222 jump_atoms(2, ct) = ResiduePairJumps_[ct]->jumpAtoms(2)[1];
224 return JumpSample( total_residue, jumps_.size(), jumps, jump_atoms, cuts, root() );