21 #include <basic/Tracer.hh>
28 #include <ObjexxFCL/ubyte.hh>
29 #include <ObjexxFCL/format.hh>
30 #include <ObjexxFCL/FArray1.hh>
33 #include <numeric/constants.hh>
34 #include <numeric/xyzVector.hh>
38 #include <utility/vector1.hh>
39 #include <utility/vector1.functions.hh>
49 #include <utility/options/BooleanVectorOption.hh>
50 #include <ObjexxFCL/FArray2D.hh>
51 #include <boost/algorithm/string/erase.hpp>
54 static basic::Tracer
TR_DS(
"core.pack.interaction_graph.RotamerDots.DotSphere");
55 static basic::Tracer
TR_RD(
"core.pack.interaction_graph.RotamerDots.RotamerDots");
56 static basic::Tracer
TR_RDC(
"core.pack.interaction_graph.RotamerDots.RotamerDotsCache");
57 static basic::Tracer
TR_RDRD(
"core.pack.interaction_graph.RotamerDots.RotamerDotsRadiusData");
60 using namespace ObjexxFCL::fmt;
64 namespace interaction_graph {
69 switch ( which_bit ) {
71 return value &
static_cast< ObjexxFCL::ubyte
>(0x01);
73 return value &
static_cast< ObjexxFCL::ubyte
>(0x02);
75 return value &
static_cast< ObjexxFCL::ubyte
>(0x04);
77 return value &
static_cast< ObjexxFCL::ubyte
>(0x08);
79 return value &
static_cast< ObjexxFCL::ubyte
>(0x10);
81 return value &
static_cast< ObjexxFCL::ubyte
>(0x20);
83 return value &
static_cast< ObjexxFCL::ubyte
>(0x40);
85 return value &
static_cast< ObjexxFCL::ubyte
>(0x80);
95 ostr <<
"@spherelist color= " << color <<
" radius= 0.1";
103 Vector coord = center + radius * RotamerDots::dot_coord( dot_index );
104 ostr <<
"{" << dot_name <<
"} P " << coord.x() <<
" " << coord.y() <<
" " << coord.z() <<
"\n";
121 for (
Size ii = 1; ii <= 21; ++ii ) {
122 for (
Size jj = 0; jj < 8; ++jj ) {
127 write_dot( ostr, center, radius, count, name );
130 write_dot( ostr, center, radius, count, name );
134 if ( count == 163 )
break;
136 if ( count == 163 )
break;
141 core::Vector const & center,
core::Real radius, ObjexxFCL::FArray1< ObjexxFCL::ubyte >
const & dot_masks ) {
146 for (
Size ii = 1; ii <= 21; ++ii ) {
147 for (
Size jj = 0; jj < 8; ++jj ) {
152 write_dot( ostr, center, radius, count, name );
155 write_dot( ostr, center, radius, count, name );
159 if ( count == 163 )
break;
161 if ( count == 163 )
break;
177 DotSphere::DotSphere() :
178 dots_coverage_count_(),
180 num_covered_current_( false )
236 for (
Size jj=0; jj < 8; ++jj ) {
237 Size ii8_jj = ii*8 + jj;
295 const Size bb8 = bb*8;
296 dots_coverage_count_[ bb8 + 0 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x01));
297 dots_coverage_count_[ bb8 + 1 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x02));
298 dots_coverage_count_[ bb8 + 2 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x04));
299 dots_coverage_count_[ bb8 + 3 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x08));
300 dots_coverage_count_[ bb8 + 4 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x10));
301 dots_coverage_count_[ bb8 + 5 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x20));
302 dots_coverage_count_[ bb8 + 6 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x40));
303 dots_coverage_count_[ bb8 + 7 ] += static_cast <
unsigned char> (
static_cast<bool> (overlap_mask[ bb+1 ] & 0x80));
427 if (
dots_coverage_count_[ bb8 + 0 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x01);
428 if (
dots_coverage_count_[ bb8 + 1 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x02);
429 if (
dots_coverage_count_[ bb8 + 2 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x04);
430 if (
dots_coverage_count_[ bb8 + 3 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x08);
431 if (
dots_coverage_count_[ bb8 + 4 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x10);
432 if (
dots_coverage_count_[ bb8 + 5 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x20);
433 if (
dots_coverage_count_[ bb8 + 6 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x40);
434 if (
dots_coverage_count_[ bb8 + 7 ] > 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x80);
444 std::fill( compact.begin(), compact.end(),
static_cast< ObjexxFCL::ubyte
> (0) );
447 if (
dots_coverage_count_[ bb8 + 0 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x01);
448 if (
dots_coverage_count_[ bb8 + 1 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x02);
449 if (
dots_coverage_count_[ bb8 + 2 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x04);
450 if (
dots_coverage_count_[ bb8 + 3 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x08);
451 if (
dots_coverage_count_[ bb8 + 4 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x10);
452 if (
dots_coverage_count_[ bb8 + 5 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x20);
453 if (
dots_coverage_count_[ bb8 + 6 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x40);
454 if (
dots_coverage_count_[ bb8 + 7 ] == 0 ) compact[ ii+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x80);
456 Size const last = NUM_BYTES_IN_DOT_SPHERE_OVERLAP_ARRAYS - 1;
457 Size const lastx8 = 8 * last;
458 if (
dots_coverage_count_[ lastx8 + 0 ] == 0 ) compact[ last+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x01);
459 if (
dots_coverage_count_[ lastx8 + 1 ] == 0 ) compact[ last+1 ] |=
static_cast< ObjexxFCL::ubyte
> (0x02);
520 sasa_is_current_(false)
536 bool exclude_hydrogen_atoms ,
537 bool use_expanded_polar_atom_radii
541 sasa_is_current_(false)
543 if ( exclude_hydrogen_atoms ) {
559 if ( use_expanded_polar_atom_radii ) {
582 utility::pointer::ReferenceCount(),
583 rotamer_( rhs.rotamer_ ),
584 num_atoms_( rhs.num_atoms_ ),
585 atom_counts_( rhs.atom_counts_ ),
588 sasa_is_current_( rhs.sasa_is_current_ ),
589 atom_sasa_( rhs.atom_sasa_ ),
702 if ( distance_squared <= (atom1_radius + atom2_radius) * (atom1_radius + atom2_radius) )
771 return (*
radii_)[ atom.type() ];
783 return (*
radii_)[ attype_index ];
795 return utility::max( *
radii_ );
819 atom_counts_[ ii ].invert_to_compact_array( inv_dots[ ii ] );
830 for (
Size ii = 1, iiend = ats_to_update.size(); ii <= iiend; ++ii ) {
831 atom_counts_[ ats_to_update[ ii ] ].invert_to_compact_array( inv_dots[ ats_to_update[ ii ] ] );
883 using namespace utility;
897 get_atom_atom_coverage( atom1_xyz, atom1_radius, atom2_xyz, atom2_radius, self_overlap[ii], self_overlap[jj], dist );
946 get_overlap_cache( other, this_overlap_on_other, this_dots_covered_by_other, atom_atom_overlaps_cache );
981 using namespace utility;
993 if ( vv_this_covered_by_other.size() <
num_atoms_ ) {
996 if ( vv_other_covered_by_this.size() < other.
get_num_atoms() ) {
1002 vv_this_covered_by_other[ ii ][ jj ] = 0;
1007 vv_other_covered_by_this[ ii ][ jj ] = 0;
1013 others_dots_covered_by_this.
zero();
1014 this_dots_covered_by_other.
zero();
1016 get_res_res_overlap( other, vv_this_covered_by_other, vv_other_covered_by_this, atom_atom_overlaps_cache );
1018 this_dots_covered_by_other.
increment_count( vv_this_covered_by_other );
1019 others_dots_covered_by_this.
increment_count( vv_other_covered_by_this );
1037 Real square_distance = 0.0f;
1042 Real ii_atom_radius;
1048 Real jj_atom_radius;
1051 overlap =
get_atom_atom_coverage( ii_atom_xyz, ii_atom_radius, jj_atom_xyz, jj_atom_radius, res1_covered_by_res2[ ii ], res2_covered_by_res1[ jj ], square_distance );
1056 atom_atom_overlaps_cache[ jj ][ ii ] =
true;
1058 if ( square_distance > (ii_atom_radius + jj_atom_radius) * (ii_atom_radius + jj_atom_radius) ) {
1073 Vector const & at2_xyz,
Real at2_base_radius,
1077 int degree_of_overlap;
1078 int aphi_1_2, aphi_2_1;
1079 int theta_1_2, theta_2_1;
1086 dist_sq = at1_xyz.distance_squared( at2_xyz );
1087 if ( dist_sq > (at1_radius + at2_radius) * (at1_radius + at2_radius) ) {
1096 Size closest_dot1 = (*lg_angles_)( aphi_1_2, theta_1_2 );
1097 masknum = ( closest_dot1 * 100 ) + degree_of_overlap;
1098 for (
Size bb = 1, bbli = (*lg_masks_).index( bb, masknum ); bb <=
num_bytes_; ++bb, ++bbli ) {
1099 at1_sphere_covered[ bb ] |= (*lg_masks_)[ bbli ];
1105 Size closest_dot2 = (*lg_angles_)( aphi_2_1, theta_2_1 );
1106 masknum = ( closest_dot2 * 100 ) + degree_of_overlap;
1107 for (
Size bb = 1, bbli = (*lg_masks_).index( bb, masknum ); bb <=
num_bytes_; ++bb, ++bbli ) {
1108 at2_sphere_covered[ bb ] |= (*lg_masks_)[ bbli ];
1124 TR_RD <<
"increment_from_cached(): cache.size(): " << cache.
atom_counts_.size() <<
", atom_counts_.size(): " <<
atom_counts_.size() << std::endl;
1166 others_dots_covered_by_this.
zero();
1169 this_dots_covered_by_other.
zero();
1195 get_overlap_cache( other_rotamer, others_dots_covered_by_this, this_dots_covered_by_other, atom_atom_overlaps_cache );
1230 Real fraction_uncovered = 0.0;
1231 Real atom_radius = 0.0;
1232 Real const four_pi = 4.0 *
Real( numeric::constants::d::pi );
1233 Real atom_area_exposed = 0.0;
1239 atom_area_exposed = four_pi * ( atom_radius * atom_radius ) * fraction_uncovered;
1243 sasa_ += atom_area_exposed;
1287 Size total_num_covered = 0;
1289 total_num_covered +=
atom_counts_[ ii ].get_num_covered();
1292 return total_num_covered;
1338 void RotamerDots::write_dotlist_header( std::ofstream & kinfile, std::string master_name, std::string color ) {
1339 kinfile << "@dotlist master= {" << master_name << "} color= " << color << "\n";
1345 void RotamerDots::write_dot( std::ofstream & kinfile, Size atom, Size dot, Real radius ) {
1346 static numeric::xyzVector< Real > coord;
1347 coord = get_atom_coords_xyz( atom );
1348 coord += (radius + get_atom_radius( atom )) * get_dot_coord( dot );
1350 write_dot( kinfile, coord, "dot" );
1356 void RotamerDots::write_dot( std::ofstream & kinfile, numeric::xyzVector< Real > const & coord, std::string atname ) {
1357 static std::string last_atname = "";
1358 if ( last_atname == atname ) {
1359 kinfile << "{\"} P " << coord.x() << " " << coord.y() << " " << coord.z() << "\n";
1361 kinfile << "{" << atname << "} P " << coord.x() << " " << coord.y() << " " << coord.z() << "\n";
1362 last_atname = atname;
1370 numeric::xyzVector<Real> const & RotamerDots::get_dot_coord( Size dot_id ) {
1371 if ( ! dot_sphere_coordinates_initialized_ ) {
1372 initialize_dot_sphere_coordinates_from_file();
1374 return dot_sphere_coordinates_[ dot_id ];
1381 void RotamerDots::initialize_dot_sphere_coordinates_from_file() {
1383 dot_sphere_coordinates_.resize( DotSphere::NUM_DOTS_TOTAL );
1385 std::ifstream dotfile("sphere.txt");
1386 for ( Size ii = 1; ii <= DotSphere::NUM_DOTS_TOTAL; ++ii ) {
1388 dotfile >> x >> y >> z;
1389 dot_sphere_coordinates_[ ii ] = -1 * numeric::xyzVector< Real >( x,y,z );
1393 dot_sphere_coordinates_initialized_ = true;
1403 os <<
"dots: unassigned" << std::endl;
1410 <<
", covered: " << ObjexxFCL::fmt::I(3,
atom_counts_[ii].get_num_covered()) <<
", counts: ";
1442 dot_coords.resize( 162 );
1443 dot_coords[1] = -1*
Vector(0,0,1);
1444 dot_coords[2] = -1*
Vector(0.276393,0.850651,0.447214);
1445 dot_coords[3] = -1*
Vector(0.894427,0,0.447214);
1446 dot_coords[4] = -1*
Vector(0.16246,0.5,0.850651);
1447 dot_coords[5] = -1*
Vector(0.525731,0,0.850651);
1448 dot_coords[6] = -1*
Vector(0.0776089,0.238856,0.967949);
1449 dot_coords[7] = -1*
Vector(0.251148,0,0.967949);
1450 dot_coords[8] = -1*
Vector(0.361803,0.262866,0.894427);
1451 dot_coords[9] = -1*
Vector(0.688191,0.5,0.525731);
1452 dot_coords[10] = -1*
Vector(0.232827,0.716567,0.657513);
1453 dot_coords[11] = -1*
Vector(0.447214,0.525731,0.723607);
1454 dot_coords[12] = -1*
Vector(0.483974,0.716567,0.502295);
1455 dot_coords[13] = -1*
Vector(0.638197,0.262866,0.723607);
1456 dot_coords[14] = -1*
Vector(0.753443,0,0.657513);
1457 dot_coords[15] = -1*
Vector(0.831052,0.238856,0.502295);
1458 dot_coords[16] = -1*
Vector(-0.723607,0.525731,0.447214);
1459 dot_coords[17] = -1*
Vector(-0.425325,0.309017,0.850651);
1460 dot_coords[18] = -1*
Vector(-0.203183,0.147621,0.967949);
1461 dot_coords[19] = -1*
Vector(-0.138197,0.425325,0.894427);
1462 dot_coords[20] = -1*
Vector(-0.262866,0.809017,0.525731);
1463 dot_coords[21] = -1*
Vector(-0.609548,0.442863,0.657513);
1464 dot_coords[22] = -1*
Vector(-0.361803,0.587785,0.723607);
1465 dot_coords[23] = -1*
Vector(-0.531939,0.681718,0.502295);
1466 dot_coords[24] = -1*
Vector(-0.0527864,0.688191,0.723607);
1467 dot_coords[25] = -1*
Vector(0.029644,0.864188,0.502295);
1468 dot_coords[26] = -1*
Vector(-0.723607,-0.525731,0.447214);
1469 dot_coords[27] = -1*
Vector(-0.425325,-0.309017,0.850651);
1470 dot_coords[28] = -1*
Vector(-0.203183,-0.147621,0.967949);
1471 dot_coords[29] = -1*
Vector(-0.447214,0,0.894427);
1472 dot_coords[30] = -1*
Vector(-0.850651,0,0.525731);
1473 dot_coords[31] = -1*
Vector(-0.609548,-0.442863,0.657513);
1474 dot_coords[32] = -1*
Vector(-0.67082,-0.16246,0.723607);
1475 dot_coords[33] = -1*
Vector(-0.812731,-0.295242,0.502295);
1476 dot_coords[34] = -1*
Vector(-0.67082,0.16246,0.723607);
1477 dot_coords[35] = -1*
Vector(-0.812731,0.295242,0.502295);
1478 dot_coords[36] = -1*
Vector(0.276393,-0.850651,0.447214);
1479 dot_coords[37] = -1*
Vector(0.16246,-0.5,0.850651);
1480 dot_coords[38] = -1*
Vector(0.0776089,-0.238856,0.967949);
1481 dot_coords[39] = -1*
Vector(-0.138197,-0.425325,0.894427);
1482 dot_coords[40] = -1*
Vector(-0.262866,-0.809017,0.525731);
1483 dot_coords[41] = -1*
Vector(0.232827,-0.716567,0.657513);
1484 dot_coords[42] = -1*
Vector(-0.0527864,-0.688191,0.723607);
1485 dot_coords[43] = -1*
Vector(0.029644,-0.864188,0.502295);
1486 dot_coords[44] = -1*
Vector(-0.361803,-0.587785,0.723607);
1487 dot_coords[45] = -1*
Vector(-0.531939,-0.681718,0.502295);
1488 dot_coords[46] = -1*
Vector(0.361803,-0.262866,0.894427);
1489 dot_coords[47] = -1*
Vector(0.688191,-0.5,0.525731);
1490 dot_coords[48] = -1*
Vector(0.638197,-0.262866,0.723607);
1491 dot_coords[49] = -1*
Vector(0.831052,-0.238856,0.502295);
1492 dot_coords[50] = -1*
Vector(0.447214,-0.525731,0.723607);
1493 dot_coords[51] = -1*
Vector(0.483974,-0.716567,0.502295);
1494 dot_coords[52] = -1*
Vector(0.723607,0.525731,-0.447214);
1495 dot_coords[53] = -1*
Vector(0.951057,0.309017,0);
1496 dot_coords[54] = -1*
Vector(0.956626,0.147621,0.251148);
1497 dot_coords[55] = -1*
Vector(0.861803,0.425325,0.276393);
1498 dot_coords[56] = -1*
Vector(0.587785,0.809017,0);
1499 dot_coords[57] = -1*
Vector(0.67082,0.688191,0.276393);
1500 dot_coords[58] = -1*
Vector(0.436009,0.864188,0.251148);
1501 dot_coords[59] = -1*
Vector(0.809017,0.587785,0);
1502 dot_coords[60] = -1*
Vector(0.860696,0.442863,-0.251148);
1503 dot_coords[61] = -1*
Vector(0.687157,0.681718,-0.251148);
1504 dot_coords[62] = -1*
Vector(-0.276393,0.850651,-0.447214);
1505 dot_coords[63] = -1*
Vector(0,1,0);
1506 dot_coords[64] = -1*
Vector(0.155218,0.955423,0.251148);
1507 dot_coords[65] = -1*
Vector(-0.138197,0.951057,0.276393);
1508 dot_coords[66] = -1*
Vector(-0.587785,0.809017,0);
1509 dot_coords[67] = -1*
Vector(-0.447214,0.850651,0.276393);
1510 dot_coords[68] = -1*
Vector(-0.687157,0.681718,0.251148);
1511 dot_coords[69] = -1*
Vector(-0.309017,0.951057,0);
1512 dot_coords[70] = -1*
Vector(-0.155218,0.955423,-0.251148);
1513 dot_coords[71] = -1*
Vector(-0.436009,0.864188,-0.251148);
1514 dot_coords[72] = -1*
Vector(-0.894427,0,-0.447214);
1515 dot_coords[73] = -1*
Vector(-0.951057,0.309017,0);
1516 dot_coords[74] = -1*
Vector(-0.860696,0.442863,0.251148);
1517 dot_coords[75] = -1*
Vector(-0.947214,0.16246,0.276393);
1518 dot_coords[76] = -1*
Vector(-0.951057,-0.309017,0);
1519 dot_coords[77] = -1*
Vector(-0.947214,-0.16246,0.276393);
1520 dot_coords[78] = -1*
Vector(-0.860696,-0.442863,0.251148);
1521 dot_coords[79] = -1*
Vector(-1,0,0);
1522 dot_coords[80] = -1*
Vector(-0.956626,0.147621,-0.251148);
1523 dot_coords[81] = -1*
Vector(-0.956626,-0.147621,-0.251148);
1524 dot_coords[82] = -1*
Vector(-0.276393,-0.850651,-0.447214);
1525 dot_coords[83] = -1*
Vector(-0.587785,-0.809017,0);
1526 dot_coords[84] = -1*
Vector(-0.687157,-0.681718,0.251148);
1527 dot_coords[85] = -1*
Vector(-0.447214,-0.850651,0.276393);
1528 dot_coords[86] = -1*
Vector(0,-1,0);
1529 dot_coords[87] = -1*
Vector(-0.138197,-0.951057,0.276393);
1530 dot_coords[88] = -1*
Vector(0.155218,-0.955423,0.251148);
1531 dot_coords[89] = -1*
Vector(-0.309017,-0.951057,0);
1532 dot_coords[90] = -1*
Vector(-0.436009,-0.864188,-0.251148);
1533 dot_coords[91] = -1*
Vector(-0.155218,-0.955423,-0.251148);
1534 dot_coords[92] = -1*
Vector(0.723607,-0.525731,-0.447214);
1535 dot_coords[93] = -1*
Vector(0.587785,-0.809017,0);
1536 dot_coords[94] = -1*
Vector(0.436009,-0.864188,0.251148);
1537 dot_coords[95] = -1*
Vector(0.67082,-0.688191,0.276393);
1538 dot_coords[96] = -1*
Vector(0.951057,-0.309017,0);
1539 dot_coords[97] = -1*
Vector(0.861803,-0.425325,0.276393);
1540 dot_coords[98] = -1*
Vector(0.956626,-0.147621,0.251148);
1541 dot_coords[99] = -1*
Vector(0.809017,-0.587785,0);
1542 dot_coords[100] = -1*
Vector(0.687157,-0.681718,-0.251148);
1543 dot_coords[101] = -1*
Vector(0.860696,-0.442863,-0.251148);
1544 dot_coords[102] = -1*
Vector(0.262866,0.809017,-0.525731);
1545 dot_coords[103] = -1*
Vector(0.531939,0.681718,-0.502295);
1546 dot_coords[104] = -1*
Vector(0.447214,0.850651,-0.276393);
1547 dot_coords[105] = -1*
Vector(0.309017,0.951057,0);
1548 dot_coords[106] = -1*
Vector(0.138197,0.951057,-0.276393);
1549 dot_coords[107] = -1*
Vector(-0.029644,0.864188,-0.502295);
1550 dot_coords[108] = -1*
Vector(-0.688191,0.5,-0.525731);
1551 dot_coords[109] = -1*
Vector(-0.483974,0.716567,-0.502295);
1552 dot_coords[110] = -1*
Vector(-0.67082,0.688191,-0.276393);
1553 dot_coords[111] = -1*
Vector(-0.809017,0.587785,0);
1554 dot_coords[112] = -1*
Vector(-0.861803,0.425325,-0.276393);
1555 dot_coords[113] = -1*
Vector(-0.831052,0.238856,-0.502295);
1556 dot_coords[114] = -1*
Vector(-0.688191,-0.5,-0.525731);
1557 dot_coords[115] = -1*
Vector(-0.831052,-0.238856,-0.502295);
1558 dot_coords[116] = -1*
Vector(-0.861803,-0.425325,-0.276393);
1559 dot_coords[117] = -1*
Vector(-0.809017,-0.587785,0);
1560 dot_coords[118] = -1*
Vector(-0.67082,-0.688191,-0.276393);
1561 dot_coords[119] = -1*
Vector(-0.483974,-0.716567,-0.502295);
1562 dot_coords[120] = -1*
Vector(0.262866,-0.809017,-0.525731);
1563 dot_coords[121] = -1*
Vector(-0.029644,-0.864188,-0.502295);
1564 dot_coords[122] = -1*
Vector(0.138197,-0.951057,-0.276393);
1565 dot_coords[123] = -1*
Vector(0.309017,-0.951057,0);
1566 dot_coords[124] = -1*
Vector(0.447214,-0.850651,-0.276393);
1567 dot_coords[125] = -1*
Vector(0.531939,-0.681718,-0.502295);
1568 dot_coords[126] = -1*
Vector(0.850651,0,-0.525731);
1569 dot_coords[127] = -1*
Vector(0.812731,-0.295242,-0.502295);
1570 dot_coords[128] = -1*
Vector(0.947214,-0.16246,-0.276393);
1571 dot_coords[129] = -1*
Vector(1,0,0);
1572 dot_coords[130] = -1*
Vector(0.947214,0.16246,-0.276393);
1573 dot_coords[131] = -1*
Vector(0.812731,0.295242,-0.502295);
1574 dot_coords[132] = -1*
Vector(0,0,-1);
1575 dot_coords[133] = -1*
Vector(0.425325,0.309017,-0.850651);
1576 dot_coords[134] = -1*
Vector(0.609548,0.442863,-0.657513);
1577 dot_coords[135] = -1*
Vector(0.361803,0.587785,-0.723607);
1578 dot_coords[136] = -1*
Vector(-0.16246,0.5,-0.850651);
1579 dot_coords[137] = -1*
Vector(0.0527864,0.688191,-0.723607);
1580 dot_coords[138] = -1*
Vector(-0.232827,0.716567,-0.657513);
1581 dot_coords[139] = -1*
Vector(0.138197,0.425325,-0.894427);
1582 dot_coords[140] = -1*
Vector(0.203183,0.147621,-0.967949);
1583 dot_coords[141] = -1*
Vector(-0.0776089,0.238856,-0.967949);
1584 dot_coords[142] = -1*
Vector(-0.447214,0.525731,-0.723607);
1585 dot_coords[143] = -1*
Vector(-0.525731,0,-0.850651);
1586 dot_coords[144] = -1*
Vector(-0.638197,0.262866,-0.723607);
1587 dot_coords[145] = -1*
Vector(-0.753443,0,-0.657513);
1588 dot_coords[146] = -1*
Vector(-0.361803,0.262866,-0.894427);
1589 dot_coords[147] = -1*
Vector(-0.251148,0,-0.967949);
1590 dot_coords[148] = -1*
Vector(-0.638197,-0.262866,-0.723607);
1591 dot_coords[149] = -1*
Vector(-0.16246,-0.5,-0.850651);
1592 dot_coords[150] = -1*
Vector(-0.447214,-0.525731,-0.723607);
1593 dot_coords[151] = -1*
Vector(-0.232827,-0.716567,-0.657513);
1594 dot_coords[152] = -1*
Vector(-0.361803,-0.262866,-0.894427);
1595 dot_coords[153] = -1*
Vector(-0.0776089,-0.238856,-0.967949);
1596 dot_coords[154] = -1*
Vector(0.0527864,-0.688191,-0.723607);
1597 dot_coords[155] = -1*
Vector(0.425325,-0.309017,-0.850651);
1598 dot_coords[156] = -1*
Vector(0.361803,-0.587785,-0.723607);
1599 dot_coords[157] = -1*
Vector(0.609548,-0.442863,-0.657513);
1600 dot_coords[158] = -1*
Vector(0.138197,-0.425325,-0.894427);
1601 dot_coords[159] = -1*
Vector(0.203183,-0.147621,-0.967949);
1602 dot_coords[160] = -1*
Vector(0.67082,-0.16246,-0.723607);
1603 dot_coords[161] = -1*
Vector(0.67082,0.16246,-0.723607);
1604 dot_coords[162] = -1*
Vector(0.447214,0,-0.894427);
1617 if ( instance_ == 0 ) {
1629 using namespace core::chemical;
1631 if ( ROSETTA_SASA_radii_.size() == 0 ) {
1634 TR_RDRD <<
"get_ROSETTA_SASA_radii(): reading in sasa radii database file" << std::endl;
1640 ROSETTA_SASA_radii_.resize( atom_type_set.
n_atomtypes(), 0.0 );
1644 TR_RDRD <<
"ROSETTA_SASA_radii_: [ ";
1646 ROSETTA_SASA_radii_[ ii ] = atom_type_set[ ii ].extra_parameter( SASA_RADIUS_INDEX );
1647 TR_RDRD << ROSETTA_SASA_radii_[ ii ] <<
", ";
1652 return &ROSETTA_SASA_radii_;
1659 using namespace core::chemical;
1661 if ( NACCESS_SASA_radii_.size() == 0 ) {
1664 TR_RDRD <<
"get_NACCESS_SASA_radii(): reading in sasa radii database file" << std::endl;
1667 NACCESS_SASA_radii_.resize( atom_type_set.
n_atomtypes(), 0.0 );
1671 TR_RDRD <<
"NACCESS_SASA_radii_: [ ";
1673 NACCESS_SASA_radii_[ ii ] = atom_type_set[ ii ].extra_parameter( NACCESS_SASA_RADIUS_INDEX );
1674 TR_RDRD << NACCESS_SASA_radii_[ ii ] <<
", ";
1679 return &NACCESS_SASA_radii_;
1686 using namespace core::chemical;
1688 if ( NACCESS_SASA_radii_with_expanded_polars.size() == 0 ) {
1690 TR_RDRD <<
"get_NACCESS_SASA_radii_with_expanded_polars(): reading in sasa radii database file" << std::endl;
1693 NACCESS_SASA_radii_with_expanded_polars.resize( (*radii).size() );
1698 TR_RDRD <<
"NACCESS_SASA_radii_with_expanded_polars_: [ ";
1699 for (
Size ii=1; ii <= radii->size(); ++ii ) {
1700 NACCESS_SASA_radii_with_expanded_polars[ ii ] = (*radii)[ ii ];
1704 NACCESS_SASA_radii_with_expanded_polars[ ii ] += polar_expansion_radius;
1706 TR_RDRD << NACCESS_SASA_radii_with_expanded_polars[ ii ] <<
", ";
1712 return &NACCESS_SASA_radii_with_expanded_polars;
1828 assert( compact.size() != 0 );
1830 atom_counts_[ ii ].write_to_compact_array( compact[ ii ] );
1839 for (
Size bb = 1; bb <= values.size(); ++bb ) {
1840 if ( (bb-1)*8 % 16 == 0 ) std::cout << (bb-1) * 8 <<
":";
1841 for (
int index=7; index >= 0; index-- ) {
1842 std::cout << ( ( (int)values[ bb ] >> index ) & 1 );
1846 std::cout << std::endl;
1855 os <<
"atom " << I(2,ii) <<
": ";
1872 utility::pointer::ReferenceCount(),
1873 rotamer_( src.rotamer_ ),
1874 inv_dots_( src.inv_dots_ ),
1875 radii_( src.radii_ )
1882 if (
this != & rhs ) {
1944 assert( dot_index > 0 && dot_index <= 162 );
1946 Size const which_byte = dot_index / 8;
1947 Size const which_bit = dot_index - which_byte * 8 ;
1952 std::ostream & ostr,
1959 ostr <<
"@group { invdots " <<
rotamer_->seqpos() <<
"} dominant\n";
1962 for (
Size ii = 1; ii <=
rotamer_->nheavyatoms(); ++ii ) {
1970 std::ostream & ostr,
1971 Size const atom_this,
1973 Size const atom_other,
1983 Real const dist_sq = at1.xyz().distance_squared( at2.xyz() );
1984 assert( dist_sq < (rad1 + rad2) * (rad1 + rad2) );
1987 Real const step_size1 = rad1 * 0.02;
1988 Real const step_size2 = rad2 * 0.02;
1993 int degree_of_overlap1, degree_of_overlap1_stepped, degree_of_overlap2, degree_of_overlap2_stepped;
1994 int aphi_1_2, aphi_2_1;
1995 int theta_1_2, theta_2_1;
2007 Size closest_dot1 = (*RotamerDots::lg_angles_)( aphi_1_2, theta_1_2 );
2008 if ( degree_of_overlap1 + nsteps1 > 100 ) {
2009 degree_of_overlap1_stepped = 100;
2011 degree_of_overlap1_stepped = degree_of_overlap1 + nsteps1;
2014 int const masknum1a = ( closest_dot1 * 100 ) + degree_of_overlap1;
2015 int const masknum1b = ( closest_dot1 * 100 ) + degree_of_overlap1_stepped;
2026 for (
Size bb = 1, bblia = (*
RotamerDots::lg_masks_).index( bb, masknum1a ), bblib = (*RotamerDots::lg_masks_).index( bb, masknum1b );
2028 ring1[ bb ] = (*RotamerDots::lg_masks_)[ bblib ] & ~ (*RotamerDots::lg_masks_)[ bblia ];
2029 hit_ring1[ bb ] =
inv_dots_[ atom_this ][ bb ] & ( (*RotamerDots::lg_masks_)[ bblib ] & ~ (*RotamerDots::lg_masks_)[ bblia ] );
2031 std::cout <<
"exposed dots: ";
2034 std::cout <<
"ring1: ";
2036 std::cout <<
"hit_ring1: ";
2042 Size closest_dot2 = (*RotamerDots::lg_angles_)( aphi_2_1, theta_2_1 );
2043 if ( degree_of_overlap2 + nsteps2 > 100 ) {
2044 degree_of_overlap2_stepped = 100;
2046 degree_of_overlap2_stepped = degree_of_overlap2 + nsteps2;
2049 int const masknum2a = ( closest_dot2 * 100 ) + degree_of_overlap2;
2050 int const masknum2b = ( closest_dot2 * 100 ) + degree_of_overlap2_stepped;
2052 for (
Size bb = 1, bblia = (*
RotamerDots::lg_masks_).index( bb, masknum2a ), bblib = (*RotamerDots::lg_masks_).index( bb, masknum2b );
2054 ring2[ bb ] = (*RotamerDots::lg_masks_)[ bblib ] & ~ (*RotamerDots::lg_masks_)[ bblia ];
2055 hit_ring2[ bb ] = invdots_other.
inv_dots_[ atom_other ][ bb ] & ( (*RotamerDots::lg_masks_)[ bblib ] & ~ (*RotamerDots::lg_masks_)[ bblia ] );
2057 std::cout <<
"exposed dots: ";
2060 std::cout <<
"ring2: ";
2062 std::cout <<
"hit_ring2: ";
2066 ostr <<
"@group { invdots " <<
rotamer_->seqpos() <<
" " <<
rotamer_->atom_name( atom_this ) <<
"} dominant\n";
2071 ostr <<
"@group { invdots " << invdots_other.
rotamer_->seqpos() <<
" " << invdots_other.
rotamer_->atom_name( atom_other ) <<
"} dominant\n";
2076 ostr <<
"@group { olap " <<
rotamer_->seqpos() <<
" " <<
rotamer_->atom_name( atom_this ) <<
"} dominant\n";
2081 ostr <<
"@group { olap " << invdots_other.
rotamer_->seqpos() <<
" " << invdots_other.
rotamer_->atom_name( atom_other ) <<
"} dominant\n";
2100 Real const dist_sq = at1.
xyz().distance_squared( at2.
xyz() );
2101 assert( dist_sq <= (rad1 + rad2) * (rad1 + rad2) );
2104 Real const step_size1 = rad1 * 0.02;
2105 Real const step_size2 = rad2 * 0.02;
2110 int degree_of_overlap1, degree_of_overlap2;
2111 int aphi_1_2, aphi_2_1;
2112 int theta_1_2, theta_2_1;
2118 bool at1_intersection_exposed =
false;
2119 Size closest_dot1 = (*RotamerDots::lg_angles_)( aphi_1_2, theta_1_2 );
2120 if ( degree_of_overlap1 + nsteps1 > 100 ) {
2122 if ( at1exposed_dots[ bb ] ) {
2123 at1_intersection_exposed =
true;
2128 int masknum = ( closest_dot1 * 100 ) + degree_of_overlap1 + nsteps1;
2131 at1_intersection_exposed =
true;
2137 if ( ! at1_intersection_exposed )
return false;
2142 bool at2_intersection_exposed =
false;
2144 Size closest_dot2 = (*RotamerDots::lg_angles_)( aphi_2_1, theta_2_1 );
2145 if ( degree_of_overlap2 + nsteps2 > 100 ) {
2147 if ( at2exposed_dots[ bb ] ) {
2148 at2_intersection_exposed =
true;
2153 int masknum = ( closest_dot2 * 100 ) + degree_of_overlap2 + nsteps2;
2156 at2_intersection_exposed =
true;
2162 return at2_intersection_exposed;
2174 if ( (bb-1)*8 % 16 == 0 ) std::cout << (bb-1) * 8 <<
":";
2175 for (
int index=7; index >= 0; index-- ) {
2176 bit = ( ( (
int)values[ bb ] >> index ) & 1 );
2181 std::cout << std::endl;