36 #include <basic/Tracer.hh>
39 #include <utility/vector1.hh>
41 static basic::Tracer
TR(
"protocols.dna.RotamerDNAHBondFilter");
53 threshold_( threshold ),
54 base_only_( base_only ),
57 hb_database_(scoring::hbonds::HBondDatabase::get_database()),
58 hbondoptions_(new scoring::hbonds::HBondOptions )
74 using namespace scoring;
75 using namespace hbonds;
76 using namespace conformation;
81 Reals const & ex_chi_steps( chi_set->ex_chi_steps );
83 Size const nchi( ex_chi_steps.size() );
84 if ( ( nchi > 0 && rtask.
operate_on_ex1() && ex_chi_steps[1] != 0. ) ||
87 ( nchi > 3 && rtask.
operate_on_ex4() && ex_chi_steps[4] != 0. ) ) filter =
true;
89 if ( !filter )
return true;
94 if ( !dnares.is_DNA() )
continue;
98 for (
Size ratom_i( rotamer->first_sidechain_atom() ), ratom_end( rotamer->natoms() );
99 ratom_i <= ratom_end; ++ratom_i ) {
100 Atom const & ratom( rotamer->atom( ratom_i ) );
101 Size const datom_start(
base_only_ ? dnares.first_sidechain_atom() : 1 );
102 for (
Size datom_i( datom_start ), datom_end( dnares.natoms() );
103 datom_i <= datom_end; ++datom_i ) {
104 Atom const & datom( dnares.atom( datom_i ) );
107 if ( rotamer->atom_type( ratom_i ).is_hydrogen() &&
108 rotamer->atom_type( rotamer->atom_base( ratom_i ) ).is_donor() &&
109 dnares.atom_type( datom_i ).is_acceptor() ) {
110 Real dis2( ratom.xyz().distance_squared( datom.xyz() ) );
112 HBEvalTuple hbtype(rotamer->atom_base(ratom_i), *rotamer, datom_i, dnares);
116 datom.xyz(), datom.xyz() ,
118 Vector(-1.0, -1.0, -1.0) ,
124 dnares.atom_type( datom_i ).is_hydrogen() &&
125 dnares.atom_type( dnares.atom_base( datom_i ) ).is_donor() &&
126 rotamer->atom_type( ratom_i ).is_acceptor() ) {
127 Real dis2( ratom.xyz().distance_squared( datom.xyz() ) );
129 HBEvalTuple hbtype( dnares.atom_base(datom_i), dnares, ratom_i, *rotamer );
133 ratom.xyz(), ratom.xyz() ,
135 Vector(-1.0, -1.0, -1.0) ,