41 #include <basic/prof.hh>
42 #include <basic/Tracer.hh>
45 #include <utility/vector1.hh>
46 #include <utility/vector1.functions.hh>
49 #include <numeric/random/random.hh>
50 #include <numeric/random/random_permutation.hh>
63 #include <utility/vector0.hh>
72 static numeric::random::RandomGenerator
rottrials_RG(10801);
74 static basic::Tracer
TR(
"core.pack.rotamer_trials" );
98 PROF_START( basic::ROTAMER_TRIALS );
107 random_permutation( residues_for_trials,
rottrials_RG );
111 rottrial_task->set_bump_check(
false );
112 rottrial_task->or_include_current(
true );
113 rottrial_task->temporarily_fix_everything();
118 scfxn.
setup_for_packing( pose, rottrial_task->repacking_residues(), rottrial_task->designing_residues() );
125 bool replaced_residue(
false );
127 Size const num_in_trials = residues_for_trials.size();
128 for (
Size ii = 1; ii <= num_in_trials; ++ii)
132 int resid = residues_for_trials[ ii ];
137 rottrial_task->temporarily_set_pack_residue( resid,
true );
140 rotset->set_resid( resid );
141 rotset->build_rotamers( pose, scfxn, *rottrial_task, packer_neighbor_graph );
147 rotset->compute_one_body_energies(
148 pose, scfxn, *rottrial_task,
149 packer_neighbor_graph, one_body_energies );
152 Size bestrot = utility::arg_min( one_body_energies );
155 TR.Trace <<
"rottrial at position " << resid <<
" nrot= " << rotset->num_rotamers() << std::endl;
156 if ( bestrot != rotset->id_for_current_rotamer() )
158 replaced_residue =
true;
162 TR.Trace <<
"rottrial accept: " << resid <<
" bestrot: " << bestrot <<
' ' << one_body_energies[ bestrot ];
163 if( rotset->id_for_current_rotamer() != 0 ){
165 TR.Trace <<
' ' << one_body_energies[ rotset->id_for_current_rotamer() ] <<
' ' <<
166 one_body_energies[ bestrot ] - one_body_energies[ rotset->id_for_current_rotamer() ];
168 TR.Trace << std::endl;
171 rottrial_task->temporarily_set_pack_residue( resid,
false );
175 PROF_STOP ( basic::ROTAMER_TRIALS );
177 if ( replaced_residue ) {
193 to_be_packed[ count ] = ii;
207 using namespace conformation::symmetry;
210 PROF_START( basic::ROTAMER_TRIALS );
221 random_permutation( residues_for_trials,
rottrials_RG );
225 rottrial_task->set_bump_check(
false );
226 rottrial_task->or_include_current(
true );
227 rottrial_task->temporarily_fix_everything();
232 scfxn.
setup_for_packing( pose, rottrial_task->repacking_residues(), rottrial_task->designing_residues() );
239 bool replaced_residue(
false );
241 Size const num_in_trials = residues_for_trials.size();
242 for (
Size ii = 1; ii <= num_in_trials; ++ii)
246 int resid = residues_for_trials[ ii ];
251 rottrial_task->temporarily_set_pack_residue( resid,
true );
254 rotset->set_resid( resid );
255 rotset->build_rotamers( pose, scfxn, *rottrial_task, packer_neighbor_graph );
261 rotset->compute_one_body_energies(
262 pose, scfxn, *rottrial_task,
263 packer_neighbor_graph, one_body_energies );
266 Size bestrot = utility::arg_min( one_body_energies );
269 TR.Trace <<
"rottrial at position " << resid <<
" nrot= " << rotset->num_rotamers() << std::endl;
270 if ( bestrot != rotset->id_for_current_rotamer() )
272 replaced_residue =
true;
281 for ( std::vector< Size>::const_iterator
282 clone = symm_info->bb_clones( resid ).begin(),
283 clone_end = symm_info->bb_clones( resid ).end();
290 TR.Trace <<
"rottrial accept: " << resid <<
" bestrot: " << bestrot <<
' ' << one_body_energies[ bestrot ];
291 if( rotset->id_for_current_rotamer() != 0 ){
293 TR.Trace <<
' ' << one_body_energies[ rotset->id_for_current_rotamer() ] <<
' ' <<
294 one_body_energies[ bestrot ] - one_body_energies[ rotset->id_for_current_rotamer() ];
297 TR.Trace << std::endl;
300 rottrial_task->temporarily_set_pack_residue( resid,
false );
304 PROF_STOP ( basic::ROTAMER_TRIALS );
306 if ( replaced_residue ) {
319 using namespace conformation::symmetry;
323 dynamic_cast<SymmetricConformation const &> ( pose.
conformation() ) );
329 if ( the_task.
pack_residue( res ) && symm_info->fa_is_independent( res )
330 && res <= symm_info->num_total_residues() )
339 if ( the_task.
pack_residue( ii ) && symm_info->fa_is_independent( ii )
340 && ii <= symm_info->num_total_residues() )
343 to_be_packed[ count ] = ii;