31 #include <basic/Tracer.hh>
35 #include <utility/tag/Tag.hh>
38 #include <utility/vector0.hh>
39 #include <utility/vector1.hh>
42 static basic::Tracer
tr(
"protocols.fldsgn.filters.InterlockingAromaFilter");
50 Filter(
"InterlockingAroma" ),
52 contact_dist2_( numeric::
square( 5.5 ) ),
60 Filter(
"InterlockingAroma" ),
62 contact_dist2_( numeric::
square( 5.5 ) ),
71 filter_value_( rval.filter_value_ ),
72 contact_dist2_( rval.contact_dist2_ ),
73 input_ss_( rval.input_ss_ ),
74 verbose_( rval.verbose_ )
114 out <<
"InterlockingAroma: " <<
compute( pose ) << std::endl;
133 for (
Size iatm=1, iatm_end=residue.natoms(); iatm<=iatm_end; ++iatm ) {
134 if( residue.atom_type(
int(iatm) ).atom_type_name() ==
"aroC" ||
135 residue.atom_type(
int(iatm) ).atom_type_name() ==
"Ntrp" ) {
136 centroid += residue.atom( iatm ).xyz();
140 runtime_assert( natom != 0 );
141 centroid = centroid/
Real( natom );
147 iru = energy_graph.get_node( res )->const_edge_list_begin(),
150 Size stres( (*iru)->get_second_node_ind() );
151 if ( res == stres ) stres = (*iru)->get_first_node_ind();
153 if( ssinfo->strand_id( stres ) == 0 )
continue;
155 Vector cb( ssinfo->bb_pos().CB( stres ) );
156 Real const dsq( cb.distance_squared( centroid ) );
160 lockres.push_back( stres );
187 tr <<
"Residue " << res <<
" is interlocking with ";
188 for(
Size ii=1; ii<=lockres.size(); ii++ ) {
189 tr << lockres[ ii ] <<
" ";
215 ss = dssp.get_dssp_secstruct();
220 Size num_interlocked( 0 );
222 if( ss.at( ii-1 ) ==
'E' )
continue;
226 if(
compute( ii, pose, ssinfo ) ) num_interlocked++;
230 return Real(num_interlocked);
240 tr <<
"Successfully filtered: " << value << std::endl;
243 tr <<
"Filter failed current/threshold=" << value <<
"/" <<
filter_value_ << std::endl;
257 String const blueprint = tag->getOption<
String>(
"blueprint",
"" );
258 if( blueprint !=
"" ) {
269 verbose_ = tag->getOption<
bool>(
"verbose", 1 );