23 #include <basic/datacache/BasicDataCache.hh>
24 #include <basic/Tracer.hh>
26 #include <utility/vector1.hh>
34 static basic::Tracer
TR(
"core.scoring.dna.setup");
55 using namespace chemical;
57 Real const max_d( 4.0 );
62 partner.resize( nres, 0 );
64 std::map< AA, AA > base_partner;
70 std::map< AA, std::string > hbond_atom;
71 hbond_atom[
na_ade ] =
"N1";
72 hbond_atom[
na_thy ] =
"N3";
73 hbond_atom[
na_gua ] =
"N1";
74 hbond_atom[
na_cyt ] =
"N3";
76 for (
Size i=1; i<= nres; ++i ) {
78 AA const & i_aa( i_rsd.aa() );
79 if ( i_rsd.is_DNA() ) {
81 Vector const & i_xyz( i_rsd.xyz( hbond_atom[ i_aa ] ) );
85 for (
Size j=1; j<= nres; ++j ) {
88 AA const & j_aa( j_rsd.aa() );
89 if ( j_aa == base_partner[ i_aa ] ) {
90 Vector const & j_xyz( j_rsd.xyz( hbond_atom[ j_aa ] ) );
91 Real d( i_xyz.distance( j_xyz ) );
94 Vector const u( ( i_xyz - j_xyz ).normalized() );
95 Real const dot1( dot( i_axis, j_axis ) );
96 Real const dot2( dot( i_axis, u ) );
97 Real const dot3( dot( j_axis, u ) );
99 if ( d<best && dot1 > 0.75 && dot2 > 0.75 && dot3 > 0.75 ) {
109 for (
Size i=1; i<= nres; ++i ) {
110 if ( !partner[i] )
continue;
112 if ( partner[ partner[i] ] != i ) {
117 if ( i < partner[i] ) {
119 TR(basic::t_debug) <<
"found basepair: " << i <<
' ' << partner[i] << std::endl;