32 #include <numeric/model_quality/rms.hh>
34 #include <utility/string_util.hh>
37 #include <basic/Tracer.hh>
42 #include <utility/vector1.hh>
43 #include <numeric/xyz.functions.hh>
51 static basic::Tracer
tr(
"core.io.constraints");
54 namespace constraints_additional {
77 for (
int i = 1; i <=
natoms; ++i ) {
80 for (
int k = 0; k < 3; ++k )
86 for (
int i=1; i<=(
int)
atms_.size(); ++i)
87 for (
int k = 0; k < 3; ++k )
96 for (
int i = 1; i <=
natoms; ++i ) {
98 if (
atms_[i].atomno() > 5 )
104 for (
int k = 0; k < 3; ++k )
110 for (
int i=1; i<=(
int)
atms_.size(); ++i)
111 for (
int k = 0; k < 3; ++k )
118 ObjexxFCL::FArray2D< core::Real > tgt_pos,
119 ObjexxFCL::FArray2D< core::Real > tgt_pos_centroid,
125 tgt_pos_centroid_(tgt_pos_centroid)
136 for (
int i=1; i<=(
int)
atms_.size(); ++i) {
138 bs_score += this_dist*this_dist;
155 for (
int i=1; i<=(
int)
atms_.size(); ++i) {
158 bool aln_cent_i =
false;
170 templ_atms.push_back(
xyz( atm_i ) );
171 align_centroid.push_back( aln_cent_i );
183 int natoms = templ_atms.size();
185 if ( natoms != (
int)
atms_.size() ) {
186 utility_exit_with_message(
"BindingSiteConstraint::align() bad argument" );
190 ObjexxFCL::FArray2D< core::Real > tmpl_pos( 3, natoms );
192 for (
int i = 1; i <=
natoms; ++i ) {
195 for (
int k = 0; k < 3; ++k )
196 tmpl_pos(k+1,i) = x_i[k];
201 for (
int i=1; i<=
natoms; ++i)
202 for (
int k = 0; k < 3; ++k )
203 tmpl_pos(k+1,i) -= com[k];
207 ObjexxFCL::FArray1D< numeric::Real > ww( natoms, 1.0 );
208 ObjexxFCL::FArray2D< numeric::Real > uu( 3, 3, 0.0 );
210 ObjexxFCL::FArray2D< core::Real > tgt_pos_mixed( 3 , natoms );
212 for (
int i=1; i<=
natoms; ++i) {
213 if (align_centroid[i]) {
214 for (
int k = 1; k <= 3; ++k ) {
218 for (
int k = 1; k <= 3; ++k ) {
223 ObjexxFCL::FArray2D< core::Real > tgt_pos_copy( 3 , natoms );
224 for (
int i=1; i<=
natoms; ++i)
225 for (
int k = 1; k <= 3; ++k )
226 tgt_pos_copy(k,i) = tgt_pos_mixed(k,i);
228 numeric::model_quality::findUU( tgt_pos_mixed, tmpl_pos, ww, natoms, uu, ctx );
231 R.xx( uu(1,1) ); R.xy( uu(2,1) ); R.xz( uu(3,1) );
232 R.yx( uu(1,2) ); R.yy( uu(2,2) ); R.yz( uu(3,2) );
233 R.zx( uu(1,3) ); R.zy( uu(2,3) ); R.zz( uu(3,3) );
238 for (
int i = 1; i <=
natoms; ++i ) {
296 return "BindingSite";
311 for (
int i=1; i<=(
int)
atms_.size(); ++i) {
312 if ( seqmap[
atms_[i].rsd()] != 0 ) {
313 atms_remap.push_back(
AtomID(
atms_[i].atomno(), seqmap[
atms_[i].rsd()] ) );
317 if (atms_remap.size() > 2)
327 if ( n >= 1 && n <=
atms_.size() )
330 utility_exit_with_message(
"BindingSiteConstraint::atom() bad argument" );
337 out <<
"BindingSiteConstraint::show() " << std::endl;
342 out <<
"BindingSiteConstraint::show_def() " << std::endl;
361 BindingSiteConstraint::read_def(
363 core::pose::Pose const& pose,
364 core::scoring::constraints::FuncFactory const& func_factory
371 getline( data, line );
372 std::vector< std::string > tokens = utility::split( line );
374 // to do? atm name -> centroid conversion
375 tr.Debug << "read: ";
376 int npairs = tokens.size() / 2;
377 for (int i=0; i<npairs; ++i) {
379 res = (core::Size) atoi(tokens[2*i + 1].c_str());
380 tr.Debug << " " << name << " " << res;
382 atms_.push_back( core::id::AtomID( pose.residue_type( res ).atom_index( name ), res ) );
383 if ( res > pose.total_residue() ) {
384 tr.Debug << "** ignored **";
389 // get positions from start pose
398 std::istream & line_stream,
408 tr.Debug <<
"read: ";
409 while ( line_stream >> name >> res ) {
410 tr.Debug <<
" " << name <<
" " << res ;
413 tr.Debug <<
"** ignored **";
417 tr.Debug << std::endl;