Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
util.cc
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 //
4 // (c) Copyright Rosetta Commons Member Institutions.
5 // (c) This file is part of the Rosetta software suite and is made available under license.
6 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
7 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
8 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
9 
10 /// @file core/scoring/util.cc
11 /// @brief Nonmember functions for evaluating some or all energy methods on residues or residue pairs
12 /// @author Andrew Leaver-Fay (aleaverfay@gmail.com)
13 
14 // Unit headers
15 #include <core/scoring/util.hh>
16 
17 // Package headers
22 
23 // Project headers
24 #include <core/types.hh>
26 
27 // Numeric headers
28 #include <numeric/xyzVector.hh>
29 
30 #include <utility/vector1.hh>
31 
32 
33 namespace core {
34 namespace scoring {
35 
36 void
38  conformation::Residue const & r1,
39  conformation::Residue const & r2,
40  Vector const & r1sc_centroid,
41  Vector const & r2sc_centroid,
42  Real const & r1sc_radius,
43  Real const & r2sc_radius,
44  pose::Pose const & pose,
45  ScoreFunction const & sfxn,
46  EnergyMap & emap
47 )
48 {
49  Real const scsc_d2 = r1sc_centroid.distance_squared( r2sc_centroid );
50  Real const scsc_radsum = r1sc_radius + r2sc_radius;
51  for ( ScoreFunction::CI_2B_Methods::const_iterator
52  iter = sfxn.ci_2b_begin(), iter_end = sfxn.ci_2b_end();
53  iter != iter_end; ++iter ) {
54  Real cutoff = scsc_radsum + (*iter)->atomic_interaction_cutoff();
55  if ( ! (*iter)->divides_backbone_and_sidechain_energetics() || scsc_d2 < cutoff * cutoff ) {
56  (*iter)->sidechain_sidechain_energy( r1, r2, pose, sfxn, emap );
57  }
58  }
59  for ( ScoreFunction::CD_2B_Methods::const_iterator
60  iter = sfxn.cd_2b_begin(), iter_end = sfxn.cd_2b_end();
61  iter != iter_end; ++iter ) {
62  Real cutoff = scsc_radsum + (*iter)->atomic_interaction_cutoff();
63  if ( ! (*iter)->divides_backbone_and_sidechain_energetics() || scsc_d2 < cutoff * cutoff ) {
64  (*iter)->sidechain_sidechain_energy( r1, r2, pose, sfxn, emap );
65  }
66  }
67 }
68 
69 void
71  conformation::Residue const & r1,
72  conformation::Residue const & r2,
73  Vector const & r1bb_centroid,
74  Vector const & r2sc_centroid,
75  Real const & r1bb_radius,
76  Real const & r2sc_radius,
77  pose::Pose const & pose,
78  ScoreFunction const & sfxn,
79  EnergyMap & emap
80 )
81 {
82  Real const bbsc_d2 = r1bb_centroid.distance_squared( r2sc_centroid );
83  Real const bbsc_radsum = r1bb_radius + r2sc_radius;
84  for ( ScoreFunction::CI_2B_Methods::const_iterator
85  iter = sfxn.ci_2b_begin(), iter_end = sfxn.ci_2b_end();
86  iter != iter_end; ++iter ) {
87  if ( (*iter)->divides_backbone_and_sidechain_energetics() ) {
88  Real cutoff = bbsc_radsum + (*iter)->atomic_interaction_cutoff();
89  if ( bbsc_d2 < cutoff * cutoff ) {
90  (*iter)->backbone_sidechain_energy( r1, r2, pose, sfxn, emap );
91  }
92  }
93  }
94  for ( ScoreFunction::CD_2B_Methods::const_iterator
95  iter = sfxn.cd_2b_begin(), iter_end = sfxn.cd_2b_end();
96  iter != iter_end; ++iter ) {
97  if ( (*iter)->divides_backbone_and_sidechain_energetics() ) {
98  Real cutoff = bbsc_radsum + (*iter)->atomic_interaction_cutoff();
99  if ( bbsc_d2 < cutoff * cutoff ) {
100  (*iter)->backbone_sidechain_energy( r1, r2, pose, sfxn, emap );
101  }
102  }
103  }
104 }
105 
106 void
108  conformation::Residue const & r1,
109  conformation::Residue const & r2,
110  Vector const & r1bb_centroid,
111  Vector const & r2bb_centroid,
112  Real const & r1bb_radius,
113  Real const & r2bb_radius,
114  pose::Pose const & pose,
115  ScoreFunction const & sfxn,
116  EnergyMap & emap
117 )
118 {
119  Real const bbbb_d2 = r1bb_centroid.distance_squared( r2bb_centroid );
120  Real const bbbb_radsum = r1bb_radius + r2bb_radius;
121  for ( ScoreFunction::CI_2B_Methods::const_iterator
122  iter = sfxn.ci_2b_begin(), iter_end = sfxn.ci_2b_end();
123  iter != iter_end; ++iter ) {
124  if ( (*iter)->divides_backbone_and_sidechain_energetics() ) {
125  Real cutoff = bbbb_radsum + (*iter)->atomic_interaction_cutoff();
126  if ( bbbb_d2 < cutoff * cutoff ) {
127  (*iter)->backbone_backbone_energy( r1, r2, pose, sfxn, emap );
128  }
129  }
130  }
131  for ( ScoreFunction::CD_2B_Methods::const_iterator
132  iter = sfxn.cd_2b_begin(), iter_end = sfxn.cd_2b_end();
133  iter != iter_end; ++iter ) {
134  if ( (*iter)->divides_backbone_and_sidechain_energetics() ) {
135  Real cutoff = bbbb_radsum + (*iter)->atomic_interaction_cutoff();
136  if ( bbbb_d2 < cutoff * cutoff ) {
137  (*iter)->backbone_backbone_energy( r1, r2, pose, sfxn, emap );
138  }
139  }
140  }
141 }
142 
143 /// @details returns the origin if there are no backbone atoms
144 Vector
146  conformation::Residue const & res
147 )
148 {
149  Vector bb_centroid( 0.0 );
150  Size count_n_bb( 0 );
151  for ( Size ii = 1; ii <= res.type().first_sidechain_atom() - 1; ++ii ) {
152  ++count_n_bb;
153  bb_centroid += res.xyz( ii );
154  }
155  if ( count_n_bb != 0 ) bb_centroid /= count_n_bb;
156  return bb_centroid;
157 }
158 
159 Real
161  conformation::Residue const & res,
162  Vector const & bb_centroid
163 )
164 {
165  Real bb_radius = 0;
166  for ( Size ii = 1; ii <= res.type().first_sidechain_atom() - 1; ++ii ) {
167  Real d2 = res.xyz( ii ).distance_squared( bb_centroid );
168  if ( bb_radius < d2 ) bb_radius = d2;
169  }
170  return bb_radius;
171 }
172 
173 Vector
175  conformation::Residue const & res
176 )
177 {
178  Vector centroid( 0.0 );
179  Size count( 0 );
180  for ( Size ii = res.type().first_sidechain_atom(); ii <= res.type().nheavyatoms(); ++ii ) {
181  count += 1;
182  centroid += res.xyz( ii );
183  }
184  if ( count == 0 ) {
185  return compute_bb_centroid( res );
186  } else {
187  centroid /= count;
188  return centroid;
189  }
190 }
191 
192 Real
194  conformation::Residue const & res,
195  Vector const & centroid
196 )
197 {
198  Real max_d2 = 0;
199  for ( Size ii = res.type().first_sidechain_atom(); ii <= res.type().nheavyatoms(); ++ii ) {
200  Real d2 = res.xyz(ii).distance_squared( centroid );
201  if ( d2 > max_d2 ) max_d2 = d2;
202  }
203  return std::sqrt( max_d2 );
204 }
205 
206 }
207 }