30 #include <basic/Tracer.hh>
43 #include <ObjexxFCL/FArray2.hh>
50 #include <utility/vector1.hh>
53 #include <ObjexxFCL/FArray2D.hh>
57 namespace rotamer_set {
60 static basic::Tracer
tt(
"core.pack.rotamer_set.symmetry.SymmetricRotamerSet_",basic::t_info );
85 using namespace conformation;
86 using namespace scoring;
96 dynamic_cast<SymmetricConformation const &> ( pose.
conformation() ) );
105 for (
int ii = 1; ii <= nrotamers; ++ii ) {
122 ir = packer_neighbor_graph->get_node( theresid )->const_edge_list_begin(),
123 ire = packer_neighbor_graph->get_node( theresid )->const_edge_list_end();
125 int const neighbor_id( (*ir)->get_other_ind( theresid ) );
128 uint const symm_clone ( symm_info->chi_follows( neighbor_id ) );
130 && symm_clone != theresid )
continue;
132 if ( symm_clone != theresid ) {
144 for (
int jj = 1; jj <= nrotamers; ++jj ) {
147 RotamerSetOP one_rotamer_set = rsf.create_rotamer_set( *sym_rsd );
148 one_rotamer_set->set_resid( theresid );
149 one_rotamer_set->add_rotamer( *sym_rsd );
156 ObjexxFCL::FArray2D< core::PackerEnergy > temp_energies( 1, 1, 0.0 );
159 *one_rotamer_set, *sym_rotset, pose, temp_energies );
162 energies[ jj ] += temp_energies[ 0 ]*symm_info->score_multiply( theresid, neighbor_id );
173 lr_iter != lr_end; ++lr_iter ) {
175 if ( !lrec || lrec->empty() )
continue;
179 rni = lrec->const_neighbor_iterator_begin( theresid ),
180 rniend = lrec->const_neighbor_iterator_end( theresid );
181 (*rni) != (*rniend); ++(*rni) ) {
182 Size const neighbor_id = rni->neighbor_id();
183 assert( neighbor_id != theresid );
187 if ( symm_info->chi_follows( theresid ) != neighbor_id ) {
191 (*lr_iter)->evaluate_rotamer_background_energies(
192 *
this, pose.
residue( neighbor_id ), pose, sf,
201 for (
int jj = 1; jj <= nrotamers; ++jj ) {
204 RotamerSetOP one_rotamer_set = rsf.create_rotamer_set( *sym_rsd );
205 one_rotamer_set->set_resid( theresid );
206 one_rotamer_set->add_rotamer( *sym_rsd );
212 ObjexxFCL::FArray2D< core::PackerEnergy > temp_energies( 1, 1, 0.0 );
214 (*lr_iter)->evaluate_rotamer_pair_energies(
215 *one_rotamer_set, *sym_rotset, pose, sf, sf.
weights(), temp_energies );
218 energies[ jj ] += temp_energies[ 0 ]*symm_info->score_multiply( theresid, neighbor_id );
231 for (
int ii = 1; ii <= nrotamers; ++ii ){
232 energies[ii] = energies[ii]*factor;
242 assert( energies.size() == add.size() );
244 for (
int ii = 1; ii <= nrotamers; ++ii ){
245 energies[ii] = energies[ii] + add[ii];
255 assert( energies.size() == subtract.size() );
257 for (
int ii = 1; ii <= nrotamers; ++ii ){
258 energies[ii] = energies[ii] - subtract[ii];
274 for (Rotamers::const_iterator
275 rot = rotset_in->begin(),
276 rot_end = rotset_in->end();
281 sym_rotamer_set->set_resid( sympos );
282 sym_rotamer_set->add_rotamer( target_rsd );
284 return sym_rotamer_set;