37 #include <basic/datacache/BasicDataCache.hh>
43 #include <utility/vector1.hh>
69 memb_etable_(memb_etable_in),
70 solv1_(memb_etable_in.solv1()),
71 solv2_(memb_etable_in.solv2()),
72 dsolv1_( memb_etable_in.dsolv1() ),
73 dsolv2_( memb_etable_in.dsolv2() ),
74 dsolv_( etable_in.dsolv() ),
75 memb_solv1_(memb_etable_in.memb_solv1()),
76 memb_solv2_(memb_etable_in.memb_solv2()),
77 memb_dsolv1_( memb_etable_in.memb_dsolv1() ),
78 memb_dsolv2_( memb_etable_in.memb_dsolv2() ),
79 safe_max_dis2_( etable_in.get_safe_max_dis2() ),
80 get_bins_per_A2_( etable_in.get_bins_per_A2()),
82 potential_(
ScoringManager::get_instance()->get_Membrane_FAPotential() )
120 Real fa_mbsolv_score( 0.0 );
134 Real & fa_mbsolv_score
138 bool const same_res = ( rsd1.
seqpos() == rsd2.
seqpos() );
139 Real temp_score (0.0);
141 using namespace etable::count_pair;
145 cpfxn = CountPairFactory::create_intrares_count_pair_function( rsd1,
CP_CROSSOVER_3 );
147 cpfxn = CountPairFactory::create_count_pair_function( rsd1, rsd2,
CP_CROSSOVER_4 );
152 Vector const heavy_atom_i( rsd1.
xyz( i ) );
156 Real cp_weight = 1.0;
Size path_dist( 0 );
157 if ( cpfxn->count( i, j, cp_weight, path_dist ) ) {
159 Vector const heavy_atom_j( rsd2.
xyz( j ) );
161 Vector const d_ij = heavy_atom_j - heavy_atom_i;
162 Real const d2 = d_ij.length_squared();
166 Real dummy_deriv( 0.0 );
171 temp_score = cp_weight *
eval_lk( rsd1.
atom( i ), rsd2.
atom( j ), d2, dummy_deriv,
175 if( same_res ) temp_score *= 0.5;
177 fa_mbsolv_score += temp_score;
217 Real temp_score( 0.0 );
220 bool const eval_deriv(
true );
225 int disbin =
static_cast< int >( d2_bin ) + 1;
226 Real frac = d2_bin - ( disbin - 1 );
233 int const l2 = l1 + 1;
249 temp_score = e1 + frac * ( e2 - e1 );
252 std::cout <<
"f1 s1l1 mbs1l1 s1l2 mbs1l2 " << f1 <<
" " <<
solv1_[
l1 ] <<
" " <<
memb_solv1_[
l1 ] <<
" " <<
254 std::cout <<
"f2 s2l1 mbs2l1 s2l2 mbs2l2 " << f2 <<
" " <<
solv2_[
l1 ] <<
" " <<
memb_solv2_[
l1 ] <<
" " <<
270 deriv = e1 + frac * ( e2 - e1 );
271 deriv = deriv / std::sqrt( d2 );
290 F1 = atom1.
xyz().cross( atom2.
xyz() );
291 F2 = atom1.
xyz() - atom2.
xyz();
295 d2 = atom1.
xyz().distance_squared( atom2.
xyz() );
301 disbin =
static_cast< int >( d2_bin ) + 1;
302 frac = d2_bin - ( disbin - 1 );
322 return deriv / std::sqrt( d2 );
345 if ( m > rsd1.nheavyatoms() )
return;
347 Vector const heavy_atom_i( rsd1.xyz( m ) );
349 bool const pos1_fixed( domain_map( i ) != 0 );
355 EnergyGraph const & energy_graph( energies.energy_graph() );
360 iter = energy_graph.get_node( i )->const_edge_list_begin(),
362 iter != itere; ++iter ) {
364 Size const j( (*iter)->get_other_ind( i ) );
366 if ( pos1_fixed && domain_map(i) == domain_map(j) )
continue;
369 bool const same_res = ( rsd1.seqpos() == rsd2.seqpos() );
371 using namespace etable::count_pair;
375 cpfxn = CountPairFactory::create_intrares_count_pair_function( rsd1,
CP_CROSSOVER_3 );
377 cpfxn = CountPairFactory::create_count_pair_function( rsd1, rsd2,
CP_CROSSOVER_4 );
380 for (
Size n = 1; n <= rsd2.nheavyatoms(); ++n ) {
382 Real cp_weight = 1.0;
Size path_dist(0);
384 if ( cpfxn->count(m, n, cp_weight, path_dist ) ) {
386 Vector const heavy_atom_j( rsd2.xyz( n ) );
387 Vector const d_ij = heavy_atom_j - heavy_atom_i;
388 Real const d2 = d_ij.length_squared();
390 Vector const d_ij_norm = d_ij.normalized();
395 Vector f1( 0.0 ), f2( 0.0 );
397 Real const dE_dR_over_r
401 if ( dE_dR_over_r != 0.0 ) {
403 F1 += 0.5 * dE_dR_over_r * cp_weight * f1;
404 F2 += 0.5 * dE_dR_over_r * cp_weight * f2;
406 F1 += dE_dR_over_r * cp_weight * f1;
407 F2 += dE_dR_over_r * cp_weight * f2;
433 Real fa_mbsolv_score( 0.0 );
449 if (
verbose_) std::cout <<
"DONE SCORING" << std::endl;