21 #include <utility/tag/Tag.hh>
44 #include <basic/options/option.hh>
45 #include <basic/options/keys/run.OptionKeys.gen.hh>
48 #include <basic/Tracer.hh>
62 #include <ObjexxFCL/string.functions.hh>
69 #include <utility/vector0.hh>
70 #include <utility/vector1.hh>
80 static basic::Tracer
TR(
"protocols.idealize.IdealizeMover" );
103 using namespace scoring::constraints;
104 using namespace conformation;
107 Real const heavyatom_dis2_threshold( 5.5 * 5.5 );
108 Real const polarH_dis2_threshold( 2.5 * 2.5 );
110 Real const atom_pair_sdev( 0.25 );
111 Real const coord_sdev( 0.1 );
115 Size total_atompairs( 0 );
120 TR.Info <<
"setting up symmetric idealize " << std::endl;
122 dynamic_cast<core::conformation::symmetry::SymmetricConformation &> ( pose.
conformation()) );
126 if ( atom_pair_constraint_weight_ != 0.0 || symm_info ) {
127 for (
Size i=1; i<= nres-1; ++i ) {
128 if( std::find( ignore_residues_in_csts().begin(), ignore_residues_in_csts().
end(), i ) != ignore_residues_in_csts().
end() )
continue;
132 for (
Size j=i+1; j<= nres-1; ++j ) {
133 if( std::find( ignore_residues_in_csts().begin(), ignore_residues_in_csts().
end(), j ) != ignore_residues_in_csts().end() )
continue;
138 if ( symm_info && !symm_info->bb_is_independent( i ) && !symm_info->bb_is_independent( j ) )
continue;
141 if ( symm_info && atom_pair_constraint_weight_ == 0.0 &&
142 symm_info->bb_is_independent( i ) && symm_info->bb_is_independent( j ) )
145 for (
Size ii = 1; ii<= i_rsd.natoms(); ++ii ) {
148 for (
Size jj = 1; jj<= j_rsd.natoms(); ++jj ) {
151 Real const dis2( i_rsd.xyz( ii ).distance_squared( j_rsd.xyz( jj ) ) );
153 if ( ( it.is_polar_hydrogen() && jt.is_acceptor() && dis2 < polarH_dis2_threshold ) ||
154 ( jt.is_polar_hydrogen() && it.is_acceptor() && dis2 < polarH_dis2_threshold ) ||
155 ( it.is_heavyatom() && jt.is_heavyatom() && dis2 < heavyatom_dis2_threshold ) ) {
168 TR.Info <<
"total atompairs: " << total_atompairs << std::endl;
170 if ( coordinate_constraint_weight_ != 0.0 ) {
173 for (
Size i=1; i<= nres-1; ++i ) {
179 for (
Size ii = 1; ii<= i_rsd.natoms(); ++ii ) {
191 using namespace scoring;
192 using namespace basic::options;
193 using namespace basic::options::OptionKeys;
200 if( impose_constraints() )
223 dynamic_cast<core::conformation::symmetry::SymmetricConformation &> ( pose.
conformation()) );
237 if (symm_info && atom_pair_constraint_weight_ == 0)
249 if( impose_constraints() )
250 setup_idealize_constraints( pose );
251 if( constraints_only() )
256 if ( pos_list_.size() == 0 ) {
261 pos_list_.push_back( i );
266 if( !(option[ basic::options::OptionKeys::run::dry_run ]() )){
267 basic_idealize( pose, pos_list_, *scorefxn, fast_, chainbreaks_ );
275 for (
Size ii = unmodified_pose.total_residue(); ii>=1; --ii ) {
276 if ( symm_info->bb_is_independent(ii) )
280 for (
Size ii = 1; ii <= unmodified_pose.total_residue(); ++ii ) {
281 final_pose.replace_residue( ii, pose.
residue( ii ), false );
292 TR.Info <<
"RMS between original pose and idealised pose: ";
302 return "IdealizeMover";
307 atom_pair_constraint_weight( tag->getOption<
core::Real >(
"atom_pair_constraint_weight", 0.0 ) );
308 coordinate_constraint_weight( tag->getOption<
core::Real >(
"coordinate_constraint_weight", 0.01 ) );
309 fast( tag->getOption<
bool >(
"fast",
false ) );
310 chainbreaks( tag->getOption<
bool >(
"chainbreaks",
false ) );
311 report_CA_rmsd( tag->getOption<
bool >(
"report_CA_rmsd",
true ) );
312 if( tag->hasOption(
"ignore_residues_in_csts" ) )
314 impose_constraints( tag->getOption<
bool >(
"impose_constraints", 1 ) );
315 constraints_only( tag->getOption<
bool >(
"constraints_only", 0 ) );
317 TR<<
"IdealizeMover with atom_pair_constraint_weight="<<atom_pair_constraint_weight_<<
" coordinate_constraint_weight="<<coordinate_constraint_weight_<<
" fast="<<fast_<<
" chainbreaks="<<chainbreaks_<<
" and report CA_rmsd_="<<report_CA_rmsd_<<
" impose constraints "<<impose_constraints()<<std::endl;
322 ignore_residues_in_csts_ = i;
327 return ignore_residues_in_csts_;