Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
AtomRadiusMap.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/packstat/AtomRadiusMap.cc
11 ///
12 /// @brief
13 /// @author will sheffler
14 
15 
16 // Unit header or inline function header
18 
19 #include <basic/options/option.hh>
20 
21 // option key includes
22 
23 #include <basic/options/keys/packstat.OptionKeys.gen.hh>
24 
25 #include <utility/vector1.hh>
26 
27 
28 
29 
30 namespace core {
31 namespace scoring {
32 namespace packstat {
33 
34 using namespace std;
35 
37 
38 typedef pair<string const,string const> P;
39 
41 #ifdef WIN32
42  for( size_t i = 0; i < s.size(); ++i ) s[i] = toupper( s[i] );
43 #else
44  for( size_t i = 0; i < s.size(); ++i ) s[i] = std::toupper( s[i] );
45 #endif
46  // std::transform( s.begin(), s.end(), s.begin(), std::toupper );
47  return s;
48 }
49 
50 void type_map_add( map<P,PackstatReal> & type_map, string type, string res, PackstatReal rad ) {
53  type_map[ P(type,res) ] = rad;
54 }
55 
57  int include_water // -1 (default) means read from global options
58 ) {
59 
60  if( include_water < 0 ) {
61  using namespace basic::options;
62  include_water = option[ basic::options::OptionKeys::packstat::include_water ];
63  }
64 
65  // complete guesses
66  type_map_add( type_map_, "UNX", "*", 2 ); // unknown...
67  type_map_add( type_map_, "UNK", "*", 2 ); // say 2?
68 
69  type_map_add( type_map_, "XD", "*", 0 ); // deuterium?
70  type_map_add( type_map_, "D", "*", 0 ); //
71  type_map_add( type_map_, "1D", "*", 0 ); //
72  type_map_add( type_map_, "2D", "*", 0 ); //
73  type_map_add( type_map_, "3D", "*", 0 ); //
74  type_map_add( type_map_, "*DO5","*",0 ); //
75 
76  // from Chimera
77  type_map_add( type_map_, "al", "*", 0.54 );
78  type_map_add( type_map_, "as", "*", 0.58 );
79  type_map_add( type_map_, "au", "*", 1.37 );
80  type_map_add( type_map_, "ba", "*", 1.35 );
81  type_map_add( type_map_, "be", "*", 0.45 );
82  type_map_add( type_map_, "bi", "*", 1.03 );
83  type_map_add( type_map_, "ca", "*", 1.0 );
84  type_map_add( type_map_, "cd", "*", 0.95 );
85  type_map_add( type_map_, "co", "*", 0.65 );
86  type_map_add( type_map_, "cr", "*", 0.73 );
87  type_map_add( type_map_, "cs", "*", 1.67 );
88  type_map_add( type_map_, "cu", "*", 0.73 );
89  type_map_add( type_map_, "ga", "*", 0.62 );
90  type_map_add( type_map_, "ge", "*", 0.73 );
91  type_map_add( type_map_, "hg", "*", 1.02 );
92  type_map_add( type_map_, "li", "*", 0.76 );
93  type_map_add( type_map_, "mg", "*", 0.72 );
94  type_map_add( type_map_, "mn", "*", 0.83 );
95  type_map_add( type_map_, "mo", "*", 0.69 );
96  type_map_add( type_map_, "na", "*", 1.02 );
97  type_map_add( type_map_, "ni", "*", 0.69 );
98  type_map_add( type_map_, "pb", "*", 1.19 );
99  type_map_add( type_map_, "pd", "*", 0.86 );
100  type_map_add( type_map_, "pt", "*", 0.8 );
101  type_map_add( type_map_, "rb", "*", 1.52 );
102  type_map_add( type_map_, "sb", "*", 0.76 );
103  type_map_add( type_map_, "sc", "*", 0.75 );
104  type_map_add( type_map_, "sn", "*", 0.69 );
105  type_map_add( type_map_, "sr", "*", 1.18 );
106  type_map_add( type_map_, "tc", "*", 0.65 );
107  type_map_add( type_map_, "ti", "*", 0.86 );
108  type_map_add( type_map_, "v" , "*", 0.79 );
109  type_map_add( type_map_, "zn", "*", 0.74 );
110  type_map_add( type_map_, "zr", "*", 0.72 );
111 
112  // random web searches
113  type_map_add( type_map_, "b" , "*", 1.7 ); // boron?
114  type_map_add( type_map_, "re", "*", 1.37 ); // Rhenium?
115  type_map_add( type_map_, "rh", "*", 1.34 ); // Rhodium ?
116  type_map_add( type_map_, "ru", "*", 1.32 ); // Ruthenium?
117  type_map_add( type_map_, "tb", "*", 1.76 ); // terbium
118  type_map_add( type_map_, "tl", "*", 1.96 ); // thallium
119  type_map_add( type_map_, "xe", "*", 2.16 ); // xenon
120  type_map_add( type_map_, "y", "*", 1.77 ); // Yttrium
121  type_map_add( type_map_, "lu", "*", 1.71 ); // Lutetium
122  type_map_add( type_map_, "la", "*", 1.87 ); // Lanthanum
123  type_map_add( type_map_, "U" , "*", 1.86 ); // Uranium!
124  type_map_add( type_map_, "au", "*", 1.66 ); // gold
125  type_map_add( type_map_, "ta", "*", 1.43 ); // tantalum
126  type_map_add( type_map_, "eu", "*", 1.99 ); // europium
127  type_map_add( type_map_, "gd", "*", 1.78 ); // Gadolinium
128 
129  // from ccdc.cam.ac.uk quest
130  type_map_add( type_map_, "Ag", "*", 1.72 );
131  type_map_add( type_map_, "Ar", "*", 1.88 );
132  type_map_add( type_map_, "As", "*", 1.85 );
133  type_map_add( type_map_, "Au", "*", 1.66 );
134  type_map_add( type_map_, "Br", "*", 1.85 );
135  type_map_add( type_map_, "Cd", "*", 1.58 );
136  type_map_add( type_map_, "Cl", "*", 1.75 );
137  type_map_add( type_map_, "Cu", "*", 1.40 );
138  type_map_add( type_map_, "Ga", "*", 1.87 );
139  type_map_add( type_map_, "He", "*", 1.40 );
140  type_map_add( type_map_, "Hg", "*", 1.55 );
141  type_map_add( type_map_, "In", "*", 1.93 );
142  type_map_add( type_map_, "Kr", "*", 2.02 );
143  type_map_add( type_map_, "Li", "*", 1.82 );
144  type_map_add( type_map_, "Mg", "*", 1.73 );
145  type_map_add( type_map_, "Na", "*", 2.27 );
146  type_map_add( type_map_, "Ne", "*", 1.54 );
147  type_map_add( type_map_, "Ni", "*", 1.63 );
148  type_map_add( type_map_, "Pb", "*", 2.02 );
149  type_map_add( type_map_, "Pd", "*", 1.63 );
150  type_map_add( type_map_, "Pt", "*", 1.72 );
151  type_map_add( type_map_, "Se", "*", 1.90 );
152  type_map_add( type_map_, "Si", "*", 2.10 );
153  type_map_add( type_map_, "Sn", "*", 2.17 );
154  type_map_add( type_map_, "Te", "*", 2.06 );
155  type_map_add( type_map_, "Tl", "*", 1.96 );
156  type_map_add( type_map_, "U ", "*", 1.86 );
157  type_map_add( type_map_, "Xe", "*", 2.16 );
158  type_map_add( type_map_, "Zn", "*", 1.39 );
159 
160  // std rosetta stuff
161  type_map_add( type_map_, "C" ,"*", 2.0000 );
162  type_map_add( type_map_, "N" ,"*", 1.7500 );
163  type_map_add( type_map_, "O" ,"*", 1.5500 );
164  type_map_add( type_map_, "S" ,"*", 1.9000 );
165  type_map_add( type_map_, "N" ,"*", 1.7500 );
166  type_map_add( type_map_, "C" ,"*", 2.0000 );
167  type_map_add( type_map_, "O" ,"*", 1.5500 );
168  type_map_add( type_map_, "P" ,"*", 2.1500 );
169  type_map_add( type_map_, "F" ,"*", 1.7100 );
170  type_map_add( type_map_, "CL" ,"*", 2.0700 );
171  type_map_add( type_map_, "BR" ,"*", 2.2200 );
172  type_map_add( type_map_, "I" ,"*", 2.3600 );
173  type_map_add( type_map_, "ZN" ,"*", 1.0900 );
174  type_map_add( type_map_, "FE" ,"*", 0.7800 );
175  type_map_add( type_map_, "FE" ,"*", 0.6500 );
176  type_map_add( type_map_, "MG" ,"*", 1.1850 );
177  type_map_add( type_map_, "CA" ,"*", 1.3670 );
178  type_map_add( type_map_, "NA" ,"*", 1.3638 );
179  type_map_add( type_map_, "K" ,"*", 1.7638 );
180  type_map_add( type_map_, "CNH2","*", 2.0000 );
181  type_map_add( type_map_, "COO" ,"*", 2.0000 );
182  type_map_add( type_map_, "CH1" ,"*", 2.0000 );
183  type_map_add( type_map_, "CH2" ,"*", 2.0000 );
184  type_map_add( type_map_, "CH3" ,"*", 2.0000 );
185  type_map_add( type_map_, "aroC","*", 2.0000 );
186  type_map_add( type_map_, "Ntrp","*", 1.7500 );
187  type_map_add( type_map_, "Nhis","*", 1.7500 );
188  type_map_add( type_map_, "NH2O","*", 1.7500 );
189  type_map_add( type_map_, "Nlys","*", 1.7500 );
190  type_map_add( type_map_, "Narg","*", 1.7500 );
191  type_map_add( type_map_, "Npro","*", 1.7500 );
192  type_map_add( type_map_, "OH" ,"*", 1.5500 );
193  type_map_add( type_map_, "ONH2","*", 1.5500 );
194  type_map_add( type_map_, "OOC" ,"*", 1.5500 );
195  type_map_add( type_map_, "S" ,"*", 1.9000 );
196  type_map_add( type_map_, "Nbb" ,"*", 1.7500 );
197  type_map_add( type_map_, "CAbb","*", 2.0000 );
198  type_map_add( type_map_, "CObb","*", 2.0000 );
199  type_map_add( type_map_, "OCbb","*", 1.5500 );
200  type_map_add( type_map_, "Phos","*", 2.1500 );
201  type_map_add( type_map_, "F" ,"*", 1.7100 );
202  type_map_add( type_map_, "Cl" ,"*", 2.0700 );
203  type_map_add( type_map_, "Br" ,"*", 2.2200 );
204  type_map_add( type_map_, "I" ,"*", 2.3600 );
205  type_map_add( type_map_, "Zn","*", 1.0900 );
206  type_map_add( type_map_, "Fe","*", 0.7800 );
207  type_map_add( type_map_, "Mg","*", 1.1850 );
208  type_map_add( type_map_, "Ca","*", 1.3670 );
209  type_map_add( type_map_, "Na","*", 1.3638 );
210  type_map_add( type_map_, "K" ,"*", 1.7638 );
211  type_map_add( type_map_, "Cu" ,"*", 1.4 );
212 
213  if( include_water ) {
214  type_map_add( type_map_, "O" ,"HOH", 1.4 );
215  type_map_add( type_map_, "*" ,"HOH", 1.4 );
216  type_map_add( type_map_, "WA", "ADW", 1.4 ); // water?
217  type_map_add( type_map_, "WB", "ADW", 1.4 ); // water?
218  type_map_add( type_map_, "W", "*", 1.4 ); // water?
219  } else {
220  // no water!
221  type_map_add( type_map_, "O" ,"HOH", 0 );
222  type_map_add( type_map_, "*" ,"HOH", 0 );
223  type_map_add( type_map_, "WA", "ADW", 0 ); // water?
224  type_map_add( type_map_, "WB", "ADW", 0 ); // water?
225  type_map_add( type_map_, "W", "*", 0 ); // water?
226  }
227 
228  // virtual residues
229  type_map_add( type_map_, "*" ,"SCK", 0 );
230  type_map_add( type_map_, "VIRT" ,"*", 0 );
231  type_map_add( type_map_, "*" ,"X", 0 );
232 
233  // hydrogen
234  type_map_add( type_map_, "H" ,"*", HYDROGEN_RADIUS );
235  type_map_add( type_map_, "Hpol","*", HYDROGEN_RADIUS );
236  type_map_add( type_map_, "Hapo","*", HYDROGEN_RADIUS );
237  type_map_add( type_map_, "Haro","*", HYDROGEN_RADIUS );
238  type_map_add( type_map_, "HNbb","*", HYDROGEN_RADIUS );
239 
240 
241 }
242 
245  std::string type,
246  std::string res
247 ) const {
250 
251  if( type_map_.count( P(type,res) ) )
252  return type_map_.find( P(type,res) )->second;
253  if( type_map_.count( P(type,"*") ) )
254  return type_map_.find( P(type,"*") )->second;
255  if( type_map_.count( P("*" ,res) ) )
256  return type_map_.find( P("*" ,res) )->second;
257 
258  if( 'H' == type[1] && '0' <= type[0] && type[0] <= '9' ) return HYDROGEN_RADIUS;
259 
260  if( type.size() > 1 ) {
261  type = type.substr(0,type.size()-1);
262  return get_radius(type,res);
263  }
264 
265  return -1;
266 }
267 
268 } // namespace packstat
269 } // namespace scoring
270 } // namespace core