27 #include <basic/basic.hh>
38 #include <numeric/angle.functions.hh>
39 #include <numeric/interpolation/periodic_range/half/interpolation.hh>
42 #include <utility/pointer/ReferenceCount.hh>
43 #include <utility/io/izstream.hh>
46 #include <ObjexxFCL/FArray1D.hh>
47 #include <ObjexxFCL/FArray2D.hh>
48 #include <ObjexxFCL/FArray4D.hh>
51 #include <basic/Tracer.hh>
52 #include <numeric/conversions.hh>
54 static basic::Tracer
tr(
"core.scoring.dna.DNATorsionPotential" );
60 enum{
WHATEVER,
ALPHA,
BETA,
GAMMA,
DELTA,
EPSILON,
ZETA,
CHI,
NU0,
NU1,
NU2,
NU3,
NU4 };
66 DELTA_CUTOFF_( 115.0 ),
68 scale_dna_torsion_tether_( 0.05 ),
69 scale_dna_torsion_sd_( 1.0 / std::sqrt( scale_dna_torsion_tether_ ) ),
73 c2star_c3star_bond_length_( 1.526 ),
74 c2star_c3star_sd_( 1.0/ sqrt( 310.0 ) ),
75 c2star_c3star_dist_harm_func_( new constraints::
HarmonicFunc( c2star_c3star_bond_length_, scale_dna_torsion_sd_ * c2star_c3star_sd_ )),
77 c4star_c3star_c2star_bond_angle_( numeric::conversions::radians( 109.50 ) ),
78 c4star_c3star_c2star_angle_harm_func_(
79 new constraints::
HarmonicFunc( c4star_c3star_c2star_bond_angle_, scale_dna_torsion_sd_ * 1.0/sqrt( numeric::conversions::radians( 40.0 ) ) ) ),
81 o3star_c3star_c2star_bond_angle_( numeric::conversions::radians( 109.50 ) ),
82 o3star_c3star_c2star_angle_harm_func_(
83 new constraints::
HarmonicFunc( o3star_c3star_c2star_bond_angle_, scale_dna_torsion_sd_ * 1.0/sqrt( numeric::conversions::radians( 50.0 ) ) ) ),
85 c3star_c2star_c1star_bond_angle_( numeric::conversions::radians( 109.50 ) ),
86 c3star_c2star_c1star_angle_harm_func_(
87 new constraints::
HarmonicFunc( c3star_c2star_c1star_bond_angle_, scale_dna_torsion_sd_ * 1.0/sqrt( numeric::conversions::radians( 40.0 ) ) ) ),
134 if ( !rsd.
is_DNA() )
return;
181 using namespace core::chemical;
183 for(
Size i = 1; i < nres; ++i ){
186 if( !rsd.is_DNA() || !next_rsd.is_DNA() || rsd.is_upper_terminus() )
continue;
190 Size H68_index, next_H68_index;
191 if( rsd.type().aa() ==
na_ade || rsd.type().aa() ==
na_gua )
196 if( next_rsd.type().aa() ==
na_ade || next_rsd.type().aa() ==
na_gua )
201 Real angle_diff ( rsd.mainchain_torsion(5) - rsd.mainchain_torsion(6) );
232 using namespace numeric;
236 for (
Size i = 1; i <=nres; i++ ){
239 if (!rsd.is_DNA() )
continue;
324 Size const dna_torsion_number,
340 for(
Size this_comp = 1 ; this_comp <= torsion_components.size() ; ++this_comp ) {
461 Size const dna_torsion_number,
472 if( ( dna_torsion_number ==
ALPHA ) &&
477 if( ( dna_torsion_number ==
EPSILON ) &&
482 if( ( dna_torsion_number ==
ZETA ) &&
488 switch ( dna_torsion_number ) {
556 utility_exit_with_message(
"bad dna torsion type for DNATorsionPotential: " );