31 #include <basic/Tracer.hh>
34 #include <utility/pointer/ReferenceCount.hh>
40 #include <utility/vector1.hh>
41 #include <utility/options/StringVectorOption.hh>
46 namespace downstream {
48 static basic::Tracer
TR(
"protocols.match.downstream.ClassicMatchAlgorithm" );
52 occspace_rev_id_at_last_update_( 0 )
70 std::list< DownstreamBuilderOP >
const & dsbuilders(
72 for ( std::list< DownstreamBuilderOP >::const_iterator
73 iter = dsbuilders.begin(),
74 iter_end = dsbuilders.end();
75 iter != iter_end; ++iter ) {
94 Size round_just_completed
101 TR <<
" hits." << std::endl;
104 if (
geom_cst_id() == 1 && round_just_completed == 1 ) {
111 iter != iter_end; ++iter ) {
112 occspace->insert_hit_geometry( iter->second() );
118 TR <<
"Updating the occupied space grid with " << matcher.
hits(
geom_cst_id() ).size();
119 TR <<
" hits from geometric constraint # " <<
geom_cst_id() << std::endl;
122 occspace->prepare_to_note_hits_for_completed_round();
129 iter != iter_end; ++iter ) {
130 occspace->note_hit_geometry( iter->second() );
133 occspace->drop_unsatisfied_voxels();
157 Size drop_count( 0 );
159 while ( iter != iter_end ) {
162 if ( ! occspace->previous_round_geometry_still_matchable( iter->second() ) ) {
179 Size const scaffold_build_point_id,
180 Size const upstream_conf_id,
184 std::list< Hit > local_hit_list;
188 utility_exit_with_message(
"ERROR: Classic Match Algorithm was expecting restype: " +
restype_->name() +
" but was given " + upstream_residue.
name() +
". Cannot continue" );
194 utility_exit_with_message(
"CRITICAL ERROR in ClassicMatchAlgorithm::build. ExternalGeomSampler transforms are not up-to-date" );
201 scaffold_build_point_id,
204 local_hit_list.splice( local_hit_list.end(), hits );
207 return local_hit_list;
230 utility_exit_with_message(
"Cannot invoke ClassicMatchAlgorithm::hits_to_include_with_partial_match()" );
250 iitotal *=
dsbuilders_[ ii ]->n_possible_hits_per_at3frame();
260 Size const which_external_sampler,
261 Size const scaffold_build_point_id,
262 Size const upstream_conf_id,
266 using namespace toolbox::match_enzdes_util;
275 std::list< Hit > hitlist;
278 radD1( dsbuilder->atom1_radius() ),
279 radD2( dsbuilder->atom2_radius()),
280 radD3( dsbuilder->atom3_radius() );
282 bool active_site_check_D1(
active_site_grid_set() && dsbuilder->atom1_belongs_in_active_site() );
283 bool active_site_check_D2(
active_site_grid_set() && dsbuilder->atom2_belongs_in_active_site() );
284 bool active_site_check_D3(
active_site_grid_set() && dsbuilder->atom3_belongs_in_active_site() );
290 HTReal ht_start( coord3, coord2, coord1 );
297 for (
Size ii = 1; ii <= exsampler.n_tor_U3D1_samples(); ++ii ) {
300 for (
Size jj = 1; jj <= exsampler.n_ang_U2D1_samples(); ++jj ) {
303 for (
Size kk = 1; kk <= exsampler.n_dis_U1D1_samples(); ++kk ) {
305 ht_kk.walk_along_z( exsampler.dis_U1D1_samples()[ kk ] );
306 Vector pD1 = ht_kk.point();
307 if ( radD1 >
ZERO &&
bbgrid().occupied( radD1, pD1 ))
continue;
308 if ( active_site_check_D1 && !
active_site_grid().occupied( pD1 ) )
continue;
310 for (
Size ll = 1; ll <= exsampler.n_tor_U2D2_samples(); ++ll ) {
313 for (
Size mm = 1; mm <= exsampler.n_ang_U1D2_samples(); ++mm ) {
315 Vector pD2 = ht_mm.point();
316 if ( radD2 >
ZERO &&
bbgrid().occupied( radD2, pD2 ))
continue;
317 if ( active_site_check_D2 && !
active_site_grid().occupied( pD2 ) )
continue;
319 for (
Size nn = 1; nn <= exsampler.n_tor_U1D3_samples(); ++nn ) {
321 Vector pD3 = ht_nn.point();
322 if ( radD3 >
ZERO &&
bbgrid().occupied( radD3, pD3 ))
continue;
323 if ( active_site_check_D3 && !
active_site_grid().occupied( pD3 ) )
continue;
325 std::list< Hit > nn_hits = dsbuilder->build(
327 scaffold_build_point_id,
331 hitlist.splice( hitlist.end(), nn_hits );
400 Size const exgeom_id,
413 utility_exit_with_message(
"ERROR in adding external geom sampler to ClassicMatchAlgorithm: " +
restype().name() +
" does not contain requested atom " + atom1 );
416 utility_exit_with_message(
"ERROR in adding external geom sampler to ClassicMatchAlgorithm: " +
restype().name() +
" does not contain requested atom " + atom2 );
419 utility_exit_with_message(
"ERROR in adding external geom sampler to ClassicMatchAlgorithm: " +
restype().name() +
" does not contain requested atom " + atom3 );
422 utility::fixedsizearray1< Size, 3 > atids;
435 samp.set_dis_D2D3( dsbuilder->atom2_atom3_distance() );
436 samp.set_ang_D1D2D3( dsbuilder->atom1_atom2_atom3_angle() );
437 samp.precompute_transforms();