Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
loophash_util.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 
14 #include <core/pose/util.hh>
15 #include <numeric/xyz.functions.hh>
16 #include <numeric/HomogeneousTransform.hh>
20 
21 namespace protocols {
22 namespace sic_dock {
23 
24 using core::Size;
25 using core::Real;
26 using numeric::min;
27 using core::id::AtomID;
28 using std::cout;
29 using std::endl;
30 typedef core::Real Real;
31 typedef core::Size Size;
41 
42 Vec3
44  core::pose::Pose const & pose,
45  Size ir
46 ){
47  Vec3 lower;
48  lower.a = pose.residue(ir ).xyz("CA");
49  lower.b = pose.residue(ir ).xyz( "N");
50  lower.c = pose.residue(ir-1).xyz( "C");
51  return lower;
52 }
53 
54 Vec3
56  core::pose::Pose const & pose,
57  Size ir
58 ){
59  Vec3 upper;
60  upper.a = pose.residue(ir+1).xyz("CA");
61  upper.b = pose.residue(ir+1).xyz( "N");
62  upper.c = pose.residue(ir+1).xyz( "H");
63  return upper;
64 }
65 
67  return Stub(v3.a,v3.b,v3.c);
68 }
69 
70 Stub vec3_to_stub(core::kinematics::Stub const & xform, Vec3 const & v3){
71  return Stub( xform.local2global(v3.a), xform.local2global(v3.b), xform.local2global(v3.c) );
72 }
73 
74 void
76  core::pose::Pose const & pose,
77  Size ir,
78  TermInfo & lowers,
79  TermInfo & uppers
80 ){
81  if( pose.residue(ir).is_upper_terminus() &&
82  ir > 1 &&
83  !pose.residue(ir ).is_lower_terminus() &&
84  // !pose.residue(ir-1).is_lower_terminus() &&
85  !pose.residue(ir-1).is_upper_terminus() &&
86  pose.residue(ir-1).is_protein()
87  ){
88  lowers.push_back( std::make_pair(ir,get_leap_lower_stub(pose,ir)) );
89  // TR << "add lower " << ir << "/" <<pose.n_residue() <<" "<< get_leap_lower_stub(pose,ir) << endl;
90  }
91  if( pose.residue(ir).is_lower_terminus() &&
92  !pose.residue(ir).is_upper_terminus() &&
93  ir < pose.n_residue() &&
94  !pose.residue(ir+1).is_lower_terminus() &&
95  !pose.residue(ir+1).is_upper_terminus() &&
96  pose.residue(ir+1).is_protein()
97  ){
98  uppers.push_back( std::make_pair(ir,get_leap_upper_stub(pose,ir)) );
99  // TR << "add upper " << ir << "/" <<pose.n_residue() <<" "<< get_leap_upper_stub(pose,ir) << endl;
100  }
101 }
102 void
104  core::pose::Pose const & pose,
105  TermInfo & lowers,
106  TermInfo & uppers
107 ){
108  for(Size ir = 1; ir <= pose.n_residue(); ++ir){
109  get_termini_from_pose(pose,ir,uppers,lowers);
110  }
111 }
112 
115  Stub const & lower,
116  Stub const & upper
117 ){
118  core::kinematics::RT leap(lower,upper);
119  numeric::HomogeneousTransform< Real > ht( leap.get_rotation(), leap.get_translation() );
120  numeric::xyzVector < Real > euler_angles = ht.euler_angles_rad();
122  rt_6[1] = leap.get_translation().x();
123  rt_6[2] = leap.get_translation().y();
124  rt_6[3] = leap.get_translation().z();
125  rt_6[4] = euler_angles.x()*180.0/numeric::constants::d::pi;
126  rt_6[5] = euler_angles.y()*180.0/numeric::constants::d::pi;
127  rt_6[6] = euler_angles.z()*180.0/numeric::constants::d::pi;
128  return rt_6;
129 }
130 
131 Size
133  Stub const & lower,
134  Stub const & upper,
135  protocols::loophash::LoopHashLibraryOP loop_hash_library,
136  Sizes const & loopsizes,
137  core::Size radius
138 ){
139  if( loopsizes.size() == 0 ) return 0;
140 
141  Real dist2 = core::kinematics::RT(lower,upper).get_translation().length_squared();
142  if( dist2 >= (10.0*Real(loopsizes.back())*Real(loopsizes.back())) ) return 0;
143 
145 
146  Size count0=0;
147  for(Sizes::const_iterator i = loopsizes.begin(); i != loopsizes.end(); ++i){
148  if( dist2 < (10.0*Real(*i)*Real(*i)) ){
149  count0 += loop_hash_library->gethash(*i).radial_count(radius,rt_6);
150  } // else too far, don't bother lookup
151  }
152  return (Real)count0;
153 }
154 
157  Stub const & lower,
158  Stub const & upper,
159  // core::pose::Pose const & pose1,
160  // core::pose::Pose const & pose2,
161  protocols::loophash::LoopHashLibraryOP loop_hash_library,
162  Sizes const & loopsizes,
163  Size radius
164 ){
165  // TermInfo lowers1,uppers1,lowers2,uppers2;
166  // get_termini_from_pose(pose1_,uppers1_,lowers1_);
167  // get_termini_from_pose(pose2_,uppers2_,lowers2_);
168 
169 
170  protocols::loophash::BackboneDB const & bbdb_ = loop_hash_library->backbone_database();
172  core::Size ndumped = 0;
173  for(Sizes::const_iterator ils = loopsizes.begin(); ils != loopsizes.end(); ++ils){
174  Size loopsize(*ils);
175 
176  protocols::loophash::LoopHashMap & hashmap( loop_hash_library->gethash(loopsize) );
177 
179  if( rt_6[1]*rt_6[1]+rt_6[2]*rt_6[2]+rt_6[3]*rt_6[3] > 10.0*Real(loopsize)*Real(loopsize) ) continue;
180  std::vector < core::Size > leap_index_list;
181  for(Sizes::const_iterator i = loopsizes.begin(); i != loopsizes.end(); ++i){
182  hashmap.radial_lookup(radius,rt_6,leap_index_list);
183  }
184 
185  std::vector< protocols::loophash::BackboneSegment > bs_vec_;
186  for( std::vector < core::Size >::const_iterator itx = leap_index_list.begin(); itx != leap_index_list.end(); ++itx ){
187  core::Size bb_index = *itx;
188  protocols::loophash::LeapIndex cp = hashmap.get_peptide( bb_index );
189  bbdb_.get_backbone_segment( cp.index, cp.offset , loopsize , backbone_ );
190  bs_vec_.push_back( backbone_ );
191  }
192 
193  Pose tmp;
194  {
196  for(Size i = 1; i <= loopsize+1; ++i){
197  core::conformation::ResidueOP new_rsd( NULL );
198  new_rsd = core::conformation::ResidueFactory::create_residue( rs->name_map("ALA") );
199  // cout << "apending residue " << new_rsd->name() << std::endl;
200  if(1==i) tmp.append_residue_by_jump( *new_rsd, 1 );
201  else tmp.append_residue_by_bond( *new_rsd, true );
202  tmp.set_phi ( tmp.n_residue(), 180.0 );
203  tmp.set_psi ( tmp.n_residue(), 180.0 );
204  tmp.set_omega( tmp.n_residue(), 180.0 );
205  }
206  // tmp.dump_pdb("test.pdb");
207  }
208 
209  int count = 0;
210  for ( std::vector<protocols::loophash::BackboneSegment>::const_iterator i = bs_vec_.begin(), ie = bs_vec_.end(); i != ie; ++i) {
211  std::vector<core::Real> phi = i->phi();
212  std::vector<core::Real> psi = i->psi();
213  std::vector<core::Real> omega = i->omega();
214  Size seg_length = (*i).length();
215  for ( Size i = 0; i < seg_length; i++){
216  Size ires = 2+i; // this is terrible, due to the use of std:vector. i has to start from 0, but positions offset by 1.
217  if (ires > tmp.total_residue() ) break;
218  tmp.set_phi ( ires, phi[i] );
219  tmp.set_psi ( ires, psi[i] );
220  tmp.set_omega( ires, omega[i]);
221  }
223  xform_pose_rev(tmp,s);
224  xform_pose(tmp,lower);
225  // tmp.delete_polymer_residue(tmp.n_residue());
226  tmp.dump_pdb("test_lh_"+ObjexxFCL::string_of(loopsize)+"_"+ObjexxFCL::string_of(++count)+".pdb");
227  ++ndumped;
228  }
229  }
230  return ndumped;
231 }
232 
233 
235  return 0.8*sqrt(double(count))+0.2*Real(double(count));
236 }
237 
238 
239 
240 
241 } // sic_dock
242 } // protocols